which included commits to RCS files with non-trunk default branches.
--- /dev/null
+static Int_t eventsPerRun = 100;
+enum PprGeo_t
+{
+ kHoles, kNoHoles
+};
+static PprGeo_t geo = kHoles;
+
+void Config()
+{
+ // 7-DEC-2000 09:00
+ // Switch on Transition Radiation simulation. 6/12/00 18:00
+ // iZDC=1 7/12/00 09:00
+ // ThetaRange is (0., 180.). It was (0.28,179.72) 7/12/00 09:00
+ // Theta range given through pseudorapidity limits 22/6/2001
+
+ // Set Random Number seed
+ gRandom->SetSeed(123456);
+
+
+ // libraries required by geant321
+ gSystem->Load("libgeant321");
+
+ new TGeant3("C++ Interface to Geant3");
+
+ if (!gSystem->Getenv("CONFIG_FILE"))
+ {
+ TFile *rootfile = new TFile("galice.root", "recreate");
+
+ rootfile->SetCompressionLevel(2);
+ }
+
+ TGeant3 *geant3 = (TGeant3 *) gMC;
+ AliIonPDGCodes *PDGcodes = new AliIonPDGCodes();
+ PDGcodes->AddParticlesToPdgDataBase();
+ geant3->DefineIons();
+
+ //
+ // Set External decayer
+ TVirtualMCDecayer *decayer = new AliDecayerPythia();
+
+ decayer->SetForceDecay(kAll);
+ decayer->Init();
+ gMC->SetExternalDecayer(decayer);
+ //
+ //
+ //=======================================================================
+ // ******* GEANT STEERING parameters FOR ALICE SIMULATION *******
+ geant3->SetTRIG(1); //Number of events to be processed
+ geant3->SetSWIT(4, 10);
+ geant3->SetDEBU(0, 0, 1);
+ //geant3->SetSWIT(2,2);
+ geant3->SetDCAY(1);
+ geant3->SetPAIR(1);
+ geant3->SetCOMP(1);
+ geant3->SetPHOT(1);
+ geant3->SetPFIS(0);
+ geant3->SetDRAY(0);
+ geant3->SetANNI(1);
+ geant3->SetBREM(1);
+ geant3->SetMUNU(1);
+ geant3->SetCKOV(1);
+ geant3->SetHADR(0); //Select pure GEANH (HADR 1) or GEANH/NUCRIN (HADR 3)
+ geant3->SetLOSS(2);
+ geant3->SetMULS(1);
+ geant3->SetRAYL(1);
+ geant3->SetAUTO(1); //Select automatic STMIN etc... calc. (AUTO 1) or manual (AUTO 0)
+ geant3->SetABAN(0); //Restore 3.16 behaviour for abandoned tracks
+ geant3->SetOPTI(2); //Select optimisation level for GEANT geometry searches (0,1,2)
+ geant3->SetERAN(5.e-7);
+
+ Float_t cut = 1.e-3; // 1MeV cut by default
+ Float_t tofmax = 1.e10;
+
+ // GAM ELEC NHAD CHAD MUON EBREM MUHAB EDEL MUDEL MUPA TOFMAX
+ geant3->SetCUTS(cut, cut, cut, cut, cut, cut, cut, cut, cut, cut,
+ tofmax);
+ //
+ //=======================================================================
+ // ************* STEERING parameters FOR ALICE SIMULATION **************
+ // --- Specify event type to be tracked through the ALICE setup
+ // --- All positions are in cm, angles in degrees, and P and E in GeV
+ // #### AliGenDPMjet generation ######################################
+ AliGenDPMjet *gener = new AliGenDPMjet(1);
+ gener->SetBeamEnergy(2700.);
+ gener->SetEnergyCMS(5400.);
+ gener->SetProjectile(208,82);
+ gener->SetTarget(208,82);
+ gener->SetImpactParameterRange(12.,16.);
+ gener->SetTrackingFlag(1);
+ gener->Init();
+ //
+ // Activate this line if you want the vertex smearing to happen
+ // track by track
+ //
+ //gener->SetVertexSmear(perTrack);
+ // Field (L3 0.4 T)
+ AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 2, 1., 10., 1);
+ rootfile->cd();
+ gAlice->SetField(field);
+
+
+ Int_t iABSO = 1;
+ Int_t iDIPO = 1;
+ Int_t iFMD = 0;
+ Int_t iFRAME = 0;
+ Int_t iHALL = 0;
+ Int_t iITS = 0;
+ Int_t iMAG = 0;
+ Int_t iMUON = 0;
+ Int_t iPHOS = 0;
+ Int_t iPIPE = 1;
+ Int_t iPMD = 0;
+ Int_t iRICH = 0;
+ Int_t iSHIL = 1;
+ Int_t iSTART = 0;
+ Int_t iTOF = 0;
+ Int_t iTPC = 0;
+ Int_t iTRD = 0;
+ Int_t iZDC = 1;
+ Int_t iEMCAL = 0;
+ Int_t iCRT = 0;
+ Int_t iVZERO = 0;
+
+ //=================== Alice BODY parameters =============================
+ AliBODY *BODY = new AliBODY("BODY", "Alice envelop");
+
+ if (iMAG)
+ {
+ //=================== MAG parameters ============================
+ // --- Start with Magnet since detector layouts may be depending ---
+ // --- on the selected Magnet dimensions ---
+ AliMAG *MAG = new AliMAG("MAG", "Magnet");
+ }
+
+
+ if (iABSO)
+ {
+ //=================== ABSO parameters ============================
+ AliABSO *ABSO = new AliABSOv0("ABSO", "Muon Absorber");
+ }
+
+ if (iDIPO)
+ {
+ //=================== DIPO parameters ============================
+
+ AliDIPO *DIPO = new AliDIPOv2("DIPO", "Dipole version 2");
+ }
+
+ if (iHALL)
+ {
+ //=================== HALL parameters ============================
+
+ AliHALL *HALL = new AliHALL("HALL", "Alice Hall");
+ }
+
+
+ if (iFRAME)
+ {
+ //=================== FRAME parameters ============================
+
+ AliFRAMEv2 *FRAME = new AliFRAMEv2("FRAME", "Space Frame");
+ if (geo == kHoles) {
+ FRAME->SetHoles(1);
+ } else {
+ FRAME->SetHoles(0);
+ }
+ }
+
+ if (iSHIL)
+ {
+ //=================== SHIL parameters ============================
+
+ AliSHIL *SHIL = new AliSHILv2("SHIL", "Shielding Version 2");
+ }
+
+
+ if (iPIPE)
+ {
+ //=================== PIPE parameters ============================
+
+ AliPIPE *PIPE = new AliPIPEv0("PIPE", "Beam Pipe");
+ }
+
+ if(iITS) {
+
+ //=================== ITS parameters ============================
+ //
+ // As the innermost detector in ALICE, the Inner Tracking System "impacts" on
+ // almost all other detectors. This involves the fact that the ITS geometry
+ // still has several options to be followed in parallel in order to determine
+ // the best set-up which minimizes the induced background. All the geometries
+ // available to date are described in the following. Read carefully the comments
+ // and use the default version (the only one uncommented) unless you are making
+ // comparisons and you know what you are doing. In this case just uncomment the
+ // ITS geometry you want to use and run Aliroot.
+ //
+ // Detailed geometries:
+ //
+ //
+ //AliITS *ITS = new AliITSv5symm("ITS","Updated ITS TDR detailed version with symmetric services");
+ //
+ //AliITS *ITS = new AliITSv5asymm("ITS","Updates ITS TDR detailed version with asymmetric services");
+ //
+ AliITSvPPRasymm *ITS = new AliITSvPPRasymm("ITS","New ITS PPR detailed version with asymmetric services");
+ ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer
+ ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer
+ // ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRasymm2.det"); // don't touch this parameter if you're not an ITS developer
+ ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300]
+ ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300]
+ ITS->SetThicknessChip1(200.); // chip thickness on layer 1 must be in the range [150,300]
+ ITS->SetThicknessChip2(200.); // chip thickness on layer 2 must be in the range [150,300]
+ ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
+ ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon
+ //
+ //AliITSvPPRsymm *ITS = new AliITSvPPRsymm("ITS","New ITS PPR detailed version with symmetric services");
+ //ITS->SetMinorVersion(2); // don't touch this parameter if you're not an ITS developer
+ //ITS->SetReadDet(kFALSE); // don't touch this parameter if you're not an ITS developer
+ //ITS->SetWriteDet("$ALICE_ROOT/ITS/ITSgeometry_vPPRsymm2.det"); // don't touch this parameter if you're not an ITS developer
+ //ITS->SetThicknessDet1(200.); // detector thickness on layer 1 must be in the range [100,300]
+ //ITS->SetThicknessDet2(200.); // detector thickness on layer 2 must be in the range [100,300]
+ //ITS->SetThicknessChip1(200.); // chip thickness on layer 1 must be in the range [150,300]
+ //ITS->SetThicknessChip2(200.); // chip thickness on layer 2 must be in the range [150,300]
+ //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
+ //ITS->SetCoolingFluid(1); // 1 --> water ; 0 --> freon
+ //
+ //
+ // Coarse geometries (warning: no hits are produced with these coarse geometries and they unuseful
+ // for reconstruction !):
+ //
+ //
+ //AliITSvPPRcoarseasymm *ITS = new AliITSvPPRcoarseasymm("ITS","New ITS PPR coarse version with asymmetric services");
+ //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
+ //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
+ //
+ //AliITS *ITS = new AliITSvPPRcoarsesymm("ITS","New ITS PPR coarse version with symmetric services");
+ //ITS->SetRails(0); // 1 --> rails in ; 0 --> rails out
+ //ITS->SetSupportMaterial(0); // 0 --> Copper ; 1 --> Aluminum ; 2 --> Carbon
+ //
+ //
+ //
+ // Geant3 <-> EUCLID conversion
+ // ============================
+ //
+ // SetEUCLID is a flag to output (=1) or not to output (=0) both geometry and
+ // media to two ASCII files (called by default ITSgeometry.euc and
+ // ITSgeometry.tme) in a format understandable to the CAD system EUCLID.
+ // The default (=0) means that you dont want to use this facility.
+ //
+ ITS->SetEUCLID(0);
+ }
+
+ if (iTPC)
+ {
+ //============================ TPC parameters ================================
+ // --- This allows the user to specify sectors for the SLOW (TPC geometry 2)
+ // --- Simulator. SecAL (SecAU) <0 means that ALL lower (upper)
+ // --- sectors are specified, any value other than that requires at least one
+ // --- sector (lower or upper)to be specified!
+ // --- Reminder: sectors 1-24 are lower sectors (1-12 -> z>0, 13-24 -> z<0)
+ // --- sectors 25-72 are the upper ones (25-48 -> z>0, 49-72 -> z<0)
+ // --- SecLows - number of lower sectors specified (up to 6)
+ // --- SecUps - number of upper sectors specified (up to 12)
+ // --- Sens - sensitive strips for the Slow Simulator !!!
+ // --- This does NOT work if all S or L-sectors are specified, i.e.
+ // --- if SecAL or SecAU < 0
+ //
+ //
+ //-----------------------------------------------------------------------------
+
+ // gROOT->LoadMacro("SetTPCParam.C");
+ // AliTPCParam *param = SetTPCParam();
+ AliTPC *TPC = new AliTPCv2("TPC", "Default");
+
+ // All sectors included
+ TPC->SetSecAL(-1);
+ TPC->SetSecAU(-1);
+
+ }
+
+
+ if (iTOF) {
+ if (geo == kHoles) {
+ //=================== TOF parameters ============================
+ AliTOF *TOF = new AliTOFv2FHoles("TOF", "TOF with Holes");
+ } else {
+ AliTOF *TOF = new AliTOFv4T0("TOF", "normal TOF");
+ }
+ }
+
+
+ if (iRICH)
+ {
+ //=================== RICH parameters ===========================
+ AliRICH *RICH = new AliRICHv3("RICH", "normal RICH");
+
+ }
+
+
+ if (iZDC)
+ {
+ //=================== ZDC parameters ============================
+
+ AliZDC *ZDC = new AliZDCv2("ZDC", "normal ZDC");
+ ZDC->NoShower();
+ }
+
+ if (iTRD)
+ {
+ //=================== TRD parameters ============================
+
+ AliTRD *TRD = new AliTRDv1("TRD", "TRD slow simulator");
+
+ // Select the gas mixture (0: 97% Xe + 3% isobutane, 1: 90% Xe + 10% CO2)
+ TRD->SetGasMix(1);
+ if (geo == kHoles) {
+ // With hole in front of PHOS
+ TRD->SetPHOShole();
+ // With hole in front of RICH
+ TRD->SetRICHhole();
+ }
+ // Switch on TR
+ AliTRDsim *TRDsim = TRD->CreateTR();
+ }
+
+ if (iFMD)
+ {
+ //=================== FMD parameters ============================
+ AliFMD *FMD = new AliFMDv1("FMD", "normal FMD");
+ FMD->SetRingsSi1(256);
+ FMD->SetRingsSi2(128);
+ FMD->SetSectorsSi1(20);
+ FMD->SetSectorsSi2(40);
+ }
+
+ if (iMUON)
+ {
+ //=================== MUON parameters ===========================
+
+ AliMUON *MUON = new AliMUONv1("MUON", "default");
+ }
+ //=================== PHOS parameters ===========================
+
+ if (iPHOS)
+ {
+ AliPHOS *PHOS = new AliPHOSv1("PHOS", "IHEP");
+ }
+
+
+ if (iPMD)
+ {
+ //=================== PMD parameters ============================
+ AliPMD *PMD = new AliPMDv1("PMD", "normal PMD");
+ }
+
+ if (iSTART)
+ {
+ //=================== START parameters ============================
+ AliSTART *START = new AliSTARTv1("START", "START Detector");
+ }
+
+ if (iEMCAL)
+ {
+ //=================== EMCAL parameters ============================
+ AliEMCAL *EMCAL = new AliEMCALv1("EMCAL", "G56_2_55_19_104_14");
+ }
+
+ if (iCRT)
+ {
+ //=================== CRT parameters ============================
+ AliCRT *CRT = new AliCRTv0("CRT", "normal ACORDE");
+ }
+
+ if (iVZERO)
+ {
+ //=================== CRT parameters ============================
+ AliVZERO *VZERO = new AliVZEROv2("VZERO", "normal VZERO");
+ }
+
+}
+
--- /dev/null
+
+ +-------------------------------------------------------------+
+ | |
+ | |
+ | DPMJET 3.0 |
+ | |
+ | |
+ | S. Roesler+), R. Engel#), J. Ranft*) |
+ | |
+ | +) CERN, TIS-RP |
+ | CH-1211 Geneva 23, Switzerland |
+ | Email: Stefan.Roesler@cern.ch |
+ | |
+ | #) University of Delaware, BRI |
+ | Newark, DE 19716, USA |
+ | |
+ | *) University of Siegen, Dept. of Physics |
+ | D-57068 Siegen, Germany |
+ | |
+ | |
+ | http://home.cern.ch/sroesler/dpmjet3.html |
+ | |
+ | |
+ | Monte Carlo models used for event generation: |
+ | PHOJET 1.12, PYTHIA 6.115 and LEPTO 6.5.1 |
+ | |
+ +-------------------------------------------------------------+
+
+
+
+ INPUT OPTIONS
+ _______________
+
+
+ The input of DPMJET consists of option cards. Option cards have all the
+ same structure and have to be given in fixed format except for the
+ section enclosed by PHOINPUT and ENDINPUT which can be given in free format.
+
+ CODEWD, (WHAT(I),I=1,6), SDUM (default fixed format is
+ A10,6E10.0,A8)
+
+ where:
+
+ - CODEWD is the option keyword
+ - The WHAT-parameters are numerical data
+ - SDUM may contain literal data
+
+ The order of the input cards is free, with the exception of the START card
+ which initiates event generation and the BEAM card (see below).
+
+ Most definitions have some default values. If these are acceptable,
+ it is not compulsory that the corresponding option card appear
+ explicitly in the input sequence. Similarly, for most WHAT and/or SDUM
+ parameters a default value is applied if the corresponding field is left
+ blank (or set = 0.0) in the input card.
+
+ Several option cards may appear more than once in the input sequence.
+ In most cases, each of such additional cards obviously adds more
+ definitions to those already given, provided they are different and not
+ contradictory. In case of conflict, the last given generally overrides
+ the previous one(s).
+
+ Any line starting with "*" is treated as a comment line.
+
+
+ 1) List of input options
+ ------------------------
+
+ *** general options ***
+
+ TITLE title of run
+ START start of event generation
+ STOP stop of the event generation
+ RNDMINIT initialization of random number generator
+
+ *** interacting particles ***
+
+ PROJPAR projectile parameters
+ TARPAR target parameters
+ EMULSION definition of nuclear target emulsions or composite targets
+
+ *** collision energy ***
+
+ ENERGY interaction energy (per nucleon, lab)
+ MOMENTUM interaction momentum (per nucleon, lab)
+ CMENERGY interaction energy (nucleon-nucleon cms)
+ BEAM definition of beam parameters
+
+ *** model for hadron / lepton / photon - nucleon interactions ***
+
+ MODEL model to be used to treat nucleon-nucleon interactions
+ PHOINPUT start of PHOJET-specific input
+ ENDINPUT end of PHOJET-specific input
+ HADRIN HADRIN module
+ LEPTO-CUT parameter CUT in LEPTO-common /LEPTOU/
+ LEPTO-LST parameter LST in LEPTO-common /LEPTOU/
+ LEPTO-PARL parameter PARL in LEPTO-common /LEPTOU/
+
+ *** Glauber formalism - cross sections ***
+
+ GLAUB-PAR parameters in Glauber-formalism
+ GLAUB-INI pre-initialization of profile function
+ FLUCTUAT treatment of cross section fluctuations
+ VDM-PAR1 parameters in gamma-nucleus cross section calculation
+ VDM-PAR2 parameters in gamma-nucleus cross section calculation
+ XS-TABLE output of cross section table for requested interaction
+ CENTRAL biasing in impact parameter
+
+ *** parameters in DPM two-chain approximation ***
+
+ RECOMBIN chain recombination
+ COMBIJET chain fusion
+ CRONINPT Cronin multiple scattering of partons
+ DIQUARKS sea-diquark/antidiquark-pairs
+
+ *** hadronization and JETSET-parameters ***
+
+ LUND-MSTU set parameter MSTU in JETSET-common /LUDAT1/
+ LUND-PARJ set parameter PARJ in JETSET-common /LUDAT1/
+ LUND-PARU set parameter PARJ in JETSET-common /LUDAT1/
+ POPCORN Popcorn-effect in fragmentation
+ PARDECAY decay of Sigma0, Asigma0, pion^0
+
+ *** nuclear fragmentation ***
+
+ FERMI Fermi momentum of nucleons
+ TAUFOR formation time suppressed intranuclear cascade
+ PAULI treatment of Pauli's principle
+ COULOMB treatment of Coulomb force
+ EVAP evaporation / fragmentation module
+
+ *** output and checks ***
+
+ FRAME Lorentz-frame in which final state is given in DTEVT1
+ HISTOGRAM activate different classes of histograms
+ EMCCHECK extended energy-momentum / quantum-number conservation check
+
+ *** lepton tagger ***
+
+ L-TAG lepton tagger (lepton-nucleus interactions only)
+ L-ETAG lepton tagger (lepton-nucleus interactions only)
+ ECMS-CUT lepton tagger (lepton-nucleus interactions only)
+
+ *** for code development only ***
+
+ INTPT intrinsic transverse momenta of partons
+ OUTLEVEL output control switches
+ RESONANC treatment of low mass chains
+ SEASU3 treatment of strange-quarks at chain ends
+ XCUTS thresholds for x-sampling
+
+
+ 2) Description of input options
+ -------------------------------
+
+
+ *** general options ***
+
+______________________________________________________________________
+
+ control card: codewd = TITLE
+
+ what (1..6), sdum no meaning
+
+ Note: The control-card following this card must consist of
+ a string of characters usually giving the title of
+ the run.
+______________________________________________________________________
+
+ control card: codewd = START
+
+ what (1) = number of events default: 100.
+______________________________________________________________________
+
+ control card: codewd = STOP
+
+ stop of the event generation
+
+ what (1..6) no meaning
+______________________________________________________________________
+
+ control card: RNDMINIT
+
+ initialization of random number generator
+
+ what (1..4) values for initialization (= 1..168)
+ what (5..6), sdum no meaning
+______________________________________________________________________
+
+
+ *** interacting particles ***
+
+______________________________________________________________________
+
+ control card: codewd = PROJPAR
+
+ definition of projectile properties
+
+ what (1) = (nucleus) mass number
+ (photon) virtuality Q^2
+ (lepton, PHOJET)
+ maximum virtuality Q^2 of emitted photon
+ (otherwise) no meaning
+ what (2) = (nucleus) charge number
+ (otherwise) no meaning
+ what (3..6) no meaning
+ sdum (hadrons,photons,leptons) particle code word
+
+ Note: In general, projectile nuclei are defined by what (1) and
+ what (2). All other projectiles are defined by sdum.
+______________________________________________________________________
+
+ control card: codewd = TARPAR
+
+ definition of target properties
+
+ what (1) = (nucleus) mass number
+ (otherwise) no meaning
+ what (2) = (nucleus) charge number
+ (otherwise) no meaning
+ what (3..6) no meaning
+ sdum (hadrons) particle code word
+
+ Note: In general, target nuclei are defined by what (1) and
+ what (2). Target hadrons are defined by sdum.
+______________________________________________________________________
+
+
+ control card: codewd = EMULSION
+
+ definition of nuclear target emulsions or composite targets
+
+ what(1) mass number of emulsion component
+ what(2) charge of emulsion component
+ what(3) fraction of events with this target
+ what(4,5,6) as what(1,2,3) but for a further component
+ default: no emulsion
+ sdum no meaning
+
+ Note: If this input-card is once used with valid parameters
+ TARPAR is obsolete. Not the absolute values of the fractions
+ are important but only relative values.
+ This control card can be repeatedly used to define
+ emulsions / composite targets consisting of up to 10
+ elements.
+______________________________________________________________________
+
+
+ *** collision energy ***
+
+______________________________________________________________________
+
+ control card: codewd = ENERGY
+
+ definition of laboratory energy
+
+ what (1) > 0: what (1) = total energy per nucleon (GeV)
+ < 0: |what(1)| = kinetic energy per nucleon (GeV)
+ default: 200 GeV
+ if |what(2)| > 0: min. total/kinetic energy per nucleon
+ for variable energy runs
+ what (2) max. energy per nucleon for variable energy runs
+ > 0: what (2) = total energy per nucleon (GeV)
+ < 0: |what(1)| = kinetic energy per nucleon (GeV)
+______________________________________________________________________
+
+ control card: codewd = MOMENTUM
+
+ definition of laboratory momentum
+
+ what (1) = momentum per nucleon (GeV/c) of projectile in Lab.
+ default: 200 GeV/c
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = CMENERGY
+
+ what (1) = nucleon-nucleon c.m. energy default: none
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = BEAM
+
+ definition of beam parameters
+
+ what (1/2) > 0 : energy per nucleon of beam 1/2 (GeV)
+ < 0 : |what(1/2)| = energy per charge of
+ beam 1/2 (GeV)
+ (beam 1 is directed into positive z-direction)
+ what (3) beam crossing angle, defined as 2x angle between
+ one beam and the z-axis (micro rad)
+ what (4) angle with x-axis defining the collision plane
+ what (5..6), sdum no meaning
+
+ Note: This card requires previously defined projectile and
+ target identities (PROJPAR, TARPAR) !
+______________________________________________________________________
+
+
+ *** model for hadron / lepton / photon - nucleon interactions ***
+
+______________________________________________________________________
+
+ control card: codewd = MODEL
+
+ Model used to describe nucleon(hadron,photon,lepton)-nucleon
+ interactions
+
+ what (1) (only if sdum = LEPTO)
+ variable INTER (see LEPTO-manual)
+ = 1 gamma exchange
+ = 2 W+- exchange
+ = 3 Z0 exchange
+ = 4 gamma/Z0 exchange
+
+ sdum = DTUNUC two-chain model as for versions 1.xx
+ (nucleon/hadron-nucleon interactions only)
+ = PHOJET multiple chains including minijets
+ = LEPTO DIS
+ default: PHOJET
+ what (2..6) no meaning
+______________________________________________________________________
+
+ control card: codewd = PHOINPUT
+
+ Start of PHOJET-specific input.
+ For details and a list of PHOJET input cards see the PHOJET-manual
+ available at
+ http://lepton.bartol.udel.edu/~eng/phojet.html
+ Note: This part of the input has to be closed by the ENDINPUT-card
+
+ what (1..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = ENDINPUT
+
+ End of PHOJET-specific input.
+ what (1..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = HADRIN
+
+ HADRIN module
+
+ what (1) = 0. elastic/inelastic interactions with probab.
+ as defined by cross-sections
+ = 1. inelastic interactions forced
+ = 2. elastic interactions forced default: 1
+ what (2) upper threshold in total energy (GeV) below
+ which interactions are sampled by HADRIN
+ default: steady transition btw. HADRIN and
+ DPM in the range 4-7 GeV
+ what (3..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = LEPTO-CUT
+
+ set parameter CUT in LEPTO-common /LEPTOU/
+
+ what (1) = index in CUT-array
+ what (2) = new value of CUT( int(what(1)) )
+ what (3), what(4) and what (5), what(6) further
+ parameter in the same way as what (1) and what (2)
+ default: default-LEPTO parameters
+
+ Note: see LEPTO-manual.
+______________________________________________________________________
+
+ control card: codewd = LEPTO-LST
+
+ set parameter LST in LEPTO-common /LEPTOU/
+
+ what (1) = index in LST-array
+ what (2) = new value of LST( int(what(1)) )
+ what (3), what(4) and what (5), what(6) further
+ parameter in the same way as what (1) and what (2)
+ default: default-LEPTO parameters
+
+ Note: see LEPTO-manual.
+______________________________________________________________________
+
+ control card: codewd = LEPTO-PARL
+
+ set parameter PARL in LEPTO-common /LEPTOU/
+
+ what (1) = index in PARL-array
+ what (2) = new value of PARL( int(what(1)) )
+ what (3), what(4) and what (5), what(6) further
+ parameter in the same way as what (1) and what (2)
+ default: default-LEPTO parameters
+
+ Note: see LEPTO-manual.
+______________________________________________________________________
+
+
+ *** Glauber formalism - cross sections ***
+
+______________________________________________________________________
+
+ control card: codewd = GLAUB-PAR
+
+ parameters in Glauber-formalism
+
+ what (1) number of nucleon configurations sampled in integration
+ over nuclear density default: 1000
+ what (2) number of bins for integration over impact-parameter and
+ for profile-function calculation default: 49
+ what (3) = 1 calculation of tot., el. and qel. cross sections
+ otherwise calculation of production cross sections only
+ default: 0
+ what (4) = 1 read pre-calculated impact-parameter distribution
+ from "sdum".glb for fixed projectile/target/energy
+ runs
+ = -1 dump calculated impact-parameter distribution
+ into "sdum".glb for fixed or variable projectile/
+ target/energy runs
+ = 100 read pre-calculated impact-parameter distribution
+ from "sdum".glb for variable projectile/target/
+ energy runs
+ default: 0
+ what (5..6) no meaning
+ sdum if |what (4)| = 1 name of in/output-file (sdum.glb)
+______________________________________________________________________
+
+ control card: codewd = GLAUB-INI
+
+ pre-initialization of profile function
+
+ what (1) lower energy limit for initialization
+ > 0 Lab. frame
+ < 0 nucleon-nucleon cms
+ what (2) upper energy limit for initialization
+ > 0 Lab. frame
+ < 0 nucleon-nucleon cms
+ what (3) > 0 # of equidistant lin. bins in E
+ < 0 # of equidistant log. bins in E
+ what (4) maximum projectile mass number for which the Glauber
+ data are initialized for each projectile mass number
+ (if <= mass given with the PROJPAR-card)
+ default: 18
+ what (5) steps in mass number starting from what (4)
+ up to mass number defined with PROJPAR-card
+ for which Glauber data are initialized
+ default: 5
+ what (6) no meaning
+ sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = FLUCTUAT
+
+ Treatment of cross section fluctuations
+
+ what (1) = 1 cross section fluctuations treated default: 0.
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+
+ control card: codewd = VDM-PAR1
+
+ parameters in gamma-nucleus cross section calculation
+
+ what (1) = Lambda^2 default: 2.
+ what (2) lower limit in M^2 integration
+ = 1 (3m_pi)^2
+ = 2 (m_rho0)^2
+ = 3 (m_phi)^2 default: 1
+ what (3) upper limit in M^2 integration
+ = 1 s/2
+ = 2 s/4
+ = 3 s default: 3
+ what (4) CKMT F_2 structure function
+ = 2212 proton
+ = 100 deuteron default: 2212
+ what (5) calculation of gamma-nucleon xsections
+ = 1 according to CKMT-parametrization of F_2
+ = 2 integrating SIGVP over M^2
+ = 3 using SIGGA
+ = 4 PHOJET cross sections default: 4
+
+ what (6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = VDM-PAR2
+
+ parameters in gamma-nucleus cross section calculation
+
+ what (1) = 0 no suppression of shadowing by direct photon
+ processes
+ = 1 suppression .. default: 1
+ what (2) = 0 no suppression of shadowing by anomalous
+ component if photon-F_2
+ = 1 suppression .. default: 1
+ what (3) = 0 no suppression of shadowing by coherence
+ length of the photon
+ = 1 suppression .. default: 1
+ what (4) = 1 longitudinal polarized photons are taken into
+ account
+ eps*R*Q^2/M^2 = what(4)*Q^2/M^2 default: 0
+ what (5..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = XS-TABLE
+
+ output of cross section table for requested interaction
+ - particle production deactivated ! -
+
+ what (1) lower energy limit for tabulation
+ > 0 Lab. frame
+ < 0 nucleon-nucleon cms
+ what (2) upper energy limit for tabulation
+ > 0 Lab. frame
+ < 0 nucleon-nucleon cms
+ what (3) > 0 # of equidistant lin. bins in E
+ < 0 # of equidistant log. bins in E
+ what (4) lower limit of particle virtuality (photons)
+ what (5) upper limit of particle virtuality (photons)
+ what (6) > 0 # of equidistant lin. bins in Q^2
+ < 0 # of equidistant log. bins in Q^2
+______________________________________________________________________
+
+ control card: codewd = CENTRAL
+
+ Biasing in impact parameter
+
+ what (1) = 1. central production
+ (not recommended, has to be updated)
+ what (1) < 0 and > -100
+ what (2) = min. impact parameter
+ what (3) = max. impact parameter
+ what (1) < -99
+ what (2) = fraction of cross section
+ what (4..6), sdum no meaning
+
+ Note: if what (1) = -1 : evaporation is suppressed
+ if what (1) < -1 : evaporation is allowed
+______________________________________________________________________
+
+
+ *** parameters in DPM two-chain approximation ***
+
+______________________________________________________________________
+
+ control card: codewd = RECOMBIN
+
+ Chain recombination
+ (recombine S-S and V-V chains to V-S chains)
+
+ what (1) = -1. recombination switched off default: 1
+ what (2..6), sdum no meaning
+
+ Note: Limited applicability for MODEL = PHOJET.
+______________________________________________________________________
+
+ control card: codewd = COMBIJET
+
+ chain fusion (2 q-aq --> qq-aqaq)
+
+ what (1) = 1 fusion treated default: 0.
+ what (2) minimum number of uncombined chains from
+ single projectile or target nucleons
+ default: 0.
+ what (3..6), sdum no meaning
+
+ Note: Limited applicability for MODEL = PHOJET.
+______________________________________________________________________
+
+ control card: codewd = CRONINPT
+
+ Cronin effect (multiple scattering of partons at chain ends)
+
+ what (1) = -1 Cronin effect not treated
+ default (h+A): 1 (A+A): 0
+ what (2) scattering parameter default: 0.64
+ what (3..6), sdum no meaning
+
+ Note: The Cronin-treatment should not be invoked for A+A int.
+______________________________________________________________________
+
+ control card: codewd = DIQUARKS
+
+ what (1) = -1. sea-diquark/antidiquark-pairs not treated
+ default: -1.
+ what (2..6), sdum no meaning
+
+ Note: Limited applicability for MODEL = PHOJET.
+______________________________________________________________________
+
+
+ *** hadronization and JETSET-parameters ***
+
+______________________________________________________________________
+
+ control card: codewd = LUND-MSTU
+
+ parameter MSTU in JETSET-common /LUDAT1/
+
+ what (1) = index according to LUND-common block
+ what (2) = new value of MSTU( int(what(1)) )
+ what (3), what(4) and what (5), what(6) further
+ parameter used in the same way as what (1) and what (2)
+
+ Note: The use of this card is not recommended. Some parameters
+ can presently not be changed with this card anyway.
+ Limited applicability for MODEL = PHOJET.
+______________________________________________________________________
+
+ control card: codewd = LUND-PARJ
+
+ parameter PARJ in JETSET-common /LUDAT1/
+
+ what (1) = index according to LUND-common block
+ what (2) = new value of PARJ( int(what(1)) )
+ what (3), what(4) and what (5), what(6) further
+ parameter used in the same way as what (1) and what (2)
+
+ Note: The use of this card is not recommended. Some parameters
+ can presently not be changed with this card anyway.
+ Limited applicability for MODEL = PHOJET.
+______________________________________________________________________
+
+ control card: codewd = LUND-PARU
+
+ parameter PARJ in JETSET-common /LUDAT1/
+
+ what (1) = index according to LUND-common block
+ what (2) = new value of PARU( int(what(1)) )
+ what (3), what(4) and what (5), what(6) further
+ parameter used in the same way as what (1) and what (2)
+
+ Note: The use of this card is not recommended. Some parameters
+ can presently not be changed with this card anyway.
+ Limited applicability for MODEL = PHOJET.
+______________________________________________________________________
+
+ control card: codewd = POPCORN
+
+ "Popcorn-effect" in fragmentation
+
+ what (1) < 0 Popcorn-effect switched off (MSTJ(12) = 1)
+ >=0 Popcorn-effect treated (PARJ(5) = what (1))
+ default: 0.15
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = PARDECAY
+
+ what (1) = 1. Sigma0/Asigma0 decay treated by JETSET
+ = 2. pion^0 decay after intranucl. cascade
+ default: 0 (no such decays)
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+
+ *** nuclear fragmentation ***
+
+______________________________________________________________________
+
+ control card: codewd = FERMI
+
+ what (1) = -1 Fermi-motion of nucleons not treated default: 1
+ what (2) = scale factor for Fermi-momentum default: 0.68
+ what (3..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = TAUFOR
+
+ formation time suppressed intranuclear cascade
+
+ what (1) formation time (in fm/c) default: 3.1 fm/c
+ what (2) number of generations followed default: 25
+ what (3) = 1. p_t-dependent formation zone
+ = 2. constant formation zone default: 1
+ what (4) modus of selection of nucleus where the
+ cascade if followed first
+ = 1. proj./target-nucleus with probab. 1/2
+ = 2. nucleus with highest mass
+ = 3. proj. nucleus if particle is moving in pos. z
+ targ. nucleus if particle is moving in neg. z
+ default: 1
+ what (5..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = PAULI
+
+ what (1) = -1 Pauli's principle for secondary
+ interactions not treated default: 1
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = COULOMB
+
+ what (1) = -1. Coulomb-energy treatment switched off default: 1
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = EVAP
+
+ evaporation module of FLUKA
+
+ The following options and defaults apply only if the code is linked
+ to the FLUKA-library (see README file).
+
+ what (1) =< -1 ==> evaporation is switched off
+ >= 1 ==> evaporation is performed
+
+ what (1) = i1 + i2*10 + i3*100 + i4*10000
+ (i1, i2, i3, i4 >= 0 )
+
+ i1 is the flag for selecting the T=0 level density option used
+ = 1: standard EVAP level densities with Cook pairing
+ energies
+ = 2: Z,N-dependent Gilbert & Cameron level densities
+ (default)
+ = 3: Julich A-dependent level densities
+ = 4: Z,N-dependent Brancazio & Cameron level densities
+
+ i2 >= 1: high energy fission activated
+ (default high energy fission is activated)
+
+ i3 = 0: No energy dependence for level densities
+ = 1: Standard Ignyatuk (1975, 1st) energy dependence
+ for level densities (default)
+ = 2: Standard Ignyatuk (1975, 1st) energy dependence
+ for level densities with NOT used set of parameters
+ = 3: Standard Ignyatuk (1975, 1st) energy dependence
+ for level densities with NOT used set of parameters
+ = 4: Second Ignyatuk (1975, 2nd) energy dependence
+ for level densities
+ = 5: Second Ignyatuk (1975, 2nd) energy dependence
+ for level densities with fit 1 Iljinov & Mebel set of
+ parameters
+ = 6: Second Ignyatuk (1975, 2nd) energy dependence
+ for level densities with fit 2 Iljinov & Mebel set of
+ parameters
+ = 7: Second Ignyatuk (1975, 2nd) energy dependence
+ for level densities with fit 3 Iljinov & Mebel set of
+ parameters
+ = 8: Second Ignyatuk (1975, 2nd) energy dependence
+ for level densities with fit 4 Iljinov & Mebel set of
+ parameters
+
+ i4 >= 1: Original Gilbert and Cameron pairing energies used
+ (default Cook's modified pairing energies)
+
+ what (2) = ig + 10 * if (ig and if must have the same sign)
+
+ ig =< -1 ==> deexcitation gammas are not produced
+ (if the evaporation step is not performed
+ they are never produced)
+ if =< -1 ==> Fermi Break Up is not invoked
+ (if the evaporation step is not performed
+ it is never invoked)
+ The default is: deexcitation gamma are produced and
+ Fermi break up is activated
+ what (3..6), sdum no meaning
+______________________________________________________________________
+
+
+ *** output and checks ***
+
+______________________________________________________________________
+
+ control card: codewd = FRAME
+
+ frame in which final state is given in DTEVT1
+
+ what (1) = 1 target rest frame (laboratory)
+ = 2 nucleon-nucleon cms default: 1
+______________________________________________________________________
+
+
+ control card: codewd = HISTOGRAM
+
+ activate different classes of histograms
+
+ default: no histograms
+______________________________________________________________________
+
+ control card: codewd = EMCCHECK
+
+ extended energy-momentum / quantum-number conservation check
+
+ what (1) = -1 extended check not performed default: -1.
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+
+ *** lepton tagger ***
+
+______________________________________________________________________
+
+ control card: codewd = L-TAG
+ (lepton-nucleus interactions with MODEL=PHOJET only)
+
+ lepton tagger:
+ definition of kinematic cuts for radiated photon and
+ outgoing lepton detection in lepton-nucleus interactions
+
+ what (1) = y_min
+ what (2) = y_max
+ what (3) = Q^2_min
+ what (4) = Q^2_max
+ what (5) = theta_min (Lab)
+ what (6) = theta_max (Lab) default: no cuts
+ sdum no meaning
+______________________________________________________________________
+
+
+ control card: codewd = L-ETAG
+ (lepton-nucleus interactions with MODEL=PHOJET only)
+
+ lepton tagger:
+ what (1) = min. outgoing lepton energy (in Lab)
+ what (2) = min. photon energy (in Lab)
+ what (3) = max. photon energy (in Lab) default: no cuts
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = ECMS-CUT
+ (lepton-nucleus interactions with MODEL=PHOJET only)
+
+ what (1) = min. c.m. energy to be sampled
+ what (2) = max. c.m. energy to be sampled
+ what (3) = min x_Bj to be sampled default: no cuts
+ what (3..6), sdum no meaning
+______________________________________________________________________
+
+
+ *** for code development only ***
+
+______________________________________________________________________
+
+ control card: codewd = INTPT
+
+ what (1) = -1 intrinsic transverse momenta of partons
+ not treated default: 1
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = OUTLEVEL
+
+ output control switches
+
+ what (1) = internal rejection informations default: 0
+ what (2) = energy-momentum conservation check output default: 0
+ what (3..6) internal warning messages default: 0
+______________________________________________________________________
+
+ control card: codewd = RESONANC
+
+ treatment of low mass chains
+
+ what (1) = -1 low chain masses are not corrected for resonance
+ masses default: 1.
+ what (2) = -1 massless partons default: 1. (massive)
+ what (3) = -1 chain-system containing chain of too small
+ mass is rejected (note: this does not fully
+ apply to S-S chains) default: 0.
+ what (4..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = SEASU3
+
+ Treatment of strange-quarks at chain ends
+
+ what (1) (SEASQ) strange-quark suppression factor
+ iflav = 1.+rndm*(2.+SEASQ) default: 1.
+ what (2..6), sdum no meaning
+______________________________________________________________________
+
+ control card: codewd = XCUTS
+
+ thresholds for x-sampling
+
+ what (1) defines lower threshold for val.-q x-value (CVQ)
+ default: 1.
+ what (2) defines lower threshold for val.-qq x-value (CDQ)
+ default: 2.
+ what (3) defines lower threshold for sea-q x-value (CSEA)
+ default: 0.2
+ what (4) sea-q x-values in S-S chains (SSMIMA) default: 0.14
+ what (5) not used default: 2.
+ what (6), sdum no meaning
+
+ Note: Lower thresholds (what(1..3)) are def. as x_thr=CXXX/ECM
+______________________________________________________________________
+
+
+
+ EVENT HISTORY - COMMON /DTEVT1/
+ _________________________________
+
+
+ 1) Common block DTEVT1
+ ----------------------
+
+ The complete history of each event can be found in COMMON /DTEVT1/
+ and COMMON /EXTEVT/.
+
+ COMMON /DTEVT1/ :
+ NHKK number of entries in common block
+ NEVHKK number of the event
+ ISTHKK(i) status code for entry i
+ IDHKK(i) identifier for the entry
+ (for particles: identifier according to the PDG scheme)
+ JMOHKK(1,i) pointer to the entry of the first mother of entry i
+ JMOHKK(2,i) pointer to the entry of the second mother of entry i
+ JDAHKK(1,i) pointer to the entry of the first daughter of entry i
+ JDAHKK(2,i) pointer to the entry of the second daughter of entry i
+ PHKK(1..3,i) 3-momentum
+ PHKK(4,i) energy
+ PHKK(5,i) mass
+ VHKK / WHKK spatial position of particle in target / projectile
+ rest frame
+
+ 2) Final state particles
+ ------------------------
+
+ The final state particles from the actual event (number NEVHKK)
+ can be found in DTEVT1 and identified by their status:
+
+ ISTHKK(i) = 1 final state particle produced in
+ photon-/hadron-/nucleon-nucleon collisions or
+ in intranuclear cascade processes
+ -1 nucleons, deuterons, H-3, He-3, He-4 evaporated
+ from excited nucleus, fragmentation and fission
+ products (A > 4) and photons produced in nuclear
+ deexcitation processes
+ 1001 residual nucleus (ground state)
+
+ The types of these particles/nuclei are given in IDHKK as follows
+
+ all final state particles except nuclei :
+ IDHKK(i)=particle identifier according to PDG numbering scheme
+ nuclei (A > 1: evaporation / fragmentation / fission products, and
+ residual nuclei) :
+ IDHKK(i)=80000, IDRES(i)=mass number, IDXRES(i)=charge number
+
+ The 4-momenta and masses can be found in PHKK (target nucleus rest frame
+ unless defined by the FRAME-card):
+ PHKK(1..3,i) 3-momentum (p_x,p_y,p_z)
+ PHKK(4,i) energy
+ PHKK(5,i) mass
--- /dev/null
+*
+* +-------------------------------------------------------------+
+* | |
+* | |
+* | DPMJET 3.0 |
+* | |
+* | |
+* | S. Roesler+), R. Engel#), J. Ranft*) |
+* | |
+* | +) CERN, TIS-RP |
+* | CH-1211 Geneva 23, Switzerland |
+* | Email: Stefan.Roesler@cern.ch |
+* | |
+* | #) University of Delaware, BRI |
+* | Newark, DE 19716, USA |
+* | |
+* | *) University of Siegen, Dept. of Physics |
+* | D-57068 Siegen, Germany |
+* | |
+* | |
+* | http://home.cern.ch/sroesler/dpmjet3.html |
+* | |
+* | |
+* | Monte Carlo models used for event generation: |
+* | PHOJET 1.12, JETSET 7.4 and LEPTO 6.5.1 |
+* | |
+* +-------------------------------------------------------------+
+*
+*
+*===init===============================================================*
+*
+CDECK ID>, DT_INIT
+ SUBROUTINE DT_INIT(NCASES,EPN,NPMASS,NPCHAR,NTMASS,NTCHAR,
+ & IDP,IGLAU)
+
+************************************************************************
+* Initialization of event generation *
+* This version dated 7.4.98 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* names of hadrons used in input-cards
+ CHARACTER*8 BTYPE
+ COMMON /DTPAIN/ BTYPE(30)
+
+ INCLUDE './flukapro/(DIMPAR)'
+ INCLUDE './flukapro/(PAREVT)'
+ INCLUDE './flukapro/(EVAPAR)'
+ INCLUDE './flukapro/(FRBKCM)'
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* interface HADRIN-DPM
+ COMMON /HNTHRE/ EHADTH,EHADLO,EHADHI,INTHAD,IDXTA
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+* parameter for intranuclear cascade
+ LOGICAL LPAULI
+ COMMON /DTFOTI/ TAUFOR,KTAUGE,ITAUVE,INCMOD,LPAULI
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+* threshold values for x-sampling (DTUNUC 1.x)
+ COMMON /DTXCUT/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ & SSMIMQ,VVMTHR
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* n-n cross section fluctuations
+ PARAMETER (NBINS = 1000)
+ COMMON /DTXSFL/ FLUIXX(NBINS),IFLUCT
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* parameters for hA-diffraction
+ COMMON /DTDIHA/ DIBETA,DIALPH
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* kinematical cuts for lepton-nucleus interactions
+ COMMON /DTLCUT/ ECMIN,ECMAX,XBJMIN,ELMIN,EGMIN,EGMAX,YMIN,YMAX,
+ & Q2MIN,Q2MAX,THMIN,THMAX,Q2LI,Q2HI,ECMLI,ECMHI
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+* cuts for variable energy runs
+ COMMON /DTVARE/ VARELO,VAREHI,VARCLO,VARCHI
+* flags for activated histograms
+ COMMON /DTHIS3/ IHISPP(50),IHISXS(50),IXSTBL
+
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+
+* LEPTO
+**LUND single / double precision
+ REAL CUT,PARL,TMPX,TMPY,TMPW2,TMPQ2,TMPU
+ COMMON /LEPTOU/ CUT(14),LST(40),PARL(30),
+ & TMPX,TMPY,TMPW2,TMPQ2,TMPU
+* LEPTO
+ REAL RPPN
+ COMMON /LEPTOI/ RPPN,LEPIN,INTER
+* steering flags for qel neutrino scattering modules
+ COMMON /QNEUTO/ DSIGSU,DSIGMC,NDSIG,NEUTYP,NEUDEC
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+ INTEGER PYCOMP
+
+C DIMENSION XPARA(5)
+ DIMENSION XDUMB(40),IPRANG(5)
+
+ PARAMETER (MXCARD=58)
+ CHARACTER*78 CLINE,CTITLE
+ CHARACTER*60 CWHAT
+ CHARACTER*8 BLANK,SDUM
+ CHARACTER*10 CODE,CODEWD
+ CHARACTER*72 HEADER
+ LOGICAL LSTART,LEINP,LXSTAB
+ DIMENSION WHAT(6),CODE(MXCARD)
+ DATA CODE/
+ & 'TITLE ','PROJPAR ','TARPAR ','ENERGY ',
+ & 'MOMENTUM ','CMENERGY ','EMULSION ','FERMI ',
+ & 'TAUFOR ','PAULI ','COULOMB ','HADRIN ',
+ & 'EVAP ','EMCCHECK ','MODEL ','PHOINPUT ',
+ & 'GLAUBERI ','FLUCTUAT ','CENTRAL ','RECOMBIN ',
+ & 'COMBIJET ','XCUTS ','INTPT ','CRONINPT ',
+ & 'SEADISTR ','SEASU3 ','DIQUARKS ','RESONANC ',
+ & 'DIFFRACT ','SINGLECH ','NOFRAGME ','HADRONIZE ',
+ & 'POPCORN ','PARDECAY ','BEAM ','LUND-MSTU ',
+ & 'LUND-MSTJ ','LUND-MDCY ','LUND-PARJ ','LUND-PARU ',
+ & 'OUTLEVEL ','FRAME ','L-TAG ','L-ETAG ',
+ & 'ECMS-CUT ','VDM-PAR1 ','HISTOGRAM ','XS-TABLE ',
+ & 'GLAUB-PAR ','GLAUB-INI ','VDM-PAR2 ','XS-QELPRO ',
+ & 'RNDMINIT ','LEPTO-CUT ','LEPTO-LST ','LEPTO-PARL',
+ & 'START ','STOP '/
+ DATA BLANK /' '/
+
+ DATA LSTART,LXSTAB,IFIRST /.TRUE.,.FALSE.,1/
+ DATA CMEOLD /0.0D0/
+
+* --- Added by Chiara
+
+ CHARACTER*100 ALIROOT
+ CHARACTER*100 FILNAM
+ INTEGER*4 LNROOT
+ LOGICAL EXISTS
+ ALIROOT=' '
+
+*---------------------------------------------------------------------
+* at the first call of INIT: initialize event generation
+ EPNSAV = EPN
+ IF (LSTART) THEN
+ CALL DT_TITLE
+* initialization and test of the random number generator
+ IF (ITRSPT.NE.1) THEN
+
+ CALL FL48UT (ISRM48,ISEED1,ISEED2)
+ CALL FL48IN (54217137,ISEED1,ISEED2)
+
+ ENDIF
+* initialization of BAMJET, DECAY and HADRIN
+ CALL DT_DDATAR
+ CALL DT_DHADDE
+ CALL DT_DCHANT
+ CALL DT_DCHANH
+* set default values for input variables
+ CALL DT_DEFAUL(EPN,PPN)
+ IGLAU = 0
+ IXSQEL = 0
+* flag for collision energy input
+ LEINP = .FALSE.
+ LSTART = .FALSE.
+ ENDIF
+
+*---------------------------------------------------------------------
+ 10 CONTINUE
+
+* bypass reading input cards (e.g. for use with Fluka)
+* in this case Epn is expected to carry the beam momentum
+ IF (NCASES.EQ.-1) THEN
+ IP = NPMASS
+ IPZ = NPCHAR
+ PPN = EPNSAV
+ EPN = ZERO
+ CMENER = ZERO
+ LEINP = .TRUE.
+ MKCRON = 0
+ WHAT(1) = 1
+ WHAT(2) = 0
+ CODEWD = 'START '
+ GOTO 900
+ ENDIF
+
+* read control card from input-unit LINP
+C READ(LINP,'(A78)',END=9999) CLINE
+* ### Read control card from specified file
+* ### Changed by Chiara (original version LINP=5)
+* OPEN(UNIT=7,
+* + FILE='/home/oppedisa/AliRoot/new/DPMJET/inp/PbPbLHC.inp',
+* + STATUS='OLD')
+
+ CALL GETENVF('ALICE_ROOT',ALIROOT)
+ LNROOT = LNBLNK(ALIROOT)
+
+ FILNAM=ALIROOT(1:LNROOT)//'/DPMJET/inp/PbPbLHC.inp'
+ OPEN(UNIT=7,FILE=FILNAM,STATUS='OLD')
+
+
+ READ(7,'(A78)',END=9999) CLINE
+
+ IF (CLINE(1:1).EQ.'*') THEN
+* comment-line
+C WRITE(LOUT,'(A78)') CLINE
+ GOTO 10
+ ENDIF
+C READ(CLINE,1000,END=9999) CODEWD,(WHAT(I),I=1,6),SDUM
+C1000 FORMAT(A10,6E10.0,A8)
+ DO 1008 I=1,6
+ WHAT(I) = ZERO
+ 1008 CONTINUE
+ READ(CLINE,1006,END=9999) CODEWD,CWHAT,SDUM
+ 1006 FORMAT(A10,A60,A8)
+ READ(CWHAT,*,END=1007) (WHAT(I),I=1,6)
+ 1007 CONTINUE
+ WRITE(LOUT,1001) CODEWD,(WHAT(I),I=1,6),SDUM
+ 1001 FORMAT(A10,6G10.3,A8)
+
+ 900 CONTINUE
+
+* check for valid control card and get card index
+ ICW = 0
+ DO 11 I=1,MXCARD
+ IF (CODEWD.EQ.CODE(I)) ICW = I
+ 11 CONTINUE
+ IF (ICW.EQ.0) THEN
+ WRITE(LOUT,1002) CODEWD
+ 1002 FORMAT(/,1X,'---> ',A10,': invalid control-card !',/)
+ GOTO 10
+ ENDIF
+
+ GOTO(
+*------------------------------------------------------------
+* TITLE , PROJPAR , TARPAR , ENERGY , MOMENTUM,
+ & 100 , 110 , 120 , 130 , 140 ,
+*
+*------------------------------------------------------------
+* CMENERGY, EMULSION, FERMI , TAUFOR , PAULI ,
+ & 150 , 160 , 170 , 180 , 190 ,
+*
+*------------------------------------------------------------
+* COULOMB , HADRIN , EVAP , EMCCHECK, MODEL ,
+ & 200 , 210 , 220 , 230 , 240 ,
+*
+*------------------------------------------------------------
+* PHOINPUT, GLAUBERI, FLUCTUAT, CENTRAL , RECOMBIN,
+ & 250 , 260 , 270 , 280 , 290 ,
+*
+*------------------------------------------------------------
+* COMBIJET, XCUTS , INTPT , CRONINPT, SEADISTR,
+ & 300 , 310 , 320 , 330 , 340 ,
+*
+*------------------------------------------------------------
+* SEASU3 , DIQUARKS, RESONANC, DIFFRACT, SINGLECH,
+ & 350 , 360 , 370 , 380 , 390 ,
+*
+*------------------------------------------------------------
+* NOFRAGME, HADRONIZE, POPCORN , PARDECAY, BEAM ,
+ & 400 , 410 , 420 , 430 , 440 ,
+*
+*------------------------------------------------------------
+* LUND-MSTU, LUND-MSTJ, LUND-MDCY, LUND-PARJ, LUND-PARU,
+ & 450 , 451 , 452 , 460 , 470 ,
+*
+*------------------------------------------------------------
+* OUTLEVEL, FRAME , L-TAG , L-ETAG , ECMS-CUT,
+ & 480 , 490 , 500 , 510 , 520 ,
+*
+*------------------------------------------------------------
+* VDM-PAR1, HISTOGRAM, XS-TABLE , GLAUB-PAR, GLAUB-INI,
+ & 530 , 540 , 550 , 560 , 565 ,
+*
+*------------------------------------------------------------
+* , , VDM-PAR2, XS-QELPRO, RNDMINIT ,
+ & 570 , 580 , 590 ,
+*
+*------------------------------------------------------------
+* LEPTO-CUT, LEPTO-LST,LEPTO-PARL, START , STOP )
+ & 600 , 610 , 620 , 630 , 640 ) , ICW
+*
+*------------------------------------------------------------
+
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = TITLE *
+* *
+* what (1..6), sdum no meaning *
+* *
+* Note: The control-card following this must consist of *
+* a string of characters usually giving the title of *
+* the run. *
+* *
+*********************************************************************
+
+ 100 CONTINUE
+C READ(LINP,'(A78)') CTITLE
+* ### Read control card from specified file
+* ### Changed by Chiara (original version LINP=5)
+ READ(7,'(A78)') CTITLE
+
+ WRITE(LOUT,'(//,5X,A78,//)') CTITLE
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = PROJPAR *
+* *
+* what (1) = mass number of projectile nucleus default: 1 *
+* what (2) = charge of projectile nucleus default: 1 *
+* what (3..6) no meaning *
+* sdum projectile particle code word *
+* *
+* Note: If sdum is defined what (1..2) have no meaning. *
+* *
+*********************************************************************
+
+ 110 CONTINUE
+ IF (SDUM.EQ.BLANK) THEN
+ IP = INT(WHAT(1))
+ IPZ = INT(WHAT(2))
+ IJPROJ = 1
+ IBPROJ = 1
+ ELSE
+ IJPROJ = 0
+ DO 111 II=1,30
+ IF (SDUM.EQ.BTYPE(II)) THEN
+ IP = 1
+ IPZ = 1
+ IF (II.EQ.26) THEN
+ IJPROJ = 135
+ ELSEIF (II.EQ.27) THEN
+ IJPROJ = 136
+ ELSEIF (II.EQ.28) THEN
+ IJPROJ = 133
+ ELSEIF (II.EQ.29) THEN
+ IJPROJ = 134
+ ELSE
+ IJPROJ = II
+ ENDIF
+ IBPROJ = IIBAR(IJPROJ)
+* photon
+ IF ((IJPROJ.EQ.7).AND.(WHAT(1).GT.ZERO)) VIRT = WHAT(1)
+* lepton
+ IF (((IJPROJ.EQ. 3).OR.(IJPROJ.EQ. 4).OR.
+ & (IJPROJ.EQ.10).OR.(IJPROJ.EQ.11)).AND.
+ & (WHAT(1).GT.ZERO)) Q2HI = WHAT(1)
+ ENDIF
+ 111 CONTINUE
+ IF (IJPROJ.EQ.0) THEN
+ WRITE(LOUT,1110)
+ 1110 FORMAT(/,1X,'invalid PROJPAR card !',/)
+ GOTO 9999
+ ENDIF
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = TARPAR *
+* *
+* what (1) = mass number of target nucleus default: 1 *
+* what (2) = charge of target nucleus default: 1 *
+* what (3..6) no meaning *
+* sdum target particle code word *
+* *
+* Note: If sdum is defined what (1..2) have no meaning. *
+* *
+*********************************************************************
+
+ 120 CONTINUE
+ IF (SDUM.EQ.BLANK) THEN
+ IT = INT(WHAT(1))
+ ITZ = INT(WHAT(2))
+ IJTARG = 1
+ IBTARG = 1
+ ELSE
+ IJTARG = 0
+ DO 121 II=1,30
+ IF (SDUM.EQ.BTYPE(II)) THEN
+ IT = 1
+ ITZ = 1
+ IJTARG = II
+ IBTARG = IIBAR(IJTARG)
+ ENDIF
+ 121 CONTINUE
+ IF (IJTARG.EQ.0) THEN
+ WRITE(LOUT,1120)
+ 1120 FORMAT(/,1X,'invalid TARPAR card !',/)
+ GOTO 9999
+ ENDIF
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = ENERGY *
+* *
+* what (1) = energy (GeV) of projectile in Lab. *
+* if what(1) < 0: |what(1)| = kinetic energy *
+* default: 200 GeV *
+* if |what(2)| > 0: min. energy for variable *
+* energy runs *
+* what (2) = max. energy for variable energy runs *
+* if what(2) < 0: |what(2)| = kinetic energy *
+* *
+*********************************************************************
+
+ 130 CONTINUE
+ EPN = WHAT(1)
+ PPN = ZERO
+ CMENER = ZERO
+ IF ((ABS(WHAT(2)).GT.ZERO).AND.
+ & (ABS(WHAT(2)).GT.ABS(WHAT(1)))) THEN
+ VARELO = WHAT(1)
+ VAREHI = WHAT(2)
+ EPN = VAREHI
+ ENDIF
+ LEINP = .TRUE.
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = MOMENTUM *
+* *
+* what (1) = momentum (GeV/c) of projectile in Lab. *
+* default: 200 GeV/c *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 140 CONTINUE
+ EPN = ZERO
+ PPN = WHAT(1)
+ CMENER = ZERO
+ LEINP = .TRUE.
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = CMENERGY *
+* *
+* what (1) = energy in nucleon-nucleon cms. *
+* default: none *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 150 CONTINUE
+ EPN = ZERO
+ PPN = ZERO
+ CMENER = WHAT(1)
+ LEINP = .TRUE.
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = EMULSION *
+* *
+* definition of nuclear emulsions *
+* *
+* what(1) mass number of emulsion component *
+* what(2) charge of emulsion component *
+* what(3) fraction of events in which a scattering on a *
+* nucleus of this properties is performed *
+* what(4,5,6) as what(1,2,3) but for another component *
+* default: no emulsion *
+* sdum no meaning *
+* *
+* Note: If this input-card is once used with valid parameters *
+* TARPAR is obsolete. *
+* Not the absolute values of the fractions are important *
+* but only the ratios of fractions of different comp. *
+* This control card can be repeatedly used to define *
+* emulsions consisting of up to 10 elements. *
+* *
+*********************************************************************
+
+ 160 CONTINUE
+ IF ((WHAT(1).GT.ZERO).AND.(WHAT(2).GT.ZERO)
+ & .AND.(ABS(WHAT(3)).GT.ZERO)) THEN
+ NCOMPO = NCOMPO+1
+ IF (NCOMPO.GT.NCOMPX) THEN
+ WRITE(LOUT,1600)
+ STOP
+ ENDIF
+ IEMUMA(NCOMPO) = INT(WHAT(1))
+ IEMUCH(NCOMPO) = INT(WHAT(2))
+ EMUFRA(NCOMPO) = WHAT(3)
+ IEMUL = 1
+C CALL SHMAKF(IDUM,IDUM,IEMUMA(NCOMPO),IEMUCH(NCOMPO))
+ ENDIF
+ IF ((WHAT(4).GT.ZERO).AND.(WHAT(5).GT.ZERO)
+ & .AND.(ABS(WHAT(6)).GT.ZERO)) THEN
+ NCOMPO = NCOMPO+1
+ IF (NCOMPO.GT.NCOMPX) THEN
+ WRITE(LOUT,1001)
+ STOP
+ ENDIF
+ IEMUMA(NCOMPO) = INT(WHAT(4))
+ IEMUCH(NCOMPO) = INT(WHAT(5))
+ EMUFRA(NCOMPO) = WHAT(6)
+C CALL SHMAKF(IDUM,IDUM,IEMUMA(NCOMPO),IEMUCH(NCOMPO))
+ ENDIF
+ 1600 FORMAT(1X,'too many emulsion components - program stopped')
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = FERMI *
+* *
+* what (1) = -1 Fermi-motion of nucleons not treated *
+* default: 1 *
+* what (2) = scale factor for Fermi-momentum *
+* default: 0.75 *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 170 CONTINUE
+ IF (WHAT(1).EQ.-1.0D0) THEN
+ LFERMI = .FALSE.
+ ELSE
+ LFERMI = .TRUE.
+ ENDIF
+ XMOD = WHAT(2)
+ IF (XMOD.GE.ZERO) FERMOD = XMOD
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = TAUFOR *
+* *
+* formation time supressed intranuclear cascade *
+* *
+* what (1) formation time (in fm/c) *
+* note: what(1)=10. corresponds roughly to an *
+* average formation time of 1 fm/c *
+* default: 5. fm/c *
+* what (2) number of generations followed *
+* default: 25 *
+* what (3) = 1. p_t-dependent formation zone *
+* = 2. constant formation zone *
+* default: 1 *
+* what (4) modus of selection of nucleus where the *
+* cascade if followed first *
+* = 1. proj./target-nucleus with probab. 1/2 *
+* = 2. nucleus with highest mass *
+* = 3. proj. nucleus if particle is moving in pos. z *
+* targ. nucleus if particle is moving in neg. z *
+* default: 1 *
+* what (5..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 180 CONTINUE
+ TAUFOR = WHAT(1)
+ KTAUGE = INT(WHAT(2))
+ INCMOD = 1
+ IF ((WHAT(3).GE.1.0D0).AND.(WHAT(3).LE.2.0D0))
+ & ITAUVE = INT(WHAT(3))
+ IF ((WHAT(4).GE.1.0D0).AND.(WHAT(4).LE.3.0D0))
+ & INCMOD = INT(WHAT(4))
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = PAULI *
+* *
+* what (1) = -1 Pauli's principle for secondary *
+* interactions not treated *
+* default: 1 *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 190 CONTINUE
+ IF (WHAT(1).EQ.-1.0D0) THEN
+ LPAULI = .FALSE.
+ ELSE
+ LPAULI = .TRUE.
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = COULOMB *
+* *
+* what (1) = -1. Coulomb-energy treatment switched off *
+* default: 1 *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 200 CONTINUE
+ ICOUL = 1
+ IF (WHAT(1).EQ.-1.0D0) THEN
+ ICOUL = 0
+ ELSE
+ ICOUL = 1
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = HADRIN *
+* *
+* HADRIN module *
+* *
+* what (1) = 0. elastic/inelastic interactions with probab. *
+* as defined by cross-sections *
+* = 1. inelastic interactions forced *
+* = 2. elastic interactions forced *
+* default: 1 *
+* what (2) upper threshold in total energy (GeV) below *
+* which interactions are sampled by HADRIN *
+* default: 5. GeV *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 210 CONTINUE
+ IWHAT = INT(WHAT(1))
+ IF ((IWHAT.GE.0).AND.(IWHAT.LE.2)) INTHAD = IWHAT
+ IF ((WHAT(2).GT.ZERO).AND.(WHAT(2).LT.15.0D0)) EHADTH = WHAT(2)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = EVAP *
+* *
+* evaporation module *
+* *
+* what (1) =< -1 ==> evaporation is switched off *
+* >= 1 ==> evaporation is performed *
+* *
+* what (1) = i1 + i2*10 + i3*100 + i4*10000 *
+* (i1, i2, i3, i4 >= 0 ) *
+* *
+* i1 is the flag for selecting the T=0 level density option used *
+* = 1: standard EVAP level densities with Cook pairing *
+* energies *
+* = 2: Z,N-dependent Gilbert & Cameron level densities *
+* (default) *
+* = 3: Julich A-dependent level densities *
+* = 4: Z,N-dependent Brancazio & Cameron level densities *
+* *
+* i2 >= 1: high energy fission activated *
+* (default high energy fission activated) *
+* *
+* i3 = 0: No energy dependence for level densities *
+* = 1: Standard Ignyatuk (1975, 1st) energy dependence *
+* for level densities (default) *
+* = 2: Standard Ignyatuk (1975, 1st) energy dependence *
+* for level densities with NOT used set of parameters *
+* = 3: Standard Ignyatuk (1975, 1st) energy dependence *
+* for level densities with NOT used set of parameters *
+* = 4: Second Ignyatuk (1975, 2nd) energy dependence *
+* for level densities *
+* = 5: Second Ignyatuk (1975, 2nd) energy dependence *
+* for level densities with fit 1 Iljinov & Mebel set of *
+* parameters *
+* = 6: Second Ignyatuk (1975, 2nd) energy dependence *
+* for level densities with fit 2 Iljinov & Mebel set of *
+* parameters *
+* = 7: Second Ignyatuk (1975, 2nd) energy dependence *
+* for level densities with fit 3 Iljinov & Mebel set of *
+* parameters *
+* = 8: Second Ignyatuk (1975, 2nd) energy dependence *
+* for level densities with fit 4 Iljinov & Mebel set of *
+* parameters *
+* *
+* i4 >= 1: Original Gilbert and Cameron pairing energies used *
+* (default Cook's modified pairing energies) *
+* *
+* what (2) = ig + 10 * if (ig and if must have the same sign) *
+* *
+* ig =< -1 ==> deexcitation gammas are not produced *
+* (if the evaporation step is not performed *
+* they are never produced) *
+* if =< -1 ==> Fermi Break Up is not invoked *
+* (if the evaporation step is not performed *
+* it is never invoked) *
+* The default is: deexcitation gamma produced and Fermi break up *
+* activated for the new preequilibrium, not *
+* activated otherwise. *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 220 CONTINUE
+
+ IF (WHAT(1).LE.-1.0D0) THEN
+ LEVPRT = .FALSE.
+ LDEEXG = .FALSE.
+ LHEAVY = .FALSE.
+ GOTO 10
+ ENDIF
+ WHTSAV = WHAT (1)
+ IF ( NINT (WHAT (1)) .GE. 10000 ) THEN
+ LLVMOD = .FALSE.
+ JLVHLP = NINT (WHAT (1)) / 10000
+ WHAT (1) = WHAT (1) - 10000.D+00 * JLVHLP
+ END IF
+ IF ( NINT (WHAT (1)) .GE. 100 ) THEN
+ JLVMOD = NINT (WHAT (1)) / 100
+ WHAT (1) = WHAT (1) - 100.D+00 * JLVMOD
+ END IF
+ IF ( NINT (WHAT (1)) .GE. 10 ) THEN
+ IFISS = 1
+ JLVHLP = NINT (WHAT (1)) / 10
+ WHAT (1) = WHAT (1) - 10.D+00 * JLVHLP
+ ELSE IF ( NINT (WHTSAV) .NE. 0 ) THEN
+ IFISS = 0
+ END IF
+ IF ( NINT (WHAT (1)) .GE. 0 ) THEN
+ LEVPRT = .TRUE.
+ ILVMOD = NINT (WHAT(1))
+ IF ( ABS (NINT (WHAT (2))) .GE. 10 ) THEN
+ LFRMBK = .TRUE.
+ JLVHLP = NINT (WHAT (2)) / 10
+ WHAT (2) = WHAT (2) - 10.D+00 * JLVHLP
+ ELSE IF ( NINT (WHAT (2)) .NE. 0 ) THEN
+ LFRMBK = .FALSE.
+ END IF
+ IF ( NINT (WHAT (2)) .GE. 0 ) THEN
+ LDEEXG = .TRUE.
+ ELSE
+ LDEEXG = .FALSE.
+ END IF
+**sr heavies are always put to /FKFHVY/
+C IF ( NINT (WHAT(3)) .GE. 1 ) THEN
+C LHEAVY = .TRUE.
+C ELSE
+C LHEAVY = .FALSE.
+C END IF
+ LHEAVY = .TRUE.
+ ELSE
+ LEVPRT = .FALSE.
+ LDEEXG = .FALSE.
+ LHEAVY = .FALSE.
+ END IF
+
+ LOLDEV = .FALSE.
+
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = EMCCHECK *
+* *
+* extended energy-momentum / quantum-number conservation check *
+* *
+* what (1) = -1 extended check not performed *
+* default: 1. *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 230 CONTINUE
+ IF (WHAT(1).EQ.-1) THEN
+ LEMCCK = .FALSE.
+ ELSE
+ LEMCCK = .TRUE.
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = MODEL *
+* *
+* Model to be used to treat nucleon-nucleon interactions *
+* *
+* sdum = DTUNUC two-chain model *
+* = PHOJET multiple chains including minijets *
+* = LEPTO DIS *
+* = QNEUTRIN quasi-elastic neutrino scattering *
+* default: PHOJET *
+* *
+* if sdum = LEPTO: *
+* what (1) (variable INTER) *
+* = 1 gamma exchange *
+* = 2 W+- exchange *
+* = 3 Z0 exchange *
+* = 4 gamma/Z0 exchange *
+* *
+* if sdum = QNEUTRIN: *
+* what (1) = 0 elastic scattering on nucleon and *
+* tau does not decay (default) *
+* = 1 decay of tau into mu.. *
+* = 2 decay of tau into e.. *
+* = 10 CC events on p and n *
+* = 11 NC events on p and n *
+* *
+* what (2..6) no meaning *
+* *
+*********************************************************************
+
+ 240 CONTINUE
+ IF (SDUM.EQ.CMODEL(1)) THEN
+ MCGENE = 1
+ ELSEIF (SDUM.EQ.CMODEL(2)) THEN
+ MCGENE = 2
+ ELSEIF (SDUM.EQ.CMODEL(3)) THEN
+ MCGENE = 3
+ IF ((WHAT(1).GE.1.0D0).AND.(WHAT(1).LE.4.0D0))
+ & INTER = INT(WHAT(1))
+ ELSEIF (SDUM.EQ.CMODEL(4)) THEN
+ MCGENE = 4
+ IWHAT = INT(WHAT(1))
+ IF ((IWHAT.EQ.1 ).OR.(IWHAT.EQ.2 ).OR.
+ & (IWHAT.EQ.10).OR.(IWHAT.EQ.11))
+ & NEUDEC = IWHAT
+ ELSE
+ STOP ' Unknown model !'
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = PHOINPUT *
+* *
+* Start of input-section for PHOJET-specific input-cards *
+* Note: This section will not be finished before giving *
+* ENDINPUT-card *
+* what (1..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 250 CONTINUE
+ IF (LPHOIN) THEN
+
+C CALL PHO_INIT(LINP,IREJ1)
+* ### Read control card from specified file
+* ### Changed by Chiara (original version LINP=5)
+ CALL PHO_INIT(7,IREJ1)
+
+ IF (IREJ1.NE.0) THEN
+ WRITE(LOUT,'(1X,A)')'INIT: reading PHOJET-input failed'
+ STOP
+ ENDIF
+ LPHOIN = .FALSE.
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = GLAUBERI *
+* *
+* Pre-initialization of impact parameter selection *
+* *
+* what (1..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 260 CONTINUE
+ IF (IFIRST.NE.99) THEN
+ CALL DT_RNDMST(12,34,56,78)
+ CALL DT_RNDMTE(1)
+ OPEN(40,FILE='shm.out',STATUS='UNKNOWN')
+C OPEN(11,FILE='shm.dbg',STATUS='UNKNOWN')
+ IFIRST = 99
+ ENDIF
+
+ IPPN = 8
+ PLOW = 10.0D0
+C IPPN = 1
+C PLOW = 100.0D0
+ PHI = 1.0D5
+ APLOW = LOG10(PLOW)
+ APHI = LOG10(PHI)
+ ADP = (APHI-APLOW)/DBLE(IPPN)
+
+ IPLOW = 1
+ IDIP = 1
+ IIP = 5
+C IPLOW = 1
+C IDIP = 1
+C IIP = 1
+ IPRANG(1) = 1
+ IPRANG(2) = 2
+ IPRANG(3) = 5
+ IPRANG(4) = 10
+ IPRANG(5) = 20
+
+ ITLOW = 30
+ IDIT = 3
+ IIT = 60
+C IDIT = 10
+C IIT = 21
+
+ DO 473 NCIT=1,IIT
+ IT = ITLOW+(NCIT-1)*IDIT
+C IPHI = IT
+C IDIP = 10
+C IIP = (IPHI-IPLOW)/IDIP
+C IF (IIP.EQ.0) IIP = 1
+C IF (IT.EQ.IPLOW) IIP = 0
+
+ DO 472 NCIP=1,IIP
+ IP = IPRANG(NCIP)
+CC IF (NCIP.LE.IIP) THEN
+C IP = IPLOW+(NCIP-1)*IDIP
+CC ELSE
+CC IP = IT
+CC ENDIF
+ IF (IP.GT.IT) GOTO 472
+
+ DO 471 NCP=1,IPPN+1
+ APPN = APLOW+DBLE(NCP-1)*ADP
+ PPN = 10**APPN
+
+ OPEN(12,FILE='shm.sta',STATUS='UNKNOWN')
+ WRITE(12,'(1X,2I5,E15.3)') IP,IT,PPN
+ CLOSE(12)
+
+ XLIM1 = 0.0D0
+ XLIM2 = 50.0D0
+ XLIM3 = ZERO
+ IBIN = 50
+ CALL DT_NEWHGR(XDUM,XDUM,XDUM,XDUMB,-1,IHDUM)
+ CALL DT_NEWHGR(XLIM1,XLIM2,XLIM3,XDUMB,IBIN,IHSHMA)
+
+ NEVFIT = 5
+C IF ((IP.GT.10).OR.(IT.GT.10)) THEN
+C NEVFIT = 5
+C ELSE
+C NEVFIT = 10
+C ENDIF
+ SIGAV = 0.0D0
+
+ DO 478 I=1,NEVFIT
+ CALL DT_SHMAKI(IP,IDUM1,IT,IDUM1,IJPROJ,PPN,99)
+ SIGAV = SIGAV+XSPRO(1,1,1)
+ DO 479 J=1,50
+ XC = DBLE(J)
+ CALL DT_FILHGR(XC,BSITE(1,1,1,J),IHSHMA,I)
+ 479 CONTINUE
+ 478 CONTINUE
+
+ CALL DT_EVTHIS(IDUM)
+ HEADER = ' BSITE'
+C CALL OUTGEN(IHSHMA,0,0,0,0,0,HEADER,0,NEVFIT,ONE,0,1,-1)
+
+C CALL GENFIT(XPARA)
+C WRITE(40,'(2I4,E11.3,F6.0,5E11.3)')
+C & IP,IT,PPN,SIGAV/DBLE(NEVFIT),XPARA
+
+ 471 CONTINUE
+
+ 472 CONTINUE
+
+ 473 CONTINUE
+
+ STOP
+
+*********************************************************************
+* *
+* control card: codewd = FLUCTUAT *
+* *
+* Treatment of cross section fluctuations *
+* *
+* what (1) = 1 treat cross section fluctuations *
+* default: 0. *
+* what (1..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 270 CONTINUE
+ IFLUCT = 0
+ IF (WHAT(1).EQ.ONE) THEN
+ IFLUCT = 1
+ CALL DT_FLUINI
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = CENTRAL *
+* *
+* what (1) = 1. central production forced default: 0 *
+* if what (1) < 0 and > -100 *
+* what (2) = min. impact parameter default: 0 *
+* what (3) = max. impact parameter default: b_max *
+* if what (1) < -99 *
+* what (2) = fraction of cross section default: 1 *
+* if what (1) = -1 : evaporation/fzc suppressed *
+* if what (1) < -1 : evaporation/fzc allowed *
+* *
+* what (4..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 280 CONTINUE
+ ICENTR = INT(WHAT(1))
+ IF (ICENTR.LT.0) THEN
+ IF (ICENTR.GT.-100) THEN
+ BIMIN = WHAT(2)
+ BIMAX = WHAT(3)
+ ELSE
+ XSFRAC = WHAT(2)
+ ENDIF
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = RECOMBIN *
+* *
+* Chain recombination *
+* (recombine S-S and V-V chains to V-S chains) *
+* *
+* what (1) = -1. recombination switched off default: 1 *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 290 CONTINUE
+ IRECOM = 1
+ IF (WHAT(1).EQ.-1.0D0) IRECOM = 0
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = COMBIJET *
+* *
+* chain fusion (2 q-aq --> qq-aqaq) *
+* *
+* what (1) = 1 fusion treated *
+* default: 0. *
+* what (2) minimum number of uncombined chains from *
+* single projectile or target nucleons *
+* default: 0. *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 300 CONTINUE
+ LCO2CR = .FALSE.
+ IF (INT(WHAT(1)).EQ.1) LCO2CR = .TRUE.
+ IF (WHAT(2).GE.ZERO) CUTOF = WHAT(2)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = XCUTS *
+* *
+* thresholds for x-sampling *
+* *
+* what (1) defines lower threshold for val.-q x-value (CVQ) *
+* default: 1. *
+* what (2) defines lower threshold for val.-qq x-value (CDQ) *
+* default: 2. *
+* what (3) defines lower threshold for sea-q x-value (CSEA) *
+* default: 0.2 *
+* what (4) sea-q x-values in S-S chains (SSMIMA) *
+* default: 0.14 *
+* what (5) not used *
+* default: 2. *
+* what (6), sdum no meaning *
+* *
+* Note: Lower thresholds (what(1..3)) are def. as x_thr=CXXX/ECM *
+* *
+*********************************************************************
+
+ 310 CONTINUE
+ IF (WHAT(1).GE.0.5D0) CVQ = WHAT(1)
+ IF (WHAT(2).GE.ONE) CDQ = WHAT(2)
+ IF (WHAT(3).GE.0.1D0) CSEA = WHAT(3)
+ IF (WHAT(4).GE.ZERO) THEN
+ SSMIMA = WHAT(4)
+ SSMIMQ = SSMIMA**2
+ ENDIF
+ IF (WHAT(5).GT.2.0D0) VVMTHR = WHAT(5)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = INTPT *
+* *
+* what (1) = -1 intrinsic transverse momenta of partons *
+* not treated default: 1 *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 320 CONTINUE
+ IF (WHAT(1).EQ.-1.0D0) THEN
+ LINTPT = .FALSE.
+ ELSE
+ LINTPT = .TRUE.
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = CRONINPT *
+* *
+* Cronin effect (multiple scattering of partons at chain ends) *
+* *
+* what (1) = -1 Cronin effect not treated default: 1 *
+* what (2) = 0 scattering parameter default: 0.64 *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 330 CONTINUE
+ IF (WHAT(1).EQ.-1.0D0) THEN
+ MKCRON = 0
+ ELSE
+ MKCRON = 1
+ ENDIF
+ CRONCO = WHAT(2)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = SEADISTR *
+* *
+* what (1) (XSEACO) sea(x) prop. 1/x**what (1) default: 1. *
+* what (2) (UNON) default: 2. *
+* what (3) (UNOM) default: 1.5 *
+* what (4) (UNOSEA) default: 5. *
+* qdis(x) prop. (1-x)**what (1) etc. *
+* what (5..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 340 CONTINUE
+ XSEACO = WHAT(1)
+ XSEACU = 1.05D0-XSEACO
+ UNON = WHAT(2)
+ IF (UNON.LT.0.1D0) UNON = 2.0D0
+ UNOM = WHAT(3)
+ IF (UNOM.LT.0.1D0) UNOM = 1.5D0
+ UNOSEA = WHAT(4)
+ IF (UNOSEA.LT.0.1D0) UNOSEA = 5.0D0
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = SEASU3 *
+* *
+* Treatment of strange-quarks at chain ends *
+* *
+* what (1) (SEASQ) strange-quark supression factor *
+* iflav = 1.+rndm*(2.+SEASQ) *
+* default: 1. *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 350 CONTINUE
+ SEASQ = WHAT(1)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = DIQUARKS *
+* *
+* what (1) = -1. sea-diquark/antidiquark-pairs not treated *
+* default: 1. *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 360 CONTINUE
+ IF (WHAT(1).EQ.-1.0D0) THEN
+ LSEADI = .FALSE.
+ ELSE
+ LSEADI = .TRUE.
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = RESONANC *
+* *
+* treatment of low mass chains *
+* *
+* what (1) = -1 low chain masses are not corrected for resonance *
+* masses (obsolete for BAMJET-fragmentation) *
+* default: 1. *
+* what (2) = -1 massless partons default: 1. (massive) *
+* default: 1. (massive) *
+* what (3) = -1 chain-system containing chain of too small *
+* mass is rejected (note: this does not fully *
+* apply to S-S chains) default: 0. *
+* what (4..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 370 CONTINUE
+ IRESCO = 1
+ IMSHL = 1
+ IRESRJ = 0
+ IF (WHAT(1).EQ.-ONE) IRESCO = 0
+ IF (WHAT(2).EQ.-ONE) IMSHL = 0
+ IF (WHAT(3).EQ.-ONE) IRESRJ = 1
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = DIFFRACT *
+* *
+* Treatment of diffractive events *
+* *
+* what (1) = (ISINGD) 0 no single diffraction *
+* 1 single diffraction included *
+* +-2 single diffractive events only *
+* +-3 projectile single diffraction only *
+* +-4 target single diffraction only *
+* -5 double pomeron exchange only *
+* (neg. sign applies to PHOJET events) *
+* default: 0. *
+* *
+* what (2) = (IDOUBD) 0 no double diffraction *
+* 1 double diffraction included *
+* 2 double diffractive events only *
+* default: 0. *
+* what (3) = 1 projectile diffraction treated (2-channel form.) *
+* default: 0. *
+* what (4) = alpha-parameter in projectile diffraction *
+* default: 0. *
+* what (5..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 380 CONTINUE
+ IF (ABS(WHAT(1)).GT.ZERO) ISINGD = INT(WHAT(1))
+ IF (ABS(WHAT(2)).GT.ZERO) IDOUBD = INT(WHAT(2))
+ IF ((ISINGD.GT.1).AND.(IDOUBD.GT.1)) THEN
+ WRITE(LOUT,1380)
+ 1380 FORMAT(1X,'INIT: inconsistent DIFFRACT - input !',/,
+ & 11X,'IDOUBD is reset to zero')
+ IDOUBD = 0
+ ENDIF
+ IF (WHAT(3).GT.ZERO) DIBETA = WHAT(3)
+ IF (WHAT(4).GT.ZERO) DIALPH = WHAT(4)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = SINGLECH *
+* *
+* what (1) = 1. Regge contribution (one chain) included *
+* default: 0. *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 390 CONTINUE
+ ISICHA = 0
+ IF (WHAT(1).EQ.ONE) ISICHA = 1
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = NOFRAGME *
+* *
+* biased chain hadronization *
+* *
+* what (1..6) = -1 no of hadronizsation of S-S chains *
+* = -2 no of hadronizsation of D-S chains *
+* = -3 no of hadronizsation of S-D chains *
+* = -4 no of hadronizsation of S-V chains *
+* = -5 no of hadronizsation of D-V chains *
+* = -6 no of hadronizsation of V-S chains *
+* = -7 no of hadronizsation of V-D chains *
+* = -8 no of hadronizsation of V-V chains *
+* = -9 no of hadronizsation of comb. chains *
+* default: complete hadronization *
+* sdum no meaning *
+* *
+*********************************************************************
+
+ 400 CONTINUE
+ DO 401 I=1,6
+ ICHAIN = INT(WHAT(I))
+ IF ((ICHAIN.LE.-1).AND.(ICHAIN.GE.-9))
+ & LHADRO(ABS(ICHAIN)) = .FALSE.
+ 401 CONTINUE
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = HADRONIZE *
+* *
+* hadronization model and parameter switch *
+* *
+* what (1) = 1 hadronization via BAMJET *
+* = 2 hadronization via JETSET *
+* default: 2 *
+* what (2) = 1..3 parameter set to be used *
+* JETSET: 3 sets available *
+* ( = 3 default JETSET-parameters) *
+* BAMJET: 1 set available *
+* default: 1 *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 410 CONTINUE
+ IWHAT1 = INT(WHAT(1))
+ IWHAT2 = INT(WHAT(2))
+ IF ((IWHAT1.EQ.1).OR.(IWHAT1.EQ.2)) IFRAG(1) = IWHAT1
+ IF ((IWHAT1.EQ.2).AND.(IWHAT2.GE.1).AND.(IWHAT2.LE.3))
+ & IFRAG(2) = IWHAT2
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = POPCORN *
+* *
+* "Popcorn-effect" in fragmentation and diquark breaking diagrams *
+* *
+* what (1) = (PDB) frac. of diquark fragmenting directly into *
+* baryons (PYTHIA/JETSET fragmentation) *
+* (JETSET: = 0. Popcorn mechanism switched off) *
+* default: 0.5 *
+* what (2) = probability for accepting a diquark breaking *
+* diagram involving the generation of a u/d quark- *
+* antiquark pair default: 0.0 *
+* what (3) = same a what (2), here for s quark-antiquark pair *
+* default: 0.0 *
+* what (4..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 420 CONTINUE
+ IF (WHAT(1).GE.0.0D0) PDB = WHAT(1)
+ IF (WHAT(2).GE.0.0D0) THEN
+ PDBSEA(1) = WHAT(2)
+ PDBSEA(2) = WHAT(2)
+ ENDIF
+ IF (WHAT(3).GE.0.0D0) PDBSEA(3) = WHAT(3)
+ DO 421 I=1,8
+ DBRKA(1,I) = DBRKR(1,I)*PDBSEA(1)/(1.D0-PDBSEA(1))
+ DBRKA(2,I) = DBRKR(2,I)*PDBSEA(2)/(1.D0-PDBSEA(2))
+ DBRKA(3,I) = DBRKR(3,I)*PDBSEA(3)/(1.D0-PDBSEA(3))
+ 421 CONTINUE
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = PARDECAY *
+* *
+* what (1) = 1. Sigma0/Asigma0 are decaying within JETSET *
+* = 2. pion^0 decay after intranucl. cascade *
+* default: no decay *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 430 CONTINUE
+ IF (WHAT(1).EQ.ONE) ISIG0 = 1
+ IF (WHAT(1).EQ.2.0D0) IPI0 = 1
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = BEAM *
+* *
+* definition of beam parameters *
+* *
+* what (1/2) > 0 : energy of beam 1/2 (GeV) *
+* < 0 : abs(what(1/2)) energy per charge of *
+* beam 1/2 (GeV) *
+* (beam 1 is directed into positive z-direction) *
+* what (3) beam crossing angle, defined as 2x angle between *
+* one beam and the z-axis (micro rad) *
+* what (4) angle with x-axis defining the collision plane *
+* what (5..6), sdum no meaning *
+* *
+* Note: this card requires previously defined projectile and *
+* target identities (PROJPAR, TARPAR) *
+* *
+*********************************************************************
+
+ 440 CONTINUE
+ CALL DT_BEAMPR(WHAT,PPN,1)
+ EPN = ZERO
+ CMENER = ZERO
+ LEINP = .TRUE.
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LUND-MSTU *
+* *
+* set parameter MSTU in JETSET-common /LUDAT1/ *
+* *
+* what (1) = index according to LUND-common block *
+* what (2) = new value of MSTU( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-Lund or corresponding to *
+* the set given in HADRONIZE *
+* *
+*********************************************************************
+
+ 450 CONTINUE
+ IF (WHAT(1).GT.ZERO) THEN
+ NMSTU = NMSTU+1
+ IMSTU(NMSTU) = INT(WHAT(1))
+ MSTUX(NMSTU) = INT(WHAT(2))
+ ENDIF
+ IF (WHAT(3).GT.ZERO) THEN
+ NMSTU = NMSTU+1
+ IMSTU(NMSTU) = INT(WHAT(3))
+ MSTUX(NMSTU) = INT(WHAT(4))
+ ENDIF
+ IF (WHAT(5).GT.ZERO) THEN
+ NMSTU = NMSTU+1
+ IMSTU(NMSTU) = INT(WHAT(5))
+ MSTUX(NMSTU) = INT(WHAT(6))
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LUND-MSTJ *
+* *
+* set parameter MSTJ in JETSET-common /LUDAT1/ *
+* *
+* what (1) = index according to LUND-common block *
+* what (2) = new value of MSTJ( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-Lund or corresponding to *
+* the set given in HADRONIZE *
+* *
+*********************************************************************
+
+ 451 CONTINUE
+ IF (WHAT(1).GT.ZERO) THEN
+ NMSTJ = NMSTJ+1
+ IMSTJ(NMSTJ) = INT(WHAT(1))
+ MSTJX(NMSTJ) = INT(WHAT(2))
+ ENDIF
+ IF (WHAT(3).GT.ZERO) THEN
+ NMSTJ = NMSTJ+1
+ IMSTJ(NMSTJ) = INT(WHAT(3))
+ MSTJX(NMSTJ) = INT(WHAT(4))
+ ENDIF
+ IF (WHAT(5).GT.ZERO) THEN
+ NMSTJ = NMSTJ+1
+ IMSTJ(NMSTJ) = INT(WHAT(5))
+ MSTJX(NMSTJ) = INT(WHAT(6))
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LUND-MDCY *
+* *
+* set parameter MDCY(I,1) for particle decays in JETSET-common *
+* /LUDAT3/ *
+* *
+* what (1-6) = PDG particle index of particle which should *
+* not decay *
+* default: default-Lund or forced in *
+* DT_INITJS *
+* *
+*********************************************************************
+
+ 452 CONTINUE
+ DO 4521 I=1,6
+ IF (WHAT(I).NE.ZERO) THEN
+
+ KC = PYCOMP(INT(WHAT(I)))
+
+ MDCY(KC,1) = 0
+ ENDIF
+ 4521 CONTINUE
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LUND-PARJ *
+* *
+* set parameter PARJ in JETSET-common /LUDAT1/ *
+* *
+* what (1) = index according to LUND-common block *
+* what (2) = new value of PARJ( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-Lund or corresponding to *
+* the set given in HADRONIZE *
+* *
+*********************************************************************
+
+ 460 CONTINUE
+ IF (WHAT(1).NE.ZERO) THEN
+ NPARJ = NPARJ+1
+ IPARJ(NPARJ) = INT(WHAT(1))
+ PARJX(NPARJ) = WHAT(2)
+ ENDIF
+ IF (WHAT(3).NE.ZERO) THEN
+ NPARJ = NPARJ+1
+ IPARJ(NPARJ) = INT(WHAT(3))
+ PARJX(NPARJ) = WHAT(4)
+ ENDIF
+ IF (WHAT(5).NE.ZERO) THEN
+ NPARJ = NPARJ+1
+ IPARJ(NPARJ) = INT(WHAT(5))
+ PARJX(NPARJ) = WHAT(6)
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LUND-PARU *
+* *
+* set parameter PARJ in JETSET-common /LUDAT1/ *
+* *
+* what (1) = index according to LUND-common block *
+* what (2) = new value of PARU( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-Lund or corresponding to *
+* the set given in HADRONIZE *
+* *
+*********************************************************************
+
+ 470 CONTINUE
+ IF (WHAT(1).GT.ZERO) THEN
+ NPARU = NPARU+1
+ IPARU(NPARU) = INT(WHAT(1))
+ PARUX(NPARU) = WHAT(2)
+ ENDIF
+ IF (WHAT(3).GT.ZERO) THEN
+ NPARU = NPARU+1
+ IPARU(NPARU) = INT(WHAT(3))
+ PARUX(NPARU) = WHAT(4)
+ ENDIF
+ IF (WHAT(5).GT.ZERO) THEN
+ NPARU = NPARU+1
+ IPARU(NPARU) = INT(WHAT(5))
+ PARUX(NPARU) = WHAT(6)
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = OUTLEVEL *
+* *
+* output control switches *
+* *
+* what (1) = internal rejection informations default: 0 *
+* what (2) = energy-momentum conservation check output *
+* default: 0 *
+* what (3) = internal warning messages default: 0 *
+* what (4..6), sdum not yet used *
+* *
+*********************************************************************
+
+ 480 CONTINUE
+ DO 481 K=1,6
+ IOULEV(K) = INT(WHAT(K))
+ 481 CONTINUE
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = FRAME *
+* *
+* frame in which final state is given in DTEVT1 *
+* *
+* what (1) = 1 target rest frame (laboratory) *
+* = 2 nucleon-nucleon cms *
+* default: 1 *
+* *
+*********************************************************************
+
+ 490 CONTINUE
+ KFRAME = INT(WHAT(1))
+ IF ((KFRAME.GE.1).AND.(KFRAME.LE.2)) IFRAME = KFRAME
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = L-TAG *
+* *
+* lepton tagger: *
+* definition of kinematical cuts for radiated photon and *
+* outgoing lepton detection in lepton-nucleus interactions *
+* *
+* what (1) = y_min *
+* what (2) = y_max *
+* what (3) = Q^2_min *
+* what (4) = Q^2_max *
+* what (5) = theta_min (Lab) *
+* what (6) = theta_max (Lab) *
+* default: no cuts *
+* sdum no meaning *
+* *
+*********************************************************************
+
+ 500 CONTINUE
+ YMIN = WHAT(1)
+ YMAX = WHAT(2)
+ Q2MIN = WHAT(3)
+ Q2MAX = WHAT(4)
+ THMIN = WHAT(5)
+ THMAX = WHAT(6)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = L-ETAG *
+* *
+* lepton tagger: *
+* what (1) = min. outgoing lepton energy (in Lab) *
+* what (2) = min. photon energy (in Lab) *
+* what (3) = max. photon energy (in Lab) *
+* default: no cuts *
+* what (2..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 510 CONTINUE
+ ELMIN = MAX(WHAT(1),ZERO)
+ EGMIN = MAX(WHAT(2),ZERO)
+ EGMAX = MAX(WHAT(3),ZERO)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = ECMS-CUT *
+* *
+* what (1) = min. c.m. energy to be sampled *
+* what (2) = max. c.m. energy to be sampled *
+* what (3) = min x_Bj to be sampled *
+* default: no cuts *
+* what (3..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 520 CONTINUE
+ ECMIN = WHAT(1)
+ ECMAX = WHAT(2)
+ IF (ECMIN.GT.ECMAX) ECMIN = ECMAX
+ XBJMIN = MAX(WHAT(3),ZERO)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = VDM-PAR1 *
+* *
+* parameters in gamma-nucleus cross section calculation *
+* *
+* what (1) = Lambda^2 default: 2. *
+* what (2) lower limit in M^2 integration *
+* = 1 (3m_pi)^2 *
+* = 2 (m_rho0)^2 *
+* = 3 (m_phi)^2 default: 1 *
+* what (3) upper limit in M^2 integration *
+* = 1 s/2 *
+* = 2 s/4 *
+* = 3 s default: 3 *
+* what (4) CKMT F_2 structure function *
+* = 2212 proton *
+* = 100 deuteron default: 2212 *
+* what (5) calculation of gamma-nucleon xsections *
+* = 1 according to CKMT-parametrization of F_2 *
+* = 2 integrating SIGVP over M^2 *
+* = 3 using SIGGA *
+* = 4 PHOJET cross sections default: 4 *
+* *
+* what (6), sdum no meaning *
+* *
+*********************************************************************
+
+ 530 CONTINUE
+ IF (WHAT(1).GE.ZERO) RL2 = WHAT(1)
+ IF ((WHAT(2).GE.1).AND.(WHAT(2).LE.3)) INTRGE(1) = INT(WHAT(2))
+ IF ((WHAT(3).GE.1).AND.(WHAT(3).LE.3)) INTRGE(2) = INT(WHAT(3))
+ IF ((WHAT(4).EQ.2212).OR.(WHAT(4).EQ.100)) IDPDF = INT(WHAT(4))
+ IF ((WHAT(5).GE.1).AND.(WHAT(5).LE.4)) MODEGA = INT(WHAT(5))
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = HISTOGRAM *
+* *
+* activate different classes of histograms *
+* *
+* default: no histograms *
+* *
+*********************************************************************
+
+ 540 CONTINUE
+ DO 541 J=1,6
+ IF ((WHAT(J).GE.100).AND.(WHAT(J).LE.150)) THEN
+ IHISPP(INT(WHAT(J))-100) = 1
+ ELSEIF ((ABS(WHAT(J)).GE.200).AND.(ABS(WHAT(J)).LE.250)) THEN
+ IHISXS(INT(ABS(WHAT(J)))-200) = 1
+ IF (WHAT(J).LT.ZERO) IXSTBL = 1
+ ENDIF
+ 541 CONTINUE
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = XS-TABLE *
+* *
+* output of cross section table for requested interaction *
+* - particle production deactivated ! - *
+* *
+* what (1) lower energy limit for tabulation *
+* > 0 Lab. frame *
+* < 0 nucleon-nucleon cms *
+* what (2) upper energy limit for tabulation *
+* > 0 Lab. frame *
+* < 0 nucleon-nucleon cms *
+* what (3) > 0 # of equidistant lin. bins in E *
+* < 0 # of equidistant log. bins in E *
+* what (4) lower limit of particle virtuality (photons) *
+* what (5) upper limit of particle virtuality (photons) *
+* what (6) > 0 # of equidistant lin. bins in Q^2 *
+* < 0 # of equidistant log. bins in Q^2 *
+* *
+*********************************************************************
+
+ 550 CONTINUE
+ IF (WHAT(1).EQ.99999.0D0) THEN
+ IRATIO = INT(WHAT(2))
+ GOTO 10
+ ENDIF
+ CMENER = ABS(WHAT(2))
+ IF (.NOT.LXSTAB) THEN
+
+ CALL BERTTP
+ CALL INCINI
+
+ ENDIF
+ IF ((.NOT.LXSTAB).OR.(CMENER.NE.CMEOLD)) THEN
+ CMEOLD = CMENER
+ IF (WHAT(2).GT.ZERO)
+ & CMENER = SQRT(2.0D0*AAM(1)**2+2.0D0*WHAT(2)*AAM(1))
+ EPN = ZERO
+ PPN = ZERO
+C WRITE(LOUT,*) 'CMENER = ',CMENER
+ CALL DT_LTINI(IJPROJ,IJTARG,EPN,PPN,CMENER,1)
+ CALL DT_PHOINI
+ ENDIF
+ CALL DT_XSTABL(WHAT,IXSQEL,IRATIO)
+ IXSQEL = 0
+ LXSTAB = .TRUE.
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = GLAUB-PAR *
+* *
+* parameters in Glauber-formalism *
+* *
+* what (1) # of nucleon configurations sampled in integration *
+* over nuclear desity default: 1000 *
+* what (2) # of bins for integration over impact-parameter and *
+* for profile-function calculation default: 49 *
+* what (3) = 1 calculation of tot., el. and qel. cross sections *
+* default: 0 *
+* what (4) = 1 read pre-calculated impact-parameter distrib. *
+* from "sdum".glb *
+* =-1 dump pre-calculated impact-parameter distrib. *
+* into "sdum".glb *
+* = 100 read pre-calculated impact-parameter distrib. *
+* for variable projectile/target/energy runs *
+* from "sdum".glb *
+* default: 0 *
+* what (5..6) no meaning *
+* sdum if |what (4)| = 1 name of in/output-file (sdum.glb) *
+* *
+*********************************************************************
+
+ 560 CONTINUE
+ IF (WHAT(1).GT.ZERO) JSTATB = INT(WHAT(1))
+ IF (WHAT(2).GT.ZERO) JBINSB = INT(WHAT(2))
+ IF (WHAT(3).EQ.ONE) LPROD = .FALSE.
+ IF ((ABS(WHAT(4)).EQ.ONE).OR.(WHAT(4).EQ.100)) THEN
+ IOGLB = INT(WHAT(4))
+ CGLB = SDUM
+ ENDIF
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = GLAUB-INI *
+* *
+* pre-initialization of profile function *
+* *
+* what (1) lower energy limit for initialization *
+* > 0 Lab. frame *
+* < 0 nucleon-nucleon cms *
+* what (2) upper energy limit for initialization *
+* > 0 Lab. frame *
+* < 0 nucleon-nucleon cms *
+* what (3) > 0 # of equidistant lin. bins in E *
+* < 0 # of equidistant log. bins in E *
+* what (4) maximum projectile mass number for which the *
+* Glauber data are initialized for each *
+* projectile mass number *
+* (if <= mass given with the PROJPAR-card) *
+* default: 18 *
+* what (5) steps in mass number starting from what (4) *
+* up to mass number defined with PROJPAR-card *
+* for which Glauber data are initialized *
+* default: 5 *
+* what (6) no meaning *
+* sdum no meaning *
+* *
+*********************************************************************
+
+ 565 CONTINUE
+ IOGLB = -100
+ CALL DT_GLBINI(WHAT)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = VDM-PAR2 *
+* *
+* parameters in gamma-nucleus cross section calculation *
+* *
+* what (1) = 0 no suppression of shadowing by direct photon *
+* processes *
+* = 1 suppression .. default: 1 *
+* what (2) = 0 no suppression of shadowing by anomalous *
+* component if photon-F_2 *
+* = 1 suppression .. default: 1 *
+* what (3) = 0 no suppression of shadowing by coherence *
+* length of the photon *
+* = 1 suppression .. default: 1 *
+* what (4) = 1 longitudinal polarized photons are taken into *
+* account *
+* eps*R*Q^2/M^2 = what(4)*Q^2/M^2 default: 0 *
+* what (5..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 570 CONTINUE
+ IF ((WHAT(1).EQ.ZERO).OR.(WHAT(1).EQ.ONE)) ISHAD(1) = INT(WHAT(1))
+ IF ((WHAT(2).EQ.ZERO).OR.(WHAT(2).EQ.ONE)) ISHAD(2) = INT(WHAT(2))
+ IF ((WHAT(3).EQ.ZERO).OR.(WHAT(3).EQ.ONE)) ISHAD(3) = INT(WHAT(3))
+ EPSPOL = WHAT(4)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: XS-QELPRO *
+* *
+* what (1..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 580 CONTINUE
+ IXSQEL = ABS(WHAT(1))
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: RNDMINIT *
+* *
+* initialization of random number generator *
+* *
+* what (1..4) values for initialization (= 1..168) *
+* what (5..6), sdum no meaning *
+* *
+*********************************************************************
+
+ 590 CONTINUE
+ IF ((WHAT(1).LT.1.0D0).OR.(WHAT(1).GT.168.0D0)) THEN
+ NA1 = 22
+ ELSE
+ NA1 = WHAT(1)
+ ENDIF
+ IF ((WHAT(2).LT.1.0D0).OR.(WHAT(2).GT.168.0D0)) THEN
+ NA2 = 54
+ ELSE
+ NA2 = WHAT(2)
+ ENDIF
+ IF ((WHAT(3).LT.1.0D0).OR.(WHAT(3).GT.168.0D0)) THEN
+ NA3 = 76
+ ELSE
+ NA3 = WHAT(3)
+ ENDIF
+ IF ((WHAT(4).LT.1.0D0).OR.(WHAT(4).GT.168.0D0)) THEN
+ NA4 = 92
+ ELSE
+ NA4 = WHAT(4)
+ ENDIF
+ CALL DT_RNDMST(NA1,NA2,NA3,NA4)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LEPTO-CUT *
+* *
+* set parameter CUT in LEPTO-common /LEPTOU/ *
+* *
+* what (1) = index in CUT-array *
+* what (2) = new value of CUT( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-LEPTO parameters *
+* *
+*********************************************************************
+
+ 600 CONTINUE
+ IF (WHAT(1).GT.ZERO) CUT(INT(WHAT(1))) = WHAT(2)
+ IF (WHAT(3).GT.ZERO) CUT(INT(WHAT(3))) = WHAT(4)
+ IF (WHAT(5).GT.ZERO) CUT(INT(WHAT(5))) = WHAT(6)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LEPTO-LST *
+* *
+* set parameter LST in LEPTO-common /LEPTOU/ *
+* *
+* what (1) = index in LST-array *
+* what (2) = new value of LST( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-LEPTO parameters *
+* *
+*********************************************************************
+
+ 610 CONTINUE
+ IF (WHAT(1).GT.ZERO) LST(INT(WHAT(1))) = INT(WHAT(2))
+ IF (WHAT(3).GT.ZERO) LST(INT(WHAT(3))) = INT(WHAT(4))
+ IF (WHAT(5).GT.ZERO) LST(INT(WHAT(5))) = INT(WHAT(6))
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = LEPTO-PARL *
+* *
+* set parameter PARL in LEPTO-common /LEPTOU/ *
+* *
+* what (1) = index in PARL-array *
+* what (2) = new value of PARL( int(what(1)) ) *
+* what (3), what(4) and what (5), what(6) further *
+* parameter in the same way as what (1) and *
+* what (2) *
+* default: default-LEPTO parameters *
+* *
+*********************************************************************
+
+ 620 CONTINUE
+ IF (WHAT(1).GT.ZERO) PARL(INT(WHAT(1))) = WHAT(2)
+ IF (WHAT(3).GT.ZERO) PARL(INT(WHAT(3))) = WHAT(4)
+ IF (WHAT(5).GT.ZERO) PARL(INT(WHAT(5))) = WHAT(6)
+ GOTO 10
+
+*********************************************************************
+* *
+* control card: codewd = START *
+* *
+* what (1) = number of events default: 100. *
+* what (2) = 0 Glauber initialization follows *
+* = 1 Glauber initialization supressed, fitted *
+* results are used instead *
+* (this does not apply if emulsion-treatment *
+* is requested) *
+* = 2 Glauber initialization is written to *
+* output-file shmakov.out *
+* = 3 Glauber initialization is read from input-file *
+* shmakov.out default: 0 *
+* what (3..6) no meaning *
+* what (3..6) no meaning *
+* *
+*********************************************************************
+
+ 630 CONTINUE
+
+* check for cross-section table output only
+ IF (LXSTAB) STOP
+
+ NCASES = INT(WHAT(1))
+ IF (NCASES.LE.0) NCASES = 100
+ IGLAU = INT(WHAT(2))
+ IF ((IGLAU.NE.1).AND.(IGLAU.NE.2).AND.(IGLAU.NE.3))
+ & IGLAU = 0
+
+ NPMASS = IP
+ NPCHAR = IPZ
+ NTMASS = IT
+ NTCHAR = ITZ
+ IDP = IJPROJ
+ IDT = IJTARG
+ IF (IDP.LE.0) IDP = 1
+* muon neutrinos: temporary (missing index)
+* (new patch in projpar: therefore the following this is probably not
+* necessary anymore..)
+C IF (IDP.EQ.26) IDP = 5
+C IF (IDP.EQ.27) IDP = 6
+
+* redefine collision energy
+ IF (LEINP) THEN
+ IF (ABS(VAREHI).GT.ZERO) THEN
+ PDUM = ZERO
+ IF (VARELO.LT.EHADLO) VARELO = EHADLO
+ CALL DT_LTINI(IDP,IDT,VARELO,PDUM,VARCLO,1)
+ PDUM = ZERO
+ CALL DT_LTINI(IDP,IDT,VAREHI,PDUM,VARCHI,1)
+ ENDIF
+ CALL DT_LTINI(IDP,IDT,EPN,PPN,CMENER,1)
+ ELSE
+ WRITE(LOUT,1003)
+ 1003 FORMAT(1X,'INIT: collision energy not defined!',/,
+ & 1X,' -program stopped- ')
+ STOP
+ ENDIF
+
+* switch off evaporation (even if requested) if central coll. requ.
+ IF ((ICENTR.EQ.-1).OR.(ICENTR.GT.0).OR.(XSFRAC.LT.0.5D0)) THEN
+ IF (LEVPRT) THEN
+ WRITE(LOUT,1004)
+ 1004 FORMAT(1X,/,'Warning! Evaporation request rejected since',
+ & ' central collisions forced.')
+ LEVPRT = .FALSE.
+ LDEEXG = .FALSE.
+ LHEAVY = .FALSE.
+ ENDIF
+ ENDIF
+
+* initialization of evaporation-module
+
+* initialize evaporation if the code is not used as Fluka event generator
+ IF (ITRSPT.NE.1) THEN
+ CALL BERTTP
+ CALL INCINI
+ ENDIF
+ IF (LEVPRT) LHEAVY = .TRUE.
+
+
+* save the default JETSET-parameter
+ CALL DT_JSPARA(0)
+
+* force use of phojet for g-A
+ IF ((IDP.EQ.7).AND.(MCGENE.NE.3)) MCGENE = 2
+* initialization of nucleon-nucleon event generator
+ IF (MCGENE.EQ.2) CALL DT_PHOINI
+* initialization of LEPTO event generator
+ IF (MCGENE.EQ.3) THEN
+
+ STOP ' This version does not contain LEPTO !'
+
+ ENDIF
+
+* initialization of quasi-elastic neutrino scattering
+ IF (MCGENE.EQ.4) THEN
+ IF (IJPROJ.EQ.5) THEN
+ NEUTYP = 1
+ ELSEIF (IJPROJ.EQ.6) THEN
+ NEUTYP = 2
+ ELSEIF (IJPROJ.EQ.135) THEN
+ NEUTYP = 3
+ ELSEIF (IJPROJ.EQ.136) THEN
+ NEUTYP = 4
+ ELSEIF (IJPROJ.EQ.133) THEN
+ NEUTYP = 5
+ ELSEIF (IJPROJ.EQ.134) THEN
+ NEUTYP = 6
+ ENDIF
+ ENDIF
+
+* normalize fractions of emulsion components
+ IF (NCOMPO.GT.0) THEN
+ SUMFRA = ZERO
+ DO 491 I=1,NCOMPO
+ SUMFRA = SUMFRA+EMUFRA(I)
+ 491 CONTINUE
+ IF (SUMFRA.GT.ZERO) THEN
+ DO 492 I=1,NCOMPO
+ EMUFRA(I) = EMUFRA(I)/SUMFRA
+ 492 CONTINUE
+ ENDIF
+ ENDIF
+
+* disallow Cronin's multiple scattering for nucleus-nucleus interactions
+ IF ((IP.GT.1).AND.(MKCRON.GT.0)) THEN
+ WRITE(LOUT,1005)
+ 1005 FORMAT(/,1X,'INIT: multiple scattering disallowed',/)
+ MKCRON = 0
+ ENDIF
+
+* initialization of Glauber-formalism (moved to xAEVT, sr 26.3.96)
+C IF (NCOMPO.LE.0) THEN
+C CALL DT_SHMAKI(IP,IPZ,IT,ITZ,IDP,PPN,IGLAU)
+C ELSE
+C DO 493 I=1,NCOMPO
+C CALL DT_SHMAKI(IP,IPZ,IEMUMA(I),IEMUCH(I),IDP,PPN,0)
+C 493 CONTINUE
+C ENDIF
+
+* pre-tabulation of elastic cross-sections
+ CALL DT_SIGTBL(JDUM,JDUM,DUM,DUM,-1)
+
+ CALL DT_XTIME
+
+ RETURN
+
+*********************************************************************
+* *
+* control card: codewd = STOP *
+* *
+* stop of the event generation *
+* *
+* what (1..6) no meaning *
+* *
+*********************************************************************
+
+ 9999 CONTINUE
+ WRITE(LOUT,9000)
+ 9000 FORMAT(1X,'---> unexpected end of input !')
+
+ 640 CONTINUE
+ STOP
+
+ END
+*
+*===kkinc==============================================================*
+*
+CDECK ID>, DT_KKINC
+ SUBROUTINE DT_KKINC(NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,EPN,KKMAT,
+ & IREJ)
+
+************************************************************************
+* Treatment of complete nucleus-nucleus or hadron-nucleus scattering *
+* This subroutine is an update of the previous version written *
+* by J. Ranft/ H.-J. Moehring. *
+* This version dated 19.11.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY5=1.0D-5,
+ & TINY2=1.0D-2,TINY3=1.0D-3)
+
+ LOGICAL LFZC
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+* cuts for variable energy runs
+ COMMON /DTVARE/ VARELO,VAREHI,VARCLO,VARCHI
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+
+ DIMENSION WHAT(6)
+
+ IREJ = 0
+ ILOOP = 0
+ 100 CONTINUE
+ IF (ILOOP.EQ.4) THEN
+ WRITE(LOUT,1000) NEVHKK
+ 1000 FORMAT(1X,'KKINC: event ',I8,' rejected!')
+ GOTO 9999
+ ENDIF
+ ILOOP = ILOOP+1
+
+* variable energy-runs, recalculate parameters for LT's
+ IF ((ABS(VAREHI).GT.ZERO).OR.(IOGLB.EQ.100)) THEN
+ PDUM = ZERO
+ CDUM = ZERO
+ CALL DT_LTINI(IDP,1,EPN,PDUM,CDUM,1)
+ ENDIF
+ IF (EPN.GT.EPROJ) THEN
+ WRITE(LOUT,'(A,E9.3,2A,E9.3,A)')
+ & ' Requested energy (',EPN,'GeV) exceeds',
+ & ' initialization energy (',EPROJ,'GeV) !'
+ STOP
+ ENDIF
+
+* re-initialize /DTPRTA/
+ IP = NPMASS
+ IPZ = NPCHAR
+ IT = NTMASS
+ ITZ = NTCHAR
+ IJPROJ = IDP
+ IBPROJ = IIBAR(IJPROJ)
+
+* calculate nuclear potentials (common /DTNPOT/)
+ CALL DT_NCLPOT(IPZ,IP,ITZ,IT,ZERO,ZERO,0)
+
+* initialize treatment for residual nuclei
+ CALL DT_RESNCL(EPN,NLOOP,1)
+
+* sample hadron/nucleus-nucleus interaction
+ CALL DT_KKEVNT(KKMAT,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in KKINC'
+ GOTO 9999
+ ENDIF
+
+ IF ((NPMASS.GT.1).OR.(NTMASS.GT.1)) THEN
+
+* intranuclear cascade of final state particles for KTAUGE generations
+* of secondaries
+ CALL DT_FOZOCA(LFZC,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 2 in KKINC'
+ GOTO 9999
+ ENDIF
+
+* baryons unable to escape the nuclear potential are treated as
+* excited nucleons (ISTHKK=15,16)
+ CALL DT_SCN4BA
+
+* decay of resonances produced in intranuclear cascade processes
+**sr 15-11-95 should be obsolete
+C IF (LFZC) CALL DT_DECAY1
+
+ 101 CONTINUE
+* treatment of residual nuclei
+ CALL DT_RESNCL(EPN,NLOOP,2)
+
+* evaporation / fission / fragmentation
+* (if intranuclear cascade was sampled only)
+ IF (LFZC) THEN
+ CALL DT_FICONF(IJPROJ,IP,IPZ,IT,ITZ,NLOOP,IREJ1)
+ IF (IREJ1.GT.1) GOTO 101
+ IF (IREJ1.EQ.1) GOTO 100
+ ENDIF
+
+ ENDIF
+
+* transform finale state into Lab.
+ IFLAG = 2
+ CALL DT_BEAMPR(WHAT,DUM,IFLAG)
+ IF ((IFRAME.EQ.1).AND.(IFLAG.EQ.-1)) CALL DT_LT2LAB
+
+ IF (IPI0.EQ.1) CALL DT_DECPI0
+
+C IF (NEVHKK.EQ.5) CALL DT_EVTOUT(4)
+
+ RETURN
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===defaul=============================================================*
+*
+CDECK ID>, DT_DEFAUL
+ SUBROUTINE DT_DEFAUL(EPN,PPN)
+
+************************************************************************
+* Variables are set to default values. *
+* This version dated 8.5.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY10=1.0D-10)
+ PARAMETER (TWOPI = 6.283185307179586454D+00)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* interface HADRIN-DPM
+ COMMON /HNTHRE/ EHADTH,EHADLO,EHADHI,INTHAD,IDXTA
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* parameter for intranuclear cascade
+ LOGICAL LPAULI
+ COMMON /DTFOTI/ TAUFOR,KTAUGE,ITAUVE,INCMOD,LPAULI
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+* threshold values for x-sampling (DTUNUC 1.x)
+ COMMON /DTXCUT/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ & SSMIMQ,VVMTHR
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* n-n cross section fluctuations
+ PARAMETER (NBINS = 1000)
+ COMMON /DTXSFL/ FLUIXX(NBINS),IFLUCT
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+* kinematical cuts for lepton-nucleus interactions
+ COMMON /DTLCUT/ ECMIN,ECMAX,XBJMIN,ELMIN,EGMIN,EGMAX,YMIN,YMAX,
+ & Q2MIN,Q2MAX,THMIN,THMAX,Q2LI,Q2HI,ECMLI,ECMHI
+* flags for activated histograms
+ COMMON /DTHIS3/ IHISPP(50),IHISXS(50),IXSTBL
+* cuts for variable energy runs
+ COMMON /DTVARE/ VARELO,VAREHI,VARCLO,VARCHI
+* parameters for hA-diffraction
+ COMMON /DTDIHA/ DIBETA,DIALPH
+* LEPTO
+ REAL RPPN
+ COMMON /LEPTOI/ RPPN,LEPIN,INTER
+* steering flags for qel neutrino scattering modules
+ COMMON /QNEUTO/ DSIGSU,DSIGMC,NDSIG,NEUTYP,NEUDEC
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+ DATA POTMES /0.002D0/
+
+* common /DTNPOT/
+ DO 10 I=1,2
+ PFERMP(I) = ZERO
+ PFERMN(I) = ZERO
+ EBINDP(I) = ZERO
+ EBINDN(I) = ZERO
+ DO 11 J=1,210
+ EPOT(I,J) = ZERO
+ 11 CONTINUE
+* nucleus independent meson potential
+ EPOT(I,13) = POTMES
+ EPOT(I,14) = POTMES
+ EPOT(I,15) = POTMES
+ EPOT(I,16) = POTMES
+ EPOT(I,23) = POTMES
+ EPOT(I,24) = POTMES
+ EPOT(I,25) = POTMES
+ 10 CONTINUE
+**sr 7.4.98: changed after corrected B-sampling
+C FERMOD = 0.55D0
+ FERMOD = 0.68D0
+ ETACOU(1) = ZERO
+ ETACOU(2) = ZERO
+ ICOUL = 1
+ LFERMI = .TRUE.
+
+* common /HNTHRE/
+ EHADTH = -99.0D0
+ EHADLO = 4.06D0
+ EHADHI = 6.0D0
+ INTHAD = 1
+ IDXTA = 2
+
+* common /DTIMPA/
+ ICENTR = 0
+ BIMIN = ZERO
+ BIMAX = 1.0D10
+ XSFRAC = 1.0D0
+
+* common /DTPRTA/
+ IP = 1
+ IPZ = 1
+ IT = 1
+ ITZ = 1
+ IJPROJ = 1
+ IBPROJ = 1
+ IJTARG = 1
+ IBTARG = 1
+* common /DTGPRO/
+ VIRT = ZERO
+ DO 14 I=1,4
+ PGAMM(I) = ZERO
+ PLEPT0(I) = ZERO
+ PLEPT1(I) = ZERO
+ PNUCL(I) = ZERO
+ 14 CONTINUE
+ IDIREC = 0
+
+* common /DTFOTI/
+**sr 7.4.98: changed after corrected B-sampling
+C TAUFOR = 4.4D0
+ TAUFOR = 3.1D0
+ KTAUGE = 25
+ ITAUVE = 1
+ INCMOD = 1
+ LPAULI = .TRUE.
+
+* common /DTCHAI/
+ SEASQ = ONE
+ MKCRON = 1
+ CRONCO = 0.64D0
+ ISICHA = 0
+ CUTOF = 100.0D0
+ LCO2CR = .FALSE.
+ IRECOM = 1
+ LINTPT = .TRUE.
+
+* common /DTXCUT/
+* definition of soft quark distributions
+ XSEACU = 0.05D0
+ UNON = 2.0D0
+ UNOM = 1.5D0
+ UNOSEA = 5.0D0
+* cutoff parameters for x-sampling
+ CVQ = 1.0D0
+ CDQ = 2.0D0
+C CSEA = 0.3D0
+ CSEA = 0.1D0
+ SSMIMA = 1.2D0
+ SSMIMQ = SSMIMA**2
+ VVMTHR = 2.0D0
+
+* common /DTXSFL/
+ IFLUCT = 0
+
+* common /DTFRPA/
+ PDB = 0.15D0
+ PDBSEA(1) = 0.0D0
+ PDBSEA(2) = 0.0D0
+ PDBSEA(3) = 0.0D0
+ ISIG0 = 0
+ IPI0 = 0
+ NMSTU = 0
+ NPARU = 0
+ NMSTJ = 0
+ NPARJ = 0
+
+* common /DTDIQB/
+ DO 15 I=1,8
+ DBRKR(1,I) = 5.0D0
+ DBRKR(2,I) = 5.0D0
+ DBRKR(3,I) = 10.0D0
+ DBRKA(1,I) = ZERO
+ DBRKA(2,I) = ZERO
+ DBRKA(3,I) = ZERO
+ 15 CONTINUE
+ CHAM1 = 0.2D0
+ CHAM3 = 0.5D0
+ CHAB1 = 0.7D0
+ CHAB3 = 1.0D0
+
+* common /DTFLG3/
+ ISINGD = 0
+ IDOUBD = 0
+ IFLAGD = 0
+ IDIFF = 0
+
+* common /DTMODL/
+ MCGENE = 2
+ CMODEL(1) = 'DTUNUC '
+ CMODEL(2) = 'PHOJET '
+ CMODEL(3) = 'LEPTO '
+ CMODEL(4) = 'QNEUTRIN'
+ LPHOIN = .TRUE.
+ ELOJET = 5.0D0
+
+* common /DTLCUT/
+ ECMIN = 3.5D0
+ ECMAX = 1.0D10
+ XBJMIN = ZERO
+ ELMIN = ZERO
+ EGMIN = ZERO
+ EGMAX = 1.0D10
+ YMIN = TINY10
+ YMAX = 0.999D0
+ Q2MIN = TINY10
+ Q2MAX = 10.0D0
+ THMIN = ZERO
+ THMAX = TWOPI
+ Q2LI = ZERO
+ Q2HI = 1.0D10
+ ECMLI = ZERO
+ ECMHI = 1.0D10
+
+* common /DTVDMP/
+ RL2 = 2.0D0
+ INTRGE(1) = 1
+ INTRGE(2) = 3
+ IDPDF = 2212
+ MODEGA = 4
+ ISHAD(1) = 1
+ ISHAD(2) = 1
+ ISHAD(3) = 1
+ EPSPOL = ZERO
+
+* common /DTGLGP/
+ JSTATB = 1000
+ JBINSB = 49
+ CGLB = ' '
+ IF (ITRSPT.EQ.1) THEN
+ IOGLB = 100
+ ELSE
+ IOGLB = 0
+ ENDIF
+ LPROD = .TRUE.
+
+* common /DTHIS3/
+ DO 16 I=1,50
+ IHISPP(I) = 0
+ IHISXS(I) = 0
+ 16 CONTINUE
+ IXSTBL = 0
+
+* common /DTVARE/
+ VARELO = ZERO
+ VAREHI = ZERO
+ VARCLO = ZERO
+ VARCHI = ZERO
+
+* common /DTDIHA/
+ DIBETA = -1.0D0
+ DIALPH = ZERO
+
+* common /LEPTOI/
+ RPPN = 0.0
+ LEPIN = 0
+ INTER = 0
+
+* common /QNEUTO/
+ NEUTYP = 1
+ NEUDEC = 0
+
+* common /DTEVNO/
+ NEVENT = 1
+ IF (ITRSPT.EQ.1) THEN
+ ICASCA = 1
+ ELSE
+ ICASCA = 0
+ ENDIF
+
+* default Lab.-energy
+ EPN = 200.0D0
+ PPN = SQRT((EPN-AAM(IJPROJ))*(EPN+AAM(IJPROJ)))
+
+ RETURN
+ END
+*
+*===aaevt==============================================================*
+*
+CDECK ID>, DT_AAEVT
+ SUBROUTINE DT_AAEVT(NEVTS,EPN,NPMASS,NPCHAR,NTMASS,NTCHAR,
+ & IDP,IGLAU)
+
+************************************************************************
+* This version dated 22.03.96 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+ CHARACTER*8 DATE,HHMMSS
+ DIMENSION IDMNYR(3)
+
+ KKMAT = 1
+ NMSG = MAX(NEVTS/100,1)
+
+* initialization of run-statistics and histograms
+ CALL DT_STATIS(1)
+
+ CALL PHO_PHIST(1000,DUM)
+
+* initialization of Glauber-formalism
+ IF (NCOMPO.LE.0) THEN
+ CALL DT_SHMAKI(NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,EPN,IGLAU)
+ ELSE
+ DO 1 I=1,NCOMPO
+ CALL DT_SHMAKI(NPMASS,NPCHAR,IEMUMA(I),IEMUCH(I),IDP,EPN,0)
+ 1 CONTINUE
+ ENDIF
+ CALL DT_SIGEMU
+
+ CALL IDATE(IDMNYR)
+ WRITE(DATE,'(I2,''/'',I2,''/'',I2)')
+ & IDMNYR(1),IDMNYR(2),MOD(IDMNYR(3),100)
+ CALL ITIME(IDMNYR)
+ WRITE(HHMMSS,'(I2,'':'',I2,'':'',I2)')
+ & IDMNYR(1),IDMNYR(2),IDMNYR(3)
+ WRITE(LOUT,1001) DATE,HHMMSS
+ 1001 FORMAT(/,' DT_AAEVT: Initialisation finished. ( Date: ',A8,
+ & ' Time: ',A8,' )')
+
+* generate NEVTS events
+ DO 2 IEVT=1,NEVTS
+
+* print run-status message
+ IF (MOD(IEVT,NMSG).EQ.0) THEN
+ CALL IDATE(IDMNYR)
+ WRITE(DATE,'(I2,''/'',I2,''/'',I2)')
+ & IDMNYR(1),IDMNYR(2),MOD(IDMNYR(3),100)
+ CALL ITIME(IDMNYR)
+ WRITE(HHMMSS,'(I2,'':'',I2,'':'',I2)')
+ & IDMNYR(1),IDMNYR(2),IDMNYR(3)
+ WRITE(LOUT,1000) IEVT-1,NEVTS,DATE,HHMMSS
+ 1000 FORMAT(/,1X,I8,' out of ',I8,' events sampled ( Date: ',A,
+ & ' Time: ',A,' )',/)
+C WRITE(LOUT,1000) IEVT-1
+C1000 FORMAT(1X,I8,' events sampled')
+ ENDIF
+ NEVENT = IEVT
+* treat nuclear emulsions
+ IF (IEMUL.GT.0) CALL DT_GETEMU(NTMASS,NTCHAR,KKMAT,0)
+* composite targets only
+ KKMAT = -KKMAT
+* sample this event
+ CALL DT_KKINC(NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,EPN,KKMAT,IREJ)
+
+ CALL PHO_PHIST(2000,DUM)
+
+ 2 CONTINUE
+
+* print run-statistics and histograms to output-unit 6
+
+ CALL PHO_PHIST(3000,DUM)
+
+ CALL DT_STATIS(2)
+
+ RETURN
+ END
+*
+*===laevt==============================================================*
+*
+CDECK ID>, DT_LAEVT
+ SUBROUTINE DT_LAEVT(NEVTS,EPN,NPMASS,NPCHAR,NTMASS,NTCHAR,
+ & IDP,IGLAU)
+
+************************************************************************
+* Interface to run DPMJET for lepton-nucleus interactions. *
+* Kinematics is sampled using the equivalent photon approximation *
+* Based on GPHERA-routine by R. Engel. *
+* This version dated 23.03.96 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY4=1.0D-4,
+ & ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,THREE=3.0D0)
+ PARAMETER (TWOPI = 6.283185307179586454D+00,
+ & PI = TWOPI/TWO,
+ & ALPHEM = ONE/137.0D0)
+
+C CHARACTER*72 HEADER
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* kinematical cuts for lepton-nucleus interactions
+ COMMON /DTLCUT/ ECMIN,ECMAX,XBJMIN,ELMIN,EGMIN,EGMAX,YMIN,YMAX,
+ & Q2MIN,Q2MAX,THMIN,THMAX,Q2LI,Q2HI,ECMLI,ECMHI
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* kinematics at lepton-gamma vertex
+ COMMON /DTLGVX/ PPL0(4),PPL1(4),PPG(4),PPA(4)
+* flags for activated histograms
+ COMMON /DTHIS3/ IHISPP(50),IHISXS(50),IXSTBL
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+ DIMENSION XDUMB(40),BGTA(4)
+
+* LEPTO
+ IF (MCGENE.EQ.3) THEN
+
+ STOP ' This version does not contain LEPTO !'
+
+ ENDIF
+
+ KKMAT = 1
+ NMSG = MAX(NEVTS/10,1)
+
+* mass of incident lepton
+ AMLPT = AAM(IDP)
+ AMLPT2 = AMLPT**2
+ IDPPDG = IDT_IPDGHA(IDP)
+
+* consistency of kinematical limits
+ Q2MIN = MAX(Q2MIN,TINY10)
+ Q2MAX = MAX(Q2MAX,TINY10)
+ YMIN = MIN(MAX(YMIN,TINY10),0.999D0)
+ YMAX = MIN(MAX(YMAX,TINY10),0.999D0)
+
+* total energy of the lepton-nucleon system
+ PTOTLN = SQRT( (PLEPT0(1)+PNUCL(1))**2+(PLEPT0(2)+PNUCL(2))**2
+ & +(PLEPT0(3)+PNUCL(3))**2 )
+ ETOTLN = PLEPT0(4)+PNUCL(4)
+ ECMLN = SQRT((ETOTLN-PTOTLN)*(ETOTLN+PTOTLN))
+ ECMAX = MIN(ECMAX,ECMLN)
+ WRITE(LOUT,1003) ECMIN,ECMAX,YMIN,YMAX,Q2MIN,Q2MAX,EGMIN,
+ & THMIN,THMAX,ELMIN
+ 1003 FORMAT(1X,'LAEVT:',16X,'kinematical cuts',/,22X,
+ & '------------------',/,9X,'W (min) =',
+ & F7.1,' GeV (max) =',F7.1,' GeV',/,9X,'y (min) =',
+ & F7.3,8X,'(max) =',F7.3,/,9X,'Q^2 (min) =',F7.1,
+ & ' GeV^2 (max) =',F7.1,' GeV^2',/,' (Lab) E_g (min) ='
+ & ,F7.1,' GeV',/,' (Lab) theta (min) =',F7.4,8X,'(max) =',
+ & F7.4,' for E_lpt >',F7.1,' GeV',/)
+
+* Lorentz-parameter for transf. into Lab
+ BGTA(1) = PNUCL(1)/AAM(1)
+ BGTA(2) = PNUCL(2)/AAM(1)
+ BGTA(3) = PNUCL(3)/AAM(1)
+ BGTA(4) = PNUCL(4)/AAM(1)
+* LT of incident lepton into Lab and dump it in DTEVT1
+ CALL DT_DALTRA(BGTA(4),-BGTA(1),-BGTA(2),-BGTA(3),
+ & PLEPT0(1),PLEPT0(2),PLEPT0(3),PLEPT0(4),
+ & PLTOT,PPL0(1),PPL0(2),PPL0(3),PPL0(4))
+ CALL DT_DALTRA(BGTA(4),-BGTA(1),-BGTA(2),-BGTA(3),
+ & PNUCL(1),PNUCL(2),PNUCL(3),PNUCL(4),
+ & PLTOT,PPA(1),PPA(2),PPA(3),PPA(4))
+* maximum energy of photon nucleon system
+ PTOTGN = SQRT((YMAX*PPL0(1)+PPA(1))**2+(YMAX*PPL0(2)+PPA(2))**2
+ & +(YMAX*PPL0(3)+PPA(3))**2)
+ ETOTGN = YMAX*PPL0(4)+PPA(4)
+ EGNMAX = SQRT((ETOTGN-PTOTGN)*(ETOTGN+PTOTGN))
+ EGNMAX = MIN(EGNMAX,ECMAX)
+* minimum energy of photon nucleon system
+ PTOTGN = SQRT((YMIN*PPL0(1)+PPA(1))**2+(YMIN*PPL0(2)+PPA(2))**2
+ & +(YMIN*PPL0(3)+PPA(3))**2)
+ ETOTGN = YMIN*PPL0(4)+PPA(4)
+ EGNMIN = SQRT((ETOTGN-PTOTGN)*(ETOTGN+PTOTGN))
+ EGNMIN = MAX(EGNMIN,ECMIN)
+
+* limits for Glauber-initialization
+ Q2LI = Q2MIN
+ Q2HI = MAX(Q2LI,MIN(Q2HI,Q2MAX))
+ ECMLI = MAX(EGNMIN,THREE)
+ ECMHI = EGNMAX
+ WRITE(LOUT,1004) EGNMIN,EGNMAX,ECMLI,ECMHI,Q2LI,Q2HI
+ 1004 FORMAT(1X,'resulting limits:',/,9X,'W (min) =',F7.1,
+ & ' GeV (max) =',F7.1,' GeV',/,/,' limits for ',
+ & 'Glauber-initialization:',/,9X,'W (min) =',F7.1,
+ & ' GeV (max) =',F7.1,' GeV',/,9X,'Q^2 (min) =',F7.1,
+ & ' GeV^2 (max) =',F7.1,' GeV^2',/)
+* initialization of Glauber-formalism
+ IF (NCOMPO.LE.0) THEN
+ CALL DT_SHMAKI(NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,EPN,IGLAU)
+ ELSE
+ DO 9 I=1,NCOMPO
+ CALL DT_SHMAKI(NPMASS,NPCHAR,IEMUMA(I),IEMUCH(I),IDP,EPN,0)
+ 9 CONTINUE
+ ENDIF
+ CALL DT_SIGEMU
+
+* initialization of run-statistics and histograms
+ CALL DT_STATIS(1)
+
+ CALL PHO_PHIST(1000,DUM)
+
+* maximum photon-nucleus cross section
+ I1 = 1
+ I2 = 1
+ RAT = ONE
+ IF (EGNMAX.GE.ECMNN(NEBINI)) THEN
+ I1 = NEBINI
+ I2 = NEBINI
+ RAT = ONE
+ ELSEIF (EGNMAX.GT.ECMNN(1)) THEN
+ DO 5 I=2,NEBINI
+ IF (EGNMAX.LT.ECMNN(I)) THEN
+ I1 = I-1
+ I2 = I
+ RAT = (EGNMAX-ECMNN(I1))/(ECMNN(I2)-ECMNN(I1))
+ GOTO 6
+ ENDIF
+ 5 CONTINUE
+ 6 CONTINUE
+ ENDIF
+ SIGMAX = XSTOT(I1,1,1)+RAT*(XSTOT(I2,1,1)-XSTOT(I1,1,1))
+ EGNXX = EGNMAX
+ I1 = 1
+ I2 = 1
+ RAT = ONE
+ IF (EGNMIN.GE.ECMNN(NEBINI)) THEN
+ I1 = NEBINI
+ I2 = NEBINI
+ RAT = ONE
+ ELSEIF (EGNMIN.GT.ECMNN(1)) THEN
+ DO 7 I=2,NEBINI
+ IF (EGNMIN.LT.ECMNN(I)) THEN
+ I1 = I-1
+ I2 = I
+ RAT = (EGNMIN-ECMNN(I1))/(ECMNN(I2)-ECMNN(I1))
+ GOTO 8
+ ENDIF
+ 7 CONTINUE
+ 8 CONTINUE
+ ENDIF
+ SIGXX = XSTOT(I1,1,1)+RAT*(XSTOT(I2,1,1)-XSTOT(I1,1,1))
+ IF (SIGXX.GT.SIGMAX) EGNXX = EGNMIN
+ SIGMAX = MAX(SIGMAX,SIGXX)
+ WRITE(LOUT,'(9X,A,F8.3,A)') 'Sigma_tot (max) =',SIGMAX,' mb'
+
+* plot photon flux table
+ AYMIN = LOG(YMIN)
+ AYMAX = LOG(YMAX)
+ AYRGE = AYMAX-AYMIN
+ MAXTAB = 50
+ ADY = LOG(YMAX/YMIN)/DBLE(MAXTAB-1)
+C WRITE(LOUT,'(/,1X,A)') 'LAEVT: photon flux '
+ DO 1 I=1,MAXTAB
+ Y = EXP(AYMIN+ADY*DBLE(I-1))
+ Q2LOW = MAX(Q2MIN,AMLPT2*Y**2/(ONE-Y))
+ FF1 = ALPHEM/TWOPI * ((ONE+(ONE-Y)**2)/Y*LOG(Q2MAX/Q2LOW)
+ & -TWO*AMLPT2*Y*(ONE/Q2LOW-ONE/Q2MAX))
+ FF2 = ALPHEM/TWOPI * ((ONE+(ONE-Y)**2)/Y*LOG(Q2MAX/Q2LOW)
+ & -TWO*(ONE-Y)/Y*(ONE-Q2LOW/Q2MAX))
+C WRITE(LOUT,'(5X,3E15.4)') Y,FF1,FF2
+ 1 CONTINUE
+
+* maximum residual weight for flux sampling (dy/y)
+ YY = YMIN
+ Q2LOW = MAX(Q2MIN,AMLPT2*YY**2/(ONE-YY))
+ WGHMAX = (ONE+(ONE-YY)**2)*LOG(Q2MAX/Q2LOW)
+ & -TWO*AMLPT2*YY*(ONE/Q2LOW-ONE/Q2MAX)*YY
+
+ CALL DT_NEWHGR(YMIN,YMAX,ZERO,XDUMB,49,IHFLY0)
+ CALL DT_NEWHGR(YMIN,YMAX,ZERO,XDUMB,49,IHFLY1)
+ CALL DT_NEWHGR(YMIN,YMAX,ZERO,XDUMB,49,IHFLY2)
+ CALL DT_NEWHGR(Q2LOW,Q2MAX,ZERO,XDUMB,20,IHFLQ0)
+ CALL DT_NEWHGR(Q2LOW,Q2MAX,ZERO,XDUMB,20,IHFLQ1)
+ CALL DT_NEWHGR(Q2LOW,Q2MAX,ZERO,XDUMB,20,IHFLQ2)
+ CALL DT_NEWHGR(EGNMIN,EGNMAX,ZERO,XDUMB,20,IHFLE0)
+ CALL DT_NEWHGR(EGNMIN,EGNMAX,ZERO,XDUMB,20,IHFLE1)
+ CALL DT_NEWHGR(EGNMIN,EGNMAX,ZERO,XDUMB,20,IHFLE2)
+ CALL DT_NEWHGR(ZERO,EGMAX,ZERO,XDUMB,20,IHFLU0)
+ CALL DT_NEWHGR(ZERO,EGMAX,ZERO,XDUMB,20,IHFLU1)
+ CALL DT_NEWHGR(ZERO,EGMAX,ZERO,XDUMB,20,IHFLU2)
+ XBLOW = 0.001D0
+ CALL DT_NEWHGR(XBLOW,ONE,ZERO,XDUMB,-40,IHFLX0)
+ CALL DT_NEWHGR(XBLOW,ONE,ZERO,XDUMB,-40,IHFLX1)
+ CALL DT_NEWHGR(XBLOW,ONE,ZERO,XDUMB,-40,IHFLX2)
+
+ ITRY = 0
+ ITRW = 0
+ NC0 = 0
+ NC1 = 0
+
+* generate events
+ DO 2 IEVT=1,NEVTS
+ IF (MOD(IEVT,NMSG).EQ.0) THEN
+C OPEN(LDAT,FILE='/scrtch3/hr/sroesler/statusd5.out',
+C & STATUS='UNKNOWN')
+ WRITE(LOUT,'(1X,I8,A)') IEVT-1,' events sampled'
+C CLOSE(LDAT)
+ ENDIF
+ NEVENT = IEVT
+
+ 100 CONTINUE
+ ITRY = ITRY+1
+
+* sample y
+ 101 CONTINUE
+ ITRW = ITRW+1
+ YY = EXP(AYRGE*DT_RNDM(RAT)+AYMIN)
+ Q2LOW = MAX(Q2MIN,AMLPT2*YY**2/(ONE-YY))
+ Q2LOG = LOG(Q2MAX/Q2LOW)
+ WGH = (ONE+(ONE-YY)**2)*Q2LOG
+ & -TWO*AMLPT2*YY*(ONE/Q2LOW-ONE/Q2MAX)*YY
+ IF (WGHMAX.LT.WGH) WRITE(LOUT,1000) YY,WGHMAX,WGH
+ 1000 FORMAT(1X,'LAEVT: weight error!',3E12.5)
+ IF (DT_RNDM(YY)*WGHMAX.GT.WGH) GOTO 101
+
+* sample Q2
+ YEFF = ONE+(ONE-YY)**2
+ 102 CONTINUE
+ Q2 = Q2LOW*EXP(Q2LOG*DT_RNDM(YY))
+ WGH = (YEFF-TWO*(ONE-YY)*Q2LOW/Q2)/YEFF
+ IF (WGH.LT.DT_RNDM(Q2)) GOTO 102
+
+c NC0 = NC0+1
+c CALL DT_FILHGR(YY,ONE,IHFLY0,NC0)
+c CALL DT_FILHGR(Q2,ONE,IHFLQ0,NC0)
+
+* kinematics at lepton-photon vertex
+* scattered electron
+ YQ2 = SQRT((ONE-YY)*Q2)
+ Q2E = Q2/(4.0D0*PLEPT0(4))
+ E1Y = (ONE-YY)*PLEPT0(4)
+ CALL DT_DSFECF(SIF,COF)
+ PLEPT1(1) = YQ2*COF
+ PLEPT1(2) = YQ2*SIF
+ PLEPT1(3) = E1Y-Q2E
+ PLEPT1(4) = E1Y+Q2E
+C THETA = ACOS( (E1Y-Q2E)/(E1Y+Q2E) )
+* radiated photon
+ PGAMM(1) = -PLEPT1(1)
+ PGAMM(2) = -PLEPT1(2)
+ PGAMM(3) = PLEPT0(3)-PLEPT1(3)
+ PGAMM(4) = PLEPT0(4)-PLEPT1(4)
+* E_cm cut
+ PTOTGN = SQRT( (PGAMM(1)+PNUCL(1))**2+(PGAMM(2)+PNUCL(2))**2
+ & +(PGAMM(3)+PNUCL(3))**2 )
+ ETOTGN = PGAMM(4)+PNUCL(4)
+ ECMGN = (ETOTGN-PTOTGN)*(ETOTGN+PTOTGN)
+ IF (ECMGN.LT.0.1D0) GOTO 101
+ ECMGN = SQRT(ECMGN)
+ IF ((ECMGN.LT.ECMIN).OR.(ECMGN.GT.ECMAX)) GOTO 101
+
+* Lorentz-transformation into nucleon-rest system
+ CALL DT_DALTRA(BGTA(4),-BGTA(1),-BGTA(2),-BGTA(3),
+ & PGAMM(1),PGAMM(2),PGAMM(3),PGAMM(4),
+ & PGTOT,PPG(1),PPG(2),PPG(3),PPG(4))
+ CALL DT_DALTRA(BGTA(4),-BGTA(1),-BGTA(2),-BGTA(3),
+ & PLEPT1(1),PLEPT1(2),PLEPT1(3),PLEPT1(4),
+ & PLTOT,PPL1(1),PPL1(2),PPL1(3),PPL1(4))
+* temporary checks..
+ Q2TMP = ABS(PPG(4)**2-PGTOT**2)
+ IF (ABS(Q2-Q2TMP).GT.0.01D0) WRITE(LOUT,1001) Q2,Q2TMP
+ 1001 FORMAT(1X,'LAEVT: inconsistent kinematics (Q2,Q2TMP) ',
+ & 2F10.4)
+ ECMTMP = SQRT((PPG(4)+AAM(1)-PGTOT)*(PPG(4)+AAM(1)+PGTOT))
+ IF (ABS(ECMGN-ECMTMP).GT.TINY10) WRITE(LOUT,1002) ECMGN,ECMTMP
+ 1002 FORMAT(1X,'LAEVT: inconsistent kinematics (ECMGN,ECMTMP) ',
+ & 2F10.2)
+ YYTMP = PPG(4)/PPL0(4)
+ IF (ABS(YY-YYTMP).GT.0.01D0) WRITE(LOUT,1005) YY,YYTMP
+ 1005 FORMAT(1X,'LAEVT: inconsistent kinematics (YY,YYTMP) ',
+ & 2F10.4)
+
+* lepton tagger (Lab)
+ THETA = ACOS( PPL1(3)/PLTOT )
+ IF (PPL1(4).GT.ELMIN) THEN
+ IF ((THETA.LT.THMIN).OR.(THETA.GT.THMAX)) GOTO 101
+ ENDIF
+* photon energy-cut (Lab)
+ IF (PPG(4).LT.EGMIN) GOTO 101
+ IF (PPG(4).GT.EGMAX) GOTO 101
+* x_Bj cut
+ XBJ = ABS(Q2/(1.876D0*PPG(4)))
+ IF (XBJ.LT.XBJMIN) GOTO 101
+
+ NC0 = NC0+1
+ CALL DT_FILHGR( Q2,ONE,IHFLQ0,NC0)
+ CALL DT_FILHGR( YY,ONE,IHFLY0,NC0)
+ CALL DT_FILHGR( XBJ,ONE,IHFLX0,NC0)
+ CALL DT_FILHGR(PPG(4),ONE,IHFLU0,NC0)
+ CALL DT_FILHGR( ECMGN,ONE,IHFLE0,NC0)
+
+* rotation angles against z-axis
+ COD = PPG(3)/PGTOT
+C SID = SQRT((ONE-COD)*(ONE+COD))
+ PPT = SQRT(PPG(1)**2+PPG(2)**2)
+ SID = PPT/PGTOT
+ COF = ONE
+ SIF = ZERO
+ IF (PGTOT*SID.GT.TINY10) THEN
+ COF = PPG(1)/(SID*PGTOT)
+ SIF = PPG(2)/(SID*PGTOT)
+ ANORF = SQRT(COF*COF+SIF*SIF)
+ COF = COF/ANORF
+ SIF = SIF/ANORF
+ ENDIF
+
+ IF (IXSTBL.EQ.0) THEN
+* change to photon projectile
+ IJPROJ = 7
+* set virtuality
+ VIRT = Q2
+* re-initialize LTs with new kinematics
+* !!PGAMM ist set in cms (ECMGN) along z
+ EPN = ZERO
+ PPN = ZERO
+ CALL DT_LTINI(IJPROJ,IJTARG,EPN,PPN,ECMGN,0)
+* Introduced by Chiara -> force CMS-system
+* IFRAME = 2
+* to force Lab-system
+ IFRAME = 1
+* get emulsion component if requested
+ IF (IEMUL.GT.0) CALL DT_GETEMU(NTMASS,NTCHAR,KKMAT,0)
+* convolute with cross section
+ CALL DT_SIGGAT(Q2LOW,EGNXX,STOTX,KKMAT)
+ CALL DT_SIGGAT(Q2,ECMGN,STOT,KKMAT)
+ IF (STOTX.LT.STOT) WRITE(LOUT,'(1X,A,/,6E12.3)')
+ & 'LAEVT: warning STOTX<STOT ! ',Q2LOW,EGNMAX,STOTX,
+ & Q2,ECMGN,STOT
+ IF (DT_RNDM(Q2)*STOTX.GT.STOT) GOTO 100
+ NC1 = NC1+1
+ CALL DT_FILHGR( Q2,ONE,IHFLQ1,NC1)
+ CALL DT_FILHGR( YY,ONE,IHFLY1,NC1)
+ CALL DT_FILHGR( XBJ,ONE,IHFLX1,NC1)
+ CALL DT_FILHGR(PPG(4),ONE,IHFLU1,NC1)
+ CALL DT_FILHGR( ECMGN,ONE,IHFLE1,NC1)
+* composite targets only
+ KKMAT = -KKMAT
+* sample this event
+ CALL DT_KKINC(NPMASS,NPCHAR,NTMASS,NTCHAR,IJPROJ,EPN,KKMAT,
+ & IREJ)
+* rotate momenta of final state particles back in photon-nucleon syst.
+ DO 4 I=NPOINT(4),NHKK
+ IF ((ABS(ISTHKK(I)).EQ.1).OR.(ISTHKK(I).EQ.1000).OR.
+ & (ISTHKK(I).EQ.1001)) THEN
+ PX = PHKK(1,I)
+ PY = PHKK(2,I)
+ PZ = PHKK(3,I)
+ CALL DT_MYTRAN(1,PX,PY,PZ,COD,SID,COF,SIF,
+ & PHKK(1,I),PHKK(2,I),PHKK(3,I))
+ ENDIF
+ 4 CONTINUE
+ ENDIF
+
+ CALL DT_FILHGR( Q2,ONE,IHFLQ2,NC1)
+ CALL DT_FILHGR( YY,ONE,IHFLY2,NC1)
+ CALL DT_FILHGR( XBJ,ONE,IHFLX2,NC1)
+ CALL DT_FILHGR(PPG(4),ONE,IHFLU2,NC1)
+ CALL DT_FILHGR( ECMGN,ONE,IHFLE2,NC1)
+
+* dump this event to histograms
+
+ CALL PHO_PHIST(2000,DUM)
+
+ 2 CONTINUE
+
+ WGY = ALPHEM/TWOPI*WGHMAX*DBLE(ITRY)/DBLE(ITRW)
+ WGY = WGY*LOG(YMAX/YMIN)
+ WEIGHT = WGY*SIGMAX*DBLE(NEVTS)/DBLE(ITRY)
+
+C HEADER = ' LAEVT: Q^2 distribution 0'
+C CALL DT_OUTHGR(IHFLQ0,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: Q^2 distribution 1'
+C CALL DT_OUTHGR(IHFLQ1,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: Q^2 distribution 2'
+C CALL DT_OUTHGR(IHFLQ2,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: y distribution 0'
+C CALL DT_OUTHGR(IHFLY0,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: y distribution 1'
+C CALL DT_OUTHGR(IHFLY1,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: y distribution 2'
+C CALL DT_OUTHGR(IHFLY2,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: x distribution 0'
+C CALL DT_OUTHGR(IHFLX0,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: x distribution 1'
+C CALL DT_OUTHGR(IHFLX1,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: x distribution 2'
+C CALL DT_OUTHGR(IHFLX2,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: E_g distribution 0'
+C CALL DT_OUTHGR(IHFLU0,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: E_g distribution 1'
+C CALL DT_OUTHGR(IHFLU1,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: E_g distribution 2'
+C CALL DT_OUTHGR(IHFLU2,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: E_c distribution 0'
+C CALL DT_OUTHGR(IHFLE0,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: E_c distribution 1'
+C CALL DT_OUTHGR(IHFLE1,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+C HEADER = ' LAEVT: E_c distribution 2'
+C CALL DT_OUTHGR(IHFLE2,0,0,0,0,0,HEADER,0,NEVTS,ONE,1,1,-1)
+
+* print run-statistics and histograms to output-unit 6
+
+ CALL PHO_PHIST(3000,DUM)
+
+ IF (IXSTBL.EQ.0) CALL DT_STATIS(2)
+
+ RETURN
+ END
+*
+*===dtuini=============================================================*
+*
+CDECK ID>, DT_DTUINI
+ SUBROUTINE DT_DTUINI(NEVTS,EPN,NPMASS,NPCHAR,NTMASS,NTCHAR,
+ & IDP,IEMU)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+
+ CALL DT_INIT(NEVTS,EPN,NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,IGLAU)
+ CALL DT_STATIS(1)
+
+ CALL PHO_PHIST(1000,DUM)
+
+ IF (NCOMPO.LE.0) THEN
+ CALL DT_SHMAKI(NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,EPN,IGLAU)
+ ELSE
+ DO 1 I=1,NCOMPO
+ CALL DT_SHMAKI(NPMASS,NPCHAR,IEMUMA(I),IEMUCH(I),IDP,EPN,0)
+ 1 CONTINUE
+ ENDIF
+ IF (IOGLB.NE.100) CALL DT_SIGEMU
+ IEMU = IEMUL
+
+ RETURN
+ END
+*
+*===dtuout=============================================================*
+*
+CDECK ID>, DT_DTUOUT
+ SUBROUTINE DT_DTUOUT
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ CALL PHO_PHIST(3000,DUM)
+
+ CALL DT_STATIS(2)
+
+ RETURN
+ END
+*
+*===beam===============================================================*
+*
+CDECK ID>, DT_BEAMPR
+ SUBROUTINE DT_BEAMPR(WHAT,PLAB,MODE)
+
+************************************************************************
+* Initialization of event generation *
+* This version dated 7.4.98 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY10=1.0D-10)
+ PARAMETER (TWOPI=6.283185307D0,BOG=TWOPI/360.0D0)
+
+ LOGICAL LBEAM
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* beam momenta
+ COMMON /DTBEAM/ P1(4),P2(4)
+
+C DIMENSION WHAT(6),P1(4),P2(4),P1CMS(4),P2CMS(4)
+ DIMENSION WHAT(6),P1CMS(4),P2CMS(4)
+
+ DATA LBEAM /.FALSE./
+
+ GOTO (1,2) MODE
+
+ 1 CONTINUE
+
+ E1 = WHAT(1)
+ IF (E1.LT.ZERO) E1 = DBLE(IPZ)/DBLE(IP)*ABS(WHAT(1))
+ E2 = WHAT(2)
+ IF (E2.LT.ZERO) E2 = DBLE(ITZ)/DBLE(IT)*ABS(WHAT(2))
+ PP1 = SQRT( (E1+AAM(IJPROJ))*(E1-AAM(IJPROJ)) )
+ PP2 = SQRT( (E2+AAM(IJTARG))*(E2-AAM(IJTARG)) )
+ TH = 1.D-6*WHAT(3)/2.D0
+ PH = WHAT(4)*BOG
+ P1(1) = PP1*SIN(TH)*COS(PH)
+ P1(2) = PP1*SIN(TH)*SIN(PH)
+ P1(3) = PP1*COS(TH)
+ P1(4) = E1
+ P2(1) = PP2*SIN(TH)*COS(PH)
+ P2(2) = PP2*SIN(TH)*SIN(PH)
+ P2(3) = -PP2*COS(TH)
+ P2(4) = E2
+ ECM = SQRT( (P1(4)+P2(4))**2-(P1(1)+P2(1))**2-(P1(2)+P2(2))**2
+ & -(P1(3)+P2(3))**2 )
+ ELAB = (ECM**2-AAM(IJPROJ)**2-AAM(IJTARG)**2)/(2.0D0*AAM(IJTARG))
+ PLAB = SQRT( (ELAB+AAM(IJPROJ))*(ELAB-AAM(IJPROJ)) )
+ BGX = (P1(1)+P2(1))/ECM
+ BGY = (P1(2)+P2(2))/ECM
+ BGZ = (P1(3)+P2(3))/ECM
+ BGE = (P1(4)+P2(4))/ECM
+ CALL DT_DALTRA(BGE,-BGX,-BGY,-BGZ,P1(1),P1(2),P1(3),P1(4),
+ & P1TOT,P1CMS(1),P1CMS(2),P1CMS(3),P1CMS(4))
+ CALL DT_DALTRA(BGE,-BGX,-BGY,-BGZ,P2(1),P2(2),P2(3),P2(4),
+ & P2TOT,P2CMS(1),P2CMS(2),P2CMS(3),P2CMS(4))
+ COD = P1CMS(3)/P1TOT
+C SID = SQRT((ONE-COD)*(ONE+COD))
+ PPT = SQRT(P1CMS(1)**2+P1CMS(2)**2)
+ SID = PPT/P1TOT
+ COF = ONE
+ SIF = ZERO
+ IF (P1TOT*SID.GT.TINY10) THEN
+ COF = P1CMS(1)/(SID*P1TOT)
+ SIF = P1CMS(2)/(SID*P1TOT)
+ ANORF = SQRT(COF*COF+SIF*SIF)
+ COF = COF/ANORF
+ SIF = SIF/ANORF
+ ENDIF
+**check
+C WRITE(LOUT,'(4E15.4)') P1(1),P1(2),P1(3),P1(4)
+C WRITE(LOUT,'(4E15.4)') P2(1),P2(2),P2(3),P2(4)
+C WRITE(LOUT,'(5E15.4)') P1CMS(1),P1CMS(2),P1CMS(3),P1CMS(4),P1TOT
+C WRITE(LOUT,'(5E15.4)') P2CMS(1),P2CMS(2),P2CMS(3),P2CMS(4),P2TOT
+C PAX = ZERO
+C PAY = ZERO
+C PAZ = P1TOT
+C PAE = SQRT(AAM(IJPROJ)**2+PAZ**2)
+C PBX = ZERO
+C PBY = ZERO
+C PBZ = -P2TOT
+C PBE = SQRT(AAM(IJTARG)**2+PBZ**2)
+C WRITE(LOUT,'(4E15.4)') PAX,PAY,PAZ,PAE
+C WRITE(LOUT,'(4E15.4)') PBX,PBY,PBZ,PBE
+C CALL DT_MYTRAN(1,PAX,PAY,PAZ,COD,SID,COF,SIF,
+C & P1CMS(1),P1CMS(2),P1CMS(3))
+C CALL DT_MYTRAN(1,PBX,PBY,PBZ,COD,SID,COF,SIF,
+C & P2CMS(1),P2CMS(2),P2CMS(3))
+C WRITE(LOUT,'(4E15.4)') P1CMS(1),P1CMS(2),P1CMS(3),P1CMS(4)
+C WRITE(LOUT,'(4E15.4)') P2CMS(1),P2CMS(2),P2CMS(3),P2CMS(4)
+C CALL DT_DALTRA(BGE,BGX,BGY,BGZ,P1CMS(1),P1CMS(2),P1CMS(3),P1CMS(4),
+C & P1TOT,P1(1),P1(2),P1(3),P1(4))
+C CALL DT_DALTRA(BGE,BGX,BGY,BGZ,P2CMS(1),P2CMS(2),P2CMS(3),P2CMS(4),
+C & P2TOT,P2(1),P2(2),P2(3),P2(4))
+C WRITE(LOUT,'(4E15.4)') P1(1),P1(2),P1(3),P1(4)
+C WRITE(LOUT,'(4E15.4)') P2(1),P2(2),P2(3),P2(4)
+C STOP
+**
+
+ LBEAM = .TRUE.
+
+ RETURN
+
+ 2 CONTINUE
+
+ IF (LBEAM) THEN
+ IF ( (NPOINT(4).EQ.0).OR.(NHKK.LT.NPOINT(4)) ) RETURN
+ DO 20 I=NPOINT(4),NHKK
+ IF ((ABS(ISTHKK(I)).EQ.1).OR.(ISTHKK(I).EQ.1000).OR.
+ & (ISTHKK(I).EQ.1001)) THEN
+ CALL DT_MYTRAN(1,PHKK(1,I),PHKK(2,I),PHKK(3,I),
+ & COD,SID,COF,SIF,PXCMS,PYCMS,PZCMS)
+ PECMS = PHKK(4,I)
+ CALL DT_DALTRA(BGE,BGX,BGY,BGZ,PXCMS,PYCMS,PZCMS,PECMS,
+ & PTOT,PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I))
+ ENDIF
+ 20 CONTINUE
+ ELSE
+ MODE = -1
+ ENDIF
+
+ RETURN
+ END
+*
+*===eventb=============================================================*
+*
+CDECK ID>, DT_EVENTB
+ SUBROUTINE DT_EVENTB(NCSY,IREJ)
+
+************************************************************************
+* Treatment of nucleon-nucleon interactions with full two-component *
+* Dual Parton Model. *
+* NCSY number of nucleon-nucleon interactions *
+* IREJ rejection flag *
+* This version dated 14.01.2000 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ZERO=0.0D0,ONE=1.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+*! uncomment this line for internal phojet-fragmentation
+C #include "dtu_dtevtp.inc"
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* DTUNUC-PHOJET interface, Lorentz-param. of n-n subsystem
+ COMMON /DTLTSU/ BGX,BGY,BGZ,GAM
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* statistics: double-Pomeron exchange
+ COMMON /DTFLG2/ INTFLG,IPOPO
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C initial state parton radiation (internal part)
+ INTEGER MXISR3,MXISR4
+ PARAMETER ( MXISR3 = 50, MXISR4 = 100 )
+ INTEGER IFL1,IFL2,IBRA,IFANO,ISH,NACC
+ DOUBLE PRECISION Q2SH,PT2SH,XPSH,ZPSH,THSH,SHAT
+ COMMON /POINT6/ Q2SH(2,MXISR3),PT2SH(2,MXISR3),XPSH(2,MXISR3),
+ & ZPSH(2,MXISR3),THSH(2,MXISR3),SHAT(MXISR3),
+ & IFL1(2,MXISR3),IFL2(2,MXISR3),
+ & IBRA(2,MXISR4),IFANO(2),ISH(2),NACC
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+
+ DIMENSION PP(4),PT(4),PTOT(4),PP1(4),PP2(4),PT1(4),PT2(4),
+ & PPNN(4),PTNN(4),PTOTNN(4),PPSUB(4),PTSUB(4),
+ & PPTCMS(4),PTTCMS(4),PPTMP(4),PTTMP(4),
+ & KPRON(15),ISINGL(2000)
+
+* initial values for max. number of phojet scatterings and dtunuc chains
+* to be fragmented with one pyexec call
+ DATA MXPHFR,MXDTFR /10,100/
+
+ IREJ = 0
+* pointer to first parton of the first chain in dtevt common
+ NPOINT(3) = NHKK+1
+* special flag for double-Pomeron statistics
+ IPOPO = 1
+* counter for low-mass (DTUNUC) interactions
+ NDTUSC = 0
+* counter for interactions treated by PHOJET
+ NPHOSC = 0
+
+* scan interactions for single nucleon-nucleon interactions
+* (this has to be checked here because Cronin modifies parton momenta)
+ NC = NPOINT(2)
+ IF (NCSY.GT.2000) STOP ' DT_EVENTB: NCSY > 2000 ! '
+ DO 8 I=1,NCSY
+ ISINGL(I) = 0
+ MOP = JMOHKK(1,NC)
+ MOT = JMOHKK(1,NC+1)
+ DIFF1 = ABS(PHKK(4,MOP)-PHKK(4, NC)-PHKK(4,NC+2))
+ DIFF2 = ABS(PHKK(4,MOT)-PHKK(4,NC+1)-PHKK(4,NC+3))
+ IF ((DIFF1.LT.TINY10).AND.(DIFF2.LT.TINY10)) ISINGL(I) = 1
+ NC = NC+4
+ 8 CONTINUE
+
+* multiple scattering of chain ends
+ IF ((IP.GT.1).AND.(MKCRON.NE.0)) CALL DT_CRONIN(1)
+ IF ((IT.GT.1).AND.(MKCRON.NE.0)) CALL DT_CRONIN(2)
+
+* switch to PHOJET-settings for JETSET parameter
+ CALL DT_INITJS(1)
+
+* loop over nucleon-nucleon interaction
+ NC = NPOINT(2)
+ DO 2 I=1,NCSY
+*
+* pick up one nucleon-nucleon interaction from DTEVT1
+* ppnn / ptnn - momenta of the interacting nucleons (cms)
+* ptotnn - total momentum of the interacting nucleons (cms)
+* pp1,2 / pt1,2 - momenta of the four partons
+* pp / pt - total momenta of the proj / targ partons
+* ptot - total momentum of the four partons
+ MOP = JMOHKK(1,NC)
+ MOT = JMOHKK(1,NC+1)
+ DO 3 K=1,4
+ PPNN(K) = PHKK(K,MOP)
+ PTNN(K) = PHKK(K,MOT)
+ PTOTNN(K) = PPNN(K)+PTNN(K)
+ PP1(K) = PHKK(K,NC)
+ PT1(K) = PHKK(K,NC+1)
+ PP2(K) = PHKK(K,NC+2)
+ PT2(K) = PHKK(K,NC+3)
+ PP(K) = PP1(K)+PP2(K)
+ PT(K) = PT1(K)+PT2(K)
+ PTOT(K) = PP(K)+PT(K)
+ 3 CONTINUE
+*
+*-----------------------------------------------------------------------
+* this is a complete nucleon-nucleon interaction
+*
+ IF (ISINGL(I).EQ.1) THEN
+*
+* initialize PHOJET-variables for remnant/valence-partons
+ IHFLD(1,1) = 0
+ IHFLD(1,2) = 0
+ IHFLD(2,1) = 0
+ IHFLD(2,2) = 0
+ IHFLS(1) = 1
+ IHFLS(2) = 1
+* save current settings of PHOJET process and min. bias flags
+ DO 9 K=1,11
+ KPRON(K) = IPRON(K,1)
+ 9 CONTINUE
+ ISWSAV = ISWMDL(2)
+*
+* check if forced sampling of diffractive interaction requested
+ IF (ISINGD.LT.-1) THEN
+ DO 90 K=1,11
+ IPRON(K,1) = 0
+ 90 CONTINUE
+ IF ((ISINGD.EQ.-2).OR.(ISINGD.EQ.-3)) IPRON(5,1) = 1
+ IF ((ISINGD.EQ.-2).OR.(ISINGD.EQ.-4)) IPRON(6,1) = 1
+ IF (ISINGD.EQ.-5) IPRON(4,1) = 1
+ ENDIF
+*
+* for photons: a direct/anomalous interaction is not sampled
+* in PHOJET but already in Glauber-formalism. Here we check if such
+* an interaction is requested
+ IF (IJPROJ.EQ.7) THEN
+* first switch off direct interactions
+ IPRON(8,1) = 0
+* this is a direct interactions
+ IF (IDIREC.EQ.1) THEN
+ DO 12 K=1,11
+ IPRON(K,1) = 0
+ 12 CONTINUE
+ IPRON(8,1) = 1
+* this is an anomalous interactions
+* (iswmdl(2) = 0 only hard int. generated ( = 1 min. bias) )
+ ELSEIF (IDIREC.EQ.2) THEN
+ ISWMDL(2) = 0
+ ENDIF
+ ELSE
+ IF (IDIREC.NE.0) STOP ' DT_EVENTB: IDIREC > 0 ! '
+ ENDIF
+*
+* make sure that total momenta of partons, pp and pt, are on mass
+* shell (Cronin may have srewed this up..)
+ CALL DT_MASHEL(PP,PT,PHKK(5,MOP),PHKK(5,MOT),PPNN,PTNN,IR1)
+ IF (IR1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,'(1X,A)')
+ & 'EVENTB: mass shell correction rejected'
+ GOTO 9999
+ ENDIF
+*
+* initialize the incoming particles in PHOJET
+ IF ((IP.EQ.1).AND.(IJPROJ.EQ.7)) THEN
+
+ CALL PHO_SETPAR(1,22,0,VIRT)
+
+ ELSE
+
+ CALL PHO_SETPAR(1,IDHKK(MOP),0,ZERO)
+
+ ENDIF
+
+ CALL PHO_SETPAR(2,IDHKK(MOT),0,ZERO)
+
+*
+* initialize rejection loop counter for anomalous processes
+ IRJANO = 0
+ 800 CONTINUE
+ IRJANO = IRJANO+1
+*
+* temporary fix for ifano problem
+ IFANO(1) = 0
+ IFANO(2) = 0
+*
+* generate complete hadron/nucleon/photon-nucleon event with PHOJET
+
+ CALL PHO_EVENT(2,PPNN,PTNN,DUM,IREJ1)
+
+*
+* for photons: special consistency check for anomalous interactions
+ IF (IJPROJ.EQ.7) THEN
+ IF (IRJANO.LT.30) THEN
+ IF (IFANO(1).NE.0) THEN
+* here, an anomalous interaction was generated. Check if it
+* was also requested. Otherwise reject this event.
+ IF (IDIREC.EQ.0) GOTO 800
+ ELSE
+* here, an anomalous interaction was not generated. Check if it
+* was requested in which case we need to reject this event.
+ IF (IDIREC.EQ.2) GOTO 800
+ ENDIF
+ ELSE
+ WRITE(LOUT,*) ' DT_EVENTB: Warning! IRJANO > 30 ',
+ & IRJANO,IDIREC,NEVHKK
+ ENDIF
+ ENDIF
+*
+* copy back original settings of PHOJET process and min. bias flags
+ DO 10 K=1,11
+ IPRON(K,1) = KPRON(K)
+ 10 CONTINUE
+ ISWMDL(2) = ISWSAV
+*
+* check if PHOJET has rejected this event
+ IF (IREJ1.NE.0) THEN
+C IF (IOULEV(1).GT.0) WRITE(LOUT,'(1X,A,I4)')
+ WRITE(LOUT,'(1X,A,I4)')
+ & 'EVENTB: chain system rejected',IDIREC
+
+ CALL PHO_PREVNT(0)
+
+ GOTO 9999
+ ENDIF
+*
+* copy partons and strings from PHOJET common back into DTEVT for
+* external fragmentation
+ MO1 = NC
+ MO2 = NC+3
+*! uncomment this line for internal phojet-fragmentation
+C CALL DT_GETFSP(MO1,MO2,PPNN,PTNN,-1)
+ NPHOSC = NPHOSC+1
+ CALL DT_GETPJE(MO1,MO2,PPNN,PTNN,-1,NPHOSC,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0)
+ & WRITE(LOUT,'(1X,A,I4)') 'EVENTB: chain system rejected 1'
+ GOTO 9999
+ ENDIF
+*
+* update statistics counter
+ ICEVTG(IDCH(NC),29) = ICEVTG(IDCH(NC),29)+1
+*
+*-----------------------------------------------------------------------
+* this interaction involves "remnants"
+*
+ ELSE
+*
+* total mass of this system
+ PPTOT = SQRT(PTOT(1)**2+PTOT(2)**2+PTOT(3)**2)
+ AMTOT2 = (PTOT(4)-PPTOT)*(PTOT(4)+PPTOT)
+ IF (AMTOT2.LT.ZERO) THEN
+ AMTOT = ZERO
+ ELSE
+ AMTOT = SQRT(AMTOT2)
+ ENDIF
+*
+* systems with masses larger than elojet are treated with PHOJET
+ IF (AMTOT.GT.ELOJET) THEN
+*
+* initialize PHOJET-variables for remnant/valence-partons
+* projectile parton flavors and valence flag
+ IHFLD(1,1) = IDHKK(NC)
+ IHFLD(1,2) = IDHKK(NC+2)
+ IHFLS(1) = 0
+ IF ((IDCH(NC).EQ.6).OR.(IDCH(NC).EQ.7)
+ & .OR.(IDCH(NC).EQ.8)) IHFLS(1) = 1
+* target parton flavors and valence flag
+ IHFLD(2,1) = IDHKK(NC+1)
+ IHFLD(2,2) = IDHKK(NC+3)
+ IHFLS(2) = 0
+ IF ((IDCH(NC).EQ.4).OR.(IDCH(NC).EQ.5)
+ & .OR.(IDCH(NC).EQ.8)) IHFLS(2) = 1
+* flag signalizing PHOJET how to treat the remnant:
+* iremn = -1 sea-quark remnant: PHOJET takes flavors from ihfld
+* iremn > -1 valence remnant: PHOJET assumes flavors according
+* to mother particle
+ IREMN1 = IHFLS(1)-1
+ IREMN2 = IHFLS(2)-1
+*
+* initialize the incoming particles in PHOJET
+ IF ((IP.EQ.1).AND.(IJPROJ.EQ.7)) THEN
+
+ CALL PHO_SETPAR(1,22,IREMN1,VIRT)
+
+ ELSE
+
+ CALL PHO_SETPAR(1,IDHKK(MOP),IREMN1,ZERO)
+
+ ENDIF
+
+ CALL PHO_SETPAR(2,IDHKK(MOT),IREMN2,ZERO)
+
+*
+* calculate Lorentz parameter of the nucleon-nucleon cm-system
+ PPTOTN = SQRT(PTOTNN(1)**2+PTOTNN(2)**2+PTOTNN(3)**2)
+ AMNN = SQRT( (PTOTNN(4)-PPTOTN)*(PTOTNN(4)+PPTOTN) )
+ BGX = PTOTNN(1)/AMNN
+ BGY = PTOTNN(2)/AMNN
+ BGZ = PTOTNN(3)/AMNN
+ GAM = PTOTNN(4)/AMNN
+* transform interacting nucleons into nucleon-nucleon cm-system
+ CALL DT_DALTRA(GAM,-BGX,-BGY,-BGZ,
+ & PPNN(1),PPNN(2),PPNN(3),PPNN(4),PPCMS,
+ & PPTCMS(1),PPTCMS(2),PPTCMS(3),PPTCMS(4))
+ CALL DT_DALTRA(GAM,-BGX,-BGY,-BGZ,
+ & PTNN(1),PTNN(2),PTNN(3),PTNN(4),PTCMS,
+ & PTTCMS(1),PTTCMS(2),PTTCMS(3),PTTCMS(4))
+* transform (total) momenta of the proj and targ partons into
+* nucleon-nucleon cm-system
+ CALL DT_DALTRA(GAM,-BGX,-BGY,-BGZ,
+ & PP(1),PP(2),PP(3),PP(4),
+ & PPTSUB,PPSUB(1),PPSUB(2),PPSUB(3),PPSUB(4))
+ CALL DT_DALTRA(GAM,-BGX,-BGY,-BGZ,
+ & PT(1),PT(2),PT(3),PT(4),
+ & PTTSUB,PTSUB(1),PTSUB(2),PTSUB(3),PTSUB(4))
+* energy fractions of the proj and targ partons
+ XPSUB = MIN(PPSUB(4)/PPTCMS(4),ONE)
+ XTSUB = MIN(PTSUB(4)/PTTCMS(4),ONE)
+***
+* testprint
+c PTOTCM = SQRT( (PPTCMS(1)+PTTCMS(1))**2 +
+c & (PPTCMS(2)+PTTCMS(2))**2 +
+c & (PPTCMS(3)+PTTCMS(3))**2 )
+c EOLDCM = SQRT( (PPTCMS(4)+PTTCMS(4)-PTOTCM) *
+c & (PPTCMS(4)+PTTCMS(4)+PTOTCM) )
+c PTOTSU = SQRT( (PPSUB(1)+PTSUB(1))**2 +
+c & (PPSUB(2)+PTSUB(2))**2 +
+c & (PPSUB(3)+PTSUB(3))**2 )
+c EOLDSU = SQRT( (PPSUB(4)+PTSUB(4)-PTOTSU) *
+c & (PPSUB(4)+PTSUB(4)+PTOTSU) )
+***
+*
+* save current settings of PHOJET process and min. bias flags
+ DO 7 K=1,11
+ KPRON(K) = IPRON(K,1)
+ 7 CONTINUE
+* disallow direct photon int. (does not make sense here anyway)
+ IPRON(8,1) = 0
+* disallow double pomeron processes (due to technical problems
+* in PHOJET, needs to be solved sometime)
+ IPRON(4,1) = 0
+* disallow diffraction for sea-diquarks
+ IF ((IABS(IHFLD(1,1)).GT.1100).AND.
+ & (IABS(IHFLD(1,2)).GT.1100)) THEN
+ IPRON(3,1) = 0
+ IPRON(6,1) = 0
+ ENDIF
+ IF ((IABS(IHFLD(2,1)).GT.1100).AND.
+ & (IABS(IHFLD(2,2)).GT.1100)) THEN
+ IPRON(3,1) = 0
+ IPRON(5,1) = 0
+ ENDIF
+*
+* we need massless partons: transform them on mass shell
+ XMP = ZERO
+ XMT = ZERO
+ DO 6 K=1,4
+ PPTMP(K) = PPSUB(K)
+ PTTMP(K) = PTSUB(K)
+ 6 CONTINUE
+ CALL DT_MASHEL(PPTMP,PTTMP,XMP,XMT,PPSUB,PTSUB,IREJ1)
+ PPSUTO = SQRT(PPSUB(1)**2+PPSUB(2)**2+PPSUB(3)**2)
+ PTSUTO = SQRT(PTSUB(1)**2+PTSUB(2)**2+PTSUB(3)**2)
+ PSUTOT = SQRT((PPSUB(1)+PTSUB(1))**2+
+ & (PPSUB(2)+PTSUB(2))**2+(PPSUB(3)+PTSUB(3))**2)
+* total energy of the subsysten after mass transformation
+* (should be the same as before..)
+ SECM = SQRT( (PPSUB(4)+PTSUB(4)-PSUTOT)*
+ & (PPSUB(4)+PTSUB(4)+PSUTOT) )
+*
+* after mass shell transformation the x_sub - relation has to be
+* corrected. We therefore create "pseudo-momenta" of mother-nucleons.
+*
+* The old version was to scale based on the original x_sub and the
+* 4-momenta of the subsystem. At very high energy this could lead to
+* "pseudo-cm energies" of the parent system considerably exceeding
+* the true cm energy. Now we keep the true cm energy and calculate
+* new x_sub instead.
+C old version PPTCMS(4) = PPSUB(4)/XPSUB
+ PPTCMS(4) = MAX(PPTCMS(4),PPSUB(4))
+ XPSUB = PPSUB(4)/PPTCMS(4)
+ IF (IJPROJ.EQ.7) THEN
+ AMP2 = PHKK(5,MOT)**2
+ PTOT1 = SQRT(PPTCMS(4)**2-AMP2)
+ ELSE
+*???????
+ PTOT1 = SQRT((PPTCMS(4)-PHKK(5,MOP))
+ & *(PPTCMS(4)+PHKK(5,MOP)))
+C PTOT1 = SQRT((PPTCMS(4)-PHKK(5,MOT))
+C & *(PPTCMS(4)+PHKK(5,MOT)))
+ ENDIF
+C old version PTTCMS(4) = PTSUB(4)/XTSUB
+ PTTCMS(4) = MAX(PTTCMS(4),PTSUB(4))
+ XTSUB = PTSUB(4)/PTTCMS(4)
+ PTOT2 = SQRT((PTTCMS(4)-PHKK(5,MOT))
+ & *(PTTCMS(4)+PHKK(5,MOT)))
+ DO 4 K=1,3
+ PPTCMS(K) = PTOT1*PPSUB(K)/PPSUTO
+ PTTCMS(K) = PTOT2*PTSUB(K)/PTSUTO
+ 4 CONTINUE
+***
+* testprint
+*
+* ppnn / ptnn - momenta of the int. nucleons (cms, negl. Fermi)
+* ptotnn - total momentum of the int. nucleons (cms, negl. Fermi)
+* pptcms/ pttcms - momenta of the interacting nucleons (cms)
+* pp1,2 / pt1,2 - momenta of the four partons
+*
+* pp / pt - total momenta of the pr/ta partons (cms, negl. Fermi)
+* ptot - total momentum of the four partons (cms, negl. Fermi)
+* ppsub / ptsub - total momenta of the proj / targ partons (cms)
+*
+c PTOTCM = SQRT( (PPTCMS(1)+PTTCMS(1))**2 +
+c & (PPTCMS(2)+PTTCMS(2))**2 +
+c & (PPTCMS(3)+PTTCMS(3))**2 )
+c ENEWCM = SQRT( (PPTCMS(4)+PTTCMS(4)-PTOTCM) *
+c & (PPTCMS(4)+PTTCMS(4)+PTOTCM) )
+c PTOTSU = SQRT( (PPSUB(1)+PTSUB(1))**2 +
+c & (PPSUB(2)+PTSUB(2))**2 +
+c & (PPSUB(3)+PTSUB(3))**2 )
+c ENEWSU = SQRT( (PPSUB(4)+PTSUB(4)-PTOTSU) *
+c & (PPSUB(4)+PTSUB(4)+PTOTSU) )
+c IF (ENEWCM/EOLDCM.GT.1.1D0) THEN
+c WRITE(*,*) ' EOLDCM, ENEWCM : ',EOLDCM,ENEWCM
+c WRITE(*,*) ' EOLDSU, ENEWSU : ',EOLDSU,ENEWSU
+c WRITE(*,*) ' XPSUB, XTSUB : ',XPSUB,XTSUB
+c ENDIF
+c BBGX = (PPTCMS(1)+PTTCMS(1))/ENEWCM
+c BBGY = (PPTCMS(2)+PTTCMS(2))/ENEWCM
+c BBGZ = (PPTCMS(3)+PTTCMS(3))/ENEWCM
+c BGAM = (PPTCMS(4)+PTTCMS(4))/ENEWCM
+* transform interacting nucleons into nucleon-nucleon cm-system
+c CALL DT_DALTRA(BGAM,-BBGX,-BBGY,-BBGZ,
+c & PPTCMS(1),PPTCMS(2),PPTCMS(3),PPTCMS(4),PPTOT,
+c & PPNEW1,PPNEW2,PPNEW3,PPNEW4)
+c CALL DT_DALTRA(BGAM,-BBGX,-BBGY,-BBGZ,
+c & PTTCMS(1),PTTCMS(2),PTTCMS(3),PTTCMS(4),PTTOT,
+c & PTNEW1,PTNEW2,PTNEW3,PTNEW4)
+c CALL DT_DALTRA(BGAM,-BBGX,-BBGY,-BBGZ,
+c & PPSUB(1),PPSUB(2),PPSUB(3),PPSUB(4),PPTOT,
+c & PPSUB1,PPSUB2,PPSUB3,PPSUB4)
+c CALL DT_DALTRA(BGAM,-BBGX,-BBGY,-BBGZ,
+c & PTSUB(1),PTSUB(2),PTSUB(3),PTSUB(4),PTTOT,
+c & PTSUB1,PTSUB2,PTSUB3,PTSUB4)
+c PTSTCM = SQRT( (PPNEW1+PTNEW1)**2 +
+c & (PPNEW2+PTNEW2)**2 +
+c & (PPNEW3+PTNEW3)**2 )
+c ETSTCM = SQRT( (PPNEW4+PTNEW4-PTSTCM) *
+c & (PPNEW4+PTNEW4+PTSTCM) )
+c PTSTSU = SQRT( (PPSUB1+PTSUB1)**2 +
+c & (PPSUB2+PTSUB2)**2 +
+c & (PPSUB3+PTSUB3)**2 )
+c ETSTSU = SQRT( (PPSUB4+PTSUB4-PTSTSU) *
+c & (PPSUB4+PTSUB4+PTSTSU) )
+C WRITE(*,*) ' mother cmE :'
+C WRITE(*,*) ETSTCM,ENEWCM
+C WRITE(*,*) ' subsystem cmE :'
+C WRITE(*,*) ETSTSU,ENEWSU
+C WRITE(*,*) ' projectile mother :'
+C WRITE(*,*) PPNEW1,PPNEW2,PPNEW3,PPNEW4
+C WRITE(*,*) ' target mother :'
+C WRITE(*,*) PTNEW1,PTNEW2,PTNEW3,PTNEW4
+C WRITE(*,*) ' projectile subsystem:'
+C WRITE(*,*) PPSUB1,PPSUB2,PPSUB3,PPSUB4
+C WRITE(*,*) ' target subsystem:'
+C WRITE(*,*) PTSUB1,PTSUB2,PTSUB3,PTSUB4
+C WRITE(*,*) ' projectile subsystem should be:'
+C WRITE(*,*) ZERO,ZERO,XPSUB*ETSTCM/2.0D0,
+C & XPSUB*ETSTCM/2.0D0
+C WRITE(*,*) ' target subsystem should be:'
+C WRITE(*,*) ZERO,ZERO,-XTSUB*ETSTCM/2.0D0,
+C & XTSUB*ETSTCM/2.0D0
+C WRITE(*,*) ' subsystem cmE should be: '
+C WRITE(*,*) SQRT(XPSUB*XTSUB)*ETSTCM,XPSUB,XTSUB
+***
+*
+* generate complete remnant - nucleon/remnant event with PHOJET
+
+ CALL PHO_EVENT(3,PPTCMS,PTTCMS,DUM,IREJ1)
+
+*
+* copy back original settings of PHOJET process flags
+ DO 11 K=1,11
+ IPRON(K,1) = KPRON(K)
+ 11 CONTINUE
+*
+* check if PHOJET has rejected this event
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0)
+ & WRITE(LOUT,'(1X,A)') 'EVENTB: chain system rejected'
+ WRITE(LOUT,*)
+ & 'XPSUB,XTSUB,SECM ',XPSUB,XTSUB,SECM,AMTOT
+
+ CALL PHO_PREVNT(0)
+
+ GOTO 9999
+ ENDIF
+*
+* copy partons and strings from PHOJET common back into DTEVT for
+* external fragmentation
+ MO1 = NC
+ MO2 = NC+3
+*! uncomment this line for internal phojet-fragmentation
+C CALL DT_GETFSP(MO1,MO2,PP,PT,1)
+ NPHOSC = NPHOSC+1
+ CALL DT_GETPJE(MO1,MO2,PP,PT,1,NPHOSC,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,'(1X,A,I4)')
+ & 'EVENTB: chain system rejected 2'
+ GOTO 9999
+ ENDIF
+*
+* update statistics counter
+ ICEVTG(IDCH(NC),2) = ICEVTG(IDCH(NC),2)+1
+*
+*-----------------------------------------------------------------------
+* two-chain approx. for smaller systems
+*
+ ELSE
+*
+ NDTUSC = NDTUSC+1
+* special flag for double-Pomeron statistics
+ IPOPO = 0
+*
+* pick up flavors at the ends of the two chains
+ IFP1 = IDHKK(NC)
+ IFT1 = IDHKK(NC+1)
+ IFP2 = IDHKK(NC+2)
+ IFT2 = IDHKK(NC+3)
+* ..and the indices of the mothers
+ MOP1 = NC
+ MOT1 = NC+1
+ MOP2 = NC+2
+ MOT2 = NC+3
+ CALL DT_GETCSY(IFP1,PP1,MOP1,IFP2,PP2,MOP2,
+ & IFT1,PT1,MOT1,IFT2,PT2,MOT2,IREJ1)
+*
+* check if this chain system was rejected
+ IF (IREJ1.GT.0) THEN
+ IF (IOULEV(1).GT.0) THEN
+ WRITE(LOUT,*) 'rejected 1 in EVENTB'
+ WRITE(LOUT,'(1X,4(I6,4E12.3,/),E12.3)')
+ & IFP1,PP1,IFT1,PT1,IFP2,PP2,IFT2,PT2,AMTOT
+ ENDIF
+ IRHHA = IRHHA+1
+ GOTO 9999
+ ENDIF
+* the following lines are for sea-sea chains rejected in GETCSY
+ IF (IREJ1.EQ.-1) NDTUSC = NDTUSC-1
+ ICEVTG(IDCH(NC),1) = ICEVTG(IDCH(NC),1)+1
+ ENDIF
+*
+ ENDIF
+*
+* update statistics counter
+ ICEVTG(IDCH(NC),0) = ICEVTG(IDCH(NC),0)+1
+*
+ NC = NC+4
+*
+ 2 CONTINUE
+*
+*-----------------------------------------------------------------------
+* treatment of low-mass chains (if there are any)
+*
+ IF (NDTUSC.GT.0) THEN
+*
+* correct chains of very low masses for possible resonances
+ IF (IRESCO.EQ.1) THEN
+ CALL DT_EVTRES(IREJ1)
+ IF (IREJ1.GT.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 2a in EVENTB'
+ IRRES(1) = IRRES(1)+1
+ GOTO 9999
+ ENDIF
+ ENDIF
+* fragmentation of low-mass chains
+*! uncomment this line for internal phojet-fragmentation
+* (of course it will still be fragmented by DPMJET-routines but it
+* has to be done here instead of further below)
+C CALL DT_EVTFRA(IREJ1)
+C IF (IREJ1.GT.0) THEN
+C IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 2b in EVENTB'
+C IRFRAG = IRFRAG+1
+C GOTO 9999
+C ENDIF
+ ELSE
+*! uncomment this line for internal phojet-fragmentation
+C NPOINT(4) = NHKK+1
+ IF (NPOINT(4).LE.NPOINT(3)) NPOINT(4) = NHKK+1
+ ENDIF
+*
+*-----------------------------------------------------------------------
+* new di-quark breaking mechanisms
+*
+ MXLEFT = 2
+ CALL DT_CHASTA(0)
+ IF ((PDBSEA(1).GT.0.0D0).OR.(PDBSEA(2).GT.0.0D0)
+ & .OR.(PDBSEA(3).GT.0.0D0)) THEN
+ CALL DT_DIQBRK
+ MXLEFT = 4
+ ENDIF
+*
+*-----------------------------------------------------------------------
+* hadronize this event
+*
+* hadronize PHOJET chain systems
+ NPYMAX = 0
+ NPJE = NPHOSC/MXPHFR
+ IF (MXPHFR.LT.MXLEFT) MXLEFT = 2
+ IF (NPJE.GT.1) THEN
+ NLEFT = NPHOSC-NPJE*MXPHFR
+ DO 20 JFRG=1,NPJE
+ NFRG = JFRG*MXPHFR
+ IF ((JFRG.EQ.NPJE).AND.(NLEFT.LE.MXLEFT)) THEN
+ CALL DT_EVTFRG(1,NPHOSC,NPYMEM,IREJ1)
+ IF (IREJ1.GT.0) GOTO 22
+ NLEFT = 0
+ ELSE
+ CALL DT_EVTFRG(1,NFRG,NPYMEM,IREJ1)
+ IF (IREJ1.GT.0) GOTO 22
+ ENDIF
+ IF (NPYMEM.GT.NPYMAX) NPYMAX = NPYMEM
+ 20 CONTINUE
+ IF (NLEFT.GT.0) THEN
+ CALL DT_EVTFRG(1,NPHOSC,NPYMEM,IREJ1)
+ IF (IREJ1.GT.0) GOTO 22
+ IF (NPYMEM.GT.NPYMAX) NPYMAX = NPYMEM
+ ENDIF
+ ELSE
+ CALL DT_EVTFRG(1,NPHOSC,NPYMEM,IREJ1)
+ IF (IREJ1.GT.0) GOTO 22
+ IF (NPYMEM.GT.NPYMAX) NPYMAX = NPYMEM
+ ENDIF
+*
+* check max. filling level of jetset common and
+* reduce mxphfr if necessary
+ IF (NPYMAX.GT.3000) THEN
+ IF (NPYMAX.GT.3500) THEN
+ MXPHFR = MAX(1,MXPHFR-2)
+ ELSE
+ MXPHFR = MAX(1,MXPHFR-1)
+ ENDIF
+C WRITE(LOUT,*) ' EVENTB: Mxphfr reduced to ',MXPHFR
+ ENDIF
+*
+* hadronize DTUNUC chain systems
+ 23 CONTINUE
+ IBACK = MXDTFR
+ CALL DT_EVTFRG(2,IBACK,NPYMEM,IREJ2)
+ IF (IREJ2.GT.0) GOTO 22
+*
+* check max. filling level of jetset common and
+* reduce mxdtfr if necessary
+ IF (NPYMEM.GT.3000) THEN
+ IF (NPYMEM.GT.3500) THEN
+ MXDTFR = MAX(1,MXDTFR-20)
+ ELSE
+ MXDTFR = MAX(1,MXDTFR-10)
+ ENDIF
+C WRITE(LOUT,*) ' EVENTB: Mxdtfr reduced to ',MXDTFR
+ ENDIF
+*
+ IF (IBACK.EQ.-1) GOTO 23
+*
+ 22 CONTINUE
+C CALL DT_EVTFRG(1,IREJ1)
+C CALL DT_EVTFRG(2,IREJ2)
+ IF ((IREJ1.GT.0).OR.(IREJ2.GT.0)) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in EVENTB'
+ IRFRAG = IRFRAG+1
+ GOTO 9999
+ ENDIF
+*
+* get final state particles from /DTEVTP/
+*! uncomment this line for internal phojet-fragmentation
+C CALL DT_GETFSP(IDUM,IDUM,PP,PT,2)
+
+ IF (IJPROJ.NE.7)
+ & CALL DT_EMC2(9,10,0,0,0,3,1,0,0,0,0,3,4,88,IREJ3)
+C IF (IREJ3.NE.0) GOTO 9999
+
+ RETURN
+
+ 9999 CONTINUE
+ IREVT = IREVT+1
+ IREJ = 1
+ RETURN
+ END
+*
+*===getpje=============================================================*
+*
+CDECK ID>, DT_GETPJE
+ SUBROUTINE DT_GETPJE(MO1,MO2,PP,PT,MODE,IPJE,IREJ)
+
+************************************************************************
+* This subroutine copies PHOJET partons and strings from POEVT1 into *
+* DTEVT1. *
+* MO1,MO2 indices of first and last mother-parton in DTEVT1 *
+* PP,PT 4-momenta of projectile/target being handled by *
+* PHOJET *
+* This version dated 11.12.99 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY1=1.0D-1,
+ & ZERO=0.0D0,ONE=1.0D0,OHALF=0.5D0)
+
+ LOGICAL LFLIP
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* DTUNUC-PHOJET interface, Lorentz-param. of n-n subsystem
+ COMMON /DTLTSU/ BGX,BGY,BGZ,GAM
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* statistics: double-Pomeron exchange
+ COMMON /DTFLG2/ INTFLG,IPOPO
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+ DIMENSION PP(4),PT(4)
+ DATA MAXLOP /10000/
+
+ INHKK = NHKK
+ LFLIP = .TRUE.
+ 1 CONTINUE
+ NPVAL = 0
+ NTVAL = 0
+ IREJ = 0
+
+* store initial momenta for energy-momentum conservation check
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PP(1),PP(2),PP(3),PP(4),1,IDUM1,IDUM2)
+ CALL DT_EVTEMC(PT(1),PT(2),PT(3),PT(4),2,IDUM1,IDUM2)
+ ENDIF
+* copy partons and strings from POEVT1 into DTEVT1
+ DO 11 I=1,ISTR
+C IF ((NCODE(I).EQ.-99).AND.(IPAMDL(17).EQ.0)) THEN
+ IF (NCODE(I).EQ.-99) THEN
+ IDXSTG = NPOS(1,I)
+ IDSTG = IDHEP(IDXSTG)
+ PX = PHEP(1,IDXSTG)
+ PY = PHEP(2,IDXSTG)
+ PZ = PHEP(3,IDXSTG)
+ PE = PHEP(4,IDXSTG)
+ IF (MODE.LT.0) THEN
+ ISTAT = 70000+IPJE
+ CALL DT_EVTPUT(2,ISTAT,MO1,MO2,PX,PY,PZ,PE,
+ & 11,IDSTG,0)
+ IF (LEMCCK) THEN
+ PX = -PX
+ PY = -PY
+ PZ = -PZ
+ PE = -PE
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM1,IDUM2)
+ ENDIF
+ ELSE
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,PX,PY,PZ,PE,PTOTMP,
+ & PPX,PPY,PPZ,PPE)
+ ISTAT = 70000+IPJE
+ CALL DT_EVTPUT(2,ISTAT,MO1,MO2,PPX,PPY,PPZ,PPE,
+ & 11,IDSTG,0)
+ IF (LEMCCK) THEN
+ PX = -PPX
+ PY = -PPY
+ PZ = -PPZ
+ PE = -PPE
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM1,IDUM2)
+ ENDIF
+ ENDIF
+ NOBAM(NHKK) = 0
+ IHIST(1,NHKK) = IPHIST(1,IDXSTG)
+ IHIST(2,NHKK) = 0
+ ELSEIF (NCODE(I).GE.0) THEN
+* indices of partons and string in POEVT1
+ IDX1 = ABS(JMOHEP(1,NPOS(1,I)))
+ IDX2 = ABS(JMOHEP(2,NPOS(1,I)))
+ IF ((IDX1.GT.IDX2).OR.(JMOHEP(2,NPOS(1,I)).GT.0)) THEN
+ WRITE(LOUT,*) ' GETPJE: IDX1.GT.IDX2 ',IDX1,IDX2,
+ & ' or JMOHEP(2,NPOS(1,I)).GT.0 ',JMOHEP(2,NPOS(1,I)),' ! '
+ STOP ' GETPJE 1'
+ ENDIF
+ IDXSTG = NPOS(1,I)
+* find "mother" string of the string
+ IDXMS1 = ABS(JMOHEP(1,IDX1))
+ IDXMS2 = ABS(JMOHEP(1,IDX2))
+ IF (IDXMS1.NE.IDXMS2) THEN
+ IDXMS1 = IDXSTG
+ IDXMS2 = IDXSTG
+C STOP ' GETPJE: IDXMS1.NE.IDXMS2 !'
+ ENDIF
+* search POEVT1 for the original hadron of the parton
+ ILOOP = 0
+ IPOM1 = 0
+ 14 CONTINUE
+ ILOOP = ILOOP+1
+
+ IF (IDHEP(IDXMS1).EQ.990) IPOM1 = 1
+
+ IDXMS1 = ABS(JMOHEP(1,IDXMS1))
+ IF ((IDXMS1.NE.1).AND.(IDXMS1.NE.2).AND.
+ & (ILOOP.LT.MAXLOP)) GOTO 14
+ IF (ILOOP.EQ.MAXLOP) WRITE(LOUT,*) ' GETPJE: MAXLOP in 1 ! '
+ IPOM2 = 0
+ ILOOP = 0
+ 15 CONTINUE
+ ILOOP = ILOOP+1
+
+ IF (IDHEP(IDXMS2).EQ.990) IPOM2 = 1
+
+ IF ((ILOOP.EQ.1).OR.(IDHEP(IDXMS2).GE.7777)) THEN
+ IDXMS2 = ABS(JMOHEP(2,IDXMS2))
+ ELSE
+ IDXMS2 = ABS(JMOHEP(1,IDXMS2))
+ ENDIF
+ IF ((IDXMS2.NE.1).AND.(IDXMS2.NE.2).AND.
+ & (ILOOP.LT.MAXLOP)) GOTO 15
+ IF (ILOOP.EQ.MAXLOP) WRITE(LOUT,*) ' GETPJE: MAXLOP in 5 ! '
+* parton 1
+ IF (IDXMS1.EQ.1) THEN
+ ISPTN1 = ISTHKK(MO1)
+ M1PTN1 = MO1
+ M2PTN1 = MO1+2
+ ELSE
+ ISPTN1 = ISTHKK(MO2)
+ M1PTN1 = MO2-2
+ M2PTN1 = MO2
+ ENDIF
+* parton 2
+ IF (IDXMS2.EQ.1) THEN
+ ISPTN2 = ISTHKK(MO1)
+ M1PTN2 = MO1
+ M2PTN2 = MO1+2
+ ELSE
+ ISPTN2 = ISTHKK(MO2)
+ M1PTN2 = MO2-2
+ M2PTN2 = MO2
+ ENDIF
+* check for mis-identified mothers and switch mother indices if necessary
+ IF ((IDXMS1.EQ.IDXMS2).AND.(IPROCE.NE.5).AND.(IPROCE.NE.6)
+ & .AND.((IDHEP(IDX1).NE.21).OR.(IDHEP(IDX2).NE.21)).AND.
+ & (LFLIP)) THEN
+ IF (PHEP(3,IDX1).GT.PHEP(3,IDX2)) THEN
+ ISPTN1 = ISTHKK(MO1)
+ M1PTN1 = MO1
+ M2PTN1 = MO1+2
+ ISPTN2 = ISTHKK(MO2)
+ M1PTN2 = MO2-2
+ M2PTN2 = MO2
+ ELSE
+ ISPTN1 = ISTHKK(MO2)
+ M1PTN1 = MO2-2
+ M2PTN1 = MO2
+ ISPTN2 = ISTHKK(MO1)
+ M1PTN2 = MO1
+ M2PTN2 = MO1+2
+ ENDIF
+ ENDIF
+* register partons in temporary common
+* parton at chain end
+ PX = PHEP(1,IDX1)
+ PY = PHEP(2,IDX1)
+ PZ = PHEP(3,IDX1)
+ PE = PHEP(4,IDX1)
+* flag only partons coming from Pomeron with 41/42
+C IF ((IPOM1.NE.0).OR.(NPOS(4,I).GE.4)) THEN
+ IF (IPOM1.NE.0) THEN
+ ISTX = ABS(ISPTN1)/10
+ IMO = ABS(ISPTN1)-10*ISTX
+ ISPTN1 = -(40+IMO)
+ ELSE
+ IF ((ICOLOR(2,IDX1).EQ.0).OR.(IDHEP(IDX1).EQ.21)) THEN
+ ISTX = ABS(ISPTN1)/10
+ IMO = ABS(ISPTN1)-10*ISTX
+ IF ((IDHEP(IDX1).EQ.21).OR.
+ & (ABS(IPHIST(1,IDX1)).GE.100)) THEN
+ ISPTN1 = -(60+IMO)
+ ELSE
+ ISPTN1 = -(50+IMO)
+ ENDIF
+ ENDIF
+ ENDIF
+ IF (ISPTN1.EQ.-21) NPVAL = NPVAL+1
+ IF (ISPTN1.EQ.-22) NTVAL = NTVAL+1
+ IF (MODE.LT.0) THEN
+ CALL DT_EVTPUT(ISPTN1,IDHEP(IDX1),M1PTN1,M2PTN1,PX,PY,
+ & PZ,PE,0,0,0)
+ ELSE
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,PX,PY,PZ,PE,PTOTMP,
+ & PPX,PPY,PPZ,PPE)
+ CALL DT_EVTPUT(ISPTN1,IDHEP(IDX1),M1PTN1,M2PTN1,PPX,PPY,
+ & PPZ,PPE,0,0,0)
+ ENDIF
+ IHIST(1,NHKK) = IPHIST(1,IDX1)
+ IHIST(2,NHKK) = 0
+ DO 19 KK=1,4
+ VHKK(KK,NHKK) = VHKK(KK,M2PTN1)
+ WHKK(KK,NHKK) = WHKK(KK,M1PTN1)
+ 19 CONTINUE
+ VHKK(4,NHKK) = VHKK(3,M2PTN1)/BLAB-VHKK(3,M1PTN1)/BGLAB
+ WHKK(4,NHKK) = -WHKK(3,M1PTN1)/BLAB+WHKK(3,M2PTN1)/BGLAB
+ M1STRG = NHKK
+* gluon kinks
+ NGLUON = IDX2-IDX1-1
+ IF (NGLUON.GT.0) THEN
+ DO 17 IGLUON=1,NGLUON
+ IDX = IDX1+IGLUON
+ IDXMS = ABS(JMOHEP(1,IDX))
+ IF ((IDXMS.NE.1).AND.(IDXMS.NE.2)) THEN
+ ILOOP = 0
+ 16 CONTINUE
+ ILOOP = ILOOP+1
+ IDXMS = ABS(JMOHEP(1,IDXMS))
+ IF ((IDXMS.NE.1).AND.(IDXMS.NE.2).AND.
+ & (ILOOP.LT.MAXLOP)) GOTO 16
+ IF (ILOOP.EQ.MAXLOP)
+ & WRITE(LOUT,*) ' GETPJE: MAXLOP in 3 ! '
+ ENDIF
+ IF (IDXMS.EQ.1) THEN
+ ISPTN = ISTHKK(MO1)
+ M1PTN = MO1
+ M2PTN = MO1+2
+ ELSE
+ ISPTN = ISTHKK(MO2)
+ M1PTN = MO2-2
+ M2PTN = MO2
+ ENDIF
+ PX = PHEP(1,IDX)
+ PY = PHEP(2,IDX)
+ PZ = PHEP(3,IDX)
+ PE = PHEP(4,IDX)
+ IF ((ICOLOR(2,IDX).EQ.0).OR.(IDHEP(IDX).EQ.21)) THEN
+ ISTX = ABS(ISPTN)/10
+ IMO = ABS(ISPTN)-10*ISTX
+ IF ((IDHEP(IDX).EQ.21).OR.
+ & (ABS(IPHIST(1,IDX)).GE.100)) THEN
+ ISPTN = -(60+IMO)
+ ELSE
+ ISPTN = -(50+IMO)
+ ENDIF
+ ENDIF
+ IF (ISPTN.EQ.-21) NPVAL = NPVAL+1
+ IF (ISPTN.EQ.-22) NTVAL = NTVAL+1
+ IF (MODE.LT.0) THEN
+ CALL DT_EVTPUT(ISPTN,IDHEP(IDX),M1PTN,M2PTN,
+ & PX,PY,PZ,PE,0,0,0)
+ ELSE
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,PX,PY,PZ,PE,PTOTMP,
+ & PPX,PPY,PPZ,PPE)
+ CALL DT_EVTPUT(ISPTN,IDHEP(IDX),M1PTN,M2PTN,
+ & PPX,PPY,PPZ,PPE,0,0,0)
+ ENDIF
+ IHIST(1,NHKK) = IPHIST(1,IDX)
+ IHIST(2,NHKK) = 0
+ DO 20 KK=1,4
+ VHKK(KK,NHKK) = VHKK(KK,M2PTN)
+ WHKK(KK,NHKK) = WHKK(KK,M1PTN)
+ 20 CONTINUE
+ VHKK(4,NHKK)= VHKK(3,M2PTN)/BLAB-VHKK(3,M1PTN)/BGLAB
+ WHKK(4,NHKK)= -WHKK(3,M1PTN)/BLAB+WHKK(3,M2PTN)/BGLAB
+ 17 CONTINUE
+ ENDIF
+* parton at chain end
+ PX = PHEP(1,IDX2)
+ PY = PHEP(2,IDX2)
+ PZ = PHEP(3,IDX2)
+ PE = PHEP(4,IDX2)
+* flag only partons coming from Pomeron with 41/42
+C IF ((IPOM2.NE.0).OR.(NPOS(4,I).GE.4)) THEN
+ IF (IPOM2.NE.0) THEN
+ ISTX = ABS(ISPTN2)/10
+ IMO = ABS(ISPTN2)-10*ISTX
+ ISPTN2 = -(40+IMO)
+ ELSE
+ IF ((ICOLOR(2,IDX2).EQ.0).OR.(IDHEP(IDX2).EQ.21)) THEN
+ ISTX = ABS(ISPTN2)/10
+ IMO = ABS(ISPTN2)-10*ISTX
+ IF ((IDHEP(IDX2).EQ.21).OR.
+ & (ABS(IPHIST(1,IDX2)).GE.100)) THEN
+ ISPTN2 = -(60+IMO)
+ ELSE
+ ISPTN2 = -(50+IMO)
+ ENDIF
+ ENDIF
+ ENDIF
+ IF (ISPTN2.EQ.-21) NPVAL = NPVAL+1
+ IF (ISPTN2.EQ.-22) NTVAL = NTVAL+1
+ IF (MODE.LT.0) THEN
+ CALL DT_EVTPUT(ISPTN2,IDHEP(IDX2),M1PTN2,M2PTN2,
+ & PX,PY,PZ,PE,0,0,0)
+ ELSE
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,PX,PY,PZ,PE,PTOTMP,
+ & PPX,PPY,PPZ,PPE)
+ CALL DT_EVTPUT(ISPTN2,IDHEP(IDX2),M1PTN2,M2PTN2,
+ & PPX,PPY,PPZ,PPE,0,0,0)
+ ENDIF
+ IHIST(1,NHKK) = IPHIST(1,IDX2)
+ IHIST(2,NHKK) = 0
+ DO 21 KK=1,4
+ VHKK(KK,NHKK) = VHKK(KK,M2PTN2)
+ WHKK(KK,NHKK) = WHKK(KK,M1PTN2)
+ 21 CONTINUE
+ VHKK(4,NHKK) = VHKK(3,M2PTN2)/BLAB-VHKK(3,M1PTN2)/BGLAB
+ WHKK(4,NHKK) = -WHKK(3,M1PTN2)/BLAB+WHKK(3,M2PTN2)/BGLAB
+ M2STRG = NHKK
+* register string
+ JSTRG = 100*IPROCE+NCODE(I)
+ PX = PHEP(1,IDXSTG)
+ PY = PHEP(2,IDXSTG)
+ PZ = PHEP(3,IDXSTG)
+ PE = PHEP(4,IDXSTG)
+ IF (MODE.LT.0) THEN
+ ISTAT = 70000+IPJE
+ CALL DT_EVTPUT(JSTRG,ISTAT,M1STRG,M2STRG,
+ & PX,PY,PZ,PE,0,0,0)
+ IF (LEMCCK) THEN
+ PX = -PX
+ PY = -PY
+ PZ = -PZ
+ PE = -PE
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM1,IDUM2)
+ ENDIF
+ ELSE
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,PX,PY,PZ,PE,PTOTMP,
+ & PPX,PPY,PPZ,PPE)
+ ISTAT = 70000+IPJE
+ CALL DT_EVTPUT(JSTRG,ISTAT,M1STRG,M2STRG,
+ & PPX,PPY,PPZ,PPE,0,0,0)
+ IF (LEMCCK) THEN
+ PX = -PPX
+ PY = -PPY
+ PZ = -PPZ
+ PE = -PPE
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM1,IDUM2)
+ ENDIF
+ ENDIF
+ NOBAM(NHKK) = 0
+ IHIST(1,NHKK) = 0
+ IHIST(2,NHKK) = 0
+ DO 18 KK=1,4
+ VHKK(KK,NHKK) = VHKK(KK,MO2)
+ WHKK(KK,NHKK) = WHKK(KK,MO1)
+ 18 CONTINUE
+ VHKK(4,NHKK) = VHKK(3,MO2)/BLAB-VHKK(3,MO1)/BGLAB
+ WHKK(4,NHKK) = -WHKK(3,MO1)/BLAB+WHKK(3,MO2)/BGLAB
+ ENDIF
+ 11 CONTINUE
+
+ IF ( ((NPVAL.GT.2).OR.(NTVAL.GT.2)).AND.(LFLIP) ) THEN
+ NHKK = INHKK
+ LFLIP = .FALSE.
+ GOTO 1
+ ENDIF
+
+ IF (LEMCCK) THEN
+ IF (UMO.GT.1.0D5) THEN
+ CHKLEV = 1.0D0
+ ELSE
+ CHKLEV = TINY1
+ ENDIF
+ CALL DT_EVTEMC(DUM1,DUM2,DUM3,CHKLEV,-1,1000,IREJ2)
+
+ IF (IREJ2.GT.ZERO) CALL PHO_PREVNT(0)
+
+ ENDIF
+
+* internal statistics
+* dble-Po statistics.
+ IF (IPROCE.NE.4) IPOPO = 0
+
+ INTFLG = IPROCE
+ IDCHSY = IDCH(MO1)
+ IF ((IPROCE.GE.1).AND.(IPROCE.LE.8)) THEN
+ ICEVTG(IDCHSY,IPROCE+2) = ICEVTG(IDCHSY,IPROCE+2)+1
+ ELSE
+ WRITE(LOUT,1000) IPROCE,NEVHKK,MO1
+ 1000 FORMAT(1X,'GETFSP: warning! incons. process id. (',I2,
+ & ') at evt(chain) ',I6,'(',I2,')')
+ ENDIF
+ IF (IPROCE.EQ.5) THEN
+ IF ((IDIFR1.GE.1).AND.(IDIFR1.LE.3)) THEN
+ ICEVTG(IDCHSY,18+IDIFR1) = ICEVTG(IDCHSY,18+IDIFR1)+1
+ ELSE
+C WRITE(LOUT,1001) IPROCE,IDIFR1,IDIFR2
+ 1001 FORMAT(1X,'GETFSP: warning! incons. diffrac. id. ',
+ & '(IPROCE,IDIFR1,IDIFR2=',3I3,')')
+ ENDIF
+ ELSEIF (IPROCE.EQ.6) THEN
+ IF ((IDIFR2.GE.1).AND.(IDIFR2.LE.3)) THEN
+ ICEVTG(IDCHSY,21+IDIFR2) = ICEVTG(IDCHSY,21+IDIFR2)+1
+ ELSE
+C WRITE(LOUT,1001) IPROCE,IDIFR1,IDIFR2
+ ENDIF
+ ELSEIF (IPROCE.EQ.7) THEN
+ IF ((IDIFR1.GE.1).AND.(IDIFR1.LE.3).AND.
+ & (IDIFR2.GE.1).AND.(IDIFR2.LE.3)) THEN
+ IF ((IDIFR1.EQ.1).AND.(IDIFR2.EQ.1))
+ & ICEVTG(IDCHSY,25) = ICEVTG(IDCHSY,25)+1
+ IF ((IDIFR1.EQ.2).AND.(IDIFR2.EQ.2))
+ & ICEVTG(IDCHSY,26) = ICEVTG(IDCHSY,26)+1
+ IF ((IDIFR1.EQ.1).AND.(IDIFR2.EQ.2))
+ & ICEVTG(IDCHSY,27) = ICEVTG(IDCHSY,27)+1
+ IF ((IDIFR1.EQ.2).AND.(IDIFR2.EQ.1))
+ & ICEVTG(IDCHSY,28) = ICEVTG(IDCHSY,28)+1
+ ELSE
+ WRITE(LOUT,1001) IPROCE,IDIFR1,IDIFR2
+ ENDIF
+ ENDIF
+ IF ((IDIFR1+IDIFR2.EQ.0).AND.(KHDIR.GE.1).AND.(KHDIR.LE.3))
+ & THEN
+ ICEVTG(IDCHSY,10+KHDIR) = ICEVTG(IDCHSY,10+KHDIR)+1
+ ICEVTG(IDCHSY,10+KHDIR) = ICEVTG(IDCHSY,10+KHDIR)+1
+ ICEVTG(IDCHSY,10+KHDIR) = ICEVTG(IDCHSY,10+KHDIR)+1
+ ENDIF
+ ICEVTG(IDCHSY,14) = ICEVTG(IDCHSY,14)+KSPOM
+ ICEVTG(IDCHSY,15) = ICEVTG(IDCHSY,15)+KHPOM
+ ICEVTG(IDCHSY,16) = ICEVTG(IDCHSY,16)+KSREG
+ ICEVTG(IDCHSY,17) = ICEVTG(IDCHSY,17)+(KSTRG+KHTRG)
+ ICEVTG(IDCHSY,18) = ICEVTG(IDCHSY,18)+(KSLOO+KHLOO)
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===phoini=============================================================*
+*
+CDECK ID>, DT_PHOINI
+ SUBROUTINE DT_PHOINI
+
+************************************************************************
+* Initialization PHOJET-event generator for nucleon-nucleon interact. *
+* This version dated 16.11.95 is written by S. Roesler *
+* Last change: s.r. 21.01.01 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ZERO=0.0D0,ONE=1.0D0)
+
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+*
+* parameters for cascade calculations:
+* maximum mumber of PDF's which can be defined in phojet (limited
+* by the dimension of ipdfs in pho_setpdf)
+ PARAMETER (MAXPDF = 20)
+* PDF parametrization and number of set for the first 30 hadrons in
+* the bamjet-code list
+* negative numbers mean that the PDF is set in phojet,
+* zero stands for "not a hadron"
+ DIMENSION IPARPD(30),ISETPD(30)
+* PDF parametrization
+ DATA IPARPD /
+ & -5,-5, 0, 0, 0, 0,-5,-5,-5, 0, 0, 5,-5,-5, 5, 5, 5, 5, 5, 5,
+ & 5, 5,-5, 5, 5, 0, 0, 0, 0, 0/
+* number of set
+ DATA ISETPD /
+ & -6,-6, 0, 0, 0, 0,-3,-6,-6, 0, 0, 2,-2,-2, 2, 2, 6, 6, 2, 6,
+ & 6, 6,-2, 2, 2, 0, 0, 0, 0, 0/
+
+**PHOJET105a
+C COMMON /GLOCMS/ XECM,XPCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C PARAMETER ( MAXPRO = 16 )
+C PARAMETER ( MAXTAB = 20 )
+C COMMON /HAXSEC/ XSECTA(4,-1:MAXPRO,4,MAXTAB),XSECT(6,-1:MAXPRO),
+C & MXSECT(0:4,-1:MAXPRO,4),ECMSH(4,MAXTAB),ISTTAB
+C CHARACTER*8 MDLNA
+C COMMON /MODELS/ MDLNA(50),ISWMDL(50),PARMDL(200),IPAMDL(100)
+C COMMON /PROCES/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15)
+**PHOJET110
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+**
+ DIMENSION PP(4),PT(4)
+
+ LOGICAL LSTART
+ DATA LSTART /.TRUE./
+
+ IJP = IJPROJ
+ IJT = IJTARG
+ Q2 = VIRT
+* lepton-projectiles: initialize real photon instead
+ IF ((IJP.EQ.3).OR.(IJP.EQ.4).OR.(IJP.EQ.10).OR.(IJP.EQ.11)) THEN
+ IJP = 7
+ Q2 = ZERO
+ ENDIF
+
+ IF (LPHOIN) CALL PHO_INIT(-1,IDUM)
+
+* switch Reggeon off
+C IPAMDL(3)= 0
+ IF (IP.EQ.1) THEN
+ IFPAP(1) = IDT_IPDGHA(IJP)
+ IFPAB(1) = IJP
+ ELSE
+ IFPAP(1) = 2212
+ IFPAB(1) = IDT_ICIHAD(IFPAP(1))
+ ENDIF
+ PMASS(1) = AAM(IFPAB(1))-SQRT(Q2)
+ PVIRT(1) = PMASS(1)**2
+ IF (IT.EQ.1) THEN
+ IFPAP(2) = IDT_IPDGHA(IJT)
+ IFPAB(2) = IJT
+ ELSE
+ IFPAP(2) = 2212
+ IFPAB(2) = IDT_ICIHAD(IFPAP(2))
+ ENDIF
+ PMASS(2) = AAM(IFPAB(2))
+ PVIRT(2) = ZERO
+ DO 1 K=1,4
+ PP(K) = ZERO
+ PT(K) = ZERO
+ 1 CONTINUE
+* get max. possible momenta of incoming particles to be used for PHOJET ini.
+ PPF = ZERO
+ PTF = ZERO
+ SCPF= 1.5D0
+ IF (UMO.GE.1.E5) THEN
+ SCPF= 5.0D0
+ ENDIF
+ IF (NCOMPO.GT.0) THEN
+ DO 2 I=1,NCOMPO
+ IF (IT.GT.1) THEN
+ CALL DT_NCLPOT(IEMUCH(I),IEMUMA(I),ITZ,IT,ZERO,ZERO,0)
+ ELSE
+ CALL DT_NCLPOT(IPZ,IP,IEMUCH(I),IEMUMA(I),ZERO,ZERO,0)
+ ENDIF
+ PPFTMP = MAX(PFERMP(1),PFERMN(1))
+ PTFTMP = MAX(PFERMP(2),PFERMN(2))
+ IF (PPFTMP.GT.PPF) PPF = PPFTMP
+ IF (PTFTMP.GT.PTF) PTF = PTFTMP
+ 2 CONTINUE
+ ELSE
+ CALL DT_NCLPOT(IPZ,IP,ITZ,IT,ZERO,ZERO,0)
+ PPF = MAX(PFERMP(1),PFERMN(1))
+ PTF = MAX(PFERMP(2),PFERMN(2))
+ ENDIF
+ PTF = -PTF
+ PPF = SCPF*PPF
+ PTF = SCPF*PTF
+ IF (IJP.EQ.7) THEN
+ AMP2 = SIGN(PMASS(1)**2,PMASS(1))
+ PP(3) = PPCM
+ PP(4) = SQRT(AMP2+PP(3)**2)
+ ELSE
+ EPF = SQRT(PPF**2+PMASS(1)**2)
+ CALL DT_LTNUC(PPF,EPF,PP(3),PP(4),2)
+ ENDIF
+ ETF = SQRT(PTF**2+PMASS(2)**2)
+ CALL DT_LTNUC(PTF,ETF,PT(3),PT(4),3)
+ ECMINI = SQRT((PP(4)+PT(4))**2-(PP(1)+PT(1))**2-
+ & (PP(2)+PT(2))**2-(PP(3)+PT(3))**2)
+ IF (LSTART) THEN
+C *** Commented by Chiara
+C WRITE(LOUT,1001) IP,IPZ,SCPF,PPF,PP
+ 1001 FORMAT(
+ & ' DT_PHOINI: PHOJET initialized for projectile A,Z = ',
+ & I3,',',I2,/,F4.1,'xp_F(max) = ',E10.3,' p(max) = ',4E10.3)
+C *** Commented by Chiara
+C IF (NCOMPO.GT.0) THEN
+C WRITE(LOUT,1002) SCPF,PTF,PT
+C ELSE
+C WRITE(LOUT,1003) IT,ITZ,SCPF,PTF,PT
+C ENDIF
+ 1002 FORMAT(
+ & ' DT_PHOINI: PHOJET initialized for target emulsion ',
+ & /,F4.1,'xp_F(max) = ',E10.3,' p(max) = ',4E10.3)
+ 1003 FORMAT(
+ & ' DT_PHOINI: PHOJET initialized for target A,Z = ',
+ & I3,',',I2,/,F4.1,'xp_F(max) = ',E10.3,' p(max) = ',4E10.3)
+C *** Commented by Chiara
+C WRITE(LOUT,1004) ECMINI
+ 1004 FORMAT(' E_cm = ',E10.3)
+ IF (IJP.EQ.8) WRITE(LOUT,1005)
+ 1005 FORMAT(
+ & ' DT_PHOINI: warning! proton parameters used for neutron',
+ & ' projectile')
+ LSTART = .FALSE.
+ ENDIF
+* switch off new diffractive cross sections at low energies for nuclei
+* (temporary solution)
+ IF ((ISWMDL(30).NE.0).AND.((IP.GT.1).OR.(IT.GT.1))) THEN
+ WRITE(LOUT,'(1X,A)')
+ & ' DT_PHOINI: model-switch 30 for nuclei re-set !'
+ CALL PHO_SETMDL(30,0,1)
+ ENDIF
+*
+C IF (IJP.EQ.7) THEN
+C AMP2 = SIGN(PMASS(1)**2,PMASS(1))
+C PP(3) = PPCM
+C PP(4) = SQRT(AMP2+PP(3)**2)
+C ELSE
+C PFERMX = ZERO
+C IF (IP.GT.1) PFERMX = 0.5D0
+C EFERMX = SQRT(PFERMX**2+PMASS(1)**2)
+C CALL DT_LTNUC(PFERMX,EFERMX,PP(3),PP(4),2)
+C ENDIF
+C PFERMX = ZERO
+C IF ((IT.GT.1).OR.(NCOMPO.GT.0)) PFERMX = -0.5D0
+C EFERMX = SQRT(PFERMX**2+PMASS(2)**2)
+C CALL DT_LTNUC(PFERMX,EFERMX,PT(3),PT(4),3)
+**sr 26.10.96
+ ISAV = IPAMDL(13)
+ IF ((ISHAD(2).EQ.1).AND.
+ & ((IJPROJ.EQ. 7).OR.(IJPROJ.EQ.3).OR.(IJPROJ.EQ.4).OR.
+ & (IJPROJ.EQ.10).OR.(IJPROJ.EQ.11))) IPAMDL(13) = 1
+**
+
+ CALL PHO_EVENT(-1,PP,PT,SIGMAX,IREJ1)
+
+**sr 26.10.96
+ IPAMDL(13) = ISAV
+**
+*
+* patch for cascade calculations:
+* define parton distribution functions for other hadrons, i.e. other
+* then defined already in phojet
+ IF (IOGLB.EQ.100) THEN
+ WRITE(LOUT,1006)
+ 1006 FORMAT(/,1X,'PHOINI: additional parton distribution functions',
+ & ' assiged (ID,IPAR,ISET)',/)
+ NPDF = 0
+ DO 3 I=1,30
+ IF (IPARPD(I).NE.0) THEN
+ NPDF = NPDF+1
+ IF (NPDF.GT.MAXPDF) STOP ' PHOINI: npdf > maxpdf !'
+ IF ((IPARPD(I).GT.0).AND.(ISETPD(I).GT.0)) THEN
+ IDPDG = IDT_IPDGHA(I)
+ IPAR = IPARPD(I)
+ ISET = ISETPD(I)
+ WRITE(LOUT,'(13X,A8,3I6)') ANAME(I),IDPDG,IPAR,ISET
+ CALL PHO_SETPDF(IDPDG,IDUM,IPAR,ISET,0,0,-1)
+ ENDIF
+ ENDIF
+ 3 CONTINUE
+ ENDIF
+
+C CALL PHO_PHIST(-1,SIGMAX)
+
+ IF (IREJ1.NE.0) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(1X,'PHOINI: PHOJET event-initialization failed!')
+ STOP
+ ENDIF
+
+ RETURN
+ END
+
+*
+*===eventd=============================================================*
+*
+CDECK ID>, DT_EVENTD
+ SUBROUTINE DT_EVENTD(IREJ)
+
+************************************************************************
+* Quasi-elastic neutrino nucleus scattering. *
+* This version dated 29.04.00 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,TINY5=1.0D-5)
+ PARAMETER (SQTINF=1.0D+15)
+
+ LOGICAL LFIRST
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ PARAMETER (MAXLND=4000)
+ COMMON/PYJETS/N,NPAD,K(MAXLND,5),P(MAXLND,5),V(MAXLND,5)
+
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* steering flags for qel neutrino scattering modules
+ COMMON /QNEUTO/ DSIGSU,DSIGMC,NDSIG,NEUTYP,NEUDEC
+ COMMON /QNPOL/ POLARX(4),PMODUL
+
+ INTEGER PYK
+
+ DATA LFIRST /.TRUE./
+
+ IREJ = 0
+
+ IF (LFIRST) THEN
+ LFIRST = .FALSE.
+ CALL DT_MASS_INI
+ ENDIF
+
+* JETSET parameter
+ CALL DT_INITJS(0)
+
+* interacting target nucleon
+ LTYP = NEUTYP
+ IF (NEUDEC.LE.9) THEN
+ IF ((LTYP.EQ.1).OR.(LTYP.EQ.3).OR.(LTYP.EQ.5)) THEN
+ NUCTYP = 2112
+ NUCTOP = 2
+ ELSE
+ NUCTYP = 2212
+ NUCTOP = 1
+ ENDIF
+ ELSE
+ RTYP = DT_RNDM(RTYP)
+ ZFRAC = DBLE(ITZ)/DBLE(IT)
+ IF (RTYP.LE.ZFRAC) THEN
+ NUCTYP = 2212
+ NUCTOP = 1
+ ELSE
+ NUCTYP = 2112
+ NUCTOP = 2
+ ENDIF
+ ENDIF
+
+* select first nucleon in list with matching id and reset all other
+* nucleons which have been marked as "wounded" by ININUC
+ IFOUND = 0
+ DO 1 I=1,NHKK
+ IF ((IDHKK(I).EQ.NUCTYP).AND.(IFOUND.EQ.0)) THEN
+ ISTHKK(I) = 12
+ IFOUND = 1
+ IDX = I
+ ELSE
+ IF (ISTHKK(I).EQ.12) ISTHKK(I) = 14
+ ENDIF
+ 1 CONTINUE
+ IF (IFOUND.EQ.0)
+ & STOP ' EVENTD: interacting target nucleon not found! '
+
+* correct position of proj. lepton: assume position of target nucleon
+ DO 3 I=1,4
+ VHKK(I,1) = VHKK(I,IDX)
+ WHKK(I,1) = WHKK(I,IDX)
+ 3 CONTINUE
+
+* load initial momenta for conservation check
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(ZERO,ZERO,PPROJ,EPROJ,1,IDUM,IDUM)
+ CALL DT_EVTEMC(PHKK(1,IDX),PHKK(2,IDX),PHKK(3,IDX),PHKK(4,IDX),
+ & 2,IDUM,IDUM)
+ ENDIF
+
+* quasi-elastic scattering
+ IF (NEUDEC.LT.9) THEN
+ CALL DT_QEL_POL(EPROJ,LTYP,PHKK(1,IDX),PHKK(2,IDX),PHKK(3,IDX),
+ & PHKK(4,IDX),PHKK(5,IDX))
+* CC event on p or n
+ ELSEIF (NEUDEC.EQ.10) THEN
+ CALL DT_GEN_DELTA(EPROJ,LTYP,NUCTOP,1,PHKK(1,IDX),PHKK(2,IDX),
+ & PHKK(3,IDX),PHKK(4,IDX),PHKK(5,IDX))
+* NC event on p or n
+ ELSEIF (NEUDEC.EQ.11) THEN
+ CALL DT_GEN_DELTA(EPROJ,LTYP,NUCTOP,2,PHKK(1,IDX),PHKK(2,IDX),
+ & PHKK(3,IDX),PHKK(4,IDX),PHKK(5,IDX))
+ ENDIF
+
+* get final state particles from Lund-common and write them into HKKEVT
+ NPOINT(1) = NHKK+1
+ NPOINT(4) = NHKK+1
+
+ NLINES = PYK(0,1)
+
+ NHKK0 = NHKK+1
+ DO 4 I=4,NLINES
+ IF (K(I,1).EQ.1) THEN
+ ID = K(I,2)
+ PX = P(I,1)
+ PY = P(I,2)
+ PZ = P(I,3)
+ PE = P(I,4)
+ CALL DT_EVTPUT(1,ID,1,IDX,PX,PY,PZ,PE,0,0,0)
+ IDBJ = IDT_ICIHAD(ID)
+ EKIN = PHKK(4,NHKK)-PHKK(5,NHKK)
+ IF ((IDBJ.EQ.1).OR.(IDBJ.EQ.8)) THEN
+ IF (EKIN.LE.EPOT(2,IDBJ)) ISTHKK(NHKK) = 16
+ ENDIF
+ VHKK(1,NHKK) = VHKK(1,IDX)
+ VHKK(2,NHKK) = VHKK(2,IDX)
+ VHKK(3,NHKK) = VHKK(3,IDX)
+ VHKK(4,NHKK) = VHKK(4,IDX)
+C IF (I.EQ.4) THEN
+C WHKK(1,NHKK) = POLARX(1)
+C WHKK(2,NHKK) = POLARX(2)
+C WHKK(3,NHKK) = POLARX(3)
+C WHKK(4,NHKK) = POLARX(4)
+C ELSE
+ WHKK(1,NHKK) = WHKK(1,IDX)
+ WHKK(2,NHKK) = WHKK(2,IDX)
+ WHKK(3,NHKK) = WHKK(3,IDX)
+ WHKK(4,NHKK) = WHKK(4,IDX)
+C ENDIF
+ IF (LEMCCK) CALL DT_EVTEMC(-PX,-PY,-PZ,-PE,2,IDUM,IDUM)
+ ENDIF
+ 4 CONTINUE
+
+ IF (LEMCCK) THEN
+ CHKLEV = TINY5
+ CALL DT_EVTEMC(DUM,DUM,DUM,CHKLEV,-1,778,IREJ1)
+ IF (IREJ1.NE.0) CALL DT_EVTOUT(4)
+ ENDIF
+
+* transform momenta into cms (as required for inc etc.)
+ DO 5 I=NHKK0,NHKK
+ IF (ISTHKK(I).EQ.1) THEN
+ CALL DT_LTNUC(PHKK(3,I),PHKK(4,I),PZ,PE,3)
+ PHKK(3,I) = PZ
+ PHKK(4,I) = PE
+ ENDIF
+ 5 CONTINUE
+
+ RETURN
+ END
+*
+*===kkevnt=============================================================*
+*
+CDECK ID>, DT_KKEVNT
+ SUBROUTINE DT_KKEVNT(KKMAT,IREJ)
+
+************************************************************************
+* Treatment of complete nucleus-nucleus or hadron-nucleus scattering *
+* without nuclear effects (one event). *
+* This subroutine is an update of the previous version (KKEVT) written *
+* by J. Ranft/ H.-J. Moehring. *
+* This version dated 20.04.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10)
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* interface HADRIN-DPM
+ COMMON /HNTHRE/ EHADTH,EHADLO,EHADHI,INTHAD,IDXTA
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* coordinates of nucleons
+ COMMON /DTNUCO/ PKOO(3,MAXNCL),TKOO(3,MAXNCL)
+* interface between Glauber formalism and DPM
+ COMMON /DTGLIF/ JSSH(MAXNCL),JTSH(MAXNCL),
+ & INTER1(MAXINT),INTER2(MAXINT)
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+**temporary
+* statistics: Glauber-formalism
+ COMMON /DTSTA3/ ICWP,ICWT,NCSY,ICWPG,ICWTG,ICIG,IPGLB,ITGLB,NGLB
+**
+
+ DATA NEVOLD,IPOLD,ITOLD,JJPOLD,EPROLD /4*0,0.0D0/
+
+ IREJ = 0
+ ICREQU = ICREQU+1
+ NC = 0
+
+ 1 CONTINUE
+ ICSAMP = ICSAMP+1
+ NC = NC+1
+ IF (MOD(NC,10).EQ.0) THEN
+ WRITE(LOUT,1000) NEVHKK
+ 1000 FORMAT(1X,'KKEVNT: event ',I8,' rejected!')
+ GOTO 9999
+ ENDIF
+
+* initialize DTEVT1/DTEVT2
+ CALL DT_EVTINI
+
+* We need the following only in order to sample nucleon coordinates.
+* However we don't have parameters (cross sections, slope etc.)
+* for neutrinos available. Therefore switch projectile to proton
+* in this case.
+ IF (MCGENE.EQ.4) THEN
+ JJPROJ = 1
+ ELSE
+ JJPROJ = IJPROJ
+ ENDIF
+
+ 10 CONTINUE
+ IF ( (NEVHKK.NE.NEVOLD).OR.(ICENTR.GT.0).OR.
+* make sure that Glauber-formalism is called each time the interaction
+* configuration changed
+ & (IP.NE.IPOLD).OR.(IT.NE.ITOLD).OR.(JJPROJ.NE.JJPOLD).OR.
+ & (ABS(EPROJ-EPROLD).GT.TINY10) ) THEN
+* sample number of nucleon-nucleon coll. according to Glauber-form.
+ CALL DT_GLAUBE(IP,IT,JJPROJ,BIMPAC,NN,NP,NT,JSSH,JTSH,KKMAT)
+* --- Added by Chiara to monit impact parameter generation
+* PRINT *,' Impact parameter generation : b = ', BIMPAC, 'fm'
+ NWTSAM = NN
+ NWASAM = NP
+ NWBSAM = NT
+ NEVOLD = NEVHKK
+ IPOLD = IP
+ ITOLD = IT
+ JJPOLD = JJPROJ
+ EPROLD = EPROJ
+ ENDIF
+
+* force diffractive particle production in h-K interactions
+ IF (((ABS(ISINGD).GT.1).OR.(ABS(IDOUBD).GT.1)).AND.
+ & (IP.EQ.1).AND.(NN.NE.1)) THEN
+ NEVOLD = 0
+ GOTO 10
+ ENDIF
+
+* check number of involved proj. nucl. (NP) if central prod.is requested
+ IF (ICENTR.GT.0) THEN
+ CALL DT_CHKCEN(IP,IT,NP,NT,IBACK)
+ IF (IBACK.GT.0) GOTO 10
+ ENDIF
+
+* get initial nucleon-configuration in projectile and target
+* rest-system (including Fermi-momenta if requested)
+ CALL DT_ININUC(IJPROJ,IP,IPZ,PKOO,JSSH,1)
+ MODE = 2
+ IF (EPROJ.LE.EHADTH) MODE = 3
+ CALL DT_ININUC(IJTARG,IT,ITZ,TKOO,JTSH,MODE)
+
+ IF ((MCGENE.NE.3).AND.(MCGENE.NE.4)) THEN
+
+* activate HADRIN at low energies (implemented for h-N scattering only)
+ IF (EPROJ.LE.EHADHI) THEN
+ IF (EHADTH.LT.ZERO) THEN
+* smooth transition btwn. DPM and HADRIN
+ FRAC = (EPROJ-EHADLO)/(EHADHI-EHADLO)
+ RR = DT_RNDM(FRAC)
+ IF (RR.GT.FRAC) THEN
+ IF (IP.EQ.1) THEN
+ CALL DT_HADCOL(IJPROJ,PPROJ,IDXTA,IREJ1)
+ IF (IREJ1.GT.0) GOTO 1
+ RETURN
+ ELSE
+ WRITE(LOUT,1001) IP,IT,EPROJ,EHADTH
+ ENDIF
+ ENDIF
+ ELSE
+* fixed threshold for onset of production via HADRIN
+ IF (EPROJ.LE.EHADTH) THEN
+ IF (IP.EQ.1) THEN
+ CALL DT_HADCOL(IJPROJ,PPROJ,IDXTA,IREJ1)
+ IF (IREJ1.GT.0) GOTO 1
+ RETURN
+ ELSE
+ WRITE(LOUT,1001) IP,IT,EPROJ,EHADTH
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+ 1001 FORMAT(1X,'KKEVNT: warning! interaction of proj. (m=',
+ & I3,') with target (m=',I3,')',/,11X,
+ & 'at E_lab=',F5.1,'GeV (threshold-energy: ',F3.1,
+ & 'GeV) cannot be handled')
+
+* sampling of momentum-x fractions & flavors of chain ends
+ CALL DT_SPLPTN(NN)
+
+* Lorentz-transformation of wounded nucleons into nucl.-nucl. cms
+ CALL DT_NUC2CM
+
+* collect momenta of chain ends and put them into DTEVT1
+ CALL DT_GETPTN(IP,NN,NCSY,IREJ1)
+ IF (IREJ1.NE.0) GOTO 1
+
+ ENDIF
+
+* handle chains including fragmentation (two-chain approximation)
+ IF (MCGENE.EQ.1) THEN
+* two-chain approximation
+ CALL DT_EVENTA(IJPROJ,IP,IT,NCSY,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in KKEVNT'
+ GOTO 1
+ ENDIF
+ ELSEIF (MCGENE.EQ.2) THEN
+* multiple-Po exchange including minijets
+ CALL DT_EVENTB(NCSY,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 2 in KKEVNT'
+ GOTO 1
+ ENDIF
+ ELSEIF (MCGENE.EQ.3) THEN
+
+ STOP ' This version does not contain LEPTO !'
+
+ ELSEIF (MCGENE.EQ.4) THEN
+* quasi-elastic neutrino scattering
+ CALL DT_EVENTD(IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 4 in KKEVNT'
+ GOTO 1
+ ENDIF
+ ELSE
+ WRITE(LOUT,1002) MCGENE
+ 1002 FORMAT(1X,'KKEVNT: warning! event-generator',I4,
+ & ' not available - program stopped')
+ STOP
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===chkcen=============================================================*
+*
+CDECK ID>, DT_CHKCEN
+ SUBROUTINE DT_CHKCEN(IP,IT,NP,NT,IBACK)
+
+************************************************************************
+* Check of number of involved projectile nucleons if central production*
+* is requested. *
+* Adopted from a part of the old KKEVT routine which was written by *
+* J. Ranft/H.-J.Moehring. *
+* This version dated 13.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+
+ IBACK = 0
+
+* old version
+ IF (ICENTR.EQ.2) THEN
+ IF (IP.LT.IT) THEN
+ IF (IP.LE.8) THEN
+ IF (NP.LT.IP-1) IBACK = 1
+ ELSEIF (IP.LE.16) THEN
+ IF (NP.LT.IP-2) IBACK = 1
+ ELSEIF (IP.LE.32) THEN
+ IF (NP.LT.IP-3) IBACK = 1
+ ELSEIF (IP.GE.33) THEN
+ IF (NP.LT.IP-5) IBACK = 1
+ ENDIF
+ ELSEIF (IP.EQ.IT) THEN
+ IF (IP.EQ.32) THEN
+ IF ((NP.LT.22).OR.(NT.LT.22)) IBACK = 1
+ ELSE
+ IF (NP.LT.IP-IP/8) IBACK = 1
+ ENDIF
+ ELSEIF (ABS(IP-IT).LT.3) THEN
+ IF (NP.LT.IP-IP/8) IBACK = 1
+ ENDIF
+ ELSE
+* new version (DPMJET, 5.6.99)
+ IF (IP.LT.IT) THEN
+ IF (IP.LE.8) THEN
+ IF (NP.LT.IP-1) IBACK = 1
+ ELSEIF (IP.LE.16) THEN
+ IF (NP.LT.IP-2) IBACK = 1
+ ELSEIF (IP.LT.32) THEN
+ IF (NP.LT.IP-3) IBACK = 1
+ ELSEIF (IP.GE.32) THEN
+ IF (IT.LE.150) THEN
+* Example: S-Ag
+ IF (NP.LT.IP-1) IBACK = 1
+ ELSE
+* Example: S-Au
+ IF (NP.LT.IP) IBACK = 1
+ ENDIF
+ ENDIF
+ ELSEIF (IP.EQ.IT) THEN
+* Example: S-S
+ IF (IP.EQ.32) THEN
+ IF ((NP.LT.22).OR.(NT.LT.22)) IBACK = 1
+* Example: Pb-Pb
+ ELSE
+ IF (NP.LT.IP-IP/4) IBACK = 1
+ ENDIF
+ ELSEIF (ABS(IP-IT).LT.3) THEN
+ IF (NP.LT.IP-IP/8) IBACK = 1
+ ENDIF
+ ENDIF
+
+ ICCPRO = ICCPRO+1
+
+ RETURN
+ END
+*
+*===ininuc=============================================================*
+*
+CDECK ID>, DT_ININUC
+ SUBROUTINE DT_ININUC(ID,NMASS,NCH,COORD,JS,IMODE)
+
+************************************************************************
+* Samples initial configuration of nucleons in nucleus with mass NMASS *
+* including Fermi-momenta (if reqested). *
+* ID BAMJET-code for hadrons (instead of nuclei) *
+* NMASS mass number of nucleus (number of nucleons) *
+* NCH charge of nucleus *
+* COORD(3,NMASS) coordinates of nucleons inside nucleus in fm *
+* JS(NMASS) > 0 nucleon undergoes nucleon-nucleon interact. *
+* IMODE = 1 projectile nucleus *
+* = 2 target nucleus *
+* = 3 target nucleus (E_lab<E_thr for HADRIN) *
+* Adopted from a part of the old KKEVT routine which was written by *
+* J. Ranft/H.-J.Moehring. *
+* This version dated 13.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (FM2MM=1.0D-12)
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* auxiliary common for chain system storage (DTUNUC 1.x)
+ COMMON /DTCHSY/ ISKPCH(8,MAXINT),IPOSP(MAXNCL),IPOST(MAXNCL)
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* flavors of partons (DTUNUC 1.x)
+ COMMON /DTDPMF/ IPVQ(MAXVQU),IPPV1(MAXVQU),IPPV2(MAXVQU),
+ & ITVQ(MAXVQU),ITTV1(MAXVQU),ITTV2(MAXVQU),
+ & IPSQ(MAXSQU),IPSQ2(MAXSQU),
+ & IPSAQ(MAXSQU),IPSAQ2(MAXSQU),
+ & ITSQ(MAXSQU),ITSQ2(MAXSQU),
+ & ITSAQ(MAXSQU),ITSAQ2(MAXSQU),
+ & KKPROJ(MAXVQU),KKTARG(MAXVQU)
+* interface HADRIN-DPM
+ COMMON /HNTHRE/ EHADTH,EHADLO,EHADHI,INTHAD,IDXTA
+
+ DIMENSION PF(4),PFTOT(4),COORD(3,MAXNCL),JS(MAXNCL)
+
+* number of neutrons
+ NNEU = NMASS-NCH
+* initializations
+ NP = 0
+ NN = 0
+ DO 1 K=1,4
+ PFTOT(K) = 0.0D0
+ 1 CONTINUE
+ MODE = IMODE
+ IF (IMODE.GT.2) MODE = 2
+**sr 29.5. new NPOINT(1)-definition
+C IF (IMODE.GE.2) NPOINT(1) = NHKK+1
+**
+ NHADRI = 0
+ NC = NHKK
+
+* get initial configuration
+ DO 2 I=1,NMASS
+ NHKK = NHKK+1
+ IF (JS(I).GT.0) THEN
+ ISTHKK(NHKK) = 10+MODE
+ IF (IMODE.EQ.3) THEN
+* additional treatment if HADRIN-generator is requested
+ NHADRI = NHADRI+1
+ IF (NHADRI.EQ.1) IDXTA = NHKK
+ IF (NHADRI.GT.1) ISTHKK(NHKK) = 14
+ ENDIF
+ ELSE
+ ISTHKK(NHKK) = 12+MODE
+ ENDIF
+ IF (NMASS.GE.2) THEN
+* treatment for nuclei
+ FRAC = 1.0D0-DBLE(NCH)/DBLE(NMASS)
+ RR = DT_RNDM(FRAC)
+ IF ((RR.LT.FRAC).AND.(NN.LT.NNEU)) THEN
+ IDX = 8
+ NN = NN+1
+ ELSEIF ((RR.GE.FRAC).AND.(NP.LT.NCH)) THEN
+ IDX = 1
+ NP = NP+1
+ ELSEIF (NN.LT.NNEU) THEN
+ IDX = 8
+ NN = NN+1
+ ELSEIF (NP.LT.NCH) THEN
+ IDX = 1
+ NP = NP+1
+ ENDIF
+ IDHKK(NHKK) = IDT_IPDGHA(IDX)
+ IDBAM(NHKK) = IDX
+ IF (MODE.EQ.1) THEN
+ IPOSP(I) = NHKK
+ KKPROJ(I) = IDX
+ ELSE
+ IPOST(I) = NHKK
+ KKTARG(I) = IDX
+ ENDIF
+ IF (IDX.EQ.1) THEN
+ PFER = PFERMP(MODE)
+ PBIN = SQRT(2.0D0*EBINDP(MODE)*AAM(1))
+ ELSE
+ PFER = PFERMN(MODE)
+ PBIN = SQRT(2.0D0*EBINDN(MODE)*AAM(8))
+ ENDIF
+ CALL DT_FER4M(PFER,PBIN,PF(1),PF(2),PF(3),PF(4),IDX)
+ DO 3 K=1,4
+ PFTOT(K) = PFTOT(K)+PF(K)
+ PHKK(K,NHKK) = PF(K)
+ 3 CONTINUE
+ PHKK(5,NHKK) = AAM(IDX)
+ ELSE
+* treatment for hadrons
+ IDHKK(NHKK) = IDT_IPDGHA(ID)
+ IDBAM(NHKK) = ID
+ PHKK(4,NHKK) = AAM(ID)
+ PHKK(5,NHKK) = AAM(ID)
+C* VDM assumption
+C IF (IDHKK(NHKK).EQ.22) THEN
+C PHKK(4,NHKK) = AAM(33)
+C PHKK(5,NHKK) = AAM(33)
+C ENDIF
+ IF (MODE.EQ.1) THEN
+ IPOSP(I) = NHKK
+ KKPROJ(I) = ID
+ PHKK(5,NHKK) = PHKK(5,NHKK)-SQRT(VIRT)
+ ELSE
+ IPOST(I) = NHKK
+ KKTARG(I) = ID
+ ENDIF
+ ENDIF
+ DO 4 K=1,3
+ VHKK(K,NHKK) = COORD(K,I)*FM2MM
+ WHKK(K,NHKK) = COORD(K,I)*FM2MM
+ 4 CONTINUE
+ IF (MODE.EQ.2) VHKK(1,NHKK) = VHKK(1,NHKK)+BIMPAC*FM2MM
+ IF (MODE.EQ.2) WHKK(1,NHKK) = WHKK(1,NHKK)+BIMPAC*FM2MM
+ VHKK(4,NHKK) = 0.0D0
+ WHKK(4,NHKK) = 0.0D0
+ 2 CONTINUE
+
+* balance Fermi-momenta
+ IF (NMASS.GE.2) THEN
+ DO 5 I=1,NMASS
+ NC = NC+1
+ DO 6 K=1,3
+ PHKK(K,NC) = PHKK(K,NC)-PFTOT(K)/DBLE(NMASS)
+ 6 CONTINUE
+ PHKK(4,NC) = SQRT(PHKK(5,NC)**2+PHKK(1,NC)**2+
+ & PHKK(2,NC)**2+PHKK(3,NC)**2)
+ 5 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+*
+*===fer4m==============================================================*
+*
+CDECK ID>, DT_FER4M
+ SUBROUTINE DT_FER4M(PFERM,PBIND,PXT,PYT,PZT,ET,KT)
+
+************************************************************************
+* Sampling of nucleon Fermi-momenta from distributions at T=0. *
+* processed by S. Roesler, 17.10.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ LOGICAL LSTART
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+
+ DATA LSTART /.TRUE./
+
+ ILOOP = 0
+ IF (LFERMI) THEN
+ IF (LSTART) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,1X,'FER4M: sampling of Fermi-momenta activated')
+ LSTART = .FALSE.
+ ENDIF
+ 1 CONTINUE
+ CALL DT_DFERMI(PABS)
+ PABS = PFERM*PABS
+C IF (PABS.GE.PBIND) THEN
+C ILOOP = ILOOP+1
+C IF (MOD(ILOOP,500).EQ.0) THEN
+C WRITE(LOUT,1001) PABS,PBIND,ILOOP
+C1001 FORMAT(1X,'FER4M: Fermi-mom. corr. for binding',
+C & ' energy ',2E12.3,I6)
+C ENDIF
+C GOTO 1
+C ENDIF
+ CALL DT_DPOLI(POLC,POLS)
+ CALL DT_DSFECF(SFE,CFE)
+ CXTA = POLS*CFE
+ CYTA = POLS*SFE
+ CZTA = POLC
+ ET = SQRT(PABS*PABS+AAM(KT)**2)
+ PXT = CXTA*PABS
+ PYT = CYTA*PABS
+ PZT = CZTA*PABS
+ ELSE
+ ET = AAM(KT)
+ PXT = 0.0D0
+ PYT = 0.0D0
+ PZT = 0.0D0
+ ENDIF
+
+ RETURN
+ END
+*
+*===nuc2cm=============================================================*
+*
+CDECK ID>, DT_NUC2CM
+ SUBROUTINE DT_NUC2CM
+
+************************************************************************
+* Lorentz-transformation of all wounded nucleons from Lab. to nucl.- *
+* nucl. cms. (This subroutine replaces NUCMOM.) *
+* This version dated 15.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY3=1.0D-3)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+**temporary
+* statistics: Glauber-formalism
+ COMMON /DTSTA3/ ICWP,ICWT,NCSY,ICWPG,ICWTG,ICIG,IPGLB,ITGLB,NGLB
+**
+
+ ICWP = 0
+ ICWT = 0
+ NWTACC = 0
+ NWAACC = 0
+ NWBACC = 0
+
+ NPOINT(1) = NHKK+1
+ NEND = NHKK
+ DO 1 I=1,NEND
+ IF ((ISTHKK(I).EQ.11).OR.(ISTHKK(I).EQ.12)) THEN
+ IF (ISTHKK(I).EQ.11) NWAACC = NWAACC+1
+ IF (ISTHKK(I).EQ.12) NWBACC = NWBACC+1
+ MODE = ISTHKK(I)-9
+C IF (IDHKK(I).EQ.22) THEN
+C* VDM assumption
+C PEIN = AAM(33)
+C IDB = 33
+C ELSE
+C PEIN = PHKK(4,I)
+C IDB = IDBAM(I)
+C ENDIF
+C CALL DT_LTRANS(PHKK(1,I),PHKK(2,I),PHKK(3,I),PEIN,
+C & PX,PY,PZ,PE,IDB,MODE)
+ IF (PHKK(5,I).GT.ZERO) THEN
+ CALL DT_LTRANS(PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I),
+ & PX,PY,PZ,PE,IDBAM(I),MODE)
+ ELSE
+ PX = PGAMM(1)
+ PY = PGAMM(2)
+ PZ = PGAMM(3)
+ PE = PGAMM(4)
+ ENDIF
+ IST = ISTHKK(I)-2
+ ID = IDHKK(I)
+C* VDM assumption
+C IF (ID.EQ.22) ID = 113
+ CALL DT_EVTPUT(IST,ID,I,0,PX,PY,PZ,PE,0,0,0)
+ IF (ISTHKK(I).EQ.11) ICWP = ICWP+1
+ IF (ISTHKK(I).EQ.12) ICWT = ICWT+1
+ ENDIF
+ 1 CONTINUE
+
+ NWTACC = MAX(NWAACC,NWBACC)
+ ICDPR = ICDPR+ICWP
+ ICDTA = ICDTA+ICWT
+**temporary
+ IF ((ICWP.EQ.0).OR.(ICWT.EQ.0)) THEN
+ CALL DT_EVTOUT(4)
+ STOP
+ ENDIF
+
+ RETURN
+ END
+*
+*===splptn=============================================================*
+*
+CDECK ID>, DT_SPLPTN
+ SUBROUTINE DT_SPLPTN(NN)
+
+************************************************************************
+* SamPLing of ParToN momenta and flavors. *
+* This version dated 15.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+
+* sample flavors of sea-quarks
+ CALL DT_SPLFLA(NN,1)
+
+* sample x-values of partons at chain ends
+ ECM = UMO
+ CALL DT_XKSAMP(NN,ECM)
+
+* samle flavors
+ CALL DT_SPLFLA(NN,2)
+
+ RETURN
+ END
+*
+*===splfla=============================================================*
+*
+CDECK ID>, DT_SPLFLA
+ SUBROUTINE DT_SPLFLA(NN,MODE)
+
+************************************************************************
+* SamPLing of FLAvors of partons at chain ends. *
+* This subroutine replaces FLKSAA/FLKSAM. *
+* NN number of nucleon-nucleon interactions *
+* MODE = 1 sea-flavors *
+* = 2 valence-flavors *
+* Based on the original version written by J. Ranft/H.-J. Moehring. *
+* This version dated 16.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* flavors of partons (DTUNUC 1.x)
+ COMMON /DTDPMF/ IPVQ(MAXVQU),IPPV1(MAXVQU),IPPV2(MAXVQU),
+ & ITVQ(MAXVQU),ITTV1(MAXVQU),ITTV2(MAXVQU),
+ & IPSQ(MAXSQU),IPSQ2(MAXSQU),
+ & IPSAQ(MAXSQU),IPSAQ2(MAXSQU),
+ & ITSQ(MAXSQU),ITSQ2(MAXSQU),
+ & ITSAQ(MAXSQU),ITSAQ2(MAXSQU),
+ & KKPROJ(MAXVQU),KKTARG(MAXVQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPMI/ NVV,NSV,NVS,NSS,NDV,NVD,NDS,NSD,
+ & IXPV,IXPS,IXTV,IXTS,
+ & INTVV1(MAXVQU),INTVV2(MAXVQU),
+ & INTSV1(MAXVQU),INTSV2(MAXVQU),
+ & INTVS1(MAXVQU),INTVS2(MAXVQU),
+ & INTSS1(MAXSQU),INTSS2(MAXSQU),
+ & INTDV1(MAXVQU),INTDV2(MAXVQU),
+ & INTVD1(MAXVQU),INTVD2(MAXVQU),
+ & INTDS1(MAXSQU),INTDS2(MAXSQU),
+ & INTSD1(MAXSQU),INTSD2(MAXSQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPM0/ IFROVP(MAXVQU),ITOVP(MAXVQU),IFROSP(MAXSQU),
+ & IFROVT(MAXVQU),ITOVT(MAXVQU),IFROST(MAXSQU)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ IF (MODE.EQ.1) THEN
+* sea-flavors
+ DO 1 I=1,NN
+ IPSQ(I) = INT(1.0D0+DT_RNDM(CRONCO)*(2.0D0+SEASQ))
+ IPSAQ(I) = -IPSQ(I)
+ 1 CONTINUE
+ DO 2 I=1,NN
+ ITSQ(I) = INT(1.0D0+DT_RNDM(CRONCO)*(2.0D0+SEASQ))
+ ITSAQ(I)= -ITSQ(I)
+ 2 CONTINUE
+ ELSEIF (MODE.EQ.2) THEN
+* valence flavors
+ DO 3 I=1,IXPV
+ CALL DT_FLAHAD(KKPROJ(IFROVP(I)),IPVQ(I),IPPV1(I),IPPV2(I))
+ 3 CONTINUE
+ DO 4 I=1,IXTV
+ CALL DT_FLAHAD(KKTARG(IFROVT(I)),ITVQ(I),ITTV1(I),ITTV2(I))
+ 4 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+*
+*===getptn=============================================================*
+*
+CDECK ID>, DT_GETPTN
+ SUBROUTINE DT_GETPTN(IP,NN,NCSY,IREJ)
+
+************************************************************************
+* This subroutine collects partons at chain ends from temporary *
+* commons and puts them into DTEVT1. *
+* This version dated 15.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ZERO=0.0D0,OHALF=0.5D0)
+
+ LOGICAL LCHK
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* auxiliary common for chain system storage (DTUNUC 1.x)
+ COMMON /DTCHSY/ ISKPCH(8,MAXINT),IPOSP(MAXNCL),IPOST(MAXNCL)
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* x-values of partons (DTUNUC 1.x)
+ COMMON /DTDPMX/ XPVQ(MAXVQU),XPVD(MAXVQU),
+ & XTVQ(MAXVQU),XTVD(MAXVQU),
+ & XPSQ(MAXSQU),XPSAQ(MAXSQU),
+ & XTSQ(MAXSQU),XTSAQ(MAXSQU)
+* flavors of partons (DTUNUC 1.x)
+ COMMON /DTDPMF/ IPVQ(MAXVQU),IPPV1(MAXVQU),IPPV2(MAXVQU),
+ & ITVQ(MAXVQU),ITTV1(MAXVQU),ITTV2(MAXVQU),
+ & IPSQ(MAXSQU),IPSQ2(MAXSQU),
+ & IPSAQ(MAXSQU),IPSAQ2(MAXSQU),
+ & ITSQ(MAXSQU),ITSQ2(MAXSQU),
+ & ITSAQ(MAXSQU),ITSAQ2(MAXSQU),
+ & KKPROJ(MAXVQU),KKTARG(MAXVQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPMI/ NVV,NSV,NVS,NSS,NDV,NVD,NDS,NSD,
+ & IXPV,IXPS,IXTV,IXTS,
+ & INTVV1(MAXVQU),INTVV2(MAXVQU),
+ & INTSV1(MAXVQU),INTSV2(MAXVQU),
+ & INTVS1(MAXVQU),INTVS2(MAXVQU),
+ & INTSS1(MAXSQU),INTSS2(MAXSQU),
+ & INTDV1(MAXVQU),INTDV2(MAXVQU),
+ & INTVD1(MAXVQU),INTVD2(MAXVQU),
+ & INTDS1(MAXSQU),INTDS2(MAXSQU),
+ & INTSD1(MAXSQU),INTSD2(MAXSQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPM0/ IFROVP(MAXVQU),ITOVP(MAXVQU),IFROSP(MAXSQU),
+ & IFROVT(MAXVQU),ITOVT(MAXVQU),IFROST(MAXSQU)
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4),PP(4),PT(4)
+
+ DATA AMSS,AMVS,AMDS,AMVD,AMVV/0.4D0,2.0D0,2.0D0,2.5D0,2.0D0/
+
+ IREJ = 0
+ NCSY = 0
+ NPOINT(2) = NHKK+1
+
+* sea-sea chains
+ DO 10 I=1,NSS
+ IF (ISKPCH(1,I).EQ.99) GOTO 10
+ ICCHAI(1,1) = ICCHAI(1,1)+2
+ IDXP = INTSS1(I)
+ IDXT = INTSS2(I)
+ MOP = JDAHKK(1,IPOSP(IFROSP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROST(IDXT)))
+ DO 11 K=1,4
+ PP1(K) = XPSQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPSAQ(IDXP)*PHKK(K,MOP)
+ PT1(K) = XTSAQ(IDXT)*PHKK(K,MOT)
+ PT2(K) = XTSQ(IDXT) *PHKK(K,MOT)
+ 11 CONTINUE
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMSS).OR.(AM2.LT.AMSS)) THEN
+C WRITE(LOUT,5000) NEVHKK,I,AM1,AM2
+ 5000 FORMAT(1X,'incon. chain mass SS: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5000) NEVHKK,I,AM1,AM2
+ ENDIF
+ IFP1 = IDT_IB2PDG(IPSQ(IDXP),0,2)
+ IFP2 = IDT_IB2PDG(IPSAQ(IDXP),0,2)
+ IFT1 = IDT_IB2PDG(ITSAQ(IDXT),0,2)
+ IFT2 = IDT_IB2PDG(ITSQ(IDXT),0,2)
+ CALL DT_EVTPUT(-31,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,1)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,1)
+ CALL DT_EVTPUT(-31,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,1)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,1)
+ NCSY = NCSY+1
+ 10 CONTINUE
+
+* disea-sea chains
+ DO 20 I=1,NDS
+ IF (ISKPCH(2,I).EQ.99) GOTO 20
+ ICCHAI(1,2) = ICCHAI(1,2)+2
+ IDXP = INTDS1(I)
+ IDXT = INTDS2(I)
+ MOP = JDAHKK(1,IPOSP(IFROSP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROST(IDXT)))
+ DO 21 K=1,4
+ PP1(K) = XPSQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPSAQ(IDXP)*PHKK(K,MOP)
+ PT1(K) = XTSQ(IDXT) *PHKK(K,MOT)
+ PT2(K) = XTSAQ(IDXT)*PHKK(K,MOT)
+ 21 CONTINUE
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMDS).OR.(AM2.LT.AMDS)) THEN
+C WRITE(LOUT,5001) NEVHKK,I,AM1,AM2
+ 5001 FORMAT(1X,'incon. chain mass DS: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5001) NEVHKK,I,AM1,AM2
+ ENDIF
+ IFP1 = IDT_IB2PDG(IPSQ(IDXP),IPSQ2(IDXP),2)
+ IFP2 = IDT_IB2PDG(-IPSQ(IDXP),-IPSQ2(IDXP),2)
+ IFT1 = IDT_IB2PDG(ITSQ(IDXT),0,2)
+ IFT2 = IDT_IB2PDG(ITSAQ(IDXT),0,2)
+ CALL DT_EVTPUT(-31,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,2)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,2)
+ CALL DT_EVTPUT(-31,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,2)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,2)
+ NCSY = NCSY+1
+ 20 CONTINUE
+
+* sea-disea chains
+ DO 30 I=1,NSD
+ IF (ISKPCH(3,I).EQ.99) GOTO 30
+ ICCHAI(1,3) = ICCHAI(1,3)+2
+ IDXP = INTSD1(I)
+ IDXT = INTSD2(I)
+ MOP = JDAHKK(1,IPOSP(IFROSP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROST(IDXT)))
+ DO 31 K=1,4
+ PP1(K) = XPSQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPSAQ(IDXP)*PHKK(K,MOP)
+ PT1(K) = XTSQ(IDXT) *PHKK(K,MOT)
+ PT2(K) = XTSAQ(IDXT)*PHKK(K,MOT)
+ 31 CONTINUE
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMDS).OR.(AM2.LT.AMDS)) THEN
+C WRITE(LOUT,5002) NEVHKK,I,AM1,AM2
+ 5002 FORMAT(1X,'incon. chain mass SD: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5002) NEVHKK,I,AM1,AM2
+ ENDIF
+ IFP1 = IDT_IB2PDG(IPSQ(IDXP),0,2)
+ IFP2 = IDT_IB2PDG(IPSAQ(IDXP),0,2)
+ IFT1 = IDT_IB2PDG(ITSQ(IDXT),ITSQ2(IDXT),2)
+ IFT2 = IDT_IB2PDG(-ITSQ(IDXT),-ITSQ2(IDXT),2)
+ CALL DT_EVTPUT(-31,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,3)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,3)
+ CALL DT_EVTPUT(-31,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,3)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,3)
+ NCSY = NCSY+1
+ 30 CONTINUE
+
+* disea-valence chains
+ DO 50 I=1,NDV
+ IF (ISKPCH(5,I).EQ.99) GOTO 50
+ ICCHAI(1,5) = ICCHAI(1,5)+2
+ IDXP = INTDV1(I)
+ IDXT = INTDV2(I)
+ MOP = JDAHKK(1,IPOSP(IFROSP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROVT(IDXT)))
+ DO 51 K=1,4
+ PP1(K) = XPSQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPSAQ(IDXP)*PHKK(K,MOP)
+ PT1(K) = XTVQ(IDXT) *PHKK(K,MOT)
+ PT2(K) = XTVD(IDXT) *PHKK(K,MOT)
+ 51 CONTINUE
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMVD).OR.(AM2.LT.AMVD)) THEN
+C WRITE(LOUT,5003) NEVHKK,I,AM1,AM2
+ 5003 FORMAT(1X,'incon. chain mass DV: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5003) NEVHKK,I,AM1,AM2
+ ENDIF
+ IFP1 = IDT_IB2PDG(IPSQ(IDXP),IPSQ2(IDXP),2)
+ IFP2 = IDT_IB2PDG(-IPSQ(IDXP),-IPSQ2(IDXP),2)
+ IFT1 = IDT_IB2PDG(ITVQ(IDXT),0,2)
+ IFT2 = IDT_IB2PDG(ITTV1(IDXT),ITTV2(IDXT),2)
+ CALL DT_EVTPUT(-31,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,5)
+ CALL DT_EVTPUT(-22,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,5)
+ CALL DT_EVTPUT(-31,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,5)
+ CALL DT_EVTPUT(-22,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,5)
+ NCSY = NCSY+1
+ 50 CONTINUE
+
+* valence-sea chains
+ DO 60 I=1,NVS
+ IF (ISKPCH(6,I).EQ.99) GOTO 60
+ ICCHAI(1,6) = ICCHAI(1,6)+2
+ IDXP = INTVS1(I)
+ IDXT = INTVS2(I)
+ MOP = JDAHKK(1,IPOSP(IFROVP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROST(IDXT)))
+ DO 61 K=1,4
+ PP1(K) = XPVQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPVD(IDXP) *PHKK(K,MOP)
+ PT1(K) = XTSAQ(IDXT)*PHKK(K,MOT)
+ PT2(K) = XTSQ(IDXT) *PHKK(K,MOT)
+ 61 CONTINUE
+ IFP1 = IDT_IB2PDG(IPVQ(IDXP),0,2)
+ IFP2 = IDT_IB2PDG(IPPV1(IDXP),IPPV2(IDXP),2)
+ IFT1 = IDT_IB2PDG(ITSAQ(IDXT),0,2)
+ IFT2 = IDT_IB2PDG(ITSQ(IDXT),0,2)
+ CALL DT_CHKCSY(IFP1,IFT1,LCHK)
+ IF (LCHK) THEN
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,6)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,6)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,6)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,6)
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ ELSE
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,6)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,6)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,6)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,6)
+ PTOCH = SQRT((PP1(1)+PT2(1))**2+(PP1(2)+PT2(2))**2
+ & +(PP1(3)+PT2(3))**2)
+ ECH = PP1(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT1(1))**2+(PP2(2)+PT1(2))**2
+ & +(PP2(3)+PT1(3))**2)
+ ECH = PP2(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ ENDIF
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMSS).OR.(AM2.LT.AMVS)) THEN
+C WRITE(LOUT,5004) NEVHKK,I,AM1,AM2
+ 5004 FORMAT(1X,'incon. chain mass VS: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5004) NEVHKK,I,AM1,AM2
+ ENDIF
+ NCSY = NCSY+1
+ 60 CONTINUE
+
+* sea-valence chains
+ DO 40 I=1,NSV
+ IF (ISKPCH(4,I).EQ.99) GOTO 40
+ ICCHAI(1,4) = ICCHAI(1,4)+2
+ IDXP = INTSV1(I)
+ IDXT = INTSV2(I)
+ MOP = JDAHKK(1,IPOSP(IFROSP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROVT(IDXT)))
+ DO 41 K=1,4
+ PP1(K) = XPSQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPSAQ(IDXP)*PHKK(K,MOP)
+ PT1(K) = XTVD(IDXT) *PHKK(K,MOT)
+ PT2(K) = XTVQ(IDXT) *PHKK(K,MOT)
+ 41 CONTINUE
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMVS).OR.(AM2.LT.AMSS)) THEN
+C WRITE(LOUT,5005) NEVHKK,I,AM1,AM2
+ 5005 FORMAT(1X,'incon. chain mass SV: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5005) NEVHKK,I,AM1,AM2
+ ENDIF
+ IFP1 = IDT_IB2PDG(IPSQ(IDXP),0,2)
+ IFP2 = IDT_IB2PDG(IPSAQ(IDXP),0,2)
+ IFT1 = IDT_IB2PDG(ITTV1(IDXT),ITTV2(IDXT),2)
+ IFT2 = IDT_IB2PDG(ITVQ(IDXT),0,2)
+ CALL DT_EVTPUT(-31,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,4)
+ CALL DT_EVTPUT(-22,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,4)
+ CALL DT_EVTPUT(-31,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,4)
+ CALL DT_EVTPUT(-22,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,4)
+ NCSY = NCSY+1
+ 40 CONTINUE
+
+* valence-disea chains
+ DO 70 I=1,NVD
+ IF (ISKPCH(7,I).EQ.99) GOTO 70
+ ICCHAI(1,7) = ICCHAI(1,7)+2
+ IDXP = INTVD1(I)
+ IDXT = INTVD2(I)
+ MOP = JDAHKK(1,IPOSP(IFROVP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROST(IDXT)))
+ DO 71 K=1,4
+ PP1(K) = XPVQ(IDXP) *PHKK(K,MOP)
+ PP2(K) = XPVD(IDXP) *PHKK(K,MOP)
+ PT1(K) = XTSQ(IDXT) *PHKK(K,MOT)
+ PT2(K) = XTSAQ(IDXT)*PHKK(K,MOT)
+ 71 CONTINUE
+ IFP1 = IDT_IB2PDG(IPVQ(IDXP),0,2)
+ IFP2 = IDT_IB2PDG(IPPV1(IDXP),IPPV2(IDXP),2)
+ IFT1 = IDT_IB2PDG(ITSQ(IDXT),ITSQ2(IDXT),2)
+ IFT2 = IDT_IB2PDG(-ITSQ(IDXT),-ITSQ2(IDXT),2)
+ CALL DT_CHKCSY(IFP1,IFT1,LCHK)
+ IF (LCHK) THEN
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,7)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,7)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,7)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,7)
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ ELSE
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,7)
+ CALL DT_EVTPUT(-32,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,7)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,7)
+ CALL DT_EVTPUT(-32,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,7)
+ PTOCH = SQRT((PP1(1)+PT2(1))**2+(PP1(2)+PT2(2))**2
+ & +(PP1(3)+PT2(3))**2)
+ ECH = PP1(4)+PT2(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT1(1))**2+(PP2(2)+PT1(2))**2
+ & +(PP2(3)+PT1(3))**2)
+ ECH = PP2(4)+PT1(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ ENDIF
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMVD).OR.(AM2.LT.AMVD)) THEN
+C WRITE(LOUT,5006) NEVHKK,I,AM1,AM2
+ 5006 FORMAT(1X,'incon. chain mass VD: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5006) NEVHKK,I,AM1,AM2
+ ENDIF
+ NCSY = NCSY+1
+ 70 CONTINUE
+
+* valence-valence chains
+ DO 80 I=1,NVV
+ IF (ISKPCH(8,I).EQ.99) GOTO 80
+ ICCHAI(1,8) = ICCHAI(1,8)+2
+ IDXP = INTVV1(I)
+ IDXT = INTVV2(I)
+ MOP = JDAHKK(1,IPOSP(IFROVP(IDXP)))
+ MOT = JDAHKK(1,IPOST(IFROVT(IDXT)))
+ DO 81 K=1,4
+ PP1(K) = XPVQ(IDXP)*PHKK(K,MOP)
+ PP2(K) = XPVD(IDXP)*PHKK(K,MOP)
+ PT1(K) = XTVD(IDXT)*PHKK(K,MOT)
+ PT2(K) = XTVQ(IDXT)*PHKK(K,MOT)
+ 81 CONTINUE
+ IFP1 = IDT_IB2PDG(IPVQ(IDXP),0,2)
+ IFP2 = IDT_IB2PDG(IPPV1(IDXP),IPPV2(IDXP),2)
+ IFT1 = IDT_IB2PDG(ITTV1(IDXT),ITTV2(IDXT),2)
+ IFT2 = IDT_IB2PDG(ITVQ(IDXT),0,2)
+
+* check for diffractive event
+ IDIFF = 0
+ IF (((ISINGD.GT.0).OR.(IDOUBD.GT.0)).AND.
+ & (IP.EQ.1).AND.(NN.EQ.1)) THEN
+ DO 800 K=1,4
+ PP(K) = PP1(K)+PP2(K)
+ PT(K) = PT1(K)+PT2(K)
+ 800 CONTINUE
+ ISTCK = NHKK
+ CALL DT_DIFEVT(IFP1,IFP2,PP,MOP,
+ & IFT1,IFT2,PT,MOT,IDIFF,NCSY,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+ IF (IREJ1.NE.0) THEN
+ IDIFF = 0
+ NHKK = ISTCK
+ ENDIF
+ ELSE
+ IDIFF = 0
+ ENDIF
+
+ IF (IDIFF.EQ.0) THEN
+* valence-valence chain system
+ CALL DT_CHKCSY(IFP1,IFT1,LCHK)
+ IF (LCHK) THEN
+* baryon-baryon
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,
+ & PP1(1),PP1(2),PP1(3),PP1(4),0,0,8)
+ CALL DT_EVTPUT(-22,IFT1,MOT,0,
+ & PT1(1),PT1(2),PT1(3),PT1(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,
+ & PP2(1),PP2(2),PP2(3),PP2(4),0,0,8)
+ CALL DT_EVTPUT(-22,IFT2,MOT,0,
+ & PT2(1),PT2(2),PT2(3),PT2(4),0,0,8)
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ ELSE
+* antibaryon-baryon
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,
+ & PP1(1),PP1(2),PP1(3),PP1(4),0,0,8)
+ CALL DT_EVTPUT(-22,IFT2,MOT,0,
+ & PT2(1),PT2(2),PT2(3),PT2(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,
+ & PP2(1),PP2(2),PP2(3),PP2(4),0,0,8)
+ CALL DT_EVTPUT(-22,IFT1,MOT,0,
+ & PT1(1),PT1(2),PT1(3),PT1(4),0,0,8)
+ PTOCH = SQRT((PP1(1)+PT2(1))**2+(PP1(2)+PT2(2))**2
+ & +(PP1(3)+PT2(3))**2)
+ ECH = PP1(4)+PT2(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT1(1))**2+(PP2(2)+PT1(2))**2
+ & +(PP2(3)+PT1(3))**2)
+ ECH = PP2(4)+PT1(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ ENDIF
+ IF ((AM1.GT.0.0D0).AND.(AM2.GT.0.0D0)) THEN
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ IF ((AM1.LT.AMVV).OR.(AM2.LT.AMVV)) THEN
+C WRITE(LOUT,5007) NEVHKK,I,AM1,AM2
+ 5007 FORMAT(1X,'incon. chain mass VV: ',2I5,2E10.3)
+ ENDIF
+ ELSE
+ WRITE(LOUT,5007) NEVHKK,I,AM1,AM2
+ ENDIF
+ NCSY = NCSY+1
+ ENDIF
+ 80 CONTINUE
+ IF (ISTHKK(NPOINT(2)).EQ.1) NPOINT(2) = NPOINT(2)+1
+
+* energy-momentum & flavor conservation check
+ IF (ABS(IDIFF).NE.1) THEN
+ IF (IDIFF.NE.0) THEN
+ IF (LEMCCK) CALL DT_EMC2(9,10,0,0,0,3,-21,-22,-41,1,0,
+ & 1,3,10,IREJ)
+ ELSE
+ IF (LEMCCK) CALL DT_EMC2(9,10,0,0,0,3,-21,-22,-31,-32,0,
+ & 1,3,10,IREJ)
+ ENDIF
+ IF (IREJ.NE.0) THEN
+ CALL DT_EVTOUT(4)
+ STOP
+ ENDIF
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===chkcsy=============================================================*
+*
+CDECK ID>, DT_CHKCSY
+ SUBROUTINE DT_CHKCSY(ID1,ID2,LCHK)
+
+************************************************************************
+* CHeCk Chain SYstem for consistency of partons at chain ends. *
+* ID1,ID2 PDG-numbers of partons at chain ends *
+* LCHK = .true. consistent chain *
+* = .false. inconsistent chain *
+* This version dated 18.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ LOGICAL LCHK
+
+ LCHK = .TRUE.
+
+* q-aq chain
+ IF ((ABS(ID1).LE.6).AND.(ABS(ID2).LE.6)) THEN
+ IF (ID1*ID2.GT.0) LCHK = .FALSE.
+* q-qq, aq-aqaq chain
+ ELSEIF (((ABS(ID1).LE.6).AND.(ABS(ID2).GT.6)).OR.
+ & ((ABS(ID1).GT.6).AND.(ABS(ID2).LE.6))) THEN
+ IF (ID1*ID2.LT.0) LCHK = .FALSE.
+* qq-aqaq chain
+ ELSEIF ((ABS(ID1).GT.6).AND.(ABS(ID2).GT.6)) THEN
+ IF (ID1*ID2.GT.0) LCHK = .FALSE.
+ ENDIF
+
+ RETURN
+ END
+*
+*===eventa=============================================================*
+*
+CDECK ID>, DT_EVENTA
+ SUBROUTINE DT_EVENTA(ID,IP,IT,NCSY,IREJ)
+
+************************************************************************
+* Treatment of nucleon-nucleon interactions in a two-chain *
+* approximation. *
+* (input) ID BAMJET-index of projectile hadron (in case of *
+* h-K scattering) *
+* IP/IT mass number of projectile/target nucleus *
+* NCSY number of two chain systems *
+* IREJ rejection flag *
+* This version dated 15.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4)
+
+ IREJ = 0
+ NPOINT(3) = NHKK+1
+
+* skip following treatment for low-mass diffraction
+ IF (ABS(IFLAGD).EQ.1) THEN
+ NPOINT(3) = NPOINT(2)
+ GOTO 5
+ ENDIF
+
+* multiple scattering of chain ends
+ IF ((IP.GT.1).AND.(MKCRON.NE.0)) CALL DT_CRONIN(1)
+ IF ((IT.GT.1).AND.(MKCRON.NE.0)) CALL DT_CRONIN(2)
+
+ NC = NPOINT(2)
+* get a two-chain system from DTEVT1
+ DO 3 I=1,NCSY
+ IFP1 = IDHKK(NC)
+ IFT1 = IDHKK(NC+1)
+ IFP2 = IDHKK(NC+2)
+ IFT2 = IDHKK(NC+3)
+ DO 4 K=1,4
+ PP1(K) = PHKK(K,NC)
+ PT1(K) = PHKK(K,NC+1)
+ PP2(K) = PHKK(K,NC+2)
+ PT2(K) = PHKK(K,NC+3)
+ 4 CONTINUE
+ MOP1 = NC
+ MOT1 = NC+1
+ MOP2 = NC+2
+ MOT2 = NC+3
+ CALL DT_GETCSY(IFP1,PP1,MOP1,IFP2,PP2,MOP2,
+ & IFT1,PT1,MOT1,IFT2,PT2,MOT2,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ IRHHA = IRHHA+1
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in EVENTA'
+ GOTO 9999
+ ENDIF
+ NC = NC+4
+ 3 CONTINUE
+
+* meson/antibaryon projectile:
+* sample single-chain valence-valence systems (Reggeon contrib.)
+ IF ((IP.EQ.1).AND.(ISICHA.EQ.1)) THEN
+ IF (IIBAR(ID).LE.0) CALL DT_VV2SCH
+ ENDIF
+
+ IF ((IRESCO.EQ.1).OR.(IFRAG(1).EQ.1)) THEN
+* check DTEVT1 for remaining resonance mass corrections
+ CALL DT_EVTRES(IREJ1)
+ IF (IREJ1.GT.0) THEN
+ IRRES(1) = IRRES(1)+1
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 2 in EVENTA'
+ GOTO 9999
+ ENDIF
+ ENDIF
+
+* assign p_t to two-"chain" systems consisting of two resonances only
+* since only entries for chains will be affected, this is obsolete
+* in case of JETSET-fragmetation
+ CALL DT_RESPT
+
+* combine q-aq chains to color ropes (qq-aqaq) (chain fusion)
+ IF (LCO2CR) CALL DT_COM2CR
+
+ 5 CONTINUE
+
+* fragmentation of the complete event
+**uncomment for internal phojet-fragmentation
+C CALL DT_EVTFRA(IREJ1)
+ CALL DT_EVTFRG(2,IDUM,NPYMEM,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ IRFRAG = IRFRAG+1
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 3 in EVENTA'
+ GOTO 9999
+ ENDIF
+
+* decay of possible resonances (should be obsolete)
+ CALL DT_DECAY1
+
+ RETURN
+
+ 9999 CONTINUE
+ IREVT = IREVT+1
+ IREJ = 1
+ RETURN
+ END
+*
+*===getcsy=============================================================*
+*
+CDECK ID>, DT_GETCSY
+ SUBROUTINE DT_GETCSY(IFPR1,PP1,MOP1,IFPR2,PP2,MOP2,
+ & IFTA1,PT1,MOT1,IFTA2,PT2,MOT2,IREJ)
+
+************************************************************************
+* This version dated 15.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4),
+ & IFP1(2),IFP2(2),IFT1(2),IFT2(2),PCH1(4),PCH2(4)
+
+ IREJ = 0
+
+* get quark content of partons
+ DO 1 I=1,2
+ IFP1(I) = 0
+ IFP2(I) = 0
+ IFT1(I) = 0
+ IFT2(I) = 0
+ 1 CONTINUE
+ IFP1(1) = IDT_IPDG2B(IFPR1,1,2)
+ IF (ABS(IFPR1).GE.1000) IFP1(2) = IDT_IPDG2B(IFPR1,2,2)
+ IFP2(1) = IDT_IPDG2B(IFPR2,1,2)
+ IF (ABS(IFPR2).GE.1000) IFP2(2) = IDT_IPDG2B(IFPR2,2,2)
+ IFT1(1) = IDT_IPDG2B(IFTA1,1,2)
+ IF (ABS(IFTA1).GE.1000) IFT1(2) = IDT_IPDG2B(IFTA1,2,2)
+ IFT2(1) = IDT_IPDG2B(IFTA2,1,2)
+ IF (ABS(IFTA2).GE.1000) IFT2(2) = IDT_IPDG2B(IFTA2,2,2)
+
+* get kind of chains (1 - q-aq, 2 - q-qq/aq-aqaq, 3 - qq-aqaq)
+ IDCH1 = 2
+ IF ((IFP1(2).EQ.0).AND.(IFT1(2).EQ.0)) IDCH1 = 1
+ IF ((IFP1(2).NE.0).AND.(IFT1(2).NE.0)) IDCH1 = 3
+ IDCH2 = 2
+ IF ((IFP2(2).EQ.0).AND.(IFT2(2).EQ.0)) IDCH2 = 1
+ IF ((IFP2(2).NE.0).AND.(IFT2(2).NE.0)) IDCH2 = 3
+
+* store initial configuration for energy-momentum cons. check
+ IF (LEMCCK) CALL DT_EMC1(PP1,PP2,PT1,PT2,1,1,IDUM)
+
+* sample intrinsic p_t at chain-ends
+ CALL DT_GETSPT(PP1,IFPR1,IFP1,PP2,IFPR2,IFP2,
+ & PT1,IFTA1,IFT1,PT2,IFTA2,IFT2,
+ & AMCH1,IDCH1,AMCH2,IDCH2,IDCH(MOP1),IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in GETCSY'
+ IRPT = IRPT+1
+ GOTO 9999
+ ENDIF
+
+C IF ((IRESCO.EQ.1).OR.(IFRAG(1).EQ.1)) THEN
+C IF ((IDCH1.EQ.3).OR.((IDCH1.GT.1).AND.(IDCH2.EQ.1))) THEN
+C* check second chain for resonance
+C CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),IDR2,IDXR2,
+C & AMCH2,AMCH2N,IDCH2,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+C IF (IDR2.NE.0) THEN
+C CALL DT_CHKINE(PP2,IFPR2,PP1,IFPR1,PT2,IFTA2,PT1,IFTA1,
+C & AMCH2,AMCH2N,AMCH1,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+C ENDIF
+C* check first chain for resonance
+C CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),IDR1,IDXR1,
+C & AMCH1,AMCH1N,IDCH1,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+C IF (IDR1.NE.0) IDR1 = 100*IDR1
+C ELSE
+C* check first chain for resonance
+C CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),IDR1,IDXR1,
+C & AMCH1,AMCH1N,IDCH1,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+C IF (IDR1.NE.0) THEN
+C CALL DT_CHKINE(PP1,IFPR1,PP2,IFPR2,PT1,IFTA1,PT2,IFTA2,
+C & AMCH1,AMCH1N,AMCH2,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+C ENDIF
+C* check second chain for resonance
+C CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),IDR2,IDXR2,
+C & AMCH2,AMCH2N,IDCH2,IREJ1)
+C IF (IREJ1.NE.0) GOTO 9999
+C IF (IDR2.NE.0) IDR2 = 100*IDR2
+C ENDIF
+C ENDIF
+
+ IF ((IRESCO.EQ.1).OR.(IFRAG(1).EQ.1)) THEN
+* check chains for resonances
+ CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),IDR1,IDXR1,
+ & AMCH1,AMCH1N,IDCH1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),IDR2,IDXR2,
+ & AMCH2,AMCH2N,IDCH2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+* change kinematics corresponding to resonance-masses
+ IF ( (IDR1.NE.0).AND.(IDR2.EQ.0) ) THEN
+ CALL DT_CHKINE(PP1,IFPR1,PP2,IFPR2,PT1,IFTA1,PT2,IFTA2,
+ & AMCH1,AMCH1N,AMCH2,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+ IF (IREJ1.EQ.-1) IDR1 = 100*IDR1
+ CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),IDR2,IDXR2,
+ & AMCH2,AMCH2N,IDCH2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ IF (IDR2.NE.0) IDR2 = 100*IDR2
+ ELSEIF ( (IDR1.EQ.0).AND.(IDR2.NE.0) ) THEN
+ CALL DT_CHKINE(PP2,IFPR2,PP1,IFPR1,PT2,IFTA2,PT1,IFTA1,
+ & AMCH2,AMCH2N,AMCH1,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+ IF (IREJ1.EQ.-1) IDR2 = 100*IDR2
+ CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),IDR1,IDXR1,
+ & AMCH1,AMCH1N,IDCH1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ IF (IDR1.NE.0) IDR1 = 100*IDR1
+ ELSEIF ( (IDR1.NE.0).AND.(IDR2.NE.0) ) THEN
+ AMDIF1 = ABS(AMCH1-AMCH1N)
+ AMDIF2 = ABS(AMCH2-AMCH2N)
+ IF (AMDIF2.LT.AMDIF1) THEN
+ CALL DT_CHKINE(PP2,IFPR2,PP1,IFPR1,PT2,IFTA2,PT1,IFTA1,
+ & AMCH2,AMCH2N,AMCH1,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+ IF (IREJ1.EQ.-1) IDR2 = 100*IDR2
+ CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),
+ & IDR1,IDXR1,AMCH1,AMCH1N,IDCH1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ IF (IDR1.NE.0) IDR1 = 100*IDR1
+ ELSE
+ CALL DT_CHKINE(PP1,IFPR1,PP2,IFPR2,PT1,IFTA1,PT2,IFTA2,
+ & AMCH1,AMCH1N,AMCH2,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+ IF (IREJ1.EQ.-1) IDR1 = 100*IDR1
+ CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),
+ & IDR2,IDXR2,AMCH2,AMCH2N,IDCH2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ IF (IDR2.NE.0) IDR2 = 100*IDR2
+ ENDIF
+ ENDIF
+ ENDIF
+
+* store final configuration for energy-momentum cons. check
+ IF (LEMCCK) THEN
+ CALL DT_EMC1(PP1,PP2,PT1,PT2,-2,1,IDUM)
+ CALL DT_EMC1(PP1,PP2,PT1,PT2,3,1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+
+* put partons and chains into DTEVT1
+ DO 10 I=1,4
+ PCH1(I) = PP1(I)+PT1(I)
+ PCH2(I) = PP2(I)+PT2(I)
+ 10 CONTINUE
+ CALL DT_EVTPUT(-ISTHKK(MOP1),IFPR1,MOP1,0,PP1(1),PP1(2),
+ & PP1(3),PP1(4),0,0,0)
+ CALL DT_EVTPUT(-ISTHKK(MOT1),IFTA1,MOT1,0,PT1(1),PT1(2),
+ & PT1(3),PT1(4),0,0,0)
+ KCH = 100+IDCH(MOP1)*10+1
+ CALL DT_EVTPUT(KCH,88888,-2,-1,
+ & PCH1(1),PCH1(2),PCH1(3),PCH1(4),IDR1,IDXR1,IDCH(MOP1))
+ CALL DT_EVTPUT(-ISTHKK(MOP2),IFPR2,MOP2,0,PP2(1),PP2(2),
+ & PP2(3),PP2(4),0,0,0)
+ CALL DT_EVTPUT(-ISTHKK(MOT2),IFTA2,MOT2,0,PT2(1),PT2(2),
+ & PT2(3),PT2(4),0,0,0)
+ KCH = KCH+1
+ CALL DT_EVTPUT(KCH,88888,-2,-1,
+ & PCH2(1),PCH2(2),PCH2(3),PCH2(4),IDR2,IDXR2,IDCH(MOP2))
+
+ RETURN
+
+ 9999 CONTINUE
+ IF ((IDCH(MOP1).LE.3).AND.(IDCH(MOP2).LE.3)) THEN
+* "cancel" sea-sea chains
+ CALL DT_RJSEAC(MOP1,MOP2,MOT1,MOT2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9998
+**sr 16.5. flag for EVENTB
+ IREJ = -1
+ RETURN
+ ENDIF
+ 9998 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===chkine=============================================================*
+*
+CDECK ID>, DT_CHKINE
+ SUBROUTINE DT_CHKINE(PP1I,IFP1,PP2I,IFP2,PT1I,IFT1,PT2I,IFT2,
+ & AMCH1,AMCH1N,AMCH2,IREJ)
+
+************************************************************************
+* This subroutine replaces CORMOM. *
+* This version dated 05.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10)
+
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4),P1(4),P2(4),
+ & PP1I(4),PP2I(4),PT1I(4),PT2I(4)
+
+ IREJ = 0
+ JMSHL = IMSHL
+
+ SCALE = AMCH1N/MAX(AMCH1,TINY10)
+ DO 10 I=1,4
+ PP1(I) = PP1I(I)
+ PP2(I) = PP2I(I)
+ PT1(I) = PT1I(I)
+ PT2(I) = PT2I(I)
+ PP2(I) = PP2(I)+(1.0D0-SCALE)*PP1(I)
+ PT2(I) = PT2(I)+(1.0D0-SCALE)*PT1(I)
+ PP1(I) = SCALE*PP1(I)
+ PT1(I) = SCALE*PT1(I)
+ 10 CONTINUE
+ IF ((PP1(4).LT.0.0D0).OR.(PP2(4).LT.0.0D0).OR.
+ & (PT1(4).LT.0.0D0).OR.(PT2(4).LT.0.0D0)) GOTO 9997
+
+ ECH = PP2(4)+PT2(4)
+ PCH = SQRT( (PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2+
+ & (PP2(3)+PT2(3))**2 )
+ AMCH22 = (ECH-PCH)*(ECH+PCH)
+ IF (AMCH22.LT.0.0D0) THEN
+ IF (IOULEV(1).GT.0)
+ & WRITE(LOUT,'(1X,A)') 'CHKINE: inconsistent treatment!'
+ GOTO 9997
+ ENDIF
+
+ AMCH1 = AMCH1N
+ AMCH2 = SQRT(AMCH22)
+
+* put partons again on mass shell
+ 13 CONTINUE
+ XM1 = 0.0D0
+ XM2 = 0.0D0
+ IF (JMSHL.EQ.1) THEN
+
+ XM1 = PYMASS(IFP1)
+ XM2 = PYMASS(IFT1)
+
+ ENDIF
+ CALL DT_MASHEL(PP1,PT1,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (JMSHL.EQ.0) GOTO 9998
+ JMSHL = 0
+ GOTO 13
+ ENDIF
+ JMSHL = IMSHL
+ DO 11 I=1,4
+ PP1(I) = P1(I)
+ PT1(I) = P2(I)
+ 11 CONTINUE
+ 14 CONTINUE
+ XM1 = 0.0D0
+ XM2 = 0.0D0
+ IF (JMSHL.EQ.1) THEN
+
+ XM1 = PYMASS(IFP2)
+ XM2 = PYMASS(IFT2)
+
+ ENDIF
+ CALL DT_MASHEL(PP2,PT2,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (JMSHL.EQ.0) GOTO 9998
+ JMSHL = 0
+ GOTO 14
+ ENDIF
+ DO 12 I=1,4
+ PP2(I) = P1(I)
+ PT2(I) = P2(I)
+ 12 CONTINUE
+ DO 15 I=1,4
+ PP1I(I) = PP1(I)
+ PP2I(I) = PP2(I)
+ PT1I(I) = PT1(I)
+ PT2I(I) = PT2(I)
+ 15 CONTINUE
+ RETURN
+
+ 9997 IRCHKI(1) = IRCHKI(1)+1
+**sr
+C GOTO 9999
+ IREJ = -1
+ RETURN
+**
+ 9998 IRCHKI(2) = IRCHKI(2)+1
+
+ 9999 CONTINUE
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in CHKINE'
+ IREJ = 1
+ RETURN
+ END
+*
+*===ch2res=============================================================*
+*
+CDECK ID>, DT_CH2RES
+ SUBROUTINE DT_CH2RES(IF1,IF2,IF3,IF4,IDR,IDXR,
+ & AM,AMN,IMODE,IREJ)
+
+************************************************************************
+* Check chains for resonance production. *
+* This subroutine replaces COMCMA/COBCMA/COMCM2 *
+* input: *
+* IF1,2,3,4 input flavors (q,aq in any order) *
+* AM chain mass *
+* MODE = 1 check q-aq chain for meson-resonance *
+* = 2 check q-qq, aq-aqaq chain for baryon-resonance *
+* = 3 check qq-aqaq chain for lower mass cut *
+* output: *
+* IDR = 0 no resonances found *
+* = -1 pseudoscalar meson/octet baryon *
+* = 1 vector-meson/decuplet baryon *
+* IDXR BAMJET-index of corresponding resonance *
+* AMN mass of corresponding resonance *
+* *
+* IREJ rejection flag *
+* This version dated 06.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* quark-content to particle index conversion (DTUNUC 1.x)
+ COMMON /DTQ2ID/ IMPS(6,6),IMVE(6,6),IB08(6,21),IB10(6,21),
+ & IA08(6,21),IA10(6,21)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ DIMENSION IF(4),JF(4)
+
+**sr 4.7. test
+C DATA AMLOM,AMLOB /0.08D0,0.2D0/
+ DATA AMLOM,AMLOB /0.1D0,0.7D0/
+**
+C DATA AMLOM,AMLOB /0.001D0,0.001D0/
+
+ MODE = ABS(IMODE)
+
+ IF ((MODE.LT.1).OR.(MODE.GT.3)) THEN
+ WRITE(LOUT,1000) MODE
+ 1000 FORMAT(1X,'CH2RES: MODE ',I4,' not supported!',/,
+ & 1X,' program stopped')
+ STOP
+ ENDIF
+
+ AMX = AM
+ IREJ = 0
+ IDR = 0
+ IDXR = 0
+ AMN = AMX
+ IF ((AM.LE.0.0D0).AND.(MODE.EQ.1)) AMX = AMLOM
+ IF ((AM.LE.0.0D0).AND.(MODE.EQ.2)) AMX = AMLOB
+
+ IF(1) = IF1
+ IF(2) = IF2
+ IF(3) = IF3
+ IF(4) = IF4
+ NF = 0
+ DO 100 I=1,4
+ IF (IF(I).NE.0) THEN
+ NF = NF+1
+ JF(NF) = IF(I)
+ ENDIF
+ 100 CONTINUE
+ IF (NF.LE.MODE) THEN
+ WRITE(LOUT,1001) MODE,IF
+ 1001 FORMAT(1X,'CH2RES: inconsistent input flavors in MODE ',
+ & I4,' IF1 = ',I4,' IF2 = ',I4,' IF3 = ',I4,' IF4 = ',I4)
+ GOTO 9999
+ ENDIF
+
+ GOTO (1,2,3) MODE
+
+* check for meson resonance
+ 1 CONTINUE
+ IFQ = JF(1)
+ IFAQ = ABS(JF(2))
+ IF (JF(2).GT.0) THEN
+ IFQ = JF(2)
+ IFAQ = ABS(JF(1))
+ ENDIF
+ IFPS = IMPS(IFAQ,IFQ)
+ IFV = IMVE(IFAQ,IFQ)
+ AMPS = AAM(IFPS)
+ AMV = AAM(IFV)
+ AMHI = AMV+0.3D0
+ IF (AMX.LT.AMV) THEN
+ IF (AMX.LT.AMPS) THEN
+ IF (IMODE.GT.0) THEN
+ IF ((IRESRJ.EQ.1).OR.(AMX.LT.AMLOM)) GOTO 9999
+ ELSE
+ IF (AMX.LT.0.8D0*AMPS) GOTO 9999
+ ENDIF
+ LOMRES = LOMRES+1
+ ENDIF
+* replace chain by pseudoscalar meson
+ IDR = -1
+ IDXR = IFPS
+ AMN = AMPS
+ ELSEIF (AMX.LT.AMHI) THEN
+* replace chain by vector-meson
+ IDR = 1
+ IDXR = IFV
+ AMN = AMV
+ ENDIF
+ RETURN
+
+* check for baryon resonance
+ 2 CONTINUE
+ CALL DT_DBKLAS(JF(1),JF(2),JF(3),JB8,JB10)
+ AM8 = AAM(JB8)
+ AM10 = AAM(JB10)
+ AMHI = AM10+0.3D0
+ IF (AMX.LT.AM10) THEN
+ IF (AMX.LT.AM8) THEN
+ IF (IMODE.GT.0) THEN
+ IF ((IRESRJ.EQ.1).OR.(AMX.LT.AMLOB)) GOTO 9999
+ ELSE
+ IF (AMX.LT.0.8D0*AM8) GOTO 9999
+ ENDIF
+ LOBRES = LOBRES+1
+ ENDIF
+* replace chain by oktet baryon
+ IDR = -1
+ IDXR = JB8
+ AMN = AM8
+ ELSEIF (AMX.LT.AMHI) THEN
+ IDR = 1
+ IDXR = JB10
+ AMN = AM10
+ ENDIF
+ RETURN
+
+* check qq-aqaq for lower mass cut
+ 3 CONTINUE
+* empirical definition of AMHI to allow for (b-antib)-pair prod.
+ AMHI = 2.5D0
+ IF (AMX.LT.AMHI) GOTO 9999
+ RETURN
+
+ 9999 CONTINUE
+ IF ((IOULEV(1).GT.0).AND.(IMODE.GT.0))
+ & WRITE(LOUT,*) 'rejected 1 in CH2RES',IMODE
+ IREJ = 1
+ IRRES(2) = IRRES(2)+1
+ RETURN
+ END
+*
+*===rjseac=============================================================*
+*
+CDECK ID>, DT_RJSEAC
+ SUBROUTINE DT_RJSEAC(MOP1,MOP2,MOT1,MOT2,IREJ)
+
+************************************************************************
+* ReJection of SEA-sea Chains. *
+* MOP1/2 entries of projectile sea-partons in DTEVT1 *
+* MOT1/2 entries of projectile sea-partons in DTEVT1 *
+* This version dated 16.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ZERO=0.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+
+ DIMENSION IDXSEA(2,2),IDXNUC(2),ISTVAL(2)
+
+ IREJ = 0
+
+* projectile sea q-aq-pair
+* indices of sea-pair
+ IDXSEA(1,1) = MOP1
+ IDXSEA(1,2) = MOP2
+* index of mother-nucleon
+ IDXNUC(1) = JMOHKK(1,MOP1)
+* status of valence quarks to be corrected
+ ISTVAL(1) = -21
+
+* target sea q-aq-pair
+* indices of sea-pair
+ IDXSEA(2,1) = MOT1
+ IDXSEA(2,2) = MOT2
+* index of mother-nucleon
+ IDXNUC(2) = JMOHKK(1,MOT1)
+* status of valence quarks to be corrected
+ ISTVAL(2) = -22
+
+ DO 1 N=1,2
+ IDONE = 0
+ DO 2 I=NPOINT(2),NHKK
+ IF ((ISTHKK(I).EQ.ISTVAL(N)).AND.
+ & (JMOHKK(1,I).EQ.IDXNUC(N))) THEN
+* valence parton found
+* inrease 4-momentum by sea 4-momentum
+ DO 3 K=1,4
+ PHKK(K,I) = PHKK(K,I)+PHKK(K,IDXSEA(N,1))+
+ & PHKK(K,IDXSEA(N,2))
+ 3 CONTINUE
+ PHKK(5,I) = SQRT(ABS(PHKK(4,I)**2-PHKK(1,I)**2-
+ & PHKK(2,I)**2-PHKK(3,I)**2))
+* "cancel" sea-pair
+ DO 4 J=1,2
+ ISTHKK(IDXSEA(N,J)) = 100
+ IDHKK(IDXSEA(N,J)) = 0
+ JMOHKK(1,IDXSEA(N,J)) = 0
+ JMOHKK(2,IDXSEA(N,J)) = 0
+ JDAHKK(1,IDXSEA(N,J)) = 0
+ JDAHKK(2,IDXSEA(N,J)) = 0
+ DO 5 K=1,4
+ PHKK(K,IDXSEA(N,J)) = ZERO
+ VHKK(K,IDXSEA(N,J)) = ZERO
+ WHKK(K,IDXSEA(N,J)) = ZERO
+ 5 CONTINUE
+ PHKK(5,IDXSEA(N,J)) = ZERO
+ 4 CONTINUE
+ IDONE = 1
+ ENDIF
+ 2 CONTINUE
+ IF (IDONE.NE.1) THEN
+ WRITE(LOUT,1000) NEVHKK,MOP1,MOP2,MOT1,MOT2
+ 1000 FORMAT(1X,'RJSEAC: event ',I8,': inconsistent event',
+ & '-record!',/,1X,' sea-quark pairs ',
+ & 2I5,4X,2I5,' could not be canceled!')
+ GOTO 9999
+ ENDIF
+ 1 CONTINUE
+ ICRJSS = ICRJSS+1
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===vv2sch=============================================================*
+*
+CDECK ID>, DT_VV2SCH
+ SUBROUTINE DT_VV2SCH
+
+************************************************************************
+* Change Valence-Valence chain systems to Single CHain systems for *
+* hadron-nucleus collisions with meson or antibaryon projectile. *
+* (Reggeon contribution) *
+* The single chain system is approximately treated as one chain and a *
+* meson at rest. *
+* This version dated 18.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY7=1.0D-7,TINY3=1.0D-3)
+
+ LOGICAL LSTART
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+
+ DIMENSION IF(4,2),MO(4),PP1(4),PP2(4),PT1(4),PT2(4),PCH1(4),
+ & PCH2(4)
+
+ DATA LSTART /.TRUE./
+
+ IFSC = 0
+ IF (LSTART) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,1X,'VV2SCH: Reggeon contribution to valance-',
+ & 'valence chains treated')
+ LSTART = .FALSE.
+ ENDIF
+
+ NSTOP = NHKK
+
+* get index of first chain
+ DO 1 I=NPOINT(3),NHKK
+ IF (IDHKK(I).EQ.88888) THEN
+ NC = I
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+
+ 2 CONTINUE
+ IF ((IDHKK(NC).EQ.88888).AND.(IDHKK(NC+3).EQ.88888)
+ & .AND.(NC.LT.NSTOP)) THEN
+* get valence-valence chains
+ IF ((IDCH(NC).EQ.8).AND.(IDCH(NC+3).EQ.8)) THEN
+* get "mother"-hadron indices
+ MO1 = JMOHKK(1,JMOHKK(1,JMOHKK(1,NC)))
+ MO2 = JMOHKK(1,JMOHKK(1,JMOHKK(2,NC)))
+ KPROJ = IDT_ICIHAD(IDHKK(MO1))
+ KTARG = IDT_ICIHAD(IDHKK(MO2))
+* Lab momentum of projectile hadron
+ CALL DT_LTNUC(PHKK(3,MO1),PHKK(4,MO1),PPZ,PPE,-3)
+ PTOT = SQRT(PHKK(1,MO1)**2+PHKK(2,MO1)**2+
+ & PHKK(3,MO1)**2)
+
+ SICHAP = DT_PHNSCH(KPROJ,KTARG,PTOT)
+ IF (DT_RNDM(PTOT).LE.SICHAP) THEN
+ ICVV2S = ICVV2S+1
+* single chain requested
+* get flavors of chain-end partons
+ MO(1) = JMOHKK(1,NC)
+ MO(2) = JMOHKK(2,NC)
+ MO(3) = JMOHKK(1,NC+3)
+ MO(4) = JMOHKK(2,NC+3)
+ DO 3 I=1,4
+ IF(I,1) = IDT_IPDG2B(IDHKK(MO(I)),1,2)
+ IF(I,2) = 0
+ IF (ABS(IDHKK(MO(I))).GE.1000)
+ & IF(I,2) = IDT_IPDG2B(IDHKK(MO(I)),2,2)
+ 3 CONTINUE
+* which one is the q-aq chain?
+* N1,N1+1 - DTEVT1-entries for q-aq system
+* N2,N2+1 - DTEVT1-entries for the other chain
+ IF ((IF(1,2).EQ.0).AND.(IF(2,2).EQ.0)) THEN
+ K1 = 1
+ K2 = 3
+ N1 = NC-2
+ N2 = NC+1
+ ELSEIF ((IF(3,2).EQ.0).AND.(IF(4,2).EQ.0)) THEN
+ K1 = 3
+ K2 = 1
+ N1 = NC+1
+ N2 = NC-2
+ ELSE
+ GOTO 10
+ ENDIF
+ DO 4 K=1,4
+ PP1(K) = PHKK(K,N1)
+ PT1(K) = PHKK(K,N1+1)
+ PP2(K) = PHKK(K,N2)
+ PT2(K) = PHKK(K,N2+1)
+ 4 CONTINUE
+ AMCH1 = PHKK(5,N1+2)
+ AMCH2 = PHKK(5,N2+2)
+* get meson-identity corresponding to flavors of q-aq chain
+ ITMP = IRESRJ
+ IRESRJ = 0
+ CALL DT_CH2RES(IF(K1,1),IF(K1+1,1),0,0,IDR1,IDXR1,
+ & ZERO,AMCH1N,1,IDUM)
+ IRESRJ = ITMP
+* change kinematics of chains
+ CALL DT_CHKINE(PP1,IDHKK(N1), PP2,IDHKK(N2),
+ & PT1,IDHKK(N1+1),PT2,IDHKK(N2+1),
+ & AMCH1,AMCH1N,AMCH2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 10
+* check second chain for resonance
+ IDCHAI = 2
+ IF ((IF(K2,2).NE.0).AND.(IF(K2+1,2).NE.0)) IDCHAI = 3
+ CALL DT_CH2RES(IF(K2,1),IF(K2,2),IF(K2+1,1),IF(K2+1,2),
+ & IDR2,IDXR2,AMCH2,AMCH2N,IDCHAI,IREJ1)
+ IF (IREJ1.NE.0) GOTO 10
+ IF (IDR2.NE.0) IDR2 = 100*IDR2
+* add partons and chains to DTEVT1
+ DO 5 K=1,4
+ PCH1(K) = PP1(K)+PT1(K)
+ PCH2(K) = PP2(K)+PT2(K)
+ 5 CONTINUE
+ CALL DT_EVTPUT(ISTHKK(N1),IDHKK(N1),N1,0,PP1(1),PP1(2),
+ & PP1(3),PP1(4),0,0,0)
+ CALL DT_EVTPUT(ISTHKK(N1+1),IDHKK(N1+1),N1+1,0,PT1(1),
+ & PT1(2),PT1(3),PT1(4),0,0,0)
+ KCH = ISTHKK(N1+2)+100
+ CALL DT_EVTPUT(KCH,88888,-2,-1,PCH1(1),PCH1(2),PCH1(3),
+ & PCH1(4),IDR1,IDXR1,IDCH(N1+2))
+ IDHKK(N1+2) = 22222
+ CALL DT_EVTPUT(ISTHKK(N2),IDHKK(N2),N2,0,PP2(1),PP2(2),
+ & PP2(3),PP2(4),0,0,0)
+ CALL DT_EVTPUT(ISTHKK(N2+1),IDHKK(N2+1),N2+1,0,PT2(1),
+ & PT2(2),PT2(3),PT2(4),0,0,0)
+ KCH = ISTHKK(N2+2)+100
+ CALL DT_EVTPUT(KCH,88888,-2,-1,PCH2(1),PCH2(2),PCH2(3),
+ & PCH2(4),IDR2,IDXR2,IDCH(N2+2))
+ IDHKK(N2+2) = 22222
+ ENDIF
+ ENDIF
+ ELSE
+ GOTO 11
+ ENDIF
+ 10 CONTINUE
+ NC = NC+6
+ GOTO 2
+
+ 11 CONTINUE
+
+ RETURN
+ END
+*
+*=== phnsch ===========================================================*
+*
+CDECK ID>, DT_PHNSCH
+ DOUBLE PRECISION FUNCTION DT_PHNSCH( KP, KTARG, PLAB )
+
+*----------------------------------------------------------------------*
+* *
+* Probability for Hadron Nucleon Single CHain interactions: *
+* *
+* Created on 30 december 1993 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 04-jan-94 by Alfredo Ferrari *
+* *
+* modified by J.R.for use in DTUNUC 6.1.94 *
+* *
+* Input variables: *
+* Kp = hadron projectile index (Part numbering *
+* scheme) *
+* Ktarg = target nucleon index (1=proton, 8=neutron) *
+* Plab = projectile laboratory momentum (GeV/c) *
+* Output variable: *
+* Phnsch = probability per single chain (particle *
+* exchange) interactions *
+* *
+*----------------------------------------------------------------------*
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LUNOUT = 6 )
+ PARAMETER ( LUNERR = 6 )
+ PARAMETER ( ONEPLS = 1.000000000000001 D+00 )
+ PARAMETER ( ZERZER = 0.D+00 )
+ PARAMETER ( ONEONE = 1.D+00 )
+ PARAMETER ( TWOTWO = 2.D+00 )
+ PARAMETER ( FIVFIV = 5.D+00 )
+ PARAMETER ( HLFHLF = 0.5D+00 )
+
+ PARAMETER ( NALLWP = 39 )
+ PARAMETER ( IDMAXP = 210 )
+
+ DIMENSION ICHRGE(39),AM(39)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ DIMENSION KPTOIP(210)
+* auxiliary common for reggeon exchange (DTUNUC 1.x)
+ COMMON /DTQUAR/ IQECHR(-6:6),IQBCHR(-6:6),IQICHR(-6:6),
+ & IQSCHR(-6:6),IQCCHR(-6:6),IQUCHR(-6:6),
+ & IQTCHR(-6:6),MQUARK(3,39)
+
+ DIMENSION SGTCOE (5,33), IHLP (NALLWP)
+ DIMENSION SGTCO1(5,10),SGTCO2(5,8),SGTCO3(5,15)
+ SAVE SGTCOE, IHLP
+ SAVE IQFSC1, IQFSC2, IQBSC1, IQBSC2
+ EQUIVALENCE (SGTCO1(1,1),SGTCOE(1,1))
+ EQUIVALENCE (SGTCO2(1,1),SGTCOE(1,11))
+ EQUIVALENCE (SGTCO3(1,1),SGTCOE(1,19))
+
+* Conversion from part to paprop numbering
+ DATA KPTOIP / 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ & 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 66*0,
+ & 34, 36, 31, 32, 33, 35, 37, 5*0, 38, 5*0, 39, 19*0, 27, 28, 74*0/
+
+* 1=baryon, 2=pion, 3=kaon, 4=antibaryon:
+ DATA IHLP/1,4,5*0,1,4,2*0,3,2*2,2*3,1,4,3,3*1,2,
+ & 2*3, 2, 4*0, 3*4, 1, 4, 1, 4, 1, 4 /
+C DATA ( ( SGTCOE (J,I), J=1,5 ), I=1,10 ) /
+ DATA SGTCO1 /
+* 1st reaction: gamma p total
+ &0.147 D+00, ZERZER , ZERZER , 0.0022D+00, -0.0170D+00,
+* 2nd reaction: gamma d total
+ &0.300 D+00, ZERZER , ZERZER , 0.0095D+00, -0.057 D+00,
+* 3rd reaction: pi+ p total
+ &16.4 D+00, 19.3D+00, -0.42D+00, 0.19 D+00, ZERZER ,
+* 4th reaction: pi- p total
+ &33.0 D+00, 14.0D+00, -1.36D+00, 0.456 D+00, -4.03 D+00,
+* 5th reaction: pi+/- d total
+ &56.8 D+00, 42.2D+00, -1.45D+00, 0.65 D+00, -5.39 D+00,
+* 6th reaction: K+ p total
+ &18.1 D+00, ZERZER , ZERZER , 0.26 D+00, -1.0 D+00,
+* 7th reaction: K+ n total
+ &18.7 D+00, ZERZER , ZERZER , 0.21 D+00, -0.89 D+00,
+* 8th reaction: K+ d total
+ &34.2 D+00, 7.9 D+00, -2.1 D+00, 0.346 D+00, -0.99 D+00,
+* 9th reaction: K- p total
+ &32.1 D+00, ZERZER , ZERZER , 0.66 D+00, -5.6 D+00,
+* 10th reaction: K- n total
+ &25.2 D+00, ZERZER , ZERZER , 0.38 D+00, -2.9 D+00/
+C DATA ( ( SGTCOE (J,I), J=1,5 ), I=11,18 ) /
+ DATA SGTCO2 /
+* 11th reaction: K- d total
+ &57.6 D+00, ZERZER , ZERZER , 1.17 D+00, -9.5 D+00,
+* 12th reaction: p p total
+ &48.0 D+00, ZERZER , ZERZER , 0.522 D+00, -4.51 D+00,
+* 13th reaction: p n total
+ &47.30 D+00, ZERZER , ZERZER , 0.513 D+00, -4.27 D+00,
+* 14th reaction: p d total
+ &91.3 D+00, ZERZER , ZERZER , 1.05 D+00, -8.8 D+00,
+* 15th reaction: pbar p total
+ &38.4 D+00, 77.6D+00, -0.64D+00, 0.26 D+00, -1.2 D+00,
+* 16th reaction: pbar n total
+ &ZERZER ,133.6D+00, -0.70D+00, -1.22 D+00, 13.7 D+00,
+* 17th reaction: pbar d total
+ &112. D+00, 125.D+00, -1.08D+00, 1.14 D+00, -12.4 D+00,
+* 18th reaction: Lamda p total
+ &30.4 D+00, ZERZER , ZERZER , ZERZER , 1.6 D+00/
+C DATA ( ( SGTCOE (J,I), J=1,5 ), I=19,33 ) /
+ DATA SGTCO3 /
+* 19th reaction: pi+ p elastic
+ &ZERZER , 11.4D+00, -0.4 D+00, 0.079 D+00, ZERZER ,
+* 20th reaction: pi- p elastic
+ &1.76 D+00, 11.2D+00, -0.64D+00, 0.043 D+00, ZERZER ,
+* 21st reaction: K+ p elastic
+ &5.0 D+00, 8.1 D+00, -1.8 D+00, 0.16 D+00, -1.3 D+00,
+* 22nd reaction: K- p elastic
+ &7.3 D+00, ZERZER , ZERZER , 0.29 D+00, -2.40 D+00,
+* 23rd reaction: p p elastic
+ &11.9 D+00, 26.9D+00, -1.21D+00, 0.169 D+00, -1.85 D+00,
+* 24th reaction: p d elastic
+ &16.1 D+00, ZERZER , ZERZER , 0.32 D+00, -3.4 D+00,
+* 25th reaction: pbar p elastic
+ &10.2 D+00, 52.7D+00, -1.16D+00, 0.125 D+00, -1.28 D+00,
+* 26th reaction: pbar p elastic bis
+ &10.6 D+00, 53.1D+00, -1.19D+00, 0.136 D+00, -1.41 D+00,
+* 27th reaction: pbar n elastic
+ &36.5 D+00, ZERZER , ZERZER , ZERZER , -11.9 D+00,
+* 28th reaction: Lamda p elastic
+ &12.3 D+00, ZERZER , ZERZER , ZERZER , -2.4 D+00,
+* 29th reaction: K- p ela bis
+ &7.24 D+00, 46.0D+00, -4.71D+00, 0.279 D+00, -2.35 D+00,
+* 30th reaction: pi- p cx
+ &ZERZER ,0.912D+00, -1.22D+00, ZERZER , ZERZER ,
+* 31st reaction: K- p cx
+ &ZERZER , 3.39D+00, -1.75D+00, ZERZER , ZERZER ,
+* 32nd reaction: K+ n cx
+ &ZERZER , 7.18D+00, -2.01D+00, ZERZER , ZERZER ,
+* 33rd reaction: pbar p cx
+ &ZERZER , 18.8D+00, -2.01D+00, ZERZER , ZERZER /
+*
+* +-------------------------------------------------------------------*
+ ICHRGE(KTARG)=IICH(KTARG)
+ AM (KTARG)=AAM (KTARG)
+* | Check for pi0 (d-dbar)
+ IF ( KP .NE. 26 ) THEN
+ IP = KPTOIP (KP)
+ IF(IP.EQ.0)IP=1
+ ICHRGE(IP)=IICH(KP)
+ AM (IP)=AAM (KP)
+* |
+* +-------------------------------------------------------------------*
+* |
+ ELSE
+ IP = 23
+ ICHRGE(IP)=0
+ END IF
+* |
+* +-------------------------------------------------------------------*
+* +-------------------------------------------------------------------*
+* | No such interactions for baryon-baryon
+ IF ( IIBAR (KP) .GT. 0 ) THEN
+ DT_PHNSCH = ZERZER
+ RETURN
+* |
+* +-------------------------------------------------------------------*
+* | No "annihilation" diagram possible for K+ p/n
+ ELSE IF ( IP .EQ. 15 ) THEN
+ DT_PHNSCH = ZERZER
+ RETURN
+* |
+* +-------------------------------------------------------------------*
+* | No "annihilation" diagram possible for K0 p/n
+ ELSE IF ( IP .EQ. 24 ) THEN
+ DT_PHNSCH = ZERZER
+ RETURN
+* |
+* +-------------------------------------------------------------------*
+* | No "annihilation" diagram possible for Omebar p/n
+ ELSE IF ( IP .GE. 38 ) THEN
+ DT_PHNSCH = ZERZER
+ RETURN
+ END IF
+* |
+* +-------------------------------------------------------------------*
+* +-------------------------------------------------------------------*
+* | If the momentum is larger than 50 GeV/c, compute the single
+* | chain probability at 50 GeV/c and extrapolate to the present
+* | momentum according to 1/sqrt(s)
+* | sigma = sigma_sch (50) * sqrt (s(50)/s) + sigma_dch
+* | P_sch (50) = sigma_sch (50) / ( sigma_dch + sigma_sch (50) )
+* | sigma_dch / sigma_sch (50) = 1 / P_sch (50) - 1
+* | sigma_dch / sigma_sch = 1 / P_sch - 1 = ( 1 / P_sch (50) - 1 )
+* | x sqrt(s/s(50))
+* | P_sch = 1 / [ ( 1 / P_sch (50) - 1 ) x sqrt(s/s(50)) + 1 ]
+ IF ( PLAB .GT. 50.D+00 ) THEN
+ PLA = 50.D+00
+ AMPSQ = AM (IP)**2
+ AMTSQ = AM (KTARG)**2
+ EPROJ = SQRT ( PLAB**2 + AMPSQ )
+ UMOSQ = AMPSQ + AMTSQ + TWOTWO * AM (KTARG) * EPROJ
+ EPROJ = SQRT ( PLA**2 + AMPSQ )
+ UMO50 = AMPSQ + AMTSQ + TWOTWO * AM (KTARG) * EPROJ
+ UMORAT = SQRT ( UMOSQ / UMO50 )
+* |
+* +-------------------------------------------------------------------*
+* | P < 3 GeV/c
+ ELSE IF ( PLAB .LT. 3.D+00 ) THEN
+ PLA = 3.D+00
+ AMPSQ = AM (IP)**2
+ AMTSQ = AM (KTARG)**2
+ EPROJ = SQRT ( PLAB**2 + AMPSQ )
+ UMOSQ = AMPSQ + AMTSQ + TWOTWO * AM (KTARG) * EPROJ
+ EPROJ = SQRT ( PLA**2 + AMPSQ )
+ UMO50 = AMPSQ + AMTSQ + TWOTWO * AM (KTARG) * EPROJ
+ UMORAT = SQRT ( UMOSQ / UMO50 )
+* |
+* +-------------------------------------------------------------------*
+* | P < 50 GeV/c
+ ELSE
+ PLA = PLAB
+ UMORAT = ONEONE
+ END IF
+* |
+* +-------------------------------------------------------------------*
+ ALGPLA = LOG (PLA)
+* +-------------------------------------------------------------------*
+* | Pions:
+ IF ( IHLP (IP) .EQ. 2 ) THEN
+ ACOF = SGTCOE (1,3)
+ BCOF = SGTCOE (2,3)
+ ENNE = SGTCOE (3,3)
+ CCOF = SGTCOE (4,3)
+ DCOF = SGTCOE (5,3)
+* | Compute the pi+ p total cross section:
+ SPPPTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ ACOF = SGTCOE (1,19)
+ BCOF = SGTCOE (2,19)
+ ENNE = SGTCOE (3,19)
+ CCOF = SGTCOE (4,19)
+ DCOF = SGTCOE (5,19)
+* | Compute the pi+ p elastic cross section:
+ SPPPEL = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | Compute the pi+ p inelastic cross section:
+ SPPPIN = SPPPTT - SPPPEL
+ ACOF = SGTCOE (1,4)
+ BCOF = SGTCOE (2,4)
+ ENNE = SGTCOE (3,4)
+ CCOF = SGTCOE (4,4)
+ DCOF = SGTCOE (5,4)
+* | Compute the pi- p total cross section:
+ SPMPTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ ACOF = SGTCOE (1,20)
+ BCOF = SGTCOE (2,20)
+ ENNE = SGTCOE (3,20)
+ CCOF = SGTCOE (4,20)
+ DCOF = SGTCOE (5,20)
+* | Compute the pi- p elastic cross section:
+ SPMPEL = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | Compute the pi- p inelastic cross section:
+ SPMPIN = SPMPTT - SPMPEL
+ SIGDIA = SPMPIN - SPPPIN
+* | +----------------------------------------------------------------*
+* | | Charged pions: besides isospin consideration it is supposed
+* | | that (pi+ n)el is almost equal to (pi- p)el
+* | | and (pi+ p)el " " " " (pi- n)el
+* | | and all are almost equal among each others
+* | | (reasonable above 5 GeV/c)
+ IF ( ICHRGE (IP) .NE. 0 ) THEN
+ KHELP = KTARG / 8
+ JREAC = 3 + IP - 13 + ICHRGE (IP) * KHELP
+ ACOF = SGTCOE (1,JREAC)
+ BCOF = SGTCOE (2,JREAC)
+ ENNE = SGTCOE (3,JREAC)
+ CCOF = SGTCOE (4,JREAC)
+ DCOF = SGTCOE (5,JREAC)
+* | | Compute the total cross section:
+ SHNCTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ JREAC = 19 + IP - 13 + ICHRGE (IP) * KHELP
+ ACOF = SGTCOE (1,JREAC)
+ BCOF = SGTCOE (2,JREAC)
+ ENNE = SGTCOE (3,JREAC)
+ CCOF = SGTCOE (4,JREAC)
+ DCOF = SGTCOE (5,JREAC)
+* | | Compute the elastic cross section:
+ SHNCEL = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | | Compute the inelastic cross section:
+ SHNCIN = SHNCTT - SHNCEL
+* | | Number of diagrams:
+ NDIAGR = 1 + IP - 13 + ICHRGE (IP) * KHELP
+* | | Now compute the chain end (anti)quark-(anti)diquark
+ IQFSC1 = 1 + IP - 13
+ IQFSC2 = 0
+ IQBSC1 = 1 + KHELP
+ IQBSC2 = 1 + IP - 13
+* | |
+* | +----------------------------------------------------------------*
+* | | pi0: besides isospin consideration it is supposed that the
+* | | elastic cross section is not very different from
+* | | pi+ p and/or pi- p (reasonable above 5 GeV/c)
+ ELSE
+ KHELP = KTARG / 8
+ K2HLP = ( KP - 23 ) / 3
+* | | Number of diagrams:
+* | | For u ubar (k2hlp=0):
+* NDIAGR = 2 - KHELP
+* | | For d dbar (k2hlp=1):
+* NDIAGR = 2 + KHELP - K2HLP
+ NDIAGR = 2 + KHELP * ( 2 * K2HLP - 1 ) - K2HLP
+ SHNCIN = HLFHLF * ( SPPPIN + SPMPIN )
+* | | Now compute the chain end (anti)quark-(anti)diquark
+ IQFSC1 = 1 + K2HLP
+ IQFSC2 = 0
+ IQBSC1 = 1 + KHELP
+ IQBSC2 = 2 - K2HLP
+ END IF
+* | |
+* | +----------------------------------------------------------------*
+* | end pi's
+* +-------------------------------------------------------------------*
+* | Kaons:
+ ELSE IF ( IHLP (IP) .EQ. 3 ) THEN
+ ACOF = SGTCOE (1,6)
+ BCOF = SGTCOE (2,6)
+ ENNE = SGTCOE (3,6)
+ CCOF = SGTCOE (4,6)
+ DCOF = SGTCOE (5,6)
+* | Compute the K+ p total cross section:
+ SKPPTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ ACOF = SGTCOE (1,21)
+ BCOF = SGTCOE (2,21)
+ ENNE = SGTCOE (3,21)
+ CCOF = SGTCOE (4,21)
+ DCOF = SGTCOE (5,21)
+* | Compute the K+ p elastic cross section:
+ SKPPEL = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | Compute the K+ p inelastic cross section:
+ SKPPIN = SKPPTT - SKPPEL
+ ACOF = SGTCOE (1,9)
+ BCOF = SGTCOE (2,9)
+ ENNE = SGTCOE (3,9)
+ CCOF = SGTCOE (4,9)
+ DCOF = SGTCOE (5,9)
+* | Compute the K- p total cross section:
+ SKMPTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ ACOF = SGTCOE (1,22)
+ BCOF = SGTCOE (2,22)
+ ENNE = SGTCOE (3,22)
+ CCOF = SGTCOE (4,22)
+ DCOF = SGTCOE (5,22)
+* | Compute the K- p elastic cross section:
+ SKMPEL = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | Compute the K- p inelastic cross section:
+ SKMPIN = SKMPTT - SKMPEL
+ SIGDIA = HLFHLF * ( SKMPIN - SKPPIN )
+* | +----------------------------------------------------------------*
+* | | Charged Kaons: actually only K-
+ IF ( ICHRGE (IP) .NE. 0 ) THEN
+ KHELP = KTARG / 8
+* | | +-------------------------------------------------------------*
+* | | | Proton target:
+ IF ( KHELP .EQ. 0 ) THEN
+ SHNCIN = SKMPIN
+* | | | Number of diagrams:
+ NDIAGR = 2
+* | | |
+* | | +-------------------------------------------------------------*
+* | | | Neutron target: besides isospin consideration it is supposed
+* | | | that (K- n)el is almost equal to (K- p)el
+* | | | (reasonable above 5 GeV/c)
+ ELSE
+ ACOF = SGTCOE (1,10)
+ BCOF = SGTCOE (2,10)
+ ENNE = SGTCOE (3,10)
+ CCOF = SGTCOE (4,10)
+ DCOF = SGTCOE (5,10)
+* | | | Compute the total cross section:
+ SHNCTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | | | Compute the elastic cross section:
+ SHNCEL = SKMPEL
+* | | | Compute the inelastic cross section:
+ SHNCIN = SHNCTT - SHNCEL
+* | | | Number of diagrams:
+ NDIAGR = 1
+ END IF
+* | | |
+* | | +-------------------------------------------------------------*
+* | | Now compute the chain end (anti)quark-(anti)diquark
+ IQFSC1 = 3
+ IQFSC2 = 0
+ IQBSC1 = 1 + KHELP
+ IQBSC2 = 2
+* | |
+* | +----------------------------------------------------------------*
+* | | K0's: (actually only K0bar)
+ ELSE
+ KHELP = KTARG / 8
+* | | +-------------------------------------------------------------*
+* | | | Proton target: (K0bar p)in supposed to be given by
+* | | | (K- p)in - Sig_diagr
+ IF ( KHELP .EQ. 0 ) THEN
+ SHNCIN = SKMPIN - SIGDIA
+* | | | Number of diagrams:
+ NDIAGR = 1
+* | | |
+* | | +-------------------------------------------------------------*
+* | | | Neutron target: (K0bar n)in supposed to be given by
+* | | | (K- n)in + Sig_diagr
+* | | | besides isospin consideration it is supposed
+* | | | that (K- n)el is almost equal to (K- p)el
+* | | | (reasonable above 5 GeV/c)
+ ELSE
+ ACOF = SGTCOE (1,10)
+ BCOF = SGTCOE (2,10)
+ ENNE = SGTCOE (3,10)
+ CCOF = SGTCOE (4,10)
+ DCOF = SGTCOE (5,10)
+* | | | Compute the total cross section:
+ SHNCTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | | | Compute the elastic cross section:
+ SHNCEL = SKMPEL
+* | | | Compute the inelastic cross section:
+ SHNCIN = SHNCTT - SHNCEL + SIGDIA
+* | | | Number of diagrams:
+ NDIAGR = 2
+ END IF
+* | | |
+* | | +-------------------------------------------------------------*
+* | | Now compute the chain end (anti)quark-(anti)diquark
+ IQFSC1 = 3
+ IQFSC2 = 0
+ IQBSC1 = 1
+ IQBSC2 = 1 + KHELP
+ END IF
+* | |
+* | +----------------------------------------------------------------*
+* | end Kaon's
+* +-------------------------------------------------------------------*
+* | Antinucleons:
+ ELSE IF ( IHLP (IP) .EQ. 4 .AND. IP .LE. 9 ) THEN
+* | For momenta between 3 and 5 GeV/c the use of tabulated data
+* | should be implemented!
+ ACOF = SGTCOE (1,15)
+ BCOF = SGTCOE (2,15)
+ ENNE = SGTCOE (3,15)
+ CCOF = SGTCOE (4,15)
+ DCOF = SGTCOE (5,15)
+* | Compute the pbar p total cross section:
+ SAPPTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ IF ( PLA .LT. FIVFIV ) THEN
+ JREAC = 26
+ ELSE
+ JREAC = 25
+ END IF
+ ACOF = SGTCOE (1,JREAC)
+ BCOF = SGTCOE (2,JREAC)
+ ENNE = SGTCOE (3,JREAC)
+ CCOF = SGTCOE (4,JREAC)
+ DCOF = SGTCOE (5,JREAC)
+* | Compute the pbar p elastic cross section:
+ SAPPEL = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | Compute the pbar p inelastic cross section:
+ SAPPIN = SAPPTT - SAPPEL
+ ACOF = SGTCOE (1,12)
+ BCOF = SGTCOE (2,12)
+ ENNE = SGTCOE (3,12)
+ CCOF = SGTCOE (4,12)
+ DCOF = SGTCOE (5,12)
+* | Compute the p p total cross section:
+ SPPTOT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+ ACOF = SGTCOE (1,23)
+ BCOF = SGTCOE (2,23)
+ ENNE = SGTCOE (3,23)
+ CCOF = SGTCOE (4,23)
+ DCOF = SGTCOE (5,23)
+* | Compute the p p elastic cross section:
+ SPPELA = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | Compute the K- p inelastic cross section:
+ SPPINE = SPPTOT - SPPELA
+ SIGDIA = ( SAPPIN - SPPINE ) / FIVFIV
+ KHELP = KTARG / 8
+* | +----------------------------------------------------------------*
+* | | Pbar:
+ IF ( ICHRGE (IP) .NE. 0 ) THEN
+ NDIAGR = 5 - KHELP
+* | | +-------------------------------------------------------------*
+* | | | Proton target:
+ IF ( KHELP .EQ. 0 ) THEN
+* | | | Number of diagrams:
+ SHNCIN = SAPPIN
+ PUUBAR = 0.8D+00
+* | | |
+* | | +-------------------------------------------------------------*
+* | | | Neutron target: it is supposed that (ap n)el is almost equal
+* | | | to (ap p)el (reasonable above 5 GeV/c)
+ ELSE
+ ACOF = SGTCOE (1,16)
+ BCOF = SGTCOE (2,16)
+ ENNE = SGTCOE (3,16)
+ CCOF = SGTCOE (4,16)
+ DCOF = SGTCOE (5,16)
+* | | | Compute the total cross section:
+ SHNCTT = ACOF + BCOF * PLA**ENNE + CCOF * ALGPLA**2
+ & + DCOF * ALGPLA
+* | | | Compute the elastic cross section:
+ SHNCEL = SAPPEL
+* | | | Compute the inelastic cross section:
+ SHNCIN = SHNCTT - SHNCEL
+ PUUBAR = HLFHLF
+ END IF
+* | | |
+* | | +-------------------------------------------------------------*
+* | | Now compute the chain end (anti)quark-(anti)diquark
+* | | there are different possibilities, make a random choiche:
+ IQFSC1 = -1
+ RNCHEN = DT_RNDM(PUUBAR)
+ IF ( RNCHEN .LT. PUUBAR ) THEN
+ IQFSC2 = -2
+ ELSE
+ IQFSC2 = -1
+ END IF
+ IQBSC1 = -IQFSC1 + KHELP
+ IQBSC2 = -IQFSC2
+* | |
+* | +----------------------------------------------------------------*
+* | | nbar:
+ ELSE
+ NDIAGR = 4 + KHELP
+* | | +-------------------------------------------------------------*
+* | | | Proton target: (nbar p)in supposed to be given by
+* | | | (pbar p)in - Sig_diagr
+ IF ( KHELP .EQ. 0 ) THEN
+ SHNCIN = SAPPIN - SIGDIA
+ PDDBAR = HLFHLF
+* | | |
+* | | +-------------------------------------------------------------*
+* | | | Neutron target: (nbar n)el is supposed to be equal to
+* | | | (pbar p)el (reasonable above 5 GeV/c)
+ ELSE
+* | | | Compute the total cross section:
+ SHNCTT = SAPPTT
+* | | | Compute the elastic cross section:
+ SHNCEL = SAPPEL
+* | | | Compute the inelastic cross section:
+ SHNCIN = SHNCTT - SHNCEL
+ PDDBAR = 0.8D+00
+ END IF
+* | | |
+* | | +-------------------------------------------------------------*
+* | | Now compute the chain end (anti)quark-(anti)diquark
+* | | there are different possibilities, make a random choiche:
+ IQFSC1 = -2
+ RNCHEN = DT_RNDM(RNCHEN)
+ IF ( RNCHEN .LT. PDDBAR ) THEN
+ IQFSC2 = -1
+ ELSE
+ IQFSC2 = -2
+ END IF
+ IQBSC1 = -IQFSC1 + KHELP - 1
+ IQBSC2 = -IQFSC2
+ END IF
+* | |
+* | +----------------------------------------------------------------*
+* |
+* +-------------------------------------------------------------------*
+* | Others: not yet implemented
+ ELSE
+ SIGDIA = ZERZER
+ SHNCIN = ONEONE
+ NDIAGR = 0
+ DT_PHNSCH = ZERZER
+ RETURN
+ END IF
+* | end others
+* +-------------------------------------------------------------------*
+ DT_PHNSCH = NDIAGR * SIGDIA / SHNCIN
+ IQECHC = IQECHR (IQFSC1) + IQECHR (IQFSC2) + IQECHR (IQBSC1)
+ & + IQECHR (IQBSC2)
+ IQBCHC = IQBCHR (IQFSC1) + IQBCHR (IQFSC2) + IQBCHR (IQBSC1)
+ & + IQBCHR (IQBSC2)
+ IQECHC = IQECHC / 3
+ IQBCHC = IQBCHC / 3
+ IQSCHC = IQSCHR (IQFSC1) + IQSCHR (IQFSC2) + IQSCHR (IQBSC1)
+ & + IQSCHR (IQBSC2)
+ IQSPRO = IQSCHR (MQUARK(1,IP)) + IQSCHR (MQUARK(2,IP))
+ & + IQSCHR (MQUARK(3,IP))
+* +-------------------------------------------------------------------*
+* | Consistency check:
+ IF ( DT_PHNSCH .LE. ZERZER .OR. DT_PHNSCH .GT. ONEONE ) THEN
+ WRITE (LUNOUT,*)' *** Phnsch,kp,ktarg,pla',
+ & DT_PHNSCH,KP,KTARG,PLA,' ****'
+ WRITE (LUNERR,*)' *** Phnsch,kp,ktarg,pla',
+ & DT_PHNSCH,KP,KTARG,PLA,' ****'
+ DT_PHNSCH = MAX ( DT_PHNSCH, ZERZER )
+ DT_PHNSCH = MIN ( DT_PHNSCH, ONEONE )
+ END IF
+* |
+* +-------------------------------------------------------------------*
+* +-------------------------------------------------------------------*
+* | Consistency check:
+ IF ( IQSPRO .NE. IQSCHC .OR. ICHRGE (IP) + ICHRGE (KTARG)
+ & .NE. IQECHC .OR. IIBAR (KP) + IIBAR (KTARG) .NE. IQBCHC) THEN
+ WRITE (LUNOUT,*)
+ &' *** Phnsch,iqspro,iqschc,ichrge,iqechc,ibar,iqbchc,ktarg',
+ & IQSPRO,IQSCHC,ICHRGE(IP),IQECHC,IIBAR(KP),IQBCHC,KTARG
+ WRITE (LUNERR,*)
+ &' *** Phnsch,iqspro,iqschc,ichrge,iqechc,ibar,iqbchc,ktarg',
+ & IQSPRO,IQSCHC,ICHRGE(IP),IQECHC,IIBAR(KP),IQBCHC,KTARG
+ END IF
+* |
+* +-------------------------------------------------------------------*
+* P_sch = 1 / [ ( 1 / P_sch (50) - 1 ) x sqrt(s/s(50)) + 1 ]
+ IF ( UMORAT .GT. ONEPLS )
+ & DT_PHNSCH = ONEONE / ( ( ONEONE / DT_PHNSCH
+ & - ONEONE ) * UMORAT + ONEONE )
+ RETURN
+*
+ ENTRY DT_SCHQUA ( JQFSC1, JQFSC2, JQBSC1, JQBSC2 )
+ DT_SCHQUA = ONEONE
+ JQFSC1 = IQFSC1
+ JQFSC2 = IQFSC2
+ JQBSC1 = IQBSC1
+ JQBSC2 = IQBSC2
+*=== End of function Phnsch ===========================================*
+ RETURN
+ END
+*
+*===respt==============================================================*
+*
+CDECK ID>, DT_RESPT
+ SUBROUTINE DT_RESPT
+
+************************************************************************
+* Check DTEVT1 for two-resonance systems and sample intrinsic p_t. *
+* This version dated 18.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY7=1.0D-7,TINY3=1.0D-3)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+* get index of first chain
+ DO 1 I=NPOINT(3),NHKK
+ IF (IDHKK(I).EQ.88888) THEN
+ NC = I
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+
+ 2 CONTINUE
+ IF ((IDHKK(NC).EQ.88888).AND.(IDHKK(NC+3).EQ.88888)) THEN
+C WRITE(LOUT,*)NC,NC+3,IDRES(NC),IDRES(NC+3)
+* skip VV-,SS- systems
+ IF ((IDCH(NC ).NE.1).AND.(IDCH(NC ).NE.8).AND.
+ & (IDCH(NC+3).NE.1).AND.(IDCH(NC+3).NE.8)) THEN
+* check if both "chains" are resonances
+ IF ((IDRES(NC).NE.0).AND.(IDRES(NC+3).NE.0)) THEN
+ CALL DT_SAPTRE(NC,NC+3)
+ ENDIF
+ ENDIF
+ ELSE
+ GOTO 3
+ ENDIF
+ NC = NC+6
+ GOTO 2
+
+ 3 CONTINUE
+
+ RETURN
+ END
+*
+*===evtres=============================================================*
+*
+CDECK ID>, DT_EVTRES
+ SUBROUTINE DT_EVTRES(IREJ)
+
+************************************************************************
+* This version dated 14.12.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY5=1.0D-5,TINY10=1.0D-10)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4),IFP(2),IFT(2)
+
+ IREJ = 0
+
+ DO 1 I=NPOINT(3),NHKK
+ IF (ABS(IDRES(I)).GE.100) THEN
+ AMMX = 0.0D0
+ DO 2 J=NPOINT(3),NHKK
+ IF (IDHKK(J).EQ.88888) THEN
+ IF (PHKK(5,J).GT.AMMX) THEN
+ AMMX = PHKK(5,J)
+ IMMX = J
+ ENDIF
+ ENDIF
+ 2 CONTINUE
+ IF (IDRES(IMMX).NE.0) THEN
+ IF (IOULEV(3).GT.0) THEN
+ WRITE(LOUT,'(1X,A)')
+ & 'EVTRES: no chain for correc. found'
+C GOTO 6
+ GOTO 9999
+ ELSE
+ GOTO 9999
+ ENDIF
+ ENDIF
+ IMO11 = JMOHKK(1,I)
+ IMO12 = JMOHKK(2,I)
+ IF (PHKK(3,IMO11).LT.0.0D0) THEN
+ IMO11 = JMOHKK(2,I)
+ IMO12 = JMOHKK(1,I)
+ ENDIF
+ IMO21 = JMOHKK(1,IMMX)
+ IMO22 = JMOHKK(2,IMMX)
+ IF (PHKK(3,IMO21).LT.0.0D0) THEN
+ IMO21 = JMOHKK(2,IMMX)
+ IMO22 = JMOHKK(1,IMMX)
+ ENDIF
+ AMCH1 = PHKK(5,I)
+ AMCH1N = AAM(IDXRES(I))
+
+ IFPR1 = IDHKK(IMO11)
+ IFPR2 = IDHKK(IMO21)
+ IFTA1 = IDHKK(IMO12)
+ IFTA2 = IDHKK(IMO22)
+ DO 4 J=1,4
+ PP1(J) = PHKK(J,IMO11)
+ PP2(J) = PHKK(J,IMO21)
+ PT1(J) = PHKK(J,IMO12)
+ PT2(J) = PHKK(J,IMO22)
+ 4 CONTINUE
+* store initial configuration for energy-momentum cons. check
+ IF (LEMCCK) CALL DT_EMC1(PP1,PP2,PT1,PT2,1,1,IREJ1)
+* correct kinematics of second chain
+ CALL DT_CHKINE(PP1,IFPR1,PP2,IFPR2,PT1,IFTA1,PT2,IFTA2,
+ & AMCH1,AMCH1N,AMCH2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+* check now this chain for resonance mass
+ IFP(1) = IDT_IPDG2B(IFPR2,1,2)
+ IFP(2) = 0
+ IF (ABS(IFPR2).GE.1000) IFP(2) = IDT_IPDG2B(IFPR2,2,2)
+ IFT(1) = IDT_IPDG2B(IFTA2,1,2)
+ IFT(2) = 0
+ IF (ABS(IFTA2).GE.1000) IFT(2) = IDT_IPDG2B(IFTA2,2,2)
+ IDCH2 = 2
+ IF ((IFP(2).EQ.0).AND.(IFT(2).EQ.0)) IDCH2 = 1
+ IF ((IFP(2).NE.0).AND.(IFT(2).NE.0)) IDCH2 = 3
+ CALL DT_CH2RES(IFP(1),IFP(2),IFT(1),IFT(2),IDR2,IDXR2,
+ & AMCH2,AMCH2N,IDCH2,IREJ1)
+ IF ((IREJ1.NE.0).OR.(IDR2.NE.0)) THEN
+ IF (IOULEV(1).GT.0)
+ & WRITE(LOUT,*) ' correction for resonance not poss.'
+**sr test
+C GOTO 1
+C GOTO 9999
+**
+ ENDIF
+* store final configuration for energy-momentum cons. check
+ IF (LEMCCK) THEN
+ CALL DT_EMC1(PP1,PP2,PT1,PT2,-2,1,IREJ1)
+ CALL DT_EMC1(PP1,PP2,PT1,PT2,3,1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+ DO 5 J=1,4
+ PHKK(J,IMO11) = PP1(J)
+ PHKK(J,IMO21) = PP2(J)
+ PHKK(J,IMO12) = PT1(J)
+ PHKK(J,IMO22) = PT2(J)
+ 5 CONTINUE
+* correct entries of chains
+ DO 3 K=1,4
+ PHKK(K,I) = PHKK(K,IMO11)+PHKK(K,IMO12)
+ PHKK(K,IMMX) = PHKK(K,IMO21)+PHKK(K,IMO22)
+ 3 CONTINUE
+ AM1 = PHKK(4,I)**2-PHKK(1,I)**2-PHKK(2,I)**2-PHKK(3,I)**2
+ AM2 = PHKK(4,IMMX)**2-PHKK(1,IMMX)**2-PHKK(2,IMMX)**2-
+ & PHKK(3,IMMX)**2
+* ?? the following should now be obsolete
+**sr test
+C IF ((AM1.LT.0.0D0).OR.(AM2.LT.1.0D0)) THEN
+ IF ((AM1.LT.0.0D0).OR.(AM2.LT.0.0D0)) THEN
+**
+ WRITE(LOUT,'(1X,A,4G10.3)')
+ & 'EVTRES: inonsistent mass-corr.',AM1,AM2
+C GOTO 9999
+ GOTO 1
+ ENDIF
+ PHKK(5,I) = SQRT(AM1)
+ PHKK(5,IMMX) = SQRT(AM2)
+ IDRES(I) = IDRES(I)/100
+ IF ((ABS(PHKK(5,I)-AMCH1N).GT.TINY5).OR.
+ & (ABS(PHKK(5,IMMX)-AMCH2).GT.TINY5)) THEN
+ WRITE(LOUT,'(1X,A,4G10.3)')
+ & 'EVTRES: inconsistent chain-masses',
+ & PHKK(5,I),AMCH1N,PHKK(5,IMMX),AMCH2
+ GOTO 9999
+ ENDIF
+ ENDIF
+ 1 CONTINUE
+ 6 CONTINUE
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===getspt=============================================================*
+*
+CDECK ID>, DT_GETSPT
+ SUBROUTINE DT_GETSPT(PP1I,IFPR1,IFP1,PP2I,IFPR2,IFP2,
+ & PT1I,IFTA1,IFT1,PT2I,IFTA2,IFT2,
+ & AM1,IDCH1,AM2,IDCH2,IDCHAI,IREJ)
+
+************************************************************************
+* This version dated 12.12.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY5=1.0D-5,TINY3=1.0D-3,ZERO=0.0D0)
+
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+
+ DIMENSION PP1(4),PP1I(4),PP2(4),PP2I(4),PT1(4),PT1I(4),
+ & PT2(4),PT2I(4),P1(4),P2(4),
+ & IFP1(2),IFP2(2),IFT1(2),IFT2(2),
+ & PTOTI(4),PTOTF(4),DIFF(4)
+
+ IC = 0
+ IREJ = 0
+C B33P = 4.0D0
+C B33T = 4.0D0
+C IF ((IDCHAI.EQ.6).OR.(IDCHAI.EQ.7).OR.(IDCHAI.EQ.8)) B33P = 2.0D0
+C IF ((IDCHAI.EQ.4).OR.(IDCHAI.EQ.5).OR.(IDCHAI.EQ.8)) B33T = 2.0D0
+ REDU = 1.0D0
+C B33P = 3.5D0
+C B33T = 3.5D0
+ B33P = 4.0D0
+ B33T = 4.0D0
+ IF (IDIFF.NE.0) THEN
+ B33P = 16.0D0
+ B33T = 16.0D0
+ ENDIF
+
+ DO 1 I=1,4
+ PTOTI(I) = PP1I(I)+PP2I(I)+PT1I(I)+PT2I(I)
+ PP1(I) = PP1I(I)
+ PP2(I) = PP2I(I)
+ PT1(I) = PT1I(I)
+ PT2(I) = PT2I(I)
+ 1 CONTINUE
+* get initial chain masses
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1 = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2 = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1.LT.0.0D0).OR.(AM2.LT.0.0D0)) THEN
+ IF (IOULEV(1).GT.0)
+ & WRITE(LOUT,'(1X,A,2G10.3)')'GETSPT: too small chain masses 1',
+ & AM1,AM2
+ GOTO 9999
+ ENDIF
+ AM1 = SQRT(AM1)
+ AM2 = SQRT(AM2)
+ AM1N = ZERO
+ AM2N = ZERO
+
+ MODE = 0
+C IF ((AM1.GE.3.0D0).AND.(AM2.GE.3.0D0)) THEN
+C MODE = 0
+C ELSE
+C MODE = 1
+C IF (AM1.LT.0.6) THEN
+C B33P = 10.0D0
+C ELSEIF ((AM1.GE.1.2).AND.(AM1.LT.3.0D0)) THEN
+CC B33P = 4.0D0
+C ENDIF
+C IF (AM2.LT.0.6) THEN
+C B33T = 10.0D0
+C ELSEIF ((AM2.GE.1.2).AND.(AM2.LT.3.0D0)) THEN
+CC B33T = 4.0D0
+C ENDIF
+C ENDIF
+
+* check chain masses for very low mass chains
+C CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),IDUM,IDUM,
+C & AM1,DUM,-IDCH1,IREJ1)
+C CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),IDUM,IDUM,
+C & AM2,DUM,-IDCH2,IREJ2)
+C IF ((IREJ1.NE.0).OR.(IREJ2.NE.0)) THEN
+C B33P = 20.0D0
+C B33T = 20.0D0
+C ENDIF
+
+ JMSHL = IMSHL
+
+ 2 CONTINUE
+ IC = IC+1
+ IF (MOD(IC,15).EQ.0) B33P = 2.0D0*B33P
+ IF (MOD(IC,15).EQ.0) B33T = 2.0D0*B33T
+ IF (MOD(IC,18).EQ.0) REDU = 0.0D0
+C IF (MOD(IC,19).EQ.0) JMSHL = 0
+ IF (MOD(IC,20).EQ.0) GOTO 7
+C WRITE(LOUT,'(1X,A)') 'GETSPT: rejection '
+C RETURN
+C GOTO 9999
+C ENDIF
+
+* get transverse momentum
+ IF (LINTPT) THEN
+ ES = -2.0D0/(B33P**2)
+ & *LOG(ABS(DT_RNDM(AM1)*DT_RNDM(AM2))+TINY10)
+ HPSP = SQRT(ES*ES+2.0D0*ES*0.94D0)
+ HPSP = HPSP*REDU
+ ES = -2.0D0/(B33T**2)
+ & *LOG(ABS(DT_RNDM(AM1)*DT_RNDM(AM2))+TINY10)
+ HPST = SQRT(ES*ES+2.0D0*ES*0.94D0)
+ HPST = HPST*REDU
+ ELSE
+ HPSP = ZERO
+ HPST = ZERO
+ ENDIF
+ CALL DT_DSFECF(SFE1,CFE1)
+ CALL DT_DSFECF(SFE2,CFE2)
+ IF (MODE.EQ.0) THEN
+ PP1(1) = PP1I(1)+HPSP*CFE1
+ PP1(2) = PP1I(2)+HPSP*SFE1
+ PP2(1) = PP2I(1)-HPSP*CFE1
+ PP2(2) = PP2I(2)-HPSP*SFE1
+ PT1(1) = PT1I(1)+HPST*CFE2
+ PT1(2) = PT1I(2)+HPST*SFE2
+ PT2(1) = PT2I(1)-HPST*CFE2
+ PT2(2) = PT2I(2)-HPST*SFE2
+ ELSE
+ PP1(1) = PP1I(1)+HPSP*CFE1
+ PP1(2) = PP1I(2)+HPSP*SFE1
+ PT1(1) = PT1I(1)-HPSP*CFE1
+ PT1(2) = PT1I(2)-HPSP*SFE1
+ PP2(1) = PP2I(1)+HPST*CFE2
+ PP2(2) = PP2I(2)+HPST*SFE2
+ PT2(1) = PT2I(1)-HPST*CFE2
+ PT2(2) = PT2I(2)-HPST*SFE2
+ ENDIF
+
+* put partons on mass shell
+ XMP1 = 0.0D0
+ XMT1 = 0.0D0
+ IF (JMSHL.EQ.1) THEN
+
+ XMP1 = PYMASS(IFPR1)
+ XMT1 = PYMASS(IFTA1)
+
+ ENDIF
+ CALL DT_MASHEL(PP1,PT1,XMP1,XMT1,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 2
+ DO 3 I=1,4
+ PTOTF(I) = P1(I)+P2(I)
+ PP1(I) = P1(I)
+ PT1(I) = P2(I)
+ 3 CONTINUE
+ XMP2 = 0.0D0
+ XMT2 = 0.0D0
+ IF (JMSHL.EQ.1) THEN
+
+ XMP2 = PYMASS(IFPR2)
+ XMT2 = PYMASS(IFTA2)
+
+ ENDIF
+ CALL DT_MASHEL(PP2,PT2,XMP2,XMT2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 2
+ DO 4 I=1,4
+ PTOTF(I) = PTOTF(I)+P1(I)+P2(I)
+ PP2(I) = P1(I)
+ PT2(I) = P2(I)
+ 4 CONTINUE
+
+* check consistency
+ DO 5 I=1,4
+ DIFF(I) = PTOTI(I)-PTOTF(I)
+ 5 CONTINUE
+ IF ((ABS(DIFF(1)).GT.TINY5).OR.(ABS(DIFF(2)).GT.TINY5).OR.
+ & (ABS(DIFF(3)).GT.TINY5).OR.(ABS(DIFF(4)).GT.TINY5)) THEN
+ WRITE(LOUT,'(1X,A,4G10.3)') 'GETSPT: inconsistencies ',DIFF
+ GOTO 9999
+ ENDIF
+ PTOTP1 = SQRT(PP1(1)**2+PP1(2)**2+PP1(3)**2)
+ AMP1 = SQRT(ABS( (PP1(4)-PTOTP1)*(PP1(4)+PTOTP1) ))
+ PTOTP2 = SQRT(PP2(1)**2+PP2(2)**2+PP2(3)**2)
+ AMP2 = SQRT(ABS( (PP2(4)-PTOTP2)*(PP2(4)+PTOTP2) ))
+ PTOTT1 = SQRT(PT1(1)**2+PT1(2)**2+PT1(3)**2)
+ AMT1 = SQRT(ABS( (PT1(4)-PTOTT1)*(PT1(4)+PTOTT1) ))
+ PTOTT2 = SQRT(PT2(1)**2+PT2(2)**2+PT2(3)**2)
+ AMT2 = SQRT(ABS( (PT2(4)-PTOTT2)*(PT2(4)+PTOTT2) ))
+ IF ((ABS(AMP1-XMP1).GT.TINY3).OR.(ABS(AMP2-XMP2).GT.TINY3).OR.
+ & (ABS(AMT1-XMT1).GT.TINY3).OR.(ABS(AMT2-XMT2).GT.TINY3))
+ & THEN
+ WRITE(LOUT,'(1X,A,2(4G10.3,/))')
+ & 'GETSPT: inconsistent masses',
+ & AMP1,XMP1,AMP2,XMP2,AMT1,XMT1,AMT2,XMT2
+* sr 22.11.00: commented. It should only have inconsistent masses for
+* ultrahigh energies due to rounding problems
+C GOTO 9999
+ ENDIF
+
+* get chain masses
+ PTOCH = SQRT((PP1(1)+PT1(1))**2+(PP1(2)+PT1(2))**2
+ & +(PP1(3)+PT1(3))**2)
+ ECH = PP1(4)+PT1(4)
+ AM1N = (ECH+PTOCH)*(ECH-PTOCH)
+ PTOCH = SQRT((PP2(1)+PT2(1))**2+(PP2(2)+PT2(2))**2
+ & +(PP2(3)+PT2(3))**2)
+ ECH = PP2(4)+PT2(4)
+ AM2N = (ECH+PTOCH)*(ECH-PTOCH)
+ IF ((AM1N.LT.0.0D0).OR.(AM2N.LT.0.0D0)) THEN
+ IF (IOULEV(1).GT.0)
+ & WRITE(LOUT,'(1X,A,2G10.3)')'GETSPT: too small chain masses 2',
+ & AM1N,AM2N
+ GOTO 2
+ ENDIF
+ AM1N = SQRT(AM1N)
+ AM2N = SQRT(AM2N)
+
+* check chain masses for very low mass chains
+ CALL DT_CH2RES(IFP1(1),IFP1(2),IFT1(1),IFT1(2),IDUM,IDUM,
+ & AM1N,DUM,-IDCH1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 2
+ CALL DT_CH2RES(IFP2(1),IFP2(2),IFT2(1),IFT2(2),IDUM,IDUM,
+ & AM2N,DUM,-IDCH2,IREJ2)
+ IF (IREJ2.NE.0) GOTO 2
+
+ 7 CONTINUE
+ IF (AM1N.GT.ZERO) THEN
+ AM1 = AM1N
+ AM2 = AM2N
+ ENDIF
+ DO 6 I=1,4
+ PP1I(I) = PP1(I)
+ PP2I(I) = PP2(I)
+ PT1I(I) = PT1(I)
+ PT2I(I) = PT2(I)
+ 6 CONTINUE
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===saptre=============================================================*
+*
+CDECK ID>, DT_SAPTRE
+ SUBROUTINE DT_SAPTRE(IDX1,IDX2)
+
+************************************************************************
+* p-t sampling for two-resonance systems. ("BAMJET-like" method) *
+* IDX1,IDX2 indices of resonances ("chains") in DTEVT1 *
+* Adopted from the original SAPTRE written by J. Ranft. *
+* This version dated 18.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY7=1.0D-7,TINY3=1.0D-3)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ DIMENSION PA1(4),PA2(4),P1(4),P2(4)
+
+ DATA B3 /4.0D0/
+
+ ESMAX1 = PHKK(4,IDX1)-PHKK(5,IDX1)
+ ESMAX2 = PHKK(4,IDX2)-PHKK(5,IDX2)
+ ESMAX = MIN(ESMAX1,ESMAX2)
+ IF (ESMAX.LE.0.05D0) RETURN
+
+ HMA = PHKK(5,IDX1)
+ DO 1 K=1,4
+ PA1(K) = PHKK(K,IDX1)
+ PA2(K) = PHKK(K,IDX2)
+ 1 CONTINUE
+
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PA1(1),PA1(2),PA1(3),PA1(4),1,IDUM,IDUM)
+ CALL DT_EVTEMC(PA2(1),PA2(2),PA2(3),PA2(4),2,IDUM,IDUM)
+ ENDIF
+
+ EXEB = 0.0D0
+ IF (B3*ESMAX.LE.60.0D0) EXEB = EXP(-B3*ESMAX)
+ BEXP = HMA*(1.0D0-EXEB)/B3
+ AXEXP = (1.0D0-(B3*ESMAX-1.0D0)*EXEB)/B3**2
+ WA = AXEXP/(BEXP+AXEXP)
+ XAB = DT_RNDM(WA)
+ 10 CONTINUE
+* ES is the transverse kinetic energy
+ IF (XAB.LT.WA)THEN
+ X = DT_RNDM(WA)
+ Y = DT_RNDM(WA)
+ ES = -2.0D0/(B3**2)*LOG(X*Y+TINY7)
+ ELSE
+ X = DT_RNDM(Y)
+ ES = ABS(-LOG(X+TINY7)/B3)
+ ENDIF
+ IF (ES.GT.ESMAX) GOTO 10
+ ES = ES+HMA
+* transverse momentum
+ HPS = SQRT((ES-HMA)*(ES+HMA))
+
+ CALL DT_DSFECF(SFE,CFE)
+ HPX = HPS*CFE
+ HPY = HPS*SFE
+ PZ1NSQ = PA1(3)**2-HPS**2-2.0D0*PA1(1)*HPX-2.0D0*PA1(2)*HPY
+ PZ2NSQ = PA2(3)**2-HPS**2+2.0D0*PA2(1)*HPX+2.0D0*PA2(2)*HPY
+ IF ((PZ1NSQ.LT.TINY3).OR.(PZ2NSQ.LT.TINY3)) RETURN
+
+C PA1(3) = SIGN(SQRT(PZ1NSQ),PA1(3))
+C PA2(3) = SIGN(SQRT(PZ2NSQ),PA2(3))
+ PA1(1) = PA1(1)+HPX
+ PA1(2) = PA1(2)+HPY
+ PA2(1) = PA2(1)-HPX
+ PA2(2) = PA2(2)-HPY
+
+* put resonances on mass-shell again
+ XM1 = PHKK(5,IDX1)
+ XM2 = PHKK(5,IDX2)
+ CALL DT_MASHEL(PA1,PA2,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) RETURN
+
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(-P1(1),-P1(2),-P1(3),-P1(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(-P2(1),-P2(2),-P2(3),-P2(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,3,12,IREJ1)
+ IF (IREJ1.NE.0) RETURN
+ ENDIF
+
+ DO 2 K=1,4
+ PHKK(K,IDX1) = P1(K)
+ PHKK(K,IDX2) = P2(K)
+ 2 CONTINUE
+
+ RETURN
+ END
+*
+*===cronin=============================================================*
+*
+CDECK ID>, DT_CRONIN
+ SUBROUTINE DT_CRONIN(INCL)
+
+************************************************************************
+* Cronin-Effect. Multiple scattering of partons at chain ends. *
+* INCL = 1 multiple sc. in projectile *
+* = 2 multiple sc. in target *
+* This version dated 05.01.96 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY3=1.0D-3)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+
+ DIMENSION R(3),PIN(4),POUT(4),DEV(4)
+
+ DO 1 K=1,4
+ DEV(K) = ZERO
+ 1 CONTINUE
+
+ DO 2 I=NPOINT(2),NHKK
+ IF (ISTHKK(I).LT.0) THEN
+* get z-position of the chain
+ R(1) = VHKK(1,I)*1.0D12
+ IF (INCL.EQ.2) R(1) = VHKK(1,I)*1.0D12-BIMPAC
+ R(2) = VHKK(2,I)*1.0D12
+ IDXNU = JMOHKK(1,I)
+ IF ( (INCL.EQ.1).AND.(ISTHKK(IDXNU).EQ.10) )
+ & IDXNU = JMOHKK(1,I-1)
+ IF ( (INCL.EQ.2).AND.(ISTHKK(IDXNU).EQ. 9) )
+ & IDXNU = JMOHKK(1,I+1)
+ R(3) = VHKK(3,IDXNU)*1.0D12
+* position of target parton the chain is connected to
+ DO 3 K=1,4
+ PIN(K) = PHKK(K,I)
+ 3 CONTINUE
+* multiple scattering of parton with DTEVT1-index I
+ CALL DT_CROMSC(PIN,R,POUT,INCL)
+**testprint
+C IF (NEVHKK.EQ.5) THEN
+C AMIN = PIN(4)**2-PIN(1)**2-PIN(2)**2-PIN(3)**2
+C AMOU = POUT(4)**2-POUT(1)**2-POUT(2)**2-POUT(3)**2
+C AMIN = SIGN(SQRT(ABS(AMIN)),AMIN)
+C AMOU = SIGN(SQRT(ABS(AMOU)),AMOU)
+C WRITE(6,'(A,I4,2E15.5)')'I,AMIN,AMOU: ',I,AMIN,AMOU
+C WRITE(6,'(A,4E15.5)')'PIN: ',PIN
+C WRITE(6,'(A,4E15.5)')'POUT: ',POUT
+C ENDIF
+**
+* increase accumulator by energy-momentum difference
+ DO 4 K=1,4
+ DEV(K) = DEV(K)+POUT(K)-PIN(K)
+ PHKK(K,I) = POUT(K)
+ 4 CONTINUE
+ PHKK(5,I) = SQRT(ABS(PHKK(4,I)**2-PHKK(1,I)**2-
+ & PHKK(2,I)**2-PHKK(3,I)**2))
+ ENDIF
+ 2 CONTINUE
+
+* dump accumulator to momenta of valence partons
+ NVAL = 0
+ ETOT = 0.0D0
+ DO 5 I=NPOINT(2),NHKK
+ IF ((ISTHKK(I).EQ.-21).OR.(ISTHKK(I).EQ.-22)) THEN
+ NVAL = NVAL+1
+ ETOT = ETOT+PHKK(4,I)
+ ENDIF
+ 5 CONTINUE
+C WRITE(LOUT,1000) NVAL,(DEV(K)/DBLE(NVAL),K=1,4)
+ 1000 FORMAT(1X,'CRONIN : number of val. partons ',I4,/,
+ & 9X,4E12.4)
+ DO 6 I=NPOINT(2),NHKK
+ IF ((ISTHKK(I).EQ.-21).OR.(ISTHKK(I).EQ.-22)) THEN
+ E = PHKK(4,I)
+ DO 7 K=1,4
+C PHKK(K,I) = PHKK(K,I)-DEV(K)/DBLE(NVAL)
+ PHKK(K,I) = PHKK(K,I)-DEV(K)*E/ETOT
+ 7 CONTINUE
+ PHKK(5,I) = SQRT(ABS(PHKK(4,I)**2-PHKK(1,I)**2-
+ & PHKK(2,I)**2-PHKK(3,I)**2))
+ ENDIF
+ 6 CONTINUE
+
+ RETURN
+ END
+*
+*===cromsc=============================================================*
+*
+CDECK ID>, DT_CROMSC
+ SUBROUTINE DT_CROMSC(PIN,R,POUT,INCL)
+
+************************************************************************
+* Cronin-Effect. Multiple scattering of one parton passing through *
+* nuclear matter. *
+* PIN(4) input 4-momentum of parton *
+* POUT(4) 4-momentum of parton after mult. scatt. *
+* R(3) spatial position of parton in target nucleus *
+* INCL = 1 multiple sc. in projectile *
+* = 2 multiple sc. in target *
+* This is a revised version of the original version written by J. Ranft*
+* This version dated 17.01.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY3=1.0D-3)
+
+ LOGICAL LSTART
+
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ DIMENSION PIN(4),POUT(4),R(3)
+
+ DATA LSTART /.TRUE./
+
+ IRCRON(1) = IRCRON(1)+1
+
+ IF (LSTART) THEN
+ WRITE(LOUT,1000) CRONCO
+ 1000 FORMAT(/,1X,'CROMSC: multiple scattering of chain ends',
+ & ' treated',/,10X,'with parameter CRONCO = ',F5.2)
+ LSTART = .FALSE.
+ ENDIF
+
+ NCBACK = 0
+ RNCL = RPROJ
+ IF (INCL.EQ.2) RNCL = RTARG
+
+* Lorentz-transformation into Lab.
+ MODE = -(INCL+1)
+ CALL DT_LTNUC(PIN(3),PIN(4),PZ,PE,MODE)
+
+ PTOT = SQRT(PIN(1)**2+PIN(2)**2+PZ**2)
+ IF (PTOT.LE.8.0D0) GOTO 9997
+
+* direction cosines of parton before mult. scattering
+ COSX = PIN(1)/PTOT
+ COSY = PIN(2)/PTOT
+ COSZ = PZ/PTOT
+
+ RTESQ = R(1)**2+R(2)**2+R(3)**2-RNCL**2
+ IF (RTESQ.GE.-TINY3) GOTO 9999
+
+* calculate distance (DIST) from R to surface of nucleus (radius RNCL)
+* in the direction of particle motion
+
+ A = COSX*R(1)+COSY*R(2)+COSZ*R(3)
+ TMP = A**2-RTESQ
+ IF (TMP.LT.ZERO) GOTO 9998
+ DIST = -A+SQRT(TMP)
+
+* multiple scattering angle
+ THETO = CRONCO*SQRT(DIST)/PTOT
+ IF (THETO.GT.0.1D0) THETO=0.1D0
+
+ 1 CONTINUE
+* Gaussian sampling of spatial angle
+ CALL DT_RANNOR(R1,R2)
+ THETA = ABS(R1*THETO)
+ IF (THETA.GT.0.3D0) GOTO 9997
+ CALL DT_DSFECF(SFE,CFE)
+ COSTH = COS(THETA)
+ SINTH = SIN(THETA)
+
+* new direction cosines
+ CALL DT_MYTRAN(1,COSX,COSY,COSZ,COSTH,SINTH,SFE,CFE,
+ & COSXN,COSYN,COSZN)
+
+ POUT(1) = COSXN*PTOT
+ POUT(2) = COSYN*PTOT
+ PZ = COSZN*PTOT
+* Lorentz-transformation into nucl.-nucl. cms
+ MODE = INCL+1
+ CALL DT_LTNUC(PZ,PE,POUT(3),POUT(4),MODE)
+
+C IF (ABS(PIN(4)-POUT(4)).GT.0.2D0) THEN
+C IF ( (ABS(PIN(4)-POUT(4))/PIN(4)).GT.0.1D0 ) THEN
+ IF ( (ABS(PIN(4)-POUT(4))/PIN(4)).GT.0.05D0 ) THEN
+ THETO = THETO/2.0D0
+ NCBACK = NCBACK+1
+ IF (MOD(NCBACK,200).EQ.0) THEN
+ WRITE(LOUT,1001) THETO,PIN,POUT
+ 1001 FORMAT(1X,'CROMSC: inconsistent scattering angle ',
+ & E12.4,/,1X,' PIN :',4E12.4,/,
+ & 1X,' POUT:',4E12.4)
+ GOTO 9997
+ ENDIF
+ GOTO 1
+ ENDIF
+
+ RETURN
+
+ 9997 IRCRON(2) = IRCRON(2)+1
+ GOTO 9999
+ 9998 IRCRON(3) = IRCRON(3)+1
+
+ 9999 CONTINUE
+ DO 100 K=1,4
+ POUT(K) = PIN(K)
+ 100 CONTINUE
+ RETURN
+ END
+*
+*===com2sr=============================================================*
+*
+CDECK ID>, DT_COM2CR
+ SUBROUTINE DT_COM2CR
+
+************************************************************************
+* COMbine q-aq chains to Color Ropes (qq-aqaq). *
+* CUTOF parameter determining minimum number of not *
+* combined q-aq chains *
+* This subroutine replaces KKEVCC etc. *
+* This version dated 11.01.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ DIMENSION IDXQA(248),IDXAQ(248)
+
+ ICCHAI(1,9) = ICCHAI(1,9)+1
+ NQA = 0
+ NAQ = 0
+* scan DTEVT1 for q-aq, aq-q chains
+ DO 10 I=NPOINT(3),NHKK
+* skip "chains" which are resonances
+ IF ((IDHKK(I).EQ.88888).AND.(IDRES(I).EQ.0)) THEN
+ MO1 = JMOHKK(1,I)
+ MO2 = JMOHKK(2,I)
+ IF ((ABS(IDHKK(MO1)).LE.6).AND.(ABS(IDHKK(MO2)).LE.6)) THEN
+* q-aq, aq-q chain found, keep index
+ IF (IDHKK(MO1).GT.0) THEN
+ NQA = NQA+1
+ IDXQA(NQA) = I
+ ELSE
+ NAQ = NAQ+1
+ IDXAQ(NAQ) = I
+ ENDIF
+ ENDIF
+ ENDIF
+ 10 CONTINUE
+
+* minimum number of q-aq chains requested for the same projectile/
+* target
+ NCHMIN = IDT_NPOISS(CUTOF)
+
+* combine q-aq chains of the same projectile
+ CALL DT_SCN4CR(NQA,IDXQA,NCHMIN,1)
+* combine q-aq chains of the same target
+ CALL DT_SCN4CR(NQA,IDXQA,NCHMIN,2)
+* combine aq-q chains of the same projectile
+ CALL DT_SCN4CR(NAQ,IDXAQ,NCHMIN,1)
+* combine aq-q chains of the same target
+ CALL DT_SCN4CR(NAQ,IDXAQ,NCHMIN,2)
+
+ RETURN
+ END
+*
+*===scn4cr=============================================================*
+*
+CDECK ID>, DT_SCN4CR
+ SUBROUTINE DT_SCN4CR(NCH,IDXCH,NCHMIN,MODE)
+
+************************************************************************
+* SCan q-aq chains for Color Ropes. *
+* This version dated 11.01.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ DIMENSION IDXCH(248),IDXJN(248)
+
+ DO 1 I=1,NCH
+ IF (IDXCH(I).GT.0) THEN
+ NJOIN = 1
+ IDXMO = JMOHKK(1,JMOHKK(1,JMOHKK(MODE,IDXCH(I))))
+ IDXJN(NJOIN) = I
+ IF (I.LT.NCH) THEN
+ DO 2 J=I+1,NCH
+ IF (IDXCH(J).GT.0) THEN
+ IDXMO1 = JMOHKK(1,JMOHKK(1,JMOHKK(MODE,IDXCH(J))))
+ IF (IDXMO.EQ.IDXMO1) THEN
+ NJOIN = NJOIN+1
+ IDXJN(NJOIN) = J
+ ENDIF
+ ENDIF
+ 2 CONTINUE
+ ENDIF
+ IF (NJOIN.GE.NCHMIN+2) THEN
+ NJ = INT(DBLE(NJOIN-NCHMIN)/2.0D0)
+ DO 3 J=1,2*NJ,2
+ CALL DT_JOIN(IDXCH(IDXJN(J)),IDXCH(IDXJN(J+1)),IREJ1)
+ IF (IREJ1.NE.0) GOTO 3
+ IDXCH(IDXJN(J)) = 0
+ IDXCH(IDXJN(J+1)) = 0
+ 3 CONTINUE
+ ENDIF
+ ENDIF
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===join===============================================================*
+*
+CDECK ID>, DT_JOIN
+ SUBROUTINE DT_JOIN(IDX1,IDX2,IREJ)
+
+************************************************************************
+* This subroutine joins two q-aq chains to one qq-aqaq chain. *
+* IDX1, IDX2 DTEVT1 indices of chains to be joined *
+* This version dated 11.01.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+
+ DIMENSION MO(2,2),ID(2,2),IDX(2),PCH(4),PP(4),PT(4),P1(4),P2(4)
+
+ IREJ = 0
+
+ IDX(1) = IDX1
+ IDX(2) = IDX2
+ DO 1 I=1,2
+ DO 2 J=1,2
+ MO(I,J) = JMOHKK(J,IDX(I))
+ ID(I,J) = IDT_IPDG2B(IDHKK(MO(I,J)),1,2)
+ 2 CONTINUE
+ 1 CONTINUE
+
+* check consistency
+ IF ((ABS(ID(1,1)).GT.6).OR.(ABS(ID(1,2)).GT.6).OR.
+ & (ABS(ID(2,1)).GT.6).OR.(ABS(ID(2,2)).GT.6).OR.
+ & ((ID(1,1)*ID(2,1)).LT.0).OR.
+ & ((ID(1,2)*ID(2,2)).LT.0)) THEN
+ WRITE(LOUT,1000) IDX(1),MO(1,1),MO(1,2),IDX(2),MO(2,1),
+ & MO(2,2)
+ 1000 FORMAT(1X,'JOIN: incons. chain system! chain ',I4,':',
+ & 2I5,' chain ',I4,':',2I5)
+ ENDIF
+
+* join chains
+ DO 3 K=1,4
+ PP(K) = PHKK(K,MO(1,1))+PHKK(K,MO(2,1))
+ PT(K) = PHKK(K,MO(1,2))+PHKK(K,MO(2,2))
+ 3 CONTINUE
+ IF1 = IDT_IB2PDG(ID(1,1),ID(2,1),2)
+ IF2 = IDT_IB2PDG(ID(1,2),ID(2,2),2)
+ IST1 = ISTHKK(MO(1,1))
+ IST2 = ISTHKK(MO(1,2))
+
+* put partons again on mass shell
+ XM1 = 0.0D0
+ XM2 = 0.0D0
+ IF (IMSHL.EQ.1) THEN
+
+ XM1 = PYMASS(IF1)
+ XM2 = PYMASS(IF2)
+
+ ENDIF
+ CALL DT_MASHEL(PP,PT,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 4 I=1,4
+ PP(I) = P1(I)
+ PT(I) = P2(I)
+ 4 CONTINUE
+
+* store new partons in DTEVT1
+ CALL DT_EVTPUT(IST1,IF1,MO(1,1),MO(2,1),PP(1),PP(2),PP(3),PP(4),
+ & 0,0,0)
+ CALL DT_EVTPUT(IST2,IF2,MO(1,2),MO(2,2),PT(1),PT(2),PT(3),PT(4),
+ & 0,0,0)
+ DO 5 K=1,4
+ PCH(K) = PP(K)+PT(K)
+ 5 CONTINUE
+
+* check new chain for lower mass limit
+ IF ((IRESCO.EQ.1).OR.(IFRAG(1).EQ.1)) THEN
+ AMCH = SQRT(ABS(PCH(4)**2-PCH(1)**2-PCH(2)**2-PCH(3)**2))
+ CALL DT_CH2RES(ID(1,1),ID(2,1),ID(1,2),ID(2,2),IDUM,IDUM,
+ & AMCH,AMCHN,3,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ NHKK = NHKK-2
+ GOTO 9999
+ ENDIF
+ ENDIF
+
+ ICCHAI(2,9) = ICCHAI(2,9)+1
+* store new chain in DTEVT1
+ KCH = 191
+ CALL DT_EVTPUT(KCH,88888,-2,-1,PCH(1),PCH(2),PCH(3),PCH(4),0,0,9)
+ IDHKK(IDX(1)) = 22222
+ IDHKK(IDX(2)) = 22222
+* special treatment for space-time coordinates
+ DO 6 K=1,4
+ VHKK(K,NHKK) = (VHKK(K,IDX(1))+VHKK(K,IDX(2)))/2.0D0
+ WHKK(K,NHKK) = (WHKK(K,IDX(1))+WHKK(K,IDX(2)))/2.0D0
+ 6 CONTINUE
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===xsglau=============================================================*
+*
+CDECK ID>, DT_XSGLAU
+ SUBROUTINE DT_XSGLAU(NA,NB,JJPROJ,XI,Q2I,ECMI,IE,IQ,NIDX)
+
+************************************************************************
+* Total, elastic, quasi-elastic, inelastic cross sections according to *
+* Glauber's approach. *
+* NA / NB mass numbers of proj./target nuclei *
+* JJPROJ bamjet-index of projectile (=1 in case of proj.nucleus) *
+* XI,Q2I,ECMI kinematical variables x, Q^2, E_cm *
+* IE,IQ indices of energy and virtuality (the latter for gamma *
+* projectiles only) *
+* NIDX index of projectile/target nucleus *
+* This version dated 17.3.98 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ COMPLEX*16 CZERO,CONE,CTWO
+ CHARACTER*12 CFILE
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,THREE=3.0D0,
+ & ONETHI=ONE/THREE,TINY25=1.0D-25)
+ PARAMETER (TWOPI = 6.283185307179586454D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0,
+ & GEV2FM = 0.1972D0,
+ & ALPHEM = ONE/137.0D0,
+* proton mass
+ & AMP = 0.938D0,
+ & AMP2 = AMP**2,
+* approx. nucleon radius
+ & RNUCLE = 1.12D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+* parameters for hA-diffraction
+ COMMON /DTDIHA/ DIBETA,DIALPH
+
+ COMPLEX*16 PP11(MAXNCL),PP12(MAXNCL),PP21(MAXNCL),PP22(MAXNCL),
+ & OMPP11,OMPP12,OMPP21,OMPP22,
+ & DIPP11,DIPP12,DIPP21,DIPP22,AVDIPP,
+ & PPTMP1,PPTMP2
+ COMPLEX*16 C,CA,CI
+ DIMENSION COOP1(3,MAXNCL),COOT1(3,MAXNCL),
+ & COOP2(3,MAXNCL),COOT2(3,MAXNCL),
+ & BPROD(KSITEB)
+
+ PARAMETER (NPOINT=16)
+ DIMENSION ABSZX(NPOINT),WEIGHT(NPOINT)
+
+ LOGICAL LFIRST,LOPEN
+ DATA LFIRST,LOPEN /.TRUE.,.FALSE./
+
+ NTARG = ABS(NIDX)
+* for quasi-elastic neutrino scattering set projectile to proton
+* it should not have an effect since the whole Glauber-formalism is
+* not needed for these interactions..
+ IF (MCGENE.EQ.4) THEN
+ IJPROJ = 1
+ ELSE
+ IJPROJ = JJPROJ
+ ENDIF
+
+ IF ((ABS(IOGLB).EQ.1).AND.(.NOT.LOPEN)) THEN
+ I = INDEX(CGLB,' ')
+ IF (I.EQ.0) THEN
+ CFILE = CGLB//'.glb'
+ OPEN(LDAT,FILE=CGLB//'.glb',STATUS='UNKNOWN')
+ ELSEIF (I.GT.1) THEN
+ CFILE = CGLB(1:I-1)//'.glb'
+ OPEN(LDAT,FILE=CGLB(1:I-1)//'.glb',STATUS='UNKNOWN')
+ ELSE
+ STOP 'XSGLAU 1'
+ ENDIF
+ LOPEN = .TRUE.
+ ENDIF
+
+ CZERO = DCMPLX(ZERO,ZERO)
+ CONE = DCMPLX(ONE,ZERO)
+ CTWO = DCMPLX(TWO,ZERO)
+ NEBINI = IE
+ NQBINI = IQ
+
+* re-define kinematics
+ S = ECMI**2
+ Q2 = Q2I
+ X = XI
+* g(Q2=0)-A, h-A, A-A scattering
+ IF ((X.LE.ZERO).AND.(Q2.LE.ZERO).AND.(S.GT.ZERO)) THEN
+ Q2 = 0.0001D0
+ X = Q2/(S+Q2-AMP2)
+* g(Q2>0)-A scattering
+ ELSEIF ((X.LE.ZERO).AND.(Q2.GT.ZERO).AND.(S.GT.ZERO)) THEN
+ X = Q2/(S+Q2-AMP2)
+ ELSEIF ((X.GT.ZERO).AND.(Q2.LE.ZERO).AND.(S.GT.ZERO)) THEN
+ Q2 = (S-AMP2)*X/(ONE-X)
+ ELSEIF ((X.GT.ZERO).AND.(Q2.GT.ZERO)) THEN
+ S = Q2*(ONE-X)/X+AMP2
+ ELSE
+ WRITE(LOUT,*) 'XSGLAU: inconsistent input ',S,Q2,X
+ STOP
+ ENDIF
+ ECMNN(IE) = SQRT(S)
+ Q2G(IQ) = Q2
+ XNU = (S+Q2-AMP2)/(TWO*AMP)
+
+* parameters determining statistics in evaluating Glauber-xsection
+ NSTATB = JSTATB
+ NSITEB = JBINSB
+ IF (NSITEB.GT.KSITEB) NSITEB = KSITEB
+
+* set up interaction geometry (common /DTGLAM/)
+* projectile/target radii
+ RPRNCL = DT_RNCLUS(NA)
+ RTANCL = DT_RNCLUS(NB)
+ IF (IJPROJ.EQ.7) THEN
+ RASH(1) = ZERO
+ RBSH(NTARG) = RTANCL
+ BMAX(NTARG) = 2.0D0*(RASH(1)+RBSH(NTARG))
+ ELSE
+ IF (NIDX.LE.-1) THEN
+ RASH(1) = RPRNCL
+ RBSH(NTARG) = RTANCL
+ BMAX(NTARG) = 2.0D0*(RASH(1)+RBSH(NTARG))
+ ELSE
+ RASH(NTARG) = RPRNCL
+ RBSH(1) = RTANCL
+ BMAX(NTARG) = 2.0D0*(RASH(NTARG)+RBSH(1))
+ ENDIF
+ ENDIF
+* maximum impact-parameter
+ BSTEP(NTARG)= BMAX(NTARG)/DBLE(NSITEB-1)
+
+* slope, rho ( Re(f(0))/Im(f(0)) )
+ IF ((IJPROJ.LE.12).AND.(IJPROJ.NE.7)) THEN
+ IF (MCGENE.EQ.2) THEN
+ ZERO1 = ZERO
+ CALL DT_PHOXS(IJPROJ,1,ECMNN(IE),ZERO1,SDUM1,SDUM2,SDUM3,
+ & BSLOPE,0)
+ ELSE
+ BSLOPE = 8.5D0*(1.0D0+0.065D0*LOG(S))
+ ENDIF
+ IF (ECMNN(IE).LE.3.0D0) THEN
+ ROSH = -0.43D0
+ ELSEIF ((ECMNN(IE).GT.3.0D0).AND.(ECMNN(IE).LE.50.D0)) THEN
+ ROSH = -0.63D0+0.175D0*LOG(ECMNN(IE))
+ ELSEIF (ECMNN(IE).GT.50.0D0) THEN
+ ROSH = 0.1D0
+ ENDIF
+ ELSEIF (IJPROJ.EQ.7) THEN
+ ROSH = 0.1D0
+ ELSE
+ BSLOPE = 6.0D0*(1.0D0+0.065D0*LOG(S))
+ ROSH = 0.01D0
+ ENDIF
+
+* projectile-nucleon xsection (in fm)
+ IF (IJPROJ.EQ.7) THEN
+ SIGSH = DT_SIGVP(X,Q2)/10.0D0
+ ELSE
+ ELAB = (S-AAM(IJPROJ)**2-AMP2)/(TWO*AMP)
+ PLAB = SQRT( (ELAB-AAM(IJPROJ))*(ELAB+AAM(IJPROJ)) )
+C SIGSH = DT_SHNTOT(IJPROJ,1,ZERO,PLAB)/10.0D0
+ DUMZER = ZERO
+ CALL DT_XSHN(IJPROJ,1,PLAB,DUMZER,SIGSH,SIGEL)
+ SIGSH = SIGSH/10.0D0
+ ENDIF
+
+* parameters for projectile diffraction (hA scattering only)
+ IF ((MCGENE.EQ.2).AND.(NA.EQ.1).AND.(NB.GT.1).AND.(IJPROJ.NE.7)
+ & .AND.(DIBETA.GE.ZERO)) THEN
+ ZERO1 = ZERO
+ CALL DT_PHOXS(IJPROJ,1,ECMNN(IE),ZERO1,STOT,SDUM2,SDIF1,BDUM,0)
+C DIBETA = SDIF1/STOT
+ DIBETA = 0.2D0
+ DIGAMM = SQRT(DIALPH**2+DIBETA**2)
+ IF (DIBETA.LE.ZERO) THEN
+ ALPGAM = ONE
+ ELSE
+ ALPGAM = DIALPH/DIGAMM
+ ENDIF
+ FACDI1 = ONE-ALPGAM
+ FACDI2 = ONE+ALPGAM
+ FACDI = SQRT(FACDI1*FACDI2)
+ WRITE(LOUT,*)'DIBETA,DIALPH,DIGAMM: ',DIBETA,DIALPH,DIGAMM
+ ELSE
+ DIBETA = -1.0D0
+ DIALPH = ZERO
+ DIGAMM = ZERO
+ FACDI1 = ZERO
+ FACDI2 = 2.0D0
+ FACDI = ZERO
+ ENDIF
+
+* initializations
+ DO 10 I=1,NSITEB
+ BSITE( 0,IQ,NTARG,I) = ZERO
+ BSITE(IE,IQ,NTARG,I) = ZERO
+ BPROD(I) = ZERO
+ 10 CONTINUE
+ STOT = ZERO
+ STOT2 = ZERO
+ SELA = ZERO
+ SELA2 = ZERO
+ SQEP = ZERO
+ SQEP2 = ZERO
+ SQET = ZERO
+ SQET2 = ZERO
+ SQE2 = ZERO
+ SQE22 = ZERO
+ SPRO = ZERO
+ SPRO2 = ZERO
+ SDEL = ZERO
+ SDEL2 = ZERO
+ SDQE = ZERO
+ SDQE2 = ZERO
+ FACN = ONE/DBLE(NSTATB)
+
+ IPNT = 0
+ RPNT = ZERO
+
+* initialize Gauss-integration for photon-proj.
+ JPOINT = 1
+ IF (IJPROJ.EQ.7) THEN
+ IF (INTRGE(1).EQ.1) THEN
+ AMLO2 = (3.0D0*AAM(13))**2
+ ELSEIF (INTRGE(1).EQ.2) THEN
+ AMLO2 = AAM(33)**2
+ ELSE
+ AMLO2 = AAM(96)**2
+ ENDIF
+ IF (INTRGE(2).EQ.1) THEN
+ AMHI2 = S/TWO
+ ELSEIF (INTRGE(2).EQ.2) THEN
+ AMHI2 = S/4.0D0
+ ELSE
+ AMHI2 = S
+ ENDIF
+ AMHI20 = (ECMNN(IE)-AMP)**2
+ IF (AMHI2.GE.AMHI20) AMHI2 = AMHI20
+ XAMLO = LOG( AMLO2+Q2 )
+ XAMHI = LOG( AMHI2+Q2 )
+**PHOJET105a
+C CALL GSET(XAMLO,XAMHI,NPOINT,ABSZX,WEIGHT)
+**PHOJET112
+
+ CALL PHO_GAUSET(XAMLO,XAMHI,NPOINT,ABSZX,WEIGHT)
+
+**
+ JPOINT = NPOINT
+* ratio direct/total photon-nucleon xsection
+ CALL DT_POILIK(NB,NTARG,ECMNN(IE),Q2,IPNT,RPNT,1)
+ ENDIF
+
+* read pre-initialized profile-function from file
+ IF (IOGLB.EQ.1) THEN
+ READ(LDAT,'(5I10,E15.5)') KJPROJ,IA,IB,ISTATB,ISITEB,DUM
+ IF ((IA.NE.NA).OR.(IB.NE.NB)) THEN
+ WRITE(LOUT,1000) CFILE,IA,IB,ISTATB,ISITEB,
+ & NA,NB,NSTATB,NSITEB
+ 1000 FORMAT(' XSGLAU: inconsistent input data in file ',A12,/,
+ & ' (IA,IB,ISTATB,ISITEB) ',4I10,/,
+ & ' (NA,NB,NSTATB,NSITEB) ',4I10)
+ STOP
+ ENDIF
+ IF (LFIRST) WRITE(LOUT,1001) CFILE
+ 1001 FORMAT(/,' XSGLAU: impact parameter distribution read from ',
+ & 'file ',A12,/)
+ READ(LDAT,'(6E12.5)') XSTOT(IE,IQ,NTARG),XSELA(IE,IQ,NTARG),
+ & XSQEP(IE,IQ,NTARG),XSQET(IE,IQ,NTARG),
+ & XSQE2(IE,IQ,NTARG),XSPRO(IE,IQ,NTARG)
+ READ(LDAT,'(6E12.5)') XETOT(IE,IQ,NTARG),XEELA(IE,IQ,NTARG),
+ & XEQEP(IE,IQ,NTARG),XEQET(IE,IQ,NTARG),
+ & XEQE2(IE,IQ,NTARG),XEPRO(IE,IQ,NTARG)
+ NLINES = INT(DBLE(NSITEB)/7.0D0)
+ IF (NLINES.GT.0) THEN
+ DO 21 I=1,NLINES
+ ISTART = 7*I-6
+ READ(LDAT,'(7E11.4)')
+ & (BSITE(IE,IQ,NTARG,J),J=ISTART,ISTART+6)
+ 21 CONTINUE
+ ENDIF
+ ISTART = 7*NLINES+1
+ IF (ISTART.LE.NSITEB) THEN
+ READ(LDAT,'(7E11.4)')
+ & (BSITE(IE,IQ,NTARG,J),J=ISTART,NSITEB)
+ ENDIF
+ LFIRST = .FALSE.
+ GOTO 100
+* variable projectile/target/energy runs:
+* read pre-initialized profile-functions from file
+ ELSEIF (IOGLB.EQ.100) THEN
+ CALL DT_GLBSET(IJPROJ,IINA,IINB,RRELAB,0)
+ GOTO 100
+ ENDIF
+
+* cross sections averaged over NSTATB nucleon configurations
+ DO 11 IS=1,NSTATB
+C IF ((NA.EQ.207).AND.(NB.EQ.207)) WRITE(LOUT,*) 'conf. ',IS
+ STOTN = ZERO
+ SELAN = ZERO
+ SQEPN = ZERO
+ SQETN = ZERO
+ SQE2N = ZERO
+ SPRON = ZERO
+ SDELN = ZERO
+ SDQEN = ZERO
+
+ IF (NIDX.LE.-1) THEN
+ CALL DT_CONUCL(COOP1,NA,RASH(1),0)
+ CALL DT_CONUCL(COOT1,NB,RBSH(NTARG),1)
+ IF ((.NOT.LPROD).OR.(IJPROJ.EQ.7)) THEN
+ CALL DT_CONUCL(COOP2,NA,RASH(1),0)
+ CALL DT_CONUCL(COOT2,NB,RBSH(NTARG),1)
+ ENDIF
+ ELSE
+ CALL DT_CONUCL(COOP1,NA,RASH(NTARG),0)
+ CALL DT_CONUCL(COOT1,NB,RBSH(1),1)
+ IF ((.NOT.LPROD).OR.(IJPROJ.EQ.7)) THEN
+ CALL DT_CONUCL(COOP2,NA,RASH(NTARG),0)
+ CALL DT_CONUCL(COOT2,NB,RBSH(1),1)
+ ENDIF
+ ENDIF
+
+* integration over impact parameter B
+ DO 12 IB=1,NSITEB-1
+ STOTB = ZERO
+ SELAB = ZERO
+ SQEPB = ZERO
+ SQETB = ZERO
+ SQE2B = ZERO
+ SPROB = ZERO
+ SDIR = ZERO
+ SDELB = ZERO
+ SDQEB = ZERO
+ B = DBLE(IB)*BSTEP(NTARG)
+ FACB = 10.0D0*TWOPI*B*BSTEP(NTARG)
+
+* integration over M_V^2 for photon-proj.
+ DO 14 IM=1,JPOINT
+ PP11(1) = CONE
+ PP12(1) = CONE
+ PP21(1) = CONE
+ PP22(1) = CONE
+ IF (IJPROJ.EQ.7) THEN
+ DO 13 K=2,NB
+ PP11(K) = CONE
+ PP12(K) = CONE
+ PP21(K) = CONE
+ PP22(K) = CONE
+ 13 CONTINUE
+ ENDIF
+ SHI = ZERO
+ FACM = ONE
+ DCOH = 1.0D10
+
+ IF (IJPROJ.EQ.7) THEN
+ AMV2 = EXP(ABSZX(IM))-Q2
+ AMV = SQRT(AMV2)
+ IF (AMV2.LT.16.0D0) THEN
+ R = TWO
+ ELSEIF ((AMV2.GE.16.0D0).AND.(AMV2.LT.121.0D0)) THEN
+ R = 10.0D0/3.0D0
+ ELSE
+ R = 11.0D0/3.0D0
+ ENDIF
+* define M_V dependent properties of nucleon scattering amplitude
+* V_M-nucleon xsection
+ SIGMVD = RPNT*SIGSH/(AMV2+Q2+RL2)*10.0D0
+ SIGMV = (ONE-RPNT)*SIGSH/(AMV2+Q2+RL2)
+* slope-parametrisation a la Kaidalov
+ BSLOPE = 2.0D0*(2.0D0+AAM(32)**2/(AMV2+Q2)
+ & +0.25D0*LOG(S/(AMV2+Q2)))
+* coherence length
+ IF (ISHAD(3).EQ.1) DCOH = TWO*XNU/(AMV2+Q2)*GEV2FM
+* integration weight factor
+ FACM = ALPHEM/(3.0D0*PI*(ONE-X))*
+ & R*AMV2/(AMV2+Q2)*(ONE+EPSPOL*Q2/AMV2)*WEIGHT(IM)
+ ENDIF
+ GSH = 10.0D0/(TWO*BSLOPE*GEV2MB)
+ GAM = GSH
+ IF (IJPROJ.EQ.7) THEN
+ RCA = GAM*SIGMV/TWOPI
+ ELSE
+ RCA = GAM*SIGSH/TWOPI
+ ENDIF
+ FCA = -ROSH*RCA
+ CA = DCMPLX(RCA,FCA)
+ CI = CONE
+
+ DO 15 INA=1,NA
+ KK1 = 1
+ INT1 = 1
+ KK2 = 1
+ INT2 = 1
+ DO 16 INB=1,NB
+* photon-projectile: check for supression by coherence length
+ IF (IJPROJ.EQ.7) THEN
+ IF (ABS(COOT1(3,INB)-COOT1(3,KK1)).GT.DCOH)THEN
+ KK1 = INB
+ INT1 = INT1+1
+ ENDIF
+ IF (ABS(COOT2(3,INB)-COOT2(3,KK2)).GT.DCOH)THEN
+ KK2 = INB
+ INT2 = INT2+1
+ ENDIF
+ ENDIF
+
+ X11 = B+COOT1(1,INB)-COOP1(1,INA)
+ Y11 = COOT1(2,INB)-COOP1(2,INA)
+ XY11 = GAM*(X11*X11+Y11*Y11)
+ IF (XY11.LE.15.0D0) THEN
+ C = CONE-CA*EXP(-XY11)
+ AR = DBLE(PP11(INT1))
+ AI = DIMAG(PP11(INT1))
+ IF (ABS(AR).LT.TINY25) AR = ZERO
+ IF (ABS(AI).LT.TINY25) AI = ZERO
+ PP11(INT1) = DCMPLX(AR,AI)
+ PP11(INT1) = PP11(INT1)*C
+ AR = DBLE(C)
+ AI = DIMAG(C)
+ SHI = SHI+LOG(AR*AR+AI*AI)
+ ENDIF
+ IF ((.NOT.LPROD).OR.(IJPROJ.EQ.7)) THEN
+ X12 = B+COOT2(1,INB)-COOP1(1,INA)
+ Y12 = COOT2(2,INB)-COOP1(2,INA)
+ XY12 = GAM*(X12*X12+Y12*Y12)
+ IF (XY12.LE.15.0D0) THEN
+ C = CONE-CA*EXP(-XY12)
+ AR = DBLE(PP12(INT2))
+ AI = DIMAG(PP12(INT2))
+ IF (ABS(AR).LT.TINY25) AR = ZERO
+ IF (ABS(AI).LT.TINY25) AI = ZERO
+ PP12(INT2) = DCMPLX(AR,AI)
+ PP12(INT2) = PP12(INT2)*C
+ ENDIF
+ X21 = B+COOT1(1,INB)-COOP2(1,INA)
+ Y21 = COOT1(2,INB)-COOP2(2,INA)
+ XY21 = GAM*(X21*X21+Y21*Y21)
+ IF (XY21.LE.15.0D0) THEN
+ C = CONE-CA*EXP(-XY21)
+ AR = DBLE(PP21(INT1))
+ AI = DIMAG(PP21(INT1))
+ IF (ABS(AR).LT.TINY25) AR = ZERO
+ IF (ABS(AI).LT.TINY25) AI = ZERO
+ PP21(INT1) = DCMPLX(AR,AI)
+ PP21(INT1) = PP21(INT1)*C
+ ENDIF
+ X22 = B+COOT2(1,INB)-COOP2(1,INA)
+ Y22 = COOT2(2,INB)-COOP2(2,INA)
+ XY22 = GAM*(X22*X22+Y22*Y22)
+ IF (XY22.LE.15.0D0) THEN
+ C = CONE-CA*EXP(-XY22)
+ AR = DBLE(PP22(INT2))
+ AI = DIMAG(PP22(INT2))
+ IF (ABS(AR).LT.TINY25) AR = ZERO
+ IF (ABS(AI).LT.TINY25) AI = ZERO
+ PP22(INT2) = DCMPLX(AR,AI)
+ PP22(INT2) = PP22(INT2)*C
+ ENDIF
+ ENDIF
+ 16 CONTINUE
+ 15 CONTINUE
+
+ OMPP11 = CZERO
+ OMPP21 = CZERO
+ DIPP11 = CZERO
+ DIPP21 = CZERO
+ DO 17 K=1,INT1
+ IF (PP11(K).EQ.CZERO) THEN
+ PPTMP1 = CZERO
+ PPTMP2 = CZERO
+ ELSE
+ PPTMP1 = PP11(K)**(ONE-DIALPH-DIGAMM)
+ PPTMP2 = PP11(K)**(ONE-DIALPH+DIGAMM)
+ ENDIF
+ AVDIPP = 0.5D0*
+ & ( FACDI1*(CONE-PPTMP1)+FACDI2*(CONE-PPTMP2) )
+ OMPP11 = OMPP11+AVDIPP
+C OMPP11 = OMPP11+(CONE-PP11(K))
+ AVDIPP = 0.5D0*FACDI*( PPTMP1-PPTMP2 )
+ DIPP11 = DIPP11+AVDIPP
+ IF (PP21(K).EQ.CZERO) THEN
+ PPTMP1 = CZERO
+ PPTMP2 = CZERO
+ ELSE
+ PPTMP1 = PP21(K)**(ONE-DIALPH-DIGAMM)
+ PPTMP2 = PP21(K)**(ONE-DIALPH+DIGAMM)
+ ENDIF
+ AVDIPP = 0.5D0*
+ & ( FACDI1*(CONE-PPTMP1)+FACDI2*(CONE-PPTMP2) )
+ OMPP21 = OMPP21+AVDIPP
+C OMPP21 = OMPP21+(CONE-PP21(K))
+ AVDIPP = 0.5D0*FACDI*( PPTMP1-PPTMP2 )
+ DIPP21 = DIPP21+AVDIPP
+ 17 CONTINUE
+ OMPP12 = CZERO
+ OMPP22 = CZERO
+ DIPP12 = CZERO
+ DIPP22 = CZERO
+ DO 18 K=1,INT2
+ IF (PP12(K).EQ.CZERO) THEN
+ PPTMP1 = CZERO
+ PPTMP2 = CZERO
+ ELSE
+ PPTMP1 = PP12(K)**(ONE-DIALPH-DIGAMM)
+ PPTMP2 = PP12(K)**(ONE-DIALPH+DIGAMM)
+ ENDIF
+ AVDIPP = 0.5D0*
+ & ( FACDI1*(CONE-PPTMP1)+FACDI2*(CONE-PPTMP2) )
+ OMPP12 = OMPP12+AVDIPP
+C OMPP12 = OMPP12+(CONE-PP12(K))
+ AVDIPP = 0.5D0*FACDI*( PPTMP1-PPTMP2 )
+ DIPP12 = DIPP12+AVDIPP
+ IF (PP22(K).EQ.CZERO) THEN
+ PPTMP1 = CZERO
+ PPTMP2 = CZERO
+ ELSE
+ PPTMP1 = PP22(K)**(ONE-DIALPH-DIGAMM)
+ PPTMP2 = PP22(K)**(ONE-DIALPH+DIGAMM)
+ ENDIF
+ AVDIPP = 0.5D0*
+ & ( FACDI1*(CONE-PPTMP1)+FACDI2*(CONE-PPTMP2) )
+ OMPP22 = OMPP22+AVDIPP
+C OMPP22 = OMPP22+(CONE-PP22(K))
+ AVDIPP = 0.5D0*FACDI*( PPTMP1-PPTMP2 )
+ DIPP22 = DIPP22+AVDIPP
+ 18 CONTINUE
+
+ SPROM = ONE-EXP(SHI)
+ SPROB = SPROB+FACM*SPROM
+ IF ((.NOT.LPROD).OR.(IJPROJ.EQ.7)) THEN
+ STOTM = DBLE(OMPP11+OMPP22)
+ SELAM = DBLE(OMPP11*DCONJG(OMPP22))
+ SQEPM = DBLE(OMPP11*DCONJG(OMPP21))-SELAM
+ SQETM = DBLE(OMPP11*DCONJG(OMPP12))-SELAM
+ SQE2M = DBLE(OMPP11*DCONJG(OMPP11))-SELAM-SQEPM-SQETM
+ SDELM = DBLE(DIPP11*DCONJG(DIPP22))
+ SDQEM = DBLE(DIPP11*DCONJG(DIPP21))-SDELM
+ STOTB = STOTB+FACM*STOTM
+ SELAB = SELAB+FACM*SELAM
+ SDELB = SDELB+FACM*SDELM
+ IF (NB.GT.1) THEN
+ SQEPB = SQEPB+FACM*SQEPM
+ SDQEB = SDQEB+FACM*SDQEM
+ ENDIF
+ IF (NA.GT.1) SQETB = SQETB+FACM*SQETM
+ IF ((NA.GT.1).AND.(NB.GT.1)) SQE2B = SQE2B+FACM*SQE2M
+ IF (IJPROJ.EQ.7) SDIR = SDIR+FACM*SIGMVD
+ ENDIF
+
+ 14 CONTINUE
+
+ STOTN = STOTN+FACB*STOTB
+ SELAN = SELAN+FACB*SELAB
+ SQEPN = SQEPN+FACB*SQEPB
+ SQETN = SQETN+FACB*SQETB
+ SQE2N = SQE2N+FACB*SQE2B
+ SPRON = SPRON+FACB*SPROB
+ SDELN = SDELN+FACB*SDELB
+ SDQEN = SDQEN+FACB*SDQEB
+
+ IF (IJPROJ.EQ.7) THEN
+ BPROD(IB+1)= BPROD(IB+1)+FACN*FACB*(STOTB-SELAB-SQEPB)
+ ELSE
+ IF (DIBETA.GT.ZERO) THEN
+ BPROD(IB+1)= BPROD(IB+1)
+ & +FACN*FACB*(STOTB-SELAB-SQEPB-SQETB-SQE2B)
+ ELSE
+ BPROD(IB+1)= BPROD(IB+1)+FACN*FACB*SPROB
+ ENDIF
+ ENDIF
+
+ 12 CONTINUE
+
+ STOT = STOT +FACN*STOTN
+ STOT2 = STOT2+FACN*STOTN**2
+ SELA = SELA +FACN*SELAN
+ SELA2 = SELA2+FACN*SELAN**2
+ SQEP = SQEP +FACN*SQEPN
+ SQEP2 = SQEP2+FACN*SQEPN**2
+ SQET = SQET +FACN*SQETN
+ SQET2 = SQET2+FACN*SQETN**2
+ SQE2 = SQE2 +FACN*SQE2N
+ SQE22 = SQE22+FACN*SQE2N**2
+ SPRO = SPRO +FACN*SPRON
+ SPRO2 = SPRO2+FACN*SPRON**2
+ SDEL = SDEL +FACN*SDELN
+ SDEL2 = SDEL2+FACN*SDELN**2
+ SDQE = SDQE +FACN*SDQEN
+ SDQE2 = SDQE2+FACN*SDQEN**2
+
+ 11 CONTINUE
+
+* final cross sections
+* 1) total
+ XSTOT(IE,IQ,NTARG) = STOT
+ IF (IJPROJ.EQ.7)
+ & XSTOT(IE,IQ,NTARG) = XSTOT(IE,IQ,NTARG)+DBLE(NB)*SDIR
+* 2) elastic
+ XSELA(IE,IQ,NTARG) = SELA
+* 3) quasi-el.: A+B-->A+X (excluding 2)
+ XSQEP(IE,IQ,NTARG) = SQEP
+* 4) quasi-el.: A+B-->X+B (excluding 2)
+ XSQET(IE,IQ,NTARG) = SQET
+* 5) quasi-el.: A+B-->X (excluding 2-4)
+ XSQE2(IE,IQ,NTARG) = SQE2
+* 6) production (= STOT-SELA-SQEP-SQET-SQE2!)
+ IF (SDEL.GT.ZERO) THEN
+ XSPRO(IE,IQ,NTARG) = STOT-SELA-SQEP-SQET-SQE2
+ ELSE
+ XSPRO(IE,IQ,NTARG) = SPRO
+ ENDIF
+* 7) projectile diffraction (el. scatt. off target)
+ XSDEL(IE,IQ,NTARG) = SDEL
+* 8) projectile diffraction (quasi-el. scatt. off target)
+ XSDQE(IE,IQ,NTARG) = SDQE
+* stat. errors
+ XETOT(IE,IQ,NTARG) = SQRT(ABS(STOT2-STOT**2)/DBLE(NSTATB-1))
+ XEELA(IE,IQ,NTARG) = SQRT(ABS(SELA2-SELA**2)/DBLE(NSTATB-1))
+ XEQEP(IE,IQ,NTARG) = SQRT(ABS(SQEP2-SQEP**2)/DBLE(NSTATB-1))
+ XEQET(IE,IQ,NTARG) = SQRT(ABS(SQET2-SQET**2)/DBLE(NSTATB-1))
+ XEQE2(IE,IQ,NTARG) = SQRT(ABS(SQE22-SQE2**2)/DBLE(NSTATB-1))
+ XEPRO(IE,IQ,NTARG) = SQRT(ABS(SPRO2-SPRO**2)/DBLE(NSTATB-1))
+ XEDEL(IE,IQ,NTARG) = SQRT(ABS(SDEL2-SDEL**2)/DBLE(NSTATB-1))
+ XEDQE(IE,IQ,NTARG) = SQRT(ABS(SDQE2-SDQE**2)/DBLE(NSTATB-1))
+
+ IF (IJPROJ.EQ.7) THEN
+ BNORM = XSTOT(IE,IQ,NTARG)-XSELA(IE,IQ,NTARG)
+ & -XSQEP(IE,IQ,NTARG)
+ ELSE
+ BNORM = XSPRO(IE,IQ,NTARG)
+ ENDIF
+ DO 19 I=2,NSITEB
+ BSITE(IE,IQ,NTARG,I) = BPROD(I)/BNORM+BSITE(IE,IQ,NTARG,I-1)
+ IF ((IE.EQ.1).AND.(IQ.EQ.1))
+ & BSITE(0,1,NTARG,I) = BPROD(I)/BNORM+BSITE(0,1,NTARG,I-1)
+ 19 CONTINUE
+
+* write profile function data into file
+ IF ((IOGLB.EQ.-1).OR.(IOGLB.EQ.-100)) THEN
+ WRITE(LDAT,'(5I10,1P,E15.5)')
+ & IJPROJ,NA,NB,NSTATB,NSITEB,ECMNN(IE)
+ WRITE(LDAT,'(1P,6E12.5)')
+ & XSTOT(IE,IQ,NTARG),XSELA(IE,IQ,NTARG),XSQEP(IE,IQ,NTARG),
+ & XSQET(IE,IQ,NTARG),XSQE2(IE,IQ,NTARG),XSPRO(IE,IQ,NTARG)
+ WRITE(LDAT,'(1P,6E12.5)')
+ & XETOT(IE,IQ,NTARG),XEELA(IE,IQ,NTARG),XEQEP(IE,IQ,NTARG),
+ & XEQET(IE,IQ,NTARG),XEQE2(IE,IQ,NTARG),XEPRO(IE,IQ,NTARG)
+ NLINES = INT(DBLE(NSITEB)/7.0D0)
+ IF (NLINES.GT.0) THEN
+ DO 20 I=1,NLINES
+ ISTART = 7*I-6
+ WRITE(LDAT,'(1P,7E11.4)')
+ & (BSITE(IE,IQ,NTARG,J),J=ISTART,ISTART+6)
+ 20 CONTINUE
+ ENDIF
+ ISTART = 7*NLINES+1
+ IF (ISTART.LE.NSITEB) THEN
+ WRITE(LDAT,'(1P,7E11.4)')
+ & (BSITE(IE,IQ,NTARG,J),J=ISTART,NSITEB)
+ ENDIF
+ ENDIF
+
+ 100 CONTINUE
+
+C IF (ABS(IOGLB).EQ.1) CLOSE(LDAT)
+
+ RETURN
+ END
+*
+*===getbxs=============================================================*
+*
+CDECK ID>, DT_GETBXS
+ SUBROUTINE DT_GETBXS(XSFRAC,BLO,BHI,NIDX)
+
+************************************************************************
+* Biasing in impact parameter space. *
+* XSFRAC = 0 : BLO - minimum impact parameter (input) *
+* BHI - maximum impact parameter (input) *
+* XSFRAC - fraction of cross section corresponding *
+* to impact parameter range (BLO,BHI) *
+* (output) *
+* XSFRAC > 0 : XSFRAC - fraction of cross section (input) *
+* BHI - maximum impact parameter giving requested *
+* fraction of cross section in impact *
+* parameter range (0,BMAX) (output) *
+* This version dated 17.03.00 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+
+ NTARG = ABS(NIDX)
+ IF (XSFRAC.LE.0.0D0) THEN
+ ILO = MIN(NSITEB-1,INT(BLO/BSTEP(NTARG)))
+ IHI = MIN(NSITEB-1,INT(BHI/BSTEP(NTARG)))
+ IF (ILO.GE.IHI) THEN
+ XSFRAC = 0.0D0
+ RETURN
+ ENDIF
+ IF (ILO.EQ.NSITEB-1) THEN
+ FRCLO = BSITE(0,1,NTARG,NSITEB)
+ ELSE
+ FRCLO = BSITE(0,1,NTARG,ILO+1)
+ & +(BLO-ILO*BSTEP(NTARG))/BSTEP(NTARG)
+ & *(BSITE(0,1,NTARG,ILO+2)-BSITE(0,1,NTARG,ILO+1))
+ ENDIF
+ IF (IHI.EQ.NSITEB-1) THEN
+ FRCHI = BSITE(0,1,NTARG,NSITEB)
+ ELSE
+ FRCHI = BSITE(0,1,NTARG,IHI+1)
+ & +(BHI-IHI*BSTEP(NTARG))/BSTEP(NTARG)
+ & *(BSITE(0,1,NTARG,IHI+2)-BSITE(0,1,NTARG,IHI+1))
+ ENDIF
+ XSFRAC = FRCHI-FRCLO
+ ELSE
+ BLO = 0.0D0
+ BHI = BMAX(NTARG)
+ DO 1 I=1,NSITEB-1
+ IF (XSFRAC.LT.BSITE(0,1,NTARG,I+1)) THEN
+ FAC = (XSFRAC -BSITE(0,1,NTARG,I))/
+ & (BSITE(0,1,NTARG,I+1)-BSITE(0,1,NTARG,I))
+ BHI = DBLE(I-1)*BSTEP(NTARG)+BSTEP(NTARG)*FAC
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+ 2 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+*
+*===conucl=============================================================*
+*
+CDECK ID>, DT_CONUCL
+ SUBROUTINE DT_CONUCL(X,N,R,MODE)
+
+************************************************************************
+* Calculation of coordinates of nucleons within nuclei. *
+* X(3,N) spatial coordinates of nucleons (in fm) (output) *
+* N / R number of nucleons / radius of nucleus (input) *
+* MODE = 0 coordinates not sorted *
+* = 1 coordinates sorted with increasing X(3,i) *
+* = 2 coordinates sorted with decreasing X(3,i) *
+* This version dated 26.10.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,THREE=3.0D0,
+ & ONETHI=ONE/THREE,SQRTWO=1.414213562D0)
+
+ PARAMETER (TWOPI = 6.283185307179586454D+00 )
+
+ PARAMETER (NSRT=10)
+ DIMENSION IDXSRT(NSRT,200),ICSRT(NSRT)
+ DIMENSION X(3,N),XTMP(3,260)
+
+ CALL DT_COORDI(XTMP,IDXSRT,ICSRT,N,R)
+
+ IF ((MODE.NE.0).AND.((N.EQ.3).OR.(N.GT.4))) THEN
+ K = 0
+ DO 1 I=1,NSRT
+ IF (MODE.EQ.2) THEN
+ ISRT = NSRT+1-I
+ ELSE
+ ISRT = I
+ ENDIF
+ K1 = K
+ DO 2 J=1,ICSRT(ISRT)
+ K = K+1
+ X(1,K) = XTMP(1,IDXSRT(ISRT,J))
+ X(2,K) = XTMP(2,IDXSRT(ISRT,J))
+ X(3,K) = XTMP(3,IDXSRT(ISRT,J))
+ 2 CONTINUE
+ IF (ICSRT(ISRT).GT.1) THEN
+ I0 = K1+1
+ I1 = K
+ CALL DT_SORT(X,N,I0,I1,MODE)
+ ENDIF
+ 1 CONTINUE
+ ELSEIF ((MODE.NE.0).AND.((N.EQ.2).OR.(N.EQ.4))) THEN
+ DO 3 I=1,N
+ X(1,I) = XTMP(1,I)
+ X(2,I) = XTMP(2,I)
+ X(3,I) = XTMP(3,I)
+ 3 CONTINUE
+ CALL DT_SORT(X,N,1,N,MODE)
+ ELSE
+ DO 4 I=1,N
+ X(1,I) = XTMP(1,I)
+ X(2,I) = XTMP(2,I)
+ X(3,I) = XTMP(3,I)
+ 4 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+*
+*===coordi=============================================================*
+*
+CDECK ID>, DT_COORDI
+ SUBROUTINE DT_COORDI(X,IDXSRT,ICSRT,N,R)
+
+************************************************************************
+* Calculation of coordinates of nucleons within nuclei. *
+* X(3,N) spatial coordinates of nucleons (in fm) (output) *
+* N / R number of nucleons / radius of nucleus (input) *
+* Based on the original version by Shmakov et al. *
+* This version dated 26.10.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,THREE=3.0D0,
+ & ONETHI=ONE/THREE,SQRTWO=1.414213562D0)
+
+ PARAMETER (TWOPI = 6.283185307179586454D+00 )
+
+ LOGICAL LSTART
+
+ PARAMETER (NSRT=10)
+ DIMENSION IDXSRT(NSRT,200),ICSRT(NSRT)
+ DIMENSION X(3,260),WD(4),RD(3)
+
+ DATA PDIF/0.545D0/,R2MIN/0.16D0/
+ DATA WD / 0.0D0, 0.178D0, 0.465D0, 1.0D0/
+ DATA RD /2.09D0, 0.935D0, 0.697D0/
+
+ X1SUM = ZERO
+ X2SUM = ZERO
+ X3SUM = ZERO
+
+ IF (N.EQ.1) THEN
+ X(1,1) = ZERO
+ X(2,1) = ZERO
+ X(3,1) = ZERO
+ ELSEIF (N.EQ.2) THEN
+ EPS = DT_RNDM(RD(1))
+ DO 30 I=1,3
+ IF ((EPS.GE.WD(I)).AND.(EPS.LE.WD(I+1))) GOTO 40
+ 30 CONTINUE
+ 40 CONTINUE
+ DO 50 J=1,3
+ CALL DT_RANNOR(X1,X2)
+ X(J,1) = RD(I)*X1
+ X(J,2) = -X(J,1)
+ 50 CONTINUE
+ ELSEIF ((N.EQ.3).OR.(N.EQ.4)) THEN
+ SIGMA = R/SQRTWO
+ LSTART = .TRUE.
+ CALL DT_RANNOR(X3,X4)
+ DO 100 I=1,N
+ CALL DT_RANNOR(X1,X2)
+ X(1,I) = SIGMA*X1
+ X(2,I) = SIGMA*X2
+ IF (LSTART) GOTO 80
+ X(3,I) = SIGMA*X4
+ CALL DT_RANNOR(X3,X4)
+ GOTO 90
+ 80 CONTINUE
+ X(3,I) = SIGMA*X3
+ 90 CONTINUE
+ LSTART = .NOT.LSTART
+ X1SUM = X1SUM+X(1,I)
+ X2SUM = X2SUM+X(2,I)
+ X3SUM = X3SUM+X(3,I)
+ 100 CONTINUE
+ X1SUM = X1SUM/DBLE(N)
+ X2SUM = X2SUM/DBLE(N)
+ X3SUM = X3SUM/DBLE(N)
+ DO 101 I=1,N
+ X(1,I) = X(1,I)-X1SUM
+ X(2,I) = X(2,I)-X2SUM
+ X(3,I) = X(3,I)-X3SUM
+ 101 CONTINUE
+ ELSE
+
+* maximum nuclear radius for coordinate sampling
+ RMAX = R+4.605D0*PDIF
+
+* initialize pre-sorting
+ DO 121 I=1,NSRT
+ ICSRT(I) = 0
+ 121 CONTINUE
+ DR = TWO*RMAX/DBLE(NSRT)
+
+* sample coordinates for N nucleons
+ DO 140 I=1,N
+ 120 CONTINUE
+ RAD = RMAX*(DT_RNDM(DR))**ONETHI
+ F = DT_DENSIT(N,RAD,R)
+ IF (DT_RNDM(RAD).GT.F) GOTO 120
+* theta, phi uniformly distributed
+ CT = ONE-TWO*DT_RNDM(F)
+ ST = SQRT((ONE-CT)*(ONE+CT))
+ CALL DT_DSFECF(SFE,CFE)
+ X(1,I) = RAD*ST*CFE
+ X(2,I) = RAD*ST*SFE
+ X(3,I) = RAD*CT
+* ensure that distance between two nucleons is greater than R2MIN
+ IF (I.LT.2) GOTO 122
+ I1 = I-1
+ DO 130 I2=1,I1
+ DIST2 = (X(1,I)-X(1,I2))**2+(X(2,I)-X(2,I2))**2+
+ & (X(3,I)-X(3,I2))**2
+ IF (DIST2.LE.R2MIN) GOTO 120
+ 130 CONTINUE
+ 122 CONTINUE
+* save index according to z-bin
+ IDXZ = INT( (X(3,I)+RMAX)/DR )+1
+ ICSRT(IDXZ) = ICSRT(IDXZ)+1
+ IDXSRT(IDXZ,ICSRT(IDXZ)) = I
+ X1SUM = X1SUM+X(1,I)
+ X2SUM = X2SUM+X(2,I)
+ X3SUM = X3SUM+X(3,I)
+ 140 CONTINUE
+ X1SUM = X1SUM/DBLE(N)
+ X2SUM = X2SUM/DBLE(N)
+ X3SUM = X3SUM/DBLE(N)
+ DO 141 I=1,N
+ X(1,I) = X(1,I)-X1SUM
+ X(2,I) = X(2,I)-X2SUM
+ X(3,I) = X(3,I)-X3SUM
+ 141 CONTINUE
+
+ ENDIF
+
+ RETURN
+ END
+*
+*===densit=============================================================*
+*
+CDECK ID>, DT_DENSIT
+ DOUBLE PRECISION FUNCTION DT_DENSIT(NA,R,RA)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO)
+
+ DIMENSION R0(18),FNORM(18)
+ DATA R0 / ZERO, ZERO, ZERO, ZERO, 2.12D0,
+ & 2.56D0, 2.41D0, 2.46D0, 2.52D0, 2.45D0,
+ & 2.37D0, 2.46D0, 2.44D0, 2.54D0, 2.58D0,
+ & 2.72D0, 2.66D0, 2.79D0/
+ DATA FNORM /.1000D+01,.1000D+01,.1000D+01,.1000D+01,.1000D+01,
+ & .1000D+01,.1000D+01,.1000D+01,.1000D+01,.1000D+01,
+ & .1012D+01,.1039D+01,.1075D+01,.1118D+01,.1164D+01,
+ & .1214D+01,.1265D+01,.1318D+01/
+ DATA PDIF /0.545D0/
+
+ DT_DENSIT = ZERO
+* shell model
+ IF (NA.LE.4) THEN
+ STOP 'DT_DENSIT-0'
+ ELSEIF ((NA.GT.4).AND.(NA.LE.18)) THEN
+ R1 = R0(NA)/SQRT(2.5D0-4.0D0/DBLE(NA))
+ DT_DENSIT = (ONE+(DBLE(NA)-4.0D0)/6.0D0*(R/R1)**2)
+ & *EXP(-(R/R1)**2)/FNORM(NA)
+* Woods-Saxon
+ ELSEIF (NA.GT.18) THEN
+ DT_DENSIT = ONE/(ONE+EXP((R-RA)/PDIF))
+ ENDIF
+
+ RETURN
+ END
+*
+*===rnclus=============================================================*
+*
+CDECK ID>, DT_RNCLUS
+ DOUBLE PRECISION FUNCTION DT_RNCLUS(N)
+
+************************************************************************
+* Nuclear radius for nucleus with mass number N. *
+* This version dated 26.9.00 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (ONE=1.0D0,THREE=3.0D0,ONETHI=ONE/THREE)
+
+* nucleon radius
+ PARAMETER (RNUCLE = 1.12D0)
+
+* nuclear radii for selected nuclei
+ DIMENSION RADNUC(18)
+ DATA RADNUC / 8*0.0D0,2.52D0,2.45D0,2.37D0,2.45D0,2.44D0,2.55D0,
+ & 2.58D0,2.71D0,2.66D0,2.71D0/
+
+ IF (N.LE.18) THEN
+ IF (RADNUC(N).GT.0.0D0) THEN
+ DT_RNCLUS = RADNUC(N)
+ ELSE
+ DT_RNCLUS = RNUCLE*DBLE(N)**ONETHI
+ ENDIF
+ ELSE
+ DT_RNCLUS = RNUCLE*DBLE(N)**ONETHI
+ ENDIF
+
+ RETURN
+ END
+*
+*===dentst=============================================================*
+*
+C PROGRAM DT_DENTST
+CDECK ID>, DT_DENTST
+ SUBROUTINE DT_DENTST
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ OPEN(40,FILE='dentst.out',STATUS='UNKNOWN')
+ OPEN(41,FILE='denmax.out',STATUS='UNKNOWN')
+
+ RMIN = 0.0D0
+ RMAX = 8.0D0
+ NBINS = 500.0D0
+ DR = (RMAX-RMIN)/DBLE(NBINS)
+ DO 1 IA=5,18
+ FMAX = 0.0D0
+ DO 2 IR=1,NBINS+1
+ R = RMIN+DBLE(IR-1)*DR
+ F = DT_DENSIT(IA,R,R)
+ IF (F.GT.FMAX) FMAX = F
+ WRITE(40,'(1X,I3,2E15.5)') IA,R,F
+ 2 CONTINUE
+ WRITE(41,'(1X,I3,E15.5)') IA,FMAX
+ 1 CONTINUE
+
+ CLOSE(40)
+ CLOSE(41)
+
+ END
+*
+*===shmaki=============================================================*
+*
+CDECK ID>, DT_SHMAKI
+ SUBROUTINE DT_SHMAKI(NA,NCA,NB,NCB,IJP,PPN,MODE)
+
+************************************************************************
+* Initialisation of Glauber formalism. This subroutine has to be *
+* called once (in case of target emulsions as often as many different *
+* target nuclei are considered) before events are sampled. *
+* NA / NCA mass number/charge of projectile nucleus *
+* NB / NCB mass number/charge of target nucleus *
+* IJP identity of projectile (hadrons/leptons/photons) *
+* PPN projectile momentum (for projectile nuclei: *
+* momentum per nucleon) in target rest system *
+* MODE = 0 Glauber formalism invoked *
+* = 1 fitted results are loaded from data-file *
+* = 99 NTARG is forced to be 1 *
+* (used in connection with GLAUBERI-card only) *
+* This version dated 22.03.96 is based on the original SHMAKI-routine *
+* and revised by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0,
+ & THREE=3.0D0)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* kinematical cuts for lepton-nucleus interactions
+ COMMON /DTLCUT/ ECMIN,ECMAX,XBJMIN,ELMIN,EGMIN,EGMAX,YMIN,YMAX,
+ & Q2MIN,Q2MAX,THMIN,THMAX,Q2LI,Q2HI,ECMLI,ECMHI
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* cuts for variable energy runs
+ COMMON /DTVARE/ VARELO,VAREHI,VARCLO,VARCHI
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+
+ DATA NTARG,ICOUT,IVEOUT /0,0,0/
+
+C CALL DT_HISHAD
+C STOP
+
+ NTARG = NTARG+1
+ IF (MODE.EQ.99) NTARG = 1
+ NIDX = -NTARG
+ IF (MODE.EQ.-1) NIDX = NTARG
+
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4)) ICOUT = ICOUT+1
+ IF (ICOUT.EQ.1) WRITE(LOUT,1000)
+ 1000 FORMAT(//,1X,'SHMAKI: Glauber formalism (Shmakov et. al) -',
+ & ' initialization',/,12X,'--------------------------',
+ & '-------------------------',/)
+
+ IF (MODE.EQ.2) THEN
+ CALL DT_XSGLAU(NA,NB,IJP,ZERO,VIRT,UMO,1,1,NIDX)
+ CALL DT_SHFAST(MODE,PPN,IBACK)
+ STOP ' Glauber pre-initialization done'
+ ENDIF
+ IF (MODE.EQ.1) THEN
+ CALL DT_PROFBI(NA,NB,PPN,NTARG)
+ ELSE
+ IBACK = 1
+ IF (MODE.EQ.3) CALL DT_SHFAST(MODE,PPN,IBACK)
+ IF (IBACK.EQ.1) THEN
+* lepton-nucleus (variable energy runs)
+ IF ((IJP.EQ. 3).OR.(IJP.EQ. 4).OR.
+ & (IJP.EQ.10).OR.(IJP.EQ.11)) THEN
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4))
+ & WRITE(LOUT,1002) NB,NCB
+ 1002 FORMAT(1X,'variable energy run: projectile-id: 7',
+ & ' target A/Z: ',I3,' /',I3,/,/,8X,
+ & 'E_cm (GeV) Q^2 (GeV^2)',
+ & ' Sigma_tot (mb) Sigma_in (mb)',/,7X,
+ & '--------------------------------',
+ & '------------------------------')
+ AECMLO = LOG10(MIN(UMO,ECMLI))
+ AECMHI = LOG10(MIN(UMO,ECMHI))
+ IESTEP = NEB-1
+ DAECM = (AECMHI-AECMLO)/DBLE(IESTEP)
+ IF (AECMLO.EQ.AECMHI) IESTEP = 0
+ DO 1 I=1,IESTEP+1
+ ECM = 10.0D0**(AECMLO+DBLE(I-1)*DAECM)
+ IF (Q2HI.GT.0.1D0) THEN
+ IF (Q2LI.LT.0.01D0) THEN
+ CALL DT_XSGLAU(NA,NB,7,ZERO,ZERO,ECM,I,1,NIDX)
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4))
+ & WRITE(LOUT,1003)
+ & ECMNN(I),ZERO,XSTOT(I,1,NTARG),XSPRO(I,1,NTARG)
+ Q2LI = 0.01D0
+ IBIN = 2
+ ELSE
+ IBIN = 1
+ ENDIF
+ IQSTEP = NQB-IBIN
+ AQ2LO = LOG10(Q2LI)
+ AQ2HI = LOG10(Q2HI)
+ DAQ2 = (AQ2HI-AQ2LO)/MAX(DBLE(IQSTEP),ONE)
+ DO 2 J=IBIN,IQSTEP+IBIN
+ Q2 = 10.0D0**(AQ2LO+DBLE(J-IBIN)*DAQ2)
+ CALL DT_XSGLAU(NA,NB,7,ZERO,Q2,ECM,I,J,NIDX)
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4))
+ & WRITE(LOUT,1003) ECMNN(I),
+ & Q2G(J),XSTOT(I,J,NTARG),XSPRO(I,J,NTARG)
+ 2 CONTINUE
+ ELSE
+ CALL DT_XSGLAU(NA,NB,7,ZERO,ZERO,ECM,I,1,NIDX)
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4))
+ & WRITE(LOUT,1003)
+ & ECMNN(I),ZERO,XSTOT(I,1,NTARG),XSPRO(I,1,NTARG)
+ ENDIF
+ 1003 FORMAT(9X,F6.1,9X,F6.2,8X,F8.3,11X,F8.3)
+ 1 CONTINUE
+ IVEOUT = 1
+ ELSE
+* hadron/photon/nucleus-nucleus
+ IF ((ABS(VAREHI).GT.ZERO).AND.
+ & (ABS(VAREHI).GT.ABS(VARELO))) THEN
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4)) THEN
+ WRITE(LOUT,1004) NA,NB,NCB
+ 1004 FORMAT(1X,'variable energy run: projectile-id:',
+ & I3,' target A/Z: ',I3,' /',I3,/)
+ WRITE(LOUT,1005)
+ 1005 FORMAT(' E_cm (GeV) E_Lab (GeV) sig_tot^pp (mb)'
+ & ,' Sigma_tot (mb) Sigma_prod (mb)',/,
+ & ' -------------------------------------',
+ & '--------------------------------------')
+ ENDIF
+ AECMLO = LOG10(VARCLO)
+ AECMHI = LOG10(VARCHI)
+ IESTEP = NEB-1
+ DAECM = (AECMHI-AECMLO)/DBLE(IESTEP)
+ IF (AECMLO.EQ.AECMHI) IESTEP = 0
+ DO 3 I=1,IESTEP+1
+ ECM = 10.0D0**(AECMLO+DBLE(I-1)*DAECM)
+ AMP = 0.938D0
+ AMT = 0.938D0
+ AMP2 = AMP**2
+ AMT2 = AMT**2
+ ELAB = (ECM**2-AMP2-AMT2)/(TWO*AMT)
+ PLAB = SQRT((ELAB+AMP)*(ELAB-AMP))
+ CALL DT_XSGLAU(NA,NB,IJP,ZERO,VIRT,ECM,I,1,NIDX)
+ IF ((ICOUT.LT.15).AND.(MCGENE.NE.4))
+ & WRITE(LOUT,1006)
+ & ECM,PLAB,SIGSH,XSTOT(I,1,NTARG),XSPRO(I,1,NTARG)
+ 1006 FORMAT(1X,F9.1,1X,E11.3,1X,F12.2,8X,F10.3,8X,F8.3)
+ 3 CONTINUE
+ IVEOUT = 1
+ ELSE
+ CALL DT_XSGLAU(NA,NB,IJP,ZERO,VIRT,UMO,1,1,NIDX)
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+
+ IF ((ICOUT.LT.15).AND.(IVEOUT.EQ.0).AND.(MCGENE.NE.4).AND.
+ & (IOGLB.NE.100)) THEN
+ WRITE(LOUT,1001) NA,NCA,NB,NCB,ECMNN(1),SIGSH*10.0D0,ROSH,
+ & BSLOPE,NSITEB,NSTATB,XSPRO(1,1,NTARG)
+ 1001 FORMAT(38X,'projectile',
+ & ' target',/,1X,'Mass number / charge',
+ & 17X,I3,' /',I3,6X,I3,' /',I3,/,/,1X,
+ & 'Nucleon-nucleon c.m. energy',9X,F10.2,' GeV',/,/,1X,
+ & 'Parameters of elastic scattering amplitude:',/,5X,
+ & 'sigma =',F7.2,' mb',6X,'rho = ',F9.4,6X,'slope = ',
+ & F4.1,' GeV^-2',/,/,1X,'Number of b-steps',4X,I3,8X,
+ & 'statistics at each b-step',4X,I5,/,/,1X,
+ & 'Prod. cross section ',5X,F10.4,' mb',/)
+ ENDIF
+
+ RETURN
+ END
+*
+*===profbi=============================================================*
+*
+CDECK ID>, DT_PROFBI
+ SUBROUTINE DT_PROFBI(NA,NB,PPN,NTARG)
+
+************************************************************************
+* Integral over profile function (to be used for impact-parameter *
+* sampling during event generation). *
+* Fitted results are used. *
+* NA / NB mass numbers of proj./target nuclei *
+* PPN projectile momentum (for projectile nuclei: *
+* momentum per nucleon) in target rest system *
+* NTARG index of target material (i.e. kind of nucleus) *
+* This version dated 31.05.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ SAVE
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,THREE=3.0D0)
+
+ LOGICAL LSTART
+ CHARACTER CNAME*80
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+
+ PARAMETER (NGLMAX=8000)
+ DIMENSION NGLIT(NGLMAX),NGLIP(NGLMAX),GLAPPN(NGLMAX),
+ & GLASIG(NGLMAX),GLAFIT(5,NGLMAX)
+
+ DATA LSTART /.TRUE./
+
+ IF (LSTART) THEN
+* read fit-parameters from file
+ OPEN(47,FILE='inpdata/glpara.dat',STATUS='UNKNOWN')
+ I = 0
+ 1 CONTINUE
+ READ(47,'(A80)') CNAME
+ IF (CNAME.EQ.'STOP') GOTO 2
+ I = I+1
+ READ(CNAME,*) NGLIP(I),NGLIT(I),GLAPPN(I),GLASIG(I),
+ & GLAFIT(1,I),GLAFIT(2,I),GLAFIT(3,I),
+ & GLAFIT(4,I),GLAFIT(5,I)
+ IF (I+1.GT.NGLMAX) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(1X,'PROFBI: warning! array size exceeded - ',
+ & 'program stopped')
+ STOP
+ ENDIF
+ GOTO 1
+ 2 CONTINUE
+ NGLPAR = I
+ LSTART = .FALSE.
+ ENDIF
+
+ NNA = NA
+ NNB = NB
+ IF (NA.GT.NB) THEN
+ NNA = NB
+ NNB = NA
+ ENDIF
+ IDXGLA = 0
+ DO 3 J=1,NGLPAR
+ IF ((NNB.LT.NGLIT(J)).OR.(J.EQ.NGLPAR)) THEN
+ IF (NNB.NE.NGLIT(J-1)) NNB = NGLIT(J-1)
+ DO 4 K=1,J-1
+ IPOINT = J-K
+ IF (J.EQ.NGLPAR) IPOINT = J+1-K
+ IF ((NNA.GT.NGLIP(IPOINT)).OR.
+ & (NNB.NE.NGLIT(IPOINT)).OR.(IPOINT.EQ.1)) THEN
+ IF (IPOINT.EQ.1) IPOINT = 0
+ NATMP = NGLIP(IPOINT+1)
+ IF (PPN.LT.GLAPPN(IPOINT+1)) THEN
+ IDXGLA = IPOINT+1
+ GOTO 6
+ ELSE
+ J1BEG = IPOINT+1
+ J1END = J
+C IF (J.EQ.NGLPAR) THEN
+C J1BEG = IPOINT
+C J1END = J
+C ENDIF
+ DO 5 J1=J1BEG,J1END
+ IF (NGLIP(J1).EQ.NATMP) THEN
+ IF (PPN.LT.GLAPPN(J1)) THEN
+ IDXGLA = J1
+ GOTO 6
+ ENDIF
+ ELSE
+ IDXGLA = J1-1
+ GOTO 6
+ ENDIF
+ 5 CONTINUE
+ IF ((J.EQ.NGLPAR).AND.(PPN.GT.GLAPPN(NGLPAR)))
+ & IDXGLA = NGLPAR
+ ENDIF
+ ENDIF
+ 4 CONTINUE
+ ENDIF
+ 3 CONTINUE
+
+ 6 CONTINUE
+ IF (IDXGLA.EQ.0) THEN
+ WRITE(LOUT,1001) NNA,NNB,PPN
+ 1001 FORMAT(1X,'PROFBI: configuration (NA,NB,PPN = ',
+ & 2I4,F6.0,') not found ')
+ STOP
+ ENDIF
+
+* no interpolation yet available
+ XSPRO(1,1,NTARG) = GLASIG(IDXGLA)
+
+ BSITE(1,1,NTARG,1) = ZERO
+ DO 10 I=2,NSITEB
+ XX = DBLE(I)
+ POLY = GLAFIT(1,IDXGLA)+GLAFIT(2,IDXGLA)*XX+
+ & GLAFIT(3,IDXGLA)*XX**2+GLAFIT(4,IDXGLA)*XX**3+
+ & GLAFIT(5,IDXGLA)*XX**4
+ IF (ABS(POLY).GT.35.0D0) POLY = SIGN(35.0D0,POLY)
+ BSITE(1,1,NTARG,I) = (1.0D0-EXP(-POLY))
+ IF (BSITE(1,1,NTARG,I).LT.ZERO) BSITE(1,1,NTARG,I) = ZERO
+ 10 CONTINUE
+
+ RETURN
+ END
+*
+*===glaube=============================================================*
+*
+CDECK ID>, DT_GLAUBE
+ SUBROUTINE DT_GLAUBE(NA,NB,IJPROJ,B,INTT,INTA,INTB,JS,JT,NIDX)
+
+************************************************************************
+* Calculation of configuartion of interacting nucleons for one event. *
+* NA / NB mass numbers of proj./target nuclei (input) *
+* B impact parameter (output) *
+* INTT total number of wounded nucleons " *
+* INTA / INTB number of wounded nucleons in proj. / target " *
+* JS / JT(i) number of collisions proj. / target nucleon i is *
+* involved (output) *
+* NIDX index of projectile/target material (input)*
+* This is an update of the original routine SHMAKO by J.Ranft/HJM *
+* This version dated 22.03.96 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY14=1.0D-14,
+ & ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+
+ DIMENSION JS(MAXNCL),JT(MAXNCL)
+
+ NTARG = ABS(NIDX)
+
+* get actual energy from /DTLTRA/
+ ECMNOW = UMO
+ Q2 = VIRT
+*
+* new patch for pre-initialized variable projectile/target/energy runs
+ IF (IOGLB.EQ.100) THEN
+ CALL DT_GLBSET(IJPROJ,NA,NB,EPROJ,1)
+*
+* variable energy run, interpolate profile function
+ ELSE
+ I1 = 1
+ I2 = 1
+ RATE = ONE
+ IF (NEBINI.GT.1) THEN
+ IF (ECMNOW.GE.ECMNN(NEBINI)) THEN
+ I1 = NEBINI
+ I2 = NEBINI
+ RATE = ONE
+ ELSEIF (ECMNOW.GT.ECMNN(1)) THEN
+ DO 1 I=2,NEBINI
+ IF (ECMNOW.LT.ECMNN(I)) THEN
+ I1 = I-1
+ I2 = I
+ RATE = (ECMNOW-ECMNN(I1))/(ECMNN(I2)-ECMNN(I1))
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+ 2 CONTINUE
+ ENDIF
+ ENDIF
+ J1 = 1
+ J2 = 1
+ RATQ = ONE
+ IF (NQBINI.GT.1) THEN
+ IF (Q2.GE.Q2G(NQBINI)) THEN
+ J1 = NQBINI
+ J2 = NQBINI
+ RATQ = ONE
+ ELSEIF (Q2.GT.Q2G(1)) THEN
+ DO 3 I=2,NQBINI
+ IF (Q2.LT.Q2G(I)) THEN
+ J1 = I-1
+ J2 = I
+ RATQ = LOG10( Q2/MAX(Q2G(J1),TINY14))/
+ & LOG10(Q2G(J2)/MAX(Q2G(J1),TINY14))
+C RATQ = (Q2-Q2G(J1))/(Q2G(J2)-Q2G(J1))
+ GOTO 4
+ ENDIF
+ 3 CONTINUE
+ 4 CONTINUE
+ ENDIF
+ ENDIF
+
+ DO 5 I=1,KSITEB
+ BSITE(0,1,NTARG,I) = BSITE(I1,J1,NTARG,I)+
+ & RATE*(BSITE(I2,J1,NTARG,I)-BSITE(I1,J1,NTARG,I))+
+ & RATQ*(BSITE(I1,J2,NTARG,I)-BSITE(I1,J1,NTARG,I))+
+ & RATE*RATQ*(BSITE(I2,J2,NTARG,I)-BSITE(I1,J2,NTARG,I)+
+ & BSITE(I1,J1,NTARG,I)-BSITE(I2,J1,NTARG,I))
+ 5 CONTINUE
+ ENDIF
+
+ CALL DT_DIAGR(NA,NB,IJPROJ,B,JS,JT,INTT,INTA,INTB,IDIREC,NIDX)
+ IF (NIDX.LE.-1) THEN
+ RPROJ = RASH(1)
+ RTARG = RBSH(NTARG)
+ ELSE
+ RPROJ = RASH(NTARG)
+ RTARG = RBSH(1)
+ ENDIF
+
+ RETURN
+ END
+*
+*===diagr==============================================================*
+*
+CDECK ID>, DT_DIAGR
+ SUBROUTINE DT_DIAGR(NA,NB,IJPROJ,B,JS,JT,JNT,INTA,INTB,IDIREC,
+ & NIDX)
+
+************************************************************************
+* Based on the original version by Shmakov et al. *
+* This version dated 21.04.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586454D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0,
+ & GEV2FM = 0.1972D0,
+ & ALPHEM = ONE/137.0D0,
+* proton mass
+ & AMP = 0.938D0,
+ & AMP2 = AMP**2,
+* rho0 mass
+ & AMRHO0 = 0.77D0)
+
+ COMPLEX*16 C,CA,CI
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+**PHOJET105a
+C COMMON /CUTOFF/ PTCUT(4),CUTMU(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+**PHOJET112
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+**
+* coordinates of nucleons
+ COMMON /DTNUCO/ PKOO(3,MAXNCL),TKOO(3,MAXNCL)
+* interface between Glauber formalism and DPM
+ COMMON /DTGLIF/ JSSH(MAXNCL),JTSH(MAXNCL),
+ & INTER1(MAXINT),INTER2(MAXINT)
+* statistics: Glauber-formalism
+ COMMON /DTSTA3/ ICWP,ICWT,NCSY,ICWPG,ICWTG,ICIG,IPGLB,ITGLB,NGLB
+* n-n cross section fluctuations
+ PARAMETER (NBINS = 1000)
+ COMMON /DTXSFL/ FLUIXX(NBINS),IFLUCT
+
+ DIMENSION JS(MAXNCL),JT(MAXNCL),
+ & JS0(MAXNCL),JT0(MAXNCL,MAXNCL),
+ & JI1(MAXNCL,MAXNCL),JI2(MAXNCL,MAXNCL),JNT0(MAXNCL)
+ DIMENSION NWA(0:210),NWB(0:210)
+
+ LOGICAL LFIRST
+ DATA LFIRST /.TRUE./
+
+ DATA NTARGO,ICNT /0,0/
+
+ NTARG = ABS(NIDX)
+
+ IF (LFIRST) THEN
+ LFIRST = .FALSE.
+ IF (NCOMPO.EQ.0) THEN
+ NCALL = 0
+ NWAMAX = NA
+ NWBMAX = NB
+ DO 17 I=0,210
+ NWA(I) = 0
+ NWB(I) = 0
+ 17 CONTINUE
+ ENDIF
+ ENDIF
+ IF (NTARG.EQ.-1) THEN
+ IF (NCOMPO.EQ.0) THEN
+ WRITE(LOUT,*) ' DIAGR: distribution of wounded nucleons'
+ WRITE(LOUT,'(8X,A,3I7)') 'NCALL,NWAMAX,NWBMAX = ',
+ & NCALL,NWAMAX,NWBMAX
+ DO 18 I=1,MAX(NWAMAX,NWBMAX)
+ WRITE(LOUT,'(8X,2I7,E12.4,I7,E12.4)')
+ & I,NWA(I),DBLE(NWA(I))/DBLE(NCALL),
+ & NWB(I),DBLE(NWB(I))/DBLE(NCALL)
+ 18 CONTINUE
+ ENDIF
+ RETURN
+ ENDIF
+
+ DCOH = 1.0D10
+ IPNT = 0
+
+ SQ2 = Q2
+ IF (SQ2.LE.ZERO) SQ2 = 0.0001D0
+ S = ECMNOW**2
+ X = SQ2/(S+SQ2-AMP2)
+ XNU = (S+SQ2-AMP2)/(TWO*AMP)
+* photon projectiles: recalculate photon-nucleon amplitude
+ IF (IJPROJ.EQ.7) THEN
+ 15 CONTINUE
+* VDM assumption: mass of V-meson
+ AMV2 = DT_SAM2(SQ2,ECMNOW)
+ AMV = SQRT(AMV2)
+ IF (AMV.GT.2.0D0*PTCUT(1)) GOTO 15
+* check for pointlike interaction
+ CALL DT_POILIK(NB,NTARG,ECMNOW,SQ2,IPNT,RPNT,1)
+**sr 27.10.
+C SIGSH = DT_SIGVP(X,SQ2)/(AMV2+SQ2+RL2)/10.0D0
+ SIGSH = (ONE-RPNT)*DT_SIGVP(X,SQ2)/(AMV2+SQ2+RL2)/10.0D0
+**
+ ROSH = 0.1D0
+ BSLOPE = 2.0D0*(2.0D0+AMRHO0**2/(AMV2+SQ2)
+ & +0.25D0*LOG(S/(AMV2+SQ2)))
+* coherence length
+ IF (ISHAD(3).EQ.1) DCOH = TWO*XNU/(AMV2+SQ2)*GEV2FM
+ ELSEIF ((IJPROJ.LE.12).AND.(IJPROJ.NE.7)) THEN
+ IF (MCGENE.EQ.2) THEN
+ ZERO1 = ZERO
+ CALL DT_PHOXS(IJPROJ,1,ECMNOW,ZERO1,SDUM1,SDUM2,SDUM3,
+ & BSLOPE,0)
+ ELSE
+ BSLOPE = 8.5D0*(1.0D0+0.065D0*LOG(S))
+ ENDIF
+ IF (ECMNOW.LE.3.0D0) THEN
+ ROSH = -0.43D0
+ ELSEIF ((ECMNOW.GT.3.0D0).AND.(ECMNOW.LE.50.D0)) THEN
+ ROSH = -0.63D0+0.175D0*LOG(ECMNOW)
+ ELSEIF (ECMNOW.GT.50.0D0) THEN
+ ROSH = 0.1D0
+ ENDIF
+ ELAB = (S-AAM(IJPROJ)**2-AMP2)/(TWO*AMP)
+ PLAB = SQRT( (ELAB-AAM(IJPROJ))*(ELAB+AAM(IJPROJ)) )
+ IF (MCGENE.EQ.2) THEN
+ ZERO1 = ZERO
+ CALL DT_PHOXS(IJPROJ,1,ECMNOW,ZERO1,SIGSH,SDUM2,SDUM3,
+ & BDUM,0)
+ SIGSH = SIGSH/10.0D0
+ ELSE
+C SIGSH = DT_SHNTOT(IJPROJ,1,ZERO,PLAB)/10.0D0
+ DUMZER = ZERO
+ CALL DT_XSHN(IJPROJ,1,PLAB,DUMZER,SIGSH,SIGEL)
+ SIGSH = SIGSH/10.0D0
+ ENDIF
+ ELSE
+ BSLOPE = 6.0D0*(1.0D0+0.065D0*LOG(S))
+ ROSH = 0.01D0
+ ELAB = (S-AAM(IJPROJ)**2-AMP2)/(TWO*AMP)
+ PLAB = SQRT( (ELAB-AAM(IJPROJ))*(ELAB+AAM(IJPROJ)) )
+C SIGSH = DT_SHNTOT(IJPROJ,1,ZERO,PLAB)/10.0D0
+ DUMZER = ZERO
+ CALL DT_XSHN(IJPROJ,1,PLAB,DUMZER,SIGSH,SIGEL)
+ SIGSH = SIGSH/10.0D0
+ ENDIF
+ GSH = 10.0D0/(TWO*BSLOPE*GEV2MB)
+ GAM = GSH
+ RCA = GAM*SIGSH/TWOPI
+ FCA = -ROSH*RCA
+ CA = DCMPLX(RCA,FCA)
+ CI = DCMPLX(ONE,ZERO)
+
+ 16 CONTINUE
+* impact parameter
+ IF (MCGENE.NE.3) CALL DT_MODB(B,NIDX)
+
+ NTRY = 0
+ 3 CONTINUE
+ NTRY = NTRY+1
+* initializations
+ JNT = 0
+ DO 1 I=1,NA
+ JS(I) = 0
+ 1 CONTINUE
+ DO 2 I=1,NB
+ JT(I) = 0
+ 2 CONTINUE
+ IF (IJPROJ.EQ.7) THEN
+ DO 8 I=1,MAXNCL
+ JS0(I) = 0
+ JNT0(I)= 0
+ DO 9 J=1,NB
+ JT0(I,J) = 0
+ 9 CONTINUE
+ 8 CONTINUE
+ ENDIF
+
+* nucleon configuration
+C IF ((NTARG.NE.NTARGO).OR.(MOD(ICNT,5).EQ.0)) THEN
+ IF ((NTARG.NE.NTARGO).OR.(MOD(ICNT,1).EQ.0)) THEN
+C CALL DT_CONUCL(PKOO,NA,RASH,2)
+C CALL DT_CONUCL(TKOO,NB,RBSH(NTARG),1)
+ IF (NIDX.LE.-1) THEN
+ CALL DT_CONUCL(PKOO,NA,RASH(1),0)
+ CALL DT_CONUCL(TKOO,NB,RBSH(NTARG),0)
+ ELSE
+ CALL DT_CONUCL(PKOO,NA,RASH(NTARG),0)
+ CALL DT_CONUCL(TKOO,NB,RBSH(1),0)
+ ENDIF
+ NTARGO = NTARG
+ ENDIF
+ ICNT = ICNT+1
+
+* LEPTO: pick out one struck nucleon
+ IF (MCGENE.EQ.3) THEN
+ JNT = 1
+ JS(1) = 1
+ IDX = INT(DT_RNDM(X)*NB)+1
+ JT(IDX) = 1
+ B = ZERO
+ GOTO 19
+ ENDIF
+
+ DO 4 INA=1,NA
+* cross section fluctuations
+ AFLUC = ONE
+ IF (IFLUCT.EQ.1) THEN
+ IFLUK = INT((DT_RNDM(X)+0.001D0)*1000.0D0)
+ AFLUC = FLUIXX(IFLUK)
+ ENDIF
+ KK1 = 1
+ KINT = 1
+ DO 5 INB=1,NB
+* photon-projectile: check for supression by coherence length
+ IF (IJPROJ.EQ.7) THEN
+ IF (ABS(TKOO(3,INB)-TKOO(3,KK1)).GT.DCOH) THEN
+ KK1 = INB
+ KINT = KINT+1
+ ENDIF
+ ENDIF
+ QQ1 = B+TKOO(1,INB)-PKOO(1,INA)
+ QQ2 = TKOO(2,INB)-PKOO(2,INA)
+ XY = GAM*(QQ1*QQ1+QQ2*QQ2)
+ IF (XY.LE.15.0D0) THEN
+ C = CI-CA*AFLUC*EXP(-XY)
+ AR = DBLE(C)
+ AI = DIMAG(C)
+ P = AR*AR+AI*AI
+ IF (DT_RNDM(XY).GE.P) THEN
+ JNT = JNT+1
+ IF (IJPROJ.EQ.7) THEN
+ JNT0(KINT) = JNT0(KINT)+1
+ IF (JNT0(KINT).GT.MAXNCL) THEN
+ WRITE(LOUT,1001) MAXNCL
+ 1001 FORMAT(1X,
+ & 'DIAGR: no. of requested interactions',
+ & ' exceeds array dimensions ',I4)
+ STOP
+ ENDIF
+ JS0(KINT) = JS0(KINT)+1
+ JT0(KINT,INB) = JT0(KINT,INB)+1
+ JI1(KINT,JNT0(KINT)) = INA
+ JI2(KINT,JNT0(KINT)) = INB
+ ELSE
+ IF (JNT.GT.MAXINT) THEN
+ WRITE(LOUT,1000) JNT, MAXINT
+ 1000 FORMAT(1X,
+ & 'DIAGR: no. of requested interactions ('
+ & ,I4,') exceeds array dimensions (',I4,')')
+ STOP
+ ENDIF
+ JS(INA) = JS(INA)+1
+ JT(INB) = JT(INB)+1
+ INTER1(JNT) = INA
+ INTER2(JNT) = INB
+ ENDIF
+ ENDIF
+ ENDIF
+ 5 CONTINUE
+ 4 CONTINUE
+
+ IF (JNT.EQ.0) THEN
+ IF (NTRY.LT.500) THEN
+ GOTO 3
+ ELSE
+C WRITE(6,*) ' new impact parameter required (old= ',B,')'
+ GOTO 16
+ ENDIF
+ ENDIF
+
+ IDIREC = 0
+ IF (IJPROJ.EQ.7) THEN
+ K = INT(ONE+DT_RNDM(X)*DBLE(KINT))
+ 10 CONTINUE
+ IF (JNT0(K).EQ.0) THEN
+ K = K+1
+ IF (K.GT.KINT) K = 1
+ GOTO 10
+ ENDIF
+* supress Glauber-cascade by direct photon processes
+ CALL DT_POILIK(NB,NTARG,ECMNOW,SQ2,IPNT,RPNT,2)
+ IF (IPNT.GT.0) THEN
+ JNT = 1
+ JS(1) = 1
+ DO 11 INB=1,NB
+ JT(INB) = JT0(K,INB)
+ IF (JT(INB).GT.0) GOTO 12
+ 11 CONTINUE
+ 12 CONTINUE
+ INTER1(1) = 1
+ INTER2(1) = INB
+ IDIREC = IPNT
+ ELSE
+ JNT = JNT0(K)
+ JS(1) = JS0(K)
+ DO 13 INB=1,NB
+ JT(INB) = JT0(K,INB)
+ 13 CONTINUE
+ DO 14 I=1,JNT
+ INTER1(I) = JI1(K,I)
+ INTER2(I) = JI2(K,I)
+ 14 CONTINUE
+ ENDIF
+ ENDIF
+
+ 19 CONTINUE
+ INTA = 0
+ INTB = 0
+ DO 6 I=1,NA
+ IF (JS(I).NE.0) INTA=INTA+1
+ 6 CONTINUE
+ DO 7 I=1,NB
+ IF (JT(I).NE.0) INTB=INTB+1
+ 7 CONTINUE
+ ICWPG = INTA
+ ICWTG = INTB
+ ICIG = JNT
+ IPGLB = IPGLB+INTA
+ ITGLB = ITGLB+INTB
+ NGLB = NGLB+1
+
+ IF (NCOMPO.EQ.0) THEN
+ NCALL = NCALL+1
+ NWA(INTA) = NWA(INTA)+1
+ NWB(INTB) = NWB(INTB)+1
+ ENDIF
+
+ RETURN
+ END
+*
+*===modb===============================================================*
+*
+CDECK ID>, DT_MODB
+ SUBROUTINE DT_MODB(B,NIDX)
+
+************************************************************************
+* Sampling of impact parameter of collision. *
+* B impact parameter (output) *
+* NIDX index of projectile/target material (input)*
+* Based on the original version by Shmakov et al. *
+* This version dated 21.04.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY15=1.0D-15,ONE=1.0D0,TWO=2.0D0)
+
+ LOGICAL LEFT,LFIRST
+
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+
+ DATA LFIRST /.TRUE./
+
+ NTARG = ABS(NIDX)
+ IF (NIDX.LE.-1) THEN
+ RA = RASH(1)
+ RB = RBSH(NTARG)
+ ELSE
+ RA = RASH(NTARG)
+ RB = RBSH(1)
+ ENDIF
+
+ IF (ICENTR.EQ.2) THEN
+ IF (RA.EQ.RB) THEN
+ BB = DT_RNDM(B)*(0.3D0*RA)**2
+ B = SQRT(BB)
+ ELSEIF(RA.LT.RB)THEN
+ BB = DT_RNDM(B)*1.4D0*(RB-RA)**2
+ B = SQRT(BB)
+ ELSEIF(RA.GT.RB)THEN
+ BB = DT_RNDM(B)*1.4D0*(RA-RB)**2
+ B = SQRT(BB)
+ ENDIF
+ ELSE
+ 9 CONTINUE
+ Y = DT_RNDM(BB)
+ I0 = 1
+ I2 = NSITEB
+ 10 CONTINUE
+ I1 = (I0+I2)/2
+ LEFT = ((BSITE(0,1,NTARG,I0)-Y)
+ & *(BSITE(0,1,NTARG,I1)-Y)).LT.ZERO
+ IF (LEFT) GOTO 20
+ I0 = I1
+ GOTO 30
+ 20 CONTINUE
+ I2 = I1
+ 30 CONTINUE
+ IF (I2-I0-2) 40,50,60
+ 40 CONTINUE
+ I1 = I2+1
+ IF (I1.GT.NSITEB) I1 = I0-1
+ GOTO 70
+ 50 CONTINUE
+ I1 = I0+1
+ GOTO 70
+ 60 CONTINUE
+ GOTO 10
+ 70 CONTINUE
+ X0 = DBLE(I0-1)*BSTEP(NTARG)
+ X1 = DBLE(I1-1)*BSTEP(NTARG)
+ X2 = DBLE(I2-1)*BSTEP(NTARG)
+ Y0 = BSITE(0,1,NTARG,I0)
+ Y1 = BSITE(0,1,NTARG,I1)
+ Y2 = BSITE(0,1,NTARG,I2)
+ 80 CONTINUE
+ B = X0*(Y-Y1)*(Y-Y2)/((Y0-Y1)*(Y0-Y2)+TINY15)+
+ & X1*(Y-Y0)*(Y-Y2)/((Y1-Y0)*(Y1-Y2)+TINY15)+
+ & X2*(Y-Y0)*(Y-Y1)/((Y2-Y0)*(Y2-Y1)+TINY15)
+**sr 5.4.98: shift B by half the bin width to be in agreement with BPROD
+ B = B+0.5D0*BSTEP(NTARG)
+ IF (B.LT.ZERO) B = X1
+ IF (B.GT.BMAX(NTARG)) B = BMAX(NTARG)
+ IF (ICENTR.LT.0) THEN
+ IF (LFIRST) THEN
+ LFIRST = .FALSE.
+ IF (ICENTR.LE.-100) THEN
+ BIMIN = 0.0D0
+ ELSE
+ XSFRAC = 0.0D0
+ ENDIF
+ CALL DT_GETBXS(XSFRAC,BIMIN,BIMAX,NTARG)
+ WRITE(LOUT,1000) RASH(1),RBSH(NTARG),BMAX(NTARG),
+ & BIMIN,BIMAX,XSFRAC*100.0D0,
+ & XSFRAC*XSPRO(1,1,NTARG)
+ 10000 FORMAT(/,1X,'DT_MODB: Biasing in impact parameter',
+ & /,15X,'---------------------------'/,/,4X,
+ & 'average radii of proj / targ :',F10.3,' fm /',
+ & F7.3,' fm',/,4X,'corresp. b_max (4*(r_p+r_t)) :',
+ & F10.3,' fm',/,/,21X,'b_lo / b_hi :',
+ & F10.3,' fm /',F7.3,' fm',/,5X,'percentage of',
+ & ' cross section :',F10.3,' %',/,5X,
+ & 'corresponding cross section :',F10.3,' mb',/)
+ ENDIF
+ IF (ABS(BIMAX-BIMIN).LT.1.0D-3) THEN
+ B = BIMIN
+ ELSE
+ IF ((B.LT.BIMIN).OR.(B.GT.BIMAX)) GOTO 9
+ ENDIF
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+*
+*===shfast=============================================================*
+*
+CDECK ID>, DT_SHFAST
+ SUBROUTINE DT_SHFAST(MODE,PPN,IBACK)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,TINY1=1.0D-1,
+ & ONE=1.0D0,TWO=2.0D0)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+
+ IBACK = 0
+
+ IF (MODE.EQ.2) THEN
+ OPEN(47,FILE='shmakov.out',STATUS='UNKNOWN')
+ WRITE(47,1000) IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG,PPN
+ 1000 FORMAT(1X,8I5,E15.5)
+ WRITE(47,1001) RASH(1),RBSH(1),BMAX(1),BSTEP(1)
+ 1001 FORMAT(1X,4E15.5)
+ WRITE(47,1002) SIGSH,ROSH,GSH
+ 1002 FORMAT(1X,3E15.5)
+ DO 10 I=1,100
+ WRITE(47,'(1X,E15.5)') BSITE(1,1,1,I)
+ 10 CONTINUE
+ WRITE(47,1003) NSITEB,NSTATB,ECMNN(1),XSPRO(1,1,1),BSLOPE
+ 1003 FORMAT(1X,2I10,3E15.5)
+ CLOSE(47)
+ ELSE
+ OPEN(47,FILE='shmakov.out',STATUS='UNKNOWN')
+ READ(47,1000) JT,JTZ,JP,JPZ,JJPROJ,JBPROJ,JJTARG,JBTARG,PP
+ IF ((JT.EQ.IT).AND.(JTZ.EQ.ITZ).AND.(JP.EQ.IP).AND.
+ & (JPZ.EQ.IPZ).AND.(JJPROJ.EQ.IJPROJ).AND.(JBPROJ.EQ.IBPROJ)
+ & .AND.(JJTARG.EQ.IJTARG).AND.(JBTARG.EQ.IBTARG).AND.
+ & (ABS(PP-PPN).LT.(PPN*0.01D0))) THEN
+ READ(47,1001) RASH(1),RBSH(1),BMAX(1),BSTEP(1)
+ READ(47,1002) SIGSH,ROSH,GSH
+ DO 11 I=1,100
+ READ(47,'(1X,E15.5)') BSITE(1,1,1,I)
+ 11 CONTINUE
+ READ(47,1003) NSITEB,NSTATB,ECMNN(1),XSPRO(1,1,1),BSLOPE
+ ELSE
+ IBACK = 1
+ ENDIF
+ CLOSE(47)
+ ENDIF
+
+ RETURN
+ END
+*
+*===poilik=============================================================*
+*
+CDECK ID>, DT_POILIK
+ SUBROUTINE DT_POILIK(NB,NTARG,ECM,VIRT,IPNT,RPNT,MODE)
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY14=1.0D0)
+ PARAMETER (NE = 8)
+
+**PHOJET105a
+C CHARACTER*8 MDLNA
+C COMMON /MODELS/ MDLNA(50),ISWMDL(50),PARMDL(200),IPAMDL(100)
+C PARAMETER (IEETAB=10)
+C COMMON /XSETAB/ SIGTAB(4,70,IEETAB),SIGECM(4,IEETAB),ISIMAX
+**PHOJET110
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+**
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+**sr 22.7.97
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+**
+
+ DATA ECMOLD,Q2OLD /-1.0D0,-1.0D0/
+
+ IF ((ECM.EQ.ECMOLD).AND.(VIRT.EQ.Q2OLD)) GOTO 3
+
+* load cross sections from interpolation table
+ IP = 1
+ IF(ECM.LE.SIGECM(IP,1)) THEN
+ I1 = 1
+ I2 = 1
+ ELSE IF(ECM.LT.SIGECM(IP,ISIMAX)) THEN
+ DO 50 I=2,ISIMAX
+ IF(ECM.LE.SIGECM(IP,I)) GOTO 200
+ 50 CONTINUE
+ 200 CONTINUE
+ I1 = I-1
+ I2 = I
+ ELSE
+ WRITE(LOUT,'(/1X,A,2E12.3)')
+ & 'POILIK:WARNING:TOO HIGH ENERGY',ECM,SIGECM(IP,ISIMAX)
+ I1 = ISIMAX
+ I2 = ISIMAX
+ ENDIF
+ FAC2 = ZERO
+ IF(I1.NE.I2) FAC2=LOG(ECM/SIGECM(IP,I1))
+ & /LOG(SIGECM(IP,I2)/SIGECM(IP,I1))
+ FAC1 = ONE-FAC2
+
+ SIGANO = DT_SANO(ECM)
+
+* cross section dependence on photon virtuality
+ FSUP1 = ZERO
+ DO 150 I=1,3
+ FSUP1 = FSUP1+PARMDL(26+I)*(ONE+VIRT/(4.D0*PARMDL(30+I)))
+ & /(ONE+VIRT/PARMDL(30+I))**2
+ 150 CONTINUE
+ FSUP1 = FSUP1+PARMDL(30)/(ONE+VIRT/PARMDL(34))
+ FAC1 = FAC1*FSUP1
+ FAC2 = FAC2*FSUP1
+ FSUP2 = ONE
+
+ ECMOLD = ECM
+ Q2OLD = VIRT
+
+ 3 CONTINUE
+
+C SIGTOT = FAC2*SIGTAB(IP, 1,I2)+FAC1*SIGTAB(IP, 1,I1)
+ CALL DT_SIGGP(ZERO,VIRT,ECM,ZERO,SIGTOT,DUM1,DUM2)
+ IF (ISHAD(1).EQ.1) THEN
+ SIGDIR = FAC2*SIGTAB(IP,29,I2)+FAC1*SIGTAB(IP,29,I1)
+ ELSE
+ SIGDIR = ZERO
+ ENDIF
+ SIGANO = FSUP1*FSUP2*SIGANO
+ SIGTOT = SIGTOT-SIGDIR-SIGANO
+ SIGDIR = SIGDIR/(FSUP1*FSUP2)
+ SIGANO = SIGANO/(FSUP1*FSUP2)
+ SIGTOT = SIGTOT+SIGDIR+SIGANO
+
+ RR = DT_RNDM(SIGTOT)
+ IF (RR.LT.SIGDIR/SIGTOT) THEN
+ IPNT = 1
+ ELSEIF ((RR.GE.SIGDIR/SIGTOT).AND.
+ & (RR.LT.(SIGDIR+SIGANO)/SIGTOT)) THEN
+ IPNT = 2
+ ELSE
+ IPNT = 0
+ ENDIF
+ RPNT = (SIGDIR+SIGANO)/SIGTOT
+C WRITE(LOUT,'(I3,2F15.5)') ISHAD(1),FAC1,FAC2
+C WRITE(LOUT,'(I3,2F15.5)') MODE,SIGDIR,SIGANO
+C WRITE(LOUT,'(I3,4F15.5)') MODE,SIGDIR+SIGANO,SIGTOT,RPNT,ECM
+C WRITE(LOUT,'(1X,6E12.4)') ECM,VIRT,SIGTOT,SIGDIR,SIGANO,RPNT
+ IF (MODE.EQ.1) RETURN
+
+**sr 22.7.97
+ K1 = 1
+ K2 = 1
+ RATE = ZERO
+ IF (ECM.GE.ECMNN(NEBINI)) THEN
+ K1 = NEBINI
+ K2 = NEBINI
+ RATE = ONE
+ ELSEIF (ECM.GT.ECMNN(1)) THEN
+ DO 10 I=2,NEBINI
+ IF (ECM.LT.ECMNN(I)) THEN
+ K1 = I-1
+ K2 = I
+ RATE = (ECM-ECMNN(K1))/(ECMNN(K2)-ECMNN(K1))
+ GOTO 11
+ ENDIF
+ 10 CONTINUE
+ 11 CONTINUE
+ ENDIF
+ J1 = 1
+ J2 = 1
+ RATQ = ZERO
+ IF (NQBINI.GT.1) THEN
+ IF (VIRT.GE.Q2G(NQBINI)) THEN
+ J1 = NQBINI
+ J2 = NQBINI
+ RATQ = ONE
+ ELSEIF (VIRT.GT.Q2G(1)) THEN
+ DO 12 I=2,NQBINI
+ IF (VIRT.LT.Q2G(I)) THEN
+ J1 = I-1
+ J2 = I
+ RATQ = LOG10( VIRT/MAX(Q2G(J1),TINY14))/
+ & LOG10(Q2G(J2)/MAX(Q2G(J1),TINY14))
+ GOTO 13
+ ENDIF
+ 12 CONTINUE
+ 13 CONTINUE
+ ENDIF
+ ENDIF
+ SGA = XSPRO(K1,J1,NTARG)+
+ & RATE*(XSPRO(K2,J1,NTARG)-XSPRO(K1,J1,NTARG))+
+ & RATQ*(XSPRO(K1,J2,NTARG)-XSPRO(K1,J1,NTARG))+
+ & RATE*RATQ*(XSPRO(K2,J2,NTARG)-XSPRO(K1,J2,NTARG)+
+ & XSPRO(K1,J1,NTARG)-XSPRO(K2,J1,NTARG))
+ SDI = DBLE(NB)*SIGDIR
+ SAN = DBLE(NB)*SIGANO
+ SPL = SDI+SAN
+ RR = DT_RNDM(SPL)
+ IF (RR.LT.SDI/SGA) THEN
+ IPNT = 1
+ ELSEIF ((RR.GE.SDI/SGA).AND.
+ & (RR.LT.SPL/SGA)) THEN
+ IPNT = 2
+ ELSE
+ IPNT = 0
+ ENDIF
+ RPNT = SPL/SGA
+C WRITE(LOUT,'(I3,4F15.5)') MODE,SPL,SGA,RPNT,ECM
+**
+
+ RETURN
+ END
+*
+*===glbini=============================================================*
+*
+CDECK ID>, DT_GLBINI
+ SUBROUTINE DT_GLBINI(WHAT)
+
+************************************************************************
+* Pre-initialization of profile function *
+* This version dated 28.11.00 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY14=1.D-14)
+
+ LOGICAL LCMS
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+* number of data sets other than protons and nuclei
+* at the moment = 2 (pions and kaons)
+ PARAMETER (MAXOFF=2)
+ DIMENSION IJPINI(5),IOFFST(25)
+ DATA IJPINI / 13, 15, 0, 0, 0/
+* Glauber data-set to be used for hadron projectiles
+* (0=proton, 1=pion, 2=kaon)
+ DATA (IOFFST(K),K=1,25) /
+ & 0, 0,-1,-1,-1,-1,-1, 0, 0,-1,-1, 2, 1, 1, 2, 2, 0, 0, 2, 0,
+ & 0, 0, 1, 2, 2/
+* Acceptance interval for target nucleus mass
+ PARAMETER (KBACC = 6)
+
+ PARAMETER (MAXMSS = 100)
+ DIMENSION IASAV(MAXMSS),IBSAV(MAXMSS)
+ DIMENSION WHAT(6)
+
+ DATA JPEACH,JPSTEP / 18, 5 /
+
+* temporary patch until fix has been implemented in phojet:
+* maximum energy for pion projectile
+ DATA ECMXPI / 100000.0D0 /
+*
+*--------------------------------------------------------------------------
+* general initializations
+*
+* steps in projectile mass number for initialization
+ IF (WHAT(4).GT.ZERO) JPEACH = INT(WHAT(4))
+ IF (WHAT(5).GT.ZERO) JPSTEP = INT(WHAT(5))
+*
+* energy range and binning
+ ELO = ABS(WHAT(1))
+ EHI = ABS(WHAT(2))
+ IF (ELO.GT.EHI) ELO = EHI
+ NEBIN = MAX(INT(WHAT(3)),1)
+ IF (ELO.EQ.EHI) NEBIN = 0
+ LCMS = (WHAT(1).LT.ZERO).OR.(WHAT(2).LT.ZERO)
+ IF (LCMS) THEN
+ ECMINI = EHI
+ ELSE
+ ECMINI = SQRT(AAM(IJPROJ)**2+AAM(IJTARG)**2
+ & +2.0D0*AAM(IJTARG)*EHI)
+ ENDIF
+*
+* default arguments for Glauber-routine
+ XI = ZERO
+ Q2I = ZERO
+*
+* initialize nuclear parameters, etc.
+
+ CALL BERTTP
+ CALL INCINI
+
+*
+* open Glauber-data output file
+ IDX = INDEX(CGLB,' ')
+ K = 12
+ IF (IDX.GT.1) K = IDX-1
+ OPEN(LDAT,FILE=CGLB(1:K)//'.glb',STATUS='UNKNOWN')
+*
+*--------------------------------------------------------------------------
+* Glauber-initialization for proton and nuclei projectiles
+*
+* initialize phojet for proton-proton interactions
+ ELAB = ZERO
+ PLAB = ZERO
+ CALL DT_LTINI(IJPROJ,IJTARG,ELAB,PLAB,ECMINI,1)
+ CALL DT_PHOINI
+*
+* record projectile masses
+ NASAV = 0
+ NPROJ = MIN(IP,JPEACH)
+ DO 10 KPROJ=1,NPROJ
+ NASAV = NASAV+1
+ IF (NASAV.GT.MAXMSS) STOP ' GLBINI: NASAV > MAXMSS ! '
+ IASAV(NASAV) = KPROJ
+ 10 CONTINUE
+ IF (IP.GT.JPEACH) THEN
+ NPROJ = DBLE(IP-JPEACH)/DBLE(JPSTEP)
+ IF (NPROJ.EQ.0) THEN
+ NASAV = NASAV+1
+ IF (NASAV.GT.MAXMSS) STOP ' GLBINI: NASAV > MAXMSS ! '
+ IASAV(NASAV) = IP
+ ELSE
+ DO 11 IPROJ=1,NPROJ
+ KPROJ = JPEACH+IPROJ*JPSTEP
+ NASAV = NASAV+1
+ IF (NASAV.GT.MAXMSS) STOP ' GLBINI: NASAV > MAXMSS ! '
+ IASAV(NASAV) = KPROJ
+ 11 CONTINUE
+ IF (KPROJ.LT.IP) THEN
+ NASAV = NASAV+1
+ IF (NASAV.GT.MAXMSS) STOP ' GLBINI: NASAV > MAXMSS ! '
+ IASAV(NASAV) = IP
+ ENDIF
+ ENDIF
+ ENDIF
+*
+* record target masses
+ NBSAV = 0
+ NTARG = 1
+ IF (NCOMPO.GT.0) NTARG = NCOMPO
+ DO 12 ITARG=1,NTARG
+ NBSAV = NBSAV+1
+ IF (NBSAV.GT.MAXMSS) STOP ' GLBINI: NBSAV > MAXMSS ! '
+ IF (NCOMPO.GT.0) THEN
+ IBSAV(NBSAV) = IEMUMA(ITARG)
+ ELSE
+ IBSAV(NBSAV) = IT
+ ENDIF
+ 12 CONTINUE
+*
+* print masses
+ WRITE(LDAT,1000) NEBIN,': ',SIGN(ELO,WHAT(1)),SIGN(EHI,WHAT(2))
+ 1000 FORMAT(I4,A,1P,2E13.5)
+ NLINES = DBLE(NASAV)/18.0D0
+ IF (NLINES.GT.0) THEN
+ DO 13 I=1,NLINES
+ IF (I.EQ.1) THEN
+ WRITE(LDAT,'(I4,A,18I4)')NASAV,': ',(IASAV(J),J=1,18)
+ ELSE
+ WRITE(LDAT,'(6X,18I4)') (IASAV(J),J=18*I-17,18*I)
+ ENDIF
+ 13 CONTINUE
+ ENDIF
+ I0 = 18*NLINES+1
+ IF (I0.LE.NASAV) THEN
+ IF (I0.EQ.1) THEN
+ WRITE(LDAT,'(I4,A,18I4)')NASAV,': ',(IASAV(J),J=I0,NASAV)
+ ELSE
+ WRITE(LDAT,'(6X,18I4)') (IASAV(J),J=I0,NASAV)
+ ENDIF
+ ENDIF
+ NLINES = DBLE(NBSAV)/18.0D0
+ IF (NLINES.GT.0) THEN
+ DO 14 I=1,NLINES
+ IF (I.EQ.1) THEN
+ WRITE(LDAT,'(I4,A,18I4)')NBSAV,': ',(IBSAV(J),J=1,18)
+ ELSE
+ WRITE(LDAT,'(6X,18I4)') (IBSAV(J),J=18*I-17,18*I)
+ ENDIF
+ 14 CONTINUE
+ ENDIF
+ I0 = 18*NLINES+1
+ IF (I0.LE.NBSAV) THEN
+ IF (I0.EQ.1) THEN
+ WRITE(LDAT,'(I4,A,18I4)')NBSAV,': ',(IBSAV(J),J=I0,NBSAV)
+ ELSE
+ WRITE(LDAT,'(6X,18I4)') (IBSAV(J),J=I0,NBSAV)
+ ENDIF
+ ENDIF
+*
+* calculate Glauber-data for each energy and mass combination
+*
+* loop over energy bins
+ ELO = LOG10(ELO)
+ EHI = LOG10(EHI)
+ DEBIN = (EHI-ELO)/MAX(DBLE(NEBIN),ONE)
+ DO 1 IE=1,NEBIN+1
+ E = ELO+DBLE(IE-1)*DEBIN
+ E = 10**E
+ IF (LCMS) THEN
+ E = MAX(2.0D0*AAM(IJPROJ)+0.1D0,E)
+ ECM = E
+ ELSE
+ PLAB = ZERO
+ ECM = ZERO
+ E = MAX(AAM(IJPROJ)+0.1D0,E)
+ CALL DT_LTINI(IJPROJ,IJTARG,E,PLAB,ECM,0)
+ ENDIF
+*
+* loop over projectile and target masses
+ DO 2 ITARG=1,NBSAV
+ DO 3 IPROJ=1,NASAV
+ CALL DT_XSGLAU(IASAV(IPROJ),IBSAV(ITARG),IJPROJ,
+ & XI,Q2I,ECM,1,1,-1)
+ 3 CONTINUE
+ 2 CONTINUE
+*
+ 1 CONTINUE
+*
+*--------------------------------------------------------------------------
+* Glauber-initialization for pion, kaon, ... projectiles
+*
+ DO 6 IJ=1,MAXOFF
+*
+* initialize phojet for this interaction
+ ELAB = ZERO
+ PLAB = ZERO
+ IJPROJ = IJPINI(IJ)
+ IP = 1
+ IPZ = 1
+*
+* temporary patch until fix has been implemented in phojet:
+ IF (ECMINI.GT.ECMXPI) THEN
+ CALL DT_LTINI(IJPROJ,IJTARG,ELAB,PLAB,ECMXPI,1)
+ ELSE
+ CALL DT_LTINI(IJPROJ,IJTARG,ELAB,PLAB,ECMINI,1)
+ ENDIF
+ CALL DT_PHOINI
+*
+* calculate Glauber-data for each energy and mass combination
+*
+* loop over energy bins
+ DO 4 IE=1,NEBIN+1
+ E = ELO+DBLE(IE-1)*DEBIN
+ E = 10**E
+ IF (LCMS) THEN
+ E = MAX(2.0D0*AAM(IJPROJ)+TINY14,E)
+ ECM = E
+ ELSE
+ PLAB = ZERO
+ ECM = ZERO
+ E = MAX(AAM(IJPROJ)+TINY14,E)
+ CALL DT_LTINI(IJPROJ,IJTARG,E,PLAB,ECM,0)
+ ENDIF
+*
+* loop over projectile and target masses
+ DO 5 ITARG=1,NBSAV
+ CALL DT_XSGLAU(1,IBSAV(ITARG),IJPROJ,XI,Q2I,ECM,1,1,-1)
+ 5 CONTINUE
+*
+ 4 CONTINUE
+*
+ 6 CONTINUE
+
+*--------------------------------------------------------------------------
+* close output unit(s), etc.
+*
+ CLOSE(LDAT)
+
+ RETURN
+ END
+*
+*===glbset=============================================================*
+*
+CDECK ID>, DT_GLBSET
+ SUBROUTINE DT_GLBSET(IDPROJ,NA,NB,ELAB,MODE)
+************************************************************************
+* Interpolation of pre-initialized profile functions *
+* This version dated 28.11.00 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0)
+
+ LOGICAL LCMS,LREAD,LFRST1,LFRST2
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: parameters
+ COMMON /DTGLAM/ RASH(NCOMPX),RBSH(NCOMPX),
+ & BMAX(NCOMPX),BSTEP(NCOMPX),
+ & SIGSH,ROSH,GSH,BSITE(0:NEB,NQB,NCOMPX,KSITEB),
+ & NSITEB,NSTATB
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* number of data sets other than protons and nuclei
+* at the moment = 2 (pions and kaons)
+ PARAMETER (MAXOFF=2)
+ DIMENSION IJPINI(5),IOFFST(25)
+ DATA IJPINI / 13, 15, 0, 0, 0/
+* Glauber data-set to be used for hadron projectiles
+* (0=proton, 1=pion, 2=kaon)
+ DATA (IOFFST(K),K=1,25) /
+ & 0, 0,-1,-1,-1,-1,-1, 0, 0,-1,-1, 2, 1, 1, 2, 2, 0, 0, 2, 0,
+ & 0, 0, 1, 2, 2/
+* Acceptance interval for target nucleus mass
+ PARAMETER (KBACC = 6)
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+
+ PARAMETER (MAXSET=5000,
+ & MAXBIN=100)
+ DIMENSION XSIG(MAXSET,6),XERR(MAXSET,6),BPROFL(MAXSET,KSITEB)
+ DIMENSION IABIN(MAXBIN),IBBIN(MAXBIN),XS(6),XE(6),
+ & BPRO0(KSITEB),BPRO1(KSITEB),BPRO(KSITEB),
+ & IAIDX(10)
+
+ DATA LREAD,LFRST1,LFRST2 /.FALSE.,.TRUE.,.TRUE./
+*
+* read data from file
+*
+ IF (MODE.EQ.0) THEN
+
+ IF (LREAD) RETURN
+
+ DO 1 I=1,MAXSET
+ DO 2 J=1,6
+ XSIG(I,J) = ZERO
+ XERR(I,J) = ZERO
+ 2 CONTINUE
+ DO 3 J=1,KSITEB
+ BPROFL(I,J) = ZERO
+ 3 CONTINUE
+ 1 CONTINUE
+ DO 4 I=1,MAXBIN
+ IABIN(I) = 0
+ IBBIN(I) = 0
+ 4 CONTINUE
+ DO 5 I=1,KSITEB
+ BPRO0(I) = ZERO
+ BPRO1(I) = ZERO
+ BPRO(I) = ZERO
+ 5 CONTINUE
+
+ IDX = INDEX(CGLB,' ')
+ K = 12
+ IF (IDX.GT.1) K = IDX-1
+ OPEN(LDAT,FILE=CGLB(1:K)//'.glb',STATUS='UNKNOWN')
+ WRITE(LOUT,1000) CGLB(1:K)//'.glb'
+ 1000 FORMAT(/,' GLBSET: impact parameter distributions read from ',
+ & 'file ',A12,/)
+*
+* read binning information
+ READ(LDAT,'(I4,2X,2E13.5)') NEBIN,ELO,EHI
+* return lower energy threshold to Fluka-interface
+ ELAB = ELO
+ LCMS = ELO.LT.ZERO
+ WRITE(LOUT,'(1X,A)') ' equidistant logarithmic energy binning:'
+ IF (LCMS) THEN
+ WRITE(LOUT,1001) '(cms)',ABS(ELO),ABS(EHI),NEBIN
+ ELSE
+ WRITE(LOUT,1001) '(lab)',ABS(ELO),ABS(EHI),NEBIN
+ ENDIF
+ 1001 FORMAT(2X,A5,' E_lo = ',1P,E9.3,' E_hi = ',1P,E9.3,4X,
+ & 'No. of bins:',I5,/)
+ ELO = LOG10(ABS(ELO))
+ EHI = LOG10(ABS(EHI))
+ DEBIN = (EHI-ELO)/ABS(DBLE(NEBIN))
+ WRITE(LOUT,'(/,1X,A)') ' projectiles: (mass number)'
+ READ(LDAT,'(I4,2X,18I4)') NABIN,(IABIN(J),J=1,18)
+ IF (NABIN.LT.18) THEN
+ WRITE(LOUT,'(6X,18I4)') (IABIN(J),J=1,NABIN)
+ ELSE
+ WRITE(LOUT,'(6X,18I4)') (IABIN(J),J=1,18)
+ ENDIF
+ IF (NABIN.GT.MAXBIN) STOP ' GLBSET: NABIN > MAXBIN !'
+ IF (NABIN.GT.18) THEN
+ NLINES = DBLE(NABIN-18)/18.0D0
+ IF (NLINES.GT.0) THEN
+ DO 7 I=1,NLINES
+ I0 = 18*(I+1)-17
+ READ(LDAT,'(6X,18I4)') (IABIN(J),J=I0,I0+17)
+ WRITE(LOUT,'(6X,18I4)') (IABIN(J),J=I0,I0+17)
+ 7 CONTINUE
+ ENDIF
+ I0 = 18*(NLINES+1)+1
+ IF (I0.LE.NABIN) THEN
+ READ(LDAT,'(6X,18I4)') (IABIN(J),J=I0,NABIN)
+ WRITE(LOUT,'(6X,18I4)') (IABIN(J),J=I0,NABIN)
+ ENDIF
+ ENDIF
+ WRITE(LOUT,'(/,1X,A)') ' targets: (mass number)'
+ READ(LDAT,'(I4,2X,18I4)') NBBIN,(IBBIN(J),J=1,18)
+ IF (NBBIN.LT.18) THEN
+ WRITE(LOUT,'(6X,18I4)') (IBBIN(J),J=1,NBBIN)
+ ELSE
+ WRITE(LOUT,'(6X,18I4)') (IBBIN(J),J=1,18)
+ ENDIF
+ IF (NBBIN.GT.MAXBIN) STOP ' GLBSET: NBBIN > MAXBIN !'
+ IF (NBBIN.GT.18) THEN
+ NLINES = DBLE(NBBIN-18)/18.0D0
+ IF (NLINES.GT.0) THEN
+ DO 8 I=1,NLINES
+ I0 = 18*(I+1)-17
+ READ(LDAT,'(6X,18I4)') (IBBIN(J),J=I0,I0+17)
+ WRITE(LOUT,'(6X,18I4)') (IBBIN(J),J=I0,I0+17)
+ 8 CONTINUE
+ ENDIF
+ I0 = 18*(NLINES+1)+1
+ IF (I0.LE.NBBIN) THEN
+ READ(LDAT,'(6X,18I4)') (IBBIN(J),J=I0,NBBIN)
+ WRITE(LOUT,'(6X,18I4)') (IBBIN(J),J=I0,NBBIN)
+ ENDIF
+ ENDIF
+* number of data sets to follow in the Glauber data file
+* this variable is used for checks of consistency of projectile
+* and target mass configurations given in header of Glauber data
+* file and the data-sets which follow in this file
+ NSET0 = (NEBIN+1)*(NABIN+MAXOFF)*NBBIN
+*
+* read profile function data
+ NSET = 0
+ NAIDX = 0
+ IPOLD = 0
+ 10 CONTINUE
+ NSET = NSET+1
+ IF (NSET.GT.MAXSET) STOP ' GLBSET: NSET > MAXSET ! '
+ READ(LDAT,1002,END=100) IP,IA,IB,ISTATB,ISITEB,ECM
+ 1002 FORMAT(5I10,E15.5)
+ IF ((IP.NE.1).AND.(IP.NE.IPOLD)) THEN
+ NAIDX = NAIDX+1
+ IF (NAIDX.GT.10) STOP ' GLBSET: NAIDX > 10 !'
+ IAIDX(NAIDX) = IP
+ IPOLD = IP
+ ENDIF
+ READ(LDAT,'(6E12.5)') (XSIG(NSET,I),I=1,6)
+ READ(LDAT,'(6E12.5)') (XERR(NSET,I),I=1,6)
+ NLINES = INT(DBLE(ISITEB)/7.0D0)
+ IF (NLINES.GT.0) THEN
+ DO 11 I=1,NLINES
+ READ(LDAT,'(7E11.4)') (BPROFL(NSET,J),J=7*I-6,7*I)
+ 11 CONTINUE
+ ENDIF
+ I0 = 7*NLINES+1
+ IF (I0.LE.ISITEB)
+ & READ(LDAT,'(7E11.4)') (BPROFL(NSET,J),J=I0,ISITEB)
+ GOTO 10
+ 100 CONTINUE
+ NSET = NSET-1
+ IF (NSET.NE.NSET0) STOP ' GLBSET: NSET.NE.NSET0 !'
+ WRITE(LOUT,'(/,1X,A)')
+ & ' projectiles other than protons and nuclei: (particle index)'
+ IF (NAIDX.GT.0) THEN
+ WRITE(LOUT,'(6X,18I4)') (IAIDX(J),J=1,NAIDX)
+ ELSE
+ WRITE(LOUT,'(6X,A)') 'none'
+ ENDIF
+*
+ CLOSE(LDAT)
+ WRITE(LOUT,*)
+ LREAD = .TRUE.
+
+ IF (NCOMPO.EQ.0) THEN
+ DO 12 J=1,NBBIN
+ NCOMPO = NCOMPO+1
+ IEMUMA(NCOMPO) = IBBIN(J)
+ IEMUCH(NCOMPO) = IEMUMA(NCOMPO)/2
+ EMUFRA(NCOMPO) = 1.0D0
+ 12 CONTINUE
+ IEMUL = 1
+ ENDIF
+*
+* calculate profile function for certain set of parameters
+*
+ ELSE
+
+c write(*,*) 'glbset called for ',IDPROJ,NA,NB,ELAB,MODE
+*
+* check for type of projectile and set index-offset to entry in
+* Glauber data array correspondingly
+ IF (IDPROJ.GT.25) STOP ' GLBSET: IDPROJ > 25 !'
+ IF (IOFFST(IDPROJ).EQ.-1) THEN
+ STOP ' GLBSET: no data for this projectile !'
+ ELSEIF (IOFFST(IDPROJ).GT.0) THEN
+ IDXOFF = (NEBIN+1)*(NABIN+IOFFST(IDPROJ)-1)*NBBIN
+ ELSE
+ IDXOFF = 0
+ ENDIF
+*
+* get energy bin and interpolation factor
+ IF (LCMS) THEN
+ E = SQRT(AAM(IDPROJ)**2+AAM(1)**2+2.0D0*AAM(1)*ELAB)
+ ELSE
+ E = ELAB
+ ENDIF
+ E = LOG10(E)
+ IF (E.LT.ELO) THEN
+ IF (LFRST1) THEN
+ WRITE(LOUT,*) ' GLBSET: Too low energy! (E_lo,E) ',ELO,E
+ LFRST1 = .FALSE.
+ ENDIF
+ E = ELO
+ ENDIF
+ IF (E.GT.EHI) THEN
+ IF (LFRST2) THEN
+ WRITE(LOUT,*) ' GLBSET: Too high energy! (E_hi,E) ',EHI,E
+ LFRST2 = .FALSE.
+ ENDIF
+ E = EHI
+ ENDIF
+ IE0 = (E-ELO)/DEBIN+1
+ IE1 = IE0+1
+ FACE = (E-(ELO+DBLE(IE0-1)*DEBIN))/DEBIN
+*
+* get target nucleus index
+ KB = 0
+ NBACC = KBACC
+ DO 20 I=1,NBBIN
+ NBDIFF = ABS(NB-IBBIN(I))
+ IF (NB.EQ.IBBIN(I)) THEN
+ KB = I
+ GOTO 21
+ ELSEIF (NBDIFF.LE.NBACC) THEN
+ KB = I
+ NBACC = NBDIFF
+ ENDIF
+ 20 CONTINUE
+ IF (KB.NE.0) GOTO 21
+ WRITE(LOUT,*) ' GLBSET: data not found for target ',NB
+ STOP
+ 21 CONTINUE
+*
+* get projectile nucleus bin and interpolation factor
+ KA0 = 0
+ KA1 = 0
+ FACNA = 0
+ IF (IDXOFF.GT.0) THEN
+ KA0 = 1
+ KA1 = 1
+ KABIN = 1
+ ELSE
+ IF (NA.GT.IABIN(NABIN)) STOP ' GLBSET: NA > IABIN(NABIN) !'
+ DO 22 I=1,NABIN
+ IF (NA.EQ.IABIN(I)) THEN
+ KA0 = I
+ KA1 = I
+ GOTO 23
+ ELSEIF (NA.LT.IABIN(I)) THEN
+ KA0 = I-1
+ KA1 = I
+ GOTO 23
+ ENDIF
+ 22 CONTINUE
+ WRITE(LOUT,*) ' GLBSET: data not found for projectile ',NA
+ STOP
+ 23 CONTINUE
+ IF (KA0.NE.KA1)
+ & FACNA = DBLE(NA-IABIN(KA0))/DBLE(IABIN(KA1)-IABIN(KA0))
+ KABIN = NABIN
+ ENDIF
+*
+* interpolate profile functions for interactions ka0-kb and ka1-kb
+* for energy E separately
+ IDX0 = IDXOFF+1+(IE0-1)*KABIN*NBBIN+(KB-1)*KABIN+(KA0-1)
+ IDX1 = IDXOFF+1+(IE1-1)*KABIN*NBBIN+(KB-1)*KABIN+(KA0-1)
+ IDY0 = IDXOFF+1+(IE0-1)*KABIN*NBBIN+(KB-1)*KABIN+(KA1-1)
+ IDY1 = IDXOFF+1+(IE1-1)*KABIN*NBBIN+(KB-1)*KABIN+(KA1-1)
+ DO 30 I=1,ISITEB
+ BPRO0(I) = BPROFL(IDX0,I)
+ & +FACE*(BPROFL(IDX1,I)-BPROFL(IDX0,I))
+ BPRO1(I) = BPROFL(IDY0,I)
+ & +FACE*(BPROFL(IDY1,I)-BPROFL(IDY0,I))
+ 30 CONTINUE
+ RADB = DT_RNCLUS(NB)
+ BSTP0 = 2.0D0*(DT_RNCLUS(IABIN(KA0))+RADB)/DBLE(ISITEB-1)
+ BSTP1 = 2.0D0*(DT_RNCLUS(IABIN(KA1))+RADB)/DBLE(ISITEB-1)
+*
+* interpolate cross sections for energy E and projectile mass
+ DO 31 I=1,6
+ XS0 = XSIG(IDX0,I)+FACE*(XSIG(IDX1,I)-XSIG(IDX0,I))
+ XS1 = XSIG(IDY0,I)+FACE*(XSIG(IDY1,I)-XSIG(IDY0,I))
+ XS(I) = XS0+FACNA*(XS1-XS0)
+ XE0 = XERR(IDX0,I)+FACE*(XERR(IDX1,I)-XERR(IDX0,I))
+ XE1 = XERR(IDY0,I)+FACE*(XERR(IDY1,I)-XERR(IDY0,I))
+ XE(I) = XE0+FACNA*(XE1-XE0)
+ 31 CONTINUE
+*
+* interpolate between ka0 and ka1
+ RADA = DT_RNCLUS(NA)
+ BMX = 2.0D0*(RADA+RADB)
+ BSTP = BMX/DBLE(ISITEB-1)
+ BPRO(1) = ZERO
+ DO 32 I=1,ISITEB-1
+ B = DBLE(I)*BSTP
+*
+* calculate values of profile functions at B
+ IDX0 = B/BSTP0+1
+ IF (IDX0.GT.ISITEB) IDX0 = ISITEB
+ IDX1 = MIN(IDX0+1,ISITEB)
+ FACB = (B-DBLE(IDX0-1)*BSTP0)/BSTP0
+ BPR0 = BPRO0(IDX0)+FACB*(BPRO0(IDX1)-BPRO0(IDX0))
+ IDX0 = B/BSTP1+1
+ IF (IDX0.GT.ISITEB) IDX0 = ISITEB
+ IDX1 = MIN(IDX0+1,ISITEB)
+ FACB = (B-DBLE(IDX0-1)*BSTP1)/BSTP1
+ BPR1 = BPRO1(IDX0)+FACB*(BPRO1(IDX1)-BPRO1(IDX0))
+*
+ BPRO(I+1) = BPR0+FACNA*(BPR1-BPR0)
+ 32 CONTINUE
+*
+* fill common dtglam
+ NSITEB = ISITEB
+ RASH(1) = RADA
+ RBSH(1) = RADB
+ BMAX(1) = BMX
+ BSTEP(1) = BSTP
+ DO 33 I=1,KSITEB
+ BSITE(0,1,1,I) = BPRO(I)
+ 33 CONTINUE
+*
+* fill common dtglxs
+ XSTOT(1,1,1) = XS(1)
+ XSELA(1,1,1) = XS(2)
+ XSQEP(1,1,1) = XS(3)
+ XSQET(1,1,1) = XS(4)
+ XSQE2(1,1,1) = XS(5)
+ XSPRO(1,1,1) = XS(6)
+ XETOT(1,1,1) = XE(1)
+ XEELA(1,1,1) = XE(2)
+ XEQEP(1,1,1) = XE(3)
+ XEQET(1,1,1) = XE(4)
+ XEQE2(1,1,1) = XE(5)
+ XEPRO(1,1,1) = XE(6)
+
+ ENDIF
+
+ RETURN
+ END
+*
+*===xksamp=============================================================*
+*
+CDECK ID>, DT_XKSAMP
+ SUBROUTINE DT_XKSAMP(NN,ECM)
+
+************************************************************************
+* Sampling of parton x-values and chain system for one interaction. *
+* processed by S. Roesler, 9.8.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ZERO=0.0D0,OHALF=0.5D0,ONE=1.0D0)
+ SAVE
+
+ PARAMETER (
+* lower cuts for (valence-sea/sea-valence) chain masses
+* antiquark-quark (u/d-sea quark) (s-sea quark)
+ & AMIU = 0.5D0, AMIS = 0.8D0,
+* quark-diquark (u/d-sea quark) (s-sea quark)
+ & AMAU = 2.6D0, AMAS = 2.6D0,
+* maximum lower valence-x threshold
+ & XVMAX = 0.98D0,
+* fraction of sea-diquarks sampled out of sea-partons
+**test
+C & FRCDIQ = 0.9D0,
+**
+*
+ & SQMA = 0.7D0,
+*
+* maximum number of trials to generate x's for the required number
+* of sea quark pairs for a given hadron
+C & NSEATY = 12
+ & NSEATY = 3
+ & )
+
+ LOGICAL ZUOVP,ZUOSP,ZUOVT,ZUOST,INTLO
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* interface between Glauber formalism and DPM
+ COMMON /DTGLIF/ JSSH(MAXNCL),JTSH(MAXNCL),
+ & INTER1(MAXINT),INTER2(MAXINT)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* threshold values for x-sampling (DTUNUC 1.x)
+ COMMON /DTXCUT/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ & SSMIMQ,VVMTHR
+* x-values of partons (DTUNUC 1.x)
+ COMMON /DTDPMX/ XPVQ(MAXVQU),XPVD(MAXVQU),
+ & XTVQ(MAXVQU),XTVD(MAXVQU),
+ & XPSQ(MAXSQU),XPSAQ(MAXSQU),
+ & XTSQ(MAXSQU),XTSAQ(MAXSQU)
+* flavors of partons (DTUNUC 1.x)
+ COMMON /DTDPMF/ IPVQ(MAXVQU),IPPV1(MAXVQU),IPPV2(MAXVQU),
+ & ITVQ(MAXVQU),ITTV1(MAXVQU),ITTV2(MAXVQU),
+ & IPSQ(MAXSQU),IPSQ2(MAXSQU),
+ & IPSAQ(MAXSQU),IPSAQ2(MAXSQU),
+ & ITSQ(MAXSQU),ITSQ2(MAXSQU),
+ & ITSAQ(MAXSQU),ITSAQ2(MAXSQU),
+ & KKPROJ(MAXVQU),KKTARG(MAXVQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPMI/ NVV,NSV,NVS,NSS,NDV,NVD,NDS,NSD,
+ & IXPV,IXPS,IXTV,IXTS,
+ & INTVV1(MAXVQU),INTVV2(MAXVQU),
+ & INTSV1(MAXVQU),INTSV2(MAXVQU),
+ & INTVS1(MAXVQU),INTVS2(MAXVQU),
+ & INTSS1(MAXSQU),INTSS2(MAXSQU),
+ & INTDV1(MAXVQU),INTDV2(MAXVQU),
+ & INTVD1(MAXVQU),INTVD2(MAXVQU),
+ & INTDS1(MAXSQU),INTDS2(MAXSQU),
+ & INTSD1(MAXSQU),INTSD2(MAXSQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPM0/ IFROVP(MAXVQU),ITOVP(MAXVQU),IFROSP(MAXSQU),
+ & IFROVT(MAXVQU),ITOVT(MAXVQU),IFROST(MAXSQU)
+* auxiliary common for chain system storage (DTUNUC 1.x)
+ COMMON /DTCHSY/ ISKPCH(8,MAXINT),IPOSP(MAXNCL),IPOST(MAXNCL)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ DIMENSION ZUOVP(MAXVQU),ZUOSP(MAXSQU),ZUOVT(MAXVQU),ZUOST(MAXSQU),
+ & INTLO(MAXINT)
+
+* (1) initializations
+*-----------------------------------------------------------------------
+
+**test
+ IF (ECM.LT.4.5D0) THEN
+C FRCDIQ = 0.6D0
+ FRCDIQ = 0.4D0
+ ELSEIF ((ECM.GE.4.5D0).AND.(ECM.LT.7.5)) THEN
+C FRCDIQ = 0.6D0+(ECM-4.5D0)/3.0D0*0.3D0
+ FRCDIQ = 0.4D0+(ECM-4.5D0)/3.0D0*0.3D0
+ ELSE
+C FRCDIQ = 0.9D0
+ FRCDIQ = 0.7D0
+ ENDIF
+**
+ DO 30 I=1,MAXSQU
+ ZUOSP(I) = .FALSE.
+ ZUOST(I) = .FALSE.
+ IF (I.LE.MAXVQU) THEN
+ ZUOVP(I) = .FALSE.
+ ZUOVT(I) = .FALSE.
+ ENDIF
+ 30 CONTINUE
+
+* lower thresholds for x-selection
+* sea-quarks (default: CSEA=0.2)
+ IF (ECM.LT.10.0D0) THEN
+**!!test
+ XSTHR = ((12.0D0-ECM)/5.0D0+1.0D0)*CSEA/ECM
+C XSTHR = ((12.0D0-ECM)/5.0D0+1.0D0)*CSEA/ECM**2.0D0
+ NSEA = NSEATY
+C XSTHR = ONE/ECM**2
+ ELSE
+**sr 30.3.98
+C XSTHR = CSEA/ECM
+ XSTHR = CSEA/ECM**2
+C XSTHR = ONE/ECM**2
+**
+ IF ((IP.GE.150).AND.(IT.GE.150))
+ & XSTHR = 2.5D0/(ECM*SQRT(ECM))
+ NSEA = NSEATY
+ ENDIF
+* (default: SSMIMA=0.14) used for sea-diquarks (?)
+ XSSTHR = SSMIMA/ECM
+ BSQMA = SQMA/ECM
+* valence-quarks (default: CVQ=1.0)
+ XVTHR = CVQ/ECM
+* valence-diquarks (default: CDQ=2.0)
+ XDTHR = CDQ/ECM
+
+* maximum-x for sea-quarks
+ XVCUT = XVTHR+XDTHR
+ IF (XVCUT.GT.XVMAX) THEN
+ XVCUT = XVMAX
+ XVTHR = XVCUT/3.0D0
+ XDTHR = XVCUT-XVTHR
+ ENDIF
+ XXSEAM = ONE-XVCUT
+**sr 18.4. test: DPMJET
+C XXSEAM=1.0 - XVTHR*(1.D0+0.3D0*DT_RNDM(V1))
+C & - XDTHR*(1.D0+0.3D0*DT_RNDM(V2))
+C & -0.01*(1.D0+1.5D0*DT_RNDM(V3))
+**
+* maximum number of sea-pairs allowed kinematically
+C NSMAX = INT(OHALF*XXSEAM/XSTHR)
+ RNSMAX = OHALF*XXSEAM/XSTHR
+ IF (RNSMAX.GT.10000.0D0) THEN
+ NSMAX = 10000
+ ELSE
+ NSMAX = INT(OHALF*XXSEAM/XSTHR)
+ ENDIF
+* check kinematical limit for valence-x thresholds
+* (should be obsolete now)
+ IF (XVCUT.GT.XVMAX) THEN
+ WRITE(LOUT,1000) XVCUT,ECM
+ 1000 FORMAT(' XKSAMP: kin. limit for valence-x',
+ & ' thresholds not allowed (',2E9.3,')')
+C XVTHR = XVMAX-XDTHR
+C IF (XVTHR.LT.ZERO) STOP
+ STOP
+ ENDIF
+
+* set eta for valence-x sampling (BETREJ)
+* (UNON per default, UNOM used for projectile mesons only)
+ IF ((IJPROJ.NE.0).AND.(IBPROJ.EQ.0)) THEN
+ UNOPRV = UNOM
+ ELSE
+ UNOPRV = UNON
+ ENDIF
+
+* (2) select parton x-values of interacting projectile nucleons
+*-----------------------------------------------------------------------
+
+ IXPV = 0
+ IXPS = 0
+
+ DO 100 IPP=1,IP
+* get interacting projectile nucleon as sampled by Glauber
+ IF (JSSH(IPP).NE.0) THEN
+ IXSTMP = IXPS
+ IXVTMP = IXPV
+ 99 CONTINUE
+ IXPS = IXSTMP
+ IXPV = IXVTMP
+* JIPP is the actual number of sea-pairs sampled for this nucleon
+ JIPP = MIN(JSSH(IPP)-1,NSMAX)
+ 41 CONTINUE
+ XXSEA = ZERO
+ IF (JIPP.GT.0) THEN
+ XSMAX = XXSEAM-2.0D0*DBLE(JIPP)*XSTHR
+*???
+ IF (XSTHR.GE.XSMAX) THEN
+ JIPP = JIPP-1
+ GOTO 41
+ ENDIF
+
+*>>>get x-values of sea-quark pairs
+ NSCOUN = 0
+ PLW = 0.5D0
+ 40 CONTINUE
+* accumulator for sea x-values
+ XXSEA = ZERO
+ NSCOUN = NSCOUN+1
+ IF (DBLE(NSCOUN)/DBLE(NSEA).GT.0.5D0) PLW = 1.0D0
+ IF (NSCOUN.GT.NSEA) THEN
+* decrease the number of interactions after NSEA trials
+ JIPP = JIPP-1
+ NSCOUN = 0
+ ENDIF
+ DO 70 ISQ=1,JIPP
+* sea-quarks
+ IF (IPSQ(IXPS+1).LE.2) THEN
+**sr 8.4.98 (1/sqrt(x))
+C XPSQI = DT_SAMPEX(XSTHR,XSMAX)
+C XPSQI = DT_SAMSQX(XSTHR,XSMAX)
+ XPSQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ELSE
+ IF (XSMAX.GT.XSTHR+BSQMA) THEN
+ XPSQI = DT_SAMPXB(XSTHR+BSQMA,XSMAX,BSQMA)
+ ELSE
+**sr 8.4.98 (1/sqrt(x))
+C XPSQI = DT_SAMPEX(XSTHR,XSMAX)
+C XPSQI = DT_SAMSQX(XSTHR,XSMAX)
+ XPSQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ENDIF
+ ENDIF
+* sea-antiquarks
+ IF (IPSAQ(IXPS+1).GE.-2) THEN
+**sr 8.4.98 (1/sqrt(x))
+C XPSAQI = DT_SAMPEX(XSTHR,XSMAX)
+C XPSAQI = DT_SAMSQX(XSTHR,XSMAX)
+ XPSAQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ELSE
+ IF (XSMAX.GT.XSTHR+BSQMA) THEN
+ XPSAQI = DT_SAMPXB(XSTHR+BSQMA,XSMAX,BSQMA)
+ ELSE
+**sr 8.4.98 (1/sqrt(x))
+C XPSAQI = DT_SAMPEX(XSTHR,XSMAX)
+C XPSAQI = DT_SAMSQX(XSTHR,XSMAX)
+ XPSAQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ENDIF
+ ENDIF
+ XXSEA = XXSEA+XPSQI+XPSAQI
+* check for maximum allowed sea x-value
+ IF (XXSEA.GE.XXSEAM) THEN
+ IXPS = IXPS-ISQ+1
+ GOTO 40
+ ENDIF
+* accept this sea-quark pair
+ IXPS = IXPS+1
+ XPSQ(IXPS) = XPSQI
+ XPSAQ(IXPS) = XPSAQI
+ IFROSP(IXPS) = IPP
+ ZUOSP(IXPS) = .TRUE.
+ 70 CONTINUE
+ ENDIF
+
+*>>>get x-values of valence partons
+* valence quark
+ IF (XVTHR.GT.0.05D0) THEN
+ XVHI = ONE-XXSEA-XDTHR
+ XPVQI = DT_BETREJ(OHALF,UNOPRV,XVTHR,XVHI)
+ ELSE
+ 90 CONTINUE
+ XPVQI = DT_DBETAR(OHALF,UNOPRV)
+ IF ((XPVQI.LT.XVTHR).OR.(ONE-XPVQI-XXSEA.LT.XDTHR))
+ & GOTO 90
+ ENDIF
+* valence diquark
+ XPVDI = ONE-XPVQI-XXSEA
+* reject according to x**1.5
+ XDTMP = XPVDI**1.5D0
+ IF (DT_RNDM(XPVDI).GT.XDTMP) GOTO 99
+* accept these valence partons
+ IXPV = IXPV+1
+ XPVQ(IXPV) = XPVQI
+ XPVD(IXPV) = XPVDI
+ IFROVP(IXPV) = IPP
+ ITOVP(IPP) = IXPV
+ ZUOVP(IXPV) = .TRUE.
+
+ ENDIF
+ 100 CONTINUE
+
+* (3) select parton x-values of interacting target nucleons
+*-----------------------------------------------------------------------
+
+ IXTV = 0
+ IXTS = 0
+
+ DO 170 ITT=1,IT
+* get interacting target nucleon as sampled by Glauber
+ IF (JTSH(ITT).NE.0) THEN
+ IXSTMP = IXTS
+ IXVTMP = IXTV
+ 169 CONTINUE
+ IXTS = IXSTMP
+ IXTV = IXVTMP
+* JITT is the actual number of sea-pairs sampled for this nucleon
+ JITT = MIN(JTSH(ITT)-1,NSMAX)
+ 111 CONTINUE
+ XXSEA = ZERO
+ IF (JITT.GT.0) THEN
+ XSMAX = XXSEAM-2.0D0*DBLE(JITT)*XSTHR
+*???
+ IF (XSTHR.GE.XSMAX) THEN
+ JITT = JITT-1
+ GOTO 111
+ ENDIF
+
+*>>>get x-values of sea-quark pairs
+ NSCOUN = 0
+ PLW = 0.5D0
+ 110 CONTINUE
+* accumulator for sea x-values
+ XXSEA = ZERO
+ NSCOUN = NSCOUN+1
+ IF (DBLE(NSCOUN)/DBLE(NSEA).GT.0.5D0) PLW = 1.0D0
+ IF (NSCOUN.GT.NSEA)THEN
+* decrease the number of interactions after NSEA trials
+ JITT = JITT-1
+ NSCOUN = 0
+ ENDIF
+ DO 140 ISQ=1,JITT
+* sea-quarks
+ IF (ITSQ(IXTS+1).LE.2) THEN
+**sr 8.4.98 (1/sqrt(x))
+C XTSQI = DT_SAMPEX(XSTHR,XSMAX)
+C XTSQI = DT_SAMSQX(XSTHR,XSMAX)
+ XTSQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ELSE
+ IF (XSMAX.GT.XSTHR+BSQMA) THEN
+ XTSQI = DT_SAMPXB(XSTHR+BSQMA,XSMAX,BSQMA)
+ ELSE
+**sr 8.4.98 (1/sqrt(x))
+C XTSQI = DT_SAMPEX(XSTHR,XSMAX)
+C XTSQI = DT_SAMSQX(XSTHR,XSMAX)
+ XTSQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ENDIF
+ ENDIF
+* sea-antiquarks
+ IF (ITSAQ(IXTS+1).GE.-2) THEN
+**sr 8.4.98 (1/sqrt(x))
+C XTSAQI = DT_SAMPEX(XSTHR,XSMAX)
+C XTSAQI = DT_SAMSQX(XSTHR,XSMAX)
+ XTSAQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ELSE
+ IF (XSMAX.GT.XSTHR+BSQMA) THEN
+ XTSAQI = DT_SAMPXB(XSTHR+BSQMA,XSMAX,BSQMA)
+ ELSE
+**sr 8.4.98 (1/sqrt(x))
+C XTSAQI = DT_SAMPEX(XSTHR,XSMAX)
+C XTSAQI = DT_SAMSQX(XSTHR,XSMAX)
+ XTSAQI = DT_SAMPLW(XSTHR,XSMAX,PLW)
+**
+ ENDIF
+ ENDIF
+ XXSEA = XXSEA+XTSQI+XTSAQI
+* check for maximum allowed sea x-value
+ IF (XXSEA.GE.XXSEAM) THEN
+ IXTS = IXTS-ISQ+1
+ GOTO 110
+ ENDIF
+* accept this sea-quark pair
+ IXTS = IXTS+1
+ XTSQ(IXTS) = XTSQI
+ XTSAQ(IXTS) = XTSAQI
+ IFROST(IXTS) = ITT
+ ZUOST(IXTS) = .TRUE.
+ 140 CONTINUE
+ ENDIF
+
+*>>>get x-values of valence partons
+* valence quark
+ IF (XVTHR.GT.0.05D0) THEN
+ XVHI = ONE-XXSEA-XDTHR
+ XTVQI = DT_BETREJ(OHALF,UNON,XVTHR,XVHI)
+ ELSE
+ 160 CONTINUE
+ XTVQI = DT_DBETAR(OHALF,UNON)
+ IF ((XTVQI.LT.XVTHR).OR.(ONE-XTVQI-XXSEA.LT.XDTHR))
+ & GOTO 160
+ ENDIF
+* valence diquark
+ XTVDI = ONE-XTVQI-XXSEA
+* reject according to x**1.5
+ XDTMP = XTVDI**1.5D0
+ IF (DT_RNDM(XPVDI).GT.XDTMP) GOTO 169
+* accept these valence partons
+ IXTV = IXTV+1
+ XTVQ(IXTV) = XTVQI
+ XTVD(IXTV) = XTVDI
+ IFROVT(IXTV) = ITT
+ ITOVT(ITT) = IXTV
+ ZUOVT(IXTV) = .TRUE.
+
+ ENDIF
+ 170 CONTINUE
+
+* (4) get valence-valence chains
+*-----------------------------------------------------------------------
+
+ NVV = 0
+ DO 240 I=1,NN
+ INTLO(I) = .TRUE.
+ IPVAL = ITOVP(INTER1(I))
+ ITVAL = ITOVT(INTER2(I))
+ IF (ZUOVP(IPVAL).AND.ZUOVT(ITVAL)) THEN
+ INTLO(I) = .FALSE.
+ ZUOVP(IPVAL) = .FALSE.
+ ZUOVT(ITVAL) = .FALSE.
+ NVV = NVV+1
+ ISKPCH(8,NVV) = 0
+ INTVV1(NVV) = IPVAL
+ INTVV2(NVV) = ITVAL
+ ENDIF
+ 240 CONTINUE
+
+* (5) get sea-valence chains
+*-----------------------------------------------------------------------
+
+ NSV = 0
+ NDV = 0
+ PLW = 0.5D0
+ DO 270 I=1,NN
+ IF (INTLO(I)) THEN
+ IPVAL = ITOVP(INTER1(I))
+ ITVAL = ITOVT(INTER2(I))
+ DO 250 J=1,IXPS
+ IF (ZUOSP(J).AND.(IFROSP(J).EQ.INTER1(I)).AND.
+ & ZUOVT(ITVAL)) THEN
+ ZUOSP(J) = .FALSE.
+ ZUOVT(ITVAL) = .FALSE.
+ INTLO(I) = .FALSE.
+ IF (LSEADI.AND.(DT_RNDM(PLW).GT.FRCDIQ)) THEN
+* sample sea-diquark pair
+ CALL DT_SAMSDQ(ECM,ITVAL,J,2,IREJ1)
+ IF (IREJ1.EQ.0) GOTO 260
+ ENDIF
+ NSV = NSV+1
+ ISKPCH(4,NSV) = 0
+ INTSV1(NSV) = J
+ INTSV2(NSV) = ITVAL
+
+*>>>correct chain kinematics according to minimum chain masses
+* the actual chain masses
+ AMSVQ1 = XPSQ(J) *XTVD(ITVAL)*ECM**2
+ AMSVQ2 = XPSAQ(J)*XTVQ(ITVAL)*ECM**2
+* get lower mass cuts
+ IF (IPSQ(J).EQ.3) THEN
+* q being s-quark
+ AMCHK1 = AMAS
+ AMCHK2 = AMIS
+ ELSE
+* q being u/d-quark
+ AMCHK1 = AMAU
+ AMCHK2 = AMIU
+ ENDIF
+* q-qq chain
+* chain mass above minimum - resampling of sea-q x-value
+ IF (AMSVQ1.GT.AMCHK1) THEN
+ XPSQTH = AMCHK1/(XTVD(ITVAL)*ECM**2)
+**sr 8.4.98 (1/sqrt(x))
+C XPSQXX = DT_SAMPEX(XPSQTH,XPSQ(J))
+C XPSQXX = DT_SAMSQX(XPSQTH,XPSQ(J))
+ XPSQXX = DT_SAMPLW(XPSQTH,XPSQ(J),PLW)
+**
+ XPVD(IPVAL) = XPVD(IPVAL)+XPSQ(J)-XPSQXX
+ XPSQ(J) = XPSQXX
+* chain mass below minimum - reset sea-q x-value and correct
+* diquark-x of the same nucleon
+ ELSEIF (AMSVQ1.LT.AMCHK1) THEN
+ XPSQW = AMCHK1/(XTVD(ITVAL)*ECM**2)
+ DXPSQ = XPSQW-XPSQ(J)
+ IF (XPVD(IPVAL).GE.XDTHR+DXPSQ) THEN
+ XPVD(IPVAL) = XPVD(IPVAL)-DXPSQ
+ XPSQ(J) = XPSQW
+ ENDIF
+ ENDIF
+* aq-q chain
+* chain mass below minimum - reset sea-aq x-value and correct
+* diquark-x of the same nucleon
+ IF (AMSVQ2.LT.AMCHK2) THEN
+ XPSQW = AMCHK2/(XTVQ(ITVAL)*ECM**2)
+ DXPSQ = XPSQW-XPSAQ(J)
+ IF (XPVD(IPVAL).GE.XDTHR+DXPSQ) THEN
+ XPVD(IPVAL) = XPVD(IPVAL)-DXPSQ
+ XPSAQ(J) = XPSQW
+ ENDIF
+ ENDIF
+*>>>end of chain mass correction
+
+ GOTO 260
+ ENDIF
+ 250 CONTINUE
+ ENDIF
+ 260 CONTINUE
+ 270 CONTINUE
+
+* (6) get valence-sea chains
+*-----------------------------------------------------------------------
+
+ NVS = 0
+ NVD = 0
+ DO 300 I=1,NN
+ IF (INTLO(I)) THEN
+ IPVAL = ITOVP(INTER1(I))
+ ITVAL = ITOVT(INTER2(I))
+ DO 280 J=1,IXTS
+ IF (ZUOVP(IPVAL).AND.ZUOST(J).AND.
+ & (IFROST(J).EQ.INTER2(I))) THEN
+ ZUOST(J) = .FALSE.
+ ZUOVP(IPVAL) = .FALSE.
+ INTLO(I) = .FALSE.
+ IF (LSEADI.AND.(DT_RNDM(ECM).GT.FRCDIQ)) THEN
+* sample sea-diquark pair
+ CALL DT_SAMSDQ(ECM,IPVAL,J,1,IREJ1)
+ IF (IREJ1.EQ.0) GOTO 290
+ ENDIF
+ NVS = NVS + 1
+ ISKPCH(6,NVS) = 0
+ INTVS1(NVS) = IPVAL
+ INTVS2(NVS) = J
+
+*>>>correct chain kinematics according to minimum chain masses
+* the actual chain masses
+ AMVSQ1 = XPVQ(IPVAL)*XTSAQ(J)*ECM**2
+ AMVSQ2 = XPVD(IPVAL)*XTSQ(J) *ECM**2
+* get lower mass cuts
+ IF (ITSQ(J).EQ.3) THEN
+* q being s-quark
+ AMCHK1 = AMIS
+ AMCHK2 = AMAS
+ ELSE
+* q being u/d-quark
+ AMCHK1 = AMIU
+ AMCHK2 = AMAU
+ ENDIF
+* q-aq chain
+* chain mass below minimum - reset sea-aq x-value and correct
+* diquark-x of the same nucleon
+ IF (AMVSQ1.LT.AMCHK1) THEN
+ XTSQW = AMCHK1/(XPVQ(IPVAL)*ECM**2)
+ DXTSQ = XTSQW-XTSAQ(J)
+ IF (XTVD(ITVAL).GE.XDTHR+DXTSQ) THEN
+ XTVD(ITVAL) = XTVD(ITVAL)-DXTSQ
+ XTSAQ(J) = XTSQW
+ ENDIF
+ ENDIF
+* qq-q chain
+* chain mass above minimum - resampling of sea-q x-value
+ IF (AMVSQ2.GT.AMCHK2) THEN
+ XTSQTH = AMCHK2/(XPVD(IPVAL)*ECM**2)
+**sr 8.4.98 (1/sqrt(x))
+C XTSQXX = DT_SAMPEX(XTSQTH,XTSQ(J))
+C XTSQXX = DT_SAMSQX(XTSQTH,XTSQ(J))
+ XTSQXX = DT_SAMPLW(XTSQTH,XTSQ(J),PLW)
+**
+ XTVD(ITVAL) = XTVD(ITVAL)+XTSQ(J)-XTSQXX
+ XTSQ(J) = XTSQXX
+* chain mass below minimum - reset sea-q x-value and correct
+* diquark-x of the same nucleon
+ ELSEIF (AMVSQ2.LT.AMCHK2) THEN
+ XTSQW = AMCHK2/(XPVD(IPVAL)*ECM**2)
+ DXTSQ = XTSQW-XTSQ(J)
+ IF (XTVD(ITVAL).GE.XDTHR+DXTSQ) THEN
+ XTVD(ITVAL) = XTVD(ITVAL)-DXTSQ
+ XTSQ(J) = XTSQW
+ ENDIF
+ ENDIF
+*>>>end of chain mass correction
+
+ GOTO 290
+ ENDIF
+ 280 CONTINUE
+ ENDIF
+ 290 CONTINUE
+ 300 CONTINUE
+
+* (7) get sea-sea chains
+*-----------------------------------------------------------------------
+
+ NSS = 0
+ NDS = 0
+ NSD = 0
+ DO 420 I=1,NN
+ IF (INTLO(I)) THEN
+ IPVAL = ITOVP(INTER1(I))
+ ITVAL = ITOVT(INTER2(I))
+* loop over target partons not yet matched
+ DO 400 J=1,IXTS
+ IF (ZUOST(J).AND.(IFROST(J).EQ.INTER2(I))) THEN
+* loop over projectile partons not yet matched
+ DO 390 JJ=1,IXPS
+ IF (ZUOSP(JJ).AND.(IFROSP(JJ).EQ.INTER1(I))) THEN
+ ZUOSP(JJ) = .FALSE.
+ ZUOST(J) = .FALSE.
+ INTLO(I) = .FALSE.
+ NSS = NSS+1
+ ISKPCH(1,NSS) = 0
+ INTSS1(NSS) = JJ
+ INTSS2(NSS) = J
+
+*---->chain recombination option
+ VALFRA = DBLE(NVV/(NVV+IXPS+IXTS))
+ IF (IRECOM.EQ.1.AND.(DT_RNDM(BSQMA).GT.VALFRA))
+ & THEN
+* sea-sea chains may recombine with valence-valence chains
+* only if they have the same projectile or target nucleon
+ DO 4201 IVV=1,NVV
+ IF (ISKPCH(8,IVV).NE.99) THEN
+ IXVPR = INTVV1(IVV)
+ IXVTA = INTVV2(IVV)
+ IF ((INTER1(I).EQ.IFROVP(IXVPR)).OR.
+ & (INTER2(I).EQ.IFROVT(IXVTA))) THEN
+* recombination possible, drop old v-v and s-s chains
+ ISKPCH(1,NSS) = 99
+ ISKPCH(8,IVV) = 99
+
+* (a) assign new s-v chains
+* ~~~~~~~~~~~~~~~~~~~~~~~~~
+ IF (LSEADI.AND.
+ & (DT_RNDM(VALFRA).GT.FRCDIQ))
+ & THEN
+* sample sea-diquark pair
+ CALL DT_SAMSDQ(ECM,IXVTA,JJ,2,
+ & IREJ1)
+ IF (IREJ1.EQ.0) GOTO 4202
+ ENDIF
+ NSV = NSV+1
+ ISKPCH(4,NSV) = 0
+ INTSV1(NSV) = JJ
+ INTSV2(NSV) = IXVTA
+*>>>>>>>>>>>correct chain kinematics according to minimum chain masses
+* the actual chain masses
+ AMSVQ1 = XPSQ(JJ) *XTVD(IXVTA)
+ & *ECM**2
+ AMSVQ2 = XPSAQ(JJ)*XTVQ(IXVTA)
+ & *ECM**2
+* get lower mass cuts
+ IF (IPSQ(JJ).EQ.3) THEN
+* q being s-quark
+ AMCHK1 = AMAS
+ AMCHK2 = AMIS
+ ELSE
+* q being u/d-quark
+ AMCHK1 = AMAU
+ AMCHK2 = AMIU
+ ENDIF
+* q-qq chain
+* chain mass above minimum - resampling of sea-q x-value
+ IF (AMSVQ1.GT.AMCHK1) THEN
+ XPSQTH =
+ & AMCHK1/(XTVD(IXVTA)*ECM**2)
+**sr 8.4.98 (1/sqrt(x))
+ XPSQXX =
+ & DT_SAMPLW(XPSQTH,XPSQ(JJ),PLW)
+C & DT_SAMSQX(XPSQTH,XPSQ(JJ))
+C & DT_SAMPEX(XPSQTH,XPSQ(JJ))
+**
+ XPVD(IPVAL) =
+ & XPVD(IPVAL)+XPSQ(JJ)-XPSQXX
+ XPSQ(JJ) = XPSQXX
+* chain mass below minimum - reset sea-q x-value and correct
+* diquark-x of the same nucleon
+ ELSEIF (AMSVQ1.LT.AMCHK1) THEN
+ XPSQW =
+ & AMCHK1/(XTVD(IXVTA)*ECM**2)
+ DXPSQ = XPSQW-XPSQ(JJ)
+ IF (XPVD(IPVAL).GE.XDTHR+DXPSQ)
+ & THEN
+ XPVD(IPVAL) =
+ & XPVD(IPVAL)-DXPSQ
+ XPSQ(JJ) = XPSQW
+ ENDIF
+ ENDIF
+* aq-q chain
+* chain mass below minimum - reset sea-aq x-value and correct
+* diquark-x of the same nucleon
+ IF (AMSVQ2.LT.AMCHK2) THEN
+ XPSQW =
+ & AMCHK2/(XTVQ(IXVTA)*ECM**2)
+ DXPSQ = XPSQW-XPSAQ(JJ)
+ IF (XPVD(IPVAL).GE.XDTHR+DXPSQ)
+ & THEN
+ XPVD(IPVAL) =
+ & XPVD(IPVAL)-DXPSQ
+ XPSAQ(JJ) = XPSQW
+ ENDIF
+ ENDIF
+*>>>>>>>>>>>end of chain mass correction
+ 4202 CONTINUE
+
+* (b) assign new v-s chains
+* ~~~~~~~~~~~~~~~~~~~~~~~~~
+ IF (LSEADI.AND.(
+ & DT_RNDM(AMSVQ2).GT.FRCDIQ))
+ & THEN
+* sample sea-diquark pair
+ CALL DT_SAMSDQ(ECM,IXVPR,J,1,
+ & IREJ1)
+ IF (IREJ1.EQ.0) GOTO 4203
+ ENDIF
+ NVS = NVS+1
+ ISKPCH(6,NVS) = 0
+ INTVS1(NVS) = IXVPR
+ INTVS2(NVS) = J
+*>>>>>>>>>>>correct chain kinematics according to minimum chain masses
+* the actual chain masses
+ AMVSQ1 = XPVQ(IXVPR)*XTSAQ(J)*ECM**2
+ AMVSQ2 = XPVD(IXVPR)*XTSQ(J) *ECM**2
+* get lower mass cuts
+ IF (ITSQ(J).EQ.3) THEN
+* q being s-quark
+ AMCHK1 = AMIS
+ AMCHK2 = AMAS
+ ELSE
+* q being u/d-quark
+ AMCHK1 = AMIU
+ AMCHK2 = AMAU
+ ENDIF
+* q-aq chain
+* chain mass below minimum - reset sea-aq x-value and correct
+* diquark-x of the same nucleon
+ IF (AMVSQ1.LT.AMCHK1) THEN
+ XTSQW =
+ & AMCHK1/(XPVQ(IXVPR)*ECM**2)
+ DXTSQ = XTSQW-XTSAQ(J)
+ IF (XTVD(ITVAL).GE.XDTHR+DXTSQ)
+ & THEN
+ XTVD(ITVAL) =
+ & XTVD(ITVAL)-DXTSQ
+ XTSAQ(J) = XTSQW
+ ENDIF
+ ENDIF
+ IF (AMVSQ2.GT.AMCHK2) THEN
+ XTSQTH =
+ & AMCHK2/(XPVD(IXVPR)*ECM**2)
+**sr 8.4.98 (1/sqrt(x))
+ XTSQXX =
+ & DT_SAMPLW(XTSQTH,XTSQ(J),PLW)
+C & DT_SAMSQX(XTSQTH,XTSQ(J))
+C & DT_SAMPEX(XTSQTH,XTSQ(J))
+**
+ XTVD(ITVAL) =
+ & XTVD(ITVAL)+XTSQ(J)-XTSQXX
+ XTSQ(J) = XTSQXX
+ ELSEIF (AMVSQ2.LT.AMCHK2) THEN
+ XTSQW =
+ & AMCHK2/(XPVD(IXVPR)*ECM**2)
+ DXTSQ = XTSQW-XTSQ(J)
+ IF (XTVD(ITVAL).GE.XDTHR+DXTSQ)
+ & THEN
+ XTVD(ITVAL) =
+ & XTVD(ITVAL)-DXTSQ
+ XTSQ(J) = XTSQW
+ ENDIF
+ ENDIF
+*>>>>>>>>>end of chain mass correction
+ 4203 CONTINUE
+* jump out of s-s chain loop
+ GOTO 420
+ ENDIF
+ ENDIF
+ 4201 CONTINUE
+ ENDIF
+*---->end of chain recombination option
+
+* sample sea-diquark pair (projectile)
+ IF (LSEADI.AND.(DT_RNDM(BSQMA).GT.FRCDIQ)) THEN
+ CALL DT_SAMSDQ(ECM,J,JJ,4,IREJ1)
+ IF (IREJ1.EQ.0) THEN
+ ISKPCH(1,NSS) = 99
+ GOTO 410
+ ENDIF
+ ENDIF
+* sample sea-diquark pair (target)
+ IF (LSEADI.AND.(DT_RNDM(ECM).GT.FRCDIQ)) THEN
+ CALL DT_SAMSDQ(ECM,JJ,J,3,IREJ1)
+ IF (IREJ1.EQ.0) THEN
+ ISKPCH(1,NSS) = 99
+ GOTO 410
+ ENDIF
+ ENDIF
+*>>>>>correct chain kinematics according to minimum chain masses
+* the actual chain masses
+ SSMA1Q = XPSQ(JJ) *XTSAQ(J)*ECM**2
+ SSMA2Q = XPSAQ(JJ)*XTSQ(J) *ECM**2
+* check for lower mass cuts
+ IF ((SSMA1Q.LT.SSMIMQ).OR.
+ & (SSMA2Q.LT.SSMIMQ)) THEN
+ IPVAL = ITOVP(INTER1(I))
+ ITVAL = ITOVT(INTER2(I))
+ IF ((XPVD(IPVAL).GT.XDTHR+3.5D0*XSSTHR).AND.
+ & (XTVD(ITVAL).GT.XDTHR+3.5D0*XSSTHR))THEN
+* maximum allowed x values for sea quarks
+ XSPMAX = ONE-XPVQ(IPVAL)-XDTHR-
+ & 1.2D0*XSSTHR
+ XSTMAX = ONE-XTVQ(ITVAL)-XDTHR-
+ & 1.2D0*XSSTHR
+* resampling of x values not possible - skip sea-sea chains
+ IF ((XSPMAX.LE.XSSTHR+0.05D0).OR.
+ & (XSTMAX.LE.XSSTHR+0.05D0)) GOTO 380
+* resampling of x for projectile sea quark pair
+ ICOUS = 0
+ 310 CONTINUE
+ ICOUS = ICOUS+1
+ IF (XSSTHR.GT.0.05D0) THEN
+ XPSQI =DT_BETREJ(XSEACU,UNOSEA,XSSTHR,
+ & XSPMAX)
+ XPSAQI=DT_BETREJ(XSEACU,UNOSEA,XSSTHR,
+ & XSPMAX)
+ ELSE
+ 320 CONTINUE
+ XPSQI = DT_DBETAR(XSEACU,UNOSEA)
+ IF ((XPSQI.LT.XSSTHR).OR.
+ & (XPSQI.GT.XSPMAX)) GOTO 320
+ 330 CONTINUE
+ XPSAQI = DT_DBETAR(XSEACU,UNOSEA)
+ IF ((XPSAQI.LT.XSSTHR).OR.
+ & (XPSAQI.GT.XSPMAX)) GOTO 330
+ ENDIF
+* final test of remaining x for projectile diquark
+ XPVDCO = XPVD(IPVAL)-XPSQI-XPSAQI
+ & +XPSQ(JJ)+XPSAQ(JJ)
+ IF (XPVDCO.LE.XDTHR) THEN
+*!!!
+C IF (ICOUS.LT.5) GOTO 310
+ IF (ICOUS.LT.0.5D0) GOTO 310
+ GOTO 380
+ ENDIF
+* resampling of x for target sea quark pair
+ ICOUS = 0
+ 350 CONTINUE
+ ICOUS = ICOUS+1
+ IF (XSSTHR.GT.0.05D0) THEN
+ XTSQI =DT_BETREJ(XSEACU,UNOSEA,XSSTHR,
+ & XSTMAX)
+ XTSAQI=DT_BETREJ(XSEACU,UNOSEA,XSSTHR,
+ & XSTMAX)
+ ELSE
+ 360 CONTINUE
+ XTSQI = DT_DBETAR(XSEACU,UNOSEA)
+ IF ((XTSQI.LT.XSSTHR).OR.
+ & (XTSQI.GT.XSTMAX)) GOTO 360
+ 370 CONTINUE
+ XTSAQI = DT_DBETAR(XSEACU,UNOSEA)
+ IF ((XTSAQI.LT.XSSTHR).OR.
+ & (XTSAQI.GT.XSTMAX)) GOTO 370
+ ENDIF
+* final test of remaining x for target diquark
+ XTVDCO = XTVD(ITVAL)-XTSQI-XTSAQI
+ & +XTSQ(J)+XTSAQ(J)
+ IF (XTVDCO.LT.XDTHR) THEN
+ IF (ICOUS.LT.5) GOTO 350
+ GOTO 380
+ ENDIF
+ XPVD(IPVAL) = XPVDCO
+ XTVD(ITVAL) = XTVDCO
+ XPSQ(JJ) = XPSQI
+ XPSAQ(JJ) = XPSAQI
+ XTSQ(J) = XTSQI
+ XTSAQ(J) = XTSAQI
+*>>>>>end of chain mass correction
+ GOTO 410
+ ENDIF
+* come here to discard s-s interaction
+* resampling of x values not allowed or unsuccessful
+ 380 CONTINUE
+ INTLO(I) = .FALSE.
+ ZUOST(J) = .TRUE.
+ ZUOSP(JJ) = .TRUE.
+ NSS = NSS-1
+ ENDIF
+* consider next s-s interaction
+ GOTO 410
+ ENDIF
+ 390 CONTINUE
+ ENDIF
+ 400 CONTINUE
+ ENDIF
+ 410 CONTINUE
+ 420 CONTINUE
+
+* correct x-values of valence quarks for non-matching sea quarks
+ DO 430 I=1,IXPS
+ IF (ZUOSP(I)) THEN
+ IPVAL = ITOVP(IFROSP(I))
+ XPVQ(IPVAL) = XPVQ(IPVAL)+XPSQ(I)+XPSAQ(I)
+ XPSQ(I) = ZERO
+ XPSAQ(I) = ZERO
+ ZUOSP(I) = .FALSE.
+ ENDIF
+ 430 CONTINUE
+ DO 440 I=1,IXTS
+ IF (ZUOST(I)) THEN
+ ITVAL = ITOVT(IFROST(I))
+ XTVQ(ITVAL) = XTVQ(ITVAL)+XTSQ(I)+XTSAQ(I)
+ XTSQ(I) = ZERO
+ XTSAQ(I) = ZERO
+ ZUOST(I) = .FALSE.
+ ENDIF
+ 440 CONTINUE
+ DO 450 I=1,IXPV
+ IF (ZUOVP(I)) ISTHKK(IFROVP(I)) = 13
+ 450 CONTINUE
+ DO 460 I=1,IXTV
+ IF (ZUOVT(I)) ISTHKK(IFROVT(I)+IP) = 14
+ 460 CONTINUE
+
+ RETURN
+ END
+*
+*===samsdq=============================================================*
+*
+CDECK ID>, DT_SAMSDQ
+ SUBROUTINE DT_SAMSDQ(ECM,IDX1,IDX2,MODE,IREJ)
+
+************************************************************************
+* SAMpling of Sea-DiQuarks *
+* ECM cm-energy of the nucleon-nucleon system *
+* IDX1,2 indices of x-values of the participating *
+* partons (IDX2 is always the sea-q-pair to be *
+* changed to sea-qq-pair) *
+* MODE = 1 valence-q - sea-diq *
+* = 2 sea-diq - valence-q *
+* = 3 sea-q - sea-diq *
+* = 4 sea-diq - sea-q *
+* Based on DIQVS, DIQSV, DIQSSD, DIQDSS. *
+* This version dated 17.10.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (ZERO=0.0D0)
+
+* threshold values for x-sampling (DTUNUC 1.x)
+ COMMON /DTXCUT/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ & SSMIMQ,VVMTHR
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ PARAMETER ( MAXNCL = 260,
+
+ & MAXVQU = MAXNCL,
+ & MAXSQU = 20*MAXVQU,
+ & MAXINT = MAXVQU+MAXSQU)
+* x-values of partons (DTUNUC 1.x)
+ COMMON /DTDPMX/ XPVQ(MAXVQU),XPVD(MAXVQU),
+ & XTVQ(MAXVQU),XTVD(MAXVQU),
+ & XPSQ(MAXSQU),XPSAQ(MAXSQU),
+ & XTSQ(MAXSQU),XTSAQ(MAXSQU)
+* flavors of partons (DTUNUC 1.x)
+ COMMON /DTDPMF/ IPVQ(MAXVQU),IPPV1(MAXVQU),IPPV2(MAXVQU),
+ & ITVQ(MAXVQU),ITTV1(MAXVQU),ITTV2(MAXVQU),
+ & IPSQ(MAXSQU),IPSQ2(MAXSQU),
+ & IPSAQ(MAXSQU),IPSAQ2(MAXSQU),
+ & ITSQ(MAXSQU),ITSQ2(MAXSQU),
+ & ITSAQ(MAXSQU),ITSAQ2(MAXSQU),
+ & KKPROJ(MAXVQU),KKTARG(MAXVQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPMI/ NVV,NSV,NVS,NSS,NDV,NVD,NDS,NSD,
+ & IXPV,IXPS,IXTV,IXTS,
+ & INTVV1(MAXVQU),INTVV2(MAXVQU),
+ & INTSV1(MAXVQU),INTSV2(MAXVQU),
+ & INTVS1(MAXVQU),INTVS2(MAXVQU),
+ & INTSS1(MAXSQU),INTSS2(MAXSQU),
+ & INTDV1(MAXVQU),INTDV2(MAXVQU),
+ & INTVD1(MAXVQU),INTVD2(MAXVQU),
+ & INTDS1(MAXSQU),INTDS2(MAXSQU),
+ & INTSD1(MAXSQU),INTSD2(MAXSQU)
+* auxiliary common for x-value and flavor storage of partons (DTUNUC 1.x)
+ COMMON /DTDPM0/ IFROVP(MAXVQU),ITOVP(MAXVQU),IFROSP(MAXSQU),
+ & IFROVT(MAXVQU),ITOVT(MAXVQU),IFROST(MAXSQU)
+* auxiliary common for chain system storage (DTUNUC 1.x)
+ COMMON /DTCHSY/ ISKPCH(8,MAXINT),IPOSP(MAXNCL),IPOST(MAXNCL)
+
+ IREJ = 0
+* threshold-x for valence diquarks
+ XDTHR = CDQ/ECM
+
+ GOTO (1,2,3,4) MODE
+
+*---------------------------------------------------------------------
+* proj. valence partons - targ. sea partons
+* get x-values and flavors for target sea-diquark pair
+
+ 1 CONTINUE
+ IDXVP = IDX1
+ IDXST = IDX2
+
+* index of corr. val-diquark-x in target nucleon
+ IDXVT = ITOVT(IFROST(IDXST))
+* available x above diquark thresholds for valence- and sea-diquarks
+ XXD = XTVD(IDXVT)+XTSQ(IDXST)+XTSAQ(IDXST)-3.0D0*XDTHR
+
+ IF (XXD.GE.ZERO) THEN
+* x-values for the three diquarks of the target nucleon
+ RR1 = DT_RNDM(XXD)
+ RR2 = DT_RNDM(RR1)
+ RR3 = DT_RNDM(RR2)
+ SR123 = RR1+RR2+RR3
+ XXTV = XDTHR+RR1*XXD/SR123
+ XXTSQ = XDTHR+RR2*XXD/SR123
+ XXTSAQ = XDTHR+RR3*XXD/SR123
+ ELSE
+ XXTV = XTVD(IDXVT)
+ XXTSQ = XTSQ(IDXST)
+ XXTSAQ = XTSAQ(IDXST)
+ ENDIF
+* flavor of the second quarks in the sea-diquark pair
+ ITSQ2(IDXST) = INT(1.0D0+DT_RNDM(RR3)*(2.0D0+SEASQ))
+ ITSAQ2(IDXST) = -ITSQ2(IDXST)
+* check masses of the new val-q - sea-qq, val-qq - sea-aqaq chains
+ AM1 = XXTSQ *XPVQ(IDXVP)*ECM**2
+ AM2 = XXTSAQ*XPVD(IDXVP)*ECM**2
+ IF ( (ITSQ(IDXST).EQ.3).AND.(ITSQ2(IDXST).EQ.3).AND.
+* ss-asas pair
+ & ((AM2.LE.18.0D0).OR.(AM1.LE.6.6D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( ((ITSQ(IDXST).EQ.3).OR.(ITSQ2(IDXST).EQ.3)).AND.
+* at least one strange quark
+ & ((AM2.LE.14.6D0).OR.(AM1.LE.5.8D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( (AM2.LE.13.4D0).OR.(AM1.LE.5.0D0) ) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+* accept the new sea-diquark
+ XTVD(IDXVT) = XXTV
+ XTSQ(IDXST) = XXTSQ
+ XTSAQ(IDXST) = XXTSAQ
+ NVD = NVD+1
+ INTVD1(NVD) = IDXVP
+ INTVD2(NVD) = IDXST
+ ISKPCH(7,NVD) = 0
+ RETURN
+
+*---------------------------------------------------------------------
+* proj. sea partons - targ. valence partons
+* get x-values and flavors for projectile sea-diquark pair
+
+ 2 CONTINUE
+ IDXSP = IDX2
+ IDXVT = IDX1
+
+* index of corr. val-diquark-x in projectile nucleon
+ IDXVP = ITOVP(IFROSP(IDXSP))
+* available x above diquark thresholds for valence- and sea-diquarks
+ XXD = XPVD(IDXVP)+XPSQ(IDXSP)+XPSAQ(IDXSP)-3.0D0*XDTHR
+
+ IF (XXD.GE.ZERO) THEN
+* x-values for the three diquarks of the projectile nucleon
+ RR1 = DT_RNDM(XXD)
+ RR2 = DT_RNDM(RR1)
+ RR3 = DT_RNDM(RR2)
+ SR123 = RR1+RR2+RR3
+ XXPV = XDTHR+RR1*XXD/SR123
+ XXPSQ = XDTHR+RR2*XXD/SR123
+ XXPSAQ = XDTHR+RR3*XXD/SR123
+ ELSE
+ XXPV = XPVD(IDXVP)
+ XXPSQ = XPSQ(IDXSP)
+ XXPSAQ = XPSAQ(IDXSP)
+ ENDIF
+* flavor of the second quarks in the sea-diquark pair
+ IPSQ2(IDXSP) = INT(1.0D0+DT_RNDM(XXD)*(2.0D0+SEASQ))
+ IPSAQ2(IDXSP) = -IPSQ2(IDXSP)
+* check masses of the new sea-qq - val-q, sea-aqaq - val-qq chains
+ AM1 = XXPSQ *XTVQ(IDXVT)*ECM**2
+ AM2 = XXPSAQ*XTVD(IDXVT)*ECM**2
+ IF ( (IPSQ(IDXSP).EQ.3).AND.(IPSQ2(IDXSP).EQ.3).AND.
+* ss-asas pair
+ & ((AM2.LE.18.0D0).OR.(AM1.LE.6.6D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( ((IPSQ(IDXSP).EQ.3).OR.(IPSQ2(IDXSP).EQ.3)).AND.
+* at least one strange quark
+ & ((AM2.LE.14.6D0).OR.(AM1.LE.5.8D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( (AM2.LE.13.4D0).OR.(AM1.LE.5.0D0) ) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+* accept the new sea-diquark
+ XPVD(IDXVP) = XXPV
+ XPSQ(IDXSP) = XXPSQ
+ XPSAQ(IDXSP) = XXPSAQ
+ NDV = NDV+1
+ INTDV1(NDV) = IDXSP
+ INTDV2(NDV) = IDXVT
+ ISKPCH(5,NDV) = 0
+ RETURN
+
+*---------------------------------------------------------------------
+* proj. sea partons - targ. sea partons
+* get x-values and flavors for target sea-diquark pair
+
+ 3 CONTINUE
+ IDXSP = IDX1
+ IDXST = IDX2
+
+* index of corr. val-diquark-x in target nucleon
+ IDXVT = ITOVT(IFROST(IDXST))
+* available x above diquark thresholds for valence- and sea-diquarks
+ XXD = XTVD(IDXVT)+XTSQ(IDXST)+XTSAQ(IDXST)-3.0D0*XDTHR
+
+ IF (XXD.GE.ZERO) THEN
+* x-values for the three diquarks of the target nucleon
+ RR1 = DT_RNDM(XXD)
+ RR2 = DT_RNDM(RR1)
+ RR3 = DT_RNDM(RR2)
+ SR123 = RR1+RR2+RR3
+ XXTV = XDTHR+RR1*XXD/SR123
+ XXTSQ = XDTHR+RR2*XXD/SR123
+ XXTSAQ = XDTHR+RR3*XXD/SR123
+ ELSE
+ XXTV = XTVD(IDXVT)
+ XXTSQ = XTSQ(IDXST)
+ XXTSAQ = XTSAQ(IDXST)
+ ENDIF
+* flavor of the second quarks in the sea-diquark pair
+ ITSQ2(IDXST) = INT(1.0D0+DT_RNDM(XXD)*(2.0D0+SEASQ))
+ ITSAQ2(IDXST) = -ITSQ2(IDXST)
+* check masses of the new sea-q - sea-qq, sea-aq - sea-aqaq chains
+ AM1 = XXTSQ *XPSQ(IDXSP)*ECM**2
+ AM2 = XXTSAQ*XPSAQ(IDXSP)*ECM**2
+ IF ( (ITSQ(IDXST).EQ.3).AND.(ITSQ2(IDXST).EQ.3).AND.
+* ss-asas pair
+ & ((AM2.LE.6.6D0).OR.(AM1.LE.6.6D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( ((ITSQ(IDXST).EQ.3).OR.(ITSQ2(IDXST).EQ.3)).AND.
+* at least one strange quark
+ & ((AM2.LE.5.8D0).OR.(AM1.LE.5.8D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( (AM2.LE.5.0D0).OR.(AM1.LE.5.0D0) ) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+* accept the new sea-diquark
+ XTVD(IDXVT) = XXTV
+ XTSQ(IDXST) = XXTSQ
+ XTSAQ(IDXST) = XXTSAQ
+ NSD = NSD+1
+ INTSD1(NSD) = IDXSP
+ INTSD2(NSD) = IDXST
+ ISKPCH(3,NSD) = 0
+ RETURN
+
+*---------------------------------------------------------------------
+* proj. sea partons - targ. sea partons
+* get x-values and flavors for projectile sea-diquark pair
+
+ 4 CONTINUE
+ IDXSP = IDX2
+ IDXST = IDX1
+
+* index of corr. val-diquark-x in projectile nucleon
+ IDXVP = ITOVP(IFROSP(IDXSP))
+* available x above diquark thresholds for valence- and sea-diquarks
+ XXD = XPVD(IDXVP)+XPSQ(IDXSP)+XPSAQ(IDXSP)-3.0D0*XDTHR
+
+ IF (XXD.GE.ZERO) THEN
+* x-values for the three diquarks of the projectile nucleon
+ RR1 = DT_RNDM(XXD)
+ RR2 = DT_RNDM(RR1)
+ RR3 = DT_RNDM(RR2)
+ SR123 = RR1+RR2+RR3
+ XXPV = XDTHR+RR1*XXD/SR123
+ XXPSQ = XDTHR+RR2*XXD/SR123
+ XXPSAQ = XDTHR+RR3*XXD/SR123
+ ELSE
+ XXPV = XPVD(IDXVP)
+ XXPSQ = XPSQ(IDXSP)
+ XXPSAQ = XPSAQ(IDXSP)
+ ENDIF
+* flavor of the second quarks in the sea-diquark pair
+ IPSQ2(IDXSP) = INT(1.0D0+DT_RNDM(RR3)*(2.0D0+SEASQ))
+ IPSAQ2(IDXSP) = -IPSQ2(IDXSP)
+* check masses of the new sea-qq - sea-q, sea-aqaq - sea-qq chains
+ AM1 = XXPSQ *XTSQ(IDXST)*ECM**2
+ AM2 = XXPSAQ*XTSAQ(IDXST)*ECM**2
+ IF ( (IPSQ(IDXSP).EQ.3).AND.(IPSQ2(IDXSP).EQ.3).AND.
+* ss-asas pair
+ & ((AM2.LE.6.6D0).OR.(AM1.LE.6.6D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( ((IPSQ(IDXSP).EQ.3).OR.(IPSQ2(IDXSP).EQ.3)).AND.
+* at least one strange quark
+ & ((AM2.LE.5.8D0).OR.(AM1.LE.5.8D0)) ) THEN
+ IREJ = 1
+ RETURN
+ ELSEIF ( (AM2.LE.5.0D0).OR.(AM1.LE.5.0D0) ) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+* accept the new sea-diquark
+ XPVD(IDXVP) = XXPV
+ XPSQ(IDXSP) = XXPSQ
+ XPSAQ(IDXSP) = XXPSAQ
+ NDS = NDS+1
+ INTDS1(NDS) = IDXSP
+ INTDS2(NDS) = IDXST
+ ISKPCH(2,NDS) = 0
+ RETURN
+ END
+*
+*===difevt=============================================================*
+*
+CDECK ID>, DT_DIFEVT
+ SUBROUTINE DT_DIFEVT(IFP1,IFP2,PP,MOP,
+ & IFT1,IFT2,PT,MOT,JDIFF,NCSY,IREJ)
+
+************************************************************************
+* Interface to treatment of diffractive interactions. *
+* (input) IFP1/2 PDG-indizes of projectile partons *
+* (baryon: IFP2 - adiquark) *
+* PP(4) projectile 4-momentum *
+* IFT1/2 PDG-indizes of target partons *
+* (baryon: IFT1 - adiquark) *
+* PT(4) target 4-momentum *
+* (output) JDIFF = 0 no diffraction *
+* = 1/-1 LMSD/LMDD *
+* = 2/-2 HMSD/HMDD *
+* NCSY counter for two-chain systems *
+* dumped to DTEVT1 *
+* This version dated 14.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY10=1.0D-10,TINY5=1.0D-5,
+ & OHALF=0.5D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+
+ DIMENSION PP(4),PT(4)
+
+ LOGICAL LFIRST
+ DATA LFIRST /.TRUE./
+
+ IREJ = 0
+ JDIFF = 0
+ IFLAGD = JDIFF
+
+* cm. energy
+ XM = SQRT((PP(4)+PT(4))**2-(PP(1)+PT(1))**2-
+ & (PP(2)+PT(2))**2-(PP(3)+PT(3))**2)
+* identities of projectile hadron / target nucleon
+ KPROJ = IDT_ICIHAD(IDHKK(MOP))
+ KTARG = IDT_ICIHAD(IDHKK(MOT))
+
+* single diffractive xsections
+ CALL DT_SHNDIF(XM,KPROJ,KTARG,SDTOT,SDHM)
+* double diffractive xsections
+**!! no double diff yet
+C CALL DT_SHNDIF(XM,KPROJ,KTARG,SDTOT,SDHM,DDTOT,DDHM)
+ DDTOT = 0.0D0
+ DDHM = 0.0D0
+**!!
+* total inelastic xsection
+C SIGIN = DT_SHNTOT(KPROJ,KTARG,XM,ZERO)-DT_SHNELA(KPROJ,KTARG,XM)
+ DUMZER = ZERO
+ CALL DT_XSHN(KPROJ,KTARG,DUMZER,XM,SIGTO,SIGEL)
+ SIGIN = MAX(SIGTO-SIGEL,ZERO)
+
+* fraction of diffractive processes
+ FRADIF = (SDTOT+DDTOT)/SIGIN
+
+ IF (LFIRST) THEN
+ WRITE(LOUT,1000) XM,SDTOT,SIGIN
+ 1000 FORMAT(1X,'DIFEVT: single diffraction requested at E_cm = ',
+ & F5.1,' GeV',/,9X,'sigma_sd = ',F4.1,' mb, sigma_in = ',
+ & F5.1,' mb',/)
+ LFIRST = .FALSE.
+ ENDIF
+
+ IF ((DT_RNDM(DDHM).LE.FRADIF).OR.
+ & (ISINGD.GT.1).OR.(IDOUBD.GT.1)) THEN
+* diffractive interaction requested by x-section or by user
+ FRASD = SDTOT/(SDTOT+DDTOT)
+ FRASDH = SDHM/SDTOT
+**sr needs to be specified!!
+C FRADDH = DDHM/DDTOT
+ FRADDH = 1.0D0
+**
+ IF ((DT_RNDM(FRASD).LE.FRASD).OR.(ISINGD.GT.1)) THEN
+* single diffraction
+ KDIFF = 1
+ IF (DT_RNDM(DDTOT).LE.FRASDH) THEN
+ KP = 2
+ KT = 0
+ IF (((ISINGD.EQ.4).OR.(DT_RNDM(DDTOT).GE.OHALF)).AND.
+ & ISINGD.NE.3) THEN
+ KP = 0
+ KT = 2
+ ENDIF
+ ELSE
+ KP = 1
+ KT = 0
+ IF (((ISINGD.EQ.4).OR.(DT_RNDM(FRADDH).GE.OHALF)).AND.
+ & ISINGD.NE.3) THEN
+ KP = 0
+ KT = 1
+ ENDIF
+ ENDIF
+ ELSE
+* double diffraction
+ KDIFF = -1
+ IF (DT_RNDM(FRADDH).LE.FRADDH) THEN
+ KP = 2
+ KT = 2
+ ELSE
+ KP = 1
+ KT = 1
+ ENDIF
+ ENDIF
+ CALL DT_DIFFKI(IFP1,IFP2,PP,MOP,KP,
+ & IFT1,IFT2,PT,MOT,KT,NCSY,IREJ1)
+ IF (IREJ1.EQ.0) THEN
+ IFLAGD = 2*KDIFF
+ IF ((KP.EQ.1).OR.(KT.EQ.1)) IFLAGD = KDIFF
+ ELSE
+ GOTO 9999
+ ENDIF
+ ENDIF
+ JDIFF = IFLAGD
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===difkin=============================================================*
+*
+CDECK ID>, DT_DIFFKI
+ SUBROUTINE DT_DIFFKI(IFP1,IFP2,PP,MOP,KP,
+ & IFT1,IFT2,PT,MOT,KT,NCSY,IREJ)
+
+************************************************************************
+* Kinematics of diffractive nucleon-nucleon interaction. *
+* IFP1/2 PDG-indizes of projectile partons *
+* (baryon: IFP2 - adiquark) *
+* PP(4) projectile 4-momentum *
+* IFT1/2 PDG-indizes of target partons *
+* (baryon: IFT1 - adiquark) *
+* PT(4) target 4-momentum *
+* KP = 0 projectile quasi-elastically scattered *
+* = 1 excited to low-mass diff. state *
+* = 2 excited to high-mass diff. state *
+* KT = 0 target quasi-elastically scattered *
+* = 1 excited to low-mass diff. state *
+* = 2 excited to high-mass diff. state *
+* This version dated 12.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY10=1.0D-10,TINY5=1.0D-5)
+
+ LOGICAL LSTART
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+
+ DIMENSION PITOT(4),BGTOT(4),PP1(4),PT1(4),PPBLOB(4),PTBLOB(4),
+ & PP(4),PT(4),PPOM1(4),DEV1(4),DEV2(4)
+
+ DATA LSTART /.TRUE./
+
+ IF (LSTART) THEN
+ WRITE(LOUT,2000)
+ 2000 FORMAT(/,1X,'DIFEVT: diffractive interactions treated ')
+ LSTART = .FALSE.
+ ENDIF
+
+ IREJ = 0
+
+* initialize common /DTDIKI/
+ CALL DT_DIFINI
+* store momenta of initial incoming particles for emc-check
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PP(1),PP(2),PP(3),PP(4),1,IDUM,IDUM)
+ CALL DT_EVTEMC(PT(1),PT(2),PT(3),PT(4),2,IDUM,IDUM)
+ ENDIF
+
+* masses of initial particles
+ XMP2 = PP(4)**2-PP(1)**2-PP(2)**2-PP(3)**2
+ XMT2 = PT(4)**2-PT(1)**2-PT(2)**2-PT(3)**2
+ IF ((XMP2.LT.ZERO).OR.(XMT2.LT.ZERO)) GOTO 9999
+ XMP = SQRT(XMP2)
+ XMT = SQRT(XMT2)
+* check quark-input (used to adjust coherence cond. for M-selection)
+ IBP = 0
+ IF ((ABS(IFP1).GE.1000).OR.(ABS(IFP2).GE.1000)) IBP = 1
+ IBT = 0
+ IF ((ABS(IFT1).GE.1000).OR.(ABS(IFT2).GE.1000)) IBT = 1
+
+* parameter for Lorentz-transformation into nucleon-nucleon cms
+ DO 3 K=1,4
+ PITOT(K) = PP(K)+PT(K)
+ 3 CONTINUE
+ XMTOT2 = PITOT(4)**2-PITOT(1)**2-PITOT(2)**2-PITOT(3)**2
+ IF (XMTOT2.LE.ZERO) THEN
+ WRITE(LOUT,1000) XMTOT2
+ 1000 FORMAT(1X,'DIFEVT: negative cm. energy! ',
+ & 'XMTOT2 = ',E12.3)
+ GOTO 9999
+ ENDIF
+ XMTOT = SQRT(XMTOT2)
+ DO 4 K=1,4
+ BGTOT(K) = PITOT(K)/XMTOT
+ 4 CONTINUE
+* transformation of nucleons into cms
+ CALL DT_DALTRA(BGTOT(4),-BGTOT(1),-BGTOT(2),-BGTOT(3),PP(1),PP(2),
+ & PP(3),PP(4),PPTOT,PP1(1),PP1(2),PP1(3),PP1(4))
+ CALL DT_DALTRA(BGTOT(4),-BGTOT(1),-BGTOT(2),-BGTOT(3),PT(1),PT(2),
+ & PT(3),PT(4),PTTOT,PT1(1),PT1(2),PT1(3),PT1(4))
+* rotation angles
+ COD = PP1(3)/PPTOT
+C SID = SQRT((ONE-COD)*(ONE+COD))
+ PPT = SQRT(PP1(1)**2+PP1(2)**2)
+ SID = PPT/PPTOT
+ COF = ONE
+ SIF = ZERO
+ IF(PPTOT*SID.GT.TINY10) THEN
+ COF = PP1(1)/(SID*PPTOT)
+ SIF = PP1(2)/(SID*PPTOT)
+ ANORF = SQRT(COF*COF+SIF*SIF)
+ COF = COF/ANORF
+ SIF = SIF/ANORF
+ ENDIF
+* check consistency
+ DO 5 K=1,4
+ DEV1(K) = ABS(PP1(K)+PT1(K))
+ 5 CONTINUE
+ DEV1(4) = ABS(DEV1(4)-XMTOT)
+ IF ((DEV1(1).GT.TINY10).OR.(DEV1(2).GT.TINY10).OR.
+ & (DEV1(3).GT.TINY10).OR.(DEV1(4).GT.TINY10)) THEN
+ WRITE(LOUT,1001) DEV1
+ 1001 FORMAT(1X,'DIFEVT: inconsitent Lorentz-transformation! ',
+ & /,8X,4E12.3)
+ GOTO 9999
+ ENDIF
+
+* select x-fractions in high-mass diff. interactions
+ IF ((KP.EQ.2).OR.(KT.EQ.2)) CALL DT_XVALHM(KP,KT)
+
+* select diffractive masses
+* - projectile
+ IF (KP.EQ.1) THEN
+ XMPF = DT_XMLMD(XMTOT)
+ CALL DT_LM2RES(IFP1,IFP2,XMPF,IDPR,IDXPR,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+ ELSEIF (KP.EQ.2) THEN
+ XMPF = DT_XMHMD(XMTOT,IBP,1)
+ ELSE
+ XMPF = XMP
+ ENDIF
+* - target
+ IF (KT.EQ.1) THEN
+ XMTF = DT_XMLMD(XMTOT)
+ CALL DT_LM2RES(IFT1,IFT2,XMTF,IDTR,IDXTR,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+ ELSEIF (KT.EQ.2) THEN
+ XMTF = DT_XMHMD(XMTOT,IBT,2)
+ ELSE
+ XMTF = XMT
+ ENDIF
+
+* kinematical treatment of "two-particle" system (masses - XMPF,XMTF)
+ XMPF2 = XMPF**2
+ XMTF2 = XMTF**2
+ PPBLOB(3) = DT_YLAMB(XMTOT2,XMPF2,XMTF2)/(2.D0*XMTOT)
+ PPBLOB(4) = SQRT(XMPF2+PPBLOB(3)**2)
+
+* select momentum transfer (all t-values used here are <0)
+* minimum absolute value to produce diffractive masses
+ TMIN = XMP2+XMPF2-2.0D0*(PP1(4)*PPBLOB(4)-PPTOT*PPBLOB(3))
+ TT = DT_TDIFF(XMTOT,TMIN,XMPF,KP,XMTF,KT,IREJ1)
+ IF (IREJ1.GT.0) GOTO 9999
+
+* longitudinal momentum of excited/elastically scattered projectile
+ PPBLOB(3) = (TT-XMP2-XMPF2+2.0D0*PP1(4)*PPBLOB(4))/(2.0D0*PPTOT)
+* total transverse momentum due to t-selection
+ PPBLT2 = PPBLOB(4)**2-PPBLOB(3)**2-XMPF2
+ IF (PPBLT2.LT.ZERO) THEN
+ WRITE(LOUT,1002) PPBLT2,KP,PP1,XMPF,KT,PT1,XMTF,TT
+ 1002 FORMAT(1X,'DIFEVT: inconsistent transverse momentum! ',
+ & E12.3,2(/,1X,I2,5E12.3),/,1X,E12.3)
+ GOTO 9999
+ ENDIF
+ CALL DT_DSFECF(SINPHI,COSPHI)
+ PPBLT = SQRT(PPBLT2)
+ PPBLOB(1) = COSPHI*PPBLT
+ PPBLOB(2) = SINPHI*PPBLT
+
+* rotate excited/elastically scattered projectile into n-n cms.
+ CALL DT_MYTRAN(1,PPBLOB(1),PPBLOB(2),PPBLOB(3),COD,SID,COF,SIF,
+ & XX,YY,ZZ)
+ PPBLOB(1) = XX
+ PPBLOB(2) = YY
+ PPBLOB(3) = ZZ
+
+* 4-momentum of excited/elastically scattered target and of exchanged
+* Pomeron
+ DO 6 K=1,4
+ IF (K.LT.4) PTBLOB(K) = -PPBLOB(K)
+ PPOM1(K) = PP1(K)-PPBLOB(K)
+ 6 CONTINUE
+ PTBLOB(4) = XMTOT-PPBLOB(4)
+
+* Lorentz-transformation back into system of initial diff. collision
+ CALL DT_DALTRA(BGTOT(4),BGTOT(1),BGTOT(2),BGTOT(3),
+ & PPBLOB(1),PPBLOB(2),PPBLOB(3),PPBLOB(4),
+ & PPTOTF,PPF(1),PPF(2),PPF(3),PPF(4))
+ CALL DT_DALTRA(BGTOT(4),BGTOT(1),BGTOT(2),BGTOT(3),
+ & PTBLOB(1),PTBLOB(2),PTBLOB(3),PTBLOB(4),
+ & PTTOTF,PTF(1),PTF(2),PTF(3),PTF(4))
+ CALL DT_DALTRA(BGTOT(4),BGTOT(1),BGTOT(2),BGTOT(3),
+ & PPOM1(1),PPOM1(2),PPOM1(3),PPOM1(4),
+ & PPOMTO,PPOM(1),PPOM(2),PPOM(3),PPOM(4))
+
+* store 4-momentum of elastically scattered particle (in single diff.
+* events)
+ IF (KP.EQ.0) THEN
+ DO 7 K=1,4
+ PSC(K) = PPF(K)
+ 7 CONTINUE
+ ELSEIF (KT.EQ.0) THEN
+ DO 8 K=1,4
+ PSC(K) = PTF(K)
+ 8 CONTINUE
+ ENDIF
+
+* check consistency of kinematical treatment so far
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(-PPF(1),-PPF(2),-PPF(3),-PPF(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(-PTF(1),-PTF(2),-PTF(3),-PTF(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,3,60,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+ DO 9 K=1,4
+ DEV1(K) = ABS(PP(K)-PPF(K)-PPOM(K))
+ DEV2(K) = ABS(PT(K)-PTF(K)+PPOM(K))
+ 9 CONTINUE
+ IF ((DEV1(1).GT.TINY5).OR.(DEV1(2).GT.TINY5).OR.
+ & (DEV1(3).GT.TINY5).OR.(DEV1(4).GT.TINY5).OR.
+ & (DEV2(1).GT.TINY5).OR.(DEV2(2).GT.TINY5).OR.
+ & (DEV2(3).GT.TINY5).OR.(DEV2(4).GT.TINY5)) THEN
+ WRITE(LOUT,1003) DEV1,DEV2
+ 1003 FORMAT(1X,'DIFEVT: inconsitent kinematical treatment! ',
+ & 2(/,8X,4E12.3))
+ GOTO 9999
+ ENDIF
+
+* kinematical treatment for low-mass diffraction
+ CALL DT_LMKINE(IFP1,IFP2,KP,IFT1,IFT2,KT,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+
+* dump diffractive chains into DTEVT1
+ CALL DT_DIFPUT(IFP1,IFP2,PP,MOP,KP,IFT1,IFT2,PT,MOT,KT,NCSY,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+
+ RETURN
+
+ 9999 CONTINUE
+ IRDIFF(1) = IRDIFF(1)+1
+ IREJ = 1
+ RETURN
+ END
+*
+*===xmhmd==============================================================*
+*
+CDECK ID>, DT_XMHMD
+ DOUBLE PRECISION FUNCTION DT_XMHMD(ECM,IB,MODE)
+
+************************************************************************
+* Diffractive mass in high mass single/double diffractive events. *
+* This version dated 11.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (OHALF=0.5D0,ONE=1.0D0,ZERO=0.0D0)
+
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+
+C DATA XCOLOW /0.05D0/
+ DATA XCOLOW /0.15D0/
+
+ DT_XMHMD = ZERO
+ XH = XPH(2)
+ IF (MODE.EQ.2) XH = XTH(2)
+
+* minimum Pomeron-x for high-mass diffraction
+* (adjusted to get a smooth transition between HM and LM component)
+ R = DT_RNDM(XH)
+ XDIMIN = (3.0D0+400.0D0*R**2)/(XH*ECM**2)
+ IF (ECM.LE.300.0D0) THEN
+ RR = (1.0D0-EXP(-((ECM/140.0D0)**4)))
+ XDIMIN = (3.0D0+400.0D0*(R**2)*RR)/(XH*ECM**2)
+ ENDIF
+* maximum Pomeron-x for high-mass diffraction
+* (coherence condition, adjusted to fit to experimental data)
+ IF (IB.NE.0) THEN
+* baryon-diffraction
+ XDIMAX = XCOLOW*(1.0D0+EXP(-((ECM/420.0D0)**2)))
+ ELSE
+* meson-diffraction
+ XDIMAX = XCOLOW*(1.0D0+4.0D0*EXP(-((ECM/420.0D0)**2)))
+ ENDIF
+* check boundaries
+ IF (XDIMIN.GE.XDIMAX) THEN
+ XDIMIN = OHALF*XDIMAX
+ ENDIF
+
+ KLOOP = 0
+ 1 CONTINUE
+ KLOOP = KLOOP+1
+ IF (KLOOP.GT.20) RETURN
+* sample Pomeron-x from 1/x-distribution (critical Pomeron)
+ XDIFF = DT_SAMPEX(XDIMIN,XDIMAX)
+* corr. diffr. mass
+ DT_XMHMD = ECM*SQRT(XDIFF)
+ IF (DT_XMHMD.LT.2.5D0) GOTO 1
+
+ RETURN
+ END
+*
+*===xmlmd==============================================================*
+*
+CDECK ID>, DT_XMLMD
+ DOUBLE PRECISION FUNCTION DT_XMLMD(ECM)
+
+************************************************************************
+* Diffractive mass in high mass single/double diffractive events. *
+* This version dated 11.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* minimum Pomeron-x for low-mass diffraction
+C AMO = 1.5D0
+ AMO = 2.0D0
+* maximum Pomeron-x for low-mass diffraction
+* (adjusted to get a smooth transition between HM and LM component)
+ R = DT_RNDM(AMO)
+ SAM = 1.0D0
+ IF (ECM.LE.300.0D0) SAM = 1.0D0-EXP(-((ECM/200.0D0)**4))
+ R = DT_RNDM(AMO)*SAM
+ AMAX= (1.0D0-SAM)*SQRT(0.1D0*ECM**2)+SAM*SQRT(400.0D0)
+ AMU = R*SQRT(100.0D0)+(1.0D0-R)*AMAX
+
+* selection of diffractive mass
+* (adjusted to get a smooth transition between HM and LM component)
+ R = DT_RNDM(AMU)
+ IF (ECM.LE.50.0D0) THEN
+ DT_XMLMD = AMO*(AMU/AMO)**R
+ ELSE
+ A = 0.7D0
+ IF (ECM.LE.300.0D0) A = 0.7D0*(1.0D0-EXP(-((ECM/100.0D0)**2)))
+ DT_XMLMD = 1.0D0/((R/(AMU**A)+(1.0D0-R)/(AMO**A))**(1.0D0/A))
+ ENDIF
+
+ RETURN
+ END
+*
+*===tdiff==============================================================*
+*
+CDECK ID>, DT_TDIFF
+ DOUBLE PRECISION FUNCTION DT_TDIFF(ECM,TMIN,XM1I,K1,XM2I,K2,IREJ)
+
+************************************************************************
+* t-selection for single/double diffractive interactions. *
+* ECM cm. energy *
+* TMIN minimum momentum transfer to produce diff. masses *
+* XM1/XM2 diffractively produced masses *
+* (for single diffraction XM2 is obsolete) *
+* K1/K2= 0 not excited *
+* = 1 low-mass excitation *
+* = 2 high-mass excitation *
+* This version dated 11.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0)
+
+ PARAMETER ( BTP0 = 3.7D0,
+ & ALPHAP = 0.24D0 )
+
+ IREJ = 0
+ NCLOOP = 0
+ DT_TDIFF = ZERO
+
+ IF (K1.GT.0) THEN
+ XM1 = XM1I
+ XM2 = XM2I
+ ELSE
+ XM1 = XM2I
+ ENDIF
+ XDI = (XM1/ECM)**2
+ IF ((K1.EQ.0).OR.(K2.EQ.0)) THEN
+* slope for single diffraction
+ SLOPE = BTP0-2.0D0*ALPHAP*LOG(XDI)
+ ELSE
+* slope for double diffraction
+ SLOPE = -2.0D0*ALPHAP*LOG(XDI*XM2**2)
+ ENDIF
+
+ 1 CONTINUE
+ NCLOOP = NCLOOP+1
+ IF (MOD(NCLOOP,1000).EQ.0) GOTO 9999
+ Y = DT_RNDM(XDI)
+ T = -LOG(1.0D0-Y)/SLOPE
+ IF (ABS(T).LE.ABS(TMIN)) GOTO 1
+ DT_TDIFF = -ABS(T)
+
+ RETURN
+
+ 9999 CONTINUE
+ WRITE(LOUT,1000) ECM,TMIN,XM1I,XM2I,K1,K2
+ 1000 FORMAT(1X,'DT_TDIFF: t-selection rejected!',/,
+ & 1X,'ECM = ',E12.3,' TMIN = ',E12.2,/,1X,'XM1I = ',
+ & E12.3,' XM2I = ',E12.3,' K1 = ',I2,' K2 = ',I2)
+ IREJ = 1
+ RETURN
+ END
+*
+*===xvalhm=============================================================*
+*
+CDECK ID>, DT_XVALHM
+ SUBROUTINE DT_XVALHM(KP,KT)
+
+************************************************************************
+* Sampling of parton x-values in high-mass diffractive interactions. *
+* This version dated 12.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,OHALF=0.5D0,ONE=1.0D0,TINY2=1.0D-2)
+
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+
+ DATA UNON,XVQTHR /2.0D0,0.8D0/
+
+ IF (KP.EQ.2) THEN
+* x-fractions of projectile valence partons
+ 1 CONTINUE
+ XPH(1) = DT_DBETAR(OHALF,UNON)
+ IF (XPH(1).GE.XVQTHR) GOTO 1
+ XPH(2) = ONE-XPH(1)
+* x-fractions of Pomeron q-aq-pair
+ XPOLO = TINY2
+ XPOHI = ONE-TINY2
+ XPPO(1) = DT_SAMPEX(XPOLO,XPOHI)
+ XPPO(2) = ONE-XPPO(1)
+* flavors of Pomeron q-aq-pair
+ IFLAV = INT(ONE+DT_RNDM(UNON)*(2.0D0+SEASQ))
+ IFPPO(1) = IFLAV
+ IFPPO(2) = -IFLAV
+ IF (DT_RNDM(UNON).GT.OHALF) THEN
+ IFPPO(1) = -IFLAV
+ IFPPO(2) = IFLAV
+ ENDIF
+ ENDIF
+
+ IF (KT.EQ.2) THEN
+* x-fractions of projectile target partons
+ 2 CONTINUE
+ XTH(1) = DT_DBETAR(OHALF,UNON)
+ IF (XTH(1).GE.XVQTHR) GOTO 2
+ XTH(2) = ONE-XTH(1)
+* x-fractions of Pomeron q-aq-pair
+ XPOLO = TINY2
+ XPOHI = ONE-TINY2
+ XTPO(1) = DT_SAMPEX(XPOLO,XPOHI)
+ XTPO(2) = ONE-XTPO(1)
+* flavors of Pomeron q-aq-pair
+ IFLAV = INT(ONE+DT_RNDM(XPOLO)*(2.0D0+SEASQ))
+ IFTPO(1) = IFLAV
+ IFTPO(2) = -IFLAV
+ IF (DT_RNDM(XPOLO).GT.OHALF) THEN
+ IFTPO(1) = -IFLAV
+ IFTPO(2) = IFLAV
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+*
+*===lm2res=============================================================*
+*
+CDECK ID>, DT_LM2RES
+ SUBROUTINE DT_LM2RES(IF1,IF2,XM,IDR,IDXR,IREJ)
+
+************************************************************************
+* Check low-mass diffractive excitation for resonance mass. *
+* (input) IF1/2 PDG-indizes of valence partons *
+* (in/out) XM diffractive mass requested/corrected *
+* (output) IDR/IDXR id./BAMJET-index of resonance *
+* This version dated 12.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,OHALF=0.5D0,ONE=1.0D0)
+
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+
+ IREJ = 0
+ IF1B = 0
+ IF2B = 0
+ XMI = XM
+
+* BAMJET indices of partons
+ IF1A = IDT_IPDG2B(IF1,1,2)
+ IF (ABS(IF1).GE.1000) IF1B = IDT_IPDG2B(IF1,2,2)
+ IF2A = IDT_IPDG2B(IF2,1,2)
+ IF (ABS(IF2).GE.1000) IF2B = IDT_IPDG2B(IF2,2,2)
+
+* get kind of chains (1 - q-aq, 2 - q-qq/aq-aqaq)
+ IDCH = 2
+ IF ((IF1B.EQ.0).AND.(IF2B.EQ.0)) IDCH = 1
+
+* check for resonance mass
+ CALL DT_CH2RES(IF1A,IF1B,IF2A,IF2B,IDR,IDXR,XMI,XMN,IDCH,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+
+ XM = XMN
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===lmkine=============================================================*
+*
+CDECK ID>, DT_LMKINE
+ SUBROUTINE DT_LMKINE(IFP1,IFP2,KP,IFT1,IFT2,KT,IREJ)
+
+************************************************************************
+* Kinematical treatment of low-mass excitations. *
+* This version dated 12.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,OHALF=0.5D0,ONE=1.0D0)
+
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+
+ DIMENSION P1(4),P2(4)
+
+ IREJ = 0
+
+ IF (KP.EQ.1) THEN
+ PABS = SQRT(PPF(1)**2+PPF(2)**2+PPF(3)**2)
+ POE = PPF(4)/PABS
+ FAC1 = OHALF*(POE+ONE)
+ FAC2 = -OHALF*(POE-ONE)
+ DO 1 K=1,3
+ PPLM1(K) = FAC1*PPF(K)
+ PPLM2(K) = FAC2*PPF(K)
+ 1 CONTINUE
+ PPLM1(4) = FAC1*PABS
+ PPLM2(4) = -FAC2*PABS
+ IF (IMSHL.EQ.1) THEN
+
+ XM1 = PYMASS(IFP1)
+ XM2 = PYMASS(IFP2)
+
+ CALL DT_MASHEL(PPLM1,PPLM2,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 2 K=1,4
+ PPLM1(K) = P1(K)
+ PPLM2(K) = P2(K)
+ 2 CONTINUE
+ ENDIF
+ ENDIF
+
+ IF (KT.EQ.1) THEN
+ PABS = SQRT(PTF(1)**2+PTF(2)**2+PTF(3)**2)
+ POE = PTF(4)/PABS
+ FAC1 = OHALF*(POE+ONE)
+ FAC2 = -OHALF*(POE-ONE)
+ DO 3 K=1,3
+ PTLM2(K) = FAC1*PTF(K)
+ PTLM1(K) = FAC2*PTF(K)
+ 3 CONTINUE
+ PTLM2(4) = FAC1*PABS
+ PTLM1(4) = -FAC2*PABS
+ IF (IMSHL.EQ.1) THEN
+
+ XM1 = PYMASS(IFT1)
+ XM2 = PYMASS(IFT2)
+
+ CALL DT_MASHEL(PTLM1,PTLM2,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 4 K=1,4
+ PTLM1(K) = P1(K)
+ PTLM2(K) = P2(K)
+ 4 CONTINUE
+ ENDIF
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ WRITE(LOUT,'(A)') 'LMKINE: kinematical treatment rejected'
+ IREJ = 1
+ RETURN
+ END
+*
+*===difini=============================================================*
+*
+CDECK ID>, DT_DIFINI
+ SUBROUTINE DT_DIFINI
+
+************************************************************************
+* Initialization of common /DTDIKI/ *
+* This version dated 12.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,OHALF=0.5D0,ONE=1.0D0)
+
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+
+ DO 1 K=1,4
+ PPOM(K) = ZERO
+ PSC(K) = ZERO
+ PPF(K) = ZERO
+ PTF(K) = ZERO
+ PPLM1(K) = ZERO
+ PPLM2(K) = ZERO
+ PTLM1(K) = ZERO
+ PTLM2(K) = ZERO
+ 1 CONTINUE
+ DO 2 K=1,2
+ XPH(K) = ZERO
+ XPPO(K) = ZERO
+ XTH(K) = ZERO
+ XTPO(K) = ZERO
+ IFPPO(K) = 0
+ IFTPO(K) = 0
+ 2 CONTINUE
+ IDPR = 0
+ IDXPR = 0
+ IDTR = 0
+ IDXTR = 0
+
+ RETURN
+ END
+*
+*===difput=============================================================*
+*
+CDECK ID>, DT_DIFPUT
+ SUBROUTINE DT_DIFPUT(IFP1,IFP2,PP,MOP,KP,IFT1,IFT2,PT,MOT,KT,NCSY,
+ & IREJ)
+
+************************************************************************
+* Dump diffractive chains into DTEVT1 *
+* This version dated 12.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,OHALF=0.5D0,ONE=1.0D0)
+
+ LOGICAL LCHK
+
+* kinematics of diffractive interactions (DTUNUC 1.x)
+ COMMON /DTDIKI/ XPH(2),XPPO(2),XTH(2),XTPO(2),PPOM(4),PSC(4),
+ & PPF(4),PTF(4),
+ & PPLM1(4),PPLM2(4),PTLM1(4),PTLM2(4),
+ & IDPR,IDXPR,IDTR,IDXTR,IFPPO(2),IFTPO(2)
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4),PCH(4),PP(4),PT(4),
+ & P1(4),P2(4),P3(4),P4(4)
+
+ IREJ = 0
+
+ IF (KP.EQ.1) THEN
+ DO 1 K=1,4
+ PCH(K) = PPLM1(K)+PPLM2(K)
+ 1 CONTINUE
+ ID1 = IFP1
+ ID2 = IFP2
+ IF (DT_RNDM(PT).GT.OHALF) THEN
+ ID1 = IFP2
+ ID2 = IFP1
+ ENDIF
+ CALL DT_EVTPUT(21,ID1,MOP,0,PPLM1(1),PPLM1(2),PPLM1(3),
+ & PPLM1(4),0,0,0)
+ CALL DT_EVTPUT(21,ID2,MOP,0,PPLM2(1),PPLM2(2),PPLM2(3),
+ & PPLM2(4),0,0,0)
+ CALL DT_EVTPUT(281,88888,-2,-1,PCH(1),PCH(2),PCH(3),PCH(4),
+ & IDPR,IDXPR,8)
+ ELSEIF (KP.EQ.2) THEN
+ DO 2 K=1,4
+ PP1(K) = XPH(1)*PP(K)
+ PP2(K) = XPH(2)*PP(K)
+ PT1(K) = -XPPO(1)*PPOM(K)
+ PT2(K) = -XPPO(2)*PPOM(K)
+ 2 CONTINUE
+ CALL DT_CHKCSY(IFP1,IFPPO(1),LCHK)
+ XM1 = ZERO
+ XM2 = ZERO
+ IF (LCHK) THEN
+ CALL DT_MASHEL(PP1,PT1,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ CALL DT_MASHEL(PP2,PT2,XM1,XM2,P3,P4,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 3 K=1,4
+ PP1(K) = P1(K)
+ PT1(K) = P2(K)
+ PP2(K) = P3(K)
+ PT2(K) = P4(K)
+ 3 CONTINUE
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,8)
+ CALL DT_EVTPUT(-41,IFPPO(1),MOT,0,PT1(1),PT1(2),PT1(3),
+ & PT1(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,8)
+ CALL DT_EVTPUT(-41,IFPPO(2),MOT,0,PT2(1),PT2(2),PT2(3),
+ & PT2(4),0,0,8)
+ ELSE
+ CALL DT_MASHEL(PP1,PT2,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ CALL DT_MASHEL(PP2,PT1,XM1,XM2,P3,P4,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 4 K=1,4
+ PP1(K) = P1(K)
+ PT2(K) = P2(K)
+ PP2(K) = P3(K)
+ PT1(K) = P4(K)
+ 4 CONTINUE
+ CALL DT_EVTPUT(-21,IFP1,MOP,0,PP1(1),PP1(2),PP1(3),PP1(4),
+ & 0,0,8)
+ CALL DT_EVTPUT(-41,IFPPO(2),MOT,0,PT2(1),PT2(2),PT2(3),
+ & PT2(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFP2,MOP,0,PP2(1),PP2(2),PP2(3),PP2(4),
+ & 0,0,8)
+ CALL DT_EVTPUT(-41,IFPPO(1),MOT,0,PT1(1),PT1(2),PT1(3),
+ & PT1(4),0,0,8)
+ ENDIF
+ NCSY = NCSY+1
+ ELSE
+ CALL DT_EVTPUT(1,IDHKK(MOP),MOP,0,PSC(1),PSC(2),PSC(3),PSC(4),
+ & 0,0,0)
+ ENDIF
+
+ IF (KT.EQ.1) THEN
+ DO 5 K=1,4
+ PCH(K) = PTLM1(K)+PTLM2(K)
+ 5 CONTINUE
+ ID1 = IFT1
+ ID2 = IFT2
+ IF (DT_RNDM(PT).GT.OHALF) THEN
+ ID1 = IFT2
+ ID2 = IFT1
+ ENDIF
+ CALL DT_EVTPUT(22,ID1,MOT,0,PTLM1(1),PTLM1(2),PTLM1(3),
+ & PTLM1(4),0,0,0)
+ CALL DT_EVTPUT(22,ID2,MOT,0,PTLM2(1),PTLM2(2),PTLM2(3),
+ & PTLM2(4),0,0,0)
+ CALL DT_EVTPUT(281,88888,-2,-1,PCH(1),PCH(2),PCH(3),PCH(4),
+ & IDTR,IDXTR,8)
+ ELSEIF (KT.EQ.2) THEN
+ DO 6 K=1,4
+ PP1(K) = XTPO(1)*PPOM(K)
+ PP2(K) = XTPO(2)*PPOM(K)
+ PT1(K) = XTH(2)*PT(K)
+ PT2(K) = XTH(1)*PT(K)
+ 6 CONTINUE
+ CALL DT_CHKCSY(IFTPO(1),IFT1,LCHK)
+ XM1 = ZERO
+ XM2 = ZERO
+ IF (LCHK) THEN
+ CALL DT_MASHEL(PP1,PT1,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ CALL DT_MASHEL(PP2,PT2,XM1,XM2,P3,P4,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 7 K=1,4
+ PP1(K) = P1(K)
+ PT1(K) = P2(K)
+ PP2(K) = P3(K)
+ PT2(K) = P4(K)
+ 7 CONTINUE
+ CALL DT_EVTPUT(-41,IFTPO(1),MOP,0,PP1(1),PP1(2),PP1(3),
+ & PP1(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,8)
+ CALL DT_EVTPUT(-41,IFTPO(2),MOP,0,PP2(1),PP2(2),PP2(3),
+ & PP2(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,8)
+ ELSE
+ CALL DT_MASHEL(PP1,PT2,XM1,XM2,P1,P2,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ CALL DT_MASHEL(PP2,PT1,XM1,XM2,P3,P4,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ DO 8 K=1,4
+ PP1(K) = P1(K)
+ PT2(K) = P2(K)
+ PP2(K) = P3(K)
+ PT1(K) = P4(K)
+ 8 CONTINUE
+ CALL DT_EVTPUT(-41,IFTPO(1),MOP,0,PP1(1),PP1(2),PP1(3),
+ & PP1(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFT2,MOT,0,PT2(1),PT2(2),PT2(3),PT2(4),
+ & 0,0,8)
+ CALL DT_EVTPUT(-41,IFTPO(2),MOP,0,PP2(1),PP2(2),PP2(3),
+ & PP2(4),0,0,8)
+ CALL DT_EVTPUT(-21,IFT1,MOT,0,PT1(1),PT1(2),PT1(3),PT1(4),
+ & 0,0,8)
+ ENDIF
+ NCSY = NCSY+1
+ ELSE
+ CALL DT_EVTPUT(1,IDHKK(MOT),MOT,0,PSC(1),PSC(2),PSC(3),PSC(4),
+ & 0,0,0)
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IRDIFF(2) = IRDIFF(2)+1
+ IREJ = 1
+ RETURN
+ END
+*
+*===evtfrg=============================================================*
+*
+CDECK ID>, DT_EVTFRG
+ SUBROUTINE DT_EVTFRG(KMODE,NFRG,NPYMEM,IREJ)
+
+************************************************************************
+* Hadronization of chains in DTEVT1. *
+* *
+* Input: *
+* KMODE = 1 hadronization of PHOJET-chains (id=77xxx) *
+* = 2 hadronization of DTUNUC-chains (id=88xxx) *
+* NFRG if KMODE = 1 : upper index of PHOJET-scatterings to be *
+* hadronized with one PYEXEC call *
+* if KMODE = 2 : max. number of DTUNUC-chains to be hadronized *
+* with one PYEXEC call *
+* Output: *
+* NPYMEM number of entries in JETSET-common after hadronization *
+* IREJ rejection flag *
+* *
+* This version dated 17.09.00 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY3=1.0D-3,TINY1=1.0D-1)
+ PARAMETER (ONE=1.0D0,ZERO=0.0D0)
+
+ LOGICAL LACCEP
+
+ PARAMETER (MXJOIN=200)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* flags for diffractive interactions (DTUNUC 1.x)
+ COMMON /DTFLG3/ ISINGD,IDOUBD,IFLAGD,IDIFF
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* phojet
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+* jetset
+
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ PARAMETER (MAXLND=4000)
+ COMMON/PYJETS/N,NPAD,K(MAXLND,5),P(MAXLND,5),V(MAXLND,5)
+
+ INTEGER PYK
+
+ DIMENSION IJOIN(MXJOIN),ISJOIN(MXJOIN),IHISMO(8000),IFLG(4000)
+
+ MODE = KMODE
+ ISTSTG = 7
+ IF (MODE.NE.1) ISTSTG = 8
+ IREJ = 0
+
+ IP = 0
+ ISH = 0
+ INIEMC = 1
+ NEND = NHKK
+ NACCEP = 0
+ IFRG = 0
+ IF (NPOINT(4).LE.NPOINT(3)) NPOINT(4) = NHKK+1
+ DO 10 I=NPOINT(3),NEND
+* sr 14.02.00: seems to be not necessary anymore, commented
+C LACCEP = ((NOBAM(I).EQ.0).AND.(MODE.EQ.1)).OR.
+C & ((NOBAM(I).NE.0).AND.(MODE.EQ.2))
+ LACCEP = .TRUE.
+* pick up chains from dtevt1
+ IDCHK = IDHKK(I)/10000
+ IF ((IDCHK.EQ.ISTSTG).AND.LACCEP) THEN
+ IF (IDCHK.EQ.7) THEN
+ IPJE = IDHKK(I)-IDCHK*10000
+ IF (IPJE.NE.IFRG) THEN
+ IFRG = IPJE
+ IF (IFRG.GT.NFRG) GOTO 16
+ ENDIF
+ ELSE
+ IPJE = 1
+ IFRG = IFRG+1
+ IF (IFRG.GT.NFRG) THEN
+ NFRG = -1
+ GOTO 16
+ ENDIF
+ ENDIF
+* statistics counter
+c IF (IDCH(I).LE.8)
+c & ICCHAI(2,IDCH(I)) = ICCHAI(2,IDCH(I))+1
+c IF (IDRES(I).NE.0) ICRES(IDCH(I)) = ICRES(IDCH(I))+1
+* special treatment for small chains already corrected to hadrons
+ IF (IDRES(I).NE.0) THEN
+ IF (IDRES(I).EQ.11) THEN
+ ID = IDXRES(I)
+ ELSE
+ ID = IDT_IPDGHA(IDXRES(I))
+ ENDIF
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PHKK(1,I),PHKK(2,I),PHKK(3,I),
+ & PHKK(4,I),INIEMC,IDUM,IDUM)
+ INIEMC = 2
+ ENDIF
+ IP = IP+1
+ IF (IP.GT.MSTU(4)) STOP ' NEWFRA 1: IP.GT.MSTU(4) !'
+ P(IP,1) = PHKK(1,I)
+ P(IP,2) = PHKK(2,I)
+ P(IP,3) = PHKK(3,I)
+ P(IP,4) = PHKK(4,I)
+ P(IP,5) = PHKK(5,I)
+ K(IP,1) = 1
+ K(IP,2) = ID
+ K(IP,3) = 0
+ K(IP,4) = 0
+ K(IP,5) = 0
+ IHIST(2,I) = 10000*IPJE+IP
+ IF (IHIST(1,I).LE.-100) THEN
+ ISH = ISH+1
+ IF (ISH.GT.MXJOIN) STOP 'ISH > MXJOIN !'
+ ISJOIN(ISH) = I
+ ENDIF
+ N = IP
+ IHISMO(IP) = I
+ ELSE
+ IJ = 0
+ DO 11 KK=JMOHKK(1,I),JMOHKK(2,I)
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PHKK(1,KK),PHKK(2,KK),PHKK(3,KK),
+ & PHKK(4,KK),INIEMC,IDUM,IDUM)
+ CALL DT_EVTFLC(IDHKK(KK),1,INIEMC,IDUM,IDUM)
+ INIEMC = 2
+ ENDIF
+ ID = IDHKK(KK)
+ IF (ID.EQ.0) ID = 21
+c PTOT = SQRT(PHKK(1,KK)**2+PHKK(2,KK)**2+PHKK(3,KK)**2)
+c AM0 = SQRT(ABS((PHKK(4,KK)-PTOT)*(PHKK(4,KK)+PTOT)))
+
+c AMRQ = PYMASS(ID)
+
+c AMDIF2 = (AM0-AMRQ)*(AM0+AMRQ)
+c IF ((ABS(AMDIF2).GT.TINY3).AND.(PTOT.GT.ZERO).AND.
+c & (ABS(IDIFF).EQ.0)) THEN
+cC WRITE(LOUT,*)'here: ',NEVHKK,AM0,AMRQ
+c DELTA = -AMDIF2/(2.0D0*(PHKK(4,KK)+PTOT))
+c PHKK(4,KK) = PHKK(4,KK)+DELTA
+c PTOT1 = PTOT-DELTA
+c PHKK(1,KK) = PHKK(1,KK)*PTOT1/PTOT
+c PHKK(2,KK) = PHKK(2,KK)*PTOT1/PTOT
+c PHKK(3,KK) = PHKK(3,KK)*PTOT1/PTOT
+c PHKK(5,KK) = AMRQ
+c ENDIF
+ IP = IP+1
+ IF (IP.GT.MSTU(4)) STOP ' NEWFRA 2: IP.GT.MSTU(4) !'
+ P(IP,1) = PHKK(1,KK)
+ P(IP,2) = PHKK(2,KK)
+ P(IP,3) = PHKK(3,KK)
+ P(IP,4) = PHKK(4,KK)
+ P(IP,5) = PHKK(5,KK)
+ K(IP,1) = 1
+ K(IP,2) = ID
+ K(IP,3) = 0
+ K(IP,4) = 0
+ K(IP,5) = 0
+ IHIST(2,KK) = 10000*IPJE+IP
+ IF (IHIST(1,KK).LE.-100) THEN
+ ISH = ISH+1
+ IF (ISH.GT.MXJOIN) STOP 'ISH > MXJOIN !'
+ ISJOIN(ISH) = KK
+ ENDIF
+ IJ = IJ+1
+ IF (IJ.GT.MXJOIN) STOP 'IJ > MXJOIN !'
+ IJOIN(IJ) = IP
+ IHISMO(IP) = I
+ 11 CONTINUE
+ N = IP
+* join the two-parton system
+
+ CALL PYJOIN(IJ,IJOIN)
+
+ ENDIF
+ IDHKK(I) = 99999
+ ENDIF
+ 10 CONTINUE
+ 16 CONTINUE
+ N = IP
+
+ IF (IP.GT.0) THEN
+
+* final state parton shower
+ DO 136 NPJE=1,IPJE
+ IF ((MCGENE.EQ.2).AND.(ISH.GE.2)) THEN
+ IF ((ISWMDL(8).EQ.1).OR.(ISWMDL(8).EQ.3)) THEN
+ DO 130 K1=1,ISH
+ IF (ISJOIN(K1).EQ.0) GOTO 130
+ I = ISJOIN(K1)
+ IF ((IPAMDL(102).EQ.1).AND.(IHIST(1,I).NE.-100))
+ & GOTO 130
+ IH1 = IHIST(2,I)/10000
+ IF (IH1.NE.NPJE) GOTO 130
+ IH1 = IHIST(2,I)-IH1*10000
+ DO 135 K2=K1+1,ISH
+ IF (ISJOIN(K2).EQ.0) GOTO 135
+ II = ISJOIN(K2)
+ IH2 = IHIST(2,II)/10000
+ IF (IH2.NE.NPJE) GOTO 135
+ IH2 = IHIST(2,II)-IH2*10000
+ IF (IHIST(1,I).EQ.IHIST(1,II)) THEN
+ PT1 = SQRT(PHKK(1,II)**2+PHKK(2,II)**2)
+ PT2 = SQRT(PHKK(1, I)**2+PHKK(2, I)**2)
+
+ RQLUN = MIN(PT1,PT2)
+ CALL PYSHOW(IH1,IH2,RQLUN)
+
+ ISJOIN(K1) = 0
+ ISJOIN(K2) = 0
+ GOTO 130
+ ENDIF
+ 135 CONTINUE
+ 130 CONTINUE
+ ENDIF
+ ENDIF
+ 136 CONTINUE
+
+ CALL DT_INITJS(MODE)
+* hadronization
+
+ CALL PYEXEC
+
+ IF (MSTU(24).NE.0) THEN
+ WRITE(LOUT,*) ' JETSET-reject at event',
+ & NEVHKK,MSTU(24),KMODE
+C CALL DT_EVTOUT(4)
+
+C CALL PYLIST(2)
+
+ GOTO 9999
+ ENDIF
+
+* number of entries in LUJETS
+
+ NLINES = PYK(0,1)
+
+ NPYMEM = NLINES
+
+ DO 12 I=1,NLINES
+ IFLG(I) = 0
+ 12 CONTINUE
+
+ DO 13 II=1,NLINES
+
+ IF ((PYK(II,7).EQ.1).AND.(IFLG(II).NE.1)) THEN
+
+* pick up mother resonance if possible and put it together with
+* their decay-products into the common
+ IDXMOR = K(II,3)
+ IF ((IDXMOR.GE.1).AND.(IDXMOR.LE.MAXLND)) THEN
+ KFMOR = K(IDXMOR,2)
+ ISMOR = K(IDXMOR,1)
+ ELSE
+ KFMOR = 91
+ ISMOR = 1
+ ENDIF
+ IF ((KFMOR.NE.91).AND.(KFMOR.NE.92).AND.
+ & (KFMOR.NE.94).AND.(ISMOR.EQ.11)) THEN
+ ID = K(IDXMOR,2)
+
+ MO = IHISMO(PYK(IDXMOR,15))
+ PX = PYP(IDXMOR,1)
+ PY = PYP(IDXMOR,2)
+ PZ = PYP(IDXMOR,3)
+ PE = PYP(IDXMOR,4)
+
+ CALL DT_EVTPUT(2,ID,MO,0,PX,PY,PZ,PE,0,0,0)
+ IFLG(IDXMOR) = 1
+ MO = NHKK
+ DO 15 JDAUG=K(IDXMOR,4),K(IDXMOR,5)
+
+ IF (PYK(JDAUG,7).EQ.1) THEN
+ ID = PYK(JDAUG,8)
+ PX = PYP(JDAUG,1)
+ PY = PYP(JDAUG,2)
+ PZ = PYP(JDAUG,3)
+ PE = PYP(JDAUG,4)
+
+ CALL DT_EVTPUT(1,ID,MO,0,PX,PY,PZ,PE,0,0,0)
+ IF (LEMCCK) THEN
+
+ PX = -PYP(JDAUG,1)
+ PY = -PYP(JDAUG,2)
+ PZ = -PYP(JDAUG,3)
+ PE = -PYP(JDAUG,4)
+
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM,IDUM)
+ ENDIF
+ IFLG(JDAUG) = 1
+ ENDIF
+ 15 CONTINUE
+ ELSE
+* there was no mother resonance
+
+ MO = IHISMO(PYK(II,15))
+ ID = PYK(II,8)
+ PX = PYP(II,1)
+ PY = PYP(II,2)
+ PZ = PYP(II,3)
+ PE = PYP(II,4)
+
+ CALL DT_EVTPUT(1,ID,MO,0,PX,PY,PZ,PE,0,0,0)
+ IF (LEMCCK) THEN
+
+ PX = -PYP(II,1)
+ PY = -PYP(II,2)
+ PZ = -PYP(II,3)
+ PE = -PYP(II,4)
+
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM,IDUM)
+ ENDIF
+ ENDIF
+ ENDIF
+ 13 CONTINUE
+ IF (LEMCCK) THEN
+ CHKLEV = TINY1
+ CALL DT_EVTEMC(DUM,DUM,DUM,CHKLEV,-1,6,IREJ1)
+C IF (IREJ1.NE.0) CALL DT_EVTOUT(4)
+ ENDIF
+
+* global energy-momentum & flavor conservation check
+**sr 16.5. this check is skipped in case of phojet-treatment
+ IF (MCGENE.EQ.1)
+ & CALL DT_EMC2(9,10,0,0,0,3,1,0,0,0,0,3,4,12,IREJ3)
+
+* update statistics-counter for diffraction
+c IF (IFLAGD.NE.0) THEN
+c ICDIFF(1) = ICDIFF(1)+1
+c IF (IFLAGD.EQ. 1) ICDIFF(2) = ICDIFF(2)+1
+c IF (IFLAGD.EQ. 2) ICDIFF(3) = ICDIFF(3)+1
+c IF (IFLAGD.EQ.-1) ICDIFF(4) = ICDIFF(4)+1
+c IF (IFLAGD.EQ.-2) ICDIFF(5) = ICDIFF(5)+1
+c ENDIF
+
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===decay==============================================================*
+*
+CDECK ID>, DT_DECAYS
+ SUBROUTINE DT_DECAYS(PIN,IDXIN,POUT,IDXOUT,NSEC,IREJ)
+
+************************************************************************
+* Resonance-decay. *
+* This subroutine replaces DDECAY/DECHKK. *
+* PIN(4) 4-momentum of resonance (input) *
+* IDXIN BAMJET-index of resonance (input) *
+* POUT(20,4) 4-momenta of decay-products (output) *
+* IDXOUT(20) BAMJET-indices of decay-products (output) *
+* NSEC number of secondaries (output) *
+* Adopted from the original version DECHKK. *
+* This version dated 09.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY17=1.0D-17)
+
+* HADRIN: decay channel information
+ PARAMETER (IDMAX9=602)
+ CHARACTER*8 ZKNAME
+ COMMON /HNDECH/ ZKNAME(IDMAX9),WT(IDMAX9),NZK(IDMAX9,3)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ DIMENSION PIN(4),PI(20,4),POUT(20,4),IDXOUT(20),
+ & EF(3),PF(3),PFF(3),IDXSTK(20),IDX(3),
+ & CODF(3),COFF(3),SIFF(3),DCOS(3),DCOSF(3)
+
+* ISTAB = 1 strong and weak decays
+* = 2 strong decays only
+* = 3 strong decays, weak decays for charmed particles and tau
+* leptons only
+ DATA ISTAB /2/
+
+ IREJ = 0
+ NSEC = 0
+* put initial resonance to stack
+ NSTK = 1
+ IDXSTK(NSTK) = IDXIN
+ DO 5 I=1,4
+ PI(NSTK,I) = PIN(I)
+ 5 CONTINUE
+
+* store initial configuration for energy-momentum cons. check
+ IF (LEMCCK) CALL DT_EVTEMC(PI(NSTK,1),PI(NSTK,2),PI(NSTK,3),
+ & PI(NSTK,4),1,IDUM,IDUM)
+
+ 100 CONTINUE
+* get particle from stack
+ IDXI = IDXSTK(NSTK)
+* skip stable particles
+ IF (ISTAB.EQ.1) THEN
+ IF ((IDXI.EQ.135).OR. (IDXI.EQ.136)) GOTO 10
+ IF ((IDXI.GE. 1).AND.(IDXI.LE. 7)) GOTO 10
+ ELSEIF (ISTAB.EQ.2) THEN
+ IF ((IDXI.GE. 1).AND.(IDXI.LE. 30)) GOTO 10
+ IF ((IDXI.GE. 97).AND.(IDXI.LE.103)) GOTO 10
+ IF ((IDXI.GE.115).AND.(IDXI.LE.122)) GOTO 10
+ IF ((IDXI.GE.131).AND.(IDXI.LE.136)) GOTO 10
+ IF ( IDXI.EQ.109) GOTO 10
+ IF ((IDXI.GE.137).AND.(IDXI.LE.160)) GOTO 10
+ ELSEIF (ISTAB.EQ.3) THEN
+ IF ((IDXI.GE. 1).AND.(IDXI.LE. 23)) GOTO 10
+ IF ((IDXI.GE. 97).AND.(IDXI.LE.103)) GOTO 10
+ IF ((IDXI.GE.109).AND.(IDXI.LE.115)) GOTO 10
+ IF ((IDXI.GE.133).AND.(IDXI.LE.136)) GOTO 10
+ ENDIF
+
+* calculate direction cosines and Lorentz-parameter of decaying part.
+ PTOT = SQRT(PI(NSTK,1)**2+PI(NSTK,2)**2+PI(NSTK,3)**2)
+ PTOT = MAX(PTOT,TINY17)
+ DO 1 I=1,3
+ DCOS(I) = PI(NSTK,I)/PTOT
+ 1 CONTINUE
+ GAM = PI(NSTK,4)/AAM(IDXI)
+ BGAM = PTOT/AAM(IDXI)
+
+* get decay-channel
+ KCHAN = K1(IDXI)-1
+ 2 CONTINUE
+ KCHAN = KCHAN+1
+ IF ((DT_RNDM(GAM)-TINY17).GT.WT(KCHAN)) GOTO 2
+
+* identities of secondaries
+ IDX(1) = NZK(KCHAN,1)
+ IDX(2) = NZK(KCHAN,2)
+ IF (IDX(2).LT.1) GOTO 9999
+ IDX(3) = NZK(KCHAN,3)
+
+* handle decay in rest system of decaying particle
+ IF (IDX(3).EQ.0) THEN
+* two-particle decay
+ NDEC = 2
+ CALL DT_DTWOPD(AAM(IDXI),EF(1),EF(2),PF(1),PF(2),
+ & CODF(1),COFF(1),SIFF(1),CODF(2),COFF(2),SIFF(2),
+ & AAM(IDX(1)),AAM(IDX(2)))
+ ELSE
+* three-particle decay
+ NDEC = 3
+ CALL DT_DTHREP(AAM(IDXI),EF(1),EF(2),EF(3),PF(1),PF(2),PF(3),
+ & CODF(1),COFF(1),SIFF(1),CODF(2),COFF(2),SIFF(2),
+ & CODF(3),COFF(3),SIFF(3),
+ & AAM(IDX(1)),AAM(IDX(2)),AAM(IDX(3)))
+ ENDIF
+ NSTK = NSTK-1
+
+* transform decay products back
+ DO 3 I=1,NDEC
+ NSTK = NSTK+1
+ CALL DT_DTRAFO(GAM,BGAM,DCOS(1),DCOS(2),DCOS(3),
+ & CODF(I),COFF(I),SIFF(I),PF(I),EF(I),
+ & PFF(I),DCOSF(1),DCOSF(2),DCOSF(3),PI(NSTK,4))
+* add particle to stack
+ IDXSTK(NSTK) = IDX(I)
+ DO 4 J=1,3
+ PI(NSTK,J) = DCOSF(J)*PFF(I)
+ 4 CONTINUE
+ 3 CONTINUE
+ GOTO 100
+
+ 10 CONTINUE
+* stable particle, put to output-arrays
+ NSEC = NSEC+1
+ DO 6 I=1,4
+ POUT(NSEC,I) = PI(NSTK,I)
+ 6 CONTINUE
+ IDXOUT(NSEC) = IDXSTK(NSTK)
+* store secondaries for energy-momentum conservation check
+ IF (LEMCCK)
+ &CALL DT_EVTEMC(-POUT(NSEC,1),-POUT(NSEC,2),-POUT(NSEC,3),
+ & -POUT(NSEC,4),2,IDUM,IDUM)
+ NSTK = NSTK-1
+ IF (NSTK.GT.0) GOTO 100
+
+* check energy-momentum conservation
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,3,5,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===decay1=============================================================*
+*
+CDECK ID>, DT_DECAY1
+ SUBROUTINE DT_DECAY1
+
+************************************************************************
+* Decay of resonances stored in DTEVT1. *
+* This version dated 20.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ DIMENSION PIN(4),POUT(20,4),IDXOUT(20)
+
+ NEND = NHKK
+C DO 1 I=NPOINT(5),NEND
+ DO 1 I=NPOINT(4),NEND
+ IF (ABS(ISTHKK(I)).EQ.1) THEN
+ DO 2 K=1,4
+ PIN(K) = PHKK(K,I)
+ 2 CONTINUE
+ IDXIN = IDBAM(I)
+ CALL DT_DECAYS(PIN,IDXIN,POUT,IDXOUT,NSEC,IREJ)
+ IF (NSEC.GT.1) THEN
+ DO 3 N=1,NSEC
+ IDHAD = IDT_IPDGHA(IDXOUT(N))
+ CALL DT_EVTPUT(1,IDHAD,I,0,POUT(N,1),POUT(N,2),
+ & POUT(N,3),POUT(N,4),0,0,0)
+ 3 CONTINUE
+ ENDIF
+ ENDIF
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===decpi0=============================================================*
+*
+CDECK ID>, DT_DECPI0
+ SUBROUTINE DT_DECPI0
+
+************************************************************************
+* Decay of pi0 handled with JETSET. *
+* This version dated 18.02.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY3=1.0D-3,ONE=1.0D0,ZERO=0.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ PARAMETER (MAXLND=4000)
+ COMMON/PYJETS/N,NPAD,K(MAXLND,5),P(MAXLND,5),V(MAXLND,5)
+
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ INTEGER PYCOMP,PYK
+
+ DIMENSION IHISMO(NMXHKK),P1(4)
+
+ TWOPI = 2.0D0*ATAN2(0.0D0,-1.0D0)
+
+ CALL DT_INITJS(2)
+* allow pi0 decay
+
+ KC = PYCOMP(111)
+
+ MDCY(KC,1) = 1
+
+ NN = 0
+ INI = 0
+ DO 1 I=1,NHKK
+ IF ((ISTHKK(I).EQ.1).AND.(IDHKK(I).EQ.111)) THEN
+ IF (INI.EQ.0) THEN
+ INI = 1
+ ELSE
+ INI = 2
+ ENDIF
+ IF (LEMCCK) CALL DT_EVTEMC(PHKK(1,I),PHKK(2,I),PHKK(3,I),
+ & PHKK(4,I),INI,IDUM,IDUM)
+ PT = SQRT(PHKK(1,I)**2+PHKK(2,I)**2)
+ PTOT = SQRT(PT**2+PHKK(3,I)**2)
+ COSTH = PHKK(3,I)/(PTOT+TINY10)
+ IF (COSTH.GT.ONE) THEN
+ THETA = ZERO
+ ELSEIF (COSTH.LT.-ONE) THEN
+ THETA = TWOPI/2.0D0
+ ELSE
+ THETA = ACOS(COSTH)
+ ENDIF
+ PHI = ASIN(PHKK(2,I)/(PT +TINY10))
+ IF (PHKK(1,I).LT.0.0D0)
+
+ & PHI = SIGN(TWOPI/2.0D0-ABS(PHI),PHI)
+
+ ENER = PHKK(4,I)
+ NN = NN+1
+ KTEMP = MSTU(10)
+ MSTU(10)= 1
+ P(NN,5) = PHKK(5,I)
+
+ CALL PY1ENT(NN,111,ENER,THETA,PHI)
+
+ MSTU(10) = KTEMP
+ IHISMO(NN)= I
+ ENDIF
+ 1 CONTINUE
+ IF (NN.GT.0) THEN
+
+ CALL PYEXEC
+
+ NLINES = PYK(0,1)
+
+ DO 2 II=1,NLINES
+
+ IF (PYK(II,7).EQ.1) THEN
+
+ DO 3 KK=1,4
+
+ P1(KK) = PYP(II,KK)
+
+ 3 CONTINUE
+
+ ID = PYK(II,8)
+ MO = IHISMO(PYK(II,15))
+
+ CALL DT_EVTPUT(1,ID,MO,0,P1(1),P1(2),P1(3),P1(4),0,0,0)
+ IF (LEMCCK)
+ & CALL DT_EVTEMC(-P1(1),-P1(2),-P1(3),-P1(4),2,
+ & IDUM,IDUM)
+*sr: flag with neg. sign (for HELIOS p/A-W jobs)
+ ISTHKK(MO) = -2
+ ENDIF
+ 2 CONTINUE
+ IF (LEMCCK) CALL DT_EVTEMC(DUM,DUM,DUM,DUM,4,7000,IREJ1)
+ ENDIF
+ MDCY(KC,1) = 0
+
+ RETURN
+ END
+*
+*===dtwopd=============================================================*
+*
+CDECK ID>, DT_DTWOPD
+ SUBROUTINE DT_DTWOPD(UMO,ECM1,ECM2,PCM1,PCM2,COD1,COF1,SIF1,COD2,
+ & COF2,SIF2,AM1,AM2)
+
+************************************************************************
+* Two-particle decay. *
+* UMO cm-energy of the decaying system (input) *
+* AM1/AM2 masses of the decay products (input) *
+* ECM1,ECM2/PCM1,PCM2 cm-energies/momenta of the decay prod. (output) *
+* COD,COF,SIF direction cosines of the decay prod. (output) *
+* Revised by S. Roesler, 20.11.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0,ZERO=0.0D0)
+
+ IF (UMO.LT.(AM1+AM2)) THEN
+ WRITE(LOUT,1000) UMO,AM1,AM2
+ 1000 FORMAT(1X,'DTWOPD: inconsistent kinematics - UMO,AM1,AM2 ',
+ & 3E12.3)
+ STOP
+ ENDIF
+
+ ECM1 = ((UMO-AM2)*(UMO+AM2)+AM1*AM1)/(TWO*UMO)
+ ECM2 = UMO-ECM1
+ PCM1 = SQRT((ECM1-AM1)*(ECM1+AM1))
+ PCM2 = PCM1
+ CALL DT_DSFECF(SIF1,COF1)
+ COD1 = TWO*DT_RNDM(PCM2)-ONE
+ COD2 = -COD1
+ COF2 = -COF1
+ SIF2 = -SIF1
+
+ RETURN
+ END
+*
+*===dthrep=============================================================*
+*
+CDECK ID>, DT_DTHREP
+ SUBROUTINE DT_DTHREP(UMO,ECM1,ECM2,ECM3,PCM1,PCM2,PCM3,COD1,COF1,
+ & SIF1,COD2,COF2,SIF2,COD3,COF3,SIF3,AM1,AM2,AM3)
+
+************************************************************************
+* Three-particle decay. *
+* UMO cm-energy of the decaying system (input) *
+* AM1/2/3 masses of the decay products (input) *
+* ECM1/2/2,PCM1/2/3 cm-energies/momenta of the decay prod. (output) *
+* COD,COF,SIF direction cosines of the decay prod. (output) *
+* *
+* Threpd89: slight revision by A. Ferrari *
+* Last change on 11-oct-93 by Alfredo Ferrari, INFN - Milan *
+* Revised by S. Roesler, 20.11.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER ( ANGLSQ = 2.5D-31 )
+ PARAMETER ( AZRZRZ = 1.0D-30 )
+ PARAMETER ( ONEMNS = 0.999999999999999 D+00 )
+ PARAMETER ( ONEPLS = 1.000000000000001 D+00 )
+ PARAMETER ( ONEONE = 1.D+00 )
+ PARAMETER ( TWOTWO = 2.D+00 )
+ PARAMETER ( PIPIPI = 3.1415926535897932270 D+00 )
+
+ COMMON /HNGAMR/ REDU,AMO,AMM(15)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ DIMENSION F(5),XX(5)
+ DATA EPS /AZRZRZ/
+
+ UMOO=UMO+UMO
+C***S1, S2, S3 ARE THE INVARIANT MASSES OF THE PARTICLES 1, 2, 3
+C***J. VON NEUMANN - RANDOM - SELECTION OF S2
+C***CALCULATION OF THE MAXIMUM OF THE S2 - DISTRIBUTION
+ UUMO=UMO
+ AAM1=AM1
+ AAM2=AM2
+ AAM3=AM3
+ GU=(AM2+AM3)**2
+ GO=(UMO-AM1)**2
+* UFAK=1.0000000000001D0
+* IF (GU.GT.GO) UFAK=0.9999999999999D0
+ IF (GU.GT.GO) THEN
+ UFAK=ONEMNS
+ ELSE
+ UFAK=ONEPLS
+ END IF
+ OFAK=2.D0-UFAK
+ GU=GU*UFAK
+ GO=GO*OFAK
+ DS2=(GO-GU)/99.D0
+ AM11=AM1*AM1
+ AM22=AM2*AM2
+ AM33=AM3*AM3
+ UMO2=UMO*UMO
+ RHO2=0.D0
+ S22=GU
+ DO 124 I=1,100
+ S21=S22
+ S22=GU+(I-1.D0)*DS2
+ RHO1=RHO2
+ RHO2=DT_YLAMB(S22,UMO2,AM11)*DT_YLAMB(S22,AM22,AM33)/
+ * (S22+EPS)
+ IF(RHO2.LT.RHO1) GO TO 125
+ 124 CONTINUE
+ 125 S2SUP=(S22-S21)*.5D0+S21
+ SUPRHO=DT_YLAMB(S2SUP,UMO2,AM11)*DT_YLAMB(S2SUP,AM22,AM33)/
+ * (S2SUP+EPS)
+ SUPRHO=SUPRHO*1.05D0
+ XO=S21-DS2
+ IF (GU.LT.GO.AND.XO.LT.GU) XO=GU
+ IF (GU.GT.GO.AND.XO.GT.GU) XO=GU
+ XX(1)=XO
+ XX(3)=S22
+ X1=(XO+S22)*0.5D0
+ XX(2)=X1
+ F(3)=RHO2
+ F(1)=DT_YLAMB(XO,UMO2,AM11)*DT_YLAMB(XO,AM22,AM33)/(XO+EPS)
+ F(2)=DT_YLAMB(X1,UMO2,AM11)*DT_YLAMB(X1,AM22,AM33)/(X1+EPS)
+ DO 126 I=1,16
+ X4=(XX(1)+XX(2))*0.5D0
+ X5=(XX(2)+XX(3))*0.5D0
+ F(4)=DT_YLAMB(X4,UMO2,AM11)*DT_YLAMB(X4,AM22,AM33)/
+ * (X4+EPS)
+ F(5)=DT_YLAMB(X5,UMO2,AM11)*DT_YLAMB(X5,AM22,AM33)/
+ * (X5+EPS)
+ XX(4)=X4
+ XX(5)=X5
+ DO 128 II=1,5
+ IA=II
+ DO 128 III=IA,5
+ IF (F (II).GE.F (III)) GO TO 128
+ FH=F(II)
+ F(II)=F(III)
+ F(III)=FH
+ FH=XX(II)
+ XX(II)=XX(III)
+ XX(III)=FH
+128 CONTINUE
+ SUPRHO=F(1)
+ S2SUP=XX(1)
+ DO 129 II=1,3
+ IA=II
+ DO 129 III=IA,3
+ IF (XX(II).GE.XX(III)) GO TO 129
+ FH=F(II)
+ F(II)=F(III)
+ F(III)=FH
+ FH=XX(II)
+ XX(II)=XX(III)
+ XX(III)=FH
+129 CONTINUE
+126 CONTINUE
+ AM23=(AM2+AM3)**2
+ ITH=0
+ REDU=2.D0
+ 1 CONTINUE
+ ITH=ITH+1
+ IF (ITH.GT.200) REDU=-9.D0
+ IF (ITH.GT.200) GO TO 400
+ C=DT_RNDM(REDU)
+* S2=AM23+C*((UMO-AM1)**2-AM23)
+ S2=AM23+C*(UMO-AM1-AM2-AM3)*(UMO-AM1+AM2+AM3)
+ Y=DT_RNDM(S2)
+ Y=Y*SUPRHO
+ RHO=DT_YLAMB(S2,UMO2,AM11)*DT_YLAMB(S2,AM22,AM33)/S2
+ IF(Y.GT.RHO) GO TO 1
+C***RANDOM SELECTION OF S3 AND CALCULATION OF S1
+ S1=DT_RNDM(S2)
+ S1=S1*RHO+AM11+AM22-(S2-UMO2+AM11)*(S2+AM22-AM33)/(2.D0*S2)-
+ &RHO*.5D0
+ S3=UMO2+AM11+AM22+AM33-S1-S2
+ ECM1=(UMO2+AM11-S2)/UMOO
+ ECM2=(UMO2+AM22-S3)/UMOO
+ ECM3=(UMO2+AM33-S1)/UMOO
+ PCM1=SQRT((ECM1+AM1)*(ECM1-AM1))
+ PCM2=SQRT((ECM2+AM2)*(ECM2-AM2))
+ PCM3=SQRT((ECM3+AM3)*(ECM3-AM3))
+ CALL DT_DSFECF(SFE,CFE)
+C***TH IS THE ANGLE BETWEEN PARTICLES 1 AND 2
+C***TH1, TH2 ARE THE ANGLES BETWEEN PARTICLES 1, 2 AND THE DIRECTION OF
+ PCM12 = PCM1 * PCM2
+ IF ( PCM12 .LT. ANGLSQ ) GO TO 200
+ COSTH=(ECM1*ECM2+0.5D+00*(AM11+AM22-S1))/PCM12
+ GO TO 300
+ 200 CONTINUE
+ UW=DT_RNDM(S1)
+ COSTH=(UW-0.5D+00)*2.D+00
+ 300 CONTINUE
+* IF(ABS(COSTH).GT.0.9999999999999999D0)
+* &COSTH=SIGN(0.9999999999999999D0,COSTH)
+ IF(ABS(COSTH).GT.ONEONE)
+ &COSTH=SIGN(ONEONE,COSTH)
+ IF (REDU.LT.1.D+00) RETURN
+ COSTH2=(PCM3*PCM3+PCM2*PCM2-PCM1*PCM1)/(2.D+00*PCM2*PCM3)
+* IF(ABS(COSTH2).GT.0.9999999999999999D0)
+* &COSTH2=SIGN(0.9999999999999999D0,COSTH2)
+ IF(ABS(COSTH2).GT.ONEONE)
+ &COSTH2=SIGN(ONEONE,COSTH2)
+ SINTH2=SQRT((ONEONE-COSTH2)*(ONEONE+COSTH2))
+ SINTH =SQRT((ONEONE-COSTH)*(ONEONE+COSTH))
+ SINTH1=COSTH2*SINTH-COSTH*SINTH2
+ COSTH1=COSTH*COSTH2+SINTH2*SINTH
+C***RANDOM SELECTION OF THE SPHERICAL COORDINATES OF THE DIRECTION OF PA
+C***CFE, SFE ARE COS AND SIN OF THE ROTATION ANGLE OF THE SYSTEM 1, 2 AR
+C***THE DIRECTION OF PARTICLE 3
+C***CALCULATION OF THE SPHERICAL COORDINATES OF PARTICLES 1, 2
+ CX11=-COSTH1
+ CY11=SINTH1*CFE
+ CZ11=SINTH1*SFE
+ CX22=-COSTH2
+ CY22=-SINTH2*CFE
+ CZ22=-SINTH2*SFE
+ CALL DT_DSFECF(SIF3,COF3)
+ COD3=TWOTWO*DT_RNDM(CX11)-ONEONE
+ SID3=SQRT((1.D+00-COD3)*(1.D+00+COD3))
+ 2 FORMAT(5F20.15)
+ COD1=CX11*COD3+CZ11*SID3
+ CHLP=(ONEONE-COD1)*(ONEONE+COD1)
+ IF(CHLP.LT.1.D-14)WRITE(LOUT,2)COD1,COF3,SID3,
+ &CX11,CZ11
+ SID1=SQRT(CHLP)
+ COF1=(CX11*SID3*COF3-CY11*SIF3-CZ11*COD3*COF3)/SID1
+ SIF1=(CX11*SID3*SIF3+CY11*COF3-CZ11*COD3*SIF3)/SID1
+ COD2=CX22*COD3+CZ22*SID3
+ SID2=SQRT((ONEONE-COD2)*(ONEONE+COD2))
+ COF2=(CX22*SID3*COF3-CY22*SIF3-CZ22*COD3*COF3)/SID2
+ SIF2=(CX22*SID3*SIF3+CY22*COF3-CZ22*COD3*SIF3)/SID2
+ 400 CONTINUE
+* === Energy conservation check: === *
+ EOCHCK = UMO - ECM1 - ECM2 - ECM3
+* SID1 = SQRT ( ( ONEONE - COD1 ) * ( ONEONE + COD1 ) )
+* SID2 = SQRT ( ( ONEONE - COD2 ) * ( ONEONE + COD2 ) )
+* SID3 = SQRT ( ( ONEONE - COD3 ) * ( ONEONE + COD3 ) )
+ PZCHCK = PCM1 * COD1 + PCM2 * COD2 + PCM3 * COD3
+ PXCHCK = PCM1 * COF1 * SID1 + PCM2 * COF2 * SID2
+ & + PCM3 * COF3 * SID3
+ PYCHCK = PCM1 * SIF1 * SID1 + PCM2 * SIF2 * SID2
+ & + PCM3 * SIF3 * SID3
+ EOCMPR = 1.D-12 * UMO
+ IF ( ABS (EOCHCK) + ABS (PXCHCK) + ABS (PYCHCK) + ABS (PZCHCK)
+ & .GT. EOCMPR ) THEN
+**sr 5.5.95 output-unit changed
+ IF (IOULEV(1).GT.0) THEN
+ WRITE(LOUT,*)
+ & ' *** Threpd: energy/momentum conservation failure! ***',
+ & EOCHCK,PXCHCK,PYCHCK,PZCHCK
+ WRITE(LOUT,*)' *** SID1,SID2,SID3',SID1,SID2,SID3
+ ENDIF
+**
+ END IF
+ RETURN
+ END
+*
+*===dbklas=============================================================*
+*
+CDECK ID>, DT_DBKLAS
+ SUBROUTINE DT_DBKLAS(I,J,K,I8,I10)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* quark-content to particle index conversion (DTUNUC 1.x)
+ COMMON /DTQ2ID/ IMPS(6,6),IMVE(6,6),IB08(6,21),IB10(6,21),
+ & IA08(6,21),IA10(6,21)
+
+ IF (I) 20,20,10
+* baryons
+ 10 CONTINUE
+ CALL DT_INDEXD(J,K,IND)
+ I8 = IB08(I,IND)
+ I10 = IB10(I,IND)
+ IF (I8.LE.0) I8 = I10
+ RETURN
+* antibaryons
+ 20 CONTINUE
+ II = IABS(I)
+ JJ = IABS(J)
+ KK = IABS(K)
+ CALL DT_INDEXD(JJ,KK,IND)
+ I8 = IA08(II,IND)
+ I10 = IA10(II,IND)
+ IF (I8.LE.0) I8 = I10
+
+ RETURN
+ END
+*
+*===indexd=============================================================*
+*
+CDECK ID>, DT_INDEXD
+ SUBROUTINE DT_INDEXD(KA,KB,IND)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ KP = KA*KB
+ KS = KA+KB
+ IF (KP.EQ.1) IND=1
+ IF (KP.EQ.2) IND=2
+ IF (KP.EQ.3) IND=3
+ IF ((KP.EQ.4).AND.(KS.EQ.5)) IND=4
+ IF (KP.EQ.5) IND=5
+ IF ((KP.EQ.6).AND.(KS.EQ.7)) IND=6
+ IF ((KP.EQ.4).AND.(KS.EQ.4)) IND=7
+ IF ((KP.EQ.6).AND.(KS.EQ.5)) IND=8
+ IF (KP.EQ.8) IND=9
+ IF (KP.EQ.10) IND=10
+ IF ((KP.EQ.12).AND.(KS.EQ.8)) IND=11
+ IF (KP.EQ.9) IND=12
+ IF ((KP.EQ.12).AND.(KS.EQ.7)) IND=13
+ IF (KP.EQ.15) IND=14
+ IF (KP.EQ.18) IND=15
+ IF (KP.EQ.16) IND=16
+ IF (KP.EQ.20) IND=17
+ IF (KP.EQ.24) IND=18
+ IF (KP.EQ.25) IND=19
+ IF (KP.EQ.30) IND=20
+ IF (KP.EQ.36) IND=21
+
+ RETURN
+ END
+*
+*===dchant=============================================================*
+*
+CDECK ID>, DT_DCHANT
+ SUBROUTINE DT_DCHANT
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ONE=1.0D0,ZERO=0.0D0)
+
+* HADRIN: decay channel information
+ PARAMETER (IDMAX9=602)
+ CHARACTER*8 ZKNAME
+ COMMON /HNDECH/ ZKNAME(IDMAX9),WT(IDMAX9),NZK(IDMAX9,3)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ DIMENSION HWT(IDMAX9)
+
+* change of weights wt from absolut values into the sum of wt of a dec.
+ DO 10 J=1,IDMAX9
+ HWT(J) = ZERO
+ 10 CONTINUE
+C DO 999 KKK=1,210
+C WRITE(LOUT,'(A8,F5.2,2E10.3,2I4,2I10)')
+C & ANAME(KKK),AAM(KKK),GA(KKK),TAU(KKK),IICH(KKK),IIBAR(KKK),
+C & K1(KKK),K2(KKK)
+C 999 CONTINUE
+C STOP
+ DO 30 I=1,210
+ IK1 = K1(I)
+ IK2 = K2(I)
+ HV = ZERO
+ DO 20 J=IK1,IK2
+ HV = HV+WT(J)
+ HWT(J) = HV
+**sr 13.1.95
+ IF (HWT(J).GT.1.0001) WRITE(LOUT,1000) HWT(J),J,I,IK1
+ 1000 FORMAT(2X,15H ERROR IN HWT =,1F10.5,8H J,I,K1=,3I5)
+ 20 CONTINUE
+ 30 CONTINUE
+ DO 40 J=1,IDMAX9
+ WT(J) = HWT(J)
+ 40 CONTINUE
+
+ RETURN
+ END
+*
+*===ddatar=============================================================*
+*
+CDECK ID>, DT_DDATAR
+ SUBROUTINE DT_DDATAR
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ONE=1.0D0,ZERO=0.0D0)
+
+* quark-content to particle index conversion (DTUNUC 1.x)
+ COMMON /DTQ2ID/ IMPS(6,6),IMVE(6,6),IB08(6,21),IB10(6,21),
+ & IA08(6,21),IA10(6,21)
+
+ DIMENSION IV(36),IP(36),IB(126),IBB(126),IA(126),IAA(126)
+
+ DATA IV/ 33, 34, 38,123, 0, 0, 32, 33, 39,124,
+ & 0, 0, 36, 37, 96,127, 0, 0,126,125,
+ & 128,129,14*0/
+ DATA IP/ 23, 14, 16,116, 0, 0, 13, 23, 25,117,
+ & 0, 0, 15, 24, 31,120, 0, 0,119,118,
+ & 121,122,14*0/
+ DATA IB/ 0, 1, 21,140, 0, 0, 8, 22,137, 0,
+ & 0, 97,138, 0, 0,146, 0, 0, 0, 0,
+ & 0, 1, 8, 22,137, 0, 0, 0, 20,142,
+ & 0, 0, 98,139, 0, 0,147, 0, 0, 0,
+ & 0, 0, 21, 22, 97,138, 0, 0, 20, 98,
+ & 139, 0, 0, 0,145, 0, 0,148, 0, 0,
+ & 0, 0, 0,140,137,138,146, 0, 0,142,
+ & 139,147, 0, 0,145,148, 50*0/
+ DATA IBB/53, 54,104,161, 0, 0, 55,105,162, 0,
+ & 0,107,164, 0, 0,167, 0, 0, 0, 0,
+ & 0, 54, 55,105,162, 0, 0, 56,106,163,
+ & 0, 0,108,165, 0, 0,168, 0, 0, 0,
+ & 0, 0,104,105,107,164, 0, 0,106,108,
+ & 165, 0, 0,109,166, 0, 0,169, 0, 0,
+ & 0, 0, 0,161,162,164,167, 0, 0,163,
+ & 165,168, 0, 0,166,169, 0, 0,170,47*0/
+ DATA IA/ 0, 2, 99,152, 0, 0, 9,100,149, 0,
+ & 0,102,150, 0, 0,158, 0, 0, 0, 0,
+ & 0, 2, 9,100,149, 0, 0, 0,101,154,
+ & 0, 0,103,151, 0, 0,159, 0, 0, 0,
+ & 0, 0, 99,100,102,150, 0, 0,101,103,
+ & 151, 0, 0, 0,157, 0, 0,160, 0, 0,
+ & 0, 0, 0,152,149,150,158, 0, 0,154,
+ & 151,159, 0, 0,157,160, 50*0/
+ DATA IAA/67, 68,110,171, 0, 0, 69,111,172, 0,
+ & 0,113,174, 0, 0,177, 0, 0, 0, 0,
+ & 0, 68, 69,111,172, 0, 0, 70,112,173,
+ & 0, 0,114,175, 0, 0,178, 0, 0, 0,
+ & 0, 0,110,111,113,174, 0, 0,112,114,
+ & 175, 0, 0,115,176, 0, 0,179, 0, 0,
+ & 0, 0, 0,171,172,174,177, 0, 0,173,
+ & 175,178, 0, 0,176,179, 0, 0,180,47*0/
+
+ L=0
+ DO 2 I=1,6
+ DO 1 J=1,6
+ L = L+1
+ IMPS(I,J) = IP(L)
+ IMVE(I,J) = IV(L)
+ 1 CONTINUE
+ 2 CONTINUE
+ L=0
+ DO 4 I=1,6
+ DO 3 J=1,21
+ L = L+1
+ IB08(I,J) = IB(L)
+ IB10(I,J) = IBB(L)
+ IA08(I,J) = IA(L)
+ IA10(I,J) = IAA(L)
+ 3 CONTINUE
+ 4 CONTINUE
+C A1 = 0.88D0
+C B1 = 3.0D0
+C B2 = 3.0D0
+C B3 = 8.0D0
+C LT = 0
+C LB = 0
+C BET = 12.0D0
+C AS = 0.25D0
+C B8 = 0.33D0
+C AME = 0.95D0
+C DIQ = 0.375D0
+C ISU = 4
+
+ RETURN
+ END
+*
+*===initjs=============================================================*
+*
+CDECK ID>, DT_INITJS
+ SUBROUTINE DT_INITJS(MODE)
+
+************************************************************************
+* Initialize JETSET paramters. *
+* MODE = 0 default settings *
+* = 1 PHOJET settings *
+* = 2 DTUNUC settings *
+* This version dated 16.02.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ONE=1.0D0,ZERO=0.0D0)
+
+ LOGICAL LFIRST,LFIRDT,LFIRPH
+
+ INCLUDE './flukapro/(DIMPAR)'
+ INCLUDE './flukapro/(PART)'
+
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ INTEGER PYCOMP
+
+ DIMENSION IDXSTA(40)
+ DATA IDXSTA
+* K0s pi0 lam alam sig+ asig+ sig- asig- tet0 atet0
+ & / 310, 111, 3122,-3122, 3222,-3222, 3112,-3112, 3322,-3322,
+* tet- atet- om- aom- D+ D- D0 aD0 Ds+ aDs+
+ & 3312,-3312, 3334,-3334, 411, -411, 421, -421, 431, -431,
+* etac lamc+alamc+sigc++ sigc+ sigc0asigc++asigc+asigc0 Ksic+
+ & 441, 4122,-4122, 4222, 4212, 4112,-4222,-4212,-4112, 4232,
+* Ksic0 aKsic+aKsic0 sig0 asig0
+ & 4132,-4232,-4132, 3212,-3212, 5*0/
+
+ DATA LFIRST,LFIRDT,LFIRPH /.TRUE.,.TRUE.,.TRUE./
+
+ IF (LFIRST) THEN
+* save default settings
+ PDEF1 = PARJ(1)
+ PDEF2 = PARJ(2)
+ PDEF3 = PARJ(3)
+ PDEF5 = PARJ(5)
+ PDEF6 = PARJ(6)
+ PDEF7 = PARJ(7)
+ PDEF18 = PARJ(18)
+ PDEF19 = PARJ(19)
+ PDEF21 = PARJ(21)
+ PDEF42 = PARJ(42)
+ MDEF12 = MSTJ(12)
+* LUJETS / PYJETS array-dimensions
+
+ MSTU(4) = 4000
+
+* increase maximum number of JETSET-error prints
+ MSTU(22) = 50000
+* prevent particles decaying
+ DO 1 I=1,35
+ IF (I.LT.34) THEN
+
+ KC = PYCOMP(IDXSTA(I))
+
+ IF (I.EQ.2) THEN
+* pi0 decay
+C MDCY(KC,1) = 1
+ MDCY(KC,1) = 0
+**cr mode
+C ELSEIF ((I.EQ.4).OR.(I.EQ. 6).OR.
+C & (I.EQ.8).OR.(I.EQ.10)) THEN
+C ELSEIF (I.EQ.4) THEN
+C MDCY(KC,1) = 1
+**
+ ELSE
+ MDCY(KC,1) = 0
+ ENDIF
+ ELSEIF (((I.EQ.34).OR.(I.EQ.35)).AND.(ISIG0.EQ.0)) THEN
+
+ KC = PYCOMP(IDXSTA(I))
+
+ MDCY(KC,1) = 0
+ ENDIF
+ 1 CONTINUE
+*
+
+* as Fluka event-generator: allow only paprop particles to be stable
+* and let all other particles decay (i.e. those with strong decays)
+ IF (ITRSPT.EQ.1) THEN
+ DO 5 I=1,IDMAXP
+ IF (KPTOIP(I).NE.0) THEN
+ IDPDG = MPDGHA(I)
+
+ KC = PYCOMP(IDPDG)
+
+ IF (MDCY(KC,1).EQ.1) THEN
+ WRITE(LOUT,*) ' DT_INITJS: Decay flag for FLUKA-',
+ & 'transport : particle should not ',
+ & 'decay : ',IDPDG,' ',ANAME(I)
+ MDCY(KC,1) = 0
+ ENDIF
+ ENDIF
+ 5 CONTINUE
+ DO 6 KC=1,500
+ IDPDG = KCHG(KC,4)
+ KP = MCIHAD(IDPDG)
+ IF (KP.GT.0) THEN
+ IF ((MDCY(KC,1).EQ.0).AND.(KPTOIP(KP).EQ.0).AND.
+ & (ANAME(KP).NE.'BLANK ').AND.
+ & (ANAME(KP).NE.'RNDFLV ')) THEN
+ WRITE(LOUT,*) ' DT_INITJS: Decay flag for FLUKA-',
+ & 'transport: particle should decay ',
+ & ': ',IDPDG,' ',ANAME(KP)
+ MDCY(KC,1) = 1
+ ENDIF
+ ENDIF
+ 6 CONTINUE
+ ENDIF
+
+*
+* popcorn:
+ IF (PDB.LE.ZERO) THEN
+* no popcorn-mechanism
+ MSTJ(12) = 1
+ ELSE
+ MSTJ(12) = 3
+ PARJ(5) = PDB
+ ENDIF
+* set JETSET-parameter requested by input cards
+ IF (NMSTU.GT.0) THEN
+ DO 2 I=1,NMSTU
+ MSTU(IMSTU(I)) = MSTUX(I)
+ 2 CONTINUE
+ ENDIF
+ IF (NMSTJ.GT.0) THEN
+ DO 3 I=1,NMSTJ
+ MSTJ(IMSTJ(I)) = MSTJX(I)
+ 3 CONTINUE
+ ENDIF
+ IF (NPARU.GT.0) THEN
+ DO 4 I=1,NPARU
+ PARU(IPARU(I)) = PARUX(I)
+ 4 CONTINUE
+ ENDIF
+ LFIRST = .FALSE.
+ ENDIF
+*
+* PARJ(1) suppression of qq-aqaq pair prod. compared to
+* q-aq pair prod. (default: 0.1)
+* PARJ(2) strangeness suppression (default: 0.3)
+* PARJ(3) extra suppression of strange diquarks (default: 0.4)
+* PARJ(6) extra suppression of sas-pair shared by B and
+* aB in BMaB (default: 0.5)
+* PARJ(7) extra suppression of strange meson M in BMaB
+* configuration (default: 0.5)
+* PARJ(18) spin 3/2 baryon suppression (default: 1.0)
+* PARJ(21) width sigma in Gaussian p_x, p_y transverse
+* momentum distrib. for prim. hadrons (default: 0.35)
+* PARJ(42) b-parameter for symmetric Lund-fragmentation
+* function (default: 0.9 GeV^-2)
+*
+* PHOJET settings
+ IF (MODE.EQ.1) THEN
+* JETSET default
+C PARJ(1) = PDEF1
+C PARJ(2) = PDEF2
+C PARJ(3) = PDEF3
+C PARJ(6) = PDEF6
+C PARJ(7) = PDEF7
+C PARJ(18) = PDEF18
+C PARJ(21) = PDEF21
+C PARJ(42) = PDEF42
+**sr 18.11.98 parameter tuning
+C PARJ(1) = 0.092D0
+C PARJ(2) = 0.25D0
+C PARJ(3) = 0.45D0
+C PARJ(19) = 0.3D0
+C PARJ(21) = 0.45D0
+C PARJ(42) = 1.0D0
+**sr 28.04.99 parameter tuning (May 99 minor modifications)
+ PARJ(1) = 0.085D0
+ PARJ(2) = 0.26D0
+ PARJ(3) = 0.8D0
+ PARJ(11) = 0.38D0
+ PARJ(18) = 0.3D0
+ PARJ(19) = 0.4D0
+ PARJ(21) = 0.36D0
+ PARJ(41) = 0.3D0
+ PARJ(42) = 0.86D0
+ IF (NPARJ.GT.0) THEN
+ DO 10 I=1,NPARJ
+ IF (IPARJ(I).GT.0) PARJ(IPARJ(I)) = PARJX(I)
+ 10 CONTINUE
+ ENDIF
+ IF (LFIRPH) THEN
+C *** Commented by Chiara
+C WRITE(LOUT,'(1X,A)')
+C & 'DT_INITJS: JETSET-parameter for PHOJET'
+ CALL DT_JSPARA(0)
+ LFIRPH = .FALSE.
+ ENDIF
+* DTUNUC settings
+ ELSEIF (MODE.EQ.2) THEN
+ IF (IFRAG(2).EQ.1) THEN
+**sr parameters before 9.3.96
+C PARJ(2) = 0.27D0
+C PARJ(3) = 0.6D0
+C PARJ(6) = 0.75D0
+C PARJ(7) = 0.75D0
+C PARJ(21) = 0.55D0
+C PARJ(42) = 1.3D0
+**sr 18.11.98 parameter tuning
+C PARJ(1) = 0.05D0
+C PARJ(2) = 0.27D0
+C PARJ(3) = 0.4D0
+C PARJ(19) = 0.2D0
+C PARJ(21) = 0.45D0
+C PARJ(42) = 1.0D0
+**sr 28.04.99 parameter tuning
+ PARJ(1) = 0.11D0
+ PARJ(2) = 0.36D0
+ PARJ(3) = 0.8D0
+ PARJ(19) = 0.2D0
+ PARJ(21) = 0.3D0
+ PARJ(41) = 0.3D0
+ PARJ(42) = 0.58D0
+ IF (NPARJ.GT.0) THEN
+ DO 20 I=1,NPARJ
+ IF (IPARJ(I).LT.0) THEN
+ IDX = ABS(IPARJ(I))
+ PARJ(IDX) = PARJX(I)
+ ENDIF
+ 20 CONTINUE
+ ENDIF
+ IF (LFIRDT) THEN
+ WRITE(LOUT,'(1X,A)')
+ & 'DT_INITJS: JETSET-parameter for DTUNUC'
+ CALL DT_JSPARA(0)
+ LFIRDT = .FALSE.
+ ENDIF
+ ELSEIF (IFRAG(2).EQ.2) THEN
+ PARJ(1) = 0.11D0
+ PARJ(2) = 0.27D0
+ PARJ(3) = 0.3D0
+ PARJ(6) = 0.35D0
+ PARJ(7) = 0.45D0
+ PARJ(18) = 0.66D0
+C PARJ(21) = 0.55D0
+C PARJ(42) = 1.0D0
+ PARJ(21) = 0.60D0
+ PARJ(42) = 1.3D0
+ ELSE
+ PARJ(1) = PDEF1
+ PARJ(2) = PDEF2
+ PARJ(3) = PDEF3
+ PARJ(6) = PDEF6
+ PARJ(7) = PDEF7
+ PARJ(18) = PDEF18
+ PARJ(21) = PDEF21
+ PARJ(42) = PDEF42
+ ENDIF
+ ELSE
+ PARJ(1) = PDEF1
+ PARJ(2) = PDEF2
+ PARJ(3) = PDEF3
+ PARJ(5) = PDEF5
+ PARJ(6) = PDEF6
+ PARJ(7) = PDEF7
+ PARJ(18) = PDEF18
+ PARJ(19) = PDEF19
+ PARJ(21) = PDEF21
+ PARJ(42) = PDEF42
+ MSTJ(12) = MDEF12
+ ENDIF
+
+ RETURN
+ END
+*
+*===jspara=============================================================*
+*
+CDECK ID>, DT_JSPARA
+ SUBROUTINE DT_JSPARA(MODE)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY3=1.0D-3,TINY1=1.0D-1,
+ & ONE=1.0D0,ZERO=0.0D0)
+
+ LOGICAL LFIRST
+
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ DIMENSION ISTU(200),QARU(200),ISTJ(200),QARJ(200)
+
+ DATA LFIRST /.TRUE./
+
+* save the default JETSET-parameter on the first call
+ IF (LFIRST) THEN
+ DO 1 I=1,200
+ ISTU(I) = MSTU(I)
+ QARU(I) = PARU(I)
+ ISTJ(I) = MSTJ(I)
+ QARJ(I) = PARJ(I)
+ 1 CONTINUE
+ LFIRST = .FALSE.
+ ENDIF
+
+C *** Commented by Chiara
+C WRITE(LOUT,1000)
+C 1000 FORMAT(1X,'DT_JSPARA: new value (default value)')
+
+* compare the default JETSET-parameter with the present values
+ DO 2 I=1,200
+C *** Commented by Chiara
+C IF ((MSTU(I).NE.ISTU(I)).AND.(I.NE.31)) THEN
+C WRITE(LOUT,1002) 'MSTU(',I,MSTU(I),ISTU(I)
+CC ISTU(I) = MSTU(I)
+C ENDIF
+ DIFF = ABS(PARU(I)-QARU(I))
+C *** Commented by Chiara
+C IF ((DIFF.GE.1.0D-5).AND.(I.NE.21)) THEN
+C WRITE(LOUT,1001) 'PARU(',I,PARU(I),QARU(I)
+CC QARU(I) = PARU(I)
+C ENDIF
+C *** Commented by Chiara
+C IF (MSTJ(I).NE.ISTJ(I)) THEN
+C WRITE(LOUT,1002) 'MSTJ(',I,MSTJ(I),ISTJ(I)
+CC ISTJ(I) = MSTJ(I)
+C ENDIF
+ DIFF = ABS(PARJ(I)-QARJ(I))
+C *** Commented by Chiara
+C IF (DIFF.GE.1.0D-5) THEN
+C WRITE(LOUT,1001) 'PARJ(',I,PARJ(I),QARJ(I)
+CC QARJ(I) = PARJ(I)
+C ENDIF
+ 2 CONTINUE
+ 1001 FORMAT(12X,A5,I3,'): ',F6.3,' (',F6.3,')')
+ 1002 FORMAT(12X,A5,I3,'): ',I6,' (',I6,')')
+
+ RETURN
+ END
+*
+*===fozoca=============================================================*
+*
+CDECK ID>, DT_FOZOCA
+ SUBROUTINE DT_FOZOCA(LFZC,IREJ)
+
+************************************************************************
+* This subroutine treats the complete FOrmation ZOne supressed intra- *
+* nuclear CAscade. *
+* LFZC = .true. cascade has been treated *
+* = .false. cascade skipped *
+* This is a completely revised version of the original FOZOKL. *
+* This version dated 18.11.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (DLARGE=1.0D10,OHALF=0.5D0,ZERO=0.0D0)
+ PARAMETER (FM2MM=1.0D-12,RNUCLE = 1.12D0)
+
+ LOGICAL LSTART,LCAS,LFZC
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* final state after intranuclear cascade step
+ COMMON /DTPAUL/ EWOUND(2,300),NWOUND(2),IDXINC(2000),NOINC
+* parameter for intranuclear cascade
+ LOGICAL LPAULI
+ COMMON /DTFOTI/ TAUFOR,KTAUGE,ITAUVE,INCMOD,LPAULI
+
+ DIMENSION NCWOUN(2)
+
+ DATA LSTART /.TRUE./
+
+ LFZC = .TRUE.
+ IREJ = 0
+
+* skip cascade if hadron-hadron interaction or if supressed by user
+ IF (((IP.EQ.1).AND.(IT.EQ.1)).OR.(KTAUGE.LT.1)) GOTO 9999
+* skip cascade if not all possible chains systems are hadronized
+ DO 1 I=1,8
+ IF (.NOT.LHADRO(I)) GOTO 9999
+ 1 CONTINUE
+
+ IF (LSTART) THEN
+ WRITE(LOUT,1000) KTAUGE,TAUFOR,INCMOD
+ 1000 FORMAT(/,1X,'FOZOCA: intranuclear cascade treated for a ',
+ & 'maximum of',I4,' generations',/,10X,'formation time ',
+ & 'parameter:',F5.1,' fm/c',9X,'modus:',I2)
+ IF (ITAUVE.EQ.1) WRITE(LOUT,1001)
+ IF (ITAUVE.EQ.2) WRITE(LOUT,1002)
+ 1001 FORMAT(10X,'p_t dependent formation zone',/)
+ 1002 FORMAT(10X,'constant formation zone',/)
+ LSTART = .FALSE.
+ ENDIF
+
+* in order to avoid wasting of cpu-time the DTEVT1-indices of nucleons
+* which may interact with final state particles are stored in a seperate
+* array - here all proj./target nucleon-indices (just for simplicity)
+ NOINC = 0
+ DO 9 I=1,NPOINT(1)-1
+ NOINC = NOINC+1
+ IDXINC(NOINC) = I
+ 9 CONTINUE
+
+* initialize Pauli-principle treatment (find wounded nucleons)
+ NWOUND(1) = 0
+ NWOUND(2) = 0
+ NCWOUN(1) = 0
+ NCWOUN(2) = 0
+ DO 2 J=1,NPOINT(1)
+ DO 3 I=1,2
+ IF (ISTHKK(J).EQ.10+I) THEN
+ NWOUND(I) = NWOUND(I)+1
+ EWOUND(I,NWOUND(I)) = PHKK(4,J)
+ IF (IDHKK(J).EQ.2212) NCWOUN(I) = NCWOUN(I)+1
+ ENDIF
+ 3 CONTINUE
+ 2 CONTINUE
+
+* modify nuclear potential for wounded nucleons
+ IPRCL = IP -NWOUND(1)
+ IPZRCL = IPZ-NCWOUN(1)
+ ITRCL = IT -NWOUND(2)
+ ITZRCL = ITZ-NCWOUN(2)
+ CALL DT_NCLPOT(IPZRCL,IPRCL,ITZRCL,ITRCL,ZERO,ZERO,1)
+
+ NSTART = NPOINT(4)
+ NEND = NHKK
+
+ 7 CONTINUE
+ DO 8 I=NSTART,NEND
+
+ IF ((ABS(ISTHKK(I)).EQ.1).AND.(IDCH(I).LT.KTAUGE)) THEN
+* select nucleus the cascade starts first (proj. - 1, target - -1)
+ NCAS = 1
+* projectile/target with probab. 1/2
+ IF ((INCMOD.EQ.1).OR.(IDCH(I).GT.0)) THEN
+ IF (DT_RNDM(TAUFOR).GT.OHALF) NCAS = -NCAS
+* in the nucleus with highest mass
+ ELSEIF (INCMOD.EQ.2) THEN
+ IF (IP.GT.IT) THEN
+ NCAS = -NCAS
+ ELSEIF (IP.EQ.IT) THEN
+ IF (DT_RNDM(TAUFOR).GT.OHALF) NCAS = -NCAS
+ ENDIF
+* the nucleus the cascade starts first is requested to be the one
+* moving in the direction of the secondary
+ ELSEIF (INCMOD.EQ.3) THEN
+ NCAS = INT(SIGN(1.0D0,PHKK(3,I)))
+ ENDIF
+* check that the selected "nucleus" is not a hadron
+ IF (((NCAS.EQ. 1).AND.(IP.LE.1)).OR.
+ & ((NCAS.EQ.-1).AND.(IT.LE.1))) NCAS = -NCAS
+
+* treat intranuclear cascade in the nucleus selected first
+ LCAS = .FALSE.
+ CALL DT_INUCAS(IT,IP,I,LCAS,NCAS,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9998
+* treat intranuclear cascade in the other nucleus if this isn't a had.
+ NCAS = -NCAS
+ IF (((NCAS.EQ. 1).AND.(IP.GT.1)).OR.
+ & ((NCAS.EQ.-1).AND.(IT.GT.1))) THEN
+ IF (LCAS) CALL DT_INUCAS(IT,IP,I,LCAS,NCAS,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9998
+ ENDIF
+
+ ENDIF
+
+ 8 CONTINUE
+ NSTART = NEND+1
+ NEND = NHKK
+ IF (NSTART.LE.NEND) GOTO 7
+
+ RETURN
+
+ 9998 CONTINUE
+* reject this event
+ IRINC = IRINC+1
+ IREJ = 1
+
+ 9999 CONTINUE
+* intranucl. cascade not treated because of interaction properties or
+* it is supressed by user or it was rejected or...
+ LFZC = .FALSE.
+* reset flag characterizing direction of motion in n-n-cms
+**sr14-11-95
+C DO 9990 I=NPOINT(5),NHKK
+C IF (ISTHKK(I).EQ.-1) ISTHKK(I)=1
+C9990 CONTINUE
+
+ RETURN
+ END
+*
+*===inucas=============================================================*
+*
+CDECK ID>, DT_INUCAS
+ SUBROUTINE DT_INUCAS(IT,IP,IDXCAS,LCAS,NCAS,IREJ)
+
+************************************************************************
+* Formation zone supressed IntraNUclear CAScade for one final state *
+* particle. *
+* IT, IP mass numbers of target, projectile nuclei *
+* IDXCAS index of final state particle in DTEVT1 *
+* NCAS = 1 intranuclear cascade in projectile *
+* = -1 intranuclear cascade in target *
+* This version dated 18.11.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY2=1.0D-2,ZERO=0.0D0,DLARGE=1.0D10,
+ & OHALF=0.5D0,ONE=1.0D0)
+ PARAMETER (FM2MM=1.0D-12,RNUCLE = 1.12D0)
+ PARAMETER (TWOPI=6.283185307179586454D+00)
+ PARAMETER (PLOWH=0.01D0,PHIH=9.0D0)
+
+ LOGICAL LABSOR,LCAS
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* final state after inc step
+ PARAMETER (MAXFSP=10)
+ COMMON /DTCAPA/ PFSP(5,MAXFSP),IDFSP(MAXFSP),NFSP
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* Glauber formalism: collision properties
+ COMMON /DTGLCP/ RPROJ,RTARG,BIMPAC,
+ & NWTSAM,NWASAM,NWBSAM,NWTACC,NWAACC,NWBACC
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* parameter for intranuclear cascade
+ LOGICAL LPAULI
+ COMMON /DTFOTI/ TAUFOR,KTAUGE,ITAUVE,INCMOD,LPAULI
+* final state after intranuclear cascade step
+ COMMON /DTPAUL/ EWOUND(2,300),NWOUND(2),IDXINC(2000),NOINC
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* statistics: residual nuclei
+ COMMON /DTSTA2/ EXCDPM(4),EXCEVA(2),
+ & NINCGE,NINCCO(2,3),NINCHR(2,2),NINCWO(2),
+ & NINCST(2,4),NINCEV(2),
+ & NRESTO(2),NRESPR(2),NRESNU(2),NRESBA(2),
+ & NRESPB(2),NRESCH(2),NRESEV(4),
+ & NEVA(2,6),NEVAGA(2),NEVAHT(2),NEVAHY(2,2,240),
+ & NEVAFI(2,2)
+
+ DIMENSION PCAS(2,5),PTOCAS(2),COSCAS(2,3),VTXCAS(2,4),VTXCA1(2,4),
+ & PCAS1(5),PNUC(5),BGTA(4),
+ & BGCAS(2),GACAS(2),BECAS(2),
+ & RNUC(2),BIMPC(2),VTXDST(3),IDXSPE(2),IDSPE(2),NWTMP(2)
+
+ DATA PDIF /0.545D0/
+
+ IREJ = 0
+
+* update counter
+ IF (NINCEV(1).NE.NEVHKK) THEN
+ NINCEV(1) = NEVHKK
+ NINCEV(2) = NINCEV(2)+1
+ ENDIF
+
+* "BAMJET-index" of this hadron
+ IDCAS = IDBAM(IDXCAS)
+ IF (IDT_MCHAD(IDCAS).EQ.-1) RETURN
+
+* skip gammas, electrons, etc..
+ IF (AAM(IDCAS).LT.TINY2) RETURN
+
+* Lorentz-trsf. into projectile rest system
+ IF (IP.GT.1) THEN
+ CALL DT_LTRANS(PHKK(1,IDXCAS),PHKK(2,IDXCAS),PHKK(3,IDXCAS),
+ & PHKK(4,IDXCAS),PCAS(1,1),PCAS(1,2),PCAS(1,3),
+ & PCAS(1,4),IDCAS,-2)
+ PTOCAS(1) = SQRT(PCAS(1,1)**2+PCAS(1,2)**2+PCAS(1,3)**2)
+ PCAS(1,5) = (PCAS(1,4)-PTOCAS(1))*(PCAS(1,4)+PTOCAS(1))
+ IF (PCAS(1,5).GT.ZERO) THEN
+ PCAS(1,5) = SQRT(PCAS(1,5))
+ ELSE
+ PCAS(1,5) = AAM(IDCAS)
+ ENDIF
+ DO 20 K=1,3
+ COSCAS(1,K) = PCAS(1,K)/MAX(PTOCAS(1),TINY10)
+ 20 CONTINUE
+* Lorentz-parameters
+* particle rest system --> projectile rest system
+ BGCAS(1) = PTOCAS(1)/MAX(PCAS(1,5),TINY10)
+ GACAS(1) = PCAS(1,4)/MAX(PCAS(1,5),TINY10)
+ BECAS(1) = BGCAS(1)/GACAS(1)
+ ELSE
+ DO 21 K=1,5
+ PCAS(1,K) = ZERO
+ IF (K.LE.3) COSCAS(1,K) = ZERO
+ 21 CONTINUE
+ PTOCAS(1) = ZERO
+ BGCAS(1) = ZERO
+ GACAS(1) = ZERO
+ BECAS(1) = ZERO
+ ENDIF
+* Lorentz-trsf. into target rest system
+ IF (IT.GT.1) THEN
+* LEPTO: final state particles are already in target rest frame
+C IF (MCGENE.EQ.3) THEN
+C PCAS(2,1) = PHKK(1,IDXCAS)
+C PCAS(2,2) = PHKK(2,IDXCAS)
+C PCAS(2,3) = PHKK(3,IDXCAS)
+C PCAS(2,4) = PHKK(4,IDXCAS)
+C ELSE
+ CALL DT_LTRANS(PHKK(1,IDXCAS),PHKK(2,IDXCAS),PHKK(3,IDXCAS),
+ & PHKK(4,IDXCAS),PCAS(2,1),PCAS(2,2),PCAS(2,3),
+ & PCAS(2,4),IDCAS,-3)
+C ENDIF
+ PTOCAS(2) = SQRT(PCAS(2,1)**2+PCAS(2,2)**2+PCAS(2,3)**2)
+ PCAS(2,5) = (PCAS(2,4)-PTOCAS(2))*(PCAS(2,4)+PTOCAS(2))
+ IF (PCAS(2,5).GT.ZERO) THEN
+ PCAS(2,5) = SQRT(PCAS(2,5))
+ ELSE
+ PCAS(2,5) = AAM(IDCAS)
+ ENDIF
+ DO 22 K=1,3
+ COSCAS(2,K) = PCAS(2,K)/MAX(PTOCAS(2),TINY10)
+ 22 CONTINUE
+* Lorentz-parameters
+* particle rest system --> target rest system
+ BGCAS(2) = PTOCAS(2)/MAX(PCAS(2,5),TINY10)
+ GACAS(2) = PCAS(2,4)/MAX(PCAS(2,5),TINY10)
+ BECAS(2) = BGCAS(2)/GACAS(2)
+ ELSE
+ DO 23 K=1,5
+ PCAS(2,K) = ZERO
+ IF (K.LE.3) COSCAS(2,K) = ZERO
+ 23 CONTINUE
+ PTOCAS(2) = ZERO
+ BGCAS(2) = ZERO
+ GACAS(2) = ZERO
+ BECAS(2) = ZERO
+ ENDIF
+
+* radii of nuclei (mm) modified by the wall-depth of the Woods-Saxon-
+* potential (see CONUCL)
+ RNUC(1) = (RPROJ+4.605D0*PDIF)*FM2MM
+ RNUC(2) = (RTARG+4.605D0*PDIF)*FM2MM
+* impact parameter (the projectile moving along z)
+ BIMPC(1) = ZERO
+ BIMPC(2) = BIMPAC*FM2MM
+
+* get position of initial hadron in projectile/target rest-syst.
+ DO 3 K=1,4
+ VTXCAS(1,K) = WHKK(K,IDXCAS)
+ VTXCAS(2,K) = VHKK(K,IDXCAS)
+ 3 CONTINUE
+
+ ICAS = 1
+ I2 = 2
+ IF (NCAS.EQ.-1) THEN
+ ICAS = 2
+ I2 = 1
+ ENDIF
+
+ IF (PTOCAS(ICAS).LT.TINY10) THEN
+ WRITE(LOUT,1000) PTOCAS
+ 1000 FORMAT(1X,'INUCAS: warning! zero momentum of initial',
+ & ' hadron ',/,20X,2E12.4)
+ GOTO 9999
+ ENDIF
+
+* reset spectator flags
+ NSPE = 0
+ IDXSPE(1) = 0
+ IDXSPE(2) = 0
+ IDSPE(1) = 0
+ IDSPE(2) = 0
+
+* formation length (in fm)
+C IF (LCAS) THEN
+C DEL0 = ZERO
+C ELSE
+ DEL0 = TAUFOR*BGCAS(ICAS)
+ IF (ITAUVE.EQ.1) THEN
+ AMT = PCAS(ICAS,1)**2+PCAS(ICAS,2)**2+PCAS(ICAS,5)**2
+ DEL0 = DEL0*PCAS(ICAS,5)**2/AMT
+ ENDIF
+C ENDIF
+* sample from exp(-del/del0)
+ DEL1 = -DEL0*LOG(MAX(DT_RNDM(DEL0),TINY10))
+* save formation time
+ TAUSA1 = DEL1/BGCAS(ICAS)
+ REL1 = TAUSA1*BGCAS(I2)
+
+ DEL = DEL1
+ TAUSAM = DEL/BGCAS(ICAS)
+ REL = TAUSAM*BGCAS(I2)
+
+* special treatment for negative particles unable to escape
+* nuclear potential (implemented for ap, pi-, K- only)
+ LABSOR = .FALSE.
+ IF ((IICH(IDCAS).EQ.-1).AND.(IDCAS.LT.20)) THEN
+* threshold energy = nuclear potential + Coulomb potential
+* (nuclear potential for hadron-nucleus interactions only)
+ ETHR = AAM(IDCAS)+EPOT(ICAS,IDCAS)+ETACOU(ICAS)
+ IF (PCAS(ICAS,4).LT.ETHR) THEN
+ DO 4 K=1,5
+ PCAS1(K) = PCAS(ICAS,K)
+ 4 CONTINUE
+* "absorb" negative particle in nucleus
+ CALL DT_ABSORP(IDCAS,PCAS1,NCAS,NSPE,IDSPE,IDXSPE,0,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ IF (NSPE.GE.1) LABSOR = .TRUE.
+ ENDIF
+ ENDIF
+
+* if the initial particle has not been absorbed proceed with
+* "normal" cascade
+ IF (.NOT.LABSOR) THEN
+
+* calculate coordinates of hadron at the end of the formation zone
+* transport-time and -step in the rest system where this step is
+* treated
+ DSTEP = DEL*FM2MM
+ DTIME = DSTEP/BECAS(ICAS)
+ RSTEP = REL*FM2MM
+ IF ((IP.GT.1).AND.(IT.GT.1)) THEN
+ RTIME = RSTEP/BECAS(I2)
+ ELSE
+ RTIME = ZERO
+ ENDIF
+* save step whithout considering the overlapping region
+ DSTEP1 = DEL1*FM2MM
+ DTIME1 = DSTEP1/BECAS(ICAS)
+ RSTEP1 = REL1*FM2MM
+ IF ((IP.GT.1).AND.(IT.GT.1)) THEN
+ RTIME1 = RSTEP1/BECAS(I2)
+ ELSE
+ RTIME1 = ZERO
+ ENDIF
+* transport to the end of the formation zone in this system
+ DO 5 K=1,3
+ VTXCA1(ICAS,K) = VTXCAS(ICAS,K)+DSTEP1*COSCAS(ICAS,K)
+ VTXCA1(I2,K) = VTXCAS(I2,K) +RSTEP1*COSCAS(I2,K)
+ VTXCAS(ICAS,K) = VTXCAS(ICAS,K)+DSTEP*COSCAS(ICAS,K)
+ VTXCAS(I2,K) = VTXCAS(I2,K) +RSTEP*COSCAS(I2,K)
+ 5 CONTINUE
+ VTXCA1(ICAS,4) = VTXCAS(ICAS,4)+DTIME1
+ VTXCA1(I2,4) = VTXCAS(I2,4) +RTIME1
+ VTXCAS(ICAS,4) = VTXCAS(ICAS,4)+DTIME
+ VTXCAS(I2,4) = VTXCAS(I2,4) +RTIME
+
+ IF ((IP.GT.1).AND.(IT.GT.1)) THEN
+ XCAS = VTXCAS(ICAS,1)
+ YCAS = VTXCAS(ICAS,2)
+ XNCLTA = BIMPAC*FM2MM
+ RNCLPR = (RPROJ+RNUCLE)*FM2MM
+ RNCLTA = (RTARG+RNUCLE)*FM2MM
+C RNCLPR = (RPROJ+1.605D0*PDIF)*FM2MM
+C RNCLTA = (RTARG+1.605D0*PDIF)*FM2MM
+C RNCLPR = (RPROJ)*FM2MM
+C RNCLTA = (RTARG)*FM2MM
+ RCASPR = SQRT( XCAS**2 +YCAS**2)
+ RCASTA = SQRT((XCAS-XNCLTA)**2+YCAS**2)
+ IF ((RCASPR.LT.RNCLPR).AND.(RCASTA.LT.RNCLTA)) THEN
+ IF (IDCH(IDXCAS).EQ.0) NOBAM(IDXCAS) = 3
+ ENDIF
+ ENDIF
+
+* check if particle is already outside of the corresp. nucleus
+ RDIST = SQRT((VTXCAS(ICAS,1)-BIMPC(ICAS))**2+
+ & VTXCAS(ICAS,2)**2+VTXCAS(ICAS,3)**2)
+ IF (RDIST.GE.RNUC(ICAS)) THEN
+* here: IDCH is the generation of the final state part. starting
+* with zero for hadronization products
+* flag particles of generation 0 being outside the nuclei after
+* formation time (to be used for excitation energy calculation)
+ IF ((IDCH(IDXCAS).EQ.0).AND.(NOBAM(IDXCAS).LT.3))
+ & NOBAM(IDXCAS) = NOBAM(IDXCAS)+ICAS
+ GOTO 9997
+ ENDIF
+ DIST = DLARGE
+ DISTP = DLARGE
+ DISTN = DLARGE
+ IDXP = 0
+ IDXN = 0
+
+* already here: skip particles being outside HADRIN "energy-window"
+* to avoid wasting of time
+ NINCHR(ICAS,1) = NINCHR(ICAS,1)+1
+ IF ((PTOCAS(ICAS).LE.PLOWH).OR.(PTOCAS(ICAS).GE.PHIH)) THEN
+ NINCHR(ICAS,2) = NINCHR(ICAS,2)+1
+C WRITE(LOUT,1002) IDXCAS,IDCAS,ICAS,PTOCAS(ICAS),NEVHKK
+C1002 FORMAT(1X,'INUCAS: warning! momentum of particle with ',
+C & 'index ',I5,' (id: ',I3,') ',I3,/,11X,'p_tot = ',
+C & E12.4,', above or below HADRIN-thresholds',I6)
+ NSPE = 0
+ GOTO 9997
+ ENDIF
+
+ DO 7 IDXHKK=1,NOINC
+ I = IDXINC(IDXHKK)
+* scan DTEVT1 for unwounded or excited nucleons
+ IF ((ISTHKK(I).EQ.12+ICAS).OR.(ISTHKK(I).EQ.14+ICAS)) THEN
+ DO 8 K=1,3
+ IF (ICAS.EQ.1) THEN
+ VTXDST(K) = WHKK(K,I)-VTXCAS(1,K)
+ ELSEIF (ICAS.EQ.2) THEN
+ VTXDST(K) = VHKK(K,I)-VTXCAS(2,K)
+ ENDIF
+ 8 CONTINUE
+ POSNUC = VTXDST(1)*COSCAS(ICAS,1)+
+ & VTXDST(2)*COSCAS(ICAS,2)+
+ & VTXDST(3)*COSCAS(ICAS,3)
+* check if nucleon is situated in forward direction
+ IF (POSNUC.GT.ZERO) THEN
+* distance between hadron and this nucleon
+ DISTNU = SQRT(VTXDST(1)**2+VTXDST(2)**2+
+ & VTXDST(3)**2)
+* impact parameter
+ BIMNU2 = DISTNU**2-POSNUC**2
+ IF (BIMNU2.LT.ZERO) THEN
+ WRITE(LOUT,1001) DISTNU,POSNUC,BIMNU2
+ 1001 FORMAT(1X,'INUCAS: warning! inconsistent impact',
+ & ' parameter ',/,20X,3E12.4)
+ GOTO 7
+ ENDIF
+ BIMNU = SQRT(BIMNU2)
+* maximum impact parameter to have interaction
+ IDNUC = IDT_ICIHAD(IDHKK(I))
+ IDNUC1 = IDT_MCHAD(IDNUC)
+ IDCAS1 = IDT_MCHAD(IDCAS)
+ DO 19 K=1,5
+ PCAS1(K) = PCAS(ICAS,K)
+ PNUC(K) = PHKK(K,I)
+ 19 CONTINUE
+* Lorentz-parameter for trafo into rest-system of target
+ DO 18 K=1,4
+ BGTA(K) = PNUC(K)/MAX(PNUC(5),TINY10)
+ 18 CONTINUE
+* transformation of projectile into rest-system of target
+ CALL DT_DALTRA(BGTA(4),-BGTA(1),-BGTA(2),-BGTA(3),
+ & PCAS1(1),PCAS1(2),PCAS1(3),PCAS1(4),
+ & PPTOT,PX,PY,PZ,PE)
+**
+C CALL DT_SIHNIN(IDCAS1,IDNUC1,PPTOT,SIGIN)
+C CALL DT_SIHNEL(IDCAS1,IDNUC1,PPTOT,SIGEL)
+ DUMZER = ZERO
+ CALL DT_XSHN(IDCAS1,IDNUC1,PPTOT,DUMZER,SIGTOT,SIGEL)
+ CALL DT_SIHNAB(IDCAS1,IDNUC1,PPTOT,SIGAB)
+ IF (((IDCAS1.EQ.13).OR.(IDCAS1.EQ.14)).AND.
+ & (PPTOT.LT.0.15D0)) SIGEL = SIGEL/2.0D0
+ SIGIN = SIGTOT-SIGEL-SIGAB
+C SIGTOT = SIGIN+SIGEL+SIGAB
+**
+ BIMMAX = SQRT(SIGTOT/(5.0D0*TWOPI))*FM2MM
+* check if interaction is possible
+ IF (BIMNU.LE.BIMMAX) THEN
+* get nucleon with smallest distance and kind of interaction
+* (elastic/inelastic)
+ IF (DISTNU.LT.DIST) THEN
+ DIST = DISTNU
+ BINT = BIMNU
+ IF (IDNUC.NE.IDSPE(1)) THEN
+ IDSPE(2) = IDSPE(1)
+ IDXSPE(2) = IDXSPE(1)
+ IDSPE(1) = IDNUC
+ ENDIF
+ IDXSPE(1) = I
+ NSPE = 1
+**sr
+ SELA = SIGEL
+ SABS = SIGAB
+ STOT = SIGTOT
+C IF ((IDCAS.EQ.2).OR.(IDCAS.EQ.9)) THEN
+C SELA = SIGEL
+C STOT = SIGIN+SIGEL
+C ELSE
+C SELA = SIGEL+0.75D0*SIGIN
+C STOT = 0.25D0*SIGIN+SELA
+C ENDIF
+**
+ ENDIF
+ ENDIf
+ ENDIF
+ DISTNU = SQRT(VTXDST(1)**2+VTXDST(2)**2+
+ & VTXDST(3)**2)
+ IDNUC = IDT_ICIHAD(IDHKK(I))
+ IF (IDNUC.EQ.1) THEN
+ IF (DISTNU.LT.DISTP) THEN
+ DISTP = DISTNU
+ IDXP = I
+ POSP = POSNUC
+ ENDIF
+ ELSEIF (IDNUC.EQ.8) THEN
+ IF (DISTNU.LT.DISTN) THEN
+ DISTN = DISTNU
+ IDXN = I
+ POSN = POSNUC
+ ENDIF
+ ENDIF
+ ENDIF
+ 7 CONTINUE
+
+* there is no nucleon for a secondary interaction
+ IF (NSPE.EQ.0) GOTO 9997
+
+C IF ((IDCAS.EQ.13).AND.((PCAS(ICAS,4)-PCAS(ICAS,5)).LT.0.1D0))
+C & WRITE(LOUT,*) STOT,SELA,SABS,IDXSPE
+ IF (IDXSPE(2).EQ.0) THEN
+ IF ((IDSPE(1).EQ.1).AND.(IDXN.GT.0)) THEN
+C DO 80 K=1,3
+C IF (ICAS.EQ.1) THEN
+C VTXDST(K) = WHKK(K,IDXN)-WHKK(K,IDXSPE(1))
+C ELSEIF (ICAS.EQ.2) THEN
+C VTXDST(K) = VHKK(K,IDXN)-VHKK(K,IDXSPE(1))
+C ENDIF
+C 80 CONTINUE
+C DISTNU = SQRT(VTXDST(1)**2+VTXDST(2)**2+
+C & VTXDST(3)**2)
+C IF ((DISTNU.LT.15.0D0*FM2MM).OR.(POSN.GT.ZERO)) THEN
+ IDXSPE(2) = IDXN
+ IDSPE(2) = 8
+C ELSE
+C STOT = STOT-SABS
+C SABS = ZERO
+C ENDIF
+ ELSEIF ((IDSPE(1).EQ.8).AND.(IDXP.GT.0)) THEN
+C DO 81 K=1,3
+C IF (ICAS.EQ.1) THEN
+C VTXDST(K) = WHKK(K,IDXP)-WHKK(K,IDXSPE(1))
+C ELSEIF (ICAS.EQ.2) THEN
+C VTXDST(K) = VHKK(K,IDXP)-VHKK(K,IDXSPE(1))
+C ENDIF
+C 81 CONTINUE
+C DISTNU = SQRT(VTXDST(1)**2+VTXDST(2)**2+
+C & VTXDST(3)**2)
+C IF ((DISTNU.LT.15.0D0*FM2MM).OR.(POSP.GT.ZERO)) THEN
+ IDXSPE(2) = IDXP
+ IDSPE(2) = 1
+C ELSE
+C STOT = STOT-SABS
+C SABS = ZERO
+C ENDIF
+ ELSE
+ STOT = STOT-SABS
+ SABS = ZERO
+ ENDIF
+ ENDIF
+ RR = DT_RNDM(DIST)
+ IF (RR.LT.SELA/STOT) THEN
+ IPROC = 2
+ ELSEIF ((RR.GE.SELA/STOT).AND.(RR.LT.(SELA+SABS)/STOT)) THEN
+ IPROC = 3
+ ELSE
+ IPROC = 1
+ ENDIF
+
+ DO 9 K=1,5
+ PCAS1(K) = PCAS(ICAS,K)
+ PNUC(K) = PHKK(K,IDXSPE(1))
+ 9 CONTINUE
+ IF (IPROC.EQ.3) THEN
+* 2-nucleon absorption of pion
+ NSPE = 2
+ CALL DT_ABSORP(IDCAS,PCAS1,NCAS,NSPE,IDSPE,IDXSPE,1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ IF (NSPE.GE.1) LABSOR = .TRUE.
+ ELSE
+* sample secondary interaction
+ IDNUC = IDBAM(IDXSPE(1))
+ CALL DT_HADRIN(IDCAS,PCAS1,IDNUC,PNUC,IPROC,IREJ1)
+ IF (IREJ1.EQ.1) GOTO 9999
+ IF (IREJ1.GT.1) GOTO 9998
+ ENDIF
+ ENDIF
+
+* update arrays to include Pauli-principle
+ DO 10 I=1,NSPE
+ IF (NWOUND(ICAS).LE.299) THEN
+ NWOUND(ICAS) = NWOUND(ICAS)+1
+ EWOUND(ICAS,NWOUND(ICAS)) = PHKK(4,IDXSPE(I))
+ ENDIF
+ 10 CONTINUE
+
+* dump initial hadron for energy-momentum conservation check
+ IF (LEMCCK)
+ & CALL DT_EVTEMC(PCAS(ICAS,1),PCAS(ICAS,2),PCAS(ICAS,3),
+ & PCAS(ICAS,4),1,IDUM,IDUM)
+
+* dump final state particles into DTEVT1
+
+* check if Pauli-principle is fulfilled
+ NPAULI = 0
+ NWTMP(1) = NWOUND(1)
+ NWTMP(2) = NWOUND(2)
+ DO 111 I=1,NFSP
+ NPAULI = 0
+ J1 = 2
+ IF (((NCAS.EQ. 1).AND.(IT.LE.1)).OR.
+ & ((NCAS.EQ.-1).AND.(IP.LE.1))) J1 = 1
+ DO 117 J=1,J1
+ IF ((NPAULI.NE.0).AND.(J.EQ.2)) GOTO 117
+ IF (J.EQ.1) THEN
+ IDX = ICAS
+ PE = PFSP(4,I)
+ ELSE
+ IDX = I2
+ MODE = 1
+ IF (IDX.EQ.1) MODE = -1
+ CALL DT_LTNUC(PFSP(3,I),PFSP(4,I),PZ,PE,MODE)
+ ENDIF
+* first check if cascade step is forbidden due to Pauli-principle
+* (in case of absorpion this step is forced)
+ IF ((.NOT.LABSOR).AND.LPAULI.AND.((IDFSP(I).EQ.1).OR.
+ & (IDFSP(I).EQ.8))) THEN
+* get nuclear potential barrier
+ POT = EPOT(IDX,IDFSP(I))+AAM(IDFSP(I))
+ IF (IDFSP(I).EQ.1) THEN
+ POTLOW = POT-EBINDP(IDX)
+ ELSE
+ POTLOW = POT-EBINDN(IDX)
+ ENDIF
+* final state particle not able to escape nucleus
+ IF (PE.LE.POTLOW) THEN
+* check if there are wounded nucleons
+ IF ((NWOUND(IDX).GE.1).AND.(PE.GE.
+ & EWOUND(IDX,NWOUND(IDX)))) THEN
+ NPAULI = NPAULI+1
+ NWOUND(IDX) = NWOUND(IDX)-1
+ ELSE
+* interaction prohibited by Pauli-principle
+ NWOUND(1) = NWTMP(1)
+ NWOUND(2) = NWTMP(2)
+ GOTO 9997
+ ENDIF
+ ENDIF
+ ENDIF
+ 117 CONTINUE
+ 111 CONTINUE
+
+ NPAULI = 0
+ NWOUND(1) = NWTMP(1)
+ NWOUND(2) = NWTMP(2)
+
+ DO 11 I=1,NFSP
+
+ IST = ISTHKK(IDXCAS)
+
+ NPAULI = 0
+ J1 = 2
+ IF (((NCAS.EQ. 1).AND.(IT.LE.1)).OR.
+ & ((NCAS.EQ.-1).AND.(IP.LE.1))) J1 = 1
+ DO 17 J=1,J1
+ IF ((NPAULI.NE.0).AND.(J.EQ.2)) GOTO 17
+ IDX = ICAS
+ PE = PFSP(4,I)
+ IF (J.EQ.2) THEN
+ IDX = I2
+ CALL DT_LTNUC(PFSP(3,I),PFSP(4,I),PZ,PE,NCAS)
+ ENDIF
+* first check if cascade step is forbidden due to Pauli-principle
+* (in case of absorpion this step is forced)
+ IF ((.NOT.LABSOR).AND.LPAULI.AND.((IDFSP(I).EQ.1).OR.
+ & (IDFSP(I).EQ.8))) THEN
+* get nuclear potential barrier
+ POT = EPOT(IDX,IDFSP(I))+AAM(IDFSP(I))
+ IF (IDFSP(I).EQ.1) THEN
+ POTLOW = POT-EBINDP(IDX)
+ ELSE
+ POTLOW = POT-EBINDN(IDX)
+ ENDIF
+* final state particle not able to escape nucleus
+ IF (PE.LE.POTLOW) THEN
+* check if there are wounded nucleons
+ IF ((NWOUND(IDX).GE.1).AND.(PE.GE.
+ & EWOUND(IDX,NWOUND(IDX)))) THEN
+ NWOUND(IDX) = NWOUND(IDX)-1
+ NPAULI = NPAULI+1
+ IST = 14+IDX
+ ELSE
+* interaction prohibited by Pauli-principle
+ NWOUND(1) = NWTMP(1)
+ NWOUND(2) = NWTMP(2)
+ GOTO 9997
+ ENDIF
+**sr
+c ELSEIF (PE.LE.POT) THEN
+cC ELSEIF ((PE.LE.POT).AND.(NWOUND(IDX).GE.1)) THEN
+cC NWOUND(IDX) = NWOUND(IDX)-1
+c**
+c NPAULI = NPAULI+1
+c IST = 14+IDX
+ ENDIF
+ ENDIF
+ 17 CONTINUE
+
+* dump final state particles for energy-momentum conservation check
+ IF (LEMCCK) CALL DT_EVTEMC(-PFSP(1,I),-PFSP(2,I),-PFSP(3,I),
+ & -PFSP(4,I),2,IDUM,IDUM)
+
+ PX = PFSP(1,I)
+ PY = PFSP(2,I)
+ PZ = PFSP(3,I)
+ PE = PFSP(4,I)
+ IF (ABS(IST).EQ.1) THEN
+* transform particles back into n-n cms
+* LEPTO: leave final state particles in target rest frame
+C IF (MCGENE.EQ.3) THEN
+C PFSP(1,I) = PX
+C PFSP(2,I) = PY
+C PFSP(3,I) = PZ
+C PFSP(4,I) = PE
+C ELSE
+ IMODE = ICAS+1
+ CALL DT_LTRANS(PX,PY,PZ,PE,PFSP(1,I),PFSP(2,I),PFSP(3,I),
+ & PFSP(4,I),IDFSP(I),IMODE)
+C ENDIF
+ ELSEIF ((ICAS.EQ.2).AND.(IST.EQ.15)) THEN
+* target cascade but fsp got stuck in proj. --> transform it into
+* proj. rest system
+ CALL DT_LTRANS(PX,PY,PZ,PE,PFSP(1,I),PFSP(2,I),PFSP(3,I),
+ & PFSP(4,I),IDFSP(I),-1)
+ ELSEIF ((ICAS.EQ.1).AND.(IST.EQ.16)) THEN
+* proj. cascade but fsp got stuck in target --> transform it into
+* target rest system
+ CALL DT_LTRANS(PX,PY,PZ,PE,PFSP(1,I),PFSP(2,I),PFSP(3,I),
+ & PFSP(4,I),IDFSP(I),1)
+ ENDIF
+
+* dump final state particles into DTEVT1
+ IGEN = IDCH(IDXCAS)+1
+ ID = IDT_IPDGHA(IDFSP(I))
+ IXR = 0
+ IF (LABSOR) IXR = 99
+ CALL DT_EVTPUT(IST,ID,IDXCAS,IDXSPE(1),PFSP(1,I),
+ & PFSP(2,I),PFSP(3,I),PFSP(4,I),0,IXR,IGEN)
+
+* update the counter for particles which got stuck inside the nucleus
+ IF ((IST.EQ.15).OR.(IST.EQ.16)) THEN
+ NOINC = NOINC+1
+ IDXINC(NOINC) = NHKK
+ ENDIF
+ IF (LABSOR) THEN
+* in case of absorption the spatial treatment is an approximate
+* solution anyway (the positions of the nucleons which "absorb" the
+* cascade particle are not taken into consideration) therefore the
+* particles are produced at the position of the cascade particle
+ DO 12 K=1,4
+ WHKK(K,NHKK) = WHKK(K,IDXCAS)
+ VHKK(K,NHKK) = VHKK(K,IDXCAS)
+ 12 CONTINUE
+ ELSE
+* DDISTL - distance the cascade particle moves to the intera. point
+* (the position where impact-parameter = distance to the interacting
+* nucleon), DIST - distance to the interacting nucleon at the time of
+* formation of the cascade particle, BINT - impact-parameter of this
+* cascade-interaction
+ DDISTL = SQRT(DIST**2-BINT**2)
+ DTIME = DDISTL/BECAS(ICAS)
+ DTIMEL = DDISTL/BGCAS(ICAS)
+ RDISTL = DTIMEL*BGCAS(I2)
+ IF ((IP.GT.1).AND.(IT.GT.1)) THEN
+ RTIME = RDISTL/BECAS(I2)
+ ELSE
+ RTIME = ZERO
+ ENDIF
+* RDISTL, RTIME are this step and time in the rest system of the other
+* nucleus
+ DO 13 K=1,3
+ VTXCA1(ICAS,K) = VTXCAS(ICAS,K)+COSCAS(ICAS,K)*DDISTL
+ VTXCA1(I2,K) = VTXCAS(I2,K) +COSCAS(I2,K) *RDISTL
+ 13 CONTINUE
+ VTXCA1(ICAS,4) = VTXCAS(ICAS,4)+DTIME
+ VTXCA1(I2,4) = VTXCAS(I2,4) +RTIME
+* position of particle production is half the impact-parameter to
+* the interacting nucleon
+ DO 14 K=1,3
+ WHKK(K,NHKK) = OHALF*(VTXCA1(1,K)+WHKK(K,IDXSPE(1)))
+ VHKK(K,NHKK) = OHALF*(VTXCA1(2,K)+VHKK(K,IDXSPE(1)))
+ 14 CONTINUE
+* time of production of secondary = time of interaction
+ WHKK(4,NHKK) = VTXCA1(1,4)
+ VHKK(4,NHKK) = VTXCA1(2,4)
+ ENDIF
+
+ 11 CONTINUE
+
+* modify status and position of cascade particle (the latter for
+* statistics reasons only)
+ ISTHKK(IDXCAS) = 2
+ IF (LABSOR) ISTHKK(IDXCAS) = 19
+ IF (.NOT.LABSOR) THEN
+ DO 15 K=1,4
+ WHKK(K,IDXCAS) = VTXCA1(1,K)
+ VHKK(K,IDXCAS) = VTXCA1(2,K)
+ 15 CONTINUE
+ ENDIF
+
+ DO 16 I=1,NSPE
+ IS = IDXSPE(I)
+* dump interacting nucleons for energy-momentum conservation check
+ IF (LEMCCK)
+ & CALL DT_EVTEMC(PHKK(1,IS),PHKK(2,IS),PHKK(3,IS),PHKK(4,IS),
+ & 2,IDUM,IDUM)
+* modify entry for interacting nucleons
+ IF (ISTHKK(IS).EQ.12+ICAS) ISTHKK(IS)=16+ICAS
+ IF (ISTHKK(IS).EQ.14+ICAS) ISTHKK(IS)=2
+ IF (I.GE.2) THEN
+ JDAHKK(1,IS) = JDAHKK(1,IDXSPE(1))
+ JDAHKK(2,IS) = JDAHKK(2,IDXSPE(1))
+ ENDIF
+ 16 CONTINUE
+
+* check energy-momentum conservation
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,4,500,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+
+* update counter
+ IF (LABSOR) THEN
+ NINCCO(ICAS,1) = NINCCO(ICAS,1)+1
+ ELSE
+ IF (IPROC.EQ.1) NINCCO(ICAS,2) = NINCCO(ICAS,2)+1
+ IF (IPROC.EQ.2) NINCCO(ICAS,3) = NINCCO(ICAS,3)+1
+ ENDIF
+
+ RETURN
+
+ 9997 CONTINUE
+ 9998 CONTINUE
+* transport-step but no cascade step due to configuration (i.e. there
+* is no nucleon for interaction etc.)
+ IF (LCAS) THEN
+ DO 100 K=1,4
+C WHKK(K,IDXCAS) = VTXCAS(1,K)
+C VHKK(K,IDXCAS) = VTXCAS(2,K)
+ WHKK(K,IDXCAS) = VTXCA1(1,K)
+ VHKK(K,IDXCAS) = VTXCA1(2,K)
+ 100 CONTINUE
+ ENDIF
+
+C9998 CONTINUE
+* no cascade-step because of configuration
+* (i.e. hadron outside nucleus etc.)
+ LCAS = .TRUE.
+ RETURN
+
+ 9999 CONTINUE
+* rejection
+ IREJ = 1
+ RETURN
+ END
+*
+*===absorp=============================================================*
+*
+CDECK ID>, DT_ABSORP
+ SUBROUTINE DT_ABSORP(IDCAS,PCAS,NCAS,NSPE,IDSPE,IDXSPE,MODE,IREJ)
+
+************************************************************************
+* Two-nucleon absorption of antiprotons, pi-, and K-. *
+* Antiproton absorption is handled by HADRIN. *
+* The following channels for meson-absorption are considered: *
+* pi- + p + p ---> n + p *
+* pi- + p + n ---> n + n *
+* K- + p + p ---> sigma+ + n / Lam + p / sigma0 + p *
+* K- + p + n ---> sigma- + n / Lam + n / sigma0 + n *
+* K- + p + p ---> sigma- + n *
+* IDCAS, PCAS identity, momentum of particle to be absorbed *
+* NCAS = 1 intranuclear cascade in projectile *
+* = -1 intranuclear cascade in target *
+* NSPE number of spectator nucleons involved *
+* IDXSPE(2) DTEVT1-indices of spectator nucleons involved *
+* Revised version of the original STOPIK written by HJM and J. Ranft. *
+* This version dated 24.02.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY5=1.0D-5,ONE=1.0D0,
+ & ONETHI=0.3333D0,TWOTHI=0.6666D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* final state after inc step
+ PARAMETER (MAXFSP=10)
+ COMMON /DTCAPA/ PFSP(5,MAXFSP),IDFSP(MAXFSP),NFSP
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ DIMENSION PCAS(5),IDXSPE(2),IDSPE(2),PSPE(2,5),PSPE1(5),
+ & PTOT3P(4),BG3P(4),
+ & ECMF(2),PCMF(2),CODF(2),COFF(2),SIFF(2)
+
+ IREJ = 0
+ NFSP = 0
+
+* skip particles others than ap, pi-, K- for mode=0
+ IF ((MODE.EQ.0).AND.
+ & (IDCAS.NE.2).AND.(IDCAS.NE.14).AND.(IDCAS.NE.16)) RETURN
+* skip particles others than pions for mode=1
+* (2-nucleon absorption in intranuclear cascade)
+ IF ((MODE.EQ.1).AND.
+ & (IDCAS.NE.13).AND.(IDCAS.NE.14).AND.(IDCAS.NE.23)) RETURN
+
+ NUCAS = NCAS
+ IF (NUCAS.EQ.-1) NUCAS = 2
+
+ IF (MODE.EQ.0) THEN
+* scan spectator nucleons for nucleons being able to "absorb"
+ NSPE = 0
+ IDXSPE(1) = 0
+ IDXSPE(2) = 0
+ DO 1 I=1,NHKK
+ IF ((ISTHKK(I).EQ.12+NUCAS).OR.(ISTHKK(I).EQ.14+NUCAS)) THEN
+ NSPE = NSPE+1
+ IDXSPE(NSPE) = I
+ IDSPE(NSPE) = IDBAM(I)
+ IF ((NSPE.EQ.1).AND.(IDCAS.EQ.2)) GOTO 2
+ IF (NSPE.EQ.2) THEN
+ IF ((IDCAS.EQ.14).AND.(IDSPE(1).EQ.8).AND.
+ & (IDSPE(2).EQ.8)) THEN
+* there is no pi-+n+n channel
+ NSPE = 1
+ GOTO 1
+ ELSE
+ GOTO 2
+ ENDIF
+ ENDIF
+ ENDIF
+ 1 CONTINUE
+
+ 2 CONTINUE
+ ENDIF
+* transform excited projectile nucleons (status=15) into proj. rest s.
+ DO 3 I=1,NSPE
+ DO 4 K=1,5
+ PSPE(I,K) = PHKK(K,IDXSPE(I))
+ 4 CONTINUE
+ 3 CONTINUE
+
+* antiproton absorption
+ IF ((IDCAS.EQ.2).AND.(NSPE.GE.1)) THEN
+ DO 5 K=1,5
+ PSPE1(K) = PSPE(1,K)
+ 5 CONTINUE
+ CALL DT_HADRIN(IDCAS,PCAS,IDSPE(1),PSPE1,1,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+
+* meson absorption
+ ELSEIF (((IDCAS.EQ.13).OR.(IDCAS.EQ.14).OR.(IDCAS.EQ.23)
+ & .OR.(IDCAS.EQ.16)).AND.(NSPE.GE.2)) THEN
+ IF (IDCAS.EQ.14) THEN
+* pi- absorption
+ IDFSP(1) = 8
+ IDFSP(2) = 8
+ IF ((IDSPE(1).EQ.1).AND.(IDSPE(2).EQ.1)) IDFSP(2) = 1
+ ELSEIF (IDCAS.EQ.13) THEN
+* pi+ absorption
+ IDFSP(1) = 1
+ IDFSP(2) = 1
+ IF ((IDSPE(1).EQ.8).AND.(IDSPE(2).EQ.8)) IDFSP(2) = 8
+ ELSEIF (IDCAS.EQ.23) THEN
+* pi0 absorption
+ IDFSP(1) = IDSPE(1)
+ IDFSP(2) = IDSPE(2)
+ ELSEIF (IDCAS.EQ.16) THEN
+* K- absorption
+ R = DT_RNDM(PCAS)
+ IF ((IDSPE(1).EQ.1).AND.(IDSPE(2).EQ.1)) THEN
+ IF (R.LT.ONETHI) THEN
+ IDFSP(1) = 21
+ IDFSP(2) = 8
+ ELSEIF (R.LT.TWOTHI) THEN
+ IDFSP(1) = 17
+ IDFSP(2) = 1
+ ELSE
+ IDFSP(1) = 22
+ IDFSP(2) = 1
+ ENDIF
+ ELSEIF ((IDSPE(1).EQ.8).AND.(IDSPE(2).EQ.8)) THEN
+ IDFSP(1) = 20
+ IDFSP(2) = 8
+ ELSE
+ IF (R.LT.ONETHI) THEN
+ IDFSP(1) = 20
+ IDFSP(2) = 1
+ ELSEIF (R.LT.TWOTHI) THEN
+ IDFSP(1) = 17
+ IDFSP(2) = 8
+ ELSE
+ IDFSP(1) = 22
+ IDFSP(2) = 8
+ ENDIF
+ ENDIF
+ ENDIF
+* dump initial particles for energy-momentum cons. check
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PCAS(1),PCAS(2),PCAS(3),PCAS(4),1,IDUM,IDUM)
+ CALL DT_EVTEMC(PSPE(1,1),PSPE(1,2),PSPE(1,3),PSPE(1,4),2,
+ & IDUM,IDUM)
+ CALL DT_EVTEMC(PSPE(2,1),PSPE(2,2),PSPE(2,3),PSPE(2,4),2,
+ & IDUM,IDUM)
+ ENDIF
+* get Lorentz-parameter of 3 particle initial state
+ DO 6 K=1,4
+ PTOT3P(K) = PCAS(K)+PSPE(1,K)+PSPE(2,K)
+ 6 CONTINUE
+ P3P = SQRT(PTOT3P(1)**2+PTOT3P(2)**2+PTOT3P(3)**2)
+ AM3P = SQRT( (PTOT3P(4)-P3P)*(PTOT3P(4)+P3P) )
+ DO 7 K=1,4
+ BG3P(K) = PTOT3P(K)/MAX(AM3P,TINY10)
+ 7 CONTINUE
+* 2-particle decay of the 3-particle compound system
+ CALL DT_DTWOPD(AM3P,ECMF(1),ECMF(2),PCMF(1),PCMF(2),
+ & CODF(1),COFF(1),SIFF(1),CODF(2),COFF(2),SIFF(2),
+ & AAM(IDFSP(1)),AAM(IDFSP(2)))
+ DO 8 I=1,2
+ SDF = SQRT((ONE-CODF(I))*(ONE+CODF(I)))
+ PX = PCMF(I)*COFF(I)*SDF
+ PY = PCMF(I)*SIFF(I)*SDF
+ PZ = PCMF(I)*CODF(I)
+ CALL DT_DALTRA(BG3P(4),BG3P(1),BG3P(2),BG3P(3),PX,PY,PZ,
+ & ECMF(I),PTOFSP,PFSP(1,I),PFSP(2,I),PFSP(3,I),
+ & PFSP(4,I))
+ PFSP(5,I) = SQRT( (PFSP(4,I)-PTOFSP)*(PFSP(4,I)+PTOFSP) )
+* check consistency of kinematics
+ IF (ABS(AAM(IDFSP(I))-PFSP(5,I)).GT.TINY5) THEN
+ WRITE(LOUT,1001) IDFSP(I),AAM(IDFSP(I)),PFSP(5,I)
+ 1001 FORMAT(1X,'ABSORP: warning! inconsistent',
+ & ' tree-particle kinematics',/,20X,'id: ',I3,
+ & ' AAM = ',E10.4,' MFSP = ',E10.4)
+ ENDIF
+* dump final state particles for energy-momentum cons. check
+ IF (LEMCCK) CALL DT_EVTEMC(-PFSP(1,I),-PFSP(2,I),
+ & -PFSP(3,I),-PFSP(4,I),2,IDUM,IDUM)
+ 8 CONTINUE
+ NFSP = 2
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,3,100,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ WRITE(LOUT,*)'ABSORB: EMC ',AAM(IDFSP(1)),AAM(IDFSP(2)),
+ & AM3P
+ GOTO 9999
+ ENDIF
+ ENDIF
+ ELSE
+ IF (IOULEV(3).GT.0) WRITE(LOUT,1000) IDCAS,NSPE
+ 1000 FORMAT(1X,'ABSORP: warning! absorption for particle ',I3,
+ & ' impossible',/,20X,'too few spectators (',I2,')')
+ NSPE = 0
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in ABSORP'
+ IREJ = 1
+ RETURN
+ END
+*
+*===hadrin=============================================================*
+*
+CDECK ID>, DT_HADRIN
+ SUBROUTINE DT_HADRIN(IDPR,PPR,IDTA,PTA,MODE,IREJ)
+
+************************************************************************
+* Interface to the HADRIN-routines for inelastic and elastic *
+* scattering. *
+* IDPR,PPR(5) identity, momentum of projectile *
+* IDTA,PTA(5) identity, momentum of target *
+* MODE = 1 inelastic interaction *
+* = 2 elastic interaction *
+* Revised version of the original FHAD. *
+* This version dated 27.10.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,TINY5=1.0D-5,TINY3=1.0D-3,
+ & TINY2=1.0D-2,TINY1=1.0D-1,ONE=1.0D0)
+
+ LOGICAL LCORR,LMSSG
+
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* final state after inc step
+ PARAMETER (MAXFSP=10)
+ COMMON /DTCAPA/ PFSP(5,MAXFSP),IDFSP(MAXFSP),NFSP
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* output-common for DHADRI/ELHAIN
+* final state from HADRIN interaction
+ PARAMETER (MAXFIN=10)
+ COMMON /HNFSPA/ ITRH(MAXFIN),CXRH(MAXFIN),CYRH(MAXFIN),
+ & CZRH(MAXFIN),ELRH(MAXFIN),PLRH(MAXFIN),IRH
+
+ DIMENSION PPR(5),PPR1(5),PTA(5),BGTA(4),
+ & P1IN(4),P2IN(4),P1OUT(4),P2OUT(4),IMCORR(2)
+
+ DATA LMSSG /.TRUE./
+
+ IREJ = 0
+ NFSP = 0
+ KCORR = 0
+ IMCORR(1) = 0
+ IMCORR(2) = 0
+ LCORR = .FALSE.
+
+* dump initial particles for energy-momentum cons. check
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PPR(1),PPR(2),PPR(3),PPR(4),1,IDUM,IDUM)
+ CALL DT_EVTEMC(PTA(1),PTA(2),PTA(3),PTA(4),2,IDUM,IDUM)
+ ENDIF
+
+ AMP2 = PPR(4)**2-PPR(1)**2-PPR(2)**2-PPR(3)**2
+ AMT2 = PTA(4)**2-PTA(1)**2-PTA(2)**2-PTA(3)**2
+ IF ((AMP2.LT.ZERO).OR.(AMT2.LT.ZERO).OR.
+ & (ABS(AMP2-AAM(IDPR)**2).GT.TINY5).OR.
+ & (ABS(AMT2-AAM(IDTA)**2).GT.TINY5)) THEN
+ IF (LMSSG.AND.(IOULEV(3).GT.0))
+ & WRITE(LOUT,1000) AMP2,AAM(IDPR)**2,AMT2,AAM(IDTA)**2
+ 1000 FORMAT(1X,'HADRIN: warning! inconsistent projectile/target',
+ & ' mass',/,20X,'AMP2 = ',E12.4,', AAM(IDPR)**2 = ',
+ & E12.4,/,20X,'AMT2 = ',E12.4,', AAM(IDTA)**2 = ',E12.4)
+ LMSSG = .FALSE.
+ LCORR = .TRUE.
+ ENDIF
+
+* convert initial state particles into particles which can be
+* handled by HADRIN
+ IDHPR = IDPR
+ IDHTA = IDTA
+ IF ((IDHPR.LE.0).OR.(IDHPR.GE.111).OR.LCORR) THEN
+ IF ((IDHPR.LE.0).OR.(IDHPR.GE.111)) IDHPR = 1
+ DO 1 K=1,4
+ P1IN(K) = PPR(K)
+ P2IN(K) = PTA(K)
+ 1 CONTINUE
+ XM1 = AAM(IDHPR)
+ XM2 = AAM(IDHTA)
+ CALL DT_MASHEL(P1IN,P2IN,XM1,XM2,P1OUT,P2OUT,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ WRITE(LOUT,'(1X,A)') 'HADRIN: inconsistent mass trsf.'
+ GOTO 9999
+ ENDIF
+ DO 2 K=1,4
+ PPR(K) = P1OUT(K)
+ PTA(K) = P2OUT(K)
+ 2 CONTINUE
+ PPR(5) = SQRT(PPR(4)**2-PPR(1)**2-PPR(2)**2-PPR(3)**2)
+ PTA(5) = SQRT(PTA(4)**2-PTA(1)**2-PTA(2)**2-PTA(3)**2)
+ ENDIF
+
+* Lorentz-parameter for trafo into rest-system of target
+ DO 3 K=1,4
+ BGTA(K) = PTA(K)/PTA(5)
+ 3 CONTINUE
+* transformation of projectile into rest-system of target
+ CALL DT_DALTRA(BGTA(4),-BGTA(1),-BGTA(2),-BGTA(3),PPR(1),PPR(2),
+ & PPR(3),PPR(4),PPRTO1,PPR1(1),PPR1(2),PPR1(3),
+ & PPR1(4))
+
+* direction cosines of projectile in target rest system
+ CX = PPR1(1)/PPRTO1
+ CY = PPR1(2)/PPRTO1
+ CZ = PPR1(3)/PPRTO1
+
+* sample inelastic interaction
+ IF (MODE.EQ.1) THEN
+ CALL DT_DHADRI(IDHPR,PPRTO1,PPR1(4),CX,CY,CZ,IDHTA)
+ IF (IRH.EQ.1) GOTO 9998
+* sample elastic interaction
+ ELSEIF (MODE.EQ.2) THEN
+ CALL DT_ELHAIN(IDHPR,PPRTO1,PPR1(4),CX,CY,CZ,IDHTA,IREJ1)
+ IF (IREJ1.NE.0) THEN
+ IF (IOULEV(1).GT.0) WRITE(LOUT,*) 'rejected 1 in HADRIN'
+ GOTO 9999
+ ENDIF
+ IF (IRH.EQ.1) GOTO 9998
+ ELSE
+ WRITE(LOUT,1001) MODE,INTHAD
+ 1001 FORMAT(1X,'HADRIN: warning! inconsistent interaction mode',
+ & I4,' (INTHAD =',I4,')')
+ GOTO 9999
+ ENDIF
+
+* transform final state particles back into Lab.
+ DO 4 I=1,IRH
+ NFSP = NFSP+1
+ PX = CXRH(I)*PLRH(I)
+ PY = CYRH(I)*PLRH(I)
+ PZ = CZRH(I)*PLRH(I)
+ CALL DT_DALTRA(BGTA(4),BGTA(1),BGTA(2),BGTA(3),
+ & PX,PY,PZ,ELRH(I),PTOFSP,PFSP(1,NFSP),
+ & PFSP(2,NFSP),PFSP(3,NFSP),PFSP(4,NFSP))
+ IDFSP(NFSP) = ITRH(I)
+ AMFSP2 = PFSP(4,NFSP)**2-PFSP(1,NFSP)**2-PFSP(2,NFSP)**2-
+ & PFSP(3,NFSP)**2
+ IF (AMFSP2.LT.-TINY3) THEN
+ WRITE(LOUT,1002) IDFSP(NFSP),PFSP(1,NFSP),PFSP(2,NFSP),
+ & PFSP(3,NFSP),PFSP(4,NFSP),AMFSP2
+ 1002 FORMAT(1X,'HADRIN: warning! final state particle (id = ',
+ & I2,') with negative mass^2',/,1X,5E12.4)
+ GOTO 9999
+ ELSE
+ PFSP(5,NFSP) = SQRT(ABS(AMFSP2))
+ IF (ABS(PFSP(5,NFSP)-AAM(IDFSP(NFSP))).GT.TINY1) THEN
+ WRITE(LOUT,1003) IDFSP(NFSP),AAM(IDFSP(NFSP)),
+ & PFSP(5,NFSP)
+ 1003 FORMAT(1X,'HADRIN: warning! final state particle',
+ & ' (id = ',I2,') with inconsistent mass',/,1X,
+ & 2E12.4)
+ KCORR = KCORR+1
+ IF (KCORR.GT.2) GOTO 9999
+ IMCORR(KCORR) = NFSP
+ ENDIF
+ ENDIF
+* dump final state particles for energy-momentum cons. check
+ IF (LEMCCK) CALL DT_EVTEMC(-PFSP(1,I),-PFSP(2,I),
+ & -PFSP(3,I),-PFSP(4,I),2,IDUM,IDUM)
+ 4 CONTINUE
+
+* transform momenta on mass shell in case of inconsistencies in
+* HADRIN
+ IF (KCORR.GT.0) THEN
+ IF (KCORR.EQ.2) THEN
+ I1 = IMCORR(1)
+ I2 = IMCORR(2)
+ ELSE
+ IF (IMCORR(1).EQ.1) THEN
+ I1 = 1
+ I2 = 2
+ ELSE
+ I1 = 1
+ I2 = IMCORR(1)
+ ENDIF
+ ENDIF
+ IF (LEMCCK) CALL DT_EVTEMC(PFSP(1,I1),PFSP(2,I1),
+ & PFSP(3,I1),PFSP(4,I1),2,IDUM,IDUM)
+ IF (LEMCCK) CALL DT_EVTEMC(PFSP(1,I2),PFSP(2,I2),
+ & PFSP(3,I2),PFSP(4,I2),2,IDUM,IDUM)
+ DO 5 K=1,4
+ P1IN(K) = PFSP(K,I1)
+ P2IN(K) = PFSP(K,I2)
+ 5 CONTINUE
+ XM1 = AAM(IDFSP(I1))
+ XM2 = AAM(IDFSP(I2))
+ CALL DT_MASHEL(P1IN,P2IN,XM1,XM2,P1OUT,P2OUT,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ WRITE(LOUT,'(1X,A)') 'HADRIN: inconsistent mass trsf.'
+C GOTO 9999
+ ENDIF
+ DO 6 K=1,4
+ PFSP(K,I1) = P1OUT(K)
+ PFSP(K,I2) = P2OUT(K)
+ 6 CONTINUE
+ PFSP(5,I1) = SQRT(PFSP(4,I1)**2-PFSP(1,I1)**2
+ & -PFSP(2,I1)**2-PFSP(3,I1)**2)
+ PFSP(5,I2) = SQRT(PFSP(4,I2)**2-PFSP(1,I2)**2
+ & -PFSP(2,I2)**2-PFSP(3,I2)**2)
+* dump final state particles for energy-momentum cons. check
+ IF (LEMCCK) CALL DT_EVTEMC(-PFSP(1,I1),-PFSP(2,I1),
+ & -PFSP(3,I1),-PFSP(4,I1),2,IDUM,IDUM)
+ IF (LEMCCK) CALL DT_EVTEMC(-PFSP(1,I2),-PFSP(2,I2),
+ & -PFSP(3,I2),-PFSP(4,I2),2,IDUM,IDUM)
+ ENDIF
+
+* check energy-momentum conservation
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,4,102,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+
+ RETURN
+
+ 9998 CONTINUE
+ IREJ = 2
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===hadcol=============================================================*
+*
+CDECK ID>, DT_HADCOL
+ SUBROUTINE DT_HADCOL(IDPROJ,PPN,IDXTAR,IREJ)
+
+************************************************************************
+* Interface to the HADRIN-routines for inelastic and elastic *
+* scattering. This subroutine samples hadron-nucleus interactions *
+* below DPM-threshold. *
+* IDPROJ BAMJET-index of projectile hadron *
+* PPN projectile momentum in target rest frame *
+* IDXTAR DTEVT1-index of target nucleon undergoing *
+* interaction with projectile hadron *
+* This subroutine replaces HADHAD. *
+* This version dated 5.5.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,TINY3=1.0D-3,ONE=1.0D0)
+
+ LOGICAL LSTART
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* interface HADRIN-DPM
+ COMMON /HNTHRE/ EHADTH,EHADLO,EHADHI,INTHAD,IDXTA
+* parameter for intranuclear cascade
+ LOGICAL LPAULI
+ COMMON /DTFOTI/ TAUFOR,KTAUGE,ITAUVE,INCMOD,LPAULI
+* final state after inc step
+ PARAMETER (MAXFSP=10)
+ COMMON /DTCAPA/ PFSP(5,MAXFSP),IDFSP(MAXFSP),NFSP
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ DIMENSION PPROJ(5),PNUC(5)
+
+ DATA LSTART /.TRUE./
+
+ IREJ = 0
+
+ NPOINT(1) = NHKK+1
+
+ TAUSAV = TAUFOR
+**sr 6/9/01 commented
+C TAUFOR = TAUFOR/2.0D0
+**
+ IF (LSTART) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,1X,'HADCOL: Scattering handled by HADRIN')
+ WRITE(LOUT,1001) TAUFOR
+ 1001 FORMAT(/,1X,'HADCOL: Formation zone parameter set to ',
+ & F5.1,' fm/c')
+ LSTART = .FALSE.
+ ENDIF
+
+ IDNUC = IDBAM(IDXTAR)
+ IDNUC1 = IDT_MCHAD(IDNUC)
+ IDPRO1 = IDT_MCHAD(IDPROJ)
+
+ IF ((INTHAD.EQ.1).OR.(INTHAD.EQ.2)) THEN
+ IPROC = INTHAD
+ ELSE
+**
+C CALL DT_SIHNIN(IDPRO1,IDNUC1,PPN,SIGIN)
+C CALL DT_SIHNEL(IDPRO1,IDNUC1,PPN,SIGEL)
+ DUMZER = ZERO
+ CALL DT_XSHN(IDPRO1,IDNUC1,PPN,DUMZER,SIGTOT,SIGEL)
+ SIGIN = SIGTOT-SIGEL
+C SIGTOT = SIGIN+SIGEL
+**
+ IPROC = 1
+ IF (DT_RNDM(SIGIN).LT.SIGEL/SIGTOT) IPROC = 2
+ ENDIF
+
+ PPROJ(1) = ZERO
+ PPROJ(2) = ZERO
+ PPROJ(3) = PPN
+ PPROJ(5) = AAM(IDPROJ)
+ PPROJ(4) = SQRT(PPROJ(5)**2+PPROJ(3)**2)
+ DO 1 K=1,5
+ PNUC(K) = PHKK(K,IDXTAR)
+ 1 CONTINUE
+
+ ILOOP = 0
+ 2 CONTINUE
+ ILOOP = ILOOP+1
+ IF (ILOOP.GT.100) GOTO 9999
+
+ CALL DT_HADRIN(IDPROJ,PPROJ,IDNUC,PNUC,IPROC,IREJ1)
+ IF (IREJ1.EQ.1) GOTO 9999
+
+ IF (IREJ1.GT.1) THEN
+* no interaction possible
+* require Pauli blocking
+ IF ((IDPROJ.EQ.1).AND.(PPROJ(4).LE.PFERMP(2)+PPROJ(5))) GOTO 2
+ IF ((IDPROJ.EQ.8).AND.(PPROJ(4).LE.PFERMN(2)+PPROJ(5))) GOTO 2
+ IF ((IIBAR(IDPROJ).NE.1).AND.
+ & (PPROJ(4).LE.EPOT(2,IDPROJ)+PPROJ(5))) GOTO 2
+* store incoming particle as final state particle
+ CALL DT_LTNUC(PPROJ(3),PPROJ(4),PCMS,ECMS,3)
+ CALL DT_EVTPUT(1,IDPROJ,1,0,PPROJ(1),PPROJ(2),PCMS,ECMS,0,0,0)
+ NPOINT(4) = NHKK
+ ELSE
+* require Pauli blocking for final state nucleons
+ DO 4 I=1,NFSP
+ IF ((IDFSP(I).EQ.1).AND.
+ & (PFSP(4,I).LE.PFERMP(2)+AAM(IDFSP(I)))) GOTO 2
+ IF ((IDFSP(I).EQ.8).AND.
+ & (PFSP(4,I).LE.PFERMN(2)+AAM(IDFSP(I)))) GOTO 2
+ IF ((IIBAR(IDFSP(I)).NE.1).AND.
+ & (PFSP(4,I).LE.EPOT(2,IDFSP(I))+AAM(IDFSP(I))))GOTO 2
+ 4 CONTINUE
+* store final state particles
+ DO 5 I=1,NFSP
+ IST = 1
+ IF ((IIBAR(IDFSP(I)).EQ.1).AND.
+ & (PFSP(4,I).LE.EPOT(2,IDFSP(I))+AAM(IDFSP(I)))) IST = 16
+ IDHAD = IDT_IPDGHA(IDFSP(I))
+ CALL DT_LTNUC(PFSP(3,I),PFSP(4,I),PCMS,ECMS,3)
+ CALL DT_EVTPUT(IST,IDHAD,1,IDXTAR,PFSP(1,I),PFSP(2,I),
+ & PCMS,ECMS,0,0,0)
+ IF (I.EQ.1) NPOINT(4) = NHKK
+ VHKK(1,NHKK) = 0.5D0*(VHKK(1,1)+VHKK(1,IDXTAR))
+ VHKK(2,NHKK) = 0.5D0*(VHKK(2,1)+VHKK(2,IDXTAR))
+ VHKK(3,NHKK) = VHKK(3,IDXTAR)
+ VHKK(4,NHKK) = VHKK(4,IDXTAR)
+ WHKK(1,NHKK) = 0.5D0*(WHKK(1,1)+WHKK(1,IDXTAR))
+ WHKK(2,NHKK) = 0.5D0*(WHKK(2,1)+WHKK(2,IDXTAR))
+ WHKK(3,NHKK) = WHKK(3,1)
+ WHKK(4,NHKK) = WHKK(4,1)
+ 5 CONTINUE
+ ENDIF
+ TAUFOR = TAUSAV
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ TAUFOR = TAUSAV
+ RETURN
+ END
+*
+*===getemu=============================================================*
+*
+CDECK ID>, DT_GETEMU
+ SUBROUTINE DT_GETEMU(IT,ITZ,KKMAT,MODE)
+
+************************************************************************
+* Sampling of emulsion component to be considered as target-nucleus. *
+* This version dated 6.5.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY3=1.0D-3,TINY10=1.0D-10)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* Glauber formalism: flags and parameters for statistics
+ LOGICAL LPROD
+ CHARACTER*8 CGLB
+ COMMON /DTGLGP/ JSTATB,JBINSB,CGLB,IOGLB,LPROD
+
+ IF (MODE.EQ.0) THEN
+ SUMFRA = ZERO
+ RR = DT_RNDM(SUMFRA)
+ IT = 0
+ ITZ = 0
+ DO 1 ICOMP=1,NCOMPO
+ SUMFRA = SUMFRA+EMUFRA(ICOMP)
+ IF (SUMFRA.GT.RR) THEN
+ IT = IEMUMA(ICOMP)
+ ITZ = IEMUCH(ICOMP)
+ KKMAT = ICOMP
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+ 2 CONTINUE
+ IF (IT.LE.0) THEN
+ WRITE(LOUT,'(1X,A,E12.3)')
+ & 'Warning! norm. failure within emulsion fractions',
+ & SUMFRA
+ STOP
+ ENDIF
+ ELSEIF (MODE.EQ.1) THEN
+ NDIFF = 10000
+ DO 3 I=1,NCOMPO
+ IDIFF = ABS(IT-IEMUMA(I))
+ IF (IDIFF.LT.NDIFF) THEN
+ KKMAT = I
+ NDIFF = IDIFF
+ ENDIF
+ 3 CONTINUE
+ ELSE
+ STOP 'DT_GETEMU'
+ ENDIF
+
+* bypass for variable projectile/target/energy runs: the correct
+* Glauber data will be always loaded on kkmat=1
+ IF (IOGLB.EQ.100) THEN
+ KKMAT = 1
+ ENDIF
+
+ RETURN
+ END
+*
+*===nclpot=============================================================*
+*
+CDECK ID>, DT_NCLPOT
+ SUBROUTINE DT_NCLPOT(IPZ,IP,ITZ,IT,AFERP,AFERT,MODE)
+
+************************************************************************
+* Calculation of Coulomb and nuclear potential for a given configurat. *
+* IPZ, IP charge/mass number of proj. *
+* ITZ, IT charge/mass number of targ. *
+* AFERP,AFERT factors modifying proj./target pot. *
+* if =0, FERMOD is used *
+* MODE = 0 calculation of binding energy *
+* = 1 pre-calculated binding energy is used *
+* This version dated 16.11.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY3=1.0D-3,TINY2=1.0D-2,
+ & TINY10=1.0D-10)
+
+ LOGICAL LSTART
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+
+ DIMENSION IDXPOT(14)
+* ap an lam alam sig- sig+ sig0 tet0 tet- asig-
+ DATA IDXPOT / 2, 9, 17, 18, 20, 21, 22, 97, 98, 99,
+* asig0 asig+ atet0 atet+
+ & 100, 101, 102, 103/
+
+ DATA AN /0.4D0/
+ DATA LSTART /.TRUE./
+
+ IF (MODE.EQ.0) THEN
+ EBINDP(1) = ZERO
+ EBINDN(1) = ZERO
+ EBINDP(2) = ZERO
+ EBINDN(2) = ZERO
+ ENDIF
+ AIP = DBLE(IP)
+ AIPZ = DBLE(IPZ)
+ AIT = DBLE(IT)
+ AITZ = DBLE(ITZ)
+
+ FERMIP = AFERP
+ IF (AFERP.LE.ZERO) FERMIP = FERMOD
+ FERMIT = AFERT
+ IF (AFERT.LE.ZERO) FERMIT = FERMOD
+
+* Fermi momenta and binding energy for projectile
+ IF ((IP.GT.1).AND.LFERMI) THEN
+ IF (MODE.EQ.0) THEN
+C EBINDP(1) = DT_EBIND(IP,IPZ)-DT_EBIND(IP-1,IPZ-1)
+C EBINDN(1) = DT_EBIND(IP,IPZ)-DT_EBIND(IP-1,IPZ)
+ BIP = AIP -ONE
+ BIPZ = AIPZ-ONE
+
+ EBINDP(1) = 1.0D-3*ABS(ENERGY(AIP,AIPZ)
+ & -ENERGY(BIP,BIPZ))
+
+ IF (AIP.LE.AIPZ) THEN
+ EBINDN(1) = EBINDP(1)
+ WRITE(LOUT,*) ' DT_NCLPOT: AIP.LE.AIPZ (',AIP,AIPZ,')'
+ ELSE
+
+ EBINDN(1) = 1.0D-3*ABS(ENERGY(AIP,AIPZ)
+ & -ENERGY(BIP,AIPZ))
+
+ ENDIF
+ ENDIF
+ PFERMP(1) = FERMIP*AN*(AIPZ/AIP)**0.333333D0
+ PFERMN(1) = FERMIP*AN*((AIP-AIPZ)/AIP)**0.33333D0
+ ELSE
+ PFERMP(1) = ZERO
+ PFERMN(1) = ZERO
+ ENDIF
+* effective nuclear potential for projectile
+C EPOT(1,1) = PFERMP(1)**2/(2.0D0*AAM(1)) + EBINDP(1)
+C EPOT(1,8) = PFERMN(1)**2/(2.0D0*AAM(8)) + EBINDN(1)
+ EPOT(1,1) = SQRT(PFERMP(1)**2+AAM(1)**2) -AAM(1) + EBINDP(1)
+ EPOT(1,8) = SQRT(PFERMN(1)**2+AAM(8)**2) -AAM(8) + EBINDN(1)
+
+* Fermi momenta and binding energy for target
+ IF ((IT.GT.1).AND.LFERMI) THEN
+ IF (MODE.EQ.0) THEN
+C EBINDP(2) = DT_EBIND(IT,ITZ)-DT_EBIND(IT-1,ITZ-1)
+C EBINDN(2) = DT_EBIND(IT,ITZ)-DT_EBIND(IT-1,ITZ)
+ BIT = AIT -ONE
+ BITZ = AITZ-ONE
+
+ EBINDP(2) = 1.0D-3*ABS(ENERGY(AIT,AITZ)
+ & -ENERGY(BIT,BITZ))
+
+ IF (AIT.LE.AITZ) THEN
+ EBINDN(2) = EBINDP(2)
+ WRITE(LOUT,*) ' DT_NCLPOT: AIT.LE.AIPT (',AIT,AIPT,')'
+ ELSE
+
+ EBINDN(2) = 1.0D-3*ABS(ENERGY(AIT,AITZ)
+ & -ENERGY(BIT,AITZ))
+
+ ENDIF
+ ENDIF
+ PFERMP(2) = FERMIT*AN*(AITZ/AIT)**0.333333D0
+ PFERMN(2) = FERMIT*AN*((AIT-AITZ)/AIT)**0.33333D0
+ ELSE
+ PFERMP(2) = ZERO
+ PFERMN(2) = ZERO
+ ENDIF
+* effective nuclear potential for target
+C EPOT(2,1) = PFERMP(2)**2/(2.0D0*AAM(1)) + EBINDP(2)
+C EPOT(2,8) = PFERMN(2)**2/(2.0D0*AAM(8)) + EBINDN(2)
+ EPOT(2,1) = SQRT(PFERMP(2)**2+AAM(1)**2) -AAM(1) + EBINDP(2)
+ EPOT(2,8) = SQRT(PFERMN(2)**2+AAM(8)**2) -AAM(8) + EBINDN(2)
+
+ DO 2 I=1,14
+ EPOT(1,IDXPOT(I)) = EPOT(1,8)
+ EPOT(2,IDXPOT(I)) = EPOT(2,8)
+ 2 CONTINUE
+
+* Coulomb energy
+ ETACOU(1) = ZERO
+ ETACOU(2) = ZERO
+ IF (ICOUL.EQ.1) THEN
+ IF (IP.GT.1)
+ & ETACOU(1) = 0.001116D0*AIPZ/(1.0D0+AIP**0.333D0)
+ IF (IT.GT.1)
+ & ETACOU(2) = 0.001116D0*AITZ/(1.0D0+AIT**0.333D0)
+ ENDIF
+
+ IF (LSTART) THEN
+ WRITE(LOUT,1000) IP,IPZ,IT,ITZ,EBINDP,EBINDN,
+ & EPOT(1,1)-EBINDP(1),EPOT(2,1)-EBINDP(2),
+ & EPOT(1,8)-EBINDN(1),EPOT(2,8)-EBINDN(2),
+ & FERMOD,ETACOU
+ 1000 FORMAT(/,/,1X,'NCLPOT: quantities for inclusion of nuclear'
+ & ,' effects',/,12X,'---------------------------',
+ & '----------------',/,/,38X,'projectile',
+ & ' target',/,/,1X,'Mass number / charge',
+ & 17X,I3,' /',I3,6X,I3,' /',I3,/,1X,'Binding energy -',
+ & ' proton (GeV) ',2E14.4,/,17X,'- neutron (GeV)'
+ & ,1X,2E14.4,/,1X,'Fermi-potential - proton (GeV)',
+ & 1X,2E14.4,/,17X,'- neutron (GeV) ',2E14.4,/,/,
+ & 1X,'Scale factor for Fermi-momentum ',F4.2,/,
+ & /,1X,'Coulomb-energy ',2(E14.4,' GeV '),/,/)
+ LSTART = .FALSE.
+ ENDIF
+
+ RETURN
+ END
+*
+*===resncl=============================================================*
+*
+CDECK ID>, DT_RESNCL
+ SUBROUTINE DT_RESNCL(EPN,NLOOP,MODE)
+
+************************************************************************
+* Treatment of residual nuclei and nuclear effects. *
+* MODE = 1 initializations *
+* = 2 treatment of final state *
+* This version dated 16.11.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.D0,ONE=1.D0,TWO=2.D0,THREE=3.D0,TINY3=1.0D-3,
+ & TINY2=1.0D-2,TINY1=1.0D-1,TINY4=1.0D-4,TINY10=1.0D-10,
+ & ONETHI=ONE/THREE)
+ PARAMETER (AMUAMU = 0.93149432D0,
+ & FM2MM = 1.0D-12,
+ & RNUCLE = 1.12D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* treatment of residual nuclei: wounded nucleons
+ COMMON /DTWOUN/ NPW,NPW0,NPCW,NTW,NTW0,NTCW,IPW(210),ITW(210)
+* treatment of residual nuclei: 4-momenta
+ LOGICAL LRCLPR,LRCLTA
+ COMMON /DTRNU1/ PINIPR(5),PINITA(5),PRCLPR(5),PRCLTA(5),
+ & TRCLPR(5),TRCLTA(5),LRCLPR,LRCLTA
+
+ DIMENSION PFSP(4),PSEC(4),PSEC0(4)
+ DIMENSION PMOMB(5000),IDXB(5000),PMOMM(10000),IDXM(10000),
+ & IDXCOR(15000),IDXOTH(NMXHKK)
+
+ GOTO (1,2) MODE
+
+*------- initializations
+ 1 CONTINUE
+
+* initialize arrays for residual nuclei
+ DO 10 K=1,5
+ IF (K.LE.4) THEN
+ PFSP(K) = ZERO
+ ENDIF
+ PINIPR(K) = ZERO
+ PINITA(K) = ZERO
+ PRCLPR(K) = ZERO
+ PRCLTA(K) = ZERO
+ TRCLPR(K) = ZERO
+ TRCLTA(K) = ZERO
+ 10 CONTINUE
+ SCPOT = ONE
+ NLOOP = 0
+
+* correction of projectile 4-momentum for effective target pot.
+* and Coulomb-energy (in case of hadron-nucleus interaction only)
+ IF ((IP.EQ.1).AND.(IT.GT.1).AND.LFERMI) THEN
+ EPNI = EPN
+* Coulomb-energy:
+* positively charged hadron - check energy for Coloumb pot.
+ IF (IICH(IJPROJ).EQ.1) THEN
+ THRESH = ETACOU(2)+AAM(IJPROJ)
+ IF (EPNI.LE.THRESH) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,1X,'KKINC: WARNING! projectile energy',
+ & ' below Coulomb threshold - event rejected',/)
+ ISTHKK(1) = 1
+ RETURN
+ ENDIF
+* negatively charged hadron - increase energy by Coulomb energy
+ ELSEIF (IICH(IJPROJ).EQ.-1) THEN
+ EPNI = EPNI+ETACOU(2)
+ ENDIF
+ IF ((IJPROJ.EQ.1).OR.(IJPROJ.EQ.8)) THEN
+* Effective target potential
+*sr 6.6. binding energy only (to avoid negative exc. energies)
+C EPNI = EPNI+EPOT(2,IJPROJ)
+ EBIPOT = EBINDP(2)
+ IF ((IJPROJ.NE.1).AND.(ABS(EPOT(2,IJPROJ)).GT.5.0D-3))
+ & EBIPOT = EBINDN(2)
+ EPNI = EPNI+ABS(EBIPOT)
+* re-initialization of DTLTRA
+ DUM1 = ZERO
+ DUM2 = ZERO
+ CALL DT_LTINI(IJPROJ,IJTARG,EPNI,DUM1,DUM2,0)
+ ENDIF
+ ENDIF
+
+* projectile in n-n cms
+ IF ((IP.LE.1).AND.(IT.GT.1)) THEN
+ PMASS1 = AAM(IJPROJ)
+C* VDM assumption
+C IF (IJPROJ.EQ.7) PMASS1 = AAM(33)
+ IF (IJPROJ.EQ.7) PMASS1 = AAM(IJPROJ)-SQRT(VIRT)
+ PMASS2 = AAM(1)
+ PM1 = SIGN(PMASS1**2,PMASS1)
+ PM2 = SIGN(PMASS2**2,PMASS2)
+ PINIPR(4) = (UMO**2-PM2+PM1)/(TWO*UMO)
+ PINIPR(5) = PMASS1
+ IF (PMASS1.GT.ZERO) THEN
+ PINIPR(3) = SQRT((PINIPR(4)-PINIPR(5))
+ & *(PINIPR(4)+PINIPR(5)))
+ ELSE
+ PINIPR(3) = SQRT(PINIPR(4)**2-PM1)
+ ENDIF
+ AIT = DBLE(IT)
+ AITZ = DBLE(ITZ)
+
+ PINITA(5) = AIT*AMUAMU+1.0D-3*ENERGY(AIT,AITZ)
+
+ CALL DT_LTNUC(ZERO,PINITA(5),PINITA(3),PINITA(4),3)
+ ELSEIF ((IP.GT.1).AND.(IT.LE.1)) THEN
+ PMASS1 = AAM(1)
+ PMASS2 = AAM(IJTARG)
+ PM1 = SIGN(PMASS1**2,PMASS1)
+ PM2 = SIGN(PMASS2**2,PMASS2)
+ PINITA(4) = (UMO**2-PM1+PM2)/(TWO*UMO)
+ PINITA(5) = PMASS2
+ PINITA(3) = -SQRT((PINITA(4)-PINITA(5))
+ & *(PINITA(4)+PINITA(5)))
+ AIP = DBLE(IP)
+ AIPZ = DBLE(IPZ)
+
+ PINIPR(5) = AIP*AMUAMU+1.0D-3*ENERGY(AIP,AIPZ)
+
+ CALL DT_LTNUC(ZERO,PINIPR(5),PINIPR(3),PINIPR(4),2)
+ ELSEIF ((IP.GT.1).AND.(IT.GT.1)) THEN
+ AIP = DBLE(IP)
+ AIPZ = DBLE(IPZ)
+
+ PINIPR(5) = AIP*AMUAMU+1.0D-3*ENERGY(AIP,AIPZ)
+
+ CALL DT_LTNUC(ZERO,PINIPR(5),PINIPR(3),PINIPR(4),2)
+ AIT = DBLE(IT)
+ AITZ = DBLE(ITZ)
+
+ PINITA(5) = AIT*AMUAMU+1.0D-3*ENERGY(AIT,AITZ)
+
+ CALL DT_LTNUC(ZERO,PINITA(5),PINITA(3),PINITA(4),3)
+ ENDIF
+
+ RETURN
+
+*------- treatment of final state
+ 2 CONTINUE
+
+ NLOOP = NLOOP+1
+ IF (NLOOP.GT.1) SCPOT = 0.10D0
+C WRITE(LOUT,*) 'event ',NEVHKK,NLOOP,SCPOT
+
+ JPW = NPW
+ JPCW = NPCW
+ JTW = NTW
+ JTCW = NTCW
+ DO 40 K=1,4
+ PFSP(K) = ZERO
+ 40 CONTINUE
+
+ NOB = 0
+ NOM = 0
+ DO 900 I=NPOINT(4),NHKK
+ IDXOTH(I) = -1
+ IF (ISTHKK(I).EQ.1) THEN
+ IF (IDBAM(I).EQ.7) GOTO 900
+ IPOT = 0
+ IOTHER = 0
+* particle moving into forward direction
+ IF (PHKK(3,I).GE.ZERO) THEN
+* most likely to be effected by projectile potential
+ IPOT = 1
+* there is no projectile nucleus, try target
+ IF ((IP.LE.1).OR.((IP-NPW).LE.1)) THEN
+ IPOT = 2
+ IF (IP.GT.1) IOTHER = 1
+* there is no target nucleus --> skip
+ IF ((IT.LE.1).OR.((IT-NTW).LE.1)) GOTO 900
+ ENDIF
+* particle moving into backward direction
+ ELSE
+* most likely to be effected by target potential
+ IPOT = 2
+* there is no target nucleus, try projectile
+ IF ((IT.LE.1).OR.((IT-NTW).LE.1)) THEN
+ IPOT = 1
+ IF (IT.GT.1) IOTHER = 1
+* there is no projectile nucleus --> skip
+ IF ((IP.LE.1).OR.((IP-NPW).LE.1)) GOTO 900
+ ENDIF
+ ENDIF
+ IFLG = -IPOT
+* nobam=3: particle is in overlap-region or neither inside proj. nor target
+* =1: particle is not in overlap-region AND is inside target (2)
+* =2: particle is not in overlap-region AND is inside projectile (1)
+* flag particles which are inside the nucleus ipot but not in its
+* overlap region
+ IF ((NOBAM(I).NE.IPOT).AND.(NOBAM(I).LT.3)) IFLG = IPOT
+* baryons: keep all nucleons and all others where flag is set
+ IF (IIBAR(IDBAM(I)).NE.0) THEN
+ IF ((IDBAM(I).EQ.1).OR.(IDBAM(I).EQ.8).OR.(IFLG.GT.0))
+ & THEN
+ NOB = NOB+1
+ PMOMB(NOB) = PHKK(3,I)
+ IDXB(NOB) = SIGN(1000000*IABS(IFLG)
+ & +100000*IOTHER+I,IFLG)
+ ENDIF
+* mesons: keep only those mesons where flag is set
+ ELSE
+ IF (IFLG.GT.0) THEN
+ NOM = NOM+1
+ PMOMM(NOM) = PHKK(3,I)
+ IDXM(NOM) = 1000000*IFLG+100000*IOTHER+I
+ ENDIF
+ ENDIF
+ ENDIF
+ 900 CONTINUE
+*
+* sort particles in the arrays according to increasing long. momentum
+ CALL DT_SORT1(PMOMB,IDXB,NOB,1,NOB,1)
+ CALL DT_SORT1(PMOMM,IDXM,NOM,1,NOM,1)
+*
+* shuffle indices into one and the same array according to the later
+* sequence of correction
+ NCOR = 0
+ IF (IT.GT.1) THEN
+ DO 910 I=1,NOB
+ IF (PMOMB(I).GT.ZERO) GOTO 911
+ NCOR = NCOR+1
+ IDXCOR(NCOR) = IDXB(I)
+ 910 CONTINUE
+ 911 CONTINUE
+ IF (IP.GT.1) THEN
+ DO 912 J=1,NOB
+ I = NOB+1-J
+ IF (PMOMB(I).LT.ZERO) GOTO 913
+ NCOR = NCOR+1
+ IDXCOR(NCOR) = IDXB(I)
+ 912 CONTINUE
+ 913 CONTINUE
+ ELSE
+ DO 914 I=1,NOB
+ IF (PMOMB(I).GT.ZERO) THEN
+ NCOR = NCOR+1
+ IDXCOR(NCOR) = IDXB(I)
+ ENDIF
+ 914 CONTINUE
+ ENDIF
+ ELSE
+ DO 915 J=1,NOB
+ I = NOB+1-J
+ NCOR = NCOR+1
+ IDXCOR(NCOR) = IDXB(I)
+ 915 CONTINUE
+ ENDIF
+ DO 925 I=1,NOM
+ IF (PMOMM(I).GT.ZERO) GOTO 926
+ NCOR = NCOR+1
+ IDXCOR(NCOR) = IDXM(I)
+ 925 CONTINUE
+ 926 CONTINUE
+ DO 927 J=1,NOM
+ I = NOM+1-J
+ IF (PMOMM(I).LT.ZERO) GOTO 928
+ NCOR = NCOR+1
+ IDXCOR(NCOR) = IDXM(I)
+ 927 CONTINUE
+ 928 CONTINUE
+*
+C IF (NEVHKK.EQ.484) THEN
+C WRITE(LOUT,9000) JPCW,JPW-JPCW,JTCW,JTW-JTCW
+C 9000 FORMAT(1X,'wounded nucleons (proj.-p,n targ.-p,n)',/,4I10)
+C WRITE(LOUT,9001) NOB,NOM,NCOR
+C 9001 FORMAT(1X,'produced particles (baryons,mesons,all)',3I10)
+C WRITE(LOUT,'(/,A)') ' baryons '
+C DO 950 I=1,NOB
+CC J = IABS(IDXB(I))
+CC INDEX = J-IABS(J/1000000)*1000000
+C IPOT = IABS(IDXB(I))/1000000
+C IOTHER = IABS(IDXB(I))/100000-IPOT*10
+C INDEX = IABS(IDXB(I))-IPOT*1000000-IOTHER*100000
+C WRITE(LOUT,9002) I,INDEX,IDXB(I),IDBAM(INDEX),PMOMB(I)
+C 950 CONTINUE
+C WRITE(LOUT,'(/,A)') ' mesons '
+C DO 951 I=1,NOM
+CC INDEX = IDXM(I)-IABS(IDXM(I)/1000000)*1000000
+C IPOT = IABS(IDXM(I))/1000000
+C IOTHER = IABS(IDXM(I))/100000-IPOT*10
+C INDEX = IABS(IDXM(I))-IPOT*1000000-IOTHER*100000
+C WRITE(LOUT,9002) I,INDEX,IDXM(I),IDBAM(INDEX),PMOMM(I)
+C 951 CONTINUE
+C 9002 FORMAT(1X,4I14,E14.5)
+C WRITE(LOUT,'(/,A)') ' all '
+C DO 952 I=1,NCOR
+CC J = IABS(IDXCOR(I))
+CC INDEX = J-IABS(J/1000000)*1000000
+CC IPOT = IABS(IDXCOR(I))/1000000
+C IOTHER = IABS(IDXCOR(I))/100000-IPOT*10
+C INDEX = IABS(IDXCOR(I))-IPOT*1000000-IOTHER*100000
+C WRITE(LOUT,9003) I,INDEX,IDXCOR(I),IDBAM(INDEX)
+C 952 CONTINUE
+C 9003 FORMAT(1X,4I14)
+C ENDIF
+*
+ DO 20 ICOR=1,NCOR
+ IPOT = IABS(IDXCOR(ICOR))/1000000
+ IOTHER = IABS(IDXCOR(ICOR))/100000-IPOT*10
+ I = IABS(IDXCOR(ICOR))-IPOT*1000000-IOTHER*100000
+ IDXOTH(I) = 1
+
+ IDSEC = IDBAM(I)
+
+* reduction of particle momentum by corresponding nuclear potential
+* (this applies only if Fermi-momenta are requested)
+
+ IF (LFERMI) THEN
+
+* Lorentz-transformation into the rest system of the selected nucleus
+ IMODE = -IPOT-1
+ CALL DT_LTRANS(PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I),
+ & PSEC(1),PSEC(2),PSEC(3),PSEC(4),IDSEC,IMODE)
+ PSECO = SQRT(PSEC(1)**2+PSEC(2)**2+PSEC(3)**2)
+ AMSEC = SQRT(ABS((PSEC(4)-PSECO)*(PSEC(4)+PSECO)))
+ JPMOD = 0
+
+ CHKLEV = TINY3
+ IF ((EPROJ.GE.1.0D4).AND.(IDSEC.EQ.7)) CHKLEV = TINY1
+ IF (EPROJ.GE.2.0D6) CHKLEV = 1.0D0
+ IF (ABS(AMSEC-AAM(IDSEC)).GT.CHKLEV) THEN
+ IF (IOULEV(3).GT.0)
+ & WRITE(LOUT,2000) I,NEVHKK,IDSEC,AMSEC,AAM(IDSEC)
+ 2000 FORMAT(1X,'RESNCL: inconsistent mass of particle',
+ & ' at entry ',I5,' (evt.',I8,')',/,' IDSEC: ',
+ & I4,' AMSEC: ',E12.3,' AAM(IDSEC): ',E12.3,/)
+ GOTO 23
+ ENDIF
+
+ DO 21 K=1,4
+ PSEC0(K) = PSEC(K)
+ 21 CONTINUE
+
+* the correction for nuclear potential effects is applied to as many
+* p/n as many nucleons were wounded; the momenta of other final state
+* particles are corrected only if they materialize inside the corresp.
+* nucleus (here: NOBAM = 1 part. outside proj., = 2 part. outside targ
+* = 3 part. outside proj. and targ., >=10 in overlapping region)
+ IF ((IDSEC.EQ.1).OR.(IDSEC.EQ.8)) THEN
+ IF (IPOT.EQ.1) THEN
+ IF ((JPW.GT.0).AND.(IOTHER.EQ.0)) THEN
+* this is most likely a wounded nucleon
+**test
+C RDIST = SQRT((VHKK(1,IPW(JPW))/FM2MM)**2
+C & +(VHKK(2,IPW(JPW))/FM2MM)**2
+C & +(VHKK(3,IPW(JPW))/FM2MM)**2)
+C RAD = RNUCLE*DBLE(IP)**ONETHI
+C FDEN = 1.4D0*DT_DENSIT(IP,RDIST,RAD)
+C PSEC(4) = PSEC(4)-SCPOT*FDEN*EPOT(IPOT,IDSEC)
+**
+ PSEC(4) = PSEC(4)-SCPOT*EPOT(IPOT,IDSEC)
+ JPW = JPW-1
+ JPMOD = 1
+ ELSE
+* correct only if part. was materialized inside nucleus
+* and if it is ouside the overlapping region
+ IF ((NOBAM(I).NE.1).AND.(NOBAM(I).LT.3)) THEN
+ PSEC(4) = PSEC(4)-SCPOT*EPOT(IPOT,IDSEC)
+ JPMOD = 1
+ ENDIF
+ ENDIF
+ ELSEIF (IPOT.EQ.2) THEN
+ IF ((JTW.GT.0).AND.(IOTHER.EQ.0)) THEN
+* this is most likely a wounded nucleon
+**test
+C RDIST = SQRT((VHKK(1,ITW(JTW))/FM2MM)**2
+C & +(VHKK(2,ITW(JTW))/FM2MM)**2
+C & +(VHKK(3,ITW(JTW))/FM2MM)**2)
+C RAD = RNUCLE*DBLE(IT)**ONETHI
+C FDEN = 1.4D0*DT_DENSIT(IT,RDIST,RAD)
+C PSEC(4) = PSEC(4)-SCPOT*FDEN*EPOT(IPOT,IDSEC)
+**
+ PSEC(4) = PSEC(4)-SCPOT*EPOT(IPOT,IDSEC)
+ JTW = JTW-1
+ JPMOD = 1
+ ELSE
+* correct only if part. was materialized inside nucleus
+ IF ((NOBAM(I).NE.2).AND.(NOBAM(I).LT.3)) THEN
+ PSEC(4) = PSEC(4)-SCPOT*EPOT(IPOT,IDSEC)
+ JPMOD = 1
+ ENDIF
+ ENDIF
+ ENDIF
+ ELSE
+ IF ((NOBAM(I).NE.IPOT).AND.(NOBAM(I).LT.3)) THEN
+ PSEC(4) = PSEC(4)-SCPOT*EPOT(IPOT,IDSEC)
+ JPMOD = 1
+ ENDIF
+ ENDIF
+
+ IF (NLOOP.EQ.1) THEN
+* Coulomb energy correction:
+* the treatment of Coulomb potential correction is similar to the
+* one for nuclear potential
+ IF (IDSEC.EQ.1) THEN
+ IF ((IPOT.EQ.1).AND.(JPCW.GT.0)) THEN
+ JPCW = JPCW-1
+ ELSEIF ((IPOT.EQ.2).AND.(JTCW.GT.0)) THEN
+ JTCW = JTCW-1
+ ELSE
+ IF ((NOBAM(I).EQ.IPOT).OR.(NOBAM(I).EQ.3)) GOTO 25
+ ENDIF
+ ELSE
+ IF ((NOBAM(I).EQ.IPOT).OR.(NOBAM(I).EQ.3)) GOTO 25
+ ENDIF
+ IF (IICH(IDSEC).EQ.1) THEN
+* pos. particles: check if they are able to escape Coulomb potential
+ IF (PSEC(4).LT.AMSEC+ETACOU(IPOT)) THEN
+ ISTHKK(I) = 14+IPOT
+ IF (ISTHKK(I).EQ.15) THEN
+ DO 26 K=1,4
+ PHKK(K,I) = PSEC0(K)
+ TRCLPR(K) = TRCLPR(K)+PSEC0(K)
+ 26 CONTINUE
+ IF ((IDSEC.EQ.1).OR.(IDSEC.EQ.8)) NPW = NPW-1
+ IF (IDSEC.EQ.1) NPCW = NPCW-1
+ ELSEIF (ISTHKK(I).EQ.16) THEN
+ DO 27 K=1,4
+ PHKK(K,I) = PSEC0(K)
+ TRCLTA(K) = TRCLTA(K)+PSEC0(K)
+ 27 CONTINUE
+ IF ((IDSEC.EQ.1).OR.(IDSEC.EQ.8)) NTW = NTW-1
+ IF (IDSEC.EQ.1) NTCW = NTCW-1
+ ENDIF
+ GOTO 20
+ ENDIF
+ ELSEIF (IICH(IDSEC).EQ.-1) THEN
+* neg. particles: decrease energy by Coulomb-potential
+ PSEC(4) = PSEC(4)-ETACOU(IPOT)
+ JPMOD = 1
+ ENDIF
+ ENDIF
+
+ 25 CONTINUE
+
+ IF (PSEC(4).LT.AMSEC) THEN
+ IF (IOULEV(6).GT.0)
+ & WRITE(LOUT,2001) I,IDSEC,PSEC(4),AMSEC
+ 2001 FORMAT(1X,'KKINC: particle at DTEVT1-pos. ',I5,
+ & ' is not allowed to escape nucleus',/,
+ & 8X,'id : ',I3,' reduced energy: ',E15.4,
+ & ' mass: ',E12.3)
+ ISTHKK(I) = 14+IPOT
+ IF (ISTHKK(I).EQ.15) THEN
+ DO 28 K=1,4
+ PHKK(K,I) = PSEC0(K)
+ TRCLPR(K) = TRCLPR(K)+PSEC0(K)
+ 28 CONTINUE
+ IF ((IDSEC.EQ.1).OR.(IDSEC.EQ.8)) NPW = NPW-1
+ IF (IDSEC.EQ.1) NPCW = NPCW-1
+ ELSEIF (ISTHKK(I).EQ.16) THEN
+ DO 29 K=1,4
+ PHKK(K,I) = PSEC0(K)
+ TRCLTA(K) = TRCLTA(K)+PSEC0(K)
+ 29 CONTINUE
+ IF ((IDSEC.EQ.1).OR.(IDSEC.EQ.8)) NTW = NTW-1
+ IF (IDSEC.EQ.1) NTCW = NTCW-1
+ ENDIF
+ GOTO 20
+ ENDIF
+
+ IF (JPMOD.EQ.1) THEN
+ PSECN = SQRT( (PSEC(4)-AMSEC)*(PSEC(4)+AMSEC) )
+* 4-momentum after correction for nuclear potential
+ DO 22 K=1,3
+ PSEC(K) = PSEC(K)*PSECN/PSECO
+ 22 CONTINUE
+
+* store recoil momentum from particles escaping the nuclear potentials
+ DO 30 K=1,4
+ IF (IPOT.EQ.1) THEN
+ TRCLPR(K) = TRCLPR(K)+PSEC0(K)-PSEC(K)
+ ELSEIF (IPOT.EQ.2) THEN
+ TRCLTA(K) = TRCLTA(K)+PSEC0(K)-PSEC(K)
+ ENDIF
+ 30 CONTINUE
+
+* transform momentum back into n-n cms
+ IMODE = IPOT+1
+ CALL DT_LTRANS(PSEC(1),PSEC(2),PSEC(3),PSEC(4),
+ & PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I),
+ & IDSEC,IMODE)
+ ENDIF
+
+ ENDIF
+
+ 23 CONTINUE
+ DO 31 K=1,4
+ PFSP(K) = PFSP(K)+PHKK(K,I)
+ 31 CONTINUE
+
+ 20 CONTINUE
+
+ DO 33 I=NPOINT(4),NHKK
+ IF ((ISTHKK(I).EQ.1).AND.(IDXOTH(I).LT.0)) THEN
+ PFSP(1) = PFSP(1)+PHKK(1,I)
+ PFSP(2) = PFSP(2)+PHKK(2,I)
+ PFSP(3) = PFSP(3)+PHKK(3,I)
+ PFSP(4) = PFSP(4)+PHKK(4,I)
+ ENDIF
+ 33 CONTINUE
+
+ DO 34 K=1,5
+ PRCLPR(K) = TRCLPR(K)
+ PRCLTA(K) = TRCLTA(K)
+ 34 CONTINUE
+
+ IF ((IP.EQ.1).AND.(IT.GT.1).AND.LFERMI) THEN
+* hadron-nucleus interactions: get residual momentum from energy-
+* momentum conservation
+ DO 32 K=1,4
+ PRCLPR(K) = ZERO
+ PRCLTA(K) = PINIPR(K)+PINITA(K)-PFSP(K)
+ 32 CONTINUE
+ ELSE
+* nucleus-hadron, nucleus-nucleus: get residual momentum from
+* accumulated recoil momenta of particles leaving the spectators
+* transform accumulated recoil momenta of residual nuclei into
+* n-n cms
+ PZI = PRCLPR(3)
+ PEI = PRCLPR(4)
+ CALL DT_LTNUC(PZI,PEI,PRCLPR(3),PRCLPR(4),2)
+ PZI = PRCLTA(3)
+ PEI = PRCLTA(4)
+ CALL DT_LTNUC(PZI,PEI,PRCLTA(3),PRCLTA(4),3)
+C IF (IP.GT.1) THEN
+ PRCLPR(3) = PRCLPR(3)+PINIPR(3)
+ PRCLPR(4) = PRCLPR(4)+PINIPR(4)
+C ENDIF
+ IF (IT.GT.1) THEN
+ PRCLTA(3) = PRCLTA(3)+PINITA(3)
+ PRCLTA(4) = PRCLTA(4)+PINITA(4)
+ ENDIF
+ ENDIF
+
+* check momenta of residual nuclei
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(-PINIPR(1),-PINIPR(2),-PINIPR(3),-PINIPR(4),
+ & 1,IDUM,IDUM)
+ CALL DT_EVTEMC(-PINITA(1),-PINITA(2),-PINITA(3),-PINITA(4),
+ & 2,IDUM,IDUM)
+ CALL DT_EVTEMC(PRCLPR(1),PRCLPR(2),PRCLPR(3),PRCLPR(4),
+ & 2,IDUM,IDUM)
+ CALL DT_EVTEMC(PRCLTA(1),PRCLTA(2),PRCLTA(3),PRCLTA(4),
+ & 2,IDUM,IDUM)
+ CALL DT_EVTEMC(PFSP(1),PFSP(2),PFSP(3),PFSP(4),2,IDUM,IDUM)
+**sr 19.12. changed to avoid output when used with phojet
+C CHKLEV = TINY3
+ CHKLEV = TINY1
+ CALL DT_EVTEMC(DUM,DUM,DUM,CHKLEV,-1,501,IREJ1)
+C IF ((NEVHKK.EQ.409).OR.(NEVHKK.EQ.460).OR.(NEVHKK.EQ.765))
+C & CALL DT_EVTOUT(4)
+ IF (IREJ1.GT.0) RETURN
+ ENDIF
+
+ RETURN
+ END
+*
+*===scn4ba=============================================================*
+*
+CDECK ID>, DT_SCN4BA
+ SUBROUTINE DT_SCN4BA
+
+************************************************************************
+* SCan /DTEVT1/ 4 BAryons which are not able to escape nuclear pot. *
+* This version dated 12.12.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY3=1.0D-3,TINY2=1.0D-2,
+ & TINY10=1.0D-10)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* treatment of residual nuclei: wounded nucleons
+ COMMON /DTWOUN/ NPW,NPW0,NPCW,NTW,NTW0,NTCW,IPW(210),ITW(210)
+* treatment of residual nuclei: 4-momenta
+ LOGICAL LRCLPR,LRCLTA
+ COMMON /DTRNU1/ PINIPR(5),PINITA(5),PRCLPR(5),PRCLTA(5),
+ & TRCLPR(5),TRCLTA(5),LRCLPR,LRCLTA
+
+ DIMENSION PLAB(2,5),PCMS(4)
+
+ IREJ = 0
+
+* get number of wounded nucleons
+ NPW = 0
+ NPW0 = 0
+ NPCW = 0
+ NPSTCK = 0
+ NTW = 0
+ NTW0 = 0
+ NTCW = 0
+ NTSTCK = 0
+
+ ISGLPR = 0
+ ISGLTA = 0
+ LRCLPR = .FALSE.
+ LRCLTA = .FALSE.
+
+C DO 2 I=1,NHKK
+ DO 2 I=1,NPOINT(1)
+* projectile nucleons wounded in primary interaction and in fzc
+ IF ((ISTHKK(I).EQ.11).OR.(ISTHKK(I).EQ.17)) THEN
+ NPW = NPW+1
+ IPW(NPW) = I
+ NPSTCK = NPSTCK+1
+ IF (IDHKK(I).EQ.2212) NPCW = NPCW+1
+ IF (ISTHKK(I).EQ.11) NPW0 = NPW0+1
+C IF (IP.GT.1) THEN
+ DO 5 K=1,4
+ TRCLPR(K) = TRCLPR(K)-PHKK(K,I)
+ 5 CONTINUE
+C ENDIF
+* target nucleons wounded in primary interaction and in fzc
+ ELSEIF ((ISTHKK(I).EQ.12).OR.(ISTHKK(I).EQ.18)) THEN
+ NTW = NTW+1
+ ITW(NTW) = I
+ NTSTCK = NTSTCK+1
+ IF (IDHKK(I).EQ.2212) NTCW = NTCW+1
+ IF (ISTHKK(I).EQ.12) NTW0 = NTW0+1
+ IF (IT.GT.1) THEN
+ DO 6 K=1,4
+ TRCLTA(K) = TRCLTA(K)-PHKK(K,I)
+ 6 CONTINUE
+ ENDIF
+ ELSEIF (ISTHKK(I).EQ.13) THEN
+ ISGLPR = I
+ ELSEIF (ISTHKK(I).EQ.14) THEN
+ ISGLTA = I
+ ENDIF
+ 2 CONTINUE
+
+ DO 11 I=NPOINT(4),NHKK
+* baryons which are unable to escape the nuclear potential of proj.
+ IF (ISTHKK(I).EQ.15) THEN
+ ISGLPR = I
+ NPSTCK = NPSTCK-1
+ IF (IIBAR(IDBAM(I)).NE.0) THEN
+ NPW = NPW-1
+ IF (IICH(IDBAM(I)).GT.0) NPCW = NPCW-1
+ ENDIF
+ DO 7 K=1,4
+ TRCLPR(K) = TRCLPR(K)+PHKK(K,I)
+ 7 CONTINUE
+* baryons which are unable to escape the nuclear potential of targ.
+ ELSEIF (ISTHKK(I).EQ.16) THEN
+ ISGLTA = I
+ NTSTCK = NTSTCK-1
+ IF (IIBAR(IDBAM(I)).NE.0) THEN
+ NTW = NTW-1
+ IF (IICH(IDBAM(I)).GT.0) NTCW = NTCW-1
+ ENDIF
+ DO 8 K=1,4
+ TRCLTA(K) = TRCLTA(K)+PHKK(K,I)
+ 8 CONTINUE
+ ENDIF
+ 11 CONTINUE
+
+* residual nuclei so far
+ IRESP = IP-NPSTCK
+ IREST = IT-NTSTCK
+
+* ckeck for "residual nuclei" consisting of one nucleon only
+* treat it as final state particle
+ IF (IRESP.EQ.1) THEN
+ ID = IDBAM(ISGLPR)
+ IST = ISTHKK(ISGLPR)
+ CALL DT_LTRANS(PHKK(1,ISGLPR),PHKK(2,ISGLPR),
+ & PHKK(3,ISGLPR),PHKK(4,ISGLPR),
+ & PCMS(1),PCMS(2),PCMS(3),PCMS(4),ID,2)
+ IF (IST.EQ.13) THEN
+ ISTHKK(ISGLPR) = 11
+ ELSE
+ ISTHKK(ISGLPR) = 2
+ ENDIF
+ CALL DT_EVTPUT(1,IDHKK(ISGLPR),ISGLPR,0,
+ & PCMS(1),PCMS(2),PCMS(3),PCMS(4),
+ & IDRES(ISGLPR),IDXRES(ISGLPR),IDCH(ISGLPR))
+ NOBAM(NHKK) = NOBAM(ISGLPR)
+ JDAHKK(1,ISGLPR) = NHKK
+ DO 21 K=1,4
+ TRCLPR(K) = TRCLPR(K)-PHKK(K,ISGLPR)
+ 21 CONTINUE
+ ENDIF
+ IF (IREST.EQ.1) THEN
+ ID = IDBAM(ISGLTA)
+ IST = ISTHKK(ISGLTA)
+ CALL DT_LTRANS(PHKK(1,ISGLTA),PHKK(2,ISGLTA),
+ & PHKK(3,ISGLTA),PHKK(4,ISGLTA),
+ & PCMS(1),PCMS(2),PCMS(3),PCMS(4),ID,3)
+ IF (IST.EQ.14) THEN
+ ISTHKK(ISGLTA) = 12
+ ELSE
+ ISTHKK(ISGLTA) = 2
+ ENDIF
+ CALL DT_EVTPUT(1,IDHKK(ISGLTA),ISGLTA,0,
+ & PCMS(1),PCMS(2),PCMS(3),PCMS(4),
+ & IDRES(ISGLTA),IDXRES(ISGLTA),IDCH(ISGLTA))
+ NOBAM(NHKK) = NOBAM(ISGLTA)
+ JDAHKK(1,ISGLTA) = NHKK
+ DO 22 K=1,4
+ TRCLTA(K) = TRCLTA(K)-PHKK(K,ISGLTA)
+ 22 CONTINUE
+ ENDIF
+
+* get nuclear potential corresp. to the residual nucleus
+ IPRCL = IP -NPW
+ IPZRCL = IPZ-NPCW
+ ITRCL = IT -NTW
+ ITZRCL = ITZ-NTCW
+ CALL DT_NCLPOT(IPZRCL,IPRCL,ITZRCL,ITRCL,ZERO,ZERO,1)
+
+* baryons unable to escape the nuclear potential are treated as
+* excited nucleons (ISTHKK=15,16)
+ DO 3 I=NPOINT(4),NHKK
+ IF (ISTHKK(I).EQ.1) THEN
+ ID = IDBAM(I)
+ IF ( ((ID.EQ.1).OR.(ID.EQ.8)).AND.(NOBAM(I).NE.3) ) THEN
+* final state n and p not being outside of both nuclei are considered
+ NPOTP = 1
+ NPOTT = 1
+ IF ( (IP.GT.1) .AND.(IRESP.GT.1).AND.
+ & (NOBAM(I).NE.1).AND.(NPW.GT.0) ) THEN
+* Lorentz-trsf. into proj. rest sys. for those being inside proj.
+ CALL DT_LTRANS(PHKK(1,I),PHKK(2,I),PHKK(3,I),
+ & PHKK(4,I),PLAB(1,1),PLAB(1,2),PLAB(1,3),
+ & PLAB(1,4),ID,-2)
+ PLABT = SQRT(PLAB(1,1)**2+PLAB(1,2)**2+PLAB(1,3)**2)
+ PLAB(1,5) = SQRT(ABS( (PLAB(1,4)-PLABT)*
+ & (PLAB(1,4)+PLABT) ))
+ EKIN = PLAB(1,4)-PLAB(1,5)
+ IF (EKIN.LE.EPOT(1,ID)) NPOTP = 15
+ IF ((ID.EQ.1).AND.(NPCW.LE.0)) NPOTP = 1
+ ENDIF
+ IF ( (IT.GT.1) .AND.(IREST.GT.1).AND.
+ & (NOBAM(I).NE.2).AND.(NTW.GT.0) ) THEN
+* Lorentz-trsf. into targ. rest sys. for those being inside targ.
+ CALL DT_LTRANS(PHKK(1,I),PHKK(2,I),PHKK(3,I),
+ & PHKK(4,I),PLAB(2,1),PLAB(2,2),PLAB(2,3),
+ & PLAB(2,4),ID,-3)
+ PLABT = SQRT(PLAB(2,1)**2+PLAB(2,2)**2+PLAB(2,3)**2)
+ PLAB(2,5) = SQRT(ABS( (PLAB(2,4)-PLABT)*
+ & (PLAB(2,4)+PLABT) ))
+ EKIN = PLAB(2,4)-PLAB(2,5)
+ IF (EKIN.LE.EPOT(2,ID)) NPOTT = 16
+ IF ((ID.EQ.1).AND.(NTCW.LE.0)) NPOTT = 1
+ ENDIF
+ IF (PHKK(3,I).GE.ZERO) THEN
+ ISTHKK(I) = NPOTT
+ IF (NPOTP.NE.1) ISTHKK(I) = NPOTP
+ ELSE
+ ISTHKK(I) = NPOTP
+ IF (NPOTT.NE.1) ISTHKK(I) = NPOTT
+ ENDIF
+ IF (ISTHKK(I).NE.1) THEN
+ J = ISTHKK(I)-14
+ DO 4 K=1,5
+ PHKK(K,I) = PLAB(J,K)
+ 4 CONTINUE
+ IF (ISTHKK(I).EQ.15) THEN
+ NPW = NPW-1
+ IF (ID.EQ.1) NPCW = NPCW-1
+ DO 9 K=1,4
+ TRCLPR(K) = TRCLPR(K)+PHKK(K,I)
+ 9 CONTINUE
+ ELSEIF (ISTHKK(I).EQ.16) THEN
+ NTW = NTW-1
+ IF (ID.EQ.1) NTCW = NTCW-1
+ DO 10 K=1,4
+ TRCLTA(K) = TRCLTA(K)+PHKK(K,I)
+ 10 CONTINUE
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+ 3 CONTINUE
+
+* again: get nuclear potential corresp. to the residual nucleus
+ IPRCL = IP -NPW
+ IPZRCL = IPZ-NPCW
+ ITRCL = IT -NTW
+ ITZRCL = ITZ-NTCW
+c AFERP = 1.2D0*FERMOD*(ONE+(DBLE(IP+10-NPW0)/DBLE(IP+10))**1.1D0)
+cC AFERP = 1.21D0*FERMOD*(ONE+(DBLE(IP+40-NPW0)/DBLE(IP+40))**1.1D0)
+c & *(0.94D0+0.3D0*EXP(-DBLE(NPW0)/5.0D0)) /2.0D0
+C AFERP = 0.0D0
+c AFERT = 1.2D0*FERMOD*(ONE+(DBLE(IT+10-NTW0)/DBLE(IT+10))**1.1D0)
+cC AFERT = 1.21D0*FERMOD*(ONE+(DBLE(IT+40-NTW0)/DBLE(IT+40))**1.1D0)
+c & *(0.94D0+0.3D0*EXP(-DBLE(NTW0)/5.0D0)) /2.0D0
+C AFERT = 0.0D0
+C IF (AFERP.LT.FERMOD) AFERP = FERMOD+0.1
+C IF (AFERT.LT.FERMOD) AFERT = FERMOD+0.1
+C IF (AFERP.GT.0.85D0) AFERP = 0.85D0
+C IF (AFERT.GT.0.85D0) AFERT = 0.85D0
+ AFERP = FERMOD+0.1D0
+ AFERT = FERMOD+0.1D0
+
+ CALL DT_NCLPOT(IPZRCL,IPRCL,ITZRCL,ITRCL,AFERP,AFERT,1)
+
+ RETURN
+ END
+*
+*===ficonf=============================================================*
+*
+CDECK ID>, DT_FICONF
+ SUBROUTINE DT_FICONF(IJPROJ,IP,IPZ,IT,ITZ,NLOOP,IREJ)
+
+************************************************************************
+* Treatment of FInal CONFiguration including evaporation, fission and *
+* Fermi-break-up (for light nuclei only). *
+* Adopted from the original routine FINALE and extended to residual *
+* projectile nuclei. *
+* This version dated 12.12.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY3=1.0D-3,TINY10=1.0D-10)
+ PARAMETER (ANGLGB=5.0D-16)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* treatment of residual nuclei: 4-momenta
+ LOGICAL LRCLPR,LRCLTA
+ COMMON /DTRNU1/ PINIPR(5),PINITA(5),PRCLPR(5),PRCLTA(5),
+ & TRCLPR(5),TRCLTA(5),LRCLPR,LRCLTA
+* treatment of residual nuclei: properties of residual nuclei
+ COMMON /DTRNU2/ AMRCL0(2),EEXC(2),EEXCFI(2),
+ & NTOT(2),NPRO(2),NN(2),NH(2),NHPOS(2),NQ(2),
+ & NTOTFI(2),NPROFI(2)
+* statistics: residual nuclei
+ COMMON /DTSTA2/ EXCDPM(4),EXCEVA(2),
+ & NINCGE,NINCCO(2,3),NINCHR(2,2),NINCWO(2),
+ & NINCST(2,4),NINCEV(2),
+ & NRESTO(2),NRESPR(2),NRESNU(2),NRESBA(2),
+ & NRESPB(2),NRESCH(2),NRESEV(4),
+ & NEVA(2,6),NEVAGA(2),NEVAHT(2),NEVAHY(2,2,240),
+ & NEVAFI(2,2)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ INCLUDE './flukapro/(DIMPAR)'
+ INCLUDE './flukapro/(FINUC)'
+ INCLUDE './flukapro/(RESNUC)'
+ PARAMETER ( EMVGEV = 1.0 D-03 )
+ PARAMETER ( AMUGEV = 0.93149432 D+00 )
+ PARAMETER ( AMPRTN = 0.93827231 D+00 )
+ PARAMETER ( AMNTRN = 0.93956563 D+00 )
+ PARAMETER ( AMELCT = 0.51099906 D-03 )
+ PARAMETER ( ELCCGS = 4.8032068 D-10 )
+ PARAMETER ( ELCMKS = 1.60217733 D-19 )
+ PARAMETER ( COUGFM = ELCCGS * ELCCGS / ELCMKS * 1.D-07 * 1.D+13
+ & * 1.D-09 )
+ PARAMETER ( HLFHLF = 0.5D+00 )
+ PARAMETER ( FERTHO = 14.33 D-09 )
+ PARAMETER ( BEXC12 = FERTHO * 72.40715579499394D+00 )
+ PARAMETER ( AMUNMU = HLFHLF * AMELCT - BEXC12 / 12.D+00 )
+ PARAMETER ( AMUC12 = AMUGEV - AMUNMU )
+ INCLUDE './flukapro/(NUCDAT)'
+ INCLUDE './flukapro/(PAREVT)'
+ INCLUDE './flukapro/(FHEAVY)'
+
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+ DIMENSION INUC(2),IDXPAR(2),IDPAR(2),AIF(2),AIZF(2),AMRCL(2),
+ & PRCL(2,4),MO1(2),MO2(2),VRCL(2,4),WRCL(2,4),
+ & P1IN(4),P2IN(4),P1OUT(4),P2OUT(4)
+
+ DIMENSION EXPNUC(2),EXC(2,260),NEXC(2,260)
+ DATA EXC,NEXC /520*ZERO,520*0/
+ DATA EXPNUC /4.0D-3,4.0D-3/
+
+ IREJ = 0
+ LRCLPR = .FALSE.
+ LRCLTA = .FALSE.
+
+* skip residual nucleus treatment if not requested or in case
+* of central collisions
+ IF ((.NOT.LEVPRT).OR.(ICENTR.GT.0).OR.(ICENTR.EQ.-1)) RETURN
+
+ DO 1 K=1,2
+ IDPAR(K) = 0
+ IDXPAR(K)= 0
+ NTOT(K) = 0
+ NTOTFI(K)= 0
+ NPRO(K) = 0
+ NPROFI(K)= 0
+ NN(K) = 0
+ NH(K) = 0
+ NHPOS(K) = 0
+ NQ(K) = 0
+ EEXC(K) = ZERO
+ MO1(K) = 0
+ MO2(K) = 0
+ DO 2 I=1,4
+ VRCL(K,I) = ZERO
+ WRCL(K,I) = ZERO
+ 2 CONTINUE
+ 1 CONTINUE
+ NFSP = 0
+ INUC(1) = IP
+ INUC(2) = IT
+
+ DO 3 I=1,NHKK
+
+* number of final state particles
+ IF (ABS(ISTHKK(I)).EQ.1) THEN
+ NFSP = NFSP+1
+ IDFSP = IDBAM(I)
+ ENDIF
+
+* properties of remaining nucleon configurations
+ KF = 0
+ IF ((ISTHKK(I).EQ.13).OR.(ISTHKK(I).EQ.15)) KF = 1
+ IF ((ISTHKK(I).EQ.14).OR.(ISTHKK(I).EQ.16)) KF = 2
+ IF (KF.GT.0) THEN
+ IF (MO1(KF).EQ.0) MO1(KF) = I
+ MO2(KF) = I
+* position of residual nucleus = average position of nucleons
+ DO 4 K=1,4
+ VRCL(KF,K) = VRCL(KF,K)+VHKK(K,I)
+ WRCL(KF,K) = WRCL(KF,K)+WHKK(K,I)
+ 4 CONTINUE
+* total number of particles contributing to each residual nucleus
+ NTOT(KF) = NTOT(KF)+1
+ IDTMP = IDBAM(I)
+ IDXTMP = I
+* total charge of residual nuclei
+ NQ(KF) = NQ(KF)+IICH(IDTMP)
+* number of protons
+ IF (IDHKK(I).EQ.2212) THEN
+ NPRO(KF) = NPRO(KF)+1
+* number of neutrons
+ ELSEIF (IDHKK(I).EQ.2112) THEN
+ NN(KF) = NN(KF)+1
+ ELSE
+* number of baryons other than n, p
+ IF (IIBAR(IDTMP).EQ.1) THEN
+ NH(KF) = NH(KF)+1
+ IF (IICH(IDTMP).EQ.1) NHPOS(KF) = NHPOS(KF)+1
+ ELSE
+* any other mesons (status set to 1)
+C WRITE(LOUT,1002) KF,IDTMP
+C1002 FORMAT(1X,'FICONF: residual nucleus ',I2,
+C & ' containing meson ',I4,', status set to 1')
+ ISTHKK(I) = 1
+ IDTMP = IDPAR(KF)
+ IDXTMP = IDXPAR(KF)
+ NTOT(KF) = NTOT(KF)-1
+ ENDIF
+ ENDIF
+ IDPAR(KF) = IDTMP
+ IDXPAR(KF) = IDXTMP
+ ENDIF
+ 3 CONTINUE
+
+* reject elastic events (def: one final state particle = projectile)
+ IF ((IP.EQ.1).AND.(NFSP.EQ.1).AND.(IDFSP.EQ.IJPROJ)) THEN
+ IREXCI(3) = IREXCI(3)+1
+ GOTO 9999
+C RETURN
+ ENDIF
+
+* check if one nucleus disappeared..
+C IF ((IP.GT.1).AND.(NTOT(1).EQ.0).AND.(NTOT(2).NE.0)) THEN
+C DO 5 K=1,4
+C PRCLTA(K) = PRCLTA(K)+PRCLPR(K)
+C PRCLPR(K) = ZERO
+C 5 CONTINUE
+C ELSEIF ((IT.GT.1).AND.(NTOT(2).EQ.0).AND.(NTOT(1).NE.0)) THEN
+C DO 6 K=1,4
+C PRCLPR(K) = PRCLPR(K)+PRCLTA(K)
+C PRCLTA(K) = ZERO
+C 6 CONTINUE
+C ENDIF
+
+ ICOR = 0
+ INORCL = 0
+ DO 7 I=1,2
+ DO 8 K=1,4
+* get the average of the nucleon positions
+ VRCL(I,K) = VRCL(I,K)/MAX(NTOT(I),1)
+ WRCL(I,K) = WRCL(I,K)/MAX(NTOT(I),1)
+ IF (I.EQ.1) PRCL(1,K) = PRCLPR(K)
+ IF (I.EQ.2) PRCL(2,K) = PRCLTA(K)
+ 8 CONTINUE
+* mass number and charge of residual nuclei
+ AIF(I) = DBLE(NTOT(I))
+ AIZF(I) = DBLE(NPRO(I)+NHPOS(I))
+ IF (NTOT(I).GT.1) THEN
+* masses of residual nuclei in ground state
+
+C AMRCL0(I) = AIF(I)*AMUAMU+1.0D-3*ENERGY(AIF(I),AIZF(I))
+ AMRCL0(I) = AIF(I)*AMUC12
+ & +EMVGEV*EXMSAZ(AIF(I),AIZF(I),.TRUE.,IZDUM)
+
+* masses of residual nuclei
+ PTORCL = SQRT(PRCL(I,1)**2+PRCL(I,2)**2+PRCL(I,3)**2)
+ AMRCL(I) = (PRCL(I,4)-PTORCL)*(PRCL(I,4)+PTORCL)
+ IF (AMRCL(I).GT.ZERO) AMRCL(I) = SQRT(AMRCL(I))
+ IF (AMRCL(I).LE.ZERO) THEN
+ IF (IOULEV(3).GT.0)
+ & WRITE(LOUT,1000) I,PRCL(I,1),PRCL(I,2),PRCL(I,3),
+ & PRCL(I,4),NTOT
+ 1000 FORMAT(1X,'warning! negative excitation energy',/,
+ & I4,4E15.4,2I4)
+ AMRCL(I) = ZERO
+ EEXC(I) = ZERO
+ IF (NLOOP.LE.500) THEN
+ GOTO 9998
+ ELSE
+ IREXCI(2) = IREXCI(2)+1
+ GOTO 9999
+ ENDIF
+ ELSEIF ((AMRCL(I).GT.ZERO).AND.(AMRCL(I).LT.AMRCL0(I)))
+ & THEN
+**sr
+C WRITE(6,*) NEVHKK,I,NTOT(1),NTOT(2),AMRCL(I),AMRCL0(I)
+**
+**sr 3.3
+C AMRCL(I) = AMRCL0(I)+EXPNUC(I)*DBLE(NTOT(I))
+ M = MIN(NTOT(I),260)
+ IF (NEXC(I,M).GT.0) THEN
+ AMRCL(I) = AMRCL0(I)+EXC(I,M)/DBLE(NEXC(I,M))
+ ELSE
+ 70 CONTINUE
+ M = M+1
+ IF (M.GE.INUC(I)) THEN
+ AMRCL(I) = AMRCL0(I)+EXPNUC(I)*DBLE(NTOT(I))
+ ELSE
+ IF (NEXC(I,M).GT.0) THEN
+ AMRCL(I) = AMRCL0(I)+EXC(I,M)/DBLE(NEXC(I,M))
+ ELSE
+ GOTO 70
+ ENDIF
+ ENDIF
+ ENDIF
+**
+ EEXC(I) = AMRCL(I)-AMRCL0(I)
+ ICOR = ICOR+I
+ ELSEIF (AMRCL(I).GE.2.5D0*AMRCL0(I)) THEN
+ IF (IOULEV(3).GT.0)
+& WRITE(LOUT,1004) I,AMRCL(I),AMRCL0(I),NTOT,NEVHKK
+ 1004 FORMAT(1X,'warning! too high excitation energy',/,
+ & I4,1P,2E15.4,3I5)
+ AMRCL(I) = ZERO
+ EEXC(I) = ZERO
+ IF (NLOOP.LE.500) THEN
+ GOTO 9998
+ ELSE
+ IREXCI(2) = IREXCI(2)+1
+ GOTO 9999
+ ENDIF
+ ELSE
+* excitation energies of residual nuclei
+ EEXC(I) = AMRCL(I)-AMRCL0(I)
+ IF (ICASCA.EQ.0) THEN
+**sr 15.1.
+C EXPNUC(I) = EEXC(I)/DBLE(NTOT(I))
+ EXPNUC(I) = EEXC(I)/MAX(1,INUC(I)-NTOT(I))
+ M = MIN(NTOT(I),260)
+ EXC(I,M) = EXC(I,M)+EEXC(I)
+ NEXC(I,M) = NEXC(I,M)+1
+ ENDIF
+ ENDIF
+ ELSEIF (NTOT(I).EQ.1) THEN
+ WRITE(LOUT,1003) I
+ 1003 FORMAT(1X,'FICONF: warning! NTOT(I)=1? (I=',I3,')')
+ GOTO 9999
+ ELSE
+ AMRCL0(I) = ZERO
+ AMRCL(I) = ZERO
+ EEXC(I) = ZERO
+ INORCL = INORCL+I
+ ENDIF
+ 7 CONTINUE
+
+ PRCLPR(5) = AMRCL(1)
+ PRCLTA(5) = AMRCL(2)
+
+ IF (ICOR.GT.0) THEN
+ IF (INORCL.EQ.0) THEN
+* one or both residual nuclei consist of one nucleon only, transform
+* this nucleon on mass shell
+ DO 9 K=1,4
+ P1IN(K) = PRCL(1,K)
+ P2IN(K) = PRCL(2,K)
+ 9 CONTINUE
+ XM1 = AMRCL(1)
+ XM2 = AMRCL(2)
+ CALL DT_MASHEL(P1IN,P2IN,XM1,XM2,P1OUT,P2OUT,IREJ1)
+ IF (IREJ1.GT.0) THEN
+ WRITE(LOUT,*) 'ficonf-mashel rejection'
+ GOTO 9999
+ ENDIF
+ DO 10 K=1,4
+ PRCL(1,K) = P1OUT(K)
+ PRCL(2,K) = P2OUT(K)
+ PRCLPR(K) = P1OUT(K)
+ PRCLTA(K) = P2OUT(K)
+ 10 CONTINUE
+ PRCLPR(5) = AMRCL(1)
+ PRCLTA(5) = AMRCL(2)
+ ELSE
+ IF (IOULEV(3).GT.0)
+ & WRITE(LOUT,1001) NEVHKK,INT(AIF(1)),INT(AIZF(1)),
+ & INT(AIF(2)),INT(AIZF(2)),AMRCL0(1),
+ & AMRCL(1),AMRCL(1)-AMRCL0(1),AMRCL0(2),
+ & AMRCL(2),AMRCL(2)-AMRCL0(2)
+ 1001 FORMAT(1X,'FICONF: warning! no residual nucleus for',
+ & ' correction',/,11X,'at event',I8,
+ & ', nucleon config. 1:',2I4,' 2:',2I4,
+ & 2(/,11X,3E12.3))
+ IF (NLOOP.LE.500) THEN
+ GOTO 9998
+ ELSE
+ IREXCI(1) = IREXCI(1)+1
+ ENDIF
+ ENDIF
+ ENDIF
+
+* update counter
+C IF (NRESEV(1).NE.NEVHKK) THEN
+C NRESEV(1) = NEVHKK
+C NRESEV(2) = NRESEV(2)+1
+C ENDIF
+ NRESEV(2) = NRESEV(2)+1
+ DO 15 I=1,2
+ EXCDPM(I) = EXCDPM(I)+EEXC(I)
+ EXCDPM(I+2) = EXCDPM(I+2)+(EEXC(I)/MAX(NTOT(I),1))
+ NRESTO(I) = NRESTO(I)+NTOT(I)
+ NRESPR(I) = NRESPR(I)+NPRO(I)
+ NRESNU(I) = NRESNU(I)+NN(I)
+ NRESBA(I) = NRESBA(I)+NH(I)
+ NRESPB(I) = NRESPB(I)+NHPOS(I)
+ NRESCH(I) = NRESCH(I)+NQ(I)
+ 15 CONTINUE
+
+* evaporation
+ IF (LEVPRT) THEN
+ DO 13 I=1,2
+* initialize evaporation counter
+ NP = 0
+ EEXCFI(I) = ZERO
+ IF ((INUC(I).GT.1).AND.(AIF(I).GT.ONE).AND.
+ & (EEXC(I).GT.ZERO)) THEN
+* put residual nuclei into DTEVT1
+ IDRCL = 80000
+ JMASS = INT( AIF(I))
+ JCHAR = INT(AIZF(I))
+* the following patch is required to transmit the correct excitation
+* energy to Eventd
+ IF (ITRSPT.EQ.1) THEN
+ PRCL0 = PRCL(I,4)
+ PRCL(I,4) =SQRT(AMRCL(I)**2+PRCL(I,1)**2+PRCL(I,2)**2
+ & +PRCL(I,3)**2)
+ IF (ABS(PRCL0-PRCL(I,4)).GT.0.1D0) THEN
+ WRITE(LOUT,*)
+ & ' PRCL(I,4) recalculated :',PRCL0,PRCL(I,4)
+ ENDIF
+ ENDIF
+ CALL DT_EVTPUT(1000,IDRCL,MO1(I),MO2(I),PRCL(I,1),
+ & PRCL(I,2),PRCL(I,3),PRCL(I,4),JMASS,JCHAR,0)
+**sr 22.6.97
+ NOBAM(NHKK) = I
+**
+ DO 14 J=1,4
+ VHKK(J,NHKK) = VRCL(I,J)
+ WHKK(J,NHKK) = WRCL(I,J)
+ 14 CONTINUE
+* interface to evaporation module - fill final residual nucleus into
+* common FKRESN
+* fill resnuc only if code is not used as event generator in Fluka
+ IF (ITRSPT.NE.1) THEN
+ PXRES = PRCL(I,1)
+ PYRES = PRCL(I,2)
+ PZRES = PRCL(I,3)
+ IBRES = NPRO(I)+NN(I)+NH(I)
+ ICRES = NPRO(I)+NHPOS(I)
+ ANOW = DBLE(IBRES)
+ ZNOW = DBLE(ICRES)
+ PTRES = SQRT(PXRES**2+PYRES**2+PZRES**2)
+* ground state mass of the residual nucleus (should be equal to AM0T)
+
+ AMNRES = AMRCL0(I)
+ AMMRES = AMNAMA ( AMNRES, IBRES, ICRES )
+
+* common FKFINU
+ TV = ZERO
+* kinetic energy of residual nucleus
+ TVRECL = PRCL(I,4)-AMRCL(I)
+* excitation energy of residual nucleus
+ TVCMS = EEXC(I)
+ PTOLD = PTRES
+ PTRES = SQRT(ABS(TVRECL*(TVRECL+
+ & 2.0D0*(AMMRES+TVCMS))))
+ IF (PTOLD.LT.ANGLGB) THEN
+ CALL DT_RACO(PXRES,PYRES,PZRES)
+ PTOLD = ONE
+ ENDIF
+ PXRES = PXRES*PTRES/PTOLD
+ PYRES = PYRES*PTRES/PTOLD
+ PZRES = PZRES*PTRES/PTOLD
+* evaporation
+ WE = ONE
+
+ NPHEAV = 0
+ LRNFSS = .FALSE.
+ LFRAGM = .FALSE.
+ CALL EVEVAP(WE)
+
+* put evaporated particles and residual nuclei to DTEVT1
+ MO = NHKK
+ CALL DT_EVA2HE(MO,EXCITF,I,IREJ1)
+ ENDIF
+ EEXCFI(I) = EXCITF
+ EXCEVA(I) = EXCEVA(I)+EXCITF
+ ENDIF
+ 13 CONTINUE
+ ENDIF
+
+ RETURN
+
+C9998 IREXCI(1) = IREXCI(1)+1
+ 9998 IREJ = IREJ+1
+ 9999 CONTINUE
+ LRCLPR = .TRUE.
+ LRCLTA = .TRUE.
+ IREJ = IREJ+1
+ RETURN
+ END
+* *
+*====eva2he============================================================*
+* *
+CDECK ID>, DT_EVA2HE
+ SUBROUTINE DT_EVA2HE(MO,EEXCF,IRCL,IREJ)
+
+************************************************************************
+* Interface between common's of evaporation module (FKFINU,FKFHVY) *
+* and DTEVT1. *
+* MO DTEVT1-index of "mother" (residual) nucleus before evap. *
+* EEXCF exitation energy of residual nucleus after evaporation *
+* IRCL = 1 projectile residual nucleus *
+* = 2 target residual nucleus *
+* This version dated 19.04.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY3=1.0D-3)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* Note: DTEVT2 - special use for heavy fragments !
+* (IDRES(I) = mass number, IDXRES(I) = charge)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* statistics: residual nuclei
+ COMMON /DTSTA2/ EXCDPM(4),EXCEVA(2),
+ & NINCGE,NINCCO(2,3),NINCHR(2,2),NINCWO(2),
+ & NINCST(2,4),NINCEV(2),
+ & NRESTO(2),NRESPR(2),NRESNU(2),NRESBA(2),
+ & NRESPB(2),NRESCH(2),NRESEV(4),
+ & NEVA(2,6),NEVAGA(2),NEVAHT(2),NEVAHY(2,2,240),
+ & NEVAFI(2,2)
+* treatment of residual nuclei: properties of residual nuclei
+ COMMON /DTRNU2/ AMRCL0(2),EEXC(2),EEXCFI(2),
+ & NTOT(2),NPRO(2),NN(2),NH(2),NHPOS(2),NQ(2),
+ & NTOTFI(2),NPROFI(2)
+
+ INCLUDE './flukapro/(DIMPAR)'
+ INCLUDE './flukapro/(FINUC)'
+ INCLUDE './flukapro/(RESNUC)'
+ INCLUDE './flukapro/(FHEAVY)'
+
+ DIMENSION IPTOKP(39)
+ DATA IPTOKP / 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ & 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 99,
+ & 100, 101, 97, 102, 98, 103, 109, 115 /
+
+ IREJ = 0
+
+* skip if evaporation package is not included
+ IF (.NOT.LEVAPO) RETURN
+
+* update counter
+ IF (NRESEV(3).NE.NEVHKK) THEN
+ NRESEV(3) = NEVHKK
+ NRESEV(4) = NRESEV(4)+1
+ ENDIF
+
+ IF (LEMCCK)
+ & CALL DT_EVTEMC(PHKK(1,MO),PHKK(2,MO),PHKK(3,MO),PHKK(4,MO),1,
+ & IDUM,IDUM)
+* mass number/charge of residual nucleus before evaporation
+ IBTOT = IDRES(MO)
+ IZTOT = IDXRES(MO)
+
+* protons/neutrons/gammas
+ DO 1 I=1,NP
+ PX = CXR(I)*PLR(I)
+ PY = CYR(I)*PLR(I)
+ PZ = CZR(I)*PLR(I)
+ ID = IPTOKP(KPART(I))
+ IDPDG = IDT_IPDGHA(ID)
+ AM = ((PLR(I)+TKI(I))*(PLR(I)-TKI(I)))/
+ & (2.0D0*MAX(TKI(I),TINY10))
+ IF (ABS(AM-AAM(ID)).GT.TINY3) THEN
+ WRITE(LOUT,1000) ID,AM,AAM(ID)
+ 1000 FORMAT(1X,'EVA2HE: inconsistent mass of evap. ',
+ & 'particle',I3,2E10.3)
+ ENDIF
+ PE = TKI(I)+AM
+ CALL DT_EVTPUT(-1,IDPDG,MO,0,PX,PY,PZ,PE,0,0,0)
+ NOBAM(NHKK) = IRCL
+ IF (LEMCCK) CALL DT_EVTEMC(-PX,-PY,-PZ,-PE,2,IDUM,IDUM)
+ IBTOT = IBTOT-IIBAR(ID)
+ IZTOT = IZTOT-IICH(ID)
+ 1 CONTINUE
+
+* heavy fragments
+ DO 2 I=1,NPHEAV
+ PX = CXHEAV(I)*PHEAVY(I)
+ PY = CYHEAV(I)*PHEAVY(I)
+ PZ = CZHEAV(I)*PHEAVY(I)
+ IDHEAV = 80000
+ AM = ((PHEAVY(I)+TKHEAV(I))*(PHEAVY(I)-TKHEAV(I)))/
+ & (2.0D0*MAX(TKHEAV(I),TINY10))
+ PE = TKHEAV(I)+AM
+ CALL DT_EVTPUT(-1,IDHEAV,MO,0,PX,PY,PZ,PE,
+ & IBHEAV(KHEAVY(I)),ICHEAV(KHEAVY(I)),0)
+ NOBAM(NHKK) = IRCL
+ IF (LEMCCK) CALL DT_EVTEMC(-PX,-PY,-PZ,-PE,2,IDUM,IDUM)
+ IBTOT = IBTOT-IBHEAV(KHEAVY(I))
+ IZTOT = IZTOT-ICHEAV(KHEAVY(I))
+ 2 CONTINUE
+
+ IF (IBRES.GT.0) THEN
+* residual nucleus after evaporation
+ IDNUC = 80000
+ CALL DT_EVTPUT(1001,IDNUC,MO,0,PXRES,PYRES,PZRES,ERES,
+ & IBRES,ICRES,0)
+ NOBAM(NHKK) = IRCL
+ ENDIF
+ EEXCF = TVCMS
+ NTOTFI(IRCL) = IBRES
+ NPROFI(IRCL) = ICRES
+ IF (LEMCCK) CALL DT_EVTEMC(-PXRES,-PYRES,-PZRES,-ERES,2,IDUM,IDUM)
+ IBTOT = IBTOT-IBRES
+ IZTOT = IZTOT-ICRES
+
+* count events with fission
+ NEVAFI(1,IRCL) = NEVAFI(1,IRCL)+1
+ IF (LRNFSS) NEVAFI(2,IRCL) = NEVAFI(2,IRCL)+1
+
+* energy-momentum conservation check
+ IF (LEMCCK) CALL DT_EVTEMC(DUM,DUM,DUM,DUM,5,40,IREJ)
+C IF (IREJ.GT.0) THEN
+C CALL DT_EVTOUT(4)
+C WRITE(*,*) EEXC(2),EEXCFI(2),NP,NPHEAV
+C ENDIF
+* baryon-number/charge conservation check
+ IF (IBTOT+IZTOT.NE.0) THEN
+ WRITE(LOUT,1001) NEVHKK,IBTOT,IZTOT
+ 1001 FORMAT(1X,'EVA2HE: baryon-number/charge conservation ',
+ & 'failure at event ',I8,' : IBTOT,IZTOT = ',2I3)
+ ENDIF
+
+ RETURN
+ END
+*
+*===ebind==============================================================*
+*
+CDECK ID>, DT_EBIND
+ DOUBLE PRECISION FUNCTION DT_EBIND(IA,IZ)
+
+************************************************************************
+* Binding energy for nuclei. *
+* (Shirokov & Yudin, Yad. Fizika, Nauka, Moskva 1972) *
+* IA mass number *
+* IZ atomic number *
+* This version dated 5.5.95 is updated by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0)
+
+ DATA A1, A2, A3, A4, A5
+ & / 0.01575D0, 0.0178D0, 0.000710D0, 0.0237D0, 0.034D0/
+
+ IF ((IA.LE.1).OR.(IZ.EQ.0)) THEN
+ WRITE(LOUT,'(1X,A,2I5)') 'DT_EBIND IA,IZ set EBIND=0. ',IA,IZ
+ DT_EBIND = ZERO
+ RETURN
+ ENDIF
+ AA = IA
+ DT_EBIND = A1*AA - A2*AA**0.666667D0-A3*IZ*IZ*AA**(-0.333333D0)
+ & -A4*(IA-2*IZ)**2/AA
+ IF (MOD(IA,2).EQ.1) THEN
+ IA5 = 0
+ ELSEIF (MOD(IZ,2).EQ.1) THEN
+ IA5 = 1
+ ELSE
+ IA5 = -1
+ ENDIF
+ DT_EBIND = DT_EBIND - IA5*A5*AA**(-0.75D0)
+
+ RETURN
+ END
+
+************************************************************************
+* *
+* DPMJET 3.0: cross section routines *
+* *
+************************************************************************
+*
+*
+* SUBROUTINE DT_SHNDIF
+* diffractive cross sections (all energies)
+* SUBROUTINE DT_PHOXS
+* total and inel. cross sections from PHOJET interpol. tables
+* SUBROUTINE DT_XSHN
+* total and el. cross sections for all energies
+* SUBROUTINE DT_SIHNAB
+* pion 2-nucleon absorption cross sections
+* SUBROUTINE DT_SIGEMU
+* cross section for target "compounds"
+* SUBROUTINE DT_SIGGA
+* photon nucleus cross sections
+* SUBROUTINE DT_SIGGAT
+* photon nucleus cross sections from tables
+* SUBROUTINE DT_SANO
+* anomalous hard photon-nucleon cross sections from tables
+* SUBROUTINE DT_SIGGP
+* photon nucleon cross sections
+* SUBROUTINE DT_SIGVEL
+* quasi-elastic vector meson prod. cross sections
+* DOUBLE PRECISION FUNCTION DT_SIGVP
+* sigma_VN(tilde)
+* DOUBLE PRECISION FUNCTION DT_RRM2
+* DOUBLE PRECISION FUNCTION DT_RM2
+* DOUBLE PRECISION FUNCTION DT_SAM2
+* SUBROUTINE DT_CKMT
+* SUBROUTINE DT_CKMTX
+* SUBROUTINE DT_PDF0
+* SUBROUTINE DT_CKMTQ0
+* SUBROUTINE DT_CKMTDE
+* SUBROUTINE DT_CKMTPR
+* FUNCTION DT_CKMTFF
+*
+* SUBROUTINE DT_FLUINI
+* total nucleon cross section fluctuation treatment
+*
+* SUBROUTINE DT_SIGTBL
+* pre-tabulation of low-energy elastic x-sec. using SIHNEL
+* SUBROUTINE DT_XSTABL
+* service routines
+*
+*
+*
+*===shndif===============================================================*
+*
+CDECK ID>, DT_SHNDIF
+ SUBROUTINE DT_SHNDIF(ECM,KPROJ,KTARG,SIGDIF,SIGDIH)
+
+**********************************************************************
+* Single diffractive hadron-nucleon cross sections *
+* S.Roesler 14/1/93 *
+* *
+* The cross sections are calculated from extrapolated single *
+* diffractive antiproton-proton cross sections (DTUJET92) using *
+* scaling relations between total and single diffractive cross *
+* sections. *
+**********************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ZERO=0.0D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+*
+ CSD1 = 4.201483727D0
+ CSD4 = -0.4763103556D-02
+ CSD5 = 0.4324148297D0
+*
+ CHMSD1 = 0.8519297242D0
+ CHMSD4 = -0.1443076599D-01
+ CHMSD5 = 0.4014954567D0
+*
+ EPN = (ECM**2 -AAM(KPROJ)**2 -AAM(KTARG)**2)/(2.0D0*AAM(KTARG))
+ PPN = SQRT((EPN-AAM(KPROJ))*(EPN+AAM(KPROJ)))
+*
+ SDIAPP = CSD1+CSD4*LOG(PPN)**2+CSD5*LOG(PPN)
+ SHMSD = CHMSD1+CHMSD4*LOG(PPN)**2+CHMSD5*LOG(PPN)
+ FRAC = SHMSD/SDIAPP
+*
+ GOTO( 10, 20,999,999,999,999,999, 10, 20,999,
+ & 999, 20, 20, 20, 20, 20, 10, 20, 20, 10,
+ & 10, 10, 20, 20, 20) KPROJ
+*
+ 10 CONTINUE
+*---------------------------- p - p , n - p , sigma0+- - p ,
+* Lambda - p
+ CSD1 = 6.004476070D0
+ CSD4 = -0.1257784606D-03
+ CSD5 = 0.2447335720D0
+ SIGDIF = CSD1+CSD4*LOG(PPN)**2+CSD5*LOG(PPN)
+ SIGDIH = FRAC*SIGDIF
+ RETURN
+*
+ 20 CONTINUE
+*
+ KPSCAL = 2
+ KTSCAL = 1
+C F = SDIAPP/DT_SHNTOT(KPSCAL,KTSCAL,ECM,ZERO)
+ DUMZER = ZERO
+ CALL DT_XSHN(KPSCAL,KTSCAL,DUMZER,ECM,SIGTO,SIGEL)
+ F = SDIAPP/SIGTO
+ KT = 1
+C SIGDIF = DT_SHNTOT(KPROJ,KT,ECM,ZERO)*F
+ CALL DT_XSHN(KPROJ,KT,DUMZER,ECM,SIGTO,SIGEL)
+ SIGDIF = SIGTO*F
+ SIGDIH = FRAC*SIGDIF
+ RETURN
+*
+ 999 CONTINUE
+*-------------------------- leptons..
+ SIGDIF = 1.D-10
+ SIGDIH = 1.D-10
+ RETURN
+ END
+*
+*===phoxs================================================================*
+*
+CDECK ID>, DT_PHOXS
+ SUBROUTINE DT_PHOXS(KPROJ,KTARG,ECM,PLAB,STOT,SINE,SDIF1,BEL,MODE)
+
+************************************************************************
+* Total/inelastic proton-nucleon cross sections taken from PHOJET- *
+* interpolation tables. *
+* This version dated 05.11.97 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586454D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0)
+
+ LOGICAL LFIRST
+ DATA LFIRST /.TRUE./
+
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+**PHOJET105a
+C PARAMETER (IEETAB=10)
+C COMMON /XSETAB/ SIGTAB(4,70,IEETAB),SIGECM(4,IEETAB),ISIMAX
+**PHOJET110
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+**
+
+ IF ((MCGENE.NE.2).AND.(MODE.NE.1)) THEN
+ WRITE(LOUT,*) MCGENE
+ 1000 FORMAT(1X,'PHOXS: warning! PHOJET not initialized (',I2,')')
+ STOP
+ ENDIF
+
+ IF (ECM.LE.ZERO) THEN
+ EPN = SQRT(AAM(KPROJ)**2+PLAB**2)
+ ECM = SQRT(AAM(KPROJ)**2+AAM(KTARG)**2+2.0D0*EPN*AAM(KTARG))
+ ENDIF
+
+ IF (MODE.EQ.1) THEN
+* DL
+ DELDL = 0.0808D0
+ EPSDL = -0.4525D0
+ S = ECM*ECM
+ STOT = 21.7D0*S**DELDL+56.08D0*S**EPSDL
+ ALPHAP= 0.25D0
+ BEL = 8.5D0+2.D0*ALPHAP*LOG(S)
+ SIGEL = STOT**2/(16.D0*PI*BEL*GEV2MB)
+ SINE = STOT-SIGEL
+ SDIF1 = ZERO
+ ELSE
+* Phojet
+ IP = 1
+ IF(ECM.LE.SIGECM(IP,1)) THEN
+ I1 = 1
+ I2 = 1
+ ELSEIF (ECM.LT.SIGECM(IP,ISIMAX)) THEN
+ DO 1 I=2,ISIMAX
+ IF (ECM.LE.SIGECM(IP,I)) GOTO 2
+ 1 CONTINUE
+ 2 CONTINUE
+ I1 = I-1
+ I2 = I
+ ELSE
+ IF (LFIRST) THEN
+ WRITE(LOUT,'(/1X,A,2E12.3)')
+ & 'PHOXS: warning! energy above initialization limit (',
+ & ECM,SIGECM(IP,ISIMAX)
+ LFIRST = .FALSE.
+ ENDIF
+ I1 = ISIMAX
+ I2 = ISIMAX
+ ENDIF
+ FAC2 = ZERO
+ IF (I1.NE.I2) FAC2 = LOG(ECM/SIGECM(IP,I1))
+ & /LOG(SIGECM(IP,I2)/SIGECM(IP,I1))
+ FAC1 = ONE-FAC2
+ STOT = FAC2*SIGTAB(IP, 1,I2)+FAC1*SIGTAB(IP, 1,I1)
+ SINE = FAC2*SIGTAB(IP,28,I2)+FAC1*SIGTAB(IP,28,I1)
+ SDIF1 = FAC2*(SIGTAB(IP,30,I2)+SIGTAB(IP,32,I2))+
+ & FAC1*(SIGTAB(IP,30,I1)+SIGTAB(IP,32,I1))
+ BEL = FAC2*SIGTAB(IP,39,I2)+FAC1*SIGTAB(IP,39,I1)
+ ENDIF
+
+ RETURN
+ END
+*
+*===xshn===============================================================*
+*
+CDECK ID>, DT_XSHN
+ SUBROUTINE DT_XSHN(IP,IT,PL,ECM,STOT,SELA)
+
+************************************************************************
+* Total and elastic hadron-nucleon cross section. *
+* Below 500GeV cross sections are based on the '98 data compilation *
+* of the PDG. At higher energies PHOJET results are used (patched to *
+* the low energy data at 500GeV). *
+* IP projectile index (BAMJET numbering scheme) *
+* (should be in the range 1..25) *
+* IT target index (BAMJET numbering scheme) *
+* (1 = proton, 8 = neutron) *
+* PL laboratory momentum *
+* ECM cm. energy (ignored if PL>0) *
+* STOT total cross section *
+* SELA elastic cross section *
+* Last change: 24.4.99 by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0)
+
+ PARAMETER (NPOIN1 = 54, NPOIN2 = 8,
+ & PLABLO = 0.1D0, PTHRE = 5.0D0, PLABHI = 500.0D0)
+ PARAMETER (NPOINT = NPOIN1+NPOIN2+1)
+
+ LOGICAL LFIRST
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+**PHOJET105a
+C PARAMETER (IEETAB=10)
+C COMMON /XSETAB/ SIGTAB(4,70,IEETAB),SIGECM(4,IEETAB),ISIMAX
+**PHOJET110
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+
+ DIMENSION APL(NPOINT),ASIGTO(10,NPOINT),ASIGEL(10,NPOINT)
+ DIMENSION IDXDAT(25,2)
+*
+ DATA APL /
+ &-1.000,-0.969,-0.937,-0.906,-0.874,-0.843,-0.811,-0.780,-0.748,
+ &-0.717,-0.685,-0.654,-0.622,-0.591,-0.560,-0.528,-0.497,-0.465,
+ &-0.434,-0.402,-0.371,-0.339,-0.308,-0.276,-0.245,-0.213,-0.182,
+ &-0.151,-0.119,-0.088,-0.056,-0.025, 0.007, 0.038, 0.070, 0.101,
+ & 0.133, 0.164, 0.196, 0.227, 0.258, 0.290, 0.321, 0.353, 0.384,
+ & 0.416, 0.447, 0.479, 0.510, 0.542, 0.573, 0.605, 0.636, 0.668,
+ & 0.699, 0.949, 1.199, 1.449, 1.699, 1.949, 2.199, 2.449, 2.699/
+*
+* total cross sections:
+* p p
+ DATA (ASIGTO(1,K),K=1,NPOINT) /
+ & 2.837, 2.760, 2.686, 2.614, 2.543, 2.472, 2.401, 2.329, 2.255,
+ & 2.180, 2.103, 2.030, 1.968, 1.919, 1.861, 1.775, 1.698, 1.646,
+ & 1.577, 1.518, 1.462, 1.420, 1.393, 1.375, 1.363, 1.356, 1.352,
+ & 1.350, 1.351, 1.359, 1.381, 1.410, 1.444, 1.487, 1.544, 1.596,
+ & 1.650, 1.672, 1.676, 1.677, 1.677, 1.675, 1.675, 1.669, 1.664,
+ & 1.658, 1.653, 1.645, 1.640, 1.634, 1.630, 1.625, 1.620, 1.617,
+ & 1.614, 1.602, 1.594, 1.589, 1.581, 1.583, 1.588, 1.596, 1.603/
+* pbar p
+ DATA (ASIGTO(2,K),K=1,NPOINT) /
+ & 2.778, 2.759, 2.739, 2.718, 2.697, 2.675, 2.651, 2.626, 2.598,
+ & 2.569, 2.537, 2.502, 2.471, 2.443, 2.420, 2.389, 2.361, 2.329,
+ & 2.313, 2.304, 2.268, 2.244, 2.222, 2.212, 2.178, 2.162, 2.151,
+ & 2.132, 2.109, 2.097, 2.089, 2.078, 2.063, 2.049, 2.035, 2.024,
+ & 2.014, 2.004, 1.993, 1.981, 1.970, 1.958, 1.946, 1.933, 1.921,
+ & 1.909, 1.894, 1.885, 1.871, 1.854, 1.836, 1.825, 1.816, 1.802,
+ & 1.790, 1.744, 1.694, 1.663, 1.642, 1.614, 1.623, 1.623, 1.630/
+* n p
+ DATA (ASIGTO(3,K),K=1,NPOINT) /
+ & 3.192, 3.145, 3.097, 3.047, 2.995, 2.940, 2.883, 2.824, 2.763,
+ & 2.700, 2.634, 2.565, 2.494, 2.420, 2.344, 2.269, 2.196, 2.115,
+ & 2.048, 1.964, 1.906, 1.842, 1.779, 1.719, 1.656, 1.604, 1.569,
+ & 1.547, 1.534, 1.526, 1.522, 1.520, 1.525, 1.536, 1.550, 1.566,
+ & 1.578, 1.580, 1.581, 1.584, 1.590, 1.598, 1.605, 1.608, 1.609,
+ & 1.608, 1.608, 1.608, 1.608, 1.608, 1.607, 1.606, 1.606, 1.605,
+ & 1.606, 1.599, 1.588, 1.587, 1.586, 1.589, 1.592, 1.597, 1.600/
+* pi+ p
+ DATA (ASIGTO(4,K),K=1,NPOINT) /
+ & 0.643, 0.786, 0.929, 1.074, 1.199, 1.272, 1.340, 1.484, 1.610,
+ & 1.750, 1.881, 2.014, 2.178, 2.244, 2.301, 2.309, 2.219, 2.118,
+ & 2.001, 1.875, 1.801, 1.665, 1.609, 1.484, 1.412, 1.334, 1.195,
+ & 1.160, 1.166, 1.208, 1.309, 1.356, 1.394, 1.406, 1.419, 1.473,
+ & 1.540, 1.596, 1.570, 1.533, 1.516, 1.484, 1.471, 1.478, 1.492,
+ & 1.497, 1.491, 1.479, 1.465, 1.453, 1.449, 1.450, 1.444, 1.428,
+ & 1.422, 1.406, 1.384, 1.369, 1.364, 1.369, 1.374, 1.388, 1.395/
+* pi- p
+ DATA (ASIGTO(5,K),K=1,NPOINT) /
+ & 0.458, 0.540, 0.626, 0.718, 0.819, 0.933, 1.063, 1.208, 1.226,
+ & 1.436, 1.470, 1.594, 1.708, 1.786, 1.852, 1.836, 1.763, 1.679,
+ & 1.590, 1.492, 1.445, 1.426, 1.423, 1.433, 1.473, 1.506, 1.547,
+ & 1.660, 1.671, 1.545, 1.591, 1.687, 1.808, 1.656, 1.582, 1.543,
+ & 1.562, 1.560, 1.537, 1.540, 1.549, 1.557, 1.557, 1.551, 1.535,
+ & 1.527, 1.511, 1.510, 1.507, 1.500, 1.491, 1.483, 1.478, 1.468,
+ & 1.463, 1.435, 1.408, 1.394, 1.384, 1.380, 1.383, 1.393, 1.411/
+* K+ p
+ DATA (ASIGTO(6,K),K=1,NPOINT) /
+ & 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097,
+ & 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097,
+ & 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.097, 1.096, 1.095,
+ & 1.098, 1.105, 1.111, 1.139, 1.169, 1.209, 1.248, 1.259, 1.268,
+ & 1.262, 1.257, 1.254, 1.252, 1.250, 1.249, 1.246, 1.244, 1.244,
+ & 1.243, 1.240, 1.238, 1.237, 1.236, 1.235, 1.235, 1.236, 1.236,
+ & 1.236, 1.233, 1.238, 1.248, 1.257, 1.272, 1.292, 1.311, 1.336/
+* K- p
+ DATA (ASIGTO(7,K),K=1,NPOINT) /
+ & 2.003, 2.002, 2.001, 2.000, 1.999, 1.998, 1.998, 1.997, 1.997,
+ & 1.996, 1.995, 1.993, 1.990, 1.992, 1.974, 1.912, 1.865, 1.847,
+ & 1.896, 1.950, 1.827, 1.681, 1.637, 1.616, 1.589, 1.545, 1.543,
+ & 1.532, 1.603, 1.604, 1.616, 1.658, 1.700, 1.658, 1.595, 1.508,
+ & 1.493, 1.514, 1.531, 1.523, 1.501, 1.479, 1.474, 1.467, 1.463,
+ & 1.450, 1.444, 1.435, 1.426, 1.424, 1.423, 1.415, 1.401, 1.396,
+ & 1.384, 1.364, 1.330, 1.313, 1.310, 1.309, 1.317, 1.329, 1.338/
+* K+ n
+ DATA (ASIGTO(8,K),K=1,NPOINT) /
+ & 0.176, 0.229, 0.282, 0.334, 0.386, 0.437, 0.487, 0.536, 0.584,
+ & 0.631, 0.675, 0.719, 0.760, 0.799, 0.835, 0.870, 0.901, 0.931,
+ & 0.958, 0.984, 1.008, 1.032, 1.056, 1.079, 1.102, 1.125, 1.147,
+ & 1.168, 1.187, 1.205, 1.224, 1.248, 1.279, 1.315, 1.324, 1.301,
+ & 1.285, 1.279, 1.274, 1.273, 1.272, 1.271, 1.267, 1.263, 1.261,
+ & 1.259, 1.256, 1.252, 1.247, 1.244, 1.241, 1.240, 1.240, 1.240,
+ & 1.241, 1.243, 1.245, 1.253, 1.265, 1.275, 1.293, 1.314, 1.342/
+* K- n
+ DATA (ASIGTO(9,K),K=1,NPOINT) /
+ & 1.778, 1.778, 1.778, 1.778, 1.778, 1.778, 1.778, 1.778, 1.778,
+ & 1.778, 1.778, 1.778, 1.778, 1.778, 1.779, 1.779, 1.778, 1.773,
+ & 1.765, 1.746, 1.703, 1.646, 1.561, 1.488, 1.454, 1.437, 1.437,
+ & 1.458, 1.505, 1.561, 1.588, 1.593, 1.581, 1.551, 1.500, 1.454,
+ & 1.427, 1.408, 1.390, 1.372, 1.361, 1.356, 1.351, 1.347, 1.343,
+ & 1.341, 1.340, 1.338, 1.337, 1.335, 1.334, 1.332, 1.331, 1.330,
+ & 1.330, 1.313, 1.303, 1.288, 1.288, 1.297, 1.305, 1.320, 1.342/
+* Lambda p
+ DATA (ASIGTO(10,K),K=1,NPOINT) /
+ & 2.648, 2.598, 2.548, 2.498, 2.446, 2.394, 2.340, 2.283, 2.224,
+ & 2.160, 2.091, 2.015, 1.936, 1.858, 1.785, 1.720, 1.669, 1.629,
+ & 1.599, 1.576, 1.558, 1.543, 1.530, 1.520, 1.512, 1.505, 1.499,
+ & 1.495, 1.495, 1.497, 1.504, 1.514, 1.525, 1.536, 1.550, 1.567,
+ & 1.578, 1.580, 1.581, 1.584, 1.590, 1.598, 1.605, 1.608, 1.609,
+ & 1.608, 1.608, 1.608, 1.608, 1.608, 1.607, 1.606, 1.606, 1.605,
+ & 1.606, 1.599, 1.588, 1.587, 1.586, 1.589, 1.592, 1.597, 1.600/
+*
+* elastic cross sections:
+* p p
+ DATA (ASIGEL(1,K),K=1,NPOINT) /
+ & 2.837, 2.760, 2.686, 2.614, 2.543, 2.472, 2.401, 2.329, 2.255,
+ & 2.180, 2.103, 2.030, 1.968, 1.919, 1.861, 1.775, 1.698, 1.646,
+ & 1.577, 1.518, 1.462, 1.420, 1.393, 1.374, 1.360, 1.353, 1.350,
+ & 1.351, 1.356, 1.362, 1.369, 1.376, 1.384, 1.385, 1.399, 1.397,
+ & 1.389, 1.385, 1.379, 1.366, 1.358, 1.344, 1.320, 1.294, 1.275,
+ & 1.260, 1.248, 1.235, 1.219, 1.199, 1.172, 1.144, 1.126, 1.115,
+ & 1.104, 1.013, 0.962, 0.905, 0.869, 0.845, 0.846, 0.850, 0.868/
+* pbar p
+ DATA (ASIGEL(2,K),K=1,NPOINT) /
+ & 1.987, 1.985, 1.983, 1.980, 1.978, 1.975, 1.971, 1.968, 1.963,
+ & 1.958, 1.951, 1.944, 1.935, 1.925, 1.914, 1.902, 1.889, 1.875,
+ & 1.859, 1.845, 1.834, 1.817, 1.792, 1.769, 1.754, 1.738, 1.720,
+ & 1.702, 1.688, 1.676, 1.667, 1.659, 1.652, 1.645, 1.640, 1.636,
+ & 1.620, 1.591, 1.562, 1.546, 1.540, 1.524, 1.496, 1.475, 1.457,
+ & 1.429, 1.402, 1.373, 1.344, 1.330, 1.306, 1.294, 1.265, 1.228,
+ & 1.204, 1.086, 0.977, 0.933, 0.914, 0.850, 0.862, 0.848, 0.845/
+* n p
+ DATA (ASIGEL(3,K),K=1,NPOINT) /
+ & 3.192, 3.145, 3.097, 3.047, 2.995, 2.940, 2.883, 2.824, 2.763,
+ & 2.700, 2.634, 2.565, 2.494, 2.420, 2.344, 2.269, 2.196, 2.115,
+ & 2.048, 1.964, 1.906, 1.842, 1.779, 1.719, 1.656, 1.604, 1.569,
+ & 1.544, 1.527, 1.514, 1.504, 1.495, 1.486, 1.476, 1.466, 1.454,
+ & 1.440, 1.425, 1.409, 1.392, 1.375, 1.358, 1.340, 1.322, 1.304,
+ & 1.285, 1.267, 1.250, 1.234, 1.219, 1.202, 1.181, 1.158, 1.136,
+ & 1.116, 0.727,-2.128, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0/
+* pi+ p
+ DATA (ASIGEL(4,K),K=1,NPOINT) /
+ & 0.643, 0.786, 0.929, 1.074, 1.199, 1.272, 1.340, 1.484, 1.610,
+ & 1.750, 1.881, 2.014, 2.178, 2.244, 2.301, 2.309, 2.219, 2.118,
+ & 2.001, 1.875, 1.801, 1.664, 1.610, 1.479, 1.423, 1.299, 1.166,
+ & 1.097, 1.020, 0.958, 0.914, 1.013, 1.088, 1.153, 1.167, 1.235,
+ & 1.240, 1.237, 1.202, 1.135, 1.090, 1.026, 0.975, 0.941, 0.904,
+ & 0.894, 0.884, 0.862, 0.850, 0.845, 0.827, 0.805, 0.789, 0.776,
+ & 0.763, 0.686, 0.626, 0.562, 0.505, 0.518, 0.525, 0.528, 0.528/
+* pi- p
+ DATA (ASIGEL(5,K),K=1,NPOINT) /
+ & 0.266, 0.278, 0.294, 0.320, 0.360, 0.419, 0.503, 0.608, 0.727,
+ & 0.850, 0.968, 1.071, 1.167, 1.305, 1.369, 1.404, 1.446, 1.217,
+ & 1.112, 1.071, 1.014, 1.002, 0.996, 1.008, 1.070, 1.126, 1.209,
+ & 1.300, 1.281, 1.188, 1.156, 1.341, 1.423, 1.314, 1.171, 1.140,
+ & 1.106, 1.071, 1.011, 1.037, 1.026, 1.024, 0.988, 0.953, 0.895,
+ & 0.894, 0.880, 0.871, 0.864, 0.853, 0.837, 0.820, 0.809, 0.800,
+ & 0.782, 0.674, 0.612, 0.530, 0.521, 0.528, 0.524, 0.542, 0.569/
+* K+ p
+ DATA (ASIGEL(6,K),K=1,NPOINT) /
+ & 1.064, 1.065, 1.065, 1.066, 1.066, 1.066, 1.066, 1.066, 1.066,
+ & 1.065, 1.064, 1.063, 1.062, 1.062, 1.062, 1.064, 1.066, 1.070,
+ & 1.076, 1.082, 1.088, 1.096, 1.103, 1.104, 1.104, 1.102, 1.093,
+ & 1.087, 1.084, 1.079, 1.075, 1.067, 1.058, 1.040, 1.029, 1.012,
+ & 1.003, 0.985, 0.935, 0.909, 0.880, 0.846, 0.790, 0.771, 0.759,
+ & 0.743, 0.718, 0.681, 0.666, 0.645, 0.622, 0.606, 0.594, 0.584,
+ & 0.575, 0.513, 0.453, 0.403, 0.356, 0.365, 0.389, 0.430, 0.477/
+* K- p
+ DATA (ASIGEL(7,K),K=1,NPOINT) /
+ & 1.941, 1.936, 1.931, 1.926, 1.919, 1.912, 1.903, 1.892, 1.878,
+ & 1.863, 1.844, 1.821, 1.791, 1.755, 1.713, 1.666, 1.615, 1.561,
+ & 1.533, 1.531, 1.518, 1.511, 1.452, 1.339, 1.265, 1.233, 1.188,
+ & 1.184, 1.236, 1.316, 1.333, 1.336, 1.333, 1.277, 1.216, 1.077,
+ & 1.018, 0.912, 0.926, 0.920, 0.910, 0.894, 0.830, 0.825, 0.800,
+ & 0.788, 0.747, 0.703, 0.707, 0.689, 0.643, 0.633, 0.635, 0.618,
+ & 0.584, 0.579, 0.461, 0.403, 0.405, 0.399, 0.408, 0.418, 0.413/
+* K+ n
+ DATA (ASIGEL(8,K),K=1,NPOINT) /
+ & 0.176, 0.229, 0.282, 0.334, 0.386, 0.437, 0.487, 0.536, 0.584,
+ & 0.631, 0.676, 0.719, 0.760, 0.799, 0.835, 0.870, 0.901, 0.931,
+ & 0.958, 0.984, 1.008, 1.032, 1.056, 1.079, 1.103, 1.126, 1.148,
+ & 1.168, 1.187, 1.205, 1.223, 1.248, 1.282, 1.269, 1.185, 1.111,
+ & 1.063, 1.031, 0.998, 0.964, 0.928, 0.889, 0.849, 0.814, 0.785,
+ & 0.760, 0.738, 0.720, 0.703, 0.688, 0.674, 0.660, 0.648, 0.635,
+ & 0.624, 0.536, 0.473, 0.442, 0.428, 0.428, 0.436, 0.453, 0.477/
+* K- n
+ DATA (ASIGEL(9,K),K=1,NPOINT) /
+ & 1.613, 1.613, 1.613, 1.613, 1.613, 1.613, 1.613, 1.613, 1.613,
+ & 1.613, 1.613, 1.613, 1.612, 1.613, 1.614, 1.614, 1.612, 1.606,
+ & 1.593, 1.564, 1.498, 1.402, 1.240, 1.071, 0.977, 0.922, 0.914,
+ & 0.961, 1.077, 1.214, 1.271, 1.290, 1.281, 1.217, 1.096, 0.979,
+ & 0.896, 0.822, 0.736, 0.655, 0.608, 0.591, 0.580, 0.569, 0.559,
+ & 0.550, 0.540, 0.531, 0.522, 0.514, 0.507, 0.500, 0.494, 0.489,
+ & 0.485, 0.477, 0.477, 0.477, 0.477, 0.477, 0.477, 0.477, 0.477/
+* Lambda p
+ DATA (ASIGEL(10,K),K=1,NPOINT) /
+ & 2.648, 2.598, 2.548, 2.498, 2.446, 2.394, 2.340, 2.283, 2.224,
+ & 2.160, 2.091, 2.015, 1.936, 1.858, 1.785, 1.720, 1.669, 1.630,
+ & 1.600, 1.577, 1.558, 1.542, 1.528, 1.518, 1.510, 1.505, 1.502,
+ & 1.501, 1.500, 1.499, 1.496, 1.491, 1.485, 1.477, 1.466, 1.454,
+ & 1.440, 1.425, 1.408, 1.392, 1.375, 1.358, 1.340, 1.322, 1.304,
+ & 1.285, 1.267, 1.250, 1.234, 1.219, 1.202, 1.181, 1.158, 1.136,
+ & 1.116, 0.727,-2.128, -10.0, -10.0, -10.0, -10.0, -10.0, -10.0/
+
+ DATA (IDXDAT(K,1),K=1,25) /
+ & 1, 2, 0, 0, 0, 0, 0, 3, 2, 0, 0,67, 4, 5, 6, 7,10, 2,67, 3,
+ & 1, 3,45, 8, 9/
+ DATA (IDXDAT(K,2),K=1,25) /
+ & 3, 2, 0, 0, 0, 0, 0, 1, 2, 0, 0,89, 5, 4, 8, 9, 1, 2,89, 1,
+ & 3, 1,45, 6, 7/
+
+ DATA LFIRST /.TRUE./
+
+ IF (LFIRST) THEN
+ APLABL = LOG10(PLABLO)
+ APLABH = LOG10(PLABHI)
+ APTHRE = LOG10(PTHRE)
+ ADP1 = (APTHRE-APLABL)/DBLE(NPOIN1)
+ ADP2 = (APLABH-APTHRE)/DBLE(NPOIN2)
+ DUM0 = ZERO
+ PHOPLA = PLABHI
+ PHOELA = SQRT(AAM(1)**2+PHOPLA**2)
+ ECMS = SQRT(2.0D0*AAM(1)**2+2.0D0*AAM(1)*PHOELA)
+ IF (MCGENE.EQ.2) THEN
+ IF (ECMS.LE.SIGECM(1,ISIMAX)) THEN
+ CALL DT_PHOXS(1,1,DUM0,PHOPLA,PHOSTO,PHOSIN,DUM1,DUM2,0)
+ ELSE
+ CALL DT_PHOXS(1,1,DUM0,PHOPLA,PHOSTO,PHOSIN,DUM1,DUM2,1)
+ ENDIF
+ ELSE
+ CALL DT_PHOXS(1,1,DUM0,PHOPLA,PHOSTO,PHOSIN,DUM1,DUM2,1)
+ ENDIF
+ PHOSEL = PHOSTO-PHOSIN
+ APHOST = LOG10(PHOSTO)
+ APHOSE = LOG10(PHOSEL)
+ LFIRST = .FALSE.
+ ENDIF
+ STOT = ZERO
+ SELA = ZERO
+ PLAB = PL
+ ECMS = ECM
+ IF ( (IP.LT.1).OR.((IT.NE.1).AND.(IT.NE.8)) ) THEN
+ WRITE(LOUT,1000) IP,IT
+ 1000 FORMAT(1X,'DT_XSHN: cross sections not implemented for ',
+ & 'proj/target',2I4)
+ STOP
+ ENDIF
+
+ IF ((PLAB.LE.ZERO).AND.(ECMS.GT.ZERO)) THEN
+ ELAB = (ECMS**2-AAM(IP)**2-AAM(IT)**2)/(2.0D0*AAM(IT))
+ PLAB = SQRT((ELAB-AAM(IP))*(ELAB+AAM(IP)))
+ ELSEIF ((PLAB.LE.ZERO).AND.(ECMS.LE.ZERO)) THEN
+ WRITE(LOUT,1001) PLAB,ECMS
+ 1001 FORMAT(1X,'DT_XSHN: invalid momentum/cm-energy ',2E15.5)
+ STOP
+ ENDIF
+
+* index of spectrum
+ IDXP = IP
+ IF (IP.GT.25) THEN
+ IF (AAM(IP).GT.ZERO) THEN
+ IF (ABS(IIBAR(IP)).GT.0) THEN
+ IDXP = 1
+ ELSE
+ IDXP = 13
+ ENDIF
+ ELSE
+ IDXP = 7
+ ENDIF
+ ENDIF
+ IDXT = 1
+ IF (IT.EQ.8) IDXT = 2
+ IDXS = IDXDAT(IDXP,IDXT)
+ IF (IDXS.EQ.0) RETURN
+
+* compute momentum bin indices
+ IF (PLAB.LT.PLABLO) THEN
+ IDX0 = 1
+ IDX1 = 1
+ ELSEIF (PLAB.GE.PLABHI) THEN
+ IDX0 = NPOINT
+ IDX1 = NPOINT
+ ELSE
+ APLAB = LOG10(PLAB)
+ IF ((PLAB.GE.PLABLO).AND.(PLAB.LT.PTHRE )) THEN
+ IDX0 = INT((APLAB-APLABL)/ADP1)+1
+ ELSEIF ((PLAB.GE.PTHRE ).AND.(PLAB.LT.PLABHI)) THEN
+ IDX0 = INT((APLAB-APTHRE)/ADP2)+NPOIN1+1
+ ENDIF
+ IDX1 = IDX0+1
+ ENDIF
+
+* interpolate cross section
+ IF (IDXS.GT.10) THEN
+ IDXS1 = IDXS/10
+ IDXS2 = IDXS-10*IDXS1
+ IF (IDX0.EQ.IDX1) THEN
+ IF (IDX0.EQ.1) THEN
+ ASTOT = 0.5D0*(ASIGTO(IDXS1,IDX0)+ASIGTO(IDXS2,IDX0))
+ ASELA = 0.5D0*(ASIGEL(IDXS1,IDX0)+ASIGEL(IDXS2,IDX0))
+ ELSE
+ DUM0 = ZERO
+ CALL DT_PHOXS(1,1,DUM0,PLAB,PHOSTO,PHOSIN,DUM1,DUM2,0)
+ PHOSEL = PHOSTO-PHOSIN
+ ASTOT1 = ASIGTO(IDXS1,NPOINT)-APHOST+LOG10(PHOSTO)
+ ASELA1 = ASIGEL(IDXS1,NPOINT)-APHOSE+LOG10(PHOSEL)
+ ASTOT2 = ASIGTO(IDXS2,NPOINT)-APHOST+LOG10(PHOSTO)
+ ASELA2 = ASIGEL(IDXS2,NPOINT)-APHOSE+LOG10(PHOSEL)
+ ASTOT = 0.5D0*(ASTOT1+ASTOT2)
+ ASELA = 0.5D0*(ASELA1+ASELA2)
+ ENDIF
+ ELSE
+ FAC = (APLAB-APL(IDX0))/(APL(IDX1)-APL(IDX0))
+ ASTOT1 = ASIGTO(IDXS1,IDX0)+
+ & FAC*(ASIGTO(IDXS1,IDX1)-ASIGTO(IDXS1,IDX0))
+ ASTOT2 = ASIGTO(IDXS2,IDX0)+
+ & FAC*(ASIGTO(IDXS2,IDX1)-ASIGTO(IDXS2,IDX0))
+ ASTOT = 0.5D0*(ASTOT1+ASTOT2)
+ ASELA1 = ASIGEL(IDXS1,IDX0)+
+ & FAC*(ASIGEL(IDXS1,IDX1)-ASIGEL(IDXS1,IDX0))
+ ASELA2 = ASIGEL(IDXS2,IDX0)+
+ & FAC*(ASIGEL(IDXS2,IDX1)-ASIGEL(IDXS2,IDX0))
+ ASELA = 0.5D0*(ASELA1+ASELA2)
+ ENDIF
+ ELSE
+ IF (IDX0.EQ.IDX1) THEN
+ IF (IDX0.EQ.1) THEN
+ ASTOT = ASIGTO(IDXS,IDX0)
+ ASELA = ASIGEL(IDXS,IDX0)
+ ELSE
+ DUM0 = ZERO
+ CALL DT_PHOXS(1,1,DUM0,PLAB,PHOSTO,PHOSIN,DUM1,DUM2,0)
+ PHOSEL = PHOSTO-PHOSIN
+ ASTOT = ASIGTO(IDXS,NPOINT)-APHOST+LOG10(PHOSTO)
+ ASELA = ASIGEL(IDXS,NPOINT)-APHOSE+LOG10(PHOSEL)
+ ENDIF
+ ELSE
+ FAC = (APLAB-APL(IDX0))/(APL(IDX1)-APL(IDX0))
+ ASTOT = ASIGTO(IDXS,IDX0)+
+ & FAC*(ASIGTO(IDXS,IDX1)-ASIGTO(IDXS,IDX0))
+ ASELA = ASIGEL(IDXS,IDX0)+
+ & FAC*(ASIGEL(IDXS,IDX1)-ASIGEL(IDXS,IDX0))
+ ENDIF
+ ENDIF
+ STOT = 10.0D0**ASTOT
+ SELA = 10.0D0**ASELA
+
+ RETURN
+ END
+*
+*===sihnab===============================================================*
+*
+CDECK ID>, DT_SIHNAB
+ SUBROUTINE DT_SIHNAB(IDP,IDT,PLAB,SIGABS)
+
+**********************************************************************
+* Pion 2-nucleon absorption cross sections. *
+* (sigma_tot for pi+ d --> p p, pi- d --> n n *
+* taken from Ritchie PRC 28 (1983) 926 ) *
+* This version dated 18.05.96 is written by S. Roesler *
+**********************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,TINY3=1.0D-3)
+ PARAMETER (AMPR = 938.0D0,
+ & AMPI = 140.0D0,
+ & AMDE = TWO*AMPR,
+ & A = -1.2D0,
+ & B = 3.5D0,
+ & C = 7.4D0,
+ & D = 5600.0D0,
+ & ER = 2136.0D0)
+
+ SIGABS = ZERO
+ IF ( ((IDP.NE.13).AND.(IDP.NE.14).AND.(IDP.NE.23))
+ & .OR.((IDT.NE.1).AND.(IDT.NE.8)) ) RETURN
+ PTOT = PLAB*1.0D3
+ EKIN = SQRT(AMPI**2+PTOT**2)-AMPI
+ IF ((EKIN.LT.TINY3).OR.(EKIN.GT.400.0D0)) RETURN
+ ECM = SQRT( (AMPI+AMDE)**2+TWO*EKIN*AMDE )
+ SIGABS = A+B/SQRT(EKIN)+C*1.0D4/((ECM-ER)**2+D)
+* approximate 3N-abs., I=1-abs. etc.
+ SIGABS = SIGABS/0.40D0
+* pi0-absorption (rough approximation!!)
+ IF (IDP.EQ.23) SIGABS = 0.5D0*SIGABS
+
+ RETURN
+ END
+*
+*===sigemu=============================================================*
+*
+CDECK ID>, DT_SIGEMU
+ SUBROUTINE DT_SIGEMU
+
+************************************************************************
+* Combined cross section for target compounds. *
+* This version dated 6.4.98 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY2=1.0D-2,ZERO=0.0D0,DLARGE=1.0D10,
+ & OHALF=0.5D0,ONE=1.0D0)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+
+ IF (MCGENE.NE.4) THEN
+ WRITE(LOUT,'(A)') ' DT_SIGEMU: Combined cross sections'
+ WRITE(LOUT,'(15X,A)') '-----------------------'
+ ENDIF
+ DO 1 IE=1,NEBINI
+ DO 2 IQ=1,NQBINI
+ SIGTOT = ZERO
+ SIGELA = ZERO
+ SIGQEP = ZERO
+ SIGQET = ZERO
+ SIGQE2 = ZERO
+ SIGPRO = ZERO
+ SIGDEL = ZERO
+ SIGDQE = ZERO
+ ERRTOT = ZERO
+ ERRELA = ZERO
+ ERRQEP = ZERO
+ ERRQET = ZERO
+ ERRQE2 = ZERO
+ ERRPRO = ZERO
+ ERRDEL = ZERO
+ ERRDQE = ZERO
+ IF (NCOMPO.GT.0) THEN
+ DO 3 IC=1,NCOMPO
+ SIGTOT = SIGTOT+EMUFRA(IC)*XSTOT(IE,IQ,IC)
+ SIGELA = SIGELA+EMUFRA(IC)*XSELA(IE,IQ,IC)
+ SIGQEP = SIGQEP+EMUFRA(IC)*XSQEP(IE,IQ,IC)
+ SIGQET = SIGQET+EMUFRA(IC)*XSQET(IE,IQ,IC)
+ SIGQE2 = SIGQE2+EMUFRA(IC)*XSQE2(IE,IQ,IC)
+ SIGPRO = SIGPRO+EMUFRA(IC)*XSPRO(IE,IQ,IC)
+ SIGDEL = SIGDEL+EMUFRA(IC)*XSDEL(IE,IQ,IC)
+ SIGDQE = SIGDQE+EMUFRA(IC)*XSDQE(IE,IQ,IC)
+ ERRTOT = ERRTOT+XETOT(IE,IQ,IC)**2
+ ERRELA = ERRELA+XEELA(IE,IQ,IC)**2
+ ERRQEP = ERRQEP+XEQEP(IE,IQ,IC)**2
+ ERRQET = ERRQET+XEQET(IE,IQ,IC)**2
+ ERRQE2 = ERRQE2+XEQE2(IE,IQ,IC)**2
+ ERRPRO = ERRPRO+XEPRO(IE,IQ,IC)**2
+ ERRDEL = ERRDEL+XEDEL(IE,IQ,IC)**2
+ ERRDQE = ERRDQE+XEDQE(IE,IQ,IC)**2
+ 3 CONTINUE
+ ERRTOT = SQRT(ERRTOT)
+ ERRELA = SQRT(ERRELA)
+ ERRQEP = SQRT(ERRQEP)
+ ERRQET = SQRT(ERRQET)
+ ERRQE2 = SQRT(ERRQE2)
+ ERRPRO = SQRT(ERRPRO)
+ ERRDEL = SQRT(ERRDEL)
+ ERRDQE = SQRT(ERRDQE)
+ ELSE
+ SIGTOT = XSTOT(IE,IQ,1)
+ SIGELA = XSELA(IE,IQ,1)
+ SIGQEP = XSQEP(IE,IQ,1)
+ SIGQET = XSQET(IE,IQ,1)
+ SIGQE2 = XSQE2(IE,IQ,1)
+ SIGPRO = XSPRO(IE,IQ,1)
+ SIGDEL = XSDEL(IE,IQ,1)
+ SIGDQE = XSDQE(IE,IQ,1)
+ ERRTOT = XETOT(IE,IQ,1)
+ ERRELA = XEELA(IE,IQ,1)
+ ERRQEP = XEQEP(IE,IQ,1)
+ ERRQET = XEQET(IE,IQ,1)
+ ERRQE2 = XEQE2(IE,IQ,1)
+ ERRPRO = XEPRO(IE,IQ,1)
+ ERRDEL = XEDEL(IE,IQ,1)
+ ERRDQE = XEDQE(IE,IQ,1)
+ ENDIF
+ IF (MCGENE.NE.4) THEN
+ WRITE(LOUT,1000) ECMNN(IE),Q2G(IQ)
+ 1000 FORMAT(/,1X,'E_cm =',F9.1,' GeV Q^2 =',F6.1,' GeV^2 :',/)
+ WRITE(LOUT,1001) SIGTOT,ERRTOT
+ 1001 FORMAT(1X,'total',32X,F10.4,' +-',F11.5,' mb')
+ WRITE(LOUT,1002) SIGELA,ERRELA
+ 1002 FORMAT(1X,'elastic',30X,F10.4,' +-',F11.5,' mb')
+ WRITE(LOUT,1003) SIGQEP,ERRQEP
+ 1003 FORMAT(1X,'quasi-elastic (A+B-->A+X)',12X,F10.4,' +-',
+ & F11.5,' mb')
+ WRITE(LOUT,1004) SIGQET,ERRQET
+ 1004 FORMAT(1X,'quasi-elastic (A+B-->X+B)',12X,F10.4,' +-',
+ & F11.5,' mb')
+ WRITE(LOUT,1005) SIGQE2,ERRQE2
+ 1005 FORMAT(1X,'quasi-elastic (A+B-->X, excl. 2-4)',3X,F10.4,
+ & ' +-',F11.5,' mb')
+ WRITE(LOUT,1006) SIGPRO,ERRPRO
+ 1006 FORMAT(1X,'production',27X,F10.4,' +-',F11.5,' mb')
+ WRITE(LOUT,1007) SIGDEL,ERRDEL
+ 1007 FORMAT(1X,'diff-el ',27X,F10.4,' +-',F11.5,' mb')
+ WRITE(LOUT,1008) SIGDQE,ERRDQE
+ 1008 FORMAT(1X,'diff-qel ',27X,F10.4,' +-',F11.5,' mb')
+ ENDIF
+
+ 2 CONTINUE
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===sigga==============================================================*
+*
+CDECK ID>, DT_SIGGA
+ SUBROUTINE DT_SIGGA(NTI,XI,Q2I,ECMI,XNUI,STOT,ETOT,SIN,EIN,STOT0)
+
+************************************************************************
+* Total/inelastic photon-nucleus cross sections. *
+* !!!! Overwrites SHMAKI-initialization. Do not use it during *
+* production runs !!!! *
+* This version dated 27.03.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY2=1.0D-2,ZERO=0.0D0,DLARGE=1.0D10,
+ & OHALF=0.5D0,ONE=1.0D0)
+ PARAMETER (AMPROT = 0.938D0)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+
+ NT = NTI
+ X = XI
+ Q2 = Q2I
+ ECM = ECMI
+ XNU = XNUI
+ IF ((ECMI.LE.ZERO).AND.(XNUI.GT.ZERO))
+ & ECM = SQRT(AMPROT**2-Q2+2.0D0*XNUI*AMPROT)
+ CALL DT_XSGLAU(1,NT,7,X,Q2,ECM,1,1,-1)
+ STOT = XSTOT(1,1,1)
+ ETOT = XETOT(1,1,1)
+ SIN = XSPRO(1,1,1)
+ EIN = XEPRO(1,1,1)
+
+ RETURN
+ END
+*
+*===siggat=============================================================*
+*
+CDECK ID>, DT_SIGGAT
+ SUBROUTINE DT_SIGGAT(Q2I,ECMI,STOT,NT)
+
+************************************************************************
+* Total/inelastic photon-nucleus cross sections. *
+* Uses pre-tabulated cross section. *
+* This version dated 29.07.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY14=1.0D-14,
+ & ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+
+ NTARG = ABS(NT)
+ I1 = 1
+ I2 = 1
+ RATE = ONE
+ IF (NEBINI.GT.1) THEN
+ IF (ECMI.GE.ECMNN(NEBINI)) THEN
+ I1 = NEBINI
+ I2 = NEBINI
+ RATE = ONE
+ ELSEIF (ECMI.GT.ECMNN(1)) THEN
+ DO 1 I=2,NEBINI
+ IF (ECMI.LT.ECMNN(I)) THEN
+ I1 = I-1
+ I2 = I
+ RATE = (ECMI-ECMNN(I1))/(ECMNN(I2)-ECMNN(I1))
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+ 2 CONTINUE
+ ENDIF
+ ENDIF
+ J1 = 1
+ J2 = 1
+ RATQ = ONE
+ IF (NQBINI.GT.1) THEN
+ IF (Q2I.GE.Q2G(NQBINI)) THEN
+ J1 = NQBINI
+ J2 = NQBINI
+ RATQ = ONE
+ ELSEIF (Q2I.GT.Q2G(1)) THEN
+ DO 3 I=2,NQBINI
+ IF (Q2I.LT.Q2G(I)) THEN
+ J1 = I-1
+ J2 = I
+ RATQ = LOG10( Q2I/MAX(Q2G(J1),TINY14))/
+ & LOG10(Q2G(J2)/MAX(Q2G(J1),TINY14))
+C RATQ = (Q2I-Q2G(J1))/(Q2G(J2)-Q2G(J1))
+ GOTO 4
+ ENDIF
+ 3 CONTINUE
+ 4 CONTINUE
+ ENDIF
+ ENDIF
+
+ STOT = XSTOT(I1,J1,NTARG)+
+ & RATE*(XSTOT(I2,J1,NTARG)-XSTOT(I1,J1,NTARG))+
+ & RATQ*(XSTOT(I1,J2,NTARG)-XSTOT(I1,J1,NTARG))+
+ & RATE*RATQ*(XSTOT(I2,J2,NTARG)-XSTOT(I1,J2,NTARG)+
+ & XSTOT(I1,J1,NTARG)-XSTOT(I2,J1,NTARG))
+
+ RETURN
+ END
+*
+*===sigano=============================================================*
+*
+CDECK ID>, DT_SANO
+ DOUBLE PRECISION FUNCTION DT_SANO(ECM)
+
+************************************************************************
+* This version dated 31.07.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY14=1.0D-14,
+ & ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (NE = 8)
+
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+
+ DIMENSION ECMANO(NE),FRAANO(NE),SIGHRD(NE)
+ DATA ECMANO /
+ & 0.200D+02,0.500D+02,0.100D+03,0.200D+03,0.500D+03,
+ & 0.100D+04,0.200D+04,0.500D+04
+ & /
+* fixed cut (3 GeV/c)
+ DATA FRAANO /
+ & 0.085D+00,0.114D+00,0.105D+00,0.091D+00,0.073D+00,
+ & 0.062D+00,0.054D+00,0.042D+00
+ & /
+ DATA SIGHRD /
+ & 4.0099D-04,3.3104D-03,1.1905D-02,3.6435D-02,1.3493D-01,
+ & 3.3086D-01,7.6255D-01,2.1319D+00
+ & /
+* running cut (based on obsolete Phojet-caluclations, bugs..)
+C DATA FRAANO /
+C & 0.251E+00,0.313E+00,0.279E+00,0.239E+00,0.186E+00,
+C & 0.167E+00,0.150E+00,0.131E+00
+C & /
+C DATA SIGHRD /
+C & 6.6569E-04,4.4949E-03,1.4837E-02,4.1466E-02,1.5071E-01,
+C & 2.5736E-01,4.5593E-01,8.2550E-01
+C & /
+
+ DT_SANO = ZERO
+ IF ((ISHAD(2).NE.1).OR.(IJPROJ.NE.7)) RETURN
+ J1 = 0
+ J2 = 0
+ RATE = ONE
+ IF (ECM.GE.ECMANO(NE)) THEN
+ J1 = NE
+ J2 = NE
+ ELSEIF (ECM.GT.ECMANO(1)) THEN
+ DO 1 IE=2,NE
+ IF (ECM.LT.ECMANO(IE)) THEN
+ J1 = IE-1
+ J2 = IE
+ RATE = LOG10(ECM/ECMANO(J1))/LOG10(ECMANO(J2)/ECMANO(J1))
+ GOTO 2
+ ENDIF
+ 1 CONTINUE
+ 2 CONTINUE
+ ENDIF
+ IF ((J1.GT.0).AND.(J2.GT.0)) THEN
+ AFRA1 = LOG10(MAX(FRAANO(J1)*SIGHRD(J1),TINY14))
+ AFRA2 = LOG10(MAX(FRAANO(J2)*SIGHRD(J2),TINY14))
+ DT_SANO = 10.0D0**(AFRA1+RATE*(AFRA2-AFRA1))
+ ENDIF
+
+ RETURN
+ END
+*
+*===siggp==============================================================*
+*
+CDECK ID>, DT_SIGGP
+ SUBROUTINE DT_SIGGP(XI,Q2I,ECMI,XNUI,STOT,SINE,SDIR)
+
+************************************************************************
+* Total/inelastic photon-nucleon cross sections. *
+* This version dated 30.04.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0,
+ & ALPHEM = ONE/137.0D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+
+**PHOJET105a
+C CHARACTER*8 MDLNA
+C COMMON /MODELS/ MDLNA(50),ISWMDL(50),PARMDL(200),IPAMDL(100)
+C PARAMETER (IEETAB=10)
+C COMMON /XSETAB/ SIGTAB(4,70,IEETAB),SIGECM(4,IEETAB),ISIMAX
+**PHOJET110
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+**
+
+C PARAMETER (NPOINT=80)
+ PARAMETER (NPOINT=16)
+ DIMENSION ABSZX(NPOINT),WEIGHT(NPOINT)
+
+ STOT = ZERO
+ SINE = ZERO
+ SDIR = ZERO
+
+ W2 = ECMI**2
+ IF ((ECMI.LE.ZERO).AND.(XNUI.GT.ZERO))
+ & W2 = AAM(1)**2-Q2I+TWO*XNUI*AAM(1)
+ Q2 = Q2I
+ X = XI
+* photoprod.
+ IF ((X.LE.ZERO).AND.(Q2.LE.ZERO).AND.(W2.GT.ZERO)) THEN
+ Q2 = 0.0001D0
+ X = Q2/(W2+Q2-AAM(1)**2)
+* DIS
+ ELSEIF ((X.LE.ZERO).AND.(Q2.GT.ZERO).AND.(W2.GT.ZERO)) THEN
+ X = Q2/(W2+Q2-AAM(1)**2)
+ ELSEIF ((X.GT.ZERO).AND.(Q2.LE.ZERO).AND.(W2.GT.ZERO)) THEN
+ Q2 = (W2-AAM(1)**2)*X/(ONE-X)
+ ELSEIF ((X.GT.ZERO).AND.(Q2.GT.ZERO)) THEN
+ W2 = Q2*(ONE-X)/X+AAM(1)**2
+ ELSE
+ WRITE(LOUT,*) 'SIGGP: inconsistent input ',W2,Q2,X
+ STOP
+ ENDIF
+ ECM = SQRT(W2)
+
+ IF (MODEGA.EQ.1) THEN
+ SCALE = SQRT(Q2)
+ CALL DT_CKMT(X,SCALE,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GL,F2,
+ & IDPDF)
+C W = SQRT(W2)
+
+C ALLMF2 = PHO_ALLM97(Q2,W)
+
+C write(*,*) 'X,Q2,W,F2,ALLMF2',X,Q2,W,F2,ALLMF2
+ STOT = TWOPI**2*ALPHEM/(Q2*(ONE-X)) * F2 *GEV2MB
+ SINE = ZERO
+ SDIR = ZERO
+ ELSEIF (MODEGA.EQ.2) THEN
+ IF (INTRGE(1).EQ.1) THEN
+ AMLO2 = (3.0D0*AAM(13))**2
+ ELSEIF (INTRGE(1).EQ.2) THEN
+ AMLO2 = AAM(33)**2
+ ELSE
+ AMLO2 = AAM(96)**2
+ ENDIF
+ IF (INTRGE(2).EQ.1) THEN
+ AMHI2 = W2/TWO
+ ELSEIF (INTRGE(2).EQ.2) THEN
+ AMHI2 = W2/4.0D0
+ ELSE
+ AMHI2 = W2
+ ENDIF
+ AMHI20 = (ECM-AAM(1))**2
+ IF (AMHI2.GE.AMHI20) AMHI2 = AMHI20
+ XAMLO = LOG( AMLO2+Q2 )
+ XAMHI = LOG( AMHI2+Q2 )
+**PHOJET105a
+C CALL GSET(XAMLO,XAMHI,NPOINT,ABSZX,WEIGHT)
+**PHOJET112
+
+ CALL PHO_GAUSET(XAMLO,XAMHI,NPOINT,ABSZX,WEIGHT)
+
+**
+ SUM = ZERO
+ DO 1 J=1,NPOINT
+ AM2 = EXP(ABSZX(J))-Q2
+ IF (AM2.LT.16.0D0) THEN
+ R = TWO
+ ELSEIF ((AM2.GE.16.0D0).AND.(AM2.LT.121.0D0)) THEN
+ R = 10.0D0/3.0D0
+ ELSE
+ R = 11.0D0/3.0D0
+ ENDIF
+C FAC = R * AM2/( (AM2+Q2)*(AM2+Q2+RL2) )
+ FAC = R * AM2/( (AM2+Q2)*(AM2+Q2+RL2) )
+ & * (ONE+EPSPOL*Q2/AM2)
+ SUM = SUM+WEIGHT(J)*FAC
+ 1 CONTINUE
+ SINE = SUM
+ SDIR = DT_SIGVP(X,Q2)
+ STOT = ALPHEM/(3.0D0*PI*(ONE-X))*SUM*SDIR
+ SDIR = SDIR/(0.588D0+RL2+Q2)
+C STOT = ALPHEM/(3.0D0*PI*(ONE-X))*SUM*DT_SIGVP(X,Q2)
+ ELSEIF (MODEGA.EQ.3) THEN
+ CALL DT_SIGGA(1,XI,Q2I,ECMI,ZERO,STOT,ETOT,SINE,EINE,DUM)
+ ELSEIF (MODEGA.EQ.4) THEN
+* load cross sections from PHOJET interpolation table
+ IP = 1
+ IF(ECM.LE.SIGECM(IP,1)) THEN
+ I1 = 1
+ I2 = 1
+ ELSEIF (ECM.LT.SIGECM(IP,ISIMAX)) THEN
+ DO 2 I=2,ISIMAX
+ IF (ECM.LE.SIGECM(IP,I)) GOTO 3
+ 2 CONTINUE
+ 3 CONTINUE
+ I1 = I-1
+ I2 = I
+ ELSE
+ WRITE(LOUT,'(/1X,A,2E12.3)')
+ & 'SIGGP:WARNING:TOO HIGH ENERGY',ECM,SIGECM(IP,ISIMAX)
+ I1 = ISIMAX
+ I2 = ISIMAX
+ ENDIF
+ FAC2 = ZERO
+ IF (I1.NE.I2) FAC2 = LOG(ECM/SIGECM(IP,I1))
+ & /LOG(SIGECM(IP,I2)/SIGECM(IP,I1))
+ FAC1 = ONE-FAC2
+* cross section dependence on photon virtuality
+ FSUP1 = ZERO
+ DO 4 I=1,3
+ FSUP1 = FSUP1+PARMDL(26+I)*(1.D0+Q2/(4.D0*PARMDL(30+I)))
+ & /(1.D0+Q2/PARMDL(30+I))**2
+ 4 CONTINUE
+ FSUP1 = FSUP1+PARMDL(30)/(1.D0+Q2/PARMDL(34))
+ FAC1 = FAC1*FSUP1
+ FAC2 = FAC2*FSUP1
+ FSUP2 = 1.0D0
+ STOT = FAC2*SIGTAB(IP, 1,I2)+FAC1*SIGTAB(IP, 1,I1)
+ SINE = FAC2*SIGTAB(IP,28,I2)+FAC1*SIGTAB(IP,28,I1)
+ SDIR = FAC2*SIGTAB(IP,29,I2)+FAC1*SIGTAB(IP,29,I1)
+**re:
+ STOT = STOT-SDIR
+**
+ SDIR = SDIR/(FSUP1*FSUP2)
+**re:
+ STOT = STOT+SDIR
+**
+ ENDIF
+
+ RETURN
+ END
+*
+*===sigvel=============================================================*
+*
+CDECK ID>, DT_SIGVEL
+ SUBROUTINE DT_SIGVEL(XI,Q2I,ECMI,XNUI,IDXV,SVEL,SIG1,SIG2)
+
+************************************************************************
+* Cross section for elastic vector meson production *
+* This version dated 10.05.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0,
+ & ALPHEM = ONE/137.0D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+
+ W2 = ECMI**2
+ IF ((ECMI.LE.ZERO).AND.(XNUI.GT.ZERO))
+ & W2 = AAM(1)**2-Q2I+TWO*XNUI*AAM(1)
+ Q2 = Q2I
+ X = XI
+* photoprod.
+ IF ((X.LE.ZERO).AND.(Q2.LE.ZERO).AND.(W2.GT.ZERO)) THEN
+ Q2 = 0.0001D0
+ X = Q2/(W2+Q2-AAM(1)**2)
+* DIS
+ ELSEIF ((X.LE.ZERO).AND.(Q2.GT.ZERO).AND.(W2.GT.ZERO)) THEN
+ X = Q2/(W2+Q2-AAM(1)**2)
+ ELSEIF ((X.GT.ZERO).AND.(Q2.LE.ZERO).AND.(W2.GT.ZERO)) THEN
+ Q2 = (W2-AAM(1)**2)*X/(ONE-X)
+ ELSEIF ((X.GT.ZERO).AND.(Q2.GT.ZERO)) THEN
+ W2 = Q2*(ONE-X)/X+AAM(1)**2
+ ELSE
+ WRITE(LOUT,*) 'SIGVEL: inconsistent input ',W2,Q2,X
+ STOP
+ ENDIF
+ ECM = SQRT(W2)
+
+ AMV = AAM(IDXV)
+ AMV2 = AMV**2
+
+ BSLOPE = 2.0D0*(2.0D0+AAM(32)**2/(AMV2+Q2)
+ & +0.25D0*LOG(W2/(AMV2+Q2)))*GEV2MB
+ ROSH = 0.1D0
+ STOVP = DT_SIGVP(X,Q2)/(AMV2+Q2+RL2)
+ SELVP = STOVP**2*(ONE+ROSH**2)/(8.0D0*TWOPI*BSLOPE)
+
+ IF (IDXV.EQ.33) THEN
+ COUPL = 0.00365D0
+ ELSE
+ STOP
+ ENDIF
+ SIG1 = (AMV2/(AMV2+Q2))**2 * (ONE+EPSPOL*Q2/AMV2)
+ SIG2 = SELVP
+ SVEL = COUPL * (AMV2/(AMV2+Q2))**2
+ & * (ONE+EPSPOL*Q2/AMV2) * SELVP
+
+ RETURN
+ END
+*
+*===sigvp==============================================================*
+*
+CDECK ID>, DT_SIGVP
+ DOUBLE PRECISION FUNCTION DT_SIGVP(XI,Q2I)
+
+************************************************************************
+* sigma_Vp *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0,
+ & AMPROT = 0.938D0,
+ & ALPHEM = ONE/137.0D0)
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+
+ X = XI
+ Q2 = Q2I
+ IF (XI.LE.ZERO) X = 0.0001D0
+ IF (Q2I.LE.ZERO) Q2 = 0.0001D0
+
+ ECM = SQRT( Q2*(ONE-X)/X+AMPROT**2 )
+
+ SCALE = SQRT(Q2)
+ IF (MODEGA.EQ.1) THEN
+ CALL DT_CKMT(X,SCALE,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GL,F2,
+ & IDPDF)
+C W = ECM
+
+C ALLMF2 = PHO_ALLM97(Q2,W)
+
+C write(*,*) 'X,Q2,W,F2,ALLMF2',X,Q2,W,F2,ALLMF2
+C STOT = TWOPI**2*ALPHEM/(Q2*(ONE-X)) * F2 *GEV2MB
+C DT_SIGVP = 12.0D0*PI**3.0D0*F2/(Q2*DT_RRM2(X,Q2))
+ DT_SIGVP = 12.0D0*PI**3.0D0*F2/(Q2*DT_RRM2(X,Q2))*GEV2MB
+ ELSEIF (MODEGA.EQ.4) THEN
+ CALL DT_SIGGP(X,Q2,ECM,DUM1,STOT,DUM2,DUM3)
+C F2 = Q2*(ONE-X)/(TWOPI**2*ALPHEM*GEV2MB) * STOT
+ DT_SIGVP = 3.0D0*PI/(ALPHEM*DT_RRM2(X,Q2)) * STOT
+ ELSE
+ STOP ' DT_SIGVP: F2 not defined for this MODEGA !'
+ ENDIF
+
+ RETURN
+
+ END
+*
+*===RRM2===============================================================*
+*
+CDECK ID>, DT_RRM2
+ DOUBLE PRECISION FUNCTION DT_RRM2(X,Q2)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+
+ S = Q2*(ONE-X)/X+AAM(1)**2
+ ECM = SQRT(S)
+
+ IF (INTRGE(1).EQ.1) THEN
+ AMLO2 = (3.0D0*AAM(13))**2
+ ELSEIF (INTRGE(1).EQ.2) THEN
+ AMLO2 = AAM(33)**2
+ ELSE
+ AMLO2 = AAM(96)**2
+ ENDIF
+ IF (INTRGE(2).EQ.1) THEN
+ AMHI2 = S/TWO
+ ELSEIF (INTRGE(2).EQ.2) THEN
+ AMHI2 = S/4.0D0
+ ELSE
+ AMHI2 = S
+ ENDIF
+ AMHI20 = (ECM-AAM(1))**2
+ IF (AMHI2.GE.AMHI20) AMHI2 = AMHI20
+
+ AM1C2 = 16.0D0
+ AM2C2 = 121.0D0
+ IF (AMHI2.LE.AM1C2) THEN
+ DT_RRM2 = TWO*DT_RM2(AMLO2,AMHI2,Q2)
+ ELSEIF ((AMHI2.GT.AM1C2).AND.(AMHI2.LE.AM2C2)) THEN
+ DT_RRM2 = TWO*DT_RM2(AMLO2,AM1C2,Q2)+
+ & 10.0D0/3.0D0*DT_RM2(AM1C2,AMHI2,Q2)
+ ELSE
+ DT_RRM2 = TWO*DT_RM2(AMLO2,AM1C2,Q2)+
+ & 10.0D0/3.0D0*DT_RM2(AM1C2,AM2C2,Q2)+
+ & 11.0D0/3.0D0*DT_RM2(AM2C2,AMHI2,Q2)
+ ENDIF
+
+ RETURN
+ END
+*
+*===RM2================================================================*
+*
+CDECK ID>, DT_RM2
+ DOUBLE PRECISION FUNCTION DT_RM2(AMLO2,AMHI2,Q2)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0)
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+
+ IF (RL2.LE.ZERO) THEN
+ DT_RM2 = -ONE/(AMHI2+Q2)+Q2/(TWO*(AMHI2+Q2)**2) -
+ & (-ONE/(AMLO2+Q2)+Q2/(TWO*(AMLO2+Q2)**2))
+ & +EPSPOL*(-Q2/(TWO*(AMHI2+Q2)**2)+Q2/(TWO*(AMLO2+Q2)**2))
+ ELSE
+ TMPMLO = LOG(ONE+RL2/(AMLO2+Q2))
+ TMPMHI = LOG(ONE+RL2/(AMHI2+Q2))
+ DT_RM2 = Q2/(RL2*(AMHI2+Q2))-(Q2+RL2)/RL2**2*TMPMHI
+ & -(Q2/(RL2*(AMLO2+Q2))-(Q2+RL2)/RL2**2*TMPMLO)
+ & +EPSPOL*(
+ & -Q2/(RL2*(AMHI2+Q2))+Q2/RL2**2*TMPMHI
+ & -(-Q2/(RL2*(AMLO2+Q2))+Q2/RL2**2*TMPMLO))
+ ENDIF
+
+ RETURN
+ END
+*
+*===SAM2===============================================================*
+*
+CDECK ID>, DT_SAM2
+ DOUBLE PRECISION FUNCTION DT_SAM2(Q2,ECM)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0,
+ & TENTRD=10.0D0/3.0D0,ELVTRD=11.0D0/3.0D0)
+ PARAMETER (TWOPI = 6.283185307179586476925286766559D+00,
+ & PI = TWOPI/TWO,
+ & GEV2MB = 0.38938D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* VDM parameter for photon-nucleus interactions
+ COMMON /DTVDMP/ RL2,EPSPOL,INTRGE(2),IDPDF,MODEGA,ISHAD(3)
+
+ S = ECM**2
+ IF (INTRGE(1).EQ.1) THEN
+ AMLO2 = (3.0D0*AAM(13))**2
+ ELSEIF (INTRGE(1).EQ.2) THEN
+ AMLO2 = AAM(33)**2
+ ELSE
+ AMLO2 = AAM(96)**2
+ ENDIF
+ IF (INTRGE(2).EQ.1) THEN
+ AMHI2 = S/TWO
+ ELSEIF (INTRGE(2).EQ.2) THEN
+ AMHI2 = S/4.0D0
+ ELSE
+ AMHI2 = S
+ ENDIF
+ AMHI20 = (ECM-AAM(1))**2
+ IF (AMHI2.GE.AMHI20) AMHI2 = AMHI20
+
+ AM1C2 = 16.0D0
+ AM2C2 = 121.0D0
+ YLO = LOG(AMLO2+Q2)
+ YC1 = LOG(AM1C2+Q2)
+ YC2 = LOG(AM2C2+Q2)
+ YHI = LOG(AMHI2+Q2)
+ IF (AMHI2.LE.AM1C2) THEN
+ FACHI = TWO
+ ELSEIF ((AMHI2.GT.AM1C2).AND.(AMHI2.LE.AM2C2)) THEN
+ FACHI = TENTRD
+ ELSE
+ FACHI = ELVTRD
+ ENDIF
+
+ 1 CONTINUE
+ YSAM2 = YLO+(YHI-YLO)*DT_RNDM(AM1C2)
+ IF (YSAM2.LE.YC1) THEN
+ FAC = TWO
+ ELSEIF ((YSAM2.GT.YC1).AND.(YSAM2.LE.YC2)) THEN
+ FAC = TENTRD
+ ELSE
+ FAC = ELVTRD
+ ENDIF
+ WEIGMX = FACHI*(ONE-Q2*EXP( -YHI))
+ XSAM2 = FAC *(ONE-Q2*EXP(-YSAM2))
+ IF (DT_RNDM(YSAM2)*WEIGMX.GT.XSAM2) GOTO 1
+
+ DT_SAM2 = EXP(YSAM2)-Q2
+
+ RETURN
+ END
+*
+*===ckmt===============================================================*
+*
+CDECK ID>, DT_CKMT
+ SUBROUTINE DT_CKMT(X,SCALE,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GL,
+ & F2,IPAR)
+
+************************************************************************
+* This version dated 31.01.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TWO=2.0D0,TINY10=1.0D-10)
+
+ PARAMETER (Q02 = 2.0D0,
+ & DQ2 = 10.05D0,
+ & Q12 = Q02+DQ2)
+
+ DIMENSION PD(-6:6),SEA(3),VAL(2)
+
+ CALL DT_PDF0(Q02,X,F2Q0,VAL,SEA,GLU,IPAR)
+ CALL DT_PDF0(Q12,X,F2Q1,VAL,SEA,GLU,IPAR)
+ ADQ2 = LOG10(Q12)-LOG10(Q02)
+ F2P = (F2Q1-F2Q0)/ADQ2
+ CALL DT_CKMTX(IPAR,X,Q02,PD,F2PQ0)
+ CALL DT_CKMTX(IPAR,X,Q12,PD,F2PQ1)
+ F2PP = (F2PQ1-F2PQ0)/ADQ2
+ FX = (F2P-F2PP)/(F2PP+LOG(DQ2)*F2PQ0+TINY10)*Q02
+
+ Q2 = MAX(SCALE**2.0D0,TINY10)
+ SMOOTH = 1.0D0+FX*(Q2-Q02)/Q2**2
+ IF (Q2.LT.Q02) THEN
+ CALL DT_PDF0(Q2,X,F2,VAL,SEA,GLU,IPAR)
+ UPV = VAL(1)
+ DNV = VAL(2)
+ USEA = SEA(1)
+ DSEA = SEA(2)
+ STR = SEA(3)
+ CHM = 0.0D0
+ BOT = 0.0D0
+ TOP = 0.0D0
+ GL = GLU
+ ELSE
+ CALL DT_CKMTX(IPAR,X,Q2,PD,F2)
+ F2 = F2*SMOOTH
+ UPV = PD(2)-PD(3)
+ DNV = PD(1)-PD(3)
+ USEA = PD(3)
+ DSEA = PD(3)
+ STR = PD(3)
+ CHM = PD(4)
+ BOT = PD(5)
+ TOP = PD(6)
+ GL = PD(0)
+C UPV = UPV*SMOOTH
+C DNV = DNV*SMOOTH
+C USEA = USEA*SMOOTH
+C DSEA = DSEA*SMOOTH
+C STR = STR*SMOOTH
+C CHM = CHM*SMOOTH
+C GL = GL*SMOOTH
+ ENDIF
+
+ RETURN
+ END
+C
+CDECK ID>, DT_CKMTX
+ SUBROUTINE DT_CKMTX(IPAR,X,SCALE2,PD,F2)
+C**********************************************************************
+C
+C PDF based on Regge theory, evolved with .... by ....
+C
+C input: IPAR 2212 proton (not installed)
+C 45 Pomeron
+C 100 Deuteron
+C
+C output: PD(-6:6) x*f(x) parton distribution functions
+C (PDFLIB convention: d = PD(1), u = PD(2) )
+C
+C**********************************************************************
+
+ SAVE
+ DOUBLE PRECISION X,SCALE2,PD(-6:6),CDN,CUP,F2
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ DIMENSION QQ(7)
+C
+ Q2=SNGL(SCALE2)
+ Q1S=Q2
+ XX=SNGL(X)
+C QCD lambda for evolution
+ OWLAM = 0.23D0
+ OWLAM2=OWLAM**2
+C Q0**2 for evolution
+ Q02 = 2.D0
+C
+C
+C the conventions are : q(1)=x*u, q(2)=x*d, q(3)=q(4)=x*sbar=x*ubar=...
+C q(6)=x*charm, q(7)=x*gluon
+C
+ SB=0.
+ IF(Q2-Q02) 1,1,2
+ 2 SB=LOG(LOG(Q2/OWLAM2)/LOG(Q02/OWLAM2))
+ 1 CONTINUE
+ IF(IPAR.EQ.2212) THEN
+ CALL DT_CKMTPR(1,0,XX,SB,QQ(1))
+ CALL DT_CKMTPR(2,0,XX,SB,QQ(2))
+ CALL DT_CKMTPR(3,0,XX,SB,QQ(3))
+ CALL DT_CKMTPR(4,0,XX,SB,QQ(4))
+ CALL DT_CKMTPR(5,0,XX,SB,QQ(5))
+ CALL DT_CKMTPR(8,0,XX,SB,QQ(6))
+ CALL DT_CKMTPR(7,0,XX,SB,QQ(7))
+C ELSEIF (IPAR.EQ.45) THEN
+C CALL CKMTPO(1,0,XX,SB,QQ(1))
+C CALL CKMTPO(2,0,XX,SB,QQ(2))
+C CALL CKMTPO(3,0,XX,SB,QQ(3))
+C CALL CKMTPO(4,0,XX,SB,QQ(4))
+C CALL CKMTPO(5,0,XX,SB,QQ(5))
+C CALL CKMTPO(8,0,XX,SB,QQ(6))
+C CALL CKMTPO(7,0,XX,SB,QQ(7))
+ ELSEIF (IPAR.EQ.100) THEN
+ CALL DT_CKMTDE(1,0,XX,SB,QQ(1))
+ CALL DT_CKMTDE(2,0,XX,SB,QQ(2))
+ CALL DT_CKMTDE(3,0,XX,SB,QQ(3))
+ CALL DT_CKMTDE(4,0,XX,SB,QQ(4))
+ CALL DT_CKMTDE(5,0,XX,SB,QQ(5))
+ CALL DT_CKMTDE(8,0,XX,SB,QQ(6))
+ CALL DT_CKMTDE(7,0,XX,SB,QQ(7))
+ ELSE
+ WRITE(LOUT,'(1X,A,I4,A)')
+ & 'CKMTX: IPAR =',IPAR,' not implemented!'
+ STOP
+ ENDIF
+C
+ PD(-6) = 0.D0
+ PD(-5) = 0.D0
+ PD(-4) = DBLE(QQ(6))
+ PD(-3) = DBLE(QQ(3))
+ PD(-2) = DBLE(QQ(4))
+ PD(-1) = DBLE(QQ(5))
+ PD(0) = DBLE(QQ(7))
+ PD(1) = DBLE(QQ(2))
+ PD(2) = DBLE(QQ(1))
+ PD(3) = DBLE(QQ(3))
+ PD(4) = DBLE(QQ(6))
+ PD(5) = 0.D0
+ PD(6) = 0.D0
+ IF(IPAR.EQ.45) THEN
+ CDN = (PD(1)-PD(-1))/2.D0
+ CUP = (PD(2)-PD(-2))/2.D0
+ PD(-1) = PD(-1) + CDN
+ PD(-2) = PD(-2) + CUP
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ ENDIF
+ F2 = 4.0D0/9.0D0*(PD(2)-PD(3)+2.0D0*PD(3))+
+ & 1.0D0/9.0D0*(PD(1)-PD(3)+2.0D0*PD(3))+
+ & 1.0D0/9.0D0*(2.0D0*PD(3))+4.0D0/9.0D0*(2.0D0*PD(4))
+ END
+C
+*
+*===pdf0===============================================================*
+*
+CDECK ID>, DT_PDF0
+ SUBROUTINE DT_PDF0(Q2,X,F2,VAL,SEA,GLU,IPAR)
+
+************************************************************************
+* This subroutine calculates F_2 and PDF below Q^2=Q_0^2=2 GeV^2 *
+* an F_2-ansatz given in Capella et al. PLB 337(1994)358. *
+* IPAR = 2212 proton *
+* = 100 deuteron *
+* This version dated 31.01.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY9=1.0D-9)
+
+ PARAMETER (
+ & AA = 0.1502D0,
+ & BBDEU = 1.2D0,
+ & BUD = 0.754D0,
+ & BDD = 0.4495D0,
+ & BUP = 1.2064D0,
+ & BDP = 0.1798D0,
+ & DELTA0 = 0.07684D0,
+ & D = 1.117D0,
+ & C = 3.5489D0,
+ & A = 0.2631D0,
+ & B = 0.6452D0,
+ & ALPHAR = 0.415D0,
+ & E = 0.1D0
+ & )
+
+ PARAMETER (NPOINT=16)
+C DIMENSION ABSZX(NPOINT),WEIGHT(NPOINT)
+ DIMENSION SEA(3),VAL(2)
+
+ DELTA = DELTA0*(1.0D0+2.0D0*Q2/(Q2+D))
+ AN = 1.5D0*(1.0D0+Q2/(Q2+C))
+* proton, deuteron
+ IF ((IPAR.EQ.2212).OR.(IPAR.EQ.100)) THEN
+ CALL DT_CKMTQ0(Q2,X,IPAR,VALU0,VALD0,SEA0)
+ SEA(1) = 0.75D0*SEA0
+ SEA(2) = SEA(1)
+ SEA(3) = SEA(1)
+ VAL(1) = 9.0D0/4.0D0*VALU0
+ VAL(2) = 9.0D0*VALD0
+ GLU0 = SEA(1)/(1.0D0-X)
+ F2 = SEA0+VALU0+VALD0
+ F2PDF = 4.0D0/9.0D0*(VAL(1)+2.0D0*SEA(1))+
+ & 1.0D0/9.0D0*(VAL(2)+2.0D0*SEA(2))+
+ & 1.0D0/9.0D0*(2.0D0*SEA(3))
+ IF (ABS(F2-F2PDF).GT.TINY9) THEN
+ WRITE(LOUT,'(1X,A,2E15.5)') 'inconsistent PDF! ',F2,F2PDF
+ STOP
+ ENDIF
+**PHOJET105a
+C CALL GSET(ZERO,ONE,NPOINT,ABSZX,WEIGHT)
+**PHOJET112
+
+C CALL PHO_GAUSET(ZERO,ONE,NPOINT,ABSZX,WEIGHT)
+
+**
+C SUMQ = ZERO
+C SUMG = ZERO
+C DO 1 J=1,NPOINT
+C CALL DT_CKMTQ0(Q2,ABSZX(J),IPAR,VALU0,VALD0,SEA0)
+C VALU0 = 9.0D0/4.0D0*VALU0
+C VALD0 = 9.0D0*VALD0
+C SEA0 = 0.75D0*SEA0
+C SUMQ = SUMQ+ (VALU0+VALD0+6.0D0*SEA0) *WEIGHT(J)
+C SUMG = SUMG+ (SEA0/(1.0D0-ABSZX(J))) *WEIGHT(J)
+C 1 CONTINUE
+C GLU = GLU0*(1.0D0-SUMQ)/SUMG
+ ELSE
+ WRITE(LOUT,'(1X,A,I4,A)')
+ & 'PDF0: IPAR =',IPAR,' not implemented!'
+ STOP
+ ENDIF
+
+ RETURN
+ END
+*
+*===ckmtq0=============================================================*
+*
+CDECK ID>, DT_CKMTQ0
+ SUBROUTINE DT_CKMTQ0(Q2,X,IPAR,VALU0,VALD0,SEA0)
+
+************************************************************************
+* This subroutine calculates F_2 and PDF below Q^2=Q_0^2=2 GeV^2 *
+* an F_2-ansatz given in Capella et al. PLB 337(1994)358. *
+* IPAR = 2212 proton *
+* = 100 deuteron *
+* This version dated 31.01.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TINY9=1.0D-9)
+
+ PARAMETER (
+ & AA = 0.1502D0,
+ & BBDEU = 1.2D0,
+ & BUD = 0.754D0,
+ & BDD = 0.4495D0,
+ & BUP = 1.2064D0,
+ & BDP = 0.1798D0,
+ & DELTA0 = 0.07684D0,
+ & D = 1.117D0,
+ & C = 3.5489D0,
+ & A = 0.2631D0,
+ & B = 0.6452D0,
+ & ALPHAR = 0.415D0,
+ & E = 0.1D0
+ & )
+
+ DELTA = DELTA0*(1.0D0+2.0D0*Q2/(Q2+D))
+ AN = 1.5D0*(1.0D0+Q2/(Q2+C))
+* proton, deuteron
+ IF ((IPAR.EQ.2212).OR.(IPAR.EQ.100)) THEN
+ IF (IPAR.EQ.2212) THEN
+ BU = BUP
+ BD = BDP
+ ELSE
+ BU = BUD
+ BD = BDD
+ ENDIF
+ SEA0 = AA*X**(-DELTA)*(1.0D0-X)**(AN+4.0D0)*
+ & (Q2/(Q2+A))**(1.0D0+DELTA)
+ VALU0 = BU*X**(1.0D0-ALPHAR)*(1.0D0-X)**AN*
+ & (Q2/(Q2+B))**(ALPHAR)
+ VALD0 = BD*X**(1.0D0-ALPHAR)*(1.0D0-X)**(AN+1.0D0)*
+ & (Q2/(Q2+B))**(ALPHAR)
+ ELSE
+ WRITE(LOUT,'(1X,A,I4,A)')
+ & 'CKMTQ0: IPAR =',IPAR,' not implemented!'
+ STOP
+ ENDIF
+ RETURN
+ END
+C
+C
+CDECK ID>, DT_CKMTDE
+ SUBROUTINE DT_CKMTDE(I,NDRV,X,S,ANS)
+C
+C**********************************************************************
+C Deuteron - PDFs
+C I = 1, 2, 3, 4, 5, 7, 8 : xu, xd, xub, xdb, xsb, xg, xc
+C ANS = PDF(I)
+C This version by S. Roesler, 30.01.96
+C**********************************************************************
+
+ SAVE
+ DIMENSION F1(25),F2(25),GF(8,20,25),DL(4000)
+ EQUIVALENCE (GF(1,1,1),DL(1))
+ DATA DELTA/.13/
+C
+ DATA (DL(K),K= 1, 85) /
+ &0.351858E+00,0.388489E+00,0.325356E+00,0.325356E+00,0.325356E+00,
+ &0.325356E+00,0.445218E+01,0.000000E+00,0.419818E+00,0.459249E+00,
+ &0.391167E+00,0.391143E+00,0.391125E+00,0.391167E+00,0.628186E+01,
+ &0.703797E-01,0.498333E+00,0.540626E+00,0.467466E+00,0.467423E+00,
+ &0.467393E+00,0.467466E+00,0.837368E+01,0.151191E+00,0.587839E+00,
+ &0.633058E+00,0.554689E+00,0.554630E+00,0.554595E+00,0.554689E+00,
+ &0.107170E+02,0.242877E+00,0.688652E+00,0.736861E+00,0.653150E+00,
+ &0.653080E+00,0.653046E+00,0.653150E+00,0.132960E+02,0.345760E+00,
+ &0.800961E+00,0.852226E+00,0.763038E+00,0.762961E+00,0.762933E+00,
+ &0.763038E+00,0.160884E+02,0.460033E+00,0.924829E+00,0.979213E+00,
+ &0.884414E+00,0.884335E+00,0.884319E+00,0.884414E+00,0.190679E+02,
+ &0.585764E+00,0.106016E+01,0.111773E+01,0.101719E+01,0.101711E+01,
+ &0.101711E+01,0.101719E+01,0.222033E+02,0.722864E+00,0.120670E+01,
+ &0.126752E+01,0.116110E+01,0.116102E+01,0.116105E+01,0.116110E+01,
+ &0.254603E+02,0.871079E+00,0.136402E+01,0.142815E+01,0.131571E+01,
+ &0.131565E+01,0.131570E+01,0.131571E+01,0.288020E+02,0.102998E+01,
+ &0.153151E+01,0.159900E+01,0.148043E+01,0.148038E+01,0.148046E+01/
+ DATA (DL(K),K= 86, 170) /
+ &0.148043E+01,0.321898E+02,0.119897E+01,0.170838E+01,0.177930E+01,
+ &0.165447E+01,0.165444E+01,0.165455E+01,0.165447E+01,0.355845E+02,
+ &0.137726E+01,0.189369E+01,0.196807E+01,0.183687E+01,0.183686E+01,
+ &0.183701E+01,0.183687E+01,0.389473E+02,0.156390E+01,0.208631E+01,
+ &0.216422E+01,0.202653E+01,0.202654E+01,0.202673E+01,0.202653E+01,
+ &0.422402E+02,0.175779E+01,0.228501E+01,0.236648E+01,0.222220E+01,
+ &0.222224E+01,0.222248E+01,0.222220E+01,0.454277E+02,0.195768E+01,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.326035E+00,0.380777E+00,0.286363E+00,0.286363E+00,0.286363E+00,
+ &0.286363E+00,0.392252E+01,-.138778E-16,0.380092E+00,0.438587E+00/
+ DATA (DL(K),K= 171, 255) /
+ &0.337452E+00,0.337430E+00,0.337424E+00,0.337452E+00,0.532193E+01,
+ &0.553645E-01,0.440879E+00,0.503177E+00,0.395208E+00,0.395169E+00,
+ &0.395165E+00,0.395208E+00,0.686454E+01,0.117354E+00,0.508415E+00,
+ &0.574566E+00,0.459649E+00,0.459600E+00,0.459604E+00,0.459649E+00,
+ &0.853316E+01,0.185994E+00,0.582647E+00,0.652699E+00,0.530722E+00,
+ &0.530667E+00,0.530687E+00,0.530722E+00,0.103093E+02,0.261237E+00,
+ &0.663404E+00,0.737405E+00,0.608254E+00,0.608199E+00,0.608241E+00,
+ &0.608254E+00,0.121710E+02,0.342917E+00,0.750429E+00,0.828423E+00,
+ &0.691990E+00,0.691941E+00,0.692009E+00,0.691990E+00,0.140946E+02,
+ &0.430783E+00,0.843361E+00,0.925391E+00,0.781571E+00,0.781533E+00,
+ &0.781632E+00,0.781571E+00,0.160553E+02,0.524479E+00,0.941741E+00,
+ &0.102784E+01,0.876538E+00,0.876515E+00,0.876650E+00,0.876538E+00,
+ &0.180277E+02,0.623549E+00,0.104501E+01,0.113521E+01,0.976335E+00,
+ &0.976332E+00,0.976506E+00,0.976335E+00,0.199863E+02,0.727439E+00,
+ &0.115251E+01,0.124685E+01,0.108031E+01,0.108034E+01,0.108055E+01,
+ &0.108031E+01,0.219066E+02,0.835506E+00,0.126352E+01,0.136201E+01,
+ &0.118775E+01,0.118780E+01,0.118806E+01,0.118775E+01,0.237652E+02/
+ DATA (DL(K),K= 256, 340) /
+ &0.947020E+00,0.137724E+01,0.147989E+01,0.129783E+01,0.129791E+01,
+ &0.129822E+01,0.129783E+01,0.255406E+02,0.106119E+01,0.149279E+01,
+ &0.159961E+01,0.140972E+01,0.140984E+01,0.141019E+01,0.140972E+01,
+ &0.272135E+02,0.117715E+01,0.160929E+01,0.172028E+01,0.152252E+01,
+ &0.152267E+01,0.152308E+01,0.152252E+01,0.287669E+02,0.129402E+01,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.309785E+00,0.391282E+00,0.250518E+00,0.250518E+00,0.250518E+00,
+ &0.250518E+00,0.343842E+01,-.138778E-16,0.352113E+00,0.438463E+00,
+ &0.288877E+00,0.288863E+00,0.288878E+00,0.288877E+00,0.446765E+01,
+ &0.424850E-01,0.398382E+00,0.489596E+00,0.331132E+00,0.331111E+00/
+ DATA (DL(K),K= 341, 425) /
+ &0.331148E+00,0.331132E+00,0.555902E+01,0.888369E-01,0.448375E+00,
+ &0.544458E+00,0.377064E+00,0.377043E+00,0.377108E+00,0.377064E+00,
+ &0.669490E+01,0.138845E+00,0.501854E+00,0.602811E+00,0.426440E+00,
+ &0.426425E+00,0.426523E+00,0.426440E+00,0.785892E+01,0.192281E+00,
+ &0.558506E+00,0.664331E+00,0.478946E+00,0.478944E+00,0.479079E+00,
+ &0.478946E+00,0.903368E+01,0.248834E+00,0.617972E+00,0.728657E+00,
+ &0.534229E+00,0.534244E+00,0.534421E+00,0.534229E+00,0.102022E+02,
+ &0.308155E+00,0.679844E+00,0.795370E+00,0.591883E+00,0.591921E+00,
+ &0.592141E+00,0.591883E+00,0.113479E+02,0.369841E+00,0.743667E+00,
+ &0.864009E+00,0.651460E+00,0.651525E+00,0.651792E+00,0.651460E+00,
+ &0.124553E+02,0.433447E+00,0.808951E+00,0.934073E+00,0.712474E+00,
+ &0.712571E+00,0.712885E+00,0.712474E+00,0.135102E+02,0.498486E+00,
+ &0.875171E+00,0.100503E+01,0.774408E+00,0.774541E+00,0.774902E+00,
+ &0.774408E+00,0.144999E+02,0.564446E+00,0.941784E+00,0.107632E+01,
+ &0.836726E+00,0.836897E+00,0.837307E+00,0.836726E+00,0.154136E+02,
+ &0.630788E+00,0.100823E+01,0.114738E+01,0.898879E+00,0.899092E+00,
+ &0.899551E+00,0.898879E+00,0.162423E+02,0.696967E+00,0.107396E+01/
+ DATA (DL(K),K= 426, 510) /
+ &0.121764E+01,0.960319E+00,0.960577E+00,0.961084E+00,0.960319E+00,
+ &0.169791E+02,0.762433E+00,0.113843E+01,0.128655E+01,0.102051E+01,
+ &0.102081E+01,0.102137E+01,0.102051E+01,0.176190E+02,0.826647E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.304680E+00,0.425088E+00,0.216504E+00,0.216504E+00,0.216504E+00,
+ &0.216504E+00,0.298356E+01,0.000000E+00,0.337300E+00,0.463627E+00,
+ &0.244023E+00,0.244024E+00,0.244063E+00,0.244023E+00,0.370271E+01,
+ &0.316585E-01,0.371787E+00,0.503942E+00,0.273415E+00,0.273423E+00,
+ &0.273505E+00,0.273415E+00,0.443039E+01,0.651685E-01,0.407853E+00,
+ &0.545739E+00,0.304395E+00,0.304418E+00,0.304545E+00,0.304395E+00/
+ DATA (DL(K),K= 511, 595) /
+ &0.515321E+01,0.100252E+00,0.445229E+00,0.588741E+00,0.336700E+00,
+ &0.336744E+00,0.336918E+00,0.336700E+00,0.586004E+01,0.136648E+00,
+ &0.483606E+00,0.632629E+00,0.370026E+00,0.370095E+00,0.370318E+00,
+ &0.370026E+00,0.654027E+01,0.174056E+00,0.522666E+00,0.677074E+00,
+ &0.404062E+00,0.404162E+00,0.404433E+00,0.404062E+00,0.718442E+01,
+ &0.212167E+00,0.562075E+00,0.721735E+00,0.438483E+00,0.438618E+00,
+ &0.438938E+00,0.438483E+00,0.778423E+01,0.250658E+00,0.601494E+00,
+ &0.766258E+00,0.472959E+00,0.473131E+00,0.473500E+00,0.472959E+00,
+ &0.833276E+01,0.289199E+00,0.640580E+00,0.810290E+00,0.507156E+00,
+ &0.507369E+00,0.507784E+00,0.507156E+00,0.882448E+01,0.327457E+00,
+ &0.678993E+00,0.853479E+00,0.540747E+00,0.541003E+00,0.541463E+00,
+ &0.540747E+00,0.925529E+01,0.365104E+00,0.716405E+00,0.895483E+00,
+ &0.573411E+00,0.573714E+00,0.574216E+00,0.573411E+00,0.962250E+01,
+ &0.401821E+00,0.752501E+00,0.935975E+00,0.604848E+00,0.605197E+00,
+ &0.605740E+00,0.604848E+00,0.992478E+01,0.437304E+00,0.786987E+00,
+ &0.974647E+00,0.634775E+00,0.635173E+00,0.635752E+00,0.634775E+00,
+ &0.101620E+02,0.471269E+00,0.819594E+00,0.101122E+01,0.662936E+00/
+ DATA (DL(K),K= 596, 680) /
+ &0.663382E+00,0.663995E+00,0.662936E+00,0.103354E+02,0.503459E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.312661E+00,0.487836E+00,0.182562E+00,0.182562E+00,0.182562E+00,
+ &0.182562E+00,0.253626E+01,0.000000E+00,0.336910E+00,0.518440E+00,
+ &0.200702E+00,0.200721E+00,0.200779E+00,0.200702E+00,0.299460E+01,
+ &0.224425E-01,0.361554E+00,0.549164E+00,0.219359E+00,0.219402E+00,
+ &0.219517E+00,0.219359E+00,0.343183E+01,0.453742E-01,0.386348E+00,
+ &0.579759E+00,0.238296E+00,0.238367E+00,0.238536E+00,0.238296E+00,
+ &0.384076E+01,0.685610E-01,0.411080E+00,0.610003E+00,0.257305E+00,
+ &0.257408E+00,0.257630E+00,0.257305E+00,0.421619E+01,0.917987E-01/
+ DATA (DL(K),K= 681, 765) /
+ &0.435528E+00,0.639668E+00,0.276174E+00,0.276313E+00,0.276583E+00,
+ &0.276174E+00,0.455400E+01,0.114876E+00,0.459476E+00,0.668531E+00,
+ &0.294698E+00,0.294875E+00,0.295191E+00,0.294698E+00,0.485107E+01,
+ &0.137589E+00,0.482719E+00,0.696375E+00,0.312682E+00,0.312900E+00,
+ &0.313258E+00,0.312682E+00,0.510539E+01,0.159742E+00,0.505060E+00,
+ &0.722995E+00,0.329941E+00,0.330200E+00,0.330596E+00,0.329941E+00,
+ &0.531589E+01,0.181149E+00,0.526315E+00,0.748199E+00,0.346303E+00,
+ &0.346604E+00,0.347034E+00,0.346303E+00,0.548250E+01,0.201638E+00,
+ &0.546317E+00,0.771808E+00,0.361613E+00,0.361957E+00,0.362418E+00,
+ &0.361613E+00,0.560595E+01,0.221052E+00,0.564917E+00,0.793667E+00,
+ &0.375735E+00,0.376122E+00,0.376609E+00,0.375735E+00,0.568772E+01,
+ &0.239253E+00,0.581987E+00,0.813638E+00,0.388553E+00,0.388982E+00,
+ &0.389491E+00,0.388553E+00,0.572992E+01,0.256122E+00,0.597419E+00,
+ &0.831608E+00,0.399972E+00,0.400443E+00,0.400970E+00,0.399972E+00,
+ &0.573516E+01,0.271562E+00,0.611129E+00,0.847487E+00,0.409919E+00,
+ &0.410430E+00,0.410972E+00,0.409919E+00,0.570642E+01,0.285497E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 766, 850) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.335149E+00,0.582072E+00,0.146415E+00,0.146415E+00,0.146415E+00,
+ &0.146415E+00,0.206772E+01,0.000000E+00,0.351552E+00,0.603437E+00,
+ &0.156515E+00,0.156542E+00,0.156595E+00,0.156515E+00,0.231143E+01,
+ &0.146091E-01,0.367407E+00,0.623737E+00,0.166387E+00,0.166442E+00,
+ &0.166542E+00,0.166387E+00,0.252488E+01,0.289315E-01,0.382571E+00,
+ &0.642832E+00,0.175891E+00,0.175976E+00,0.176118E+00,0.175891E+00,
+ &0.270658E+01,0.428312E-01,0.396926E+00,0.660609E+00,0.184917E+00,
+ &0.185034E+00,0.185212E+00,0.184917E+00,0.285608E+01,0.561981E-01,
+ &0.410365E+00,0.676962E+00,0.193365E+00,0.193513E+00,0.193722E+00,
+ &0.193365E+00,0.297375E+01,0.689319E-01,0.422792E+00,0.691796E+00/
+ DATA (DL(K),K= 851, 935) /
+ &0.201144E+00,0.201324E+00,0.201560E+00,0.201144E+00,0.306050E+01,
+ &0.809434E-01,0.434123E+00,0.705030E+00,0.208181E+00,0.208393E+00,
+ &0.208650E+00,0.208181E+00,0.311775E+01,0.921567E-01,0.444287E+00,
+ &0.716596E+00,0.214413E+00,0.214656E+00,0.214931E+00,0.214413E+00,
+ &0.314738E+01,0.102508E+00,0.453228E+00,0.726441E+00,0.219792E+00,
+ &0.220066E+00,0.220354E+00,0.219792E+00,0.315156E+01,0.111949E+00,
+ &0.460906E+00,0.734527E+00,0.224285E+00,0.224589E+00,0.224886E+00,
+ &0.224285E+00,0.313271E+01,0.120441E+00,0.467291E+00,0.740835E+00,
+ &0.227870E+00,0.228203E+00,0.228506E+00,0.227870E+00,0.309338E+01,
+ &0.127963E+00,0.472372E+00,0.745357E+00,0.230541E+00,0.230902E+00,
+ &0.231208E+00,0.230541E+00,0.303621E+01,0.134506E+00,0.476148E+00,
+ &0.748105E+00,0.232304E+00,0.232690E+00,0.232996E+00,0.232304E+00,
+ &0.296381E+01,0.140070E+00,0.478635E+00,0.749103E+00,0.233176E+00,
+ &0.233586E+00,0.233889E+00,0.233176E+00,0.287874E+01,0.144672E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 936, 1020) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.370162E+00,0.695827E+00,0.105823E+00,0.105823E+00,0.105823E+00,
+ &0.105823E+00,0.154556E+01,0.208167E-16,0.378214E+00,0.703794E+00,
+ &0.109539E+00,0.109554E+00,0.109571E+00,0.109539E+00,0.162770E+01,
+ &0.818783E-02,0.385258E+00,0.710067E+00,0.112818E+00,0.112847E+00,
+ &0.112879E+00,0.112818E+00,0.168578E+01,0.158212E-01,0.391264E+00,
+ &0.714648E+00,0.115620E+00,0.115666E+00,0.115709E+00,0.115620E+00,
+ &0.172175E+01,0.228667E-01,0.396214E+00,0.717539E+00,0.117923E+00,
+ &0.117985E+00,0.118037E+00,0.117923E+00,0.173756E+01,0.293009E-01,
+ &0.400098E+00,0.718759E+00,0.119711E+00,0.119790E+00,0.119848E+00,
+ &0.119711E+00,0.173541E+01,0.351123E-01,0.402915E+00,0.718332E+00,
+ &0.120979E+00,0.121074E+00,0.121137E+00,0.120979E+00,0.171755E+01,
+ &0.402951E-01,0.404672E+00,0.716292E+00,0.121728E+00,0.121840E+00/
+ DATA (DL(K),K= 1021, 1105) /
+ &0.121905E+00,0.121728E+00,0.168619E+01,0.448514E-01,0.405385E+00,
+ &0.712681E+00,0.121967E+00,0.122095E+00,0.122161E+00,0.121967E+00,
+ &0.164352E+01,0.487902E-01,0.405077E+00,0.707551E+00,0.121712E+00,
+ &0.121855E+00,0.121920E+00,0.121712E+00,0.159162E+01,0.521265E-01,
+ &0.403778E+00,0.700963E+00,0.120984E+00,0.121141E+00,0.121204E+00,
+ &0.120984E+00,0.153245E+01,0.548814E-01,0.401525E+00,0.692984E+00,
+ &0.119809E+00,0.119980E+00,0.120040E+00,0.119809E+00,0.146780E+01,
+ &0.570807E-01,0.398361E+00,0.683691E+00,0.118218E+00,0.118402E+00,
+ &0.118457E+00,0.118218E+00,0.139928E+01,0.587542E-01,0.394333E+00,
+ &0.673166E+00,0.116244E+00,0.116440E+00,0.116490E+00,0.116244E+00,
+ &0.132834E+01,0.599355E-01,0.389495E+00,0.661496E+00,0.113924E+00,
+ &0.114131E+00,0.114175E+00,0.113924E+00,0.125620E+01,0.606602E-01,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 1106, 1190) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.394012E+00,0.757115E+00,0.772117E-01,0.772117E-01,0.772117E-01,
+ &0.772117E-01,0.117279E+01,0.346945E-17,0.395841E+00,0.752988E+00,
+ &0.780501E-01,0.780655E-01,0.780723E-01,0.780501E-01,0.118528E+01,
+ &0.491697E-02,0.396627E+00,0.747223E+00,0.785386E-01,0.785692E-01,
+ &0.785806E-01,0.785386E-01,0.118242E+01,0.932754E-02,0.396401E+00,
+ &0.739901E+00,0.786820E-01,0.787273E-01,0.787413E-01,0.786820E-01,
+ &0.116673E+01,0.132427E-01,0.395190E+00,0.731092E+00,0.784870E-01,
+ &0.785464E-01,0.785613E-01,0.784870E-01,0.114033E+01,0.166738E-01,
+ &0.393030E+00,0.720878E+00,0.779683E-01,0.780410E-01,0.780555E-01,
+ &0.779683E-01,0.110528E+01,0.196392E-01,0.389962E+00,0.709342E+00,
+ &0.771427E-01,0.772280E-01,0.772409E-01,0.771427E-01,0.106344E+01,
+ &0.221591E-01,0.386027E+00,0.696571E+00,0.760304E-01,0.761276E-01,
+ &0.761378E-01,0.760304E-01,0.101653E+01,0.242567E-01,0.381274E+00,
+ &0.682657E+00,0.746543E-01,0.747623E-01,0.747692E-01,0.746543E-01/
+ DATA (DL(K),K= 1191, 1275) /
+ &0.966057E+00,0.259571E-01,0.375752E+00,0.667695E+00,0.730389E-01,
+ &0.731569E-01,0.731598E-01,0.730389E-01,0.913345E+00,0.272876E-01,
+ &0.369514E+00,0.651782E+00,0.712104E-01,0.713374E-01,0.713358E-01,
+ &0.712104E-01,0.859530E+00,0.282763E-01,0.362616E+00,0.635021E+00,
+ &0.691957E-01,0.693307E-01,0.693243E-01,0.691957E-01,0.805566E+00,
+ &0.289524E-01,0.355116E+00,0.617511E+00,0.670220E-01,0.671640E-01,
+ &0.671526E-01,0.670220E-01,0.752235E+00,0.293453E-01,0.347072E+00,
+ &0.599357E+00,0.647162E-01,0.648642E-01,0.648478E-01,0.647162E-01,
+ &0.700161E+00,0.294844E-01,0.338543E+00,0.580659E+00,0.623046E-01,
+ &0.624578E-01,0.624363E-01,0.623046E-01,0.649828E+00,0.293983E-01,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 1276, 1360) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.408305E+00,0.775318E+00,0.509141E-01,0.509141E-01,0.509141E-01,
+ &0.509141E-01,0.818839E+00,-.867362E-17,0.403619E+00,0.758058E+00,
+ &0.502245E-01,0.502351E-01,0.502337E-01,0.502245E-01,0.795347E+00,
+ &0.264045E-02,0.398068E+00,0.739709E+00,0.493454E-01,0.493661E-01,
+ &0.493626E-01,0.493454E-01,0.764942E+00,0.491508E-02,0.391719E+00,
+ &0.720394E+00,0.482952E-01,0.483253E-01,0.483192E-01,0.482952E-01,
+ &0.729624E+00,0.685202E-02,0.384627E+00,0.700222E+00,0.470896E-01,
+ &0.471285E-01,0.471194E-01,0.470896E-01,0.690906E+00,0.847433E-02,
+ &0.376851E+00,0.679300E+00,0.457475E-01,0.457946E-01,0.457822E-01,
+ &0.457475E-01,0.650078E+00,0.980774E-02,0.368452E+00,0.657739E+00,
+ &0.442875E-01,0.443419E-01,0.443261E-01,0.442875E-01,0.608239E+00,
+ &0.108769E-01,0.359490E+00,0.635646E+00,0.427281E-01,0.427892E-01,
+ &0.427698E-01,0.427281E-01,0.566280E+00,0.117061E-01,0.350026E+00,
+ &0.613128E+00,0.410878E-01,0.411549E-01,0.411320E-01,0.410878E-01,
+ &0.524918E+00,0.123191E-01,0.340122E+00,0.590292E+00,0.393848E-01,
+ &0.394571E-01,0.394308E-01,0.393848E-01,0.484713E+00,0.127393E-01/
+ DATA (DL(K),K= 1361, 1445) /
+ &0.329838E+00,0.567240E+00,0.376363E-01,0.377132E-01,0.376836E-01,
+ &0.376363E-01,0.446084E+00,0.129888E-01,0.319236E+00,0.544074E+00,
+ &0.358589E-01,0.359396E-01,0.359068E-01,0.358589E-01,0.409328E+00,
+ &0.130888E-01,0.308374E+00,0.520890E+00,0.340678E-01,0.341517E-01,
+ &0.341160E-01,0.340678E-01,0.374641E+00,0.130594E-01,0.297312E+00,
+ &0.497781E+00,0.322772E-01,0.323636E-01,0.323253E-01,0.322772E-01,
+ &0.342135E+00,0.129195E-01,0.286106E+00,0.474837E+00,0.304999E-01,
+ &0.305882E-01,0.305474E-01,0.304999E-01,0.311854E+00,0.126863E-01,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.407248E+00,0.746438E+00,0.335640E-01,0.335640E-01,0.335640E-01/
+ DATA (DL(K),K= 1446, 1530) /
+ &0.335640E-01,0.573540E+00,0.173472E-16,0.397516E+00,0.719825E+00,
+ &0.324649E-01,0.324735E-01,0.324698E-01,0.324649E-01,0.540770E+00,
+ &0.147177E-02,0.387197E+00,0.692869E+00,0.312911E-01,0.313075E-01,
+ &0.313000E-01,0.312911E-01,0.505972E+00,0.269995E-02,0.376365E+00,
+ &0.665689E+00,0.300576E-01,0.300811E-01,0.300699E-01,0.300576E-01,
+ &0.470389E+00,0.371147E-02,0.365085E+00,0.638387E+00,0.287770E-01,
+ &0.288070E-01,0.287922E-01,0.287770E-01,0.434885E+00,0.452768E-02,
+ &0.353423E+00,0.611066E+00,0.274623E-01,0.274980E-01,0.274797E-01,
+ &0.274623E-01,0.400103E+00,0.516996E-02,0.341442E+00,0.583823E+00,
+ &0.261256E-01,0.261663E-01,0.261448E-01,0.261256E-01,0.366541E+00,
+ &0.565807E-02,0.329207E+00,0.556753E+00,0.247782E-01,0.248234E-01,
+ &0.247989E-01,0.247782E-01,0.334555E+00,0.601048E-02,0.316777E+00,
+ &0.529946E+00,0.234308E-01,0.234798E-01,0.234525E-01,0.234308E-01,
+ &0.304384E+00,0.624451E-02,0.304214E+00,0.503489E+00,0.220932E-01,
+ &0.221452E-01,0.221155E-01,0.220932E-01,0.276170E+00,0.637618E-02,
+ &0.291575E+00,0.477462E+00,0.207739E-01,0.208286E-01,0.207966E-01,
+ &0.207739E-01,0.249976E+00,0.642028E-02,0.278917E+00,0.451941E+00/
+ DATA (DL(K),K= 1531, 1615) /
+ &0.194809E-01,0.195376E-01,0.195037E-01,0.194809E-01,0.225809E+00,
+ &0.639038E-02,0.266293E+00,0.426995E+00,0.182209E-01,0.182791E-01,
+ &0.182436E-01,0.182209E-01,0.203629E+00,0.629880E-02,0.253754E+00,
+ &0.402686E+00,0.169996E-01,0.170587E-01,0.170219E-01,0.169996E-01,
+ &0.183361E+00,0.615665E-02,0.241347E+00,0.379071E+00,0.158217E-01,
+ &0.158814E-01,0.158436E-01,0.158217E-01,0.164907E+00,0.597385E-02,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.395106E+00,0.689399E+00,0.218554E-01,0.218554E-01,0.218554E-01,
+ &0.218554E-01,0.398362E+00,-.173472E-17,0.381441E+00,0.656777E+00,
+ &0.207816E-01,0.207886E-01,0.207844E-01,0.207816E-01,0.366703E+00/
+ DATA (DL(K),K= 1616, 1700) /
+ &0.826643E-03,0.367505E+00,0.624578E+00,0.197001E-01,0.197133E-01,
+ &0.197053E-01,0.197001E-01,0.335573E+00,0.149886E-02,0.353373E+00,
+ &0.592889E+00,0.186195E-01,0.186383E-01,0.186266E-01,0.186195E-01,
+ &0.305590E+00,0.203730E-02,0.339106E+00,0.561783E+00,0.175468E-01,
+ &0.175705E-01,0.175555E-01,0.175468E-01,0.277136E+00,0.245817E-02,
+ &0.324766E+00,0.531331E+00,0.164887E-01,0.165166E-01,0.164986E-01,
+ &0.164887E-01,0.250424E+00,0.277666E-02,0.310411E+00,0.501599E+00,
+ &0.154510E-01,0.154825E-01,0.154618E-01,0.154510E-01,0.225588E+00,
+ &0.300658E-02,0.296100E+00,0.472648E+00,0.144390E-01,0.144735E-01,
+ &0.144504E-01,0.144390E-01,0.202681E+00,0.316040E-02,0.281885E+00,
+ &0.444535E+00,0.134570E-01,0.134940E-01,0.134689E-01,0.134570E-01,
+ &0.181693E+00,0.324944E-02,0.267820E+00,0.417309E+00,0.125091E-01,
+ &0.125481E-01,0.125212E-01,0.125091E-01,0.162572E+00,0.328396E-02,
+ &0.253953E+00,0.391017E+00,0.115984E-01,0.116389E-01,0.116106E-01,
+ &0.115984E-01,0.145235E+00,0.327313E-02,0.240328E+00,0.365695E+00,
+ &0.107275E-01,0.107690E-01,0.107396E-01,0.107275E-01,0.129575E+00,
+ &0.322510E-02,0.226989E+00,0.341375E+00,0.989805E-02,0.994030E-02/
+ DATA (DL(K),K= 1701, 1785) /
+ &0.990998E-02,0.989805E-02,0.115477E+00,0.314713E-02,0.213972E+00,
+ &0.318081E+00,0.911149E-02,0.915408E-02,0.912316E-02,0.911149E-02,
+ &0.102820E+00,0.304556E-02,0.201311E+00,0.295830E+00,0.836852E-02,
+ &0.841111E-02,0.837984E-02,0.836852E-02,0.914804E-01,0.292596E-02,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.374678E+00,0.616087E+00,0.139531E-01,0.139531E-01,0.139531E-01,
+ &0.139531E-01,0.272491E+00,-.693889E-17,0.358052E+00,0.580345E+00,
+ &0.130624E-01,0.130680E-01,0.130641E-01,0.130624E-01,0.245861E+00,
+ &0.460255E-03,0.341487E+00,0.545719E+00,0.121971E-01,0.122076E-01,
+ &0.122002E-01,0.121971E-01,0.220877E+00,0.826785E-03,0.325046E+00/
+ DATA (DL(K),K= 1786, 1870) /
+ &0.512244E+00,0.113599E-01,0.113748E-01,0.113641E-01,0.113599E-01,
+ &0.197730E+00,0.111366E-02,0.308783E+00,0.479952E+00,0.105534E-01,
+ &0.105720E-01,0.105585E-01,0.105534E-01,0.176497E+00,0.133192E-02,
+ &0.292747E+00,0.448868E+00,0.977938E-02,0.980112E-02,0.978518E-02,
+ &0.977938E-02,0.157150E+00,0.149139E-02,0.276986E+00,0.419015E+00,
+ &0.903955E-02,0.906394E-02,0.904584E-02,0.903955E-02,0.139631E+00,
+ &0.160093E-02,0.261546E+00,0.390412E+00,0.833509E-02,0.836165E-02,
+ &0.834171E-02,0.833509E-02,0.123850E+00,0.166838E-02,0.246467E+00,
+ &0.363074E+00,0.766687E-02,0.769516E-02,0.767369E-02,0.766687E-02,
+ &0.109695E+00,0.170073E-02,0.231787E+00,0.337008E+00,0.703540E-02,
+ &0.706500E-02,0.704230E-02,0.703540E-02,0.970428E-01,0.170416E-02,
+ &0.217542E+00,0.312218E+00,0.644083E-02,0.647137E-02,0.644772E-02,
+ &0.644083E-02,0.857658E-01,0.168409E-02,0.203759E+00,0.288701E+00,
+ &0.588300E-02,0.591415E-02,0.588981E-02,0.588300E-02,0.757385E-01,
+ &0.164528E-02,0.190467E+00,0.266449E+00,0.536147E-02,0.539292E-02,
+ &0.536812E-02,0.536147E-02,0.668383E-01,0.159185E-02,0.177686E+00,
+ &0.245447E+00,0.487551E-02,0.490698E-02,0.488195E-02,0.487551E-02/
+ DATA (DL(K),K= 1871, 1955) /
+ &0.589492E-01,0.152735E-02,0.165434E+00,0.225677E+00,0.442416E-02,
+ &0.445543E-02,0.443037E-02,0.442416E-02,0.519652E-01,0.145483E-02,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.348042E+00,0.534691E+00,0.867977E-02,0.867977E-02,0.867977E-02,
+ &0.867977E-02,0.182547E+00,-.693889E-17,0.329349E+00,0.498248E+00,
+ &0.800724E-02,0.801198E-02,0.800836E-02,0.800724E-02,0.161948E+00,
+ &0.250949E-03,0.311047E+00,0.463485E+00,0.737155E-02,0.738040E-02,
+ &0.737356E-02,0.737155E-02,0.143267E+00,0.447662E-03,0.293181E+00,
+ &0.430377E+00,0.677169E-02,0.678409E-02,0.677441E-02,0.677169E-02,
+ &0.126447E+00,0.598803E-03,0.275787E+00,0.398907E+00,0.620726E-02/
+ DATA (DL(K),K= 1956, 2040) /
+ &0.622265E-02,0.621051E-02,0.620726E-02,0.111401E+00,0.711280E-03,
+ &0.258900E+00,0.369051E+00,0.567741E-02,0.569532E-02,0.568106E-02,
+ &0.567741E-02,0.979944E-01,0.790986E-03,0.242550E+00,0.340785E+00,
+ &0.518138E-02,0.520134E-02,0.518531E-02,0.518138E-02,0.860936E-01,
+ &0.843227E-03,0.226765E+00,0.314083E+00,0.471828E-02,0.473987E-02,
+ &0.472238E-02,0.471828E-02,0.755615E-01,0.872644E-03,0.211568E+00,
+ &0.288916E+00,0.428714E-02,0.430998E-02,0.429133E-02,0.428714E-02,
+ &0.662627E-01,0.883319E-03,0.196981E+00,0.265252E+00,0.388691E-02,
+ &0.391065E-02,0.389112E-02,0.388691E-02,0.580684E-01,0.878818E-03,
+ &0.183020E+00,0.243053E+00,0.351645E-02,0.354077E-02,0.352060E-02,
+ &0.351645E-02,0.508578E-01,0.862228E-03,0.169696E+00,0.222280E+00,
+ &0.317451E-02,0.319914E-02,0.317858E-02,0.317451E-02,0.445190E-01,
+ &0.836224E-03,0.157017E+00,0.202888E+00,0.285982E-02,0.288450E-02,
+ &0.286376E-02,0.285982E-02,0.389523E-01,0.803096E-03,0.144987E+00,
+ &0.184832E+00,0.257101E-02,0.259553E-02,0.257480E-02,0.257101E-02,
+ &0.340677E-01,0.764787E-03,0.133605E+00,0.168060E+00,0.230670E-02,
+ &0.233087E-02,0.231031E-02,0.230670E-02,0.297820E-01,0.722929E-03/
+ DATA (DL(K),K= 2041, 2125) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.316867E+00,0.451111E+00,0.522815E-02,0.522815E-02,0.522815E-02,
+ &0.522815E-02,0.119118E+00,0.889046E-17,0.296950E+00,0.415915E+00,
+ &0.475497E-02,0.475914E-02,0.475574E-02,0.475497E-02,0.104204E+00,
+ &0.132513E-03,0.277735E+00,0.382805E+00,0.431809E-02,0.432582E-02,
+ &0.431944E-02,0.431809E-02,0.910279E-01,0.235347E-03,0.259241E+00,
+ &0.351694E+00,0.391455E-02,0.392531E-02,0.391637E-02,0.391455E-02,
+ &0.794222E-01,0.313322E-03,0.241485E+00,0.322517E+00,0.354249E-02,
+ &0.355575E-02,0.354464E-02,0.354249E-02,0.692354E-01,0.370408E-03,
+ &0.224480E+00,0.295202E+00,0.319987E-02,0.321518E-02,0.320226E-02/
+ DATA (DL(K),K= 2126, 2210) /
+ &0.319987E-02,0.603106E-01,0.409866E-03,0.208235E+00,0.269681E+00,
+ &0.288490E-02,0.290184E-02,0.288744E-02,0.288490E-02,0.525034E-01,
+ &0.434663E-03,0.192759E+00,0.245887E+00,0.259589E-02,0.261407E-02,
+ &0.259852E-02,0.259589E-02,0.456838E-01,0.447393E-03,0.178054E+00,
+ &0.223752E+00,0.233123E-02,0.235033E-02,0.233390E-02,0.233123E-02,
+ &0.397318E-01,0.450314E-03,0.164120E+00,0.203207E+00,0.208941E-02,
+ &0.210910E-02,0.209206E-02,0.208941E-02,0.345396E-01,0.445394E-03,
+ &0.150954E+00,0.184182E+00,0.186896E-02,0.188897E-02,0.187155E-02,
+ &0.186896E-02,0.300131E-01,0.434333E-03,0.138548E+00,0.166608E+00,
+ &0.166844E-02,0.168854E-02,0.167096E-02,0.166844E-02,0.260692E-01,
+ &0.418584E-03,0.126892E+00,0.150412E+00,0.148650E-02,0.150648E-02,
+ &0.148891E-02,0.148650E-02,0.226325E-01,0.399380E-03,0.115971E+00,
+ &0.135523E+00,0.132180E-02,0.134148E-02,0.132409E-02,0.132180E-02,
+ &0.196374E-01,0.377764E-03,0.105767E+00,0.121870E+00,0.117308E-02,
+ &0.119231E-02,0.117524E-02,0.117308E-02,0.170312E-01,0.354610E-03,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 2211, 2295) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.282579E+00,0.369670E+00,0.302765E-02,0.302765E-02,0.302765E-02,
+ &0.302765E-02,0.752529E-01,-.455365E-17,0.262229E+00,0.337209E+00,
+ &0.271512E-02,0.271883E-02,0.271564E-02,0.271512E-02,0.651086E-01,
+ &0.669321E-04,0.242857E+00,0.307069E+00,0.243269E-02,0.243953E-02,
+ &0.243360E-02,0.243269E-02,0.563252E-01,0.118744E-03,0.224455E+00,
+ &0.279111E+00,0.217687E-02,0.218631E-02,0.217808E-02,0.217687E-02,
+ &0.487143E-01,0.157767E-03,0.207014E+00,0.253223E+00,0.194534E-02,
+ &0.195689E-02,0.194675E-02,0.194534E-02,0.421227E-01,0.186063E-03,
+ &0.190523E+00,0.229293E+00,0.173585E-02,0.174909E-02,0.173741E-02,
+ &0.173585E-02,0.364156E-01,0.205286E-03,0.174969E+00,0.207218E+00,
+ &0.154647E-02,0.156100E-02,0.154811E-02,0.154647E-02,0.314732E-01/
+ DATA (DL(K),K= 2296, 2380) /
+ &0.216964E-03,0.160335E+00,0.186895E+00,0.137545E-02,0.139092E-02,
+ &0.137713E-02,0.137545E-02,0.271927E-01,0.222455E-03,0.146604E+00,
+ &0.168227E+00,0.122121E-02,0.123733E-02,0.122290E-02,0.122121E-02,
+ &0.234852E-01,0.222947E-03,0.133756E+00,0.151116E+00,0.108234E-02,
+ &0.109881E-02,0.108400E-02,0.108234E-02,0.202747E-01,0.219474E-03,
+ &0.121765E+00,0.135471E+00,0.957502E-03,0.974107E-03,0.959112E-03,
+ &0.957502E-03,0.174932E-01,0.212928E-03,0.110606E+00,0.121198E+00,
+ &0.845493E-03,0.862024E-03,0.847037E-03,0.845493E-03,0.150824E-01,
+ &0.204075E-03,0.100250E+00,0.108210E+00,0.745196E-03,0.761482E-03,
+ &0.746662E-03,0.745196E-03,0.129965E-01,0.193573E-03,0.906661E-01,
+ &0.964191E-01,0.655569E-03,0.671466E-03,0.656948E-03,0.655569E-03,
+ &0.111930E-01,0.181962E-03,0.818218E-01,0.857412E-01,0.575637E-03,
+ &0.591030E-03,0.576925E-03,0.575637E-03,0.962922E-02,0.169687E-03,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 2381, 2465) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.246444E+00,0.293515E+00,0.167124E-02,0.167124E-02,0.167124E-02,
+ &0.167124E-02,0.456929E-01,-.260209E-17,0.226393E+00,0.264836E+00,
+ &0.147748E-02,0.148085E-02,0.147783E-02,0.147748E-02,0.392393E-01,
+ &0.318190E-04,0.207552E+00,0.238550E+00,0.130596E-02,0.131212E-02,
+ &0.130656E-02,0.130596E-02,0.337276E-01,0.566426E-04,0.189877E+00,
+ &0.214470E+00,0.115347E-02,0.116190E-02,0.115427E-02,0.115347E-02,
+ &0.290012E-01,0.753776E-04,0.173336E+00,0.192452E+00,0.101789E-02,
+ &0.102811E-02,0.101881E-02,0.101789E-02,0.249381E-01,0.889466E-04,
+ &0.157889E+00,0.172355E+00,0.897268E-03,0.908872E-03,0.898270E-03,
+ &0.897268E-03,0.214419E-01,0.980950E-04,0.143501E+00,0.154046E+00,
+ &0.789951E-03,0.802565E-03,0.790996E-03,0.789951E-03,0.184296E-01,
+ &0.103536E-03,0.130132E+00,0.137402E+00,0.694510E-03,0.707811E-03,
+ &0.695568E-03,0.694510E-03,0.158331E-01,0.105929E-03,0.117743E+00/
+ DATA (DL(K),K= 2466, 2550) /
+ &0.122303E+00,0.609684E-03,0.623394E-03,0.610733E-03,0.609684E-03,
+ &0.135929E-01,0.105853E-03,0.106293E+00,0.108637E+00,0.534365E-03,
+ &0.548244E-03,0.535386E-03,0.534365E-03,0.116583E-01,0.103825E-03,
+ &0.957386E-01,0.962976E-01,0.467572E-03,0.481416E-03,0.468551E-03,
+ &0.467572E-03,0.999103E-02,0.100301E-03,0.860376E-01,0.851820E-01,
+ &0.408422E-03,0.422062E-03,0.409350E-03,0.408422E-03,0.855563E-02,
+ &0.956675E-04,0.771455E-01,0.751930E-01,0.356117E-03,0.369416E-03,
+ &0.356989E-03,0.356117E-03,0.731542E-02,0.902499E-04,0.690178E-01,
+ &0.662386E-01,0.309950E-03,0.322797E-03,0.310761E-03,0.309950E-03,
+ &0.624633E-02,0.843305E-04,0.616096E-01,0.582312E-01,0.269281E-03,
+ &0.281590E-03,0.270030E-03,0.269281E-03,0.533230E-02,0.781441E-04,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 2551, 2635) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.209608E+00,0.224862E+00,0.869706E-03,0.869706E-03,0.869706E-03,
+ &0.869706E-03,0.264204E-01,-.138236E-17,0.190523E+00,0.200603E+00,
+ &0.757542E-03,0.760626E-03,0.757768E-03,0.757542E-03,0.226261E-01,
+ &0.138827E-04,0.172819E+00,0.178656E+00,0.660281E-03,0.665837E-03,
+ &0.660670E-03,0.660281E-03,0.194018E-01,0.249832E-04,0.156420E+00,
+ &0.158805E+00,0.575414E-03,0.582918E-03,0.575917E-03,0.575414E-03,
+ &0.166434E-01,0.334851E-04,0.141265E+00,0.140883E+00,0.501258E-03,
+ &0.510252E-03,0.501836E-03,0.501258E-03,0.142710E-01,0.397017E-04,
+ &0.127291E+00,0.124732E+00,0.436386E-03,0.446473E-03,0.437008E-03,
+ &0.436386E-03,0.122297E-01,0.439154E-04,0.114437E+00,0.110205E+00,
+ &0.379575E-03,0.390415E-03,0.380217E-03,0.379575E-03,0.104701E-01,
+ &0.464110E-04,0.102644E+00,0.971655E-01,0.329805E-03,0.341109E-03,
+ &0.330448E-03,0.329805E-03,0.895086E-02,0.474758E-04,0.918521E-01,
+ &0.854876E-01,0.286206E-03,0.297729E-03,0.286836E-03,0.286206E-03,
+ &0.764249E-02,0.473771E-04,0.820032E-01,0.750529E-01,0.248027E-03/
+ DATA (DL(K),K= 2636, 2720) /
+ &0.259564E-03,0.248633E-03,0.248027E-03,0.651744E-02,0.463561E-04,
+ &0.730394E-01,0.657510E-01,0.214611E-03,0.225995E-03,0.215186E-03,
+ &0.214611E-03,0.554573E-02,0.446239E-04,0.649040E-01,0.574789E-01,
+ &0.185396E-03,0.196491E-03,0.185935E-03,0.185396E-03,0.470938E-02,
+ &0.423722E-04,0.575411E-01,0.501405E-01,0.159891E-03,0.170590E-03,
+ &0.160391E-03,0.159891E-03,0.399752E-02,0.397689E-04,0.508960E-01,
+ &0.436466E-01,0.137650E-03,0.147874E-03,0.138111E-03,0.137650E-03,
+ &0.338807E-02,0.369434E-04,0.449157E-01,0.379141E-01,0.118285E-03,
+ &0.127973E-03,0.118705E-03,0.118285E-03,0.286125E-02,0.340035E-04,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 2721, 2805) /
+ &0.173133E+00,0.165162E+00,0.420483E-03,0.420483E-03,0.420483E-03,
+ &0.420483E-03,0.143704E-01,0.418773E-17,0.155600E+00,0.145586E+00,
+ &0.360490E-03,0.363140E-03,0.360629E-03,0.360490E-03,0.123560E-01,
+ &0.533279E-05,0.139551E+00,0.128113E+00,0.309555E-03,0.314310E-03,
+ &0.309792E-03,0.309555E-03,0.106262E-01,0.982612E-05,0.124876E+00,
+ &0.112516E+00,0.265952E-03,0.272344E-03,0.266256E-03,0.265952E-03,
+ &0.913151E-02,0.133834E-04,0.111490E+00,0.986188E-01,0.228522E-03,
+ &0.236138E-03,0.228869E-03,0.228522E-03,0.783135E-02,0.160429E-04,
+ &0.993081E-01,0.862590E-01,0.196336E-03,0.204821E-03,0.196706E-03,
+ &0.196336E-03,0.670031E-02,0.178799E-04,0.882484E-01,0.752883E-01,
+ &0.168604E-03,0.177655E-03,0.168981E-03,0.168604E-03,0.572016E-02,
+ &0.189837E-04,0.782334E-01,0.655714E-01,0.144684E-03,0.154047E-03,
+ &0.145058E-03,0.144684E-03,0.487276E-02,0.194655E-04,0.691885E-01,
+ &0.569841E-01,0.124035E-03,0.133497E-03,0.124397E-03,0.124035E-03,
+ &0.413648E-02,0.194296E-04,0.610420E-01,0.494128E-01,0.106203E-03,
+ &0.115592E-03,0.106548E-03,0.106203E-03,0.350042E-02,0.189800E-04,
+ &0.537249E-01,0.427533E-01,0.908141E-04,0.999895E-04,0.911377E-04/
+ DATA (DL(K),K= 2806, 2890) /
+ &0.908141E-04,0.295961E-02,0.182192E-04,0.471713E-01,0.369100E-01,
+ &0.775359E-04,0.863895E-04,0.778360E-04,0.775359E-04,0.249629E-02,
+ &0.172287E-04,0.413182E-01,0.317957E-01,0.660857E-04,0.745356E-04,
+ &0.663611E-04,0.660857E-04,0.209482E-02,0.160791E-04,0.361056E-01,
+ &0.273306E-01,0.562298E-04,0.642173E-04,0.564804E-04,0.562298E-04,
+ &0.175588E-02,0.148407E-04,0.314766E-01,0.234421E-01,0.477598E-04,
+ &0.552457E-04,0.479859E-04,0.477598E-04,0.147398E-02,0.135653E-04,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.138007E+00,0.115214E+00,0.185072E-03,0.185072E-03,0.185072E-03,
+ &0.185072E-03,0.722856E-02,-.380826E-17,0.122517E+00,0.100251E+00/
+ DATA (DL(K),K= 2891, 2975) /
+ &0.155814E-03,0.158287E-03,0.155901E-03,0.155814E-03,0.630580E-02,
+ &0.155371E-05,0.108535E+00,0.870870E-01,0.131535E-03,0.135909E-03,
+ &0.131680E-03,0.131535E-03,0.547867E-02,0.304952E-05,0.959260E-01,
+ &0.754985E-01,0.111183E-03,0.116980E-03,0.111366E-03,0.111183E-03,
+ &0.473794E-02,0.433106E-05,0.845828E-01,0.653163E-01,0.940433E-04,
+ &0.100851E-03,0.942493E-04,0.940433E-04,0.407647E-02,0.533613E-05,
+ &0.744017E-01,0.563870E-01,0.795843E-04,0.870596E-04,0.798007E-04,
+ &0.795843E-04,0.349165E-02,0.606691E-05,0.652864E-01,0.485720E-01,
+ &0.673476E-04,0.752069E-04,0.675656E-04,0.673476E-04,0.297273E-02,
+ &0.652898E-05,0.571466E-01,0.417472E-01,0.569700E-04,0.649812E-04,
+ &0.571831E-04,0.569700E-04,0.251732E-02,0.675028E-05,0.498975E-01,
+ &0.358008E-01,0.481618E-04,0.561391E-04,0.483654E-04,0.481618E-04,
+ &0.212754E-02,0.677236E-05,0.434594E-01,0.306320E-01,0.406746E-04,
+ &0.484724E-04,0.408657E-04,0.406746E-04,0.179059E-02,0.662814E-05,
+ &0.377578E-01,0.261500E-01,0.343050E-04,0.418123E-04,0.344818E-04,
+ &0.343050E-04,0.149563E-02,0.635273E-05,0.327229E-01,0.222734E-01,
+ &0.288923E-04,0.360279E-04,0.290540E-04,0.288923E-04,0.124695E-02/
+ DATA (DL(K),K= 2976, 3060) /
+ &0.598767E-05,0.282894E-01,0.189287E-01,0.242960E-04,0.310036E-04,
+ &0.244423E-04,0.242960E-04,0.104112E-02,0.556344E-05,0.243968E-01,
+ &0.160504E-01,0.203920E-04,0.266363E-04,0.205232E-04,0.203920E-04,
+ &0.863677E-03,0.510070E-05,0.209890E-01,0.135797E-01,0.170822E-04,
+ &0.228449E-04,0.171989E-04,0.170822E-04,0.711641E-03,0.462338E-05,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.105155E+00,0.752467E-01,0.719932E-04,0.719932E-04,0.719932E-04,
+ &0.719932E-04,0.328057E-02,-.758942E-18,0.920856E-01,0.645455E-01,
+ &0.592305E-04,0.615087E-04,0.592802E-04,0.592305E-04,0.295327E-02,
+ &0.945234E-07,0.804695E-01,0.552770E-01,0.489125E-04,0.528632E-04/
+ DATA (DL(K),K= 3061, 3145) /
+ &0.489946E-04,0.489125E-04,0.261804E-02,0.365139E-06,0.701499E-01,
+ &0.472409E-01,0.404786E-04,0.456186E-04,0.405807E-04,0.404786E-04,
+ &0.229460E-02,0.686912E-06,0.610049E-01,0.402864E-01,0.335367E-04,
+ &0.394631E-04,0.336495E-04,0.335367E-04,0.198445E-02,0.981070E-06,
+ &0.529201E-01,0.342803E-01,0.278134E-04,0.342044E-04,0.279301E-04,
+ &0.278134E-04,0.169772E-02,0.122521E-05,0.457907E-01,0.291037E-01,
+ &0.230821E-04,0.296833E-04,0.231978E-04,0.230821E-04,0.144575E-02,
+ &0.140819E-05,0.395205E-01,0.246522E-01,0.191553E-04,0.257661E-04,
+ &0.192666E-04,0.191553E-04,0.122125E-02,0.152152E-05,0.340212E-01,
+ &0.208330E-01,0.158874E-04,0.223546E-04,0.159921E-04,0.158874E-04,
+ &0.101912E-02,0.156880E-05,0.292116E-01,0.175644E-01,0.131678E-04,
+ &0.193783E-04,0.132645E-04,0.131678E-04,0.847586E-03,0.156432E-05,
+ &0.250173E-01,0.147740E-01,0.109029E-04,0.167762E-04,0.109910E-04,
+ &0.109029E-04,0.705515E-03,0.151845E-05,0.213702E-01,0.123979E-01,
+ &0.901273E-05,0.144953E-04,0.909200E-05,0.901273E-05,0.581767E-03,
+ &0.143817E-05,0.182083E-01,0.103797E-01,0.743733E-05,0.124978E-04,
+ &0.750792E-05,0.743733E-05,0.475483E-03,0.133574E-05,0.154751E-01/
+ DATA (DL(K),K= 3146, 3230) /
+ &0.867011E-02,0.612722E-05,0.107517E-04,0.618950E-05,0.612722E-05,
+ &0.390116E-03,0.122183E-05,0.131193E-01,0.722560E-02,0.503734E-05,
+ &0.922584E-05,0.509185E-05,0.503734E-05,0.319980E-03,0.110130E-05,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.754424E-01,0.449848E-01,0.236444E-04,0.236444E-04,0.236444E-04,
+ &0.236444E-04,0.129291E-02,0.113079E-17,0.650429E-01,0.379660E-01,
+ &0.187739E-04,0.207130E-04,0.187990E-04,0.187739E-04,0.124038E-02,
+ &-.327995E-06,0.559588E-01,0.319936E-01,0.149625E-04,0.182671E-04,
+ &0.150033E-04,0.149625E-04,0.113497E-02,-.464337E-06,0.480234E-01,
+ &0.269030E-01,0.119484E-04,0.161746E-04,0.119982E-04,0.119484E-04/
+ DATA (DL(K),K= 3231, 3315) /
+ &0.100877E-02,-.490618E-06,0.411091E-01,0.225716E-01,0.954833E-05,
+ &0.143391E-04,0.960250E-05,0.954833E-05,0.883852E-03,-.461770E-06,
+ &0.350995E-01,0.188947E-01,0.763738E-05,0.127129E-04,0.769248E-05,
+ &0.763738E-05,0.760077E-03,-.403363E-06,0.298897E-01,0.157798E-01,
+ &0.611070E-05,0.112548E-04,0.616439E-05,0.611070E-05,0.639505E-03,
+ &-.335607E-06,0.253856E-01,0.131470E-01,0.488993E-05,0.994021E-05,
+ &0.494070E-05,0.488993E-05,0.534131E-03,-.267652E-06,0.215026E-01,
+ &0.109271E-01,0.391276E-05,0.875190E-05,0.395967E-05,0.391276E-05,
+ &0.445478E-03,-.205292E-06,0.181648E-01,0.906007E-02,0.312720E-05,
+ &0.767418E-05,0.316978E-05,0.312720E-05,0.366232E-03,-.154024E-06,
+ &0.153041E-01,0.749382E-02,0.249633E-05,0.670002E-05,0.253440E-05,
+ &0.249633E-05,0.297435E-03,-.112673E-06,0.128596E-01,0.618334E-02,
+ &0.199074E-05,0.582360E-05,0.202435E-05,0.199074E-05,0.242305E-03,
+ &-.794410E-07,0.107770E-01,0.508977E-02,0.158457E-05,0.503733E-05,
+ &0.161393E-05,0.158457E-05,0.196927E-03,-.546702E-07,0.900806E-02,
+ &0.417964E-02,0.125888E-05,0.433619E-05,0.128428E-05,0.125888E-05,
+ &0.158171E-03,-.364714E-07,0.751006E-02,0.342418E-02,0.998674E-06/
+ DATA (DL(K),K= 3316, 3400) /
+ &0.371518E-05,0.102046E-05,0.998674E-06,0.126865E-03,-.228706E-07,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.496787E-01,0.236961E-01,0.607312E-05,0.607312E-05,0.607312E-05,
+ &0.607312E-05,0.415108E-03,-.140523E-17,0.420445E-01,0.196196E-01,
+ &0.443589E-05,0.603481E-05,0.444683E-05,0.443589E-05,0.444425E-03,
+ &-.375397E-06,0.355108E-01,0.162223E-01,0.321766E-05,0.587645E-05,
+ &0.323504E-05,0.321766E-05,0.432635E-03,-.593989E-06,0.299148E-01,
+ &0.133836E-01,0.231504E-05,0.562250E-05,0.233581E-05,0.231504E-05,
+ &0.395801E-03,-.699904E-06,0.251339E-01,0.110157E-01,0.164651E-05,
+ &0.526880E-05,0.166853E-05,0.164651E-05,0.344925E-03,-.733095E-06/
+ DATA (DL(K),K= 3401, 3485) /
+ &0.210605E-01,0.904539E-02,0.115940E-05,0.485739E-05,0.118122E-05,
+ &0.115940E-05,0.294439E-03,-.715193E-06,0.175989E-01,0.740944E-02,
+ &0.808365E-06,0.441709E-05,0.829075E-06,0.808365E-06,0.249093E-03,
+ &-.665420E-06,0.146656E-01,0.605433E-02,0.555563E-06,0.396078E-05,
+ &0.574607E-06,0.555563E-06,0.205675E-03,-.600648E-06,0.121872E-01,
+ &0.493466E-02,0.375914E-06,0.350822E-05,0.393011E-06,0.375914E-06,
+ &0.166757E-03,-.529210E-06,0.100993E-01,0.401191E-02,0.250032E-06,
+ &0.307359E-05,0.265094E-06,0.250032E-06,0.135196E-03,-.456996E-06,
+ &0.834582E-02,0.325348E-02,0.162261E-06,0.266488E-05,0.175325E-06,
+ &0.162261E-06,0.108862E-03,-.388821E-06,0.687767E-02,0.263179E-02,
+ &0.102273E-06,0.228913E-05,0.113453E-06,0.102273E-06,0.865539E-04,
+ &-.326325E-06,0.565221E-02,0.212357E-02,0.620694E-07,0.194975E-05,
+ &0.715290E-07,0.620694E-07,0.687156E-04,-.270547E-06,0.463248E-02,
+ &0.170926E-02,0.351992E-07,0.164711E-05,0.431226E-07,0.351992E-07,
+ &0.543744E-04,-.222379E-06,0.378655E-02,0.137242E-02,0.178902E-07,
+ &0.138124E-05,0.244675E-07,0.178902E-07,0.426626E-04,-.181158E-06,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 3486, 3570) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.286141E-01,0.102357E-01,0.105702E-05,0.105702E-05,0.105702E-05,
+ &0.105702E-05,0.963318E-04,0.591070E-18,0.236608E-01,0.827483E-02,
+ &0.548552E-06,0.163293E-05,0.551993E-06,0.548552E-06,0.133058E-03,
+ &-.268677E-06,0.195282E-01,0.668247E-02,0.238780E-06,0.183459E-05,
+ &0.243802E-06,0.238780E-06,0.135119E-03,-.393414E-06,0.160742E-01,
+ &0.538444E-02,0.599864E-07,0.183277E-05,0.655085E-07,0.599864E-07,
+ &0.124554E-03,-.428349E-06,0.131940E-01,0.432750E-02,-.392825E-07,
+ &0.172071E-05,-.338391E-07,-.392825E-07,0.111121E-03,-.415550E-06,
+ &0.107996E-01,0.346954E-02,-.875089E-07,0.154604E-05,-.824926E-07,
+ &-.875089E-07,0.941854E-04,-.376855E-06,0.881435E-02,0.277463E-02/
+ DATA (DL(K),K= 3571, 3655) /
+ &-.103962E-06,0.135013E-05,-.995446E-07,-.103962E-06,0.772195E-04,
+ &-.326008E-06,0.717317E-02,0.221313E-02,-.102844E-06,0.115335E-05,
+ &-.990733E-07,-.102844E-06,0.626565E-04,-.272858E-06,0.582050E-02,
+ &0.176061E-02,-.929503E-07,0.967229E-06,-.898064E-07,-.929503E-07,
+ &0.499930E-04,-.222828E-06,0.470908E-02,0.139692E-02,-.791495E-07,
+ &0.800414E-06,-.765797E-07,-.791495E-07,0.394181E-04,-.178141E-06,
+ &0.379875E-02,0.110542E-02,-.647230E-07,0.655119E-06,-.626567E-07,
+ &-.647230E-07,0.309999E-04,-.140000E-06,0.305549E-02,0.872447E-03,
+ &-.515215E-07,0.530834E-06,-.498829E-07,-.515215E-07,0.240354E-04,
+ &-.108633E-06,0.245058E-02,0.686769E-03,-.400234E-07,0.426835E-06,
+ &-.387401E-07,-.400234E-07,0.184613E-04,-.832544E-07,0.195984E-02,
+ &0.539209E-03,-.304312E-07,0.341169E-06,-.294373E-07,-.304312E-07,
+ &0.143512E-04,-.630818E-07,0.156297E-02,0.422273E-03,-.228633E-07,
+ &0.271199E-06,-.221014E-07,-.228633E-07,0.110898E-04,-.474683E-07,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 3656, 3740) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.129345E-01,0.308444E-02,0.903693E-07,0.903693E-07,0.903693E-07,
+ &0.903693E-07,0.123538E-04,-.166230E-18,0.103598E-01,0.241354E-02,
+ &0.155648E-06,-.205296E-06,0.154889E-06,0.155648E-06,0.267249E-04,
+ &0.880707E-07,0.828507E-02,0.188764E-02,0.176333E-06,-.341498E-06,
+ &0.175220E-06,0.176333E-06,0.306432E-04,0.125718E-06,0.660736E-02,
+ &0.147304E-02,0.173444E-06,-.383695E-06,0.172215E-06,0.173444E-06,
+ &0.280787E-04,0.135578E-06,0.525320E-02,0.114618E-02,0.158651E-06,
+ &-.373371E-06,0.157437E-06,0.158651E-06,0.243526E-04,0.130412E-06,
+ &0.416429E-02,0.889584E-03,0.137131E-06,-.333468E-06,0.136012E-06,
+ &0.137131E-06,0.203463E-04,0.116115E-06,0.329102E-02,0.688580E-03,
+ &0.113839E-06,-.280874E-06,0.112853E-06,0.113839E-06,0.161038E-04,
+ &0.982305E-07,0.259282E-02,0.531508E-03,0.914374E-07,-.225427E-06/
+ DATA (DL(K),K= 3741, 3825) /
+ &0.905971E-07,0.914374E-07,0.125639E-04,0.798741E-07,0.203641E-02,
+ &0.409120E-03,0.709595E-07,-.173123E-06,0.702607E-07,0.709595E-07,
+ &0.979247E-05,0.624138E-07,0.159441E-02,0.314027E-03,0.532256E-07,
+ &-.127272E-06,0.526566E-07,0.532256E-07,0.741899E-05,0.469253E-07,
+ &0.124447E-02,0.240357E-03,0.385509E-07,-.888851E-07,0.380956E-07,
+ &0.385509E-07,0.554070E-05,0.339174E-07,0.968328E-03,0.183454E-03,
+ &0.267272E-07,-.580277E-07,0.263687E-07,0.267272E-07,0.420032E-05,
+ &0.233280E-07,0.751159E-03,0.139632E-03,0.174605E-07,-.342016E-07,
+ &0.171822E-07,0.174605E-07,0.315522E-05,0.149727E-07,0.580936E-03,
+ &0.105986E-03,0.104515E-07,-.164567E-07,0.102383E-07,0.104515E-07,
+ &0.230829E-05,0.863527E-08,0.447955E-03,0.802293E-04,0.531954E-08,
+ &-.376312E-08,0.515829E-08,0.531954E-08,0.170771E-05,0.399662E-08,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 3826, 3910) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.324478E-02,0.386879E-03,0.135983E-08,0.135983E-08,0.135983E-08,
+ &0.135983E-08,0.371787E-06,-.274599E-19,0.246219E-02,0.286505E-03,
+ &-.106852E-06,0.327611E-06,-.106589E-06,-.106852E-06,0.231631E-05,
+ &-.107814E-06,0.186777E-02,0.212413E-03,-.161566E-06,0.492001E-06,
+ &-.161179E-06,-.161566E-06,0.311589E-05,-.162249E-06,0.141322E-02,
+ &0.157212E-03,-.183398E-06,0.557106E-06,-.182972E-06,-.183398E-06,
+ &0.267943E-05,-.183884E-06,0.106518E-02,0.115892E-03,-.185231E-06,
+ &0.562185E-06,-.184809E-06,-.185231E-06,0.203027E-05,-.185573E-06,
+ &0.800350E-03,0.851995E-04,-.174680E-06,0.530096E-06,-.174290E-06,
+ &-.174680E-06,0.165870E-05,-.174922E-06,0.599444E-03,0.624676E-04,
+ &-.157644E-06,0.478420E-06,-.157300E-06,-.157644E-06,0.130112E-05,
+ &-.157815E-06,0.447433E-03,0.456556E-04,-.137838E-06,0.418429E-06,
+ &-.137543E-06,-.137838E-06,0.903220E-06,-.137958E-06,0.332836E-03,
+ &0.332643E-04,-.117616E-06,0.357179E-06,-.117368E-06,-.117616E-06/
+ DATA (DL(K),K= 3911, 3995) /
+ &0.636187E-06,-.117699E-06,0.246754E-03,0.241622E-04,-.984560E-07,
+ &0.299077E-06,-.982529E-07,-.984560E-07,0.481221E-06,-.985144E-07,
+ &0.182315E-03,0.174961E-04,-.811089E-07,0.246465E-06,-.809446E-07,
+ &-.811089E-07,0.342859E-06,-.811495E-07,0.134250E-03,0.126299E-04,
+ &-.659052E-07,0.200354E-06,-.657742E-07,-.659052E-07,0.227840E-06,
+ &-.659334E-07,0.985288E-04,0.908931E-05,-.529252E-07,0.160947E-06,
+ &-.528218E-07,-.529252E-07,0.161641E-06,-.529447E-07,0.720750E-04,
+ &0.652153E-05,-.420621E-07,0.127943E-06,-.419814E-07,-.420621E-07,
+ &0.119540E-06,-.420756E-07,0.525538E-04,0.466527E-05,-.331141E-07,
+ &0.100758E-06,-.330516E-07,-.331141E-07,0.808991E-07,-.331233E-07,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 3996, 4000) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+C
+ ANS = 0.
+ IF (X.GT.0.9985) RETURN
+ IF ( ((I.EQ.3).OR.(I.EQ.8)) .AND. (X.GT.0.95) ) RETURN
+C
+ IS = S/DELTA+1
+ IS1 = IS+1
+ DO 1 L=1,25
+ KL = L+NDRV*25
+ F1(L) = GF(I,IS,KL)
+ F2(L) = GF(I,IS1,KL)
+ 1 CONTINUE
+ A1 = DT_CKMTFF(X,F1)
+ A2 = DT_CKMTFF(X,F2)
+C A1=ALOG(A1)
+C A2=ALOG(A2)
+ S1 = (IS-1)*DELTA
+ S2 = S1+DELTA
+ ANS = A1*(S-S2)/(S1-S2)+A2*(S-S1)/(S2-S1)
+C ANS=EXP(ANS)
+ RETURN
+ END
+C
+C
+CDECK ID>, DT_CKMTPR
+ SUBROUTINE DT_CKMTPR(I,NDRV,X,S,ANS)
+C
+C**********************************************************************
+C Proton - PDFs
+C I = 1, 2, 3, 4, 5, 7, 8 : xu, xd, xub, xdb, xsb, xg, xc
+C ANS = PDF(I)
+C This version by S. Roesler, 31.01.96
+C**********************************************************************
+
+ SAVE
+ DIMENSION F1(25),F2(25),GF(8,20,25),DL(4000)
+ EQUIVALENCE (GF(1,1,1),DL(1))
+ DATA DELTA/.10/
+C
+ DATA (DL(K),K= 1, 85) /
+ &0.367759E+00,0.350609E+00,0.325356E+00,0.325356E+00,0.325356E+00,
+ &0.325356E+00,0.533117E+01,0.138778E-16,0.427988E+00,0.409718E+00,
+ &0.382948E+00,0.382920E+00,0.382933E+00,0.382948E+00,0.686279E+01,
+ &0.611113E-01,0.494752E+00,0.475328E+00,0.447011E+00,0.446959E+00,
+ &0.446984E+00,0.447011E+00,0.855688E+01,0.128659E+00,0.568248E+00,
+ &0.547637E+00,0.517743E+00,0.517671E+00,0.517705E+00,0.517743E+00,
+ &0.104074E+02,0.202846E+00,0.648622E+00,0.626792E+00,0.595289E+00,
+ &0.595201E+00,0.595244E+00,0.595289E+00,0.124065E+02,0.283819E+00,
+ &0.735974E+00,0.712890E+00,0.679748E+00,0.679648E+00,0.679696E+00,
+ &0.679748E+00,0.145441E+02,0.371679E+00,0.830359E+00,0.805987E+00,
+ &0.771173E+00,0.771066E+00,0.771119E+00,0.771173E+00,0.168081E+02,
+ &0.466485E+00,0.931778E+00,0.906084E+00,0.869566E+00,0.869456E+00,
+ &0.869511E+00,0.869566E+00,0.191850E+02,0.568240E+00,0.104018E+01,
+ &0.101313E+01,0.974873E+00,0.974763E+00,0.974819E+00,0.974873E+00,
+ &0.216593E+02,0.676890E+00,0.115544E+01,0.112700E+01,0.108698E+01,
+ &0.108687E+01,0.108693E+01,0.108698E+01,0.242146E+02,0.792321E+00,
+ &0.127738E+01,0.124751E+01,0.120570E+01,0.120560E+01,0.120565E+01/
+ DATA (DL(K),K= 86, 170) /
+ &0.120570E+01,0.268333E+02,0.914356E+00,0.140577E+01,0.137444E+01,
+ &0.133079E+01,0.133070E+01,0.133075E+01,0.133079E+01,0.294970E+02,
+ &0.104275E+01,0.154028E+01,0.150745E+01,0.146194E+01,0.146187E+01,
+ &0.146192E+01,0.146194E+01,0.321867E+02,0.117720E+01,0.168054E+01,
+ &0.164619E+01,0.159879E+01,0.159874E+01,0.159877E+01,0.159879E+01,
+ &0.348836E+02,0.131732E+01,0.182613E+01,0.179020E+01,0.174088E+01,
+ &0.174086E+01,0.174088E+01,0.174088E+01,0.375685E+02,0.146269E+01,
+ &0.197653E+01,0.193901E+01,0.188774E+01,0.188774E+01,0.188775E+01,
+ &0.188774E+01,0.402228E+02,0.161282E+01,0.213121E+01,0.209205E+01,
+ &0.203880E+01,0.203884E+01,0.203884E+01,0.203880E+01,0.428285E+02,
+ &0.176714E+01,0.228955E+01,0.224873E+01,0.219348E+01,0.219355E+01,
+ &0.219353E+01,0.219348E+01,0.453682E+02,0.192507E+01,0.245093E+01,
+ &0.240840E+01,0.235113E+01,0.235123E+01,0.235120E+01,0.235113E+01,
+ &0.478258E+02,0.208597E+01,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.349839E+00,0.324128E+00,0.286363E+00,0.286363E+00,0.286363E+00,
+ &0.286363E+00,0.469694E+01,0.000000E+00,0.398361E+00,0.371065E+00/
+ DATA (DL(K),K= 171, 255) /
+ &0.331239E+00,0.331213E+00,0.331227E+00,0.331239E+00,0.586152E+01,
+ &0.481683E-01,0.451010E+00,0.422096E+00,0.380182E+00,0.380137E+00,
+ &0.380161E+00,0.380182E+00,0.711349E+01,0.100378E+00,0.507782E+00,
+ &0.477215E+00,0.433187E+00,0.433128E+00,0.433160E+00,0.433187E+00,
+ &0.844371E+01,0.156627E+00,0.568644E+00,0.536390E+00,0.490220E+00,
+ &0.490152E+00,0.490190E+00,0.490220E+00,0.984291E+01,0.216886E+00,
+ &0.633517E+00,0.599543E+00,0.551204E+00,0.551133E+00,0.551174E+00,
+ &0.551204E+00,0.113005E+02,0.281079E+00,0.702295E+00,0.666565E+00,
+ &0.616031E+00,0.615963E+00,0.616004E+00,0.616031E+00,0.128050E+02,
+ &0.349101E+00,0.774832E+00,0.737311E+00,0.684556E+00,0.684495E+00,
+ &0.684535E+00,0.684556E+00,0.143447E+02,0.420809E+00,0.850945E+00,
+ &0.811598E+00,0.756596E+00,0.756547E+00,0.756583E+00,0.756596E+00,
+ &0.159073E+02,0.496022E+00,0.930413E+00,0.889207E+00,0.831933E+00,
+ &0.831901E+00,0.831931E+00,0.831933E+00,0.174801E+02,0.574524E+00,
+ &0.101298E+01,0.969882E+00,0.910312E+00,0.910301E+00,0.910324E+00,
+ &0.910312E+00,0.190508E+02,0.656061E+00,0.109836E+01,0.105333E+01,
+ &0.991445E+00,0.991459E+00,0.991471E+00,0.991445E+00,0.206070E+02/
+ DATA (DL(K),K= 256, 340) /
+ &0.740345E+00,0.118622E+01,0.113923E+01,0.107501E+01,0.107505E+01,
+ &0.107505E+01,0.107501E+01,0.221368E+02,0.827056E+00,0.127622E+01,
+ &0.122724E+01,0.116065E+01,0.116073E+01,0.116072E+01,0.116065E+01,
+ &0.236287E+02,0.915845E+00,0.136797E+01,0.131696E+01,0.124800E+01,
+ &0.124812E+01,0.124809E+01,0.124800E+01,0.250721E+02,0.100634E+01,
+ &0.146107E+01,0.140801E+01,0.133666E+01,0.133681E+01,0.133677E+01,
+ &0.133666E+01,0.264571E+02,0.109813E+01,0.155511E+01,0.149996E+01,
+ &0.142621E+01,0.142641E+01,0.142634E+01,0.142621E+01,0.277747E+02,
+ &0.119081E+01,0.164964E+01,0.159239E+01,0.151622E+01,0.151646E+01,
+ &0.151638E+01,0.151622E+01,0.290168E+02,0.128396E+01,0.174424E+01,
+ &0.168485E+01,0.160626E+01,0.160655E+01,0.160645E+01,0.160626E+01,
+ &0.301765E+02,0.137713E+01,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.345345E+00,0.306823E+00,0.250518E+00,0.250518E+00,0.250518E+00,
+ &0.250518E+00,0.411726E+01,-.138778E-16,0.384210E+00,0.343514E+00,
+ &0.284500E+00,0.284487E+00,0.284496E+00,0.284500E+00,0.496835E+01,
+ &0.371582E-01,0.425419E+00,0.382518E+00,0.320782E+00,0.320762E+00/
+ DATA (DL(K),K= 341, 425) /
+ &0.320777E+00,0.320782E+00,0.585504E+01,0.765988E-01,0.468853E+00,
+ &0.423717E+00,0.359246E+00,0.359226E+00,0.359243E+00,0.359246E+00,
+ &0.676824E+01,0.118207E+00,0.514392E+00,0.466990E+00,0.399771E+00,
+ &0.399758E+00,0.399775E+00,0.399771E+00,0.769967E+01,0.161865E+00,
+ &0.561883E+00,0.512186E+00,0.442209E+00,0.442208E+00,0.442222E+00,
+ &0.442209E+00,0.864071E+01,0.207426E+00,0.611162E+00,0.559140E+00,
+ &0.486395E+00,0.486411E+00,0.486420E+00,0.486395E+00,0.958280E+01,
+ &0.254727E+00,0.662044E+00,0.607667E+00,0.532145E+00,0.532185E+00,
+ &0.532185E+00,0.532145E+00,0.105176E+02,0.303587E+00,0.714325E+00,
+ &0.657566E+00,0.579261E+00,0.579328E+00,0.579318E+00,0.579261E+00,
+ &0.114370E+02,0.353808E+00,0.767786E+00,0.708618E+00,0.627526E+00,
+ &0.627625E+00,0.627603E+00,0.627526E+00,0.123333E+02,0.405174E+00,
+ &0.822195E+00,0.760591E+00,0.676711E+00,0.676846E+00,0.676810E+00,
+ &0.676711E+00,0.131994E+02,0.457458E+00,0.877307E+00,0.813242E+00,
+ &0.726575E+00,0.726750E+00,0.726697E+00,0.726575E+00,0.140286E+02,
+ &0.510420E+00,0.932865E+00,0.866317E+00,0.776867E+00,0.777085E+00,
+ &0.777015E+00,0.776867E+00,0.148150E+02,0.563809E+00,0.988608E+00/
+ DATA (DL(K),K= 426, 510) /
+ &0.919556E+00,0.827330E+00,0.827594E+00,0.827505E+00,0.827330E+00,
+ &0.155533E+02,0.617368E+00,0.104427E+01,0.972694E+00,0.877703E+00,
+ &0.878016E+00,0.877907E+00,0.877703E+00,0.162391E+02,0.670837E+00,
+ &0.109958E+01,0.102547E+01,0.927723E+00,0.928088E+00,0.927957E+00,
+ &0.927723E+00,0.168687E+02,0.723954E+00,0.115428E+01,0.107761E+01,
+ &0.977132E+00,0.977550E+00,0.977397E+00,0.977132E+00,0.174391E+02,
+ &0.776458E+00,0.120809E+01,0.112886E+01,0.102567E+01,0.102615E+01,
+ &0.102597E+01,0.102567E+01,0.179481E+02,0.828097E+00,0.126078E+01,
+ &0.117898E+01,0.107310E+01,0.107363E+01,0.107343E+01,0.107310E+01,
+ &0.183942E+02,0.878621E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.357586E+00,0.299938E+00,0.216504E+00,0.216504E+00,0.216504E+00,
+ &0.216504E+00,0.357260E+01,-.277556E-16,0.388529E+00,0.327984E+00,
+ &0.241161E+00,0.241168E+00,0.241168E+00,0.241161E+00,0.415893E+01,
+ &0.278429E-01,0.420472E+00,0.357015E+00,0.266823E+00,0.266844E+00,
+ &0.266842E+00,0.266823E+00,0.474689E+01,0.566783E-01,0.453271E+00,
+ &0.386886E+00,0.293349E+00,0.293389E+00,0.293381E+00,0.293349E+00/
+ DATA (DL(K),K= 511, 595) /
+ &0.532982E+01,0.863668E-01,0.486793E+00,0.417464E+00,0.320608E+00,
+ &0.320673E+00,0.320657E+00,0.320608E+00,0.590219E+01,0.116779E+00,
+ &0.520887E+00,0.448601E+00,0.348454E+00,0.348549E+00,0.348523E+00,
+ &0.348454E+00,0.645868E+01,0.147773E+00,0.555403E+00,0.480149E+00,
+ &0.376740E+00,0.376870E+00,0.376831E+00,0.376740E+00,0.699440E+01,
+ &0.179201E+00,0.590183E+00,0.511950E+00,0.405314E+00,0.405482E+00,
+ &0.405429E+00,0.405314E+00,0.750493E+01,0.210912E+00,0.625064E+00,
+ &0.543845E+00,0.434019E+00,0.434229E+00,0.434159E+00,0.434019E+00,
+ &0.798636E+01,0.242750E+00,0.659882E+00,0.575673E+00,0.462696E+00,
+ &0.462952E+00,0.462864E+00,0.462696E+00,0.843528E+01,0.274558E+00,
+ &0.694472E+00,0.607271E+00,0.491188E+00,0.491492E+00,0.491385E+00,
+ &0.491188E+00,0.884885E+01,0.306178E+00,0.728669E+00,0.638478E+00,
+ &0.519337E+00,0.519690E+00,0.519563E+00,0.519337E+00,0.922480E+01,
+ &0.337451E+00,0.762311E+00,0.669133E+00,0.546987E+00,0.547392E+00,
+ &0.547244E+00,0.546987E+00,0.956139E+01,0.368224E+00,0.795240E+00,
+ &0.699084E+00,0.573988E+00,0.574447E+00,0.574277E+00,0.573988E+00,
+ &0.985744E+01,0.398346E+00,0.827302E+00,0.728181E+00,0.600196E+00/
+ DATA (DL(K),K= 596, 680) /
+ &0.600710E+00,0.600518E+00,0.600196E+00,0.101123E+02,0.427671E+00,
+ &0.858354E+00,0.756282E+00,0.625475E+00,0.626044E+00,0.625829E+00,
+ &0.625475E+00,0.103258E+02,0.456064E+00,0.888257E+00,0.783256E+00,
+ &0.649696E+00,0.650321E+00,0.650083E+00,0.649696E+00,0.104982E+02,
+ &0.483395E+00,0.916887E+00,0.808981E+00,0.672742E+00,0.673422E+00,
+ &0.673161E+00,0.672742E+00,0.106303E+02,0.509546E+00,0.944126E+00,
+ &0.833345E+00,0.694506E+00,0.695243E+00,0.694958E+00,0.694506E+00,
+ &0.107231E+02,0.534410E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.390721E+00,0.304671E+00,0.182562E+00,0.182562E+00,0.182562E+00,
+ &0.182562E+00,0.303699E+01,0.693889E-17,0.414806E+00,0.325059E+00,
+ &0.199103E+00,0.199133E+00,0.199124E+00,0.199103E+00,0.339971E+01,
+ &0.198528E-01,0.438929E+00,0.345508E+00,0.215797E+00,0.215862E+00,
+ &0.215842E+00,0.215797E+00,0.374624E+01,0.398420E-01,0.462973E+00,
+ &0.365903E+00,0.232531E+00,0.232635E+00,0.232601E+00,0.232531E+00,
+ &0.407322E+01,0.598565E-01,0.486835E+00,0.386142E+00,0.249208E+00,
+ &0.249352E+00,0.249304E+00,0.249208E+00,0.437817E+01,0.797987E-01/
+ DATA (DL(K),K= 681, 765) /
+ &0.510407E+00,0.406123E+00,0.265725E+00,0.265913E+00,0.265849E+00,
+ &0.265725E+00,0.465901E+01,0.995694E-01,0.533588E+00,0.425746E+00,
+ &0.281986E+00,0.282220E+00,0.282139E+00,0.281986E+00,0.491410E+01,
+ &0.119072E+00,0.556274E+00,0.444912E+00,0.297897E+00,0.298178E+00,
+ &0.298079E+00,0.297897E+00,0.514220E+01,0.138212E+00,0.578369E+00,
+ &0.463528E+00,0.313366E+00,0.313696E+00,0.313578E+00,0.313366E+00,
+ &0.534249E+01,0.156900E+00,0.599777E+00,0.481503E+00,0.328308E+00,
+ &0.328688E+00,0.328549E+00,0.328308E+00,0.551456E+01,0.175048E+00,
+ &0.620409E+00,0.498752E+00,0.342642E+00,0.343071E+00,0.342913E+00,
+ &0.342642E+00,0.565833E+01,0.192575E+00,0.640181E+00,0.515196E+00,
+ &0.356292E+00,0.356770E+00,0.356592E+00,0.356292E+00,0.577410E+01,
+ &0.209407E+00,0.659017E+00,0.530764E+00,0.369190E+00,0.369718E+00,
+ &0.369519E+00,0.369190E+00,0.586243E+01,0.225474E+00,0.676845E+00,
+ &0.545389E+00,0.381275E+00,0.381852E+00,0.381633E+00,0.381275E+00,
+ &0.592421E+01,0.240714E+00,0.693604E+00,0.559015E+00,0.392493E+00,
+ &0.393118E+00,0.392880E+00,0.392493E+00,0.596052E+01,0.255072E+00,
+ &0.709239E+00,0.571593E+00,0.402799E+00,0.403472E+00,0.403213E+00/
+ DATA (DL(K),K= 766, 850) /
+ &0.402799E+00,0.597267E+01,0.268502E+00,0.723703E+00,0.583081E+00,
+ &0.412157E+00,0.412875E+00,0.412597E+00,0.412157E+00,0.596211E+01,
+ &0.280966E+00,0.736960E+00,0.593447E+00,0.420536E+00,0.421299E+00,
+ &0.421002E+00,0.420536E+00,0.593045E+01,0.292434E+00,0.748980E+00,
+ &0.602669E+00,0.427918E+00,0.428723E+00,0.428408E+00,0.427918E+00,
+ &0.587934E+01,0.302884E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.448390E+00,0.320678E+00,0.146415E+00,0.146415E+00,0.146415E+00,
+ &0.146415E+00,0.247594E+01,0.000000E+00,0.465760E+00,0.333734E+00,
+ &0.155974E+00,0.156013E+00,0.156000E+00,0.155974E+00,0.265633E+01,
+ &0.130329E-01,0.482525E+00,0.346293E+00,0.165233E+00,0.165311E+00,
+ &0.165285E+00,0.165233E+00,0.281612E+01,0.257304E-01,0.498626E+00,
+ &0.358294E+00,0.174131E+00,0.174249E+00,0.174209E+00,0.174131E+00,
+ &0.295484E+01,0.380345E-01,0.514008E+00,0.369688E+00,0.182622E+00,
+ &0.182779E+00,0.182724E+00,0.182622E+00,0.307242E+01,0.498976E-01,
+ &0.528624E+00,0.380432E+00,0.190660E+00,0.190856E+00,0.190786E+00,
+ &0.190660E+00,0.316911E+01,0.612760E-01,0.542428E+00,0.390485E+00/
+ DATA (DL(K),K= 851, 935) /
+ &0.198205E+00,0.198441E+00,0.198356E+00,0.198205E+00,0.324538E+01,
+ &0.721303E-01,0.555382E+00,0.399810E+00,0.205224E+00,0.205498E+00,
+ &0.205398E+00,0.205224E+00,0.330192E+01,0.824256E-01,0.567448E+00,
+ &0.408377E+00,0.211687E+00,0.211997E+00,0.211882E+00,0.211687E+00,
+ &0.333960E+01,0.921319E-01,0.578597E+00,0.416159E+00,0.217568E+00,
+ &0.217915E+00,0.217784E+00,0.217568E+00,0.335945E+01,0.101224E+00,
+ &0.588802E+00,0.423136E+00,0.222847E+00,0.223229E+00,0.223084E+00,
+ &0.222847E+00,0.336262E+01,0.109681E+00,0.598043E+00,0.429293E+00,
+ &0.227512E+00,0.227928E+00,0.227768E+00,0.227512E+00,0.335036E+01,
+ &0.117489E+00,0.606305E+00,0.434619E+00,0.231551E+00,0.232000E+00,
+ &0.231826E+00,0.231551E+00,0.332398E+01,0.124636E+00,0.613579E+00,
+ &0.439110E+00,0.234962E+00,0.235442E+00,0.235254E+00,0.234962E+00,
+ &0.328483E+01,0.131119E+00,0.619860E+00,0.442766E+00,0.237745E+00,
+ &0.238254E+00,0.238053E+00,0.237745E+00,0.323429E+01,0.136936E+00,
+ &0.625150E+00,0.445594E+00,0.239905E+00,0.240441E+00,0.240228E+00,
+ &0.239905E+00,0.317371E+01,0.142091E+00,0.629453E+00,0.447603E+00,
+ &0.241452E+00,0.242014E+00,0.241788E+00,0.241452E+00,0.310443E+01/
+ DATA (DL(K),K= 936, 1020) /
+ &0.146594E+00,0.632782E+00,0.448808E+00,0.242400E+00,0.242987E+00,
+ &0.242749E+00,0.242400E+00,0.302775E+01,0.150456E+00,0.635151E+00,
+ &0.449228E+00,0.242767E+00,0.243376E+00,0.243127E+00,0.242767E+00,
+ &0.294491E+01,0.153694E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.528765E+00,0.341825E+00,0.105823E+00,0.105823E+00,0.105823E+00,
+ &0.105823E+00,0.185069E+01,-.138778E-16,0.538124E+00,0.347118E+00,
+ &0.109762E+00,0.109780E+00,0.109774E+00,0.109762E+00,0.189644E+01,
+ &0.738880E-02,0.546541E+00,0.351712E+00,0.113300E+00,0.113336E+00,
+ &0.113324E+00,0.113300E+00,0.192700E+01,0.143076E-01,0.554014E+00,
+ &0.355607E+00,0.116431E+00,0.116485E+00,0.116466E+00,0.116431E+00,
+ &0.194356E+01,0.207515E-01,0.560546E+00,0.358805E+00,0.119150E+00,
+ &0.119222E+00,0.119196E+00,0.119150E+00,0.194722E+01,0.267179E-01,
+ &0.566139E+00,0.361311E+00,0.121459E+00,0.121549E+00,0.121515E+00,
+ &0.121459E+00,0.193921E+01,0.322084E-01,0.570802E+00,0.363134E+00,
+ &0.123359E+00,0.123467E+00,0.123426E+00,0.123359E+00,0.192071E+01,
+ &0.372262E-01,0.574542E+00,0.364286E+00,0.124858E+00,0.124983E+00/
+ DATA (DL(K),K= 1021, 1105) /
+ &0.124933E+00,0.124858E+00,0.189295E+01,0.417774E-01,0.577372E+00,
+ &0.364779E+00,0.125961E+00,0.126103E+00,0.126046E+00,0.125961E+00,
+ &0.185710E+01,0.458703E-01,0.579307E+00,0.364629E+00,0.126681E+00,
+ &0.126839E+00,0.126774E+00,0.126681E+00,0.181432E+01,0.495154E-01,
+ &0.580363E+00,0.363857E+00,0.127029E+00,0.127202E+00,0.127130E+00,
+ &0.127029E+00,0.176571E+01,0.527252E-01,0.580561E+00,0.362483E+00,
+ &0.127020E+00,0.127208E+00,0.127128E+00,0.127020E+00,0.171231E+01,
+ &0.555142E-01,0.579923E+00,0.360529E+00,0.126670E+00,0.126872E+00,
+ &0.126785E+00,0.126670E+00,0.165511E+01,0.578985E-01,0.578474E+00,
+ &0.358021E+00,0.125998E+00,0.126213E+00,0.126119E+00,0.125998E+00,
+ &0.159501E+01,0.598958E-01,0.576241E+00,0.354987E+00,0.125022E+00,
+ &0.125249E+00,0.125148E+00,0.125022E+00,0.153284E+01,0.615248E-01,
+ &0.573252E+00,0.351453E+00,0.123762E+00,0.124000E+00,0.123893E+00,
+ &0.123762E+00,0.146934E+01,0.628056E-01,0.569539E+00,0.347450E+00,
+ &0.122240E+00,0.122488E+00,0.122375E+00,0.122240E+00,0.140517E+01,
+ &0.637587E-01,0.565134E+00,0.343008E+00,0.120476E+00,0.120733E+00,
+ &0.120615E+00,0.120476E+00,0.134093E+01,0.644054E-01,0.560071E+00/
+ DATA (DL(K),K= 1106, 1190) /
+ &0.338158E+00,0.118493E+00,0.118758E+00,0.118635E+00,0.118493E+00,
+ &0.127712E+01,0.647671E-01,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.584093E+00,0.349173E+00,0.772117E-01,0.772117E-01,0.772117E-01,
+ &0.772117E-01,0.140433E+01,0.346945E-17,0.586736E+00,0.349017E+00,
+ &0.785355E-01,0.785519E-01,0.785448E-01,0.785355E-01,0.139434E+01,
+ &0.447504E-02,0.588402E+00,0.348237E+00,0.795437E-01,0.795759E-01,
+ &0.795617E-01,0.795437E-01,0.137550E+01,0.854114E-02,0.589124E+00,
+ &0.346861E+00,0.802498E-01,0.802970E-01,0.802758E-01,0.802498E-01,
+ &0.134918E+01,0.122148E-01,0.588930E+00,0.344912E+00,0.806656E-01,
+ &0.807271E-01,0.806990E-01,0.806656E-01,0.131652E+01,0.155101E-01,
+ &0.587849E+00,0.342417E+00,0.808055E-01,0.808805E-01,0.808457E-01,
+ &0.808055E-01,0.127862E+01,0.184435E-01,0.585912E+00,0.339402E+00,
+ &0.806843E-01,0.807718E-01,0.807306E-01,0.806843E-01,0.123648E+01,
+ &0.210315E-01,0.583151E+00,0.335894E+00,0.803173E-01,0.804166E-01,
+ &0.803692E-01,0.803173E-01,0.119104E+01,0.232909E-01,0.579599E+00,
+ &0.331923E+00,0.797205E-01,0.798308E-01,0.797775E-01,0.797205E-01/
+ DATA (DL(K),K= 1191, 1275) /
+ &0.114317E+01,0.252394E-01,0.575288E+00,0.327516E+00,0.789107E-01,
+ &0.790310E-01,0.789721E-01,0.789107E-01,0.109362E+01,0.268946E-01,
+ &0.570253E+00,0.322704E+00,0.779045E-01,0.780341E-01,0.779698E-01,
+ &0.779045E-01,0.104307E+01,0.282745E-01,0.564530E+00,0.317515E+00,
+ &0.767190E-01,0.768570E-01,0.767878E-01,0.767190E-01,0.992143E+00,
+ &0.293974E-01,0.558155E+00,0.311981E+00,0.753713E-01,0.755169E-01,
+ &0.754432E-01,0.753713E-01,0.941341E+00,0.302812E-01,0.551166E+00,
+ &0.306131E+00,0.738784E-01,0.740308E-01,0.739528E-01,0.738784E-01,
+ &0.891113E+00,0.309441E-01,0.543599E+00,0.299995E+00,0.722571E-01,
+ &0.724154E-01,0.723336E-01,0.722571E-01,0.841829E+00,0.314037E-01,
+ &0.535494E+00,0.293603E+00,0.705237E-01,0.706871E-01,0.706019E-01,
+ &0.705237E-01,0.793794E+00,0.316774E-01,0.526888E+00,0.286986E+00,
+ &0.686941E-01,0.688619E-01,0.687736E-01,0.686941E-01,0.747249E+00,
+ &0.317823E-01,0.517822E+00,0.280172E+00,0.667836E-01,0.669551E-01,
+ &0.668640E-01,0.667836E-01,0.702381E+00,0.317346E-01,0.508333E+00,
+ &0.273189E+00,0.648068E-01,0.649814E-01,0.648879E-01,0.648068E-01,
+ &0.659330E+00,0.315501E-01,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 1276, 1360) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.622739E+00,0.340676E+00,0.509141E-01,0.509141E-01,0.509141E-01,
+ &0.509141E-01,0.980502E+00,-.173472E-17,0.617764E+00,0.335457E+00,
+ &0.507607E-01,0.507701E-01,0.507651E-01,0.507607E-01,0.944375E+00,
+ &0.242386E-02,0.611957E+00,0.329837E+00,0.504236E-01,0.504417E-01,
+ &0.504321E-01,0.504236E-01,0.905225E+00,0.455851E-02,0.605372E+00,
+ &0.323853E+00,0.499207E-01,0.499471E-01,0.499328E-01,0.499207E-01,
+ &0.864035E+00,0.642656E-02,0.598052E+00,0.317537E+00,0.492668E-01,
+ &0.493008E-01,0.492822E-01,0.492668E-01,0.821557E+00,0.804638E-02,
+ &0.590044E+00,0.310919E+00,0.484772E-01,0.485183E-01,0.484955E-01,
+ &0.484772E-01,0.778444E+00,0.943663E-02,0.581391E+00,0.304033E+00,
+ &0.475665E-01,0.476142E-01,0.475874E-01,0.475665E-01,0.735263E+00,
+ &0.106150E-01,0.572137E+00,0.296908E+00,0.465487E-01,0.466024E-01,
+ &0.465720E-01,0.465487E-01,0.692487E+00,0.115984E-01,0.562326E+00,
+ &0.289573E+00,0.454376E-01,0.454968E-01,0.454629E-01,0.454376E-01,
+ &0.650510E+00,0.124032E-01,0.552003E+00,0.282060E+00,0.442463E-01,
+ &0.443103E-01,0.442733E-01,0.442463E-01,0.609652E+00,0.130451E-01/
+ DATA (DL(K),K= 1361, 1445) /
+ &0.541210E+00,0.274395E+00,0.429871E-01,0.430555E-01,0.430156E-01,
+ &0.429871E-01,0.570164E+00,0.135389E-01,0.529991E+00,0.266608E+00,
+ &0.416720E-01,0.417443E-01,0.417018E-01,0.416720E-01,0.532237E+00,
+ &0.138989E-01,0.518389E+00,0.258725E+00,0.403123E-01,0.403879E-01,
+ &0.403431E-01,0.403123E-01,0.496010E+00,0.141386E-01,0.506446E+00,
+ &0.250772E+00,0.389186E-01,0.389971E-01,0.389501E-01,0.389186E-01,
+ &0.461573E+00,0.142708E-01,0.494204E+00,0.242775E+00,0.375006E-01,
+ &0.375815E-01,0.375327E-01,0.375006E-01,0.428979E+00,0.143074E-01,
+ &0.481705E+00,0.234757E+00,0.360674E-01,0.361503E-01,0.361000E-01,
+ &0.360674E-01,0.398246E+00,0.142598E-01,0.468990E+00,0.226741E+00,
+ &0.346276E-01,0.347120E-01,0.346605E-01,0.346276E-01,0.369363E+00,
+ &0.141385E-01,0.456098E+00,0.218750E+00,0.331887E-01,0.332743E-01,
+ &0.332216E-01,0.331887E-01,0.342300E+00,0.139532E-01,0.443068E+00,
+ &0.210804E+00,0.317576E-01,0.318440E-01,0.317905E-01,0.317576E-01,
+ &0.317005E+00,0.137130E-01,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.631458E+00,0.318714E+00,0.335640E-01,0.335640E-01,0.335640E-01/
+ DATA (DL(K),K= 1446, 1530) /
+ &0.335640E-01,0.686773E+00,0.346945E-17,0.620274E+00,0.310241E+00,
+ &0.329311E-01,0.329377E-01,0.329337E-01,0.329311E-01,0.646559E+00,
+ &0.135960E-02,0.608504E+00,0.301610E+00,0.322083E-01,0.322210E-01,
+ &0.322133E-01,0.322083E-01,0.606503E+00,0.252820E-02,0.596205E+00,
+ &0.292854E+00,0.314099E-01,0.314281E-01,0.314169E-01,0.314099E-01,
+ &0.567134E+00,0.352543E-02,0.583429E+00,0.284002E+00,0.305470E-01,
+ &0.305704E-01,0.305558E-01,0.305470E-01,0.528824E+00,0.436693E-02,
+ &0.570223E+00,0.275080E+00,0.296307E-01,0.296586E-01,0.296411E-01,
+ &0.296307E-01,0.491848E+00,0.506768E-02,0.556637E+00,0.266115E+00,
+ &0.286709E-01,0.287030E-01,0.286827E-01,0.286709E-01,0.456422E+00,
+ &0.564157E-02,0.542717E+00,0.257131E+00,0.276770E-01,0.277128E-01,
+ &0.276900E-01,0.276770E-01,0.422697E+00,0.610148E-02,0.528511E+00,
+ &0.248154E+00,0.266578E-01,0.266968E-01,0.266718E-01,0.266578E-01,
+ &0.390771E+00,0.645942E-02,0.514062E+00,0.239205E+00,0.256210E-01,
+ &0.256629E-01,0.256359E-01,0.256210E-01,0.360700E+00,0.672653E-02,
+ &0.499417E+00,0.230307E+00,0.245741E-01,0.246185E-01,0.245896E-01,
+ &0.245741E-01,0.332498E+00,0.691312E-02,0.484617E+00,0.221480E+00/
+ DATA (DL(K),K= 1531, 1615) /
+ &0.235237E-01,0.235701E-01,0.235397E-01,0.235237E-01,0.306153E+00,
+ &0.702875E-02,0.469706E+00,0.212745E+00,0.224757E-01,0.225238E-01,
+ &0.224921E-01,0.224757E-01,0.281624E+00,0.708222E-02,0.454725E+00,
+ &0.204118E+00,0.214355E-01,0.214850E-01,0.214522E-01,0.214355E-01,
+ &0.258855E+00,0.708159E-02,0.439713E+00,0.195618E+00,0.204079E-01,
+ &0.204586E-01,0.204249E-01,0.204079E-01,0.237774E+00,0.703428E-02,
+ &0.424709E+00,0.187259E+00,0.193972E-01,0.194486E-01,0.194142E-01,
+ &0.193972E-01,0.218298E+00,0.694702E-02,0.409750E+00,0.179057E+00,
+ &0.184069E-01,0.184588E-01,0.184239E-01,0.184069E-01,0.200339E+00,
+ &0.682594E-02,0.394870E+00,0.171023E+00,0.174402E-01,0.174924E-01,
+ &0.174571E-01,0.174402E-01,0.183804E+00,0.667657E-02,0.380104E+00,
+ &0.163171E+00,0.164997E-01,0.165519E-01,0.165164E-01,0.164997E-01,
+ &0.168600E+00,0.650389E-02,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.619056E+00,0.288873E+00,0.218554E-01,0.218554E-01,0.218554E-01,
+ &0.218554E-01,0.477010E+00,-.867362E-17,0.602890E+00,0.278444E+00,
+ &0.211480E-01,0.211530E-01,0.211497E-01,0.211480E-01,0.440877E+00/
+ DATA (DL(K),K= 1616, 1700) /
+ &0.767466E-03,0.586431E+00,0.268081E+00,0.204081E-01,0.204175E-01,
+ &0.204113E-01,0.204081E-01,0.406417E+00,0.141432E-02,0.569736E+00,
+ &0.257807E+00,0.196446E-01,0.196581E-01,0.196491E-01,0.196446E-01,
+ &0.373808E+00,0.195508E-02,0.552853E+00,0.247642E+00,0.188646E-01,
+ &0.188816E-01,0.188701E-01,0.188646E-01,0.343145E+00,0.240123E-02,
+ &0.535829E+00,0.237603E+00,0.180743E-01,0.180945E-01,0.180808E-01,
+ &0.180743E-01,0.314460E+00,0.276332E-02,0.518710E+00,0.227710E+00,
+ &0.172796E-01,0.173025E-01,0.172868E-01,0.172796E-01,0.287750E+00,
+ &0.305100E-02,0.501539E+00,0.217977E+00,0.164854E-01,0.165108E-01,
+ &0.164933E-01,0.164854E-01,0.262983E+00,0.327305E-02,0.484360E+00,
+ &0.208420E+00,0.156964E-01,0.157239E-01,0.157049E-01,0.156964E-01,
+ &0.240098E+00,0.343744E-02,0.467213E+00,0.199053E+00,0.149165E-01,
+ &0.149457E-01,0.149254E-01,0.149165E-01,0.219021E+00,0.355144E-02,
+ &0.450140E+00,0.189889E+00,0.141493E-01,0.141800E-01,0.141586E-01,
+ &0.141493E-01,0.199660E+00,0.362164E-02,0.433177E+00,0.180939E+00,
+ &0.133978E-01,0.134297E-01,0.134073E-01,0.133978E-01,0.181918E+00,
+ &0.365401E-02,0.416362E+00,0.172214E+00,0.126646E-01,0.126974E-01/
+ DATA (DL(K),K= 1701, 1785) /
+ &0.126742E-01,0.126646E-01,0.165692E+00,0.365394E-02,0.399729E+00,
+ &0.163725E+00,0.119518E-01,0.119853E-01,0.119615E-01,0.119518E-01,
+ &0.150875E+00,0.362628E-02,0.383310E+00,0.155477E+00,0.112613E-01,
+ &0.112952E-01,0.112711E-01,0.112613E-01,0.137364E+00,0.357539E-02,
+ &0.367138E+00,0.147479E+00,0.105945E-01,0.106287E-01,0.106042E-01,
+ &0.105945E-01,0.125056E+00,0.350515E-02,0.351239E+00,0.139737E+00,
+ &0.995250E-02,0.998673E-02,0.996211E-02,0.995250E-02,0.113852E+00,
+ &0.341903E-02,0.335641E+00,0.132253E+00,0.933610E-02,0.937024E-02,
+ &0.934557E-02,0.933610E-02,0.103659E+00,0.332009E-02,0.320367E+00,
+ &0.125033E+00,0.874584E-02,0.877973E-02,0.875514E-02,0.874584E-02,
+ &0.943886E-01,0.321106E-02,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.591114E+00,0.254807E+00,0.139531E-01,0.139531E-01,0.139531E-01,
+ &0.139531E-01,0.326288E+00,0.000000E+00,0.571121E+00,0.243424E+00,
+ &0.133325E-01,0.133362E-01,0.133336E-01,0.133325E-01,0.296956E+00,
+ &0.429082E-03,0.551151E+00,0.232297E+00,0.127105E-01,0.127175E-01,
+ &0.127126E-01,0.127105E-01,0.269811E+00,0.785137E-03,0.531253E+00/
+ DATA (DL(K),K= 1786, 1870) /
+ &0.221436E+00,0.120916E-01,0.121015E-01,0.120945E-01,0.120916E-01,
+ &0.244803E+00,0.107790E-02,0.511467E+00,0.210850E+00,0.114794E-01,
+ &0.114918E-01,0.114829E-01,0.114794E-01,0.221863E+00,0.131504E-02,
+ &0.491833E+00,0.200545E+00,0.108767E-01,0.108913E-01,0.108808E-01,
+ &0.108767E-01,0.200886E+00,0.150337E-02,0.472388E+00,0.190531E+00,
+ &0.102861E-01,0.103027E-01,0.102907E-01,0.102861E-01,0.181762E+00,
+ &0.164910E-02,0.453170E+00,0.180812E+00,0.970979E-02,0.972799E-02,
+ &0.971477E-02,0.970979E-02,0.164371E+00,0.175777E-02,0.434213E+00,
+ &0.171394E+00,0.914959E-02,0.916916E-02,0.915488E-02,0.914959E-02,
+ &0.148589E+00,0.183434E-02,0.415548E+00,0.162282E+00,0.860700E-02,
+ &0.862770E-02,0.861252E-02,0.860700E-02,0.134293E+00,0.188328E-02,
+ &0.397208E+00,0.153479E+00,0.808323E-02,0.810484E-02,0.808891E-02,
+ &0.808323E-02,0.121361E+00,0.190856E-02,0.379220E+00,0.144989E+00,
+ &0.757922E-02,0.760152E-02,0.758501E-02,0.757922E-02,0.109676E+00,
+ &0.191374E-02,0.361611E+00,0.136811E+00,0.709565E-02,0.711846E-02,
+ &0.710150E-02,0.709565E-02,0.991261E-01,0.190199E-02,0.344406E+00,
+ &0.128948E+00,0.663300E-02,0.665614E-02,0.663885E-02,0.663300E-02/
+ DATA (DL(K),K= 1871, 1955) /
+ &0.896059E-01,0.187610E-02,0.327627E+00,0.121398E+00,0.619152E-02,
+ &0.621484E-02,0.619734E-02,0.619152E-02,0.810177E-01,0.183856E-02,
+ &0.311292E+00,0.114161E+00,0.577130E-02,0.579466E-02,0.577706E-02,
+ &0.577130E-02,0.732709E-01,0.179155E-02,0.295421E+00,0.107235E+00,
+ &0.537228E-02,0.539554E-02,0.537794E-02,0.537228E-02,0.662824E-01,
+ &0.173700E-02,0.280026E+00,0.100616E+00,0.499423E-02,0.501728E-02,
+ &0.499977E-02,0.499423E-02,0.599766E-01,0.167658E-02,0.265121E+00,
+ &0.943000E-01,0.463683E-02,0.465958E-02,0.464223E-02,0.463683E-02,
+ &0.542848E-01,0.161174E-02,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.551659E+00,0.219084E+00,0.867977E-02,0.867977E-02,0.867977E-02,
+ &0.867977E-02,0.218587E+00,-.173472E-16,0.528947E+00,0.207536E+00,
+ &0.819621E-02,0.819909E-02,0.819696E-02,0.819621E-02,0.196367E+00,
+ &0.234843E-03,0.506575E+00,0.196391E+00,0.772540E-02,0.773082E-02,
+ &0.772680E-02,0.772540E-02,0.176280E+00,0.427503E-03,0.484579E+00,
+ &0.185646E+00,0.726876E-02,0.727639E-02,0.727069E-02,0.726876E-02,
+ &0.158158E+00,0.583933E-03,0.462988E+00,0.175298E+00,0.682746E-02/
+ DATA (DL(K),K= 1956, 2040) /
+ &0.683702E-02,0.682985E-02,0.682746E-02,0.141851E+00,0.708874E-03,
+ &0.441830E+00,0.165345E+00,0.640226E-02,0.641347E-02,0.640502E-02,
+ &0.640226E-02,0.127203E+00,0.806409E-03,0.421129E+00,0.155783E+00,
+ &0.599380E-02,0.600641E-02,0.599686E-02,0.599380E-02,0.114065E+00,
+ &0.880249E-03,0.400912E+00,0.146609E+00,0.560252E-02,0.561629E-02,
+ &0.560581E-02,0.560252E-02,0.102296E+00,0.933676E-03,0.381199E+00,
+ &0.137819E+00,0.522870E-02,0.524342E-02,0.523217E-02,0.522870E-02,
+ &0.917608E-01,0.969607E-03,0.362011E+00,0.129407E+00,0.487247E-02,
+ &0.488796E-02,0.487607E-02,0.487247E-02,0.823356E-01,0.990632E-03,
+ &0.343367E+00,0.121370E+00,0.453385E-02,0.454992E-02,0.453753E-02,
+ &0.453385E-02,0.739054E-01,0.999042E-03,0.325282E+00,0.113700E+00,
+ &0.421272E-02,0.422921E-02,0.421644E-02,0.421272E-02,0.663651E-01,
+ &0.996863E-03,0.307770E+00,0.106393E+00,0.390887E-02,0.392563E-02,
+ &0.391260E-02,0.390887E-02,0.596195E-01,0.985881E-03,0.290841E+00,
+ &0.994399E-01,0.362199E-02,0.363889E-02,0.362570E-02,0.362199E-02,
+ &0.535826E-01,0.967664E-03,0.274506E+00,0.928343E-01,0.335170E-02,
+ &0.336862E-02,0.335536E-02,0.335170E-02,0.481769E-01,0.943587E-03/
+ DATA (DL(K),K= 2041, 2125) /
+ &0.258771E+00,0.865679E-01,0.309756E-02,0.311439E-02,0.310114E-02,
+ &0.309756E-02,0.433336E-01,0.914850E-03,0.243639E+00,0.806321E-01,
+ &0.285905E-02,0.287571E-02,0.286255E-02,0.285905E-02,0.389912E-01,
+ &0.882497E-03,0.229113E+00,0.750177E-01,0.263565E-02,0.265205E-02,
+ &0.263905E-02,0.263565E-02,0.350948E-01,0.847432E-03,0.215193E+00,
+ &0.697152E-01,0.242677E-02,0.244285E-02,0.243005E-02,0.242677E-02,
+ &0.315960E-01,0.810432E-03,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.503850E+00,0.183581E+00,0.522815E-02,0.522815E-02,0.522815E-02,
+ &0.522815E-02,0.142635E+00,0.123599E-16,0.479478E+00,0.172477E+00,
+ &0.488093E-02,0.488328E-02,0.488147E-02,0.488093E-02,0.126767E+00,
+ &0.124505E-03,0.455750E+00,0.161879E+00,0.455054E-02,0.455493E-02,
+ &0.455153E-02,0.455054E-02,0.112695E+00,0.225968E-03,0.432681E+00,
+ &0.151771E+00,0.423664E-02,0.424278E-02,0.423800E-02,0.423664E-02,
+ &0.100212E+00,0.307702E-03,0.410286E+00,0.142140E+00,0.393907E-02,
+ &0.394671E-02,0.394073E-02,0.393907E-02,0.891488E-01,0.372395E-03,
+ &0.388577E+00,0.132974E+00,0.365743E-02,0.366634E-02,0.365934E-02/
+ DATA (DL(K),K= 2126, 2210) /
+ &0.365743E-02,0.793490E-01,0.422302E-03,0.367563E+00,0.124259E+00,
+ &0.339138E-02,0.340133E-02,0.339347E-02,0.339138E-02,0.706688E-01,
+ &0.459484E-03,0.347256E+00,0.115984E+00,0.314049E-02,0.315129E-02,
+ &0.314273E-02,0.314049E-02,0.629792E-01,0.485762E-03,0.327660E+00,
+ &0.108136E+00,0.290433E-02,0.291580E-02,0.290667E-02,0.290433E-02,
+ &0.561642E-01,0.502744E-03,0.308782E+00,0.100701E+00,0.268243E-02,
+ &0.269440E-02,0.268483E-02,0.268243E-02,0.501207E-01,0.511853E-03,
+ &0.290625E+00,0.936693E-01,0.247429E-02,0.248663E-02,0.247672E-02,
+ &0.247429E-02,0.447569E-01,0.514346E-03,0.273189E+00,0.870261E-01,
+ &0.227939E-02,0.229197E-02,0.228184E-02,0.227939E-02,0.399920E-01,
+ &0.511328E-03,0.256475E+00,0.807592E-01,0.209722E-02,0.210991E-02,
+ &0.209965E-02,0.209722E-02,0.357547E-01,0.503769E-03,0.240478E+00,
+ &0.748555E-01,0.192721E-02,0.193992E-02,0.192961E-02,0.192721E-02,
+ &0.319825E-01,0.492518E-03,0.225194E+00,0.693019E-01,0.176883E-02,
+ &0.178147E-02,0.177117E-02,0.176883E-02,0.286209E-01,0.478318E-03,
+ &0.210615E+00,0.640851E-01,0.162151E-02,0.163400E-02,0.162379E-02,
+ &0.162151E-02,0.256219E-01,0.461813E-03,0.196733E+00,0.591917E-01/
+ DATA (DL(K),K= 2211, 2295) /
+ &0.148471E-02,0.149698E-02,0.148691E-02,0.148471E-02,0.229436E-01,
+ &0.443561E-03,0.183536E+00,0.546085E-01,0.135786E-02,0.136986E-02,
+ &0.135998E-02,0.135786E-02,0.205496E-01,0.424043E-03,0.171011E+00,
+ &0.503219E-01,0.124042E-02,0.125211E-02,0.124246E-02,0.124042E-02,
+ &0.184079E-01,0.403672E-03,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.450310E+00,0.149685E+00,0.302765E-02,0.302765E-02,0.302765E-02,
+ &0.302765E-02,0.901099E-01,-.108420E-17,0.425282E+00,0.139479E+00,
+ &0.279499E-02,0.279691E-02,0.279537E-02,0.279499E-02,0.794239E-01,
+ &0.632140E-04,0.401169E+00,0.129837E+00,0.257801E-02,0.258157E-02,
+ &0.257870E-02,0.257801E-02,0.700941E-01,0.114711E-03,0.377966E+00,
+ &0.120733E+00,0.237556E-02,0.238052E-02,0.237650E-02,0.237556E-02,
+ &0.619270E-01,0.156107E-03,0.355668E+00,0.112145E+00,0.218688E-02,
+ &0.219301E-02,0.218802E-02,0.218688E-02,0.547717E-01,0.188777E-03,
+ &0.334269E+00,0.104052E+00,0.201113E-02,0.201823E-02,0.201243E-02,
+ &0.201113E-02,0.484974E-01,0.213848E-03,0.313762E+00,0.964335E-01,
+ &0.184758E-02,0.185546E-02,0.184900E-02,0.184758E-02,0.429879E-01/
+ DATA (DL(K),K= 2296, 2380) /
+ &0.232367E-03,0.294139E+00,0.892696E-01,0.169553E-02,0.170402E-02,
+ &0.169703E-02,0.169553E-02,0.381432E-01,0.245270E-03,0.275389E+00,
+ &0.825414E-01,0.155431E-02,0.156326E-02,0.155586E-02,0.155431E-02,
+ &0.338762E-01,0.253383E-03,0.257502E+00,0.762303E-01,0.142329E-02,
+ &0.143258E-02,0.142487E-02,0.142329E-02,0.301119E-01,0.257441E-03,
+ &0.240464E+00,0.703180E-01,0.130188E-02,0.131138E-02,0.130347E-02,
+ &0.130188E-02,0.267853E-01,0.258098E-03,0.224262E+00,0.647867E-01,
+ &0.118950E-02,0.119912E-02,0.119108E-02,0.118950E-02,0.238409E-01,
+ &0.255929E-03,0.208879E+00,0.596190E-01,0.108562E-02,0.109526E-02,
+ &0.108717E-02,0.108562E-02,0.212308E-01,0.251442E-03,0.194298E+00,
+ &0.547975E-01,0.989698E-03,0.999283E-03,0.991221E-03,0.989698E-03,
+ &0.189136E-01,0.245082E-03,0.180499E+00,0.503054E-01,0.901248E-03,
+ &0.910711E-03,0.902726E-03,0.901248E-03,0.168537E-01,0.237238E-03,
+ &0.167463E+00,0.461263E-01,0.819789E-03,0.829074E-03,0.821215E-03,
+ &0.819789E-03,0.150206E-01,0.228250E-03,0.155167E+00,0.422438E-01,
+ &0.744866E-03,0.753925E-03,0.746234E-03,0.744866E-03,0.133878E-01,
+ &0.218412E-03,0.143590E+00,0.386421E-01,0.676043E-03,0.684836E-03/
+ DATA (DL(K),K= 2381, 2465) /
+ &0.677349E-03,0.676043E-03,0.119320E-01,0.207976E-03,0.132706E+00,
+ &0.353058E-01,0.612907E-03,0.621403E-03,0.614147E-03,0.612907E-03,
+ &0.106334E-01,0.197159E-03,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.393307E+00,0.118409E+00,0.167124E-02,0.167124E-02,0.167124E-02,
+ &0.167124E-02,0.547140E-01,0.433681E-17,0.368555E+00,0.109414E+00,
+ &0.152547E-02,0.152705E-02,0.152573E-02,0.152547E-02,0.479708E-01,
+ &0.303147E-04,0.344946E+00,0.101001E+00,0.139202E-02,0.139494E-02,
+ &0.139249E-02,0.139202E-02,0.421517E-01,0.552185E-04,0.322450E+00,
+ &0.931345E-01,0.126960E-02,0.127363E-02,0.127024E-02,0.126960E-02,
+ &0.371043E-01,0.753524E-04,0.301043E+00,0.857854E-01,0.115731E-02,
+ &0.116225E-02,0.115808E-02,0.115731E-02,0.327131E-01,0.913172E-04,
+ &0.280698E+00,0.789267E-01,0.105427E-02,0.105995E-02,0.105514E-02,
+ &0.105427E-02,0.288844E-01,0.103605E-03,0.261390E+00,0.725323E-01,
+ &0.959726E-03,0.965979E-03,0.960659E-03,0.959726E-03,0.255366E-01,
+ &0.112688E-03,0.243091E+00,0.665774E-01,0.872987E-03,0.879676E-03,
+ &0.873966E-03,0.872987E-03,0.226017E-01,0.119000E-03,0.225775E+00/
+ DATA (DL(K),K= 2466, 2550) /
+ &0.610385E-01,0.793435E-03,0.800438E-03,0.794441E-03,0.793435E-03,
+ &0.200219E-01,0.122931E-03,0.209414E+00,0.558928E-01,0.720508E-03,
+ &0.727716E-03,0.721524E-03,0.720508E-03,0.177490E-01,0.124835E-03,
+ &0.193979E+00,0.511187E-01,0.653691E-03,0.661011E-03,0.654703E-03,
+ &0.653691E-03,0.157425E-01,0.125031E-03,0.179441E+00,0.466950E-01,
+ &0.592513E-03,0.599863E-03,0.593511E-03,0.592513E-03,0.139674E-01,
+ &0.123805E-03,0.165770E+00,0.426018E-01,0.536539E-03,0.543850E-03,
+ &0.537513E-03,0.536539E-03,0.123945E-01,0.121411E-03,0.152935E+00,
+ &0.388195E-01,0.485370E-03,0.492584E-03,0.486314E-03,0.485370E-03,
+ &0.109993E-01,0.118076E-03,0.140905E+00,0.353295E-01,0.438636E-03,
+ &0.445702E-03,0.439543E-03,0.438636E-03,0.976027E-02,0.113999E-03,
+ &0.129648E+00,0.321137E-01,0.395992E-03,0.402871E-03,0.396859E-03,
+ &0.395992E-03,0.865895E-02,0.109353E-03,0.119131E+00,0.291550E-01,
+ &0.357120E-03,0.363779E-03,0.357945E-03,0.357120E-03,0.767960E-02,
+ &0.104292E-03,0.109323E+00,0.264366E-01,0.321725E-03,0.328139E-03,
+ &0.322505E-03,0.321725E-03,0.680866E-02,0.989468E-04,0.100191E+00,
+ &0.239428E-01,0.289531E-03,0.295679E-03,0.290266E-03,0.289531E-03/
+ DATA (DL(K),K= 2551, 2635) /
+ &0.603390E-02,0.934295E-04,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.334851E+00,0.904666E-01,0.869706E-03,0.869706E-03,0.869706E-03,
+ &0.869706E-03,0.316365E-01,-.311708E-17,0.311223E+00,0.828706E-01,
+ &0.784673E-03,0.785968E-03,0.784847E-03,0.784673E-03,0.277037E-01,
+ &0.134749E-04,0.288910E+00,0.758361E-01,0.708234E-03,0.710597E-03,
+ &0.708543E-03,0.708234E-03,0.243298E-01,0.247881E-04,0.267855E+00,
+ &0.693222E-01,0.639256E-03,0.642491E-03,0.639671E-03,0.639256E-03,
+ &0.214125E-01,0.340882E-04,0.248015E+00,0.632964E-01,0.576953E-03,
+ &0.580887E-03,0.577448E-03,0.576953E-03,0.188764E-01,0.415701E-04,
+ &0.229343E+00,0.577274E-01,0.520615E-03,0.525096E-03,0.521167E-03,
+ &0.520615E-03,0.166642E-01,0.474027E-04,0.211794E+00,0.525860E-01,
+ &0.469624E-03,0.474520E-03,0.470215E-03,0.469624E-03,0.147265E-01,
+ &0.517615E-04,0.195325E+00,0.478447E-01,0.423445E-03,0.428640E-03,
+ &0.424060E-03,0.423445E-03,0.130234E-01,0.548213E-04,0.179891E+00,
+ &0.434776E-01,0.381606E-03,0.387001E-03,0.382232E-03,0.381606E-03,
+ &0.115226E-01,0.567474E-04,0.165449E+00,0.394601E-01,0.343691E-03/
+ DATA (DL(K),K= 2636, 2720) /
+ &0.349200E-03,0.344317E-03,0.343691E-03,0.101965E-01,0.576952E-04,
+ &0.151958E+00,0.357691E-01,0.309329E-03,0.314879E-03,0.309948E-03,
+ &0.309329E-03,0.902217E-02,0.578101E-04,0.139374E+00,0.323826E-01,
+ &0.278192E-03,0.283721E-03,0.278796E-03,0.278192E-03,0.798131E-02,
+ &0.572266E-04,0.127655E+00,0.292797E-01,0.249984E-03,0.255440E-03,
+ &0.250569E-03,0.249984E-03,0.705796E-02,0.560672E-04,0.116760E+00,
+ &0.264406E-01,0.224440E-03,0.229782E-03,0.225002E-03,0.224440E-03,
+ &0.623793E-02,0.544420E-04,0.106647E+00,0.238467E-01,0.201321E-03,
+ &0.206513E-03,0.201856E-03,0.201321E-03,0.550962E-02,0.524504E-04,
+ &0.972762E-01,0.214802E-01,0.180411E-03,0.185425E-03,0.180918E-03,
+ &0.180411E-03,0.486321E-02,0.501804E-04,0.886073E-01,0.193242E-01,
+ &0.161512E-03,0.166328E-03,0.161990E-03,0.161512E-03,0.428946E-02,
+ &0.477087E-04,0.806013E-01,0.173629E-01,0.144446E-03,0.149048E-03,
+ &0.144894E-03,0.144446E-03,0.378030E-02,0.451020E-04,0.732197E-01,
+ &0.155814E-01,0.129049E-03,0.133425E-03,0.129467E-03,0.129049E-03,
+ &0.332897E-02,0.424179E-04,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 2721, 2805) /
+ &0.276761E+00,0.663170E-01,0.420483E-03,0.420483E-03,0.420483E-03,
+ &0.420483E-03,0.172075E-01,0.418773E-17,0.255003E+00,0.601925E-01,
+ &0.374768E-03,0.375776E-03,0.374876E-03,0.374768E-03,0.151410E-01,
+ &0.540038E-05,0.234664E+00,0.545789E-01,0.334420E-03,0.336252E-03,
+ &0.334612E-03,0.334420E-03,0.133594E-01,0.101360E-04,0.215665E+00,
+ &0.494328E-01,0.298611E-03,0.301108E-03,0.298867E-03,0.298611E-03,
+ &0.118079E-01,0.141555E-04,0.197941E+00,0.447203E-01,0.266766E-03,
+ &0.269787E-03,0.267068E-03,0.266766E-03,0.104461E-01,0.174750E-04,
+ &0.181428E+00,0.404089E-01,0.238391E-03,0.241815E-03,0.238726E-03,
+ &0.238391E-03,0.924609E-02,0.201244E-04,0.166064E+00,0.364687E-01,
+ &0.213061E-03,0.216782E-03,0.213417E-03,0.213061E-03,0.818507E-02,
+ &0.221467E-04,0.151790E+00,0.328719E-01,0.190418E-03,0.194343E-03,
+ &0.190785E-03,0.190418E-03,0.724366E-02,0.235974E-04,0.138548E+00,
+ &0.295925E-01,0.170150E-03,0.174202E-03,0.170521E-03,0.170150E-03,
+ &0.640614E-02,0.245354E-04,0.126282E+00,0.266063E-01,0.151991E-03,
+ &0.156104E-03,0.152359E-03,0.151991E-03,0.566089E-02,0.250221E-04,
+ &0.114939E+00,0.238907E-01,0.135710E-03,0.139827E-03,0.136071E-03/
+ DATA (DL(K),K= 2806, 2890) /
+ &0.135710E-03,0.499773E-02,0.251191E-04,0.104465E+00,0.214245E-01,
+ &0.121106E-03,0.125180E-03,0.121455E-03,0.121106E-03,0.440691E-02,
+ &0.248850E-04,0.948101E-01,0.191879E-01,0.108002E-03,0.111994E-03,
+ &0.108337E-03,0.108002E-03,0.388094E-02,0.243760E-04,0.859247E-01,
+ &0.171625E-01,0.962435E-04,0.100124E-03,0.965624E-04,0.962435E-04,
+ &0.341379E-02,0.236445E-04,0.777613E-01,0.153309E-01,0.856948E-04,
+ &0.894394E-04,0.859960E-04,0.856948E-04,0.299910E-02,0.227378E-04,
+ &0.702736E-01,0.136770E-01,0.762337E-04,0.798235E-04,0.765166E-04,
+ &0.762337E-04,0.263116E-02,0.216984E-04,0.634174E-01,0.121859E-01,
+ &0.677528E-04,0.711742E-04,0.680169E-04,0.677528E-04,0.230551E-02,
+ &0.205642E-04,0.571500E-01,0.108434E-01,0.601554E-04,0.633990E-04,
+ &0.604008E-04,0.601554E-04,0.201791E-02,0.193681E-04,0.514305E-01,
+ &0.963651E-02,0.533545E-04,0.564148E-04,0.535814E-04,0.533545E-04,
+ &0.176404E-02,0.181381E-04,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.220700E+00,0.461964E-01,0.185072E-03,0.185072E-03,0.185072E-03,
+ &0.185072E-03,0.865568E-02,-.294090E-17,0.201438E+00,0.415162E-01/
+ DATA (DL(K),K= 2891, 2975) /
+ &0.162774E-03,0.163610E-03,0.162842E-03,0.162774E-03,0.772611E-02,
+ &0.184134E-05,0.183625E+00,0.372730E-01,0.143469E-03,0.144974E-03,
+ &0.143588E-03,0.143469E-03,0.690038E-02,0.359959E-05,0.167162E+00,
+ &0.334245E-01,0.126634E-03,0.128666E-03,0.126791E-03,0.126634E-03,
+ &0.616000E-02,0.518075E-05,0.151966E+00,0.299378E-01,0.111904E-03,
+ &0.114340E-03,0.112088E-03,0.111904E-03,0.549219E-02,0.654232E-05,
+ &0.137959E+00,0.267821E-01,0.989836E-04,0.101716E-03,0.991845E-04,
+ &0.989836E-04,0.488896E-02,0.767008E-05,0.125065E+00,0.239289E-01,
+ &0.876157E-04,0.905559E-04,0.878269E-04,0.876157E-04,0.434253E-02,
+ &0.855860E-05,0.113213E+00,0.213524E-01,0.775899E-04,0.806611E-04,
+ &0.778055E-04,0.775899E-04,0.384886E-02,0.921640E-05,0.102335E+00,
+ &0.190285E-01,0.687292E-04,0.718676E-04,0.689446E-04,0.687292E-04,
+ &0.340422E-02,0.965961E-05,0.923671E-01,0.169353E-01,0.608829E-04,
+ &0.640353E-04,0.610944E-04,0.608829E-04,0.300332E-02,0.990752E-05,
+ &0.832476E-01,0.150523E-01,0.539242E-04,0.570473E-04,0.541291E-04,
+ &0.539242E-04,0.264288E-02,0.998320E-05,0.749179E-01,0.133608E-01,
+ &0.477459E-04,0.508046E-04,0.479422E-04,0.477459E-04,0.232088E-02/
+ DATA (DL(K),K= 2976, 3060) /
+ &0.991147E-05,0.673221E-01,0.118435E-01,0.422554E-04,0.452220E-04,
+ &0.424417E-04,0.422554E-04,0.203376E-02,0.971603E-05,0.604073E-01,
+ &0.104845E-01,0.373730E-04,0.402263E-04,0.375483E-04,0.373730E-04,
+ &0.177791E-02,0.941959E-05,0.541231E-01,0.926900E-02,0.330304E-04,
+ &0.357544E-04,0.331943E-04,0.330304E-04,0.155117E-02,0.904408E-05,
+ &0.484216E-01,0.818347E-02,0.291681E-04,0.317517E-04,0.293202E-04,
+ &0.291681E-04,0.135108E-02,0.860921E-05,0.432578E-01,0.721549E-02,
+ &0.257333E-04,0.281694E-04,0.258738E-04,0.257333E-04,0.117463E-02,
+ &0.813214E-05,0.385889E-01,0.635362E-02,0.226802E-04,0.249648E-04,
+ &0.228093E-04,0.226802E-04,0.101941E-02,0.762814E-05,0.343746E-01,
+ &0.558739E-02,0.199682E-04,0.221003E-04,0.200863E-04,0.199682E-04,
+ &0.883469E-03,0.711035E-05,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.168205E+00,0.301419E-01,0.719932E-04,0.719932E-04,0.719932E-04,
+ &0.719932E-04,0.392825E-02,-.205998E-17,0.151922E+00,0.267932E-01,
+ &0.623634E-04,0.630456E-04,0.624028E-04,0.623634E-04,0.361412E-02,
+ &0.457084E-06,0.137042E+00,0.237932E-01,0.541981E-04,0.554098E-04/
+ DATA (DL(K),K= 3061, 3145) /
+ &0.542663E-04,0.541981E-04,0.330342E-02,0.989813E-06,0.123446E+00,
+ &0.211038E-01,0.472163E-04,0.488314E-04,0.473050E-04,0.472163E-04,
+ &0.300140E-02,0.152631E-05,0.111042E+00,0.186954E-01,0.412159E-04,
+ &0.431273E-04,0.413184E-04,0.412159E-04,0.270826E-02,0.202092E-05,
+ &0.997395E-01,0.165410E-01,0.360433E-04,0.381615E-04,0.361542E-04,
+ &0.360433E-04,0.242968E-02,0.245400E-05,0.894558E-01,0.146159E-01,
+ &0.315670E-04,0.338178E-04,0.316822E-04,0.315670E-04,0.216928E-02,
+ &0.281218E-05,0.801130E-01,0.128978E-01,0.276779E-04,0.300002E-04,
+ &0.277940E-04,0.276779E-04,0.192603E-02,0.308878E-05,0.716379E-01,
+ &0.113663E-01,0.242878E-04,0.266317E-04,0.244024E-04,0.242878E-04,
+ &0.170100E-02,0.328451E-05,0.639623E-01,0.100031E-01,0.213246E-04,
+ &0.236502E-04,0.214357E-04,0.213246E-04,0.149649E-02,0.340483E-05,
+ &0.570222E-01,0.879131E-02,0.187277E-04,0.210033E-04,0.188341E-04,
+ &0.187277E-04,0.131163E-02,0.345656E-05,0.507574E-01,0.771565E-02,
+ &0.164465E-04,0.186476E-04,0.165471E-04,0.164465E-04,0.114469E-02,
+ &0.344782E-05,0.451118E-01,0.676223E-02,0.144396E-04,0.165480E-04,
+ &0.145339E-04,0.144396E-04,0.995649E-03,0.338831E-05,0.400330E-01/
+ DATA (DL(K),K= 3146, 3230) /
+ &0.591841E-02,0.126720E-04,0.146744E-04,0.127597E-04,0.126720E-04,
+ &0.863829E-03,0.328754E-05,0.354720E-01,0.517273E-02,0.111137E-04,
+ &0.130013E-04,0.111946E-04,0.111137E-04,0.747293E-03,0.315403E-05,
+ &0.313830E-01,0.451477E-02,0.973915E-05,0.115067E-04,0.981339E-05,
+ &0.973915E-05,0.644664E-03,0.299600E-05,0.277237E-01,0.393511E-02,
+ &0.852687E-05,0.101721E-04,0.859457E-05,0.852687E-05,0.555034E-03,
+ &0.282099E-05,0.244545E-01,0.342521E-02,0.745784E-05,0.898076E-05,
+ &0.751926E-05,0.745784E-05,0.476998E-03,0.263530E-05,0.215390E-01,
+ &0.297737E-02,0.651555E-05,0.791817E-05,0.657100E-05,0.651555E-05,
+ &0.409096E-03,0.244427E-05,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.120694E+00,0.180081E-01,0.236444E-04,0.236444E-04,0.236444E-04,
+ &0.236444E-04,0.154817E-02,0.416656E-17,0.107713E+00,0.158098E-01,
+ &0.200945E-04,0.206098E-04,0.201146E-04,0.200945E-04,0.151249E-02,
+ &0.192118E-07,0.960063E-01,0.138667E-01,0.171552E-04,0.180593E-04,
+ &0.171894E-04,0.171552E-04,0.143574E-02,0.116516E-06,0.854477E-01,
+ &0.121473E-01,0.146986E-04,0.158894E-04,0.147425E-04,0.146986E-04/
+ DATA (DL(K),K= 3231, 3315) /
+ &0.133744E-02,0.251060E-06,0.759386E-01,0.106275E-01,0.126329E-04,
+ &0.140252E-04,0.126830E-04,0.126329E-04,0.122900E-02,0.395272E-06,
+ &0.673865E-01,0.928577E-02,0.108901E-04,0.124142E-04,0.109436E-04,
+ &0.108901E-04,0.111367E-02,0.535145E-06,0.597062E-01,0.810254E-02,
+ &0.941160E-05,0.110108E-04,0.946648E-05,0.941160E-05,0.996785E-03,
+ &0.659421E-06,0.528194E-01,0.706039E-02,0.815165E-05,0.978016E-05,
+ &0.820627E-05,0.815165E-05,0.885152E-03,0.762600E-06,0.466540E-01,
+ &0.614371E-02,0.707299E-05,0.869464E-05,0.712616E-05,0.707299E-05,
+ &0.780484E-03,0.842072E-06,0.411433E-01,0.533850E-02,0.614470E-05,
+ &0.773135E-05,0.619559E-05,0.614470E-05,0.682563E-03,0.896683E-06,
+ &0.362261E-01,0.463223E-02,0.534297E-05,0.687330E-05,0.539102E-05,
+ &0.534297E-05,0.593317E-03,0.928176E-06,0.318459E-01,0.401364E-02,
+ &0.464848E-05,0.610690E-05,0.469333E-05,0.464848E-05,0.513720E-03,
+ &0.939174E-06,0.279510E-01,0.347266E-02,0.404483E-05,0.542054E-05,
+ &0.408628E-05,0.404483E-05,0.442713E-03,0.932117E-06,0.244935E-01,
+ &0.300029E-02,0.351893E-05,0.480507E-05,0.355692E-05,0.351893E-05,
+ &0.379744E-03,0.910085E-06,0.214299E-01,0.258845E-02,0.306021E-05/
+ DATA (DL(K),K= 3316, 3400) /
+ &0.425313E-05,0.309476E-05,0.306021E-05,0.324785E-03,0.876365E-06,
+ &0.187200E-01,0.222996E-02,0.265958E-05,0.375823E-05,0.269081E-05,
+ &0.265958E-05,0.277080E-03,0.833755E-06,0.163273E-01,0.191840E-02,
+ &0.230942E-05,0.331477E-05,0.233747E-05,0.230942E-05,0.235661E-03,
+ &0.784780E-06,0.142185E-01,0.164805E-02,0.200337E-05,0.291797E-05,
+ &0.202844E-05,0.200337E-05,0.199949E-03,0.731774E-06,0.123631E-01,
+ &0.141382E-02,0.173596E-05,0.256351E-05,0.175824E-05,0.173596E-05,
+ &0.169376E-03,0.676674E-06,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.794823E-01,0.948208E-02,0.607312E-05,0.607312E-05,0.607312E-05,
+ &0.607312E-05,0.497062E-03,-.140523E-17,0.699344E-01,0.820355E-02,
+ &0.500852E-05,0.538347E-05,0.501731E-05,0.500852E-05,0.542262E-03,
+ &-.714686E-07,0.614560E-01,0.709106E-02,0.415227E-05,0.479898E-05,
+ &0.416702E-05,0.415227E-05,0.549985E-03,-.960102E-07,0.539240E-01,
+ &0.612155E-02,0.345977E-05,0.429563E-05,0.347839E-05,0.345977E-05,
+ &0.531288E-03,-.894946E-07,0.472426E-01,0.527757E-02,0.289508E-05,
+ &0.385164E-05,0.291595E-05,0.289508E-05,0.495120E-03,-.668594E-07/
+ DATA (DL(K),K= 3401, 3485) /
+ &0.413245E-01,0.454380E-02,0.243524E-05,0.345851E-05,0.245713E-05,
+ &0.243524E-05,0.452156E-03,-.338861E-07,0.360903E-01,0.390658E-02,
+ &0.205923E-05,0.310726E-05,0.208123E-05,0.205923E-05,0.406686E-03,
+ &0.329349E-08,0.314681E-01,0.335393E-02,0.174861E-05,0.278918E-05,
+ &0.177007E-05,0.174861E-05,0.359402E-03,0.387747E-07,0.273932E-01,
+ &0.287528E-02,0.149082E-05,0.250013E-05,0.151127E-05,0.149082E-05,
+ &0.313779E-03,0.705560E-07,0.238068E-01,0.246132E-02,0.127582E-05,
+ &0.223699E-05,0.129498E-05,0.127582E-05,0.272195E-03,0.975744E-07,
+ &0.206558E-01,0.210383E-02,0.109488E-05,0.199657E-05,0.111257E-05,
+ &0.109488E-05,0.234227E-03,0.118651E-06,0.178921E-01,0.179558E-02,
+ &0.941584E-06,0.177694E-05,0.957733E-06,0.941584E-06,0.199907E-03,
+ &0.133780E-06,0.154726E-01,0.153020E-02,0.811157E-06,0.157680E-05,
+ &0.825743E-06,0.811157E-06,0.169849E-03,0.143581E-06,0.133582E-01,
+ &0.130209E-02,0.699567E-06,0.139481E-05,0.712624E-06,0.699567E-06,
+ &0.143794E-03,0.148591E-06,0.115137E-01,0.110634E-02,0.603631E-06,
+ &0.122977E-05,0.615228E-06,0.603631E-06,0.121163E-03,0.149477E-06,
+ &0.990774E-02,0.938615E-03,0.520920E-06,0.108072E-05,0.531148E-06/
+ DATA (DL(K),K= 3486, 3570) /
+ &0.520920E-06,0.101725E-03,0.147055E-06,0.851194E-02,0.795146E-03,
+ &0.449441E-06,0.946634E-06,0.458405E-06,0.449441E-06,0.852238E-04,
+ &0.142064E-06,0.730103E-02,0.672622E-03,0.387542E-06,0.826497E-06,
+ &0.395353E-06,0.387542E-06,0.712290E-04,0.135149E-06,0.625244E-02,
+ &0.568155E-03,0.333888E-06,0.719316E-06,0.340658E-06,0.333888E-06,
+ &0.593824E-04,0.126902E-06,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.457819E-01,0.409492E-02,0.105702E-05,0.105702E-05,0.105702E-05,
+ &0.105702E-05,0.115350E-03,0.265810E-18,0.395724E-01,0.347873E-02,
+ &0.812397E-06,0.103880E-05,0.815187E-06,0.812397E-06,0.160406E-03,
+ &-.555147E-07,0.341639E-01,0.295295E-02,0.627904E-06,0.987449E-06,
+ &0.632305E-06,0.627904E-06,0.174490E-03,-.847266E-07,0.294481E-01,
+ &0.250329E-02,0.490075E-06,0.920197E-06,0.495305E-06,0.490075E-06,
+ &0.174490E-03,-.944763E-07,0.253423E-01,0.211912E-02,0.387225E-06,
+ &0.845257E-06,0.392760E-06,0.387225E-06,0.167111E-03,-.916775E-07,
+ &0.217735E-01,0.179138E-02,0.309989E-06,0.766697E-06,0.315473E-06,
+ &0.309989E-06,0.152540E-03,-.819158E-07,0.186760E-01,0.151211E-02/
+ DATA (DL(K),K= 3571, 3655) /
+ &0.252109E-06,0.688927E-06,0.257316E-06,0.252109E-06,0.135295E-03,
+ &-.682145E-07,0.159921E-01,0.127447E-02,0.208612E-06,0.614302E-06,
+ &0.213410E-06,0.208612E-06,0.118648E-03,-.528734E-07,0.136704E-01,
+ &0.107254E-02,0.175203E-06,0.543807E-06,0.179526E-06,0.175203E-06,
+ &0.102484E-03,-.379748E-07,0.116656E-01,0.901214E-03,0.149064E-06,
+ &0.478363E-06,0.152890E-06,0.149064E-06,0.871530E-04,-.245007E-07,
+ &0.993760E-02,0.756074E-03,0.128274E-06,0.418496E-06,0.131610E-06,
+ &0.128274E-06,0.735682E-04,-.128491E-07,0.845081E-02,0.633315E-03,
+ &0.111313E-06,0.364260E-06,0.114187E-06,0.111313E-06,0.617706E-04,
+ &-.327698E-08,0.717398E-02,0.529654E-03,0.971373E-07,0.315568E-06,
+ &0.995871E-07,0.971373E-07,0.514764E-04,0.421954E-08,0.607950E-02,
+ &0.442265E-03,0.850687E-07,0.272228E-06,0.871375E-07,0.850687E-07,
+ &0.426580E-04,0.982709E-08,0.514311E-02,0.368716E-03,0.746164E-07,
+ &0.233927E-06,0.763489E-07,0.746164E-07,0.352463E-04,0.137715E-07,
+ &0.434349E-02,0.306920E-03,0.654439E-07,0.200291E-06,0.668838E-07,
+ &0.654439E-07,0.290260E-04,0.163078E-07,0.366196E-02,0.255085E-03,
+ &0.573307E-07,0.170932E-06,0.585192E-07,0.573307E-07,0.238196E-04/
+ DATA (DL(K),K= 3656, 3740) /
+ &0.177037E-07,0.308217E-02,0.211681E-03,0.501185E-07,0.145441E-06,
+ &0.510931E-07,0.501185E-07,0.195033E-04,0.182028E-07,0.258987E-02,
+ &0.175396E-03,0.436915E-07,0.123415E-06,0.444860E-07,0.436915E-07,
+ &0.159423E-04,0.180204E-07,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.206951E-01,0.123383E-02,0.903693E-07,0.903693E-07,0.903693E-07,
+ &0.903693E-07,0.147928E-04,0.131925E-18,0.174566E-01,0.102241E-02,
+ &0.892028E-07,0.129792E-07,0.885875E-07,0.892028E-07,0.328931E-04,
+ &0.168541E-07,0.147092E-01,0.846741E-03,0.841992E-07,-.346085E-07,
+ &0.832249E-07,0.841992E-07,0.410825E-04,0.262547E-07,0.123736E-01,
+ &0.700287E-03,0.769173E-07,-.620958E-07,0.757563E-07,0.769173E-07,
+ &0.418512E-04,0.305542E-07,0.103910E-01,0.578275E-03,0.688622E-07,
+ &-.753692E-07,0.676306E-07,0.688622E-07,0.392599E-04,0.318183E-07,
+ &0.871109E-02,0.476815E-03,0.611778E-07,-.782788E-07,0.599557E-07,
+ &0.611778E-07,0.356221E-04,0.316149E-07,0.728984E-02,0.392546E-03,
+ &0.537256E-07,-.749101E-07,0.525642E-07,0.537256E-07,0.312295E-04,
+ &0.301630E-07,0.608951E-02,0.322656E-03,0.466227E-07,-.678673E-07/
+ DATA (DL(K),K= 3741, 3825) /
+ &0.455521E-07,0.466227E-07,0.265816E-04,0.278681E-07,0.507758E-02,
+ &0.264779E-03,0.400790E-07,-.588670E-07,0.391148E-07,0.400790E-07,
+ &0.223044E-04,0.251720E-07,0.422604E-02,0.216927E-03,0.341205E-07,
+ &-.492124E-07,0.332680E-07,0.341205E-07,0.185283E-04,0.222885E-07,
+ &0.351082E-02,0.177427E-03,0.287480E-07,-.397442E-07,0.280058E-07,
+ &0.287480E-07,0.152122E-04,0.193702E-07,0.291126E-02,0.144878E-03,
+ &0.239699E-07,-.309608E-07,0.233320E-07,0.239699E-07,0.123840E-04,
+ &0.165481E-07,0.240962E-02,0.118102E-03,0.197695E-07,-.231453E-07,
+ &0.192276E-07,0.197695E-07,0.100316E-04,0.139043E-07,0.199075E-02,
+ &0.961132E-04,0.161186E-07,-.164194E-07,0.156628E-07,0.161186E-07,
+ &0.808648E-05,0.114903E-07,0.164168E-02,0.780880E-04,0.129826E-07,
+ &-.107955E-07,0.126029E-07,0.129826E-07,0.648861E-05,0.933575E-08,
+ &0.135135E-02,0.633381E-04,0.103192E-07,-.622051E-08,0.100055E-07,
+ &0.103192E-07,0.519042E-05,0.744979E-08,0.111036E-02,0.512898E-04,
+ &0.808255E-08,-.260101E-08,0.782557E-08,0.808255E-08,0.414192E-05,
+ &0.582811E-08,0.910718E-03,0.414657E-04,0.622640E-08,0.177583E-09,
+ &0.601750E-08,0.622640E-08,0.329729E-05,0.445766E-08,0.745657E-03/
+ DATA (DL(K),K= 3826, 3910) /
+ &0.334694E-04,0.470431E-08,0.223586E-08,0.453577E-08,0.470431E-08,
+ &0.261981E-05,0.331859E-08,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,
+ &0.519165E-02,0.154752E-03,0.135983E-08,0.135983E-08,0.135983E-08,
+ &0.135983E-08,0.445189E-06,0.165858E-19,0.420352E-02,0.123002E-03,
+ &-.202651E-07,0.730203E-07,-.200511E-07,-.202651E-07,0.358557E-05,
+ &-.213089E-07,0.340143E-02,0.977718E-04,-.356451E-07,0.114908E-06,
+ &-.353066E-07,-.356451E-07,0.384652E-05,-.364475E-07,0.274771E-02,
+ &0.776124E-04,-.435588E-07,0.139200E-06,-.431556E-07,-.435588E-07,
+ &0.404834E-05,-.441752E-07,0.221524E-02,0.614950E-04,-.471629E-07,
+ &0.150069E-06,-.467352E-07,-.471629E-07,0.391615E-05,-.476355E-07,
+ &0.178268E-02,0.486476E-04,-.477545E-07,0.151420E-06,-.473296E-07,
+ &-.477545E-07,0.334100E-05,-.481163E-07,0.143185E-02,0.384202E-04,
+ &-.462359E-07,0.146515E-06,-.458316E-07,-.462359E-07,0.275426E-05,
+ &-.465126E-07,0.114781E-02,0.302894E-04,-.434031E-07,0.137587E-06,
+ &-.430295E-07,-.434031E-07,0.226010E-05,-.436143E-07,0.918288E-03,
+ &0.238367E-04,-.398089E-07,0.126321E-06,-.394715E-07,-.398089E-07/
+ DATA (DL(K),K= 3911, 3995) /
+ &0.180947E-05,-.399700E-07,0.733193E-03,0.187249E-04,-.358525E-07,
+ &0.113940E-06,-.355529E-07,-.358525E-07,0.142045E-05,-.359751E-07,
+ &0.584227E-03,0.146823E-04,-.318183E-07,0.101291E-06,-.315563E-07,
+ &-.318183E-07,0.110919E-05,-.319115E-07,0.464586E-03,0.114914E-04,
+ &-.278936E-07,0.889550E-07,-.276671E-07,-.278936E-07,0.860964E-06,
+ &-.279643E-07,0.368700E-03,0.897731E-05,-.241972E-07,0.773096E-07,
+ &-.240033E-07,-.241972E-07,0.662825E-06,-.242508E-07,0.292013E-03,
+ &0.700034E-05,-.208001E-07,0.665779E-07,-.206356E-07,-.208001E-07,
+ &0.508061E-06,-.208406E-07,0.230814E-03,0.544870E-05,-.177366E-07,
+ &0.568734E-07,-.175982E-07,-.177366E-07,0.388493E-06,-.177672E-07,
+ &0.182078E-03,0.423324E-05,-.150157E-07,0.482316E-07,-.149000E-07,
+ &-.150157E-07,0.296111E-06,-.150387E-07,0.143349E-03,0.328297E-05,
+ &-.126295E-07,0.406343E-07,-.125335E-07,-.126295E-07,0.225104E-06,
+ &-.126468E-07,0.112639E-03,0.254145E-05,-.105595E-07,0.340280E-07,
+ &-.104803E-07,-.105595E-07,0.170871E-06,-.105726E-07,0.883377E-04,
+ &0.196395E-05,-.878062E-08,0.283380E-07,-.871555E-08,-.878062E-08,
+ &0.129517E-06,-.879039E-08,0.000000E+00,0.000000E+00,0.000000E+00/
+ DATA (DL(K),K= 3996, 4000) /
+ &0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00,0.000000E+00/
+C
+ ANS = 0.
+ IF (X.GT.0.9985) RETURN
+ IF ( ((I.EQ.3).OR.(I.EQ.8)) .AND. (X.GT.0.95) ) RETURN
+C
+ IS = S/DELTA+1
+ IS1 = IS+1
+ DO 1 L=1,25
+ KL = L+NDRV*25
+ F1(L) = GF(I,IS,KL)
+ F2(L) = GF(I,IS1,KL)
+ 1 CONTINUE
+ A1 = DT_CKMTFF(X,F1)
+ A2 = DT_CKMTFF(X,F2)
+C A1=ALOG(A1)
+C A2=ALOG(A2)
+ S1 = (IS-1)*DELTA
+ S2 = S1+DELTA
+ ANS = A1*(S-S2)/(S1-S2)+A2*(S-S1)/(S2-S1)
+C ANS=EXP(ANS)
+ RETURN
+ END
+C
+CDECK ID>, DT_CKMTFF
+ FUNCTION DT_CKMTFF(X,FVL)
+C**********************************************************************
+C
+C LOGARITHMIC INTERPOLATOR - WATCH OUT FOR NEGATIVE
+C FUNCTIONS AND/OR X VALUES OUTSIDE THE RANGE 0 TO 1.
+C NOTE: DIMENSION OF FVL IS OVERWRITTEN BY VALUE USED
+C IN MAIN ROUTINE.
+C
+C**********************************************************************
+
+ SAVE
+ DIMENSION FVL(25),XGRID(25)
+ DATA NX,XGRID/25,.001,.002,.004,.008,.016,.032,.064,.1,.15,
+ *.2,.25,.3,.35,.4,.45,.5,.55,.6,.65,.7,.75,.8,.85,.9,.95/
+C
+ DT_CKMTFF=0.
+ DO 1 I=1,NX
+ IF(X.LT.XGRID(I)) GO TO 2
+ 1 CONTINUE
+ 2 I=I-1
+ IF(I.EQ.0) THEN
+ I=I+1
+ ELSE IF(I.GT.23) THEN
+ I=23
+ ENDIF
+ J=I+1
+ K=J+1
+ AXI=LOG(XGRID(I))
+ BXI=LOG(1.-XGRID(I))
+ AXJ=LOG(XGRID(J))
+ BXJ=LOG(1.-XGRID(J))
+ AXK=LOG(XGRID(K))
+ BXK=LOG(1.-XGRID(K))
+ FI=LOG(ABS(FVL(I)) +1.E-15)
+ FJ=LOG(ABS(FVL(J)) +1.E-16)
+ FK=LOG(ABS(FVL(K)) +1.E-17)
+ DET=AXI*(BXJ-BXK)+AXJ*(BXK-BXI)+AXK*(BXI-BXJ)
+ ALOGA=(FI*(AXJ*BXK-AXK*BXJ)+FJ*(AXK*BXI-AXI*BXK)+FK*(AXI*BXJ-AXJ*
+ $ BXI))/DET
+ ALPHA=(FI*(BXJ-BXK)+FJ*(BXK-BXI)+FK*(BXI-BXJ))/DET
+ BETA=(FI*(AXK-AXJ)+FJ*(AXI-AXK)+FK*(AXJ-AXI))/DET
+ IF(ABS(ALPHA).GT.99..OR.ABS(BETA).GT.99..OR.ABS(ALOGA).GT.99.)
+ 1RETURN
+C IF(ALPHA.GT.50..OR.BETA.GT.50.) THEN
+C WRITE(6,2001) X,FVL
+C 2001 FORMAT(8E12.4)
+C WRITE(6,2001) ALPHA,BETA,ALOGA,DET
+C ENDIF
+ DT_CKMTFF=EXP(ALOGA)*X**ALPHA*(1.-X)**BETA
+ RETURN
+ END
+*
+*===fluini=============================================================*
+*
+CDECK ID>, DT_FLUINI
+ SUBROUTINE DT_FLUINI
+
+************************************************************************
+* Initialisation of the nucleon-nucleon cross section fluctuation *
+* treatment. The original version by J. Ranft. *
+* This version dated 21.04.95 is revised by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,TINY10=1.0D-10,ONE=1.0D0,TWO=2.0D0)
+
+ PARAMETER ( A = 0.1D0,
+ & B = 0.893D0,
+ & OM = 1.1D0,
+ & N = 6,
+ & DX = 0.003D0)
+
+* n-n cross section fluctuations
+ PARAMETER (NBINS = 1000)
+ COMMON /DTXSFL/ FLUIXX(NBINS),IFLUCT
+ DIMENSION FLUSI(NBINS),FLUIX(NBINS)
+
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,1X,'FLUINI: hadronic cross section fluctuations ',
+ & 'treated')
+
+ FLUSU = ZERO
+ FLUSUU = ZERO
+
+ DO 1 I=1,NBINS
+ X = DBLE(I)*DX
+ FLUIX(I) = X
+ FLUS = ((X-B)/(OM*B))**N
+ IF (FLUS.LE.20.0D0) THEN
+ FLUSI(I) = (X/B)*EXP(-FLUS)/(X/B+A)
+ ELSE
+ FLUSI(I) = ZERO
+ ENDIF
+ FLUSU = FLUSU+FLUSI(I)
+ 1 CONTINUE
+ DO 2 I=1,NBINS
+ FLUSUU = FLUSUU+FLUSI(I)/FLUSU
+ FLUSI(I) = FLUSUU
+ 2 CONTINUE
+
+C WRITE(LOUT,1001)
+C1001 FORMAT(1X,'FLUCTUATIONS')
+C CALL PLOT(FLUIX,FLUSI,1000,1,1000,0.0D0,0.06D0,0.0D0,0.01D0)
+
+ DO 3 I=1,NBINS
+ AF = DBLE(I)*0.001D0
+ DO 4 J=1,NBINS
+ IF (AF.LE.FLUSI(J)) THEN
+ FLUIXX(I) = FLUIX(J)
+ GOTO 5
+ ENDIF
+ 4 CONTINUE
+ 5 CONTINUE
+ 3 CONTINUE
+ FLUIXX(1) = FLUIX(1)
+ FLUIXX(NBINS) = FLUIX(NBINS)
+
+ RETURN
+ END
+*
+*===sigtab=============================================================*
+*
+CDECK ID>, DT_SIGTBL
+ SUBROUTINE DT_SIGTBL(JP,JT,PTOT,SIGE,MODE)
+
+************************************************************************
+* This version dated 18.11.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY2=1.0D-2,ZERO=0.0D0,DLARGE=1.0D10,
+ & OHALF=0.5D0,ONE=1.0D0)
+ PARAMETER (PLO=0.01D0,PHI=20.0D0,NBINS=150)
+
+ LOGICAL LINIT
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ DIMENSION SIGEP(5,NBINS+1),SIGEN(5,NBINS+1),IDSIG(23)
+ DATA IDSIG / 1, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ & 0, 0, 3, 4, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 5/
+ DATA LINIT /.FALSE./
+
+* precalculation and tabulation of elastic cross sections
+ IF (ABS(MODE).EQ.1) THEN
+ IF (MODE.EQ.1)
+ & OPEN(LDAT,FILE='sigtab.out',STATUS='UNKNOWN')
+ PLABLX = LOG10(PLO)
+ PLABHX = LOG10(PHI)
+ DPLAB = (PLABHX-PLABLX)/DBLE(NBINS)
+ DO 1 I=1,NBINS+1
+ PLAB = PLABLX+DBLE(I-1)*DPLAB
+ PLAB = 10**PLAB
+ DO 2 IPROJ=1,23
+ IDX = IDSIG(IPROJ)
+ IF (IDX.GT.0) THEN
+C CALL DT_SIHNEL(IPROJ,1,PLAB,SIGEP(IDX,I))
+C CALL DT_SIHNEL(IPROJ,8,PLAB,SIGEN(IDX,I))
+ DUMZER = ZERO
+ CALL DT_XSHN(IPROJ,1,PLAB,DUMZER,SIGTOT,SIGEP(IDX,I))
+ CALL DT_XSHN(IPROJ,8,PLAB,DUMZER,SIGTOT,SIGEN(IDX,I))
+ ENDIF
+ 2 CONTINUE
+ IF (MODE.EQ.1) THEN
+ WRITE(LDAT,1000) PLAB,(SIGEP(IDX,I),IDX=1,5),
+ & (SIGEN(IDX,I),IDX=1,5)
+ 1000 FORMAT(F5.1,10F7.2)
+ ENDIF
+ 1 CONTINUE
+ IF (MODE.EQ.1) CLOSE(LDAT)
+ LINIT = .TRUE.
+ ELSE
+ SIGE = -ONE
+ IF (LINIT.AND.(JP.LE.23).AND.(PTOT.GE.PLO)
+ & .AND.(PTOT.LE.PHI) ) THEN
+ IDX = IDSIG(JP)
+ IF ( (IDX.GT.0).AND.((JT.EQ.1).OR.(JT.EQ.8)) ) THEN
+ PLABX = LOG10(PTOT)
+ IF (PLABX.LE.PLABLX) THEN
+ I1 = 1
+ I2 = 1
+ ELSEIF (PLABX.GE.PLABHX) THEN
+ I1 = NBINS+1
+ I2 = NBINS+1
+ ELSE
+ I1 = INT((PLABX-PLABLX)/DPLAB)+1
+ I2 = I1+1
+ ENDIF
+ PLAB1X = PLABLX+DBLE(I1-1)*DPLAB
+ PLAB2X = PLABLX+DBLE(I2-1)*DPLAB
+ PBIN = PLAB2X-PLAB1X
+ IF (PBIN.GT.TINY10) THEN
+ RATX = (PLABX-PLAB1X)/(PLAB2X-PLAB1X)
+ ELSE
+ RATX = ZERO
+ ENDIF
+ IF (JT.EQ.1) THEN
+ SIG1 = SIGEP(IDX,I1)
+ SIG2 = SIGEP(IDX,I2)
+ ELSE
+ SIG1 = SIGEN(IDX,I1)
+ SIG2 = SIGEN(IDX,I2)
+ ENDIF
+ SIGE = SIG1+RATX*(SIG2-SIG1)
+ ENDIF
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+*
+*===xstabl=============================================================*
+*
+CDECK ID>, DT_XSTABL
+ SUBROUTINE DT_XSTABL(WHAT,IXSQEL,IRATIO)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY2=1.0D-2,ZERO=0.0D0,DLARGE=1.0D10,
+ & OHALF=0.5D0,ONE=1.0D0,TWO=2.0D0)
+ LOGICAL LLAB,LELOG,LQLOG
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+
+ DIMENSION WHAT(6)
+
+ LLAB = (WHAT(1).GT.ZERO).OR.(WHAT(2).GT.ZERO)
+ ELO = ABS(WHAT(1))
+ EHI = ABS(WHAT(2))
+ IF (ELO.GT.EHI) ELO = EHI
+ LELOG = WHAT(3).LT.ZERO
+ NEBINS = MAX(INT(ABS(WHAT(3))),1)
+ DEBINS = (EHI-ELO)/DBLE(NEBINS)
+ IF (LELOG) THEN
+ AELO = LOG10(ELO)
+ AEHI = LOG10(EHI)
+ ADEBIN = (AEHI-AELO)/DBLE(NEBINS)
+ ENDIF
+ Q2LO = WHAT(4)
+ Q2HI = WHAT(5)
+ IF (Q2LO.GT.Q2HI) Q2LO = Q2HI
+ LQLOG = WHAT(6).LT.ZERO
+ NQBINS = MAX(INT(ABS(WHAT(6))),1)
+ DQBINS = (Q2HI-Q2LO)/DBLE(NQBINS)
+ IF (LQLOG) THEN
+ AQ2LO = LOG10(Q2LO)
+ AQ2HI = LOG10(Q2HI)
+ ADQBIN = (AQ2HI-AQ2LO)/DBLE(NQBINS)
+ ENDIF
+
+ IF ( ELO.EQ. EHI) NEBINS = 0
+ IF (Q2LO.EQ.Q2HI) NQBINS = 0
+
+ WRITE(LOUT,1000) ELO,EHI,LLAB,IXSQEL,Q2LO,Q2HI,IJPROJ,IP,IT
+ 1000 FORMAT(/,1X,'XSTABL: E_lo =',E10.3,' GeV E_hi =',E10.3,
+ & ' GeV Lab = ',L1,' qel: ',I2,/,10X,'Q2_lo =',F10.5,
+ & ' GeV^2 Q2_hi =',F10.5,' GeV^2',/,10X,'id_p = ',I2,
+ & ' A_p = ',I3,' A_t = ',I3,/)
+
+C IF (IJPROJ.NE.7) THEN
+ WRITE(LOUT,'(1X,A,/)')'(E,STOT,SELA,SQEP,SQET,SQE2,SINE,SPROD)'
+* normalize fractions of emulsion components
+ IF (NCOMPO.GT.0) THEN
+ SUMFRA = ZERO
+ DO 10 I=1,NCOMPO
+ SUMFRA = SUMFRA+EMUFRA(I)
+ 10 CONTINUE
+ IF (SUMFRA.GT.ZERO) THEN
+ DO 11 I=1,NCOMPO
+ EMUFRA(I) = EMUFRA(I)/SUMFRA
+ 11 CONTINUE
+ ENDIF
+ ENDIF
+C ELSE
+C WRITE(LOUT,'(1X,A,/)') '(Q2,E,STOT,ETOT,SIN,EIN,STOT0)'
+C ENDIF
+ DO 1 I=1,NEBINS+1
+ IF (LELOG) THEN
+ E = 10**(AELO+DBLE(I-1)*ADEBIN)
+ ELSE
+ E = ELO+DBLE(I-1)*DEBINS
+ ENDIF
+ DO 2 J=1,NQBINS+1
+ IF (LQLOG) THEN
+ Q2 = 10**(AQ2LO+DBLE(J-1)*ADQBIN)
+ ELSE
+ Q2 = Q2LO+DBLE(J-1)*DQBINS
+ ENDIF
+c IF (IJPROJ.NE.7) THEN
+ IF (LLAB) THEN
+ PLAB = ZERO
+ ECM = ZERO
+ CALL DT_LTINI(IJPROJ,1,E,PPN0,ECM,0)
+ ELSE
+ ECM = E
+ ENDIF
+ XI = ZERO
+ Q2I = ZERO
+ IF (IJPROJ.EQ.7) Q2I = Q2
+ IF (NCOMPO.GT.0) THEN
+ DO 20 IC=1,NCOMPO
+ IIT = IEMUMA(IC)
+ CALL DT_XSGLAU(IP,IIT,IJPROJ,XI,Q2I,ECM,1,1,-IC)
+ 20 CONTINUE
+ ELSE
+ CALL DT_XSGLAU(IP,IT,IJPROJ,XI,Q2I,ECM,1,1,-1)
+C CALL AMPLIT(IP,IT,IJPROJ,XI,Q2I,ECM,1,1,1)
+ ENDIF
+ IF (NCOMPO.GT.0) THEN
+ XTOT = ZERO
+ ETOT = ZERO
+ XELA = ZERO
+ EELA = ZERO
+ XQEP = ZERO
+ EQEP = ZERO
+ XQET = ZERO
+ EQET = ZERO
+ XQE2 = ZERO
+ EQE2 = ZERO
+ XPRO = ZERO
+ EPRO = ZERO
+ XPRO1= ZERO
+ XDEL = ZERO
+ EDEL = ZERO
+ XDQE = ZERO
+ EDQE = ZERO
+ DO 21 IC=1,NCOMPO
+ XTOT = XTOT+EMUFRA(IC)*XSTOT(1,1,IC)
+ ETOT = ETOT+EMUFRA(IC)*XETOT(1,1,IC)**2
+ XELA = XELA+EMUFRA(IC)*XSELA(1,1,IC)
+ EELA = EELA+EMUFRA(IC)*XEELA(1,1,IC)**2
+ XQEP = XQEP+EMUFRA(IC)*XSQEP(1,1,IC)
+ EQEP = EQEP+EMUFRA(IC)*XEQEP(1,1,IC)**2
+ XQET = XQET+EMUFRA(IC)*XSQET(1,1,IC)
+ EQET = EQET+EMUFRA(IC)*XEQET(1,1,IC)**2
+ XQE2 = XQE2+EMUFRA(IC)*XSQE2(1,1,IC)
+ EQE2 = EQE2+EMUFRA(IC)*XEQE2(1,1,IC)**2
+ XPRO = XPRO+EMUFRA(IC)*XSPRO(1,1,IC)
+ EPRO = EPRO+EMUFRA(IC)*XEPRO(1,1,IC)**2
+ XDEL = XDEL+EMUFRA(IC)*XSDEL(1,1,IC)
+ EDEL = EDEL+EMUFRA(IC)*XEDEL(1,1,IC)**2
+ XDQE = XDQE+EMUFRA(IC)*XSDQE(1,1,IC)
+ EDQE = EDQE+EMUFRA(IC)*XEDQE(1,1,IC)**2
+ YPRO = XSTOT(1,1,IC)-XSELA(1,1,IC)
+ & -XSQEP(1,1,IC)-XSQET(1,1,IC)
+ & -XSQE2(1,1,IC)
+ XPRO1= XPRO1+EMUFRA(IC)*YPRO
+ 21 CONTINUE
+ ETOT = SQRT(ETOT)
+ EELA = SQRT(EELA)
+ EQEP = SQRT(EQEP)
+ EQET = SQRT(EQET)
+ EQE2 = SQRT(EQE2)
+ EPRO = SQRT(EPRO)
+ EDEL = SQRT(EDEL)
+ EDQE = SQRT(EDQE)
+ WRITE(LOUT,'(8E9.3)')
+ & E,XTOT,XELA,XQEP,XQET,XQE2,XPRO,XPRO1
+C WRITE(LOUT,'(4E9.3)')
+C & E,XDEL,XDQE,XDEL+XDQE
+ ELSE
+ WRITE(LOUT,'(11E10.3)')
+ & E,
+ & XSTOT(1,1,1),XSELA(1,1,1),XSQEP(1,1,1),XSQET(1,1,1),
+ & XSQE2(1,1,1),XSPRO(1,1,1),
+ & XSTOT(1,1,1)-XSELA(1,1,1)-XSQEP(1,1,1)-XSQET(1,1,1)
+ & -XSQE2(1,1,1),XSDEL(1,1,1),XSDQE(1,1,1),
+ & XSDEL(1,1,1)+XSDQE(1,1,1)
+C WRITE(LOUT,'(4E9.3)') E,XSDEL(1,1,1),XSDQE(1,1,1),
+C & XSDEL(1,1,1)+XSDQE(1,1,1)
+ ENDIF
+c ELSE
+c IF (LLAB) THEN
+c IF (IT.GT.1) THEN
+c IF (IXSQEL.EQ.0) THEN
+cC CALL DT_SIGGA(IT, Q2, E,ZERO,ZERO,
+cC CALL DT_SIGGA(IT, E,Q2,ZERO,ZERO,
+c CALL DT_SIGGA(IT,ZERO,Q2,ZERO,E,
+c & STOT,ETOT,SIN,EIN,STOT0)
+c IF (IRATIO.EQ.1) THEN
+c CALL DT_SIGGP( Q2, E,ZERO,ZERO,STGP,SIGP,SDGP)
+cC CALL DT_SIGGP( E,Q2,ZERO,ZERO,STGP,SIGP,SDGP)
+cC CALL DT_SIGGP(ZERO,Q2,ZERO,E,STGP,SIGP,SDGP)
+c*!! save cross sections
+c STOTA = STOT
+c ETOTA = ETOT
+c STOTP = STGP
+c*!!
+c STOT = STOT/(DBLE(IT)*STGP)
+c SIN = SIN/(DBLE(IT)*SIGP)
+c STOT0 = STGP
+c ETOT = ZERO
+c EIN = ZERO
+c ENDIF
+c ELSE
+c WRITE(LOUT,*)
+c & ' XSTABL: qel. xs. not implemented for nuclei'
+c STOP
+c ENDIF
+c ELSE
+c ETOT = ZERO
+c EIN = ZERO
+c STOT0= ZERO
+c IF (IXSQEL.EQ.0) THEN
+c CALL DT_SIGGP(ZERO,Q2,ZERO,E,STOT,SIN,SDIR)
+c ELSE
+c SIN = ZERO
+c CALL DT_SIGVEL(ZERO,Q2,ZERO,E,IXSQEL,STOT,SIN,STOT0)
+c ENDIF
+c ENDIF
+c ELSE
+c IF (IT.GT.1) THEN
+c IF (IXSQEL.EQ.0) THEN
+c CALL DT_SIGGA(IT,ZERO,Q2,E,ZERO,
+c & STOT,ETOT,SIN,EIN,STOT0)
+c IF (IRATIO.EQ.1) THEN
+c CALL DT_SIGGP(ZERO,Q2,E,ZERO,STGP,SIGP,SDGP)
+c*!! save cross sections
+c STOTA = STOT
+c ETOTA = ETOT
+c STOTP = STGP
+c*!!
+c STOT = STOT/(DBLE(IT)*STGP)
+c SIN = SIN/(DBLE(IT)*SIGP)
+c STOT0 = STGP
+c ETOT = ZERO
+c EIN = ZERO
+c ENDIF
+c ELSE
+c WRITE(LOUT,*)
+c & ' XSTABL: qel. xs. not implemented for nuclei'
+c STOP
+c ENDIF
+c ELSE
+c ETOT = ZERO
+c EIN = ZERO
+c STOT0= ZERO
+c IF (IXSQEL.EQ.0) THEN
+c CALL DT_SIGGP(ZERO,Q2,E,ZERO,STOT,SIN,SDIR)
+c ELSE
+c SIN = ZERO
+c CALL DT_SIGVEL(ZERO,Q2,E,ZERO,IXSQEL,STOT,SIN,STOT0)
+c ENDIF
+c ENDIF
+c ENDIF
+cC WRITE(LOUT,'(1X,7E10.3)')Q2,E,STOT,STOTA,ETOTA,STOTP,ZERO
+cC WRITE(LOUT,'(1X,7E10.3)')Q2,E,STOT,ETOT,SIN,EIN,SDIR
+cC WRITE(LOUT,'(1X,7E10.3)')Q2,E,STOT,ETOT,SIN,EIN,STOT0
+c WRITE(LOUT,'(1X,6E10.3)')Q2,E,STOT,ETOT,SIN,EIN
+c ENDIF
+ 2 CONTINUE
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===testxs=============================================================*
+*
+CDECK ID>, DT_TESTXS
+ SUBROUTINE DT_TESTXS
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION XSTOT(26,2),XSELA(26,2)
+
+ OPEN(10,FILE='testxs_ptot.out',STATUS='UNKNOWN')
+ OPEN(11,FILE='testxs_pela.out',STATUS='UNKNOWN')
+ OPEN(12,FILE='testxs_ntot.out',STATUS='UNKNOWN')
+ OPEN(13,FILE='testxs_nela.out',STATUS='UNKNOWN')
+ DUMECM = 0.0D0
+ PLABL = 0.01D0
+ PLABH = 10000.0D0
+ NBINS = 120
+ APLABL = LOG10(PLABL)
+ APLABH = LOG10(PLABH)
+ ADPLAB = (APLABH-APLABL)/DBLE(NBINS)
+ DO 1 I=1,NBINS+1
+ ADP = APLABL+DBLE(I-1)*ADPLAB
+ P = 10.0D0**ADP
+ DO 2 J=1,26
+ CALL DT_XSHN(J,1,P,DUMECM,XSTOT(J,1),XSELA(J,1))
+ CALL DT_XSHN(J,8,P,DUMECM,XSTOT(J,2),XSELA(J,2))
+ 2 CONTINUE
+ WRITE(10,1000) P,(XSTOT(K,1),K=1,26)
+ WRITE(11,1000) P,(XSELA(K,1),K=1,26)
+ WRITE(12,1000) P,(XSTOT(K,2),K=1,26)
+ WRITE(13,1000) P,(XSELA(K,2),K=1,26)
+ 1 CONTINUE
+ 1000 FORMAT(F8.3,26F9.3)
+
+ RETURN
+ END
+************************************************************************
+* *
+* DTUNUC 2.0: library routines *
+* processed by S. Roesler, 6.5.95 *
+* *
+************************************************************************
+*
+* 1) Handling of parton momenta
+* SUBROUTINE MASHEL
+* SUBROUTINE DFERMI
+*
+* 2) Handling of parton flavors and particle indices
+* INTEGER FUNCTION IPDG2B
+* INTEGER FUNCTION IB2PDG
+* INTEGER FUNCTION IQUARK
+* INTEGER FUNCTION IBJQUA
+* INTEGER FUNCTION ICIHAD
+* INTEGER FUNCTION IPDGHA
+* INTEGER FUNCTION MCHAD
+* SUBROUTINE FLAHAD
+*
+* 3) Energy-momentum and quantum number conservation check routines
+* SUBROUTINE EMC1
+* SUBROUTINE EMC2
+* SUBROUTINE EVTEMC
+* SUBROUTINE EVTFLC
+* SUBROUTINE EVTCHG
+*
+* 4) Transformations
+* SUBROUTINE LTINI
+* SUBROUTINE LTRANS
+* SUBROUTINE LTNUC
+* SUBROUTINE DALTRA
+* SUBROUTINE DTRAFO
+* SUBROUTINE STTRAN
+* SUBROUTINE MYTRAN
+* SUBROUTINE LT2LAO
+* SUBROUTINE LT2LAB
+*
+* 5) Sampling from distributions
+* INTEGER FUNCTION NPOISS
+* DOUBLE PRECISION FUNCTION SAMPXB
+* DOUBLE PRECISION FUNCTION SAMPEX
+* DOUBLE PRECISION FUNCTION SAMSQX
+* DOUBLE PRECISION FUNCTION BETREJ
+* DOUBLE PRECISION FUNCTION DGAMRN
+* DOUBLE PRECISION FUNCTION DBETAR
+* SUBROUTINE RANNOR
+* SUBROUTINE DPOLI
+* SUBROUTINE DSFECF
+* SUBROUTINE RACO
+*
+* 6) Special functions, algorithms and service routines
+* DOUBLE PRECISION FUNCTION YLAMB
+* SUBROUTINE SORT
+* SUBROUTINE SORT1
+* SUBROUTINE DT_XTIME
+*
+* 7) Random number generator package
+* DOUBLE PRECISION FUNCTION DT_RNDM
+* SUBROUTINE DT_RNDMST
+* SUBROUTINE DT_RNDMIN
+* SUBROUTINE DT_RNDMOU
+* SUBROUTINE DT_RNDMTE
+*
+************************************************************************
+* *
+* 1) Handling of parton momenta *
+* *
+************************************************************************
+*
+*===mashel=============================================================*
+*
+CDECK ID>, DT_MASHEL
+ SUBROUTINE DT_MASHEL(PA1,PA2,XM1,XM2,P1,P2,IREJ)
+
+************************************************************************
+* *
+* rescaling of momenta of two partons to put both *
+* on mass shell *
+* *
+* input: PA1,PA2 input momentum vectors *
+* XM1,2 desired masses of particles afterwards *
+* P1,P2 changed momentum vectors *
+* *
+* The original version is written by R. Engel. *
+* This version dated 12.12.94 is modified by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ONE=1.0D0,ZERO=0.0D0)
+
+ DIMENSION PA1(4),PA2(4),P1(4),P2(4)
+
+ IREJ = 0
+
+* Lorentz transformation into system CMS
+ PX = PA1(1)+PA2(1)
+ PY = PA1(2)+PA2(2)
+ PZ = PA1(3)+PA2(3)
+ EE = PA1(4)+PA2(4)
+ XPTOT = SQRT(PX**2+PY**2+PZ**2)
+ XMS = (EE-XPTOT)*(EE+XPTOT)
+ IF(XMS.LT.(XM1+XM2)**2) THEN
+C WRITE(LOUT,'(3E12.4)')XMS,XM1,XM2
+ GOTO 9999
+ ENDIF
+ XMS = SQRT(XMS)
+ BGX = PX/XMS
+ BGY = PY/XMS
+ BGZ = PZ/XMS
+ GAM = EE/XMS
+ CALL DT_DALTRA(GAM,-BGX,-BGY,-BGZ,PA1(1),PA1(2),PA1(3),
+ & PA1(4),PTOT1,P1(1),P1(2),P1(3),P1(4))
+* rotation angles
+ COD = P1(3)/PTOT1
+C SID = SQRT((ONE-COD)*(ONE+COD))
+ PPT = SQRT(P1(1)**2+P1(2)**2)
+ SID = PPT/PTOT1
+ COF = ONE
+ SIF = ZERO
+ IF(PTOT1*SID.GT.TINY10) THEN
+ COF = P1(1)/(SID*PTOT1)
+ SIF = P1(2)/(SID*PTOT1)
+ ANORF = SQRT(COF*COF+SIF*SIF)
+ COF = COF/ANORF
+ SIF = SIF/ANORF
+ ENDIF
+* new CM momentum and energies (for masses XM1,XM2)
+ XM12 = SIGN(XM1**2,XM1)
+ XM22 = SIGN(XM2**2,XM2)
+ SS = XMS**2
+ PCMP = DT_YLAMB(SS,XM12,XM22)/(2.D0*XMS)
+ EE1 = SQRT(XM12+PCMP**2)
+ EE2 = XMS-EE1
+* back rotation
+ MODE = 1
+ CALL DT_MYTRAN(MODE,ZERO,ZERO,PCMP,COD,SID,COF,SIF,XX,YY,ZZ)
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,XX,YY,ZZ,EE1,
+ & PTOT1,P1(1),P1(2),P1(3),P1(4))
+ CALL DT_DALTRA(GAM,BGX,BGY,BGZ,-XX,-YY,-ZZ,EE2,
+ & PTOT2,P2(1),P2(2),P2(3),P2(4))
+* check consistency
+ DEL = XMS*0.0001D0
+ IF (ABS(PX-P1(1)-P2(1)).GT.DEL) THEN
+ IDEV = 1
+ ELSEIF (ABS(PY-P1(2)-P2(2)).GT.DEL) THEN
+ IDEV = 2
+ ELSEIF (ABS(PZ-P1(3)-P2(3)).GT.DEL) THEN
+ IDEV = 3
+ ELSEIF (ABS(EE-P1(4)-P2(4)).GT.DEL) THEN
+ IDEV = 4
+ ELSE
+ IDEV = 0
+ ENDIF
+ IF (IDEV.NE.0) THEN
+ WRITE(LOUT,'(/1X,A,I3)')
+ & 'MASHEL: inconsistent transformation',IDEV
+ WRITE(LOUT,'(1X,A)') 'MASHEL: input momenta/masses:'
+ WRITE(LOUT,'(1X,5E12.5)') (PA1(K),K=1,4),XM1
+ WRITE(LOUT,'(1X,5E12.5)') (PA2(K),K=1,4),XM2
+ WRITE(LOUT,'(1X,A)') 'MASHEL: output momenta:'
+ WRITE(LOUT,'(5X,4E12.5)') (P1(K),K=1,4)
+ WRITE(LOUT,'(5X,4E12.5)') (P2(K),K=1,4)
+ ENDIF
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===dfermi=============================================================*
+*
+CDECK ID>, DT_DFERMI
+ SUBROUTINE DT_DFERMI(GPART)
+
+************************************************************************
+* Find largest of three random numbers. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION G(3)
+
+ DO 10 I=1,3
+ G(I)=DT_RNDM(GPART)
+ 10 CONTINUE
+ IF (G(3).LT.G(2)) GOTO 40
+ IF (G(3).LT.G(1)) GOTO 30
+ GPART = G(3)
+ 20 RETURN
+ 30 GPART = G(1)
+ GOTO 20
+ 40 IF (G(2).LT.G(1)) GOTO 30
+ GPART = G(2)
+ GOTO 20
+
+ END
+
+************************************************************************
+* *
+* 2) Handling of parton flavors and particle indices *
+* *
+************************************************************************
+*
+*===ipdg2b=============================================================*
+*
+CDECK ID>, IDT_IPDG2B
+ INTEGER FUNCTION IDT_IPDG2B(ID,NN,MODE)
+
+************************************************************************
+* *
+* conversion of quark numbering scheme *
+* *
+* input: PDG parton numbering *
+* for diquarks: NN number of the constituent quark *
+* (e.g. ID=2301,NN=1 -> ICONV2=1) *
+* *
+* output: BAMJET particle codes *
+* 1 u 7 a-u (MODE=1) -1 a-u (MODE=2) *
+* 2 d 8 a-d -2 a-d *
+* 3 s 9 a-s -3 a-s *
+* 4 c 10 a-c -4 a-c *
+* *
+* This is a modified version of ICONV2 written by R. Engel. *
+* This version dated 13.12.94 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ IDA = ABS(ID)
+* diquarks
+ IF (IDA.GT.6) THEN
+ KF = 3
+ IF (IDA.GE.1000) KF = 4
+ IDA = IDA/(10**(KF-NN))
+ IDA = MOD(IDA,10)
+ ENDIF
+* exchange up and dn quarks
+ IF (IDA.EQ.1) THEN
+ IDA = 2
+ ELSEIF (IDA.EQ.2) THEN
+ IDA = 1
+ ENDIF
+* antiquarks
+ IF (ID.LT.0) THEN
+ IF (MODE.EQ.1) THEN
+ IDA = IDA+6
+ ELSE
+ IDA = -IDA
+ ENDIF
+ ENDIF
+ IDT_IPDG2B = IDA
+
+ RETURN
+ END
+*
+*===ib2pdg=============================================================*
+*
+CDECK ID>, IDT_IB2PDG
+ INTEGER FUNCTION IDT_IB2PDG(ID1,ID2,MODE)
+
+************************************************************************
+* *
+* conversion of quark numbering scheme *
+* *
+* input: BAMJET particle codes *
+* 1 u 7 a-u (MODE=1) -1 a-u (MODE=2) *
+* 2 d 8 a-d -2 a-d *
+* 3 s 9 a-s -3 a-s *
+* 4 c 10 a-c -4 a-c *
+* *
+* output: PDG parton numbering *
+* *
+* This version dated 13.12.94 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ DIMENSION IHKKQ(-6:6),IHKKQQ(-3:3,-3:3)
+ DATA IHKKQ/-6,-5,-4,-3,-1,-2,0,2,1,3,4,5,6/
+ DATA IHKKQQ/-3303,-3103,-3203,0,0,0,0, -3103,-1103,-2103,0,0,0,0,
+ &-3203,-2103,-2203,0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,2203,2103,3203,
+ &0,0,0,0,2103,1103,3103, 0,0,0,0,3203,3103,3303/
+
+ IDA = ID1
+ IDB = ID2
+ IF (MODE.EQ.1) THEN
+ IF (ID1.GT.6) IDA = -(ID1-6)
+ IF (ID2.GT.6) IDB = -(ID2-6)
+ ENDIF
+ IF (ID2.EQ.0) THEN
+ IDT_IB2PDG = IHKKQ(IDA)
+ ELSE
+ IDT_IB2PDG = IHKKQQ(IDA,IDB)
+ ENDIF
+
+ RETURN
+ END
+*
+*===ipdgqu=============================================================*
+*
+CDECK ID>, IDT_IQUARK
+ INTEGER FUNCTION IDT_IQUARK(K,IDBAMJ)
+
+************************************************************************
+* *
+* quark contents according to PDG conventions *
+* (random selection in case of quark mixing) *
+* *
+* input: IDBAMJ BAMJET particle code *
+* K 1..3 quark number *
+* *
+* output: 1 d (anti --> neg.) *
+* 2 u *
+* 3 s *
+* 4 c *
+* *
+* This version written by R. Engel. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ IQ = IDT_IBJQUA(K,IDBAMJ)
+* quark-antiquark
+ IF (IQ.GT.6) THEN
+ IQ = 6-IQ
+ ENDIF
+* exchange of up and down
+ IF (ABS(IQ).EQ.1) THEN
+ IQ = SIGN(2,IQ)
+ ELSEIF (ABS(IQ).EQ.2) THEN
+ IQ = SIGN(1,IQ)
+ ENDIF
+ IDT_IQUARK = IQ
+
+ RETURN
+ END
+*
+*===ibamq==============================================================*
+*
+CDECK ID>, IDT_IBJQUA
+ INTEGER FUNCTION IDT_IBJQUA(K,IDBAMJ)
+
+************************************************************************
+* *
+* quark contents according to BAMJET conventions *
+* (random selection in case of quark mixing) *
+* *
+* input: IDBAMJ BAMJET particle code *
+* K 1..3 quark number *
+* *
+* output: 1 u 7 u bar *
+* 2 d 8 d bar *
+* 3 s 9 s bar *
+* 4 c 10 c bar *
+* *
+* This version written by R. Engel. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION ITAB(3,210)
+ DATA ((ITAB(I,K),I=1,3),K=1,30) /
+ & 1, 1, 2, 7, 7, 8, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 1, 2, 2, 7, 8, 8,
+*sr 10.1.94
+C & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 3, 8, 0,
+*
+ & 1, 8, 0, 2, 7, 0, 1, 9, 0,
+*sr 10.1.94
+C & 3, 7, 0, 0, 0, 0, 0, 0, 0,
+ & 3, 7, 0, 3, 1, 2, 9, 7, 8,
+*sr 10.1.94
+C & 0, 0, 0, 2, 2, 3, 1, 1, 3,
+ & 2, 9, 0, 2, 2, 3, 1, 1, 3,
+*
+ & 1, 2, 3, 201,202, 0, 2, 9, 0,
+ & 3, 8, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0 /
+ DATA ((ITAB(I,K),I=1,3),K=31,60) /
+ & 3, 9, 0, 1, 8, 0, 203,204, 0,
+ & 2, 7, 0, 0, 0, 0, 1, 9, 0,
+ & 2, 9, 0, 3, 7, 0, 3, 8, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 1, 1, 1, 1, 1, 2,
+ & 1, 2, 2, 2, 2, 2, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0 /
+ DATA ((ITAB(I,K),I=1,3),K=61,90) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 7, 7, 7, 7, 7, 8, 7, 8, 8,
+ & 8, 8, 8, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0 /
+ DATA ((ITAB(I,K),I=1,3),K=91,120) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 3, 9, 0,
+ & 1, 3, 3, 2, 3, 3, 7, 7, 9,
+ & 7, 8, 9, 8, 8, 9, 7, 9, 9,
+ & 8, 9, 9, 1, 1, 3, 1, 2, 3,
+ & 2, 2, 3, 1, 3, 3, 2, 3, 3,
+ & 3, 3, 3, 7, 7, 9, 7, 8, 9,
+ & 8, 8, 9, 7, 9, 9, 8, 9, 9,
+ & 9, 9, 9, 4, 7, 0, 4, 8, 0,
+ & 2, 10, 0, 1, 10, 0, 4, 9, 0 /
+ DATA ((ITAB(I,K),I=1,3),K=121,150) /
+ & 3, 10, 0, 4, 10, 0, 4, 7, 0,
+ & 4, 8, 0, 2, 10, 0, 1, 10, 0,
+ & 4, 9, 0, 3, 10, 0, 4, 10, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 1, 2, 4, 1, 3, 4,
+ & 2, 3, 4, 1, 1, 4, 0, 0, 0,
+ & 2, 2, 4, 0, 0, 0, 0, 0, 0,
+ & 3, 3, 4, 1, 4, 4, 2, 4, 4,
+ & 3, 4, 4, 7, 8, 10, 7, 9, 10 /
+ DATA ((ITAB(I,K),I=1,3),K=151,180) /
+ & 8, 9, 10, 7, 7, 10, 0, 0, 0,
+ & 8, 8, 10, 0, 0, 0, 0, 0, 0,
+ & 9, 9, 10, 7, 10, 10, 8, 10, 10,
+ & 9, 10, 10, 1, 1, 4, 1, 2, 4,
+ & 2, 2, 4, 1, 3, 4, 2, 3, 4,
+ & 3, 3, 4, 1, 4, 4, 2, 4, 4,
+ & 3, 4, 4, 4, 4, 4, 7, 7, 10,
+ & 7, 8, 10, 8, 8, 10, 7, 9, 10,
+ & 8, 9, 10, 9, 9, 10, 7, 10, 10,
+ & 8, 10, 10, 9, 10, 10, 10, 10, 10 /
+ DATA ((ITAB(I,K),I=1,3),K=181,210) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 1, 7, 0,
+ & 2, 8, 0, 1, 7, 0, 2, 8, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0 /
+ DATA IDOLD /0/
+
+ ONE = 1.0D0
+ IF (ITAB(1,IDBAMJ).LE.200) THEN
+ ID = ITAB(K,IDBAMJ)
+ ELSE
+ IF(IDOLD.NE.IDBAMJ) THEN
+ IT = AINT((ITAB(2,IDBAMJ)-ITAB(1,IDBAMJ)+0.999999D0)*
+ & DT_RNDM(ONE)+ITAB(1,IDBAMJ))
+ ELSE
+ IDOLD = 0
+ ENDIF
+ ID = ITAB(K,IT)
+ ENDIF
+ IDOLD = IDBAMJ
+ IDT_IBJQUA = ID
+
+ RETURN
+ END
+*
+*===icihad=============================================================*
+*
+CDECK ID>, IDT_ICIHAD
+ INTEGER FUNCTION IDT_ICIHAD(MCIND)
+
+************************************************************************
+* Conversion of particle index PDG proposal --> BAMJET-index scheme *
+* This is a completely new version dated 25.10.95. *
+* Renamed to be not in conflict with the modified PHOJET-version *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* hadron index conversion (BAMJET <--> PDG)
+ COMMON /DTHAIC/ IPDG2(2,7),IBAM2(2,7),IPDG3(2,22),IBAM3(2,22),
+ & IPDG4(2,29),IBAM4(2,29),IPDG5(2,19),IBAM5(2,19),
+ & IAMCIN(210)
+
+ IDT_ICIHAD = 0
+ KPDG = ABS(MCIND)
+ IF ((KPDG.EQ.0).OR.(KPDG.GT.70000)) RETURN
+ IF (MCIND.LT.0) THEN
+ JSIGN = 1
+ ELSE
+ JSIGN = 2
+ ENDIF
+ IF (KPDG.GE.10000) THEN
+ DO 1 I=1,19
+ IDT_ICIHAD = IBAM5(JSIGN,I)
+ IF (IPDG5(JSIGN,I).EQ.MCIND) GOTO 5
+ IDT_ICIHAD = 0
+ 1 CONTINUE
+ ELSEIF (KPDG.GE.1000) THEN
+ DO 2 I=1,29
+ IDT_ICIHAD = IBAM4(JSIGN,I)
+ IF (IPDG4(JSIGN,I).EQ.MCIND) GOTO 5
+ IDT_ICIHAD = 0
+ 2 CONTINUE
+ ELSEIF (KPDG.GE.100) THEN
+ DO 3 I=1,22
+ IDT_ICIHAD = IBAM3(JSIGN,I)
+ IF (IPDG3(JSIGN,I).EQ.MCIND) GOTO 5
+ IDT_ICIHAD = 0
+ 3 CONTINUE
+ ELSEIF (KPDG.GE.10) THEN
+ DO 4 I=1,7
+ IDT_ICIHAD = IBAM2(JSIGN,I)
+ IF (IPDG2(JSIGN,I).EQ.MCIND) GOTO 5
+ IDT_ICIHAD = 0
+ 4 CONTINUE
+ ENDIF
+ 5 CONTINUE
+
+ RETURN
+ END
+*
+*===ipdgha=============================================================*
+*
+CDECK ID>, IDT_IPDGHA
+ INTEGER FUNCTION IDT_IPDGHA(MCIND)
+
+************************************************************************
+* Conversion of particle index BAMJET-index scheme --> PDG proposal *
+* Adopted from the original by S. Roesler. This version dated 12.5.95 *
+* Renamed to be not in conflict with the modified PHOJET-version *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* hadron index conversion (BAMJET <--> PDG)
+ COMMON /DTHAIC/ IPDG2(2,7),IBAM2(2,7),IPDG3(2,22),IBAM3(2,22),
+ & IPDG4(2,29),IBAM4(2,29),IPDG5(2,19),IBAM5(2,19),
+ & IAMCIN(210)
+
+ IDT_IPDGHA = IAMCIN(MCIND)
+
+ RETURN
+ END
+*
+*===flahad=============================================================*
+*
+CDECK ID>, DT_FLAHAD
+ SUBROUTINE DT_FLAHAD(ID,IF1,IF2,IF3)
+
+************************************************************************
+* sampling of FLAvor composition for HADrons/photons *
+* ID BAMJET-id of hadron *
+* IF1,2,3 flavor content *
+* (u,d,s: 1,2,3; au,ad,as: -1,-1,-3) *
+* Note: - u,d numbering as in BAMJET *
+* - ID .le. 30 !! *
+* This version dated 12.03.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* auxiliary common for reggeon exchange (DTUNUC 1.x)
+ COMMON /DTQUAR/ IQECHR(-6:6),IQBCHR(-6:6),IQICHR(-6:6),
+ & IQSCHR(-6:6),IQCCHR(-6:6),IQUCHR(-6:6),
+ & IQTCHR(-6:6),MQUARK(3,39)
+
+ DIMENSION JSEL(3,6)
+ DATA JSEL/ 1,2,3, 2,3,1, 3,1,2, 1,3,2, 2,1,3, 3,2,1/
+
+ ONE = 1.0D0
+ IF (ID.EQ.7) THEN
+* photon (charge dependent flavour sampling)
+ K = INT(DT_RNDM(ONE)*6.D0+1.D0)
+ IF (K.LE.4) THEN
+ IF1 = 2
+ IF2 = -2
+ ELSE IF(K.EQ.5) THEN
+ IF1 = 1
+ IF2 = -1
+ ELSE
+ IF1 = 3
+ IF2 = -3
+ ENDIF
+ IF(DT_RNDM(ONE).LT.0.5D0) THEN
+ K = IF1
+ IF1 = IF2
+ IF2 = K
+ ENDIF
+ IF3 = 0
+ ELSE
+* hadron
+ IX = INT(1.0D0+5.99999D0*DT_RNDM(ONE))
+ IF1 = MQUARK(JSEL(1,IX),ID)
+ IF2 = MQUARK(JSEL(2,IX),ID)
+ IF3 = MQUARK(JSEL(3,IX),ID)
+ IF ((IF1.EQ.0).AND.(IF3.NE.0)) THEN
+ IF1 = IF3
+ IF3 = 0
+ ELSEIF ((IF2.EQ.0).AND.(IF3.NE.0)) THEN
+ IF2 = IF3
+ IF3 = 0
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+*
+*===mchad==============================================================*
+*
+CDECK ID>, IDT_MCHAD
+ INTEGER FUNCTION IDT_MCHAD(ITDTU)
+
+************************************************************************
+* Conversion of particle index BAMJET-index scheme --> HADRIN index s. *
+* Adopted from the original by S. Roesler. This version dated 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION ITRANS(210)
+ DATA ITRANS / 1, 2, -1, -1, -1, -1, -1, 8, 9, -1, -1, 24, 13, 14,
+ &15, 16, 8, 9, 25, 8, 1, 8, 23, 24, 25, -1, -1, -1, -1, -1, 23, 13,
+ &23, 14, 23, 15, 24, 16, 25, 15, 24, 16, 25, 15, 24, 16, 25, 1, 8,
+ &8, 8, 1, 1, 1, 8, 8, 1, 1, 8, 8, 1, 8, 1, 8, 1, 8, 2, 2, 9, 9, 2,
+ &2, 9, 9, 2, 9, 1, 13, 23, 14, 1, 1, 8, 8, 1, 1, 23, 14, 1, 8, 1,
+ &8, 1, 8, 23, 23, 8, 8, 2, 9, 9, 9, 9, 1, 8, 8, 8, 8, 8, 2, 9, 9,
+ &9, 9, 9, 85*- 1,7*-1,1,8,-1/
+
+ IDT_MCHAD = ITRANS(ITDTU)
+
+ RETURN
+ END
+
+************************************************************************
+* *
+* 3) Energy-momentum and quantum number conservation check routines *
+* *
+************************************************************************
+*
+*===emc1===============================================================*
+*
+CDECK ID>, DT_EMC1
+ SUBROUTINE DT_EMC1(PP1,PP2,PT1,PT2,MODE,IPOS,IREJ)
+
+************************************************************************
+* This version dated 15.12.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10)
+
+ DIMENSION PP1(4),PP2(4),PT1(4),PT2(4)
+
+ IREJ = 0
+
+ IF ((MODE.EQ.0).OR.(ABS(MODE).GT.3))
+ & WRITE(LOUT,'(1X,A,I6)')'EMC1: not supported MODE ',MODE
+
+ IF ((MODE.GT.0).AND.(MODE.LT.3)) THEN
+ IF (MODE.EQ.1) THEN
+ CALL DT_EVTEMC(PP1(1),PP1(2),PP1(3),PP1(4),1,IDUM,IDUM)
+ ELSEIF (MODE.EQ.2) THEN
+ CALL DT_EVTEMC(PP1(1),PP1(2),PP1(3),PP1(4),2,IDUM,IDUM)
+ ENDIF
+ CALL DT_EVTEMC(PP2(1),PP2(2),PP2(3),PP2(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(PT1(1),PT1(2),PT1(3),PT1(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(PT2(1),PT2(2),PT2(3),PT2(4),2,IDUM,IDUM)
+ ELSEIF (MODE.LT.0) THEN
+ IF (MODE.EQ.-1) THEN
+ CALL DT_EVTEMC(-PP1(1),-PP1(2),-PP1(3),-PP1(4),1,IDUM,IDUM)
+ ELSEIF (MODE.EQ.-2) THEN
+ CALL DT_EVTEMC(-PP1(1),-PP1(2),-PP1(3),-PP1(4),2,IDUM,IDUM)
+ ENDIF
+ CALL DT_EVTEMC(-PP2(1),-PP2(2),-PP2(3),-PP2(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(-PT1(1),-PT1(2),-PT1(3),-PT1(4),2,IDUM,IDUM)
+ CALL DT_EVTEMC(-PT2(1),-PT2(2),-PT2(3),-PT2(4),2,IDUM,IDUM)
+ ENDIF
+
+ IF (ABS(MODE).EQ.3) THEN
+ CALL DT_EVTEMC(DUM,DUM,DUM,DUM,3,IPOS,IREJ1)
+ IF (IREJ1.NE.0) GOTO 9999
+ ENDIF
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===emc2===============================================================*
+*
+CDECK ID>, DT_EMC2
+ SUBROUTINE DT_EMC2(IP1,IP2,IP3,IP4,IP5,MP,IN1,IN2,IN3,IN4,IN5,MN,
+ & MODE,IPOS,IREJ)
+
+************************************************************************
+* MODE = 1 energy-momentum cons. check *
+* = 2 flavor-cons. check *
+* = 3 energy-momentum & flavor cons. check *
+* = 4 energy-momentum & charge cons. check *
+* = 5 energy-momentum & flavor & charge cons. check *
+* This version dated 16.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,ZERO=0.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ IREJ = 0
+ IREJ1 = 0
+ IREJ2 = 0
+ IREJ3 = 0
+
+ IF ((MODE.EQ.1).OR.(MODE.EQ.3).OR.(MODE.EQ.4).OR.(MODE.EQ.5))
+ & CALL DT_EVTEMC(ZERO,ZERO,ZERO,ZERO,1,IDUM,IDUM)
+ IF ((MODE.EQ.2).OR.(MODE.EQ.3).OR.(MODE.EQ.5))
+ & CALL DT_EVTFLC(0,IDUM,1,IDUM,IDUM)
+ IF ((MODE.EQ.4).OR.(MODE.EQ.5)) CALL DT_EVTCHG(IDUM,1,IDUM,IDUM)
+ DO 1 I=1,NHKK
+ IF ((ISTHKK(I).EQ.IP1).OR.(ISTHKK(I).EQ.IP2).OR.
+ & (ISTHKK(I).EQ.IP3).OR.(ISTHKK(I).EQ.IP4).OR.
+ & (ISTHKK(I).EQ.IP5)) THEN
+ IF ((MODE.EQ.1).OR.(MODE.EQ.3).OR.(MODE.EQ.4)
+ & .OR.(MODE.EQ.5))
+ & CALL DT_EVTEMC(PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I),
+ & 2,IDUM,IDUM)
+ IF ((MODE.EQ.2).OR.(MODE.EQ.3).OR.(MODE.EQ.5))
+ & CALL DT_EVTFLC(IDHKK(I),MP,2,IDUM,IDUM)
+ IF ((MODE.EQ.4).OR.(MODE.EQ.5))
+ & CALL DT_EVTCHG(IDHKK(I),2,IDUM,IDUM)
+ ENDIF
+ IF ((ISTHKK(I).EQ.IN1).OR.(ISTHKK(I).EQ.IN2).OR.
+ & (ISTHKK(I).EQ.IN3).OR.(ISTHKK(I).EQ.IN4).OR.
+ & (ISTHKK(I).EQ.IN5)) THEN
+ IF ((MODE.EQ.1).OR.(MODE.EQ.3).OR.(MODE.EQ.4)
+ & .OR.(MODE.EQ.5))
+ & CALL DT_EVTEMC(-PHKK(1,I),-PHKK(2,I),-PHKK(3,I),-PHKK(4,I),
+ & 2,IDUM,IDUM)
+ IF ((MODE.EQ.2).OR.(MODE.EQ.3).OR.(MODE.EQ.5))
+ & CALL DT_EVTFLC(IDHKK(I),MN,-2,IDUM,IDUM)
+ IF ((MODE.EQ.4).OR.(MODE.EQ.5))
+ & CALL DT_EVTCHG(IDHKK(I),-2,IDUM,IDUM)
+ ENDIF
+ 1 CONTINUE
+ IF ((MODE.EQ.1).OR.(MODE.EQ.3).OR.(MODE.EQ.4).OR.(MODE.EQ.5))
+ & CALL DT_EVTEMC(DUM,DUM,DUM,DUM,5,IPOS,IREJ1)
+ IF ((MODE.EQ.2).OR.(MODE.EQ.3).OR.(MODE.EQ.5))
+ & CALL DT_EVTFLC(0,IDUM,3,IPOS,IREJ2)
+ IF ((MODE.EQ.4).OR.(MODE.EQ.5)) CALL DT_EVTCHG(IDUM,3,IPOS,IREJ3)
+ IF ((IREJ1.NE.0).OR.(IREJ2.NE.0).OR.(IREJ3.NE.0)) GOTO 9999
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===evtemc=============================================================*
+*
+CDECK ID>, DT_EVTEMC
+ SUBROUTINE DT_EVTEMC(PXIO,PYIO,PZIO,EIO,IMODE,IPOS,IREJ)
+
+************************************************************************
+* This version dated 13.12.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY1=1.0D-1,TINY2=1.0D-2,TINY4=1.0D-4,TINY10=1.0D-10,
+ & ZERO=0.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ IREJ = 0
+
+ MODE = IMODE
+ CHKLEV = TINY10
+ IF (MODE.EQ.4) THEN
+ CHKLEV = TINY2
+ MODE = 3
+ ELSEIF (MODE.EQ.5) THEN
+ CHKLEV = TINY1
+ MODE = 3
+ ELSEIF (MODE.EQ.-1) THEN
+ CHKLEV = EIO
+ MODE = 3
+ ENDIF
+
+ IF (ABS(MODE).EQ.3) THEN
+ PXDEV = PX
+ PYDEV = PY
+ PZDEV = PZ
+ EDEV = E
+ IF ((IFRAG(1).EQ.2).AND.(CHKLEV.LT.TINY4)) CHKLEV = TINY4
+ IF ((ABS(PXDEV).GT.CHKLEV).OR.(ABS(PYDEV).GT.CHKLEV).OR.
+ & (ABS(PZDEV).GT.CHKLEV).OR.(ABS(EDEV).GT.CHKLEV)) THEN
+ IF (IOULEV(2).GT.0) WRITE(LOUT,'(1X,A,I4,A,I8,A,/,4G10.3)')
+ & 'EVTEMC: energy-momentum cons. failure at pos. ',IPOS,
+ & ' event ',NEVHKK,
+ & ' ! ',PXDEV,PYDEV,PZDEV,EDEV
+ PX = 0.0D0
+ PY = 0.0D0
+ PZ = 0.0D0
+ E = 0.0D0
+ GOTO 9999
+ ENDIF
+ PX = 0.0D0
+ PY = 0.0D0
+ PZ = 0.0D0
+ E = 0.0D0
+ RETURN
+ ENDIF
+
+ IF (MODE.EQ.1) THEN
+ PX = 0.0D0
+ PY = 0.0D0
+ PZ = 0.0D0
+ E = 0.0D0
+ ENDIF
+
+ PX = PX+PXIO
+ PY = PY+PYIO
+ PZ = PZ+PZIO
+ E = E+EIO
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===evtflc=============================================================*
+*
+CDECK ID>, DT_EVTFLC
+ SUBROUTINE DT_EVTFLC(ID,ID1,MODE,IPOS,IREJ)
+
+************************************************************************
+* Flavor conservation check. *
+* ID identity of particle *
+* ID1 = 1 ID for q,aq,qq,aqaq in PDG-numbering scheme *
+* = 2 ID for particle/resonance in BAMJET numbering scheme *
+* = 3 ID for particle/resonance in PDG numbering scheme *
+* MODE = 1 initialization and add ID *
+* =-1 initialization and subtract ID *
+* = 2 add ID *
+* =-2 subtract ID *
+* = 3 check flavor cons. *
+* IPOS flag to give position of call of EVTFLC to output *
+* unit in case of violation *
+* This version dated 10.01.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10)
+
+ IREJ = 0
+
+ IF (MODE.EQ.3) THEN
+ IF (IFL.NE.0) THEN
+ WRITE(LOUT,'(1X,A,I3,A,I3)')
+ & 'EVTFLC: flavor-conservation failure at pos. ',IPOS,
+ & ' ! IFL = ',IFL
+ IFL = 0
+ GOTO 9999
+ ENDIF
+ IFL = 0
+ RETURN
+ ENDIF
+
+ IF (MODE.EQ.1) IFL = 0
+ IF (ID.EQ.0) RETURN
+
+ IF (ID1.EQ.1) THEN
+ IDD = ABS(ID)
+ NQ = 1
+ IF ((IDD.GE.100).AND.(IDD.LT.1000)) NQ = 2
+ IF (IDD.GE.1000) NQ = 3
+ DO 1 I=1,NQ
+ IFBAM = IDT_IPDG2B(ID,I,2)
+ IF (ABS(IFBAM).EQ.1) THEN
+ IFBAM = SIGN(2,IFBAM)
+ ELSEIF (ABS(IFBAM).EQ.2) THEN
+ IFBAM = SIGN(1,IFBAM)
+ ENDIF
+ IF (MODE.GT.0) THEN
+ IFL = IFL+IFBAM
+ ELSE
+ IFL = IFL-IFBAM
+ ENDIF
+ 1 CONTINUE
+ RETURN
+ ENDIF
+
+ IDD = ID
+ IF (ID1.EQ.3) IDD = IDT_ICIHAD(ID)
+ IF ((ID1.EQ.2).OR.(ID1.EQ.3)) THEN
+ DO 2 I=1,3
+ IF (MODE.GT.0) THEN
+ IFL = IFL+IDT_IQUARK(I,IDD)
+ ELSE
+ IFL = IFL-IDT_IQUARK(I,IDD)
+ ENDIF
+ 2 CONTINUE
+ ENDIF
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+*
+*===evtchg=============================================================*
+*
+CDECK ID>, DT_EVTCHG
+ SUBROUTINE DT_EVTCHG(ID,MODE,IPOS,IREJ)
+
+************************************************************************
+* Charge conservation check. *
+* ID identity of particle (PDG-numbering scheme) *
+* MODE = 1 initialization *
+* =-2 subtract ID-charge *
+* = 2 add ID-charge *
+* = 3 check charge cons. *
+* IPOS flag to give position of call of EVTCHG to output *
+* unit in case of violation *
+* This version dated 10.01.95 is written by S. Roesler *
+* Last change: s.r. 21.01.01 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ IREJ = 0
+
+ IF (MODE.EQ.1) THEN
+ ICH = 0
+ IBAR = 0
+ RETURN
+ ENDIF
+
+ IF (MODE.EQ.3) THEN
+ IF ((ICH.NE.0).OR.(IBAR.NE.0)) THEN
+ WRITE(LOUT,'(1X,A,I3,A,2I3,A,I8)')
+ & 'EVTCHG: charge/baryo.-cons. failure at pos. ',IPOS,
+ & '! ICH/IBAR= ',ICH,IBAR,' event ',NEVHKK
+ ICH = 0
+ IBAR = 0
+ GOTO 9999
+ ENDIF
+ ICH = 0
+ IBAR = 0
+ RETURN
+ ENDIF
+
+ IF (ID.EQ.0) RETURN
+
+ IDD = IDT_ICIHAD(ID)
+* modification 21.1.01: use intrinsic phojet-functions to determine charge
+* and baryon number
+C IF (IDD.GT.0) THEN
+C IF (MODE.EQ.2) THEN
+C ICH = ICH+IICH(IDD)
+C IBAR = IBAR+IIBAR(IDD)
+C ELSEIF (MODE.EQ.-2) THEN
+C ICH = ICH-IICH(IDD)
+C IBAR = IBAR-IIBAR(IDD)
+C ENDIF
+C ELSE
+C WRITE(LOUT,'(1X,A,3I6)') 'EVTCHG: (IDD = 0 !), IDD,ID=',IDD,ID
+C CALL DT_EVTOUT(4)
+C STOP
+C ENDIF
+ IF (MODE.EQ.2) THEN
+ ICH = ICH+IPHO_CHR3(ID,1)/3
+ IBAR = IBAR+IPHO_BAR3(ID,1)/3
+ ELSEIF (MODE.EQ.-2) THEN
+ ICH = ICH-IPHO_CHR3(ID,1)/3
+ IBAR = IBAR-IPHO_BAR3(ID,1)/3
+ ENDIF
+
+ RETURN
+
+ 9999 CONTINUE
+ IREJ = 1
+ RETURN
+ END
+
+************************************************************************
+* *
+* 4) Transformations *
+* *
+************************************************************************
+*
+*===ltini==============================================================*
+*
+CDECK ID>, DT_LTINI
+ SUBROUTINE DT_LTINI(IDPR,IDTA,EPN0,PPN0,ECM0,MODE)
+
+************************************************************************
+* Initializations of Lorentz-transformations, calculation of Lorentz- *
+* parameters. *
+* This version dated 13.11.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY3=1.0D-3,
+ & ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0)
+
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+
+ Q2 = VIRT
+ IDP = IDPR
+ IF (MCGENE.NE.3) THEN
+* lepton-projectiles and PHOJET: initialize real photon instead
+ IF ((IDPR.EQ. 3).OR.(IDPR.EQ. 4).OR.
+ & (IDPR.EQ.10).OR.(IDPR.EQ.11).OR.
+ & (IDPR.EQ. 5).OR.(IDPR.EQ. 6)) THEN
+ IDP = 7
+ Q2 = ZERO
+ ENDIF
+ ENDIF
+ IDT = IDTA
+ EPN = EPN0
+ PPN = PPN0
+ ECM = ECM0
+ AMP = AAM(IDP)-SQRT(ABS(Q2))
+ AMT = AAM(IDT)
+ AMP2 = SIGN(AMP**2,AMP)
+ AMT2 = AMT**2
+ IF (ECM0.GT.ZERO) THEN
+ EPN = (ECM**2-AMP2-AMT2)/(TWO*AMT)
+ IF (AMP2.GT.ZERO) THEN
+ PPN = SQRT((EPN+AMP)*(EPN-AMP))
+ ELSE
+ PPN = SQRT(EPN**2-AMP2)
+ ENDIF
+ ELSE
+ IF ((EPN0.NE.ZERO).AND.(PPN0.EQ.ZERO)) THEN
+ IF (IDP.EQ.7) EPN = ABS(EPN)
+ IF (EPN.LT.ZERO) EPN = ABS(EPN)+AMP
+ IF (AMP2.GT.ZERO) THEN
+ PPN = SQRT((EPN+AMP)*(EPN-AMP))
+ ELSE
+ PPN = SQRT(EPN**2-AMP2)
+ ENDIF
+ ELSEIF ((PPN0.GT.ZERO).AND.(EPN0.EQ.ZERO)) THEN
+ IF (AMP2.GT.ZERO) THEN
+ EPN = PPN*SQRT(ONE+(AMP/PPN)**2)
+ ELSE
+ EPN = SQRT(PPN**2+AMP2)
+ ENDIF
+ ENDIF
+ ECM = SQRT(AMP2+AMT2+TWO*AMT*EPN)
+ ENDIF
+ UMO = ECM
+ EPROJ = EPN
+ PPROJ = PPN
+ IF (AMP2.GT.ZERO) THEN
+ ETARG = (ECM**2-AMP2-AMT2)/(TWO*AMP)
+ PTARG = -SQRT((ETARG+AMT)*(ETARG-AMT))
+ ELSE
+ ETARG = TINY10
+ PTARG = TINY10
+ ENDIF
+* photon-projectiles (get momentum in cm-frame for virtuality Q^2)
+ IF (IDP.EQ.7) THEN
+ PGAMM(1) = ZERO
+ PGAMM(2) = ZERO
+ AMGAM = AMP
+ AMGAM2 = AMP2
+ IF (ECM0.GT.ZERO) THEN
+ S = ECM0**2
+ ELSE
+ IF ((EPN0.NE.ZERO).AND.(PPN0.EQ.ZERO)) THEN
+ S = AMGAM2+AMT2+TWO*AMT*ABS(EPN0)
+ ELSEIF ((PPN0.GT.ZERO).AND.(EPN0.EQ.ZERO)) THEN
+ S = AMGAM2+AMT2+TWO*AMT*SQRT(PPN0**2+AMGAM2)
+ ENDIF
+ ENDIF
+ PGAMM(3) = SQRT( (S**2-TWO*AMGAM2*S-TWO*AMT2*S-TWO*AMGAM2*AMT2
+ & +AMGAM2**2+AMT2**2)/(4.0D0*S) )
+ PGAMM(4) = SQRT(AMGAM2+PGAMM(3)**2)
+ IF (MODE.EQ.1) THEN
+ PNUCL(1) = ZERO
+ PNUCL(2) = ZERO
+ PNUCL(3) = -PGAMM(3)
+ PNUCL(4) = SQRT(S)-PGAMM(4)
+ ENDIF
+ ENDIF
+ IF ((IDPR.EQ. 3).OR.(IDPR.EQ. 4).OR.
+ & (IDPR.EQ.10).OR.(IDPR.EQ.11)) THEN
+ PLEPT0(1) = ZERO
+ PLEPT0(2) = ZERO
+* neglect lepton masses
+C AMLPT2 = AAM(IDPR)**2
+ AMLPT2 = ZERO
+*
+ IF (ECM0.GT.ZERO) THEN
+ S = ECM0**2
+ ELSE
+ IF ((EPN0.NE.ZERO).AND.(PPN0.EQ.ZERO)) THEN
+ S = AMLPT2+AMT2+TWO*AMT*ABS(EPN0)
+ ELSEIF ((PPN0.GT.ZERO).AND.(EPN0.EQ.ZERO)) THEN
+ S = AMLPT2+AMT2+TWO*AMT*SQRT(PPN0**2+AMLPT2)
+ ENDIF
+ ENDIF
+ PLEPT0(3) = SQRT( (S**2-TWO*AMLPT2*S-TWO*AMT2*S-TWO*AMLPT2*AMT2
+ & +AMLPT2**2+AMT2**2)/(4.0D0*S) )
+ PLEPT0(4) = SQRT(AMLPT2+PLEPT0(3)**2)
+ PNUCL(1) = ZERO
+ PNUCL(2) = ZERO
+ PNUCL(3) = -PLEPT0(3)
+ PNUCL(4) = SQRT(S)-PLEPT0(4)
+ ENDIF
+* Lorentz-parameter for transformation Lab. - projectile rest system
+ IF ((IDP.EQ.7).OR.(AMP.LT.TINY10)) THEN
+ GALAB = TINY10
+ BGLAB = TINY10
+ BLAB = TINY10
+ ELSE
+ GALAB = EPROJ/AMP
+ BGLAB = PPROJ/AMP
+ BLAB = BGLAB/GALAB
+ ENDIF
+* Lorentz-parameter for transf. proj. rest sys. - nucl.-nucl. cms.
+ IF (IDP.EQ.7) THEN
+ GACMS(1) = TINY10
+ BGCMS(1) = TINY10
+ ELSE
+ GACMS(1) = (ETARG+AMP)/UMO
+ BGCMS(1) = PTARG/UMO
+ ENDIF
+* Lorentz-parameter for transformation Lab. - nucl.-nucl. cms.
+ GACMS(2) = (EPROJ+AMT)/UMO
+ BGCMS(2) = PPROJ/UMO
+ PPCM = GACMS(2)*PPROJ-BGCMS(2)*EPROJ
+
+ EPN0 = EPN
+ PPN0 = PPN
+ ECM0 = ECM
+
+ RETURN
+ END
+*
+*===ltrans=============================================================*
+*
+CDECK ID>, DT_LTRANS
+ SUBROUTINE DT_LTRANS(PXI,PYI,PZI,PEI,PXO,PYO,PZO,PEO,ID,MODE)
+
+************************************************************************
+* Lorentz-transformations. *
+* MODE = 1(-1) projectile rest syst. --> Lab (back) *
+* = 2(-2) projectile rest syst. --> nucl.-nucl.cms (back) *
+* = 3(-3) target rest syst. (=Lab)--> nucl.-nucl.cms (back) *
+* This version dated 01.11.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY3=1.0D-3,ZERO=0.0D0,TWO=2.0D0)
+
+ PARAMETER (SQTINF=1.0D+15)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ PXO = PXI
+ PYO = PYI
+ CALL DT_LTNUC(PZI,PEI,PZO,PEO,MODE)
+
+* check particle mass for consistency (numerical rounding errors)
+ PO = SQRT(PXO*PXO+PYO*PYO+PZO*PZO)
+ AMO2 = (PEO-PO)*(PEO+PO)
+ AMORQ2 = AAM(ID)**2
+ AMDIF2 = ABS(AMO2-AMORQ2)
+ IF ((AMDIF2.GT.TINY3).AND.(PEO.LT.SQTINF).AND.(PO.GT.ZERO)) THEN
+ DELTA = (AMORQ2-AMO2)/(TWO*(PEO+PO))
+ PEO = PEO+DELTA
+ PO1 = PO -DELTA
+ PXO = PXO*PO1/PO
+ PYO = PYO*PO1/PO
+ PZO = PZO*PO1/PO
+C WRITE(6,*) 'LTRANS corrected', AMDIF2,PZI,PEI,PZO,PEO,MODE,ID
+ ENDIF
+
+ RETURN
+ END
+*
+*===ltnuc==============================================================*
+*
+CDECK ID>, DT_LTNUC
+ SUBROUTINE DT_LTNUC(PIN,EIN,POUT,EOUT,MODE)
+
+************************************************************************
+* Lorentz-transformations. *
+* PIN longitudnal momentum (input) *
+* EIN energy (input) *
+* POUT transformed long. momentum (output) *
+* EOUT transformed energy (output) *
+* MODE = 1(-1) projectile rest syst. --> Lab (back) *
+* = 2(-2) projectile rest syst. --> nucl.-nucl.cms (back) *
+* = 3(-3) target rest syst. (=Lab)--> nucl.-nucl.cms (back) *
+* This version dated 01.11.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0)
+
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+
+ BDUM1 = ZERO
+ BDUM2 = ZERO
+ PDUM1 = ZERO
+ PDUM2 = ZERO
+ IF (ABS(MODE).EQ.1) THEN
+ BG = -SIGN(BGLAB,DBLE(MODE))
+ CALL DT_DALTRA(GALAB,BDUM1,BDUM2,-BG,PDUM1,PDUM2,PIN,EIN,
+ & DUM1,DUM2,DUM3,POUT,EOUT)
+ ELSEIF (ABS(MODE).EQ.2) THEN
+ BG = SIGN(BGCMS(1),DBLE(MODE))
+ CALL DT_DALTRA(GACMS(1),BDUM1,BDUM2,BG,PDUM1,PDUM2,PIN,EIN,
+ & DUM1,DUM2,DUM3,POUT,EOUT)
+ ELSEIF (ABS(MODE).EQ.3) THEN
+ BG = -SIGN(BGCMS(2),DBLE(MODE))
+ CALL DT_DALTRA(GACMS(2),BDUM1,BDUM2,BG,PDUM1,PDUM2,PIN,EIN,
+ & DUM1,DUM2,DUM3,POUT,EOUT)
+ ELSE
+ WRITE(LOUT,1000) MODE
+ 1000 FORMAT(1X,'LTNUC: not supported mode (MODE = ',I3,')')
+ EOUT = EIN
+ POUT = PIN
+ ENDIF
+
+ RETURN
+ END
+*
+*===daltra=============================================================*
+*
+CDECK ID>, DT_DALTRA
+ SUBROUTINE DT_DALTRA(GA,BGX,BGY,BGZ,PCX,PCY,PCZ,EC,P,PX,PY,PZ,E)
+
+************************************************************************
+* Arbitrary Lorentz-transformation. *
+* Adopted from the original by S. Roesler. This version dated 15.01.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ONE=1.0D0)
+
+ EP = PCX*BGX+PCY*BGY+PCZ*BGZ
+ PE = EP/(GA+ONE)+EC
+ PX = PCX+BGX*PE
+ PY = PCY+BGY*PE
+ PZ = PCZ+BGZ*PE
+ P = SQRT(PX*PX+PY*PY+PZ*PZ)
+ E = GA*EC+EP
+
+ RETURN
+ END
+*
+*====dtrafo============================================================*
+*
+CDECK ID>, DT_DTRAFO
+ SUBROUTINE DT_DTRAFO(GAM,BGAM,CX,CY,CZ,COD,COF,SIF,P,ECM,
+ & PL,CXL,CYL,CZL,EL)
+
+C LORENTZ TRANSFORMATION INTO THE LAB - SYSTEM
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ IF (ABS(COD).GT.1.0D0) COD = SIGN(1.0D0,COD)
+ SID = SQRT(1.D0-COD*COD)
+ PLX = P*SID*COF
+ PLY = P*SID*SIF
+ PCMZ = P*COD
+ PLZ = GAM*PCMZ+BGAM*ECM
+ PL = SQRT(PLX*PLX+PLY*PLY+PLZ*PLZ)
+ EL = GAM*ECM+BGAM*PCMZ
+C ROTATION INTO THE ORIGINAL DIRECTION
+ COZ = PLZ/PL
+ SIZ = SQRT(1.D0-COZ**2)
+ CALL DT_STTRAN(CX,CY,CZ,COZ,SIZ,SIF,COF,CXL,CYL,CZL)
+
+ RETURN
+ END
+*
+*====sttran============================================================*
+*
+CDECK ID>, DT_STTRAN
+ SUBROUTINE DT_STTRAN(XO,YO,ZO,CDE,SDE,SFE,CFE,X,Y,Z)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ DATA ANGLSQ/1.D-30/
+************************************************************************
+* VERSION BY J. RANFT *
+* LEIPZIG *
+* *
+* THIS IS A SUBROUTINE OF FLUKA TO GIVE NEW DIRECTION COSINES *
+* *
+* INPUT VARIABLES: *
+* XO,YO,ZO = ORIGINAL DIRECTION COSINES *
+* CDE,SDE = COSINE AND SINE OF THE POLAR (THETA) *
+* ANGLE OF "SCATTERING" *
+* SDE = SINE OF THE POLAR (THETA) ANGLE OF "SCATTERING" *
+* SFE,CFE = SINE AND COSINE OF THE AZIMUTHAL (PHI) ANGLE *
+* OF "SCATTERING" *
+* *
+* OUTPUT VARIABLES: *
+* X,Y,Z = NEW DIRECTION COSINES *
+* *
+* ROTATION OF COORDINATE SYSTEM (SEE CERN 64-47 ) *
+************************************************************************
+*
+*
+* Changed by A. Ferrari
+*
+* IF (ABS(XO)-0.0001D0) 1,1,2
+* 1 IF (ABS(YO)-0.0001D0) 3,3,2
+* 3 CONTINUE
+ A = XO**2 + YO**2
+ IF ( A .LT. ANGLSQ ) THEN
+ X=SDE*CFE
+ Y=SDE*SFE
+ Z=CDE*ZO
+ ELSE
+ XI=SDE*CFE
+ YI=SDE*SFE
+ ZI=CDE
+ A=SQRT(A)
+ X=-YO*XI/A-ZO*XO*YI/A+XO*ZI
+ Y=XO*XI/A-ZO*YO*YI/A+YO*ZI
+ Z=A*YI+ZO*ZI
+ ENDIF
+
+ RETURN
+ END
+*
+*===mytran=============================================================*
+*
+CDECK ID>, DT_MYTRAN
+ SUBROUTINE DT_MYTRAN(IMODE,XO,YO,ZO,CDE,SDE,CFE,SFE,X,Y,Z)
+
+************************************************************************
+* This subroutine rotates the coordinate frame *
+* a) theta around y *
+* b) phi around z if IMODE = 1 *
+* *
+* x' cos(ph) -sin(ph) 0 cos(th) 0 sin(th) x *
+* y' = A B = sin(ph) cos(ph) 0 . 0 1 0 y *
+* z' 0 0 1 -sin(th) 0 cos(th) z *
+* *
+* and vice versa if IMODE = 0. *
+* This version dated 5.4.94 is based on the original version DTRAN *
+* by J. Ranft and is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ IF (IMODE.EQ.1) THEN
+ X= CDE*CFE*XO-SFE*YO+SDE*CFE*ZO
+ Y= CDE*SFE*XO+CFE*YO+SDE*SFE*ZO
+ Z=-SDE *XO +CDE *ZO
+ ELSE
+ X= CDE*CFE*XO+CDE*SFE*YO-SDE*ZO
+ Y= -SFE*XO+CFE*YO
+ Z= SDE*CFE*XO+SDE*SFE*YO+CDE*ZO
+ ENDIF
+ RETURN
+ END
+*
+*===lt2lab=============================================================*
+*
+CDECK ID>, DT_LT2LAO
+ SUBROUTINE DT_LT2LAO
+
+************************************************************************
+* Lorentz-transformation to lab-system. This subroutine scans DTEVT1 *
+* for final state particles/fragments defined in nucleon-nucleon-cms *
+* and transforms them back to the lab. *
+* This version dated 16.11.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ NEND = NHKK
+ NPOINT(5) = NHKK+1
+ IF ( (NPOINT(4).EQ.0).OR.(NEND.LT.NPOINT(4)) ) RETURN
+ DO 1 I=NPOINT(4),NEND
+C DO 1 I=1,NEND
+ IF ((ABS(ISTHKK(I)).EQ.1).OR.(ISTHKK(I).EQ.1000).OR.
+ & (ISTHKK(I).EQ.1001)) THEN
+ CALL DT_LTNUC(PHKK(3,I),PHKK(4,I),PZ,PE,-3)
+ NOB = NOBAM(I)
+ CALL DT_EVTPUT(ISTHKK(I),IDHKK(I),I,0,PHKK(1,I),PHKK(2,I),
+ & PZ,PE,IDRES(I),IDXRES(I),IDCH(I))
+ IF ((ISTHKK(I).EQ.1000).OR.(ISTHKK(I).EQ.1001)) THEN
+ ISTHKK(I) = 3*ISTHKK(I)
+ NOBAM(NHKK) = NOB
+ ELSE
+ IF (ISTHKK(I).EQ.-1) NOBAM(NHKK) = NOB
+ ISTHKK(I) = SIGN(3,ISTHKK(I))
+ ENDIF
+ JDAHKK(1,I) = NHKK
+ ENDIF
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===lt2lab=============================================================*
+*
+CDECK ID>, DT_LT2LAB
+ SUBROUTINE DT_LT2LAB
+
+************************************************************************
+* Lorentz-transformation to lab-system. This subroutine scans DTEVT1 *
+* for final state particles/fragments defined in nucleon-nucleon-cms *
+* and transforms them to the lab. *
+* This version dated 07.01.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ IF ( (NPOINT(4).EQ.0).OR.(NHKK.LT.NPOINT(4)) ) RETURN
+ DO 1 I=NPOINT(4),NHKK
+ IF ((ABS(ISTHKK(I)).EQ.1).OR.(ISTHKK(I).EQ.1000).OR.
+ & (ISTHKK(I).EQ.1001)) THEN
+ CALL DT_LTNUC(PHKK(3,I),PHKK(4,I),PZ,PE,-3)
+ PHKK(3,I) = PZ
+ PHKK(4,I) = PE
+ ENDIF
+ 1 CONTINUE
+
+ RETURN
+ END
+
+************************************************************************
+* *
+* 5) Sampling from distributions *
+* *
+************************************************************************
+*
+*===npoiss=============================================================*
+*
+CDECK ID>, IDT_NPOISS
+ INTEGER FUNCTION IDT_NPOISS(AVN)
+
+************************************************************************
+* Sample according to Poisson distribution with Poisson parameter AVN. *
+* The original version written by J. Ranft. *
+* This version dated 11.1.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ EXPAVN = EXP(-AVN)
+ K = 1
+ A = 1.0D0
+
+ 10 CONTINUE
+ A = DT_RNDM(A)*A
+ IF (A.GE.EXPAVN) THEN
+ K = K+1
+ GOTO 10
+ ENDIF
+ IDT_NPOISS = K-1
+
+ RETURN
+ END
+*
+*===sampxb=============================================================*
+*
+CDECK ID>, DT_SAMPXB
+ DOUBLE PRECISION FUNCTION DT_SAMPXB(X1,X2,B)
+
+************************************************************************
+* Sampling from f(x)=1./SQRT(X**2+B**2) between x1 and x2. *
+* Processed by S. Roesler, 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (TWO=2.0D0)
+
+ A1 = LOG(X1+SQRT(X1**2+B**2))
+ A2 = LOG(X2+SQRT(X2**2+B**2))
+ AN = A2-A1
+ A = AN*DT_RNDM(A1)+A1
+ BB = EXP(A)
+ DT_SAMPXB = (BB**2-B**2)/(TWO*BB)
+
+ RETURN
+ END
+*
+*===sampex=============================================================*
+*
+CDECK ID>, DT_SAMPEX
+ DOUBLE PRECISION FUNCTION DT_SAMPEX(X1,X2)
+
+************************************************************************
+* Sampling from f(x)=1./x between x1 and x2. *
+* Processed by S. Roesler, 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ONE=1.0D0)
+
+ R = DT_RNDM(X1)
+ AL1 = LOG(X1)
+ AL2 = LOG(X2)
+ DT_SAMPEX = EXP((ONE-R)*AL1+R*AL2)
+
+ RETURN
+ END
+*
+*===samsqx=============================================================*
+*
+CDECK ID>, DT_SAMSQX
+ DOUBLE PRECISION FUNCTION DT_SAMSQX(X1,X2)
+
+************************************************************************
+* Sampling from f(x)=1./x^0.5 between x1 and x2. *
+* Processed by S. Roesler, 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ONE=1.0D0)
+
+ R = DT_RNDM(X1)
+ DT_SAMSQX = (R*SQRT(X2)+(ONE-R)*SQRT(X1))**2
+
+ RETURN
+ END
+*
+*===samplw=============================================================*
+*
+CDECK ID>, DT_SAMPLW
+ DOUBLE PRECISION FUNCTION DT_SAMPLW(XMIN,XMAX,B)
+
+************************************************************************
+* Sampling from f(x)=1/x^b between x_min and x_max. *
+* S. Roesler, 18.4.98 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ONE=1.0D0)
+
+ R = DT_RNDM(B)
+ IF (B.EQ.ONE) THEN
+ DT_SAMPLW = EXP(R*LOG(XMAX)+(ONE-R)*LOG(XMIN))
+ ELSE
+ ONEMB = ONE-B
+ DT_SAMPLW = (R*XMAX**ONEMB+(ONE-R)*XMIN**ONEMB)**(ONE/ONEMB)
+ ENDIF
+
+ RETURN
+ END
+*
+*===betrej=============================================================*
+*
+CDECK ID>, DT_BETREJ
+ DOUBLE PRECISION FUNCTION DT_BETREJ(GAM,ETA,XMIN,XMAX)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ONE=1.0D0)
+
+ IF (XMIN.GE.XMAX)THEN
+ WRITE (LOUT,500) XMIN,XMAX
+ 500 FORMAT(1X,'DT_BETREJ: XMIN<XMAX execution stopped ',2F10.5)
+ STOP
+ ENDIF
+
+ 10 CONTINUE
+ XX = XMIN+(XMAX-XMIN)*DT_RNDM(ETA)
+ BETMAX = XMIN**(GAM-ONE)*(ONE-XMIN)**(ETA-ONE)
+ YY = BETMAX*DT_RNDM(XX)
+ BETXX = XX**(GAM-ONE)*(ONE-XX)**(ETA-ONE)
+ IF (YY.GT.BETXX) GOTO 10
+ DT_BETREJ = XX
+
+ RETURN
+ END
+*
+*===dgamrn=============================================================*
+*
+CDECK ID>, DT_DGAMRN
+ DOUBLE PRECISION FUNCTION DT_DGAMRN(ALAM,ETA)
+
+************************************************************************
+* Sampling from Gamma-distribution. *
+* F(X) = ALAM**ETA*X**(ETA-1)*EXP(-ALAM*X) / GAM(ETA) *
+* Processed by S. Roesler, 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ZERO=0.0D0,TINY9=1.0D-9,ONE=1.0D0)
+
+ NCOU = 0
+ N = INT(ETA)
+ F = ETA-DBLE(N)
+ IF (F.EQ.ZERO) GOTO 20
+ 10 R = DT_RNDM(F)
+ NCOU = NCOU+1
+ IF (NCOU.GE.11) GOTO 20
+ IF (R.LT.F/(F+2.71828D0)) GOTO 30
+ YYY = LOG(DT_RNDM(R)+TINY9)/F
+ IF (ABS(YYY).GT.50.0D0) GOTO 20
+ Y = EXP(YYY)
+ IF (LOG(DT_RNDM(Y)+TINY9).GT.-Y) GOTO 10
+ GOTO 40
+ 20 Y = 0.0D0
+ GOTO 50
+ 30 Y = ONE-LOG(DT_RNDM(Y)+TINY9)
+ IF (DT_RNDM(R).GT.Y**(F-ONE)) GOTO 10
+ 40 IF (N.EQ.0) GOTO 70
+ 50 Z = 1.0D0
+ DO 60 I = 1,N
+ 60 Z = Z*DT_RNDM(Z)
+ Y = Y-LOG(Z+TINY9)
+ 70 DT_DGAMRN = Y/ALAM
+
+ RETURN
+ END
+*
+*===dbetar=============================================================*
+*
+CDECK ID>, DT_DBETAR
+ DOUBLE PRECISION FUNCTION DT_DBETAR(GAM,ETA)
+
+************************************************************************
+* Sampling from Beta -distribution between 0.0 and 1.0 *
+* F(X)=X**(GAM-1.)*(1.-X)**(ETA-1)*GAMM(ETA+GAM)/(GAMM(GAM)*GAMM(ETA))*
+* Processed by S. Roesler, 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ Y = DT_DGAMRN(1.0D0,GAM)
+ Z = DT_DGAMRN(1.0D0,ETA)
+ DT_DBETAR = Y/(Y+Z)
+
+ RETURN
+ END
+*
+*===rannor=============================================================*
+*
+CDECK ID>, DT_RANNOR
+ SUBROUTINE DT_RANNOR(X,Y)
+
+************************************************************************
+* Sampling from Gaussian distribution. *
+* Processed by S. Roesler, 6.5.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (TINY10=1.0D-10)
+
+ CALL DT_DSFECF(SFE,CFE)
+ V = MAX(TINY10,DT_RNDM(X))
+ A = SQRT(-2.D0*LOG(V))
+ X = A*SFE
+ Y = A*CFE
+
+ RETURN
+ END
+*
+*===dpoli==============================================================*
+*
+CDECK ID>, DT_DPOLI
+ SUBROUTINE DT_DPOLI(CS,SI)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ U = DT_RNDM(CS)
+ CS = DT_RNDM(U)
+ IF (U.LT.0.5D0) CS=-CS
+ SI = SQRT(1.0D0-CS*CS+1.0D-10)
+
+ RETURN
+ END
+*
+*===dsfecf=============================================================*
+*
+CDECK ID>, DT_DSFECF
+ SUBROUTINE DT_DSFECF(SFE,CFE)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (TWO=2.0D0,ONE=1.0D0,OHALF=0.5D0,ZERO=0.0D0)
+
+ 1 CONTINUE
+ X = DT_RNDM(SFE)
+ Y = DT_RNDM(X)
+ XX = X*X
+ YY = Y*Y
+ XY = XX+YY
+ IF (XY.GT.ONE) GOTO 1
+ CFE = (XX-YY)/XY
+ SFE = TWO*X*Y/XY
+ IF (DT_RNDM(X).LT.OHALF) SFE = -SFE
+ RETURN
+ END
+*
+*===raco===============================================================*
+*
+CDECK ID>, DT_RACO
+ SUBROUTINE DT_RACO(WX,WY,WZ)
+
+************************************************************************
+* Direction cosines of random uniform (isotropic) direction in three *
+* dimensional space *
+* Processed by S. Roesler, 20.11.95 *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (TWO=2.0D0,ONE=1.0D0,OHALF=0.5D0,ZERO=0.0D0)
+
+ 10 CONTINUE
+ X = TWO*DT_RNDM(WX)-ONE
+ Y = DT_RNDM(X)
+ X2 = X*X
+ Y2 = Y*Y
+ IF (X2+Y2.GT.ONE) GOTO 10
+
+ CFE = (X2-Y2)/(X2+Y2)
+ SFE = TWO*X*Y/(X2+Y2)
+* z = 1/2 [ 1 + cos (theta) ]
+ Z = DT_RNDM(X)
+* 1/2 sin (theta)
+ WZ = SQRT(Z*(ONE-Z))
+ WX = TWO*WZ*CFE
+ WY = TWO*WZ*SFE
+ WZ = TWO*Z-ONE
+
+ RETURN
+ END
+
+************************************************************************
+* *
+* 6) Special functions, algorithms and service routines *
+* *
+************************************************************************
+*
+*===ylamb==============================================================*
+*
+CDECK ID>, DT_YLAMB
+ DOUBLE PRECISION FUNCTION DT_YLAMB(X,Y,Z)
+
+************************************************************************
+* *
+* auxiliary function for three particle decay mode *
+* (standard LAMBDA**(1/2) function) *
+* *
+* Adopted from an original version written by R. Engel. *
+* This version dated 12.12.94 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ YZ = Y-Z
+ XLAM = X*X-2.D0*X*(Y+Z)+YZ*YZ
+ IF (XLAM.LE.0.D0) XLAM = ABS(XLAM)
+ DT_YLAMB = SQRT(XLAM)
+
+ RETURN
+ END
+*
+*===sort1==============================================================*
+*
+CDECK ID>, DT_SORT
+ SUBROUTINE DT_SORT(A,N,I0,I1,MODE)
+
+************************************************************************
+* This subroutine sorts entries in A in increasing/decreasing order *
+* of A(3,i). *
+* MODE = 1 increasing in A(3,i=1..N) *
+* = 2 decreasing in A(3,i=1..N) *
+* This version dated 21.04.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION A(3,N)
+
+ M = I1
+ 10 CONTINUE
+ M = I1-1
+ IF (M.LE.0) RETURN
+ L = 0
+ DO 20 I=I0,M
+ J = I+1
+ IF (MODE.EQ.1) THEN
+ IF (A(3,I).LE.A(3,J)) GOTO 20
+ ELSE
+ IF (A(3,I).GE.A(3,J)) GOTO 20
+ ENDIF
+ B = A(3,I)
+ C = A(1,I)
+ D = A(2,I)
+ A(3,I) = A(3,J)
+ A(2,I) = A(2,J)
+ A(1,I) = A(1,J)
+ A(3,J) = B
+ A(1,J) = C
+ A(2,J) = D
+ L = 1
+ 20 CONTINUE
+ IF (L.EQ.1) GOTO 10
+
+ RETURN
+ END
+*
+*===sort1==============================================================*
+*
+CDECK ID>, DT_SORT1
+ SUBROUTINE DT_SORT1(A,IDX,N,I0,I1,MODE)
+
+************************************************************************
+* This subroutine sorts entries in A in increasing/decreasing order *
+* of A(i). *
+* MODE = 1 increasing in A(i=1..N) *
+* = 2 decreasing in A(i=1..N) *
+* This version dated 21.04.95 is revised by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION A(N),IDX(N)
+
+ M = I1
+ 10 CONTINUE
+ M = I1-1
+ IF (M.LE.0) RETURN
+ L = 0
+ DO 20 I=I0,M
+ J = I+1
+ IF (MODE.EQ.1) THEN
+ IF (A(I).LE.A(J)) GOTO 20
+ ELSE
+ IF (A(I).GE.A(J)) GOTO 20
+ ENDIF
+ B = A(I)
+ A(I) = A(J)
+ A(J) = B
+ IX = IDX(I)
+ IDX(I) = IDX(J)
+ IDX(J) = IX
+ L = 1
+ 20 CONTINUE
+ IF (L.EQ.1) GOTO 10
+
+ RETURN
+ END
+*
+*===xtime==============================================================*
+*
+CDECK ID>, DT_XTIME
+ SUBROUTINE DT_XTIME
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ CHARACTER DAT*9,TIM*11
+
+ DAT = ' '
+ TIM = ' '
+C CALL GETDAT(IYEAR,IMONTH,IDAY)
+C CALL GETTIM(IHOUR,IMINUT,ISECND,IHSCND)
+
+C CALL DATE(DAT)
+C CALL TIME(TIM)
+C WRITE(LOUT,1000) DAT,TIM
+ 1000 FORMAT(/,2X,'Date: ',A9,3X,'Time: ',A11,/)
+
+ RETURN
+ END
+
+************************************************************************
+* *
+* 7) Random number generator package *
+* *
+* THIS IS A PACKAGE CONTAINING A RANDOM NUMBER GENERATOR AND *
+* SERVICE ROUTINES. *
+* THE ALGORITHM IS FROM *
+* 'TOWARD A UNVERSAL RANDOM NUMBER GENERATOR' *
+* G.MARSAGLIA, A.ZAMAN ; FSU-SCRI-87-50 *
+* IMPLEMENTATION BY K. HAHN DEC. 88, *
+* THIS GENERATOR SHOULD NOT DEPEND ON THE HARD WARE ( IF A REAL HAS *
+* AT LEAST 24 SIGNIFICANT BITS IN INTERNAL REPRESENTATION ), *
+* THE PERIOD IS ABOUT 2**144, *
+* TIME FOR ONE CALL AT IBM-XT IS ABOUT 0.7 MILLISECONDS, *
+* THE PACKAGE CONTAINS *
+* FUNCTION DT_RNDM(I) : GENERATOR *
+* SUBROUTINE DT_RNDMST(NA1,NA2,NA3,NB4): INITIALIZATION *
+* SUBROUTINE DT_RNDMIN(U,C,CD,CM,I,J) : PUT SEED TO GENERATOR *
+* SUBROUTINE DT_RNDMOU(U,C,CD,CM,I,J) : TAKE SEED FROM GENERATOR *
+* SUBROUTINE DT_RNDMTE(IO) : TEST OF GENERATOR *
+*--- *
+* FUNCTION DT_RNDM(I) *
+* GIVES UNIFORMLY DISTRIBUTED RANDOM NUMBERS IN (0..1) *
+* I - DUMMY VARIABLE, NOT USED *
+* SUBROUTINE DT_RNDMST(NA1,NA2,NA3,NB1) *
+* INITIALIZES THE GENERATOR, MUST BE CALLED BEFORE USING DT_RNDM *
+* NA1,NA2,NA3,NB1 - VALUES FOR INITIALIZING THE GENERATOR *
+* NA? MUST BE IN 1..178 AND NOT ALL 1 *
+* 12,34,56 ARE THE STANDARD VALUES *
+* NB1 MUST BE IN 1..168 *
+* 78 IS THE STANDARD VALUE *
+* SUBROUTINE DT_RNDMIN(U,C,CD,CM,I,J) *
+* PUTS SEED TO GENERATOR ( BRINGS GENERATOR IN THE SAME STATUS *
+* AS AFTER THE LAST DT_RNDMOU CALL ) *
+* U(97),C,CD,CM,I,J - SEED VALUES AS TAKEN FROM DT_RNDMOU *
+* SUBROUTINE DT_RNDMOU(U,C,CD,CM,I,J) *
+* TAKES SEED FROM GENERATOR *
+* U(97),C,CD,CM,I,J - SEED VALUES *
+* SUBROUTINE DT_RNDMTE(IO) *
+* TEST OF THE GENERATOR *
+* IO - DEFINES OUTPUT *
+* = 0 OUTPUT ONLY IF AN ERROR IS DETECTED *
+* = 1 OUTPUT INDEPENDEND ON AN ERROR *
+* DT_RNDMTE USES DT_RNDMIN AND DT_RNDMOU TO BRING GENERATOR TO *
+* SAME STATUS *
+* AS BEFORE CALL OF DT_RNDMTE *
+************************************************************************
+*
+*===rndm===============================================================*
+*
+CDECK ID>, DT_RNDM
+ DOUBLE PRECISION FUNCTION DT_RNDM(VDUMMY)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* counter of calls to random number generator
+* uncomment if needed
+C COMMON /DTRNCT/ IRNCT0,IRNCT1
+C LOGICAL LFIRST
+C DATA LFIRST /.TRUE./
+
+* counter of calls to random number generator
+* uncomment if needed
+C IF (LFIRST) THEN
+C IRNCT0 = 0
+C IRNCT1 = 0
+C LFIRST = .FALSE.
+C ENDIF
+
+ DT_RNDM = FLRNDM(VDUMMY)
+* counter of calls to random number generator
+* uncomment if needed
+C IRNCT1 = IRNCT1+1
+
+ RETURN
+ END
+*
+*===rndmst=============================================================*
+*
+CDECK ID>, DT_RNDMST
+ SUBROUTINE DT_RNDMST(NA1,NA2,NA3,NB1)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* random number generator
+ COMMON /DTRAND/ U(97),C,CD,CM,I,J
+
+ MA1 = NA1
+ MA2 = NA2
+ MA3 = NA3
+ MB1 = NB1
+ I = 97
+ J = 33
+ DO 20 II2 = 1,97
+ S = 0
+ T = 0.5D0
+ DO 10 II1 = 1,24
+ MAT = MOD(MOD(MA1*MA2,179)*MA3,179)
+ MA1 = MA2
+ MA2 = MA3
+ MA3 = MAT
+ MB1 = MOD(53*MB1+1,169)
+ IF ( MOD(MB1*MAT,64).GE.32 ) S = S+T
+ 10 T = 0.5D0*T
+ 20 U(II2) = S
+ C = 362436.0D0/16777216.0D0
+ CD = 7654321.0D0/16777216.0D0
+ CM = 16777213.0D0/16777216.0D0
+ RETURN
+ END
+*
+*===rndmin=============================================================*
+*
+CDECK ID>, DT_RNDMIN
+ SUBROUTINE DT_RNDMIN(UIN,CIN,CDIN,CMIN,IIN,JIN)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* random number generator
+ COMMON /DTRAND/ U(97),C,CD,CM,I,J
+
+ DIMENSION UIN(97)
+
+ DO 10 KKK = 1,97
+ 10 U(KKK) = UIN(KKK)
+ C = CIN
+ CD = CDIN
+ CM = CMIN
+ I = IIN
+ J = JIN
+
+ RETURN
+ END
+*
+*===rndmou=============================================================*
+*
+CDECK ID>, DT_RNDMOU
+ SUBROUTINE DT_RNDMOU(UOUT,COUT,CDOUT,CMOUT,IOUT,JOUT)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* random number generator
+ COMMON /DTRAND/ U(97),C,CD,CM,I,J
+
+ DIMENSION UOUT(97)
+
+ DO 10 KKK = 1,97
+ 10 UOUT(KKK) = U(KKK)
+ COUT = C
+ CDOUT = CD
+ CMOUT = CM
+ IOUT = I
+ JOUT = J
+
+ RETURN
+ END
+*
+*===rndmte=============================================================*
+*
+CDECK ID>, DT_RNDMTE
+ SUBROUTINE DT_RNDMTE(IO)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION UU(97),U(6),X(6),D(6)
+ DATA U / 6533892.D0, 14220222.D0, 7275067.D0, 6172232.D0,
+ +8354498.D0, 10633180.D0/
+
+ CALL DT_RNDMOU(UU,CC,CCD,CCM,II,JJ)
+ CALL DT_RNDMST(12,34,56,78)
+ DO 10 II1 = 1,20000
+ 10 XX = DT_RNDM(XX)
+ SD = 0.0D0
+ DO 20 II2 = 1,6
+ X(II2) = 4096.D0*(4096.D0*DT_RNDM(SD))
+ D(II2) = X(II2)-U(II2)
+ 20 SD = SD+D(II2)
+ CALL DT_RNDMIN(UU,CC,CCD,CCM,II,JJ)
+**sr 24.01.95
+C IF ( IO.EQ. 1.OR. SD.NE.0. 0) WRITE(6,500) (U(I),X(I),D(I),I=1,6)
+ IF ((IO.EQ.1).OR.(SD.NE.0.0)) THEN
+C WRITE(6,1000)
+ 1000 FORMAT(/,/,1X,'DT_RNDMTE: Test of random-number generator...',
+ & ' passed')
+ ENDIF
+**
+ RETURN
+ 500 FORMAT(' === TEST OF THE RANDOM-GENERATOR ===',/,
+ &' EXPECTED VALUE CALCULATED VALUE DIFFERENCE',/, 6(F17.
+ &1,F20.1,F15.3,/), ' === END OF TEST ;',
+ &' GENERATOR HAS THE SAME STATUS AS BEFORE CALLING DT_RNDMTE')
+ END
+*
+*
+*===title==============================================================*
+*
+CDECK ID>, DT_TITLE
+ SUBROUTINE DT_TITLE
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ CHARACTER*6 CVERSI
+ CHARACTER*11 CCHANG
+ DATA CVERSI,CCHANG /'3.0-4 ','18 Sep 2001'/
+
+ CALL DT_XTIME
+ WRITE(LOUT,1000) CVERSI,CCHANG
+ 1000 FORMAT(1X,'+-------------------------------------------------',
+ & '----------------------+',/,
+ & 1X,'|',71X,'|',/,
+ & 1X,'|',26X,'DPMJET version ',A6,24X,'|',/,
+ & 1X,'|',71X,'|',/,
+ & 1X,'|',22X,'(Last change: ',A11,')',23X,'|',/,
+ & 1X,'|',71X,'|',/,
+ & 1X,'|',12X,'Authors: Stefan Roesler (CERN)',27X,'|',/,
+ & 1X,'|',21X,'Ralph Engel (Bartol Res. Inst.)',14X,'|',/,
+ & 1X,'|',21X,'Johannes Ranft (Siegen Univ.)',19X,'|',/,
+ & 1X,'|',71X,'|',/,
+ & 1X,'|',12X,'http://home.cern.ch/~sroesler/dpmjet3.html',
+ & 17X,'|',/,
+ & 1X,'|',71X,'|',/,
+ & 1X,'+-------------------------------------------------',
+ & '----------------------+',/,
+ & 1X,'| Please send suggestions, bug reports, etc. to: ',
+ & 'Stefan.Roesler@cern.ch |',/,
+ & 1X,'+-------------------------------------------------',
+ & '----------------------+',/)
+
+ RETURN
+ END
+*
+*===evtini=============================================================*
+*
+CDECK ID>, DT_EVTINI
+ SUBROUTINE DT_EVTINI
+
+************************************************************************
+* Initialization of DTEVT1. *
+* This version dated 15.01.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+
+* initialization of DTEVT1/DTEVT2
+ NEND = NHKK
+ IF (NEVENT.EQ.1) NEND = NMXHKK
+ NHKK = 0
+ NEVHKK = NEVENT
+ DO 1 I=1,NEND
+ ISTHKK(I) = 0
+ IDHKK(I) = 0
+ JMOHKK(1,I) = 0
+ JMOHKK(2,I) = 0
+ JDAHKK(1,I) = 0
+ JDAHKK(2,I) = 0
+ IDRES(I) = 0
+ IDXRES(I) = 0
+ NOBAM(I) = 0
+ IDCH(I) = 0
+ IHIST(1,I) = 0
+ IHIST(2,I) = 0
+ DO 2 J=1,4
+ PHKK(J,I) = 0.0D0
+ VHKK(J,I) = 0.0D0
+ WHKK(J,I) = 0.0D0
+ 2 CONTINUE
+ PHKK(5,I) = 0.0D0
+ 1 CONTINUE
+ DO 3 I=1,10
+ NPOINT(I) = 0
+ 3 CONTINUE
+ CALL DT_CHASTA(-1)
+
+C* initialization of DTLTRA
+C IF (NCOMPO.GT.0) CALL DT_LTINI(ID,EPN,PPN,ECM)
+
+ RETURN
+ END
+*
+*===statis=============================================================*
+*
+CDECK ID>, DT_STATIS
+ SUBROUTINE DT_STATIS(MODE)
+
+************************************************************************
+* Initialization and output of run-statistics. *
+* MODE = 1 initialization *
+* = 2 output *
+* This version dated 23.01.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY3=1.0D-3)
+
+* statistics
+ COMMON /DTSTA1/ ICREQU,ICSAMP,ICCPRO,ICDPR,ICDTA,
+ & ICRJSS,ICVV2S,ICCHAI(2,9),ICRES(9),ICDIFF(5),
+ & ICEVTG(8,0:30)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* central particle production, impact parameter biasing
+ COMMON /DTIMPA/ BIMIN,BIMAX,XSFRAC,ICENTR
+* various options for treatment of partons (DTUNUC 1.x)
+* (chain recombination, Cronin,..)
+ LOGICAL LCO2CR,LINTPT
+ COMMON /DTCHAI/ SEASQ,CRONCO,CUTOF,MKCRON,ISICHA,IRECOM,
+ & LCO2CR,LINTPT
+* nucleon-nucleon event-generator
+ CHARACTER*8 CMODEL
+ LOGICAL LPHOIN
+ COMMON /DTMODL/ CMODEL(4),ELOJET,MCGENE,LPHOIN
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+
+ DIMENSION PP(4),PT(4)
+
+ GOTO (1,2) MODE
+
+* initialization
+ 1 CONTINUE
+
+* initialize statistics counter
+ ICREQU = 0
+ ICSAMP = 0
+ ICCPRO = 0
+ ICDPR = 0
+ ICDTA = 0
+ ICRJSS = 0
+ ICVV2S = 0
+ DO 10 I=1,9
+ ICRES(I) = 0
+ ICCHAI(1,I) = 0
+ ICCHAI(2,I) = 0
+ 10 CONTINUE
+* initialize rejection counter
+ IRPT = 0
+ IRHHA = 0
+ LOMRES = 0
+ LOBRES = 0
+ IRFRAG = 0
+ IREVT = 0
+ IRRES(1) = 0
+ IRRES(2) = 0
+ IRCHKI(1) = 0
+ IRCHKI(2) = 0
+ IRCRON(1) = 0
+ IRCRON(2) = 0
+ IRCRON(3) = 0
+ IRDIFF(1) = 0
+ IRDIFF(2) = 0
+ IRINC = 0
+ DO 11 I=1,5
+ ICDIFF(I) = 0
+ 11 CONTINUE
+ DO 12 I=1,8
+ DO 13 J=0,30
+ ICEVTG(I,J) = 0
+ 13 CONTINUE
+ 12 CONTINUE
+
+ RETURN
+
+* output
+ 2 CONTINUE
+
+* statistics counter
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,/,1X,'STATIS:',20X,'statistics of the run',/,
+ & 28X,'---------------------')
+ WRITE(LOUT,1001) ICREQU,ICSAMP,DBLE(ICSAMP)/DBLE(ICREQU)
+ 1001 FORMAT(/,1X,'number of events requested / sampled',13X,
+ & I8,' / ',I8,/,1X,'number of samp. evts per requested ',
+ & 'event',11X,F9.1)
+ IF (ICDIFF(1).NE.0) THEN
+ WRITE(LOUT,1009) ICDIFF
+ 1009 FORMAT(/,1X,'diffractive events: total ',I8,/,49X,
+ & 'low mass high mass',/,24X,'single diffraction',
+ & 7X,I8,4X,I8,/,24X,'double diffraction',7X,I8,4X,I8)
+ ENDIF
+ IF (ICENTR.GT.0) THEN
+ WRITE(LOUT,1002) DBLE(ICCPRO)/DBLE(ICSAMP),
+ & DBLE(ICSAMP)/DBLE(ICCPRO)
+ 1002 FORMAT(/,1X,'central production:',/,2X,'mean number',
+ & ' of sampled Glauber-events per event',9X,F9.1,/,
+ & 2X,'fraction of production cross section',21X,F10.6)
+ ENDIF
+ WRITE(LOUT,1003) DBLE(ICDPR)/DBLE(ICSAMP),
+ & DBLE(ICDTA)/DBLE(ICSAMP)
+ 1003 FORMAT(/,54X,'proj. targ.',/,1X,'average number of wounded',
+ & ' nucleons after x-sampling',2(4X,F6.2))
+
+ IF (MCGENE.EQ.1) THEN
+ WRITE(LOUT,1004) DBLE(ICRJSS)/DBLE(ICSAMP)
+ 1004 FORMAT(/,1X,'mean number of sea-sea chain rejections per',
+ & ' event',3X,F9.1)
+ IF (ISICHA.EQ.1) THEN
+ WRITE(LOUT,1005) DBLE(ICVV2S)/DBLE(ICSAMP)
+ 1005 FORMAT(/,1X,'Reggeon contribution:',/,1X,'mean number ',
+ & 'of single chains per event',13X,F9.1)
+ ENDIF
+ WRITE(LOUT,1006)
+ 1006 FORMAT(/,1X,'chain system statistics: (per event)',/,
+ & 23X,'mean number of chains mean number of chains',/,
+ & 23X,'sampled hadronized having mass of a reso.')
+ WRITE(LOUT,1007) (DBLE(ICCHAI(1,J))/(2.0D0*DBLE(ICSAMP)),
+ & DBLE(ICCHAI(2,J))/(2.0D0*DBLE(ICREQU)),
+ & DBLE(ICRES(J))/(2.0D0*DBLE(ICREQU)),J=1,8),
+ & DBLE(ICCHAI(2,9))/MAX(DBLE(ICCHAI(1,9)),TINY3)
+ 1007 FORMAT(1X,'sea - sea ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'disea - sea ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'sea - disea ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'sea - valence ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'disea - valence ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'valence - sea ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'valence - disea ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'valence - valence ',6X,F4.1,8X,F4.1,17X,F4.1,/,
+ & 1X,'fused chains ',18X,F4.1,17X,F4.1,/)
+ WRITE(LOUT,1008)
+ & (DBLE(IRCRON(I))/MAX(DBLE(IRCRON(1)),TINY3),I=2,3),
+ & DBLE(IRPT)/DBLE(ICREQU),(DBLE(IRRES(I))/DBLE(ICREQU),I=1,2),
+ & DBLE(LOMRES)/DBLE(ICREQU),DBLE(LOBRES)/DBLE(ICREQU),
+ & (DBLE(IRCHKI(I))/DBLE(ICREQU),I=1,2),
+ & (DBLE(IRDIFF(I))/DBLE(ICREQU),I=1,2),
+ & DBLE(IRHHA)/DBLE(ICREQU),
+ & DBLE(IRFRAG)/DBLE(ICREQU),DBLE(IREVT)/DBLE(ICREQU),
+ & (DBLE(IREXCI(I))/DBLE(ICREQU),I=1,2),IREXCI(3)
+ 1008 FORMAT(/,1X,'Rejection counter: (NEVT = no. of events)',/,/,
+ & 1X,'Cronin-effect (CRONIN)',15X,'IRCRON(2)/IRCRON(1) = ',
+ & F7.2,/,38X,'IRCRON(3)/IRCRON(1) = ',F7.2,/,1X,
+ & 'Intrins. p_t (GETSPT)',21X,'IRPT /NEVT = ',F7.2,/,
+ & 1X,'Chain mass corr. for resonances (EVTRES)',2X,
+ & 'IRRES(1) /NEVT = ',F7.2,/,33X,'(CH2RES) IRRES(2) /',
+ & 'NEVT = ',F7.2,/,43X,'LOMRES /NEVT = ',F7.2,/,
+ & 43X,'LOBRES /NEVT = ',F7.2,/,1X,'Kinem. corr. of',
+ & ' 2-chain systems (CHKINE) IRCHKI(1)/NEVT = ',F7.2,/,
+ & 43X,'IRCHKI(2)/NEVT = ',F7.2,/,1X,'Diffraction',31X,
+ & 'IRDIFF(1)/NEVT = ',F7.2,/,43X,'IRDIFF(2)/NEVT = ',
+ & F7.2,/,1X,'Total no. of rej.',
+ & ' in chain-systems treatment (GETCSY)',/,43X,
+ & 'IRHHA /NEVT = ',F7.2,/,1X,'Fragmentation (EVTFRA)',
+ & ' (not yet used!)',4X,'IRFRAG /NEVT = ',F7.2,/,
+ & 1X,'Total no. of rej. in DPM-treatment of one event',
+ & ' (EVENTA)',/,43X,'IREVT /NEVT = ',F7.2,/,1X,
+ & 'Treatment of final nucleon conf.',10X,'IREXCI(1)/NEVT = '
+ & ,F7.2,/,43X,'IREXCI(2)/NEVT = ',F7.2,/,48X,
+ & 'IREXCI(3) = ',I5,/)
+ ELSEIF (MCGENE.EQ.2) THEN
+C *** Commented by Chiara
+C WRITE(LOUT,1010) ELOJET
+C 1010 FORMAT(/,/,1X,'PHOJET-treatment of chain systems above ',
+C & F4.1,' GeV')
+C WRITE(LOUT,1011)
+C 1011 FORMAT(/,1X,'1. chain system statistics - total numbers:',/,
+C & 30X,'--------------',/,/,12X,'s-s',5X,'d-s',5X,'s-d',
+C & 5X,'s-v',5X,'d-v',5X,'v-s',5X,'v-d',5X,'v-v')
+C WRITE(LOUT,1012) ((ICEVTG(I,J),I=1,8),J=0,1),
+C & (INT(ICCHAI(2,I)/2.0D0),I=1,8),
+C & (ICEVTG(I,2),I=1,8),(ICEVTG(I,29),I=1,8),
+C & ((ICEVTG(I,J),I=1,8),J=3,7),
+C & ((ICEVTG(I,J),I=1,8),J=19,21),
+C & (ICEVTG(I,8),I=1,8),
+C & ((ICEVTG(I,J),I=1,8),J=22,24),
+C & (ICEVTG(I,9),I=1,8),
+C & ((ICEVTG(I,J),I=1,8),J=25,28),
+C & ((ICEVTG(I,J),I=1,8),J=10,18)
+C 1012 FORMAT(/,1X,'req.to.',8I8,/,/,1X,'low rq.',8I8,/,1X,'low ac.',
+C & 8I8,/,/,1X,'PHOJET ',8I8,/,' sngl ',8I8,/,/,
+C & ' no-dif.',8I8,/,
+C & ' el-sca.',8I8,/,' qel-sc.',8I8,/,' dbl-Po.',8I8,/,
+C & ' diff-1 ',8I8,/,' low ',8I8,/,' high ',8I8,/,
+C & ' h-diff',8I8,/,' diff-2 ',8I8,/,' low ',8I8,/,
+C & ' high ',8I8,/,' h-diff',8I8,/,' dbl-di.',8I8,/,
+C & ' lo-lo ',8I8,/,' hi-hi ',8I8,/,' lo-hi ',8I8,/,
+C & ' hi-lo ',8I8,/,
+C & ' dir-ga.',8I8,/,/,' dir-1 ',8I8,/,' dir-2 ',8I8,/,
+C & ' dbl-dir',8I8,/,' s-Pom. ',8I8,/,' h-Pom. ',8I8,/,
+C & ' s-Reg. ',8I8,/,' enh-trg',8I8,/,' enh-log',8I8)
+C WRITE(LOUT,1013)
+C 1013 FORMAT(/,1X,'2. chain system statistics -',
+C & ' mean numbers per evt:',/,30X,'---------------------',
+C & /,/,16X,'s-s',7X,'d-s',7X,'s-d')
+C WRITE(LOUT,1014)
+C & ((DBLE(ICEVTG(I,J))/DBLE(ICSAMP),I=1,3),J=0,1),
+C & (DBLE(ICCHAI(2,I))/(2.0D0*DBLE(ICSAMP)),I=1,3),
+C & ((DBLE(ICEVTG(I,J))/DBLE(ICSAMP),I=1,3),J=2,18)
+C 1014 FORMAT(/,1X,'req.to. ',3E10.2,/,/,1X,'low rq. ',3E10.2,/,
+C & 1X,'low ac. ',3E10.2,/,/,1X,'PHOJET ',3E10.2,/,/,
+C & ' no-dif. ',3E10.2,/,' el-sca. ',3E10.2,/,
+C & ' qel-sc. ',3E10.2,/,' dbl-Po. ',3E10.2,/,
+C & ' diff-1 ',3E10.2,/,' diff-2 ',3E10.2,/,
+C & ' dbl-di. ',3E10.2,/,' dir-ga. ',3E10.2,/,/,
+C & ' dir-1 ',3E10.2,/,' dir-2 ',3E10.2,/,
+C & ' dbl-dir ',3E10.2,/,' s-Pom. ',3E10.2,/,
+C & ' h-Pom. ',3E10.2,/,' s-Reg. ',3E10.2,/,
+C & ' enh-trg ',3E10.2,/,' enh-log ',3E10.2)
+C WRITE(LOUT,1015)
+C 1015 FORMAT(/,16X,'s-v',7X,'d-v',7X,'v-s',7X,'v-d',7X,'v-v')
+C WRITE(LOUT,1016)
+C & ((DBLE(ICEVTG(I,J))/DBLE(ICSAMP),I=4,8),J=0,1),
+C & (DBLE(ICCHAI(2,I))/(2.0D0*DBLE(ICSAMP)),I=4,8),
+C & ((DBLE(ICEVTG(I,J))/DBLE(ICSAMP),I=4,8),J=2,18)
+C 1016 FORMAT(/,1X,'req.to. ',5E10.2,/,/,1X,'low rq. ',5E10.2,/,
+C & 1X,'low ac. ',5E10.2,/,/,1X,'PHOJET ',5E10.2,/,/,
+C & ' no-dif. ',5E10.2,/,' el-sca. ',5E10.2,/,
+C & ' qel-sc. ',5E10.2,/,' dbl-Po. ',5E10.2,/,
+C & ' diff-1 ',5E10.2,/,' diff-2 ',5E10.2,/,
+C & ' dbl-di. ',5E10.2,/,' dir-ga. ',5E10.2,/,/,
+C & ' dir-1 ',5E10.2,/,' dir-2 ',5E10.2,/,
+C & ' dbl-dir ',5E10.2,/,' s-Pom. ',5E10.2,/,
+C & ' h-Pom. ',5E10.2,/,' s-Reg. ',5E10.2,/,
+C & ' enh-trg ',5E10.2,/,' enh-log ',5E10.2)
+
+ ENDIF
+ CALL DT_CHASTA(1)
+
+ IF ((PDBSEA(1).GT.0.0D0).OR.(PDBSEA(2).GT.0.0D0)
+ & .OR.(PDBSEA(3).GT.0.0D0)) THEN
+ WRITE(LOUT,*)'YGS1S,YGS2S,YUS1S,YUS2S',
+ & DBRKA(1,1)+DBRKA(2,1),DBRKA(1,2)+DBRKA(2,2),
+ & DBRKA(1,3)+DBRKA(2,3),DBRKA(1,4)+DBRKA(2,4)
+ WRITE(LOUT,*)'YGS1R,YGS2R,YUS1R,YUS2R',
+ & DBRKR(1,1)+DBRKR(2,1),DBRKR(1,2)+DBRKR(2,2),
+ & DBRKR(1,3)+DBRKR(2,3),DBRKR(1,4)+DBRKR(2,4)
+ WRITE(LOUT,*)'YGSA1S,YGSA2S,YUSA1S,YUSA2S',
+ & DBRKA(1,5)+DBRKA(2,5),DBRKA(1,6)+DBRKA(2,6),
+ & DBRKA(1,7)+DBRKA(2,7),DBRKA(1,8)+DBRKA(2,8)
+ WRITE(LOUT,*)'YGSA1R,YGSA2R,YUSA1R,YUSA2R',
+ & DBRKR(1,5)+DBRKR(2,5),DBRKR(1,6)+DBRKR(2,6),
+ & DBRKR(1,7)+DBRKR(2,7),DBRKR(1,8)+DBRKR(2,8)
+ WRITE(LOUT,*)'YG31S,YG32S,YU31S,YU32S',
+ & DBRKA(3,1),DBRKA(3,2),
+ & DBRKA(3,3),DBRKA(3,4)
+ WRITE(LOUT,*)'YG31R,YG32R,YU31R,YU32R',
+ & DBRKR(3,1),DBRKR(3,2),
+ & DBRKR(3,3),DBRKR(3,4)
+ WRITE(LOUT,*)'YG3A1S,YG3A2S,YU3A1S,YU3A2S',
+ & DBRKA(3,5),DBRKA(3,6),
+ & DBRKA(3,7),DBRKA(3,8)
+ WRITE(LOUT,*)'YG3A1R,YG3A2R,YU3A1R,YU3A2R',
+ & DBRKR(3,5),DBRKR(3,6),
+ & DBRKR(3,7),DBRKR(3,8)
+ ENDIF
+
+ FAC = 1.0D0
+ IF (MCGENE.EQ.2) THEN
+
+C CALL PHO_PHIST(-2,SIGMAX)
+ CALL PHO_EVENT(-2,PP,PT,FAC,IREJ1)
+
+ ENDIF
+
+ CALL DT_XTIME
+
+ RETURN
+ END
+*
+*===evtout=============================================================*
+*
+CDECK ID>, DT_EVTOUT
+ SUBROUTINE DT_EVTOUT(MODE)
+
+************************************************************************
+* MODE = 1 plot content of complete DTEVT1 to out. unit *
+* 3 plot entries of extended DTEVT1 (DTEVT2) *
+* 4 plot entries of DTEVT1 and DTEVT2 *
+* This version dated 11.12.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+
+ DIMENSION IRANGE(NMXHKK)
+
+ IF (MODE.EQ.2) RETURN
+
+ CALL DT_EVTPLO(IRANGE,MODE)
+
+ RETURN
+ END
+*
+*===evtplo=============================================================*
+*
+CDECK ID>, DT_EVTPLO
+ SUBROUTINE DT_EVTPLO(IRANGE,MODE)
+
+************************************************************************
+* MODE = 1 plot content of complete DTEVT1 to out. unit *
+* 2 plot entries of DTEVT1 given by IRANGE *
+* 3 plot entries of extended DTEVT1 (DTEVT2) *
+* 4 plot entries of DTEVT1 and DTEVT2 *
+* 5 plot rejection counter *
+* This version dated 11.12.94 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ CHARACTER*16 CHAU
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+
+ DIMENSION IRANGE(NMXHKK)
+
+ IF ((MODE.EQ.1).OR.(MODE.EQ.4)) THEN
+ WRITE(LOUT,1000)
+ 1000 FORMAT(/,1X,'EVTPLO:',14X,' content of COMMON /DTEVT1/',/,
+ & 15X,' --------------------------',/,/,
+ & ' ST ID M1 M2 D1 D2 PX PY',
+ & ' PZ E M',/)
+ DO 1 I=1,NHKK
+ WRITE(LOUT,1001) I,ISTHKK(I),IDHKK(I),JMOHKK(1,I),
+ & JMOHKK(2,I),JDAHKK(1,I),JDAHKK(2,I),
+ & PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I),
+ & PHKK(5,I)
+C WRITE(LOUT,1011) I,ISTHKK(I),IDHKK(I),JMOHKK(1,I),
+C & JMOHKK(2,I),JDAHKK(1,I),JDAHKK(2,I),
+C & PHKK(3,I),PHKK(4,I)
+C WRITE(LOUT,'(4E15.4)')
+C & VHKK(1,I),VHKK(2,I),VHKK(3,I),VHKK(4,I)
+ 1001 FORMAT(I5,I5,I6,4I5,3F7.3,F8.3,F8.4)
+ 1011 FORMAT(I5,I5,I6,4I5,2E15.5)
+ 1 CONTINUE
+ WRITE(LOUT,*)
+C DO 4 I=1,NHKK
+C WRITE(LOUT,1006) I,ISTHKK(I),
+C & VHKK(1,I),VHKK(2,I),VHKK(3,I),WHKK(1,I),
+C & WHKK(2,I),WHKK(3,I)
+C1006 FORMAT(1X,I4,I6,6E10.3)
+C 4 CONTINUE
+ ENDIF
+
+ IF (MODE.EQ.2) THEN
+ WRITE(LOUT,1000)
+ NC = 0
+ 2 CONTINUE
+ NC = NC+1
+ IF (IRANGE(NC).EQ.-100) GOTO 9999
+ I = IRANGE(NC)
+ WRITE(LOUT,1001) I,ISTHKK(I),IDHKK(I),JMOHKK(1,I),
+ & JMOHKK(2,I),JDAHKK(1,I),JDAHKK(2,I),
+ & PHKK(1,I),PHKK(2,I),PHKK(3,I),PHKK(4,I),
+ & PHKK(5,I)
+ GOTO 2
+ ENDIF
+
+ IF ((MODE.EQ.3).OR.(MODE.EQ.4)) THEN
+ WRITE(LOUT,1002)
+ 1002 FORMAT(/,1X,'EVTPLO:',14X,
+ & ' content of COMMON /DTEVT1/,/DTEVT2/',/,
+ & 15X,' -----------------------------------',/,/,
+ & ' ST ID M1 M2 D1 D2 IDR IDXR',
+ & ' NOBAM IDCH M',/)
+ DO 3 I=1,NHKK
+C IF ((ISTHKK(I).GT.10).OR.(ISTHKK(I).EQ.1)) THEN
+ KF = IDHKK(I)
+ IDCHK = KF/10000
+ IF ((((IDCHK.EQ.7).OR.(IDCHK.EQ.8)).AND.
+ & (KF.NE.80000)).OR.(IDHKK(I).EQ.99999)) KF = 92
+
+ CALL PYNAME(KF,CHAU)
+
+ WRITE(LOUT,1003) I,ISTHKK(I),IDHKK(I),JMOHKK(1,I),
+ & JMOHKK(2,I),JDAHKK(1,I),JDAHKK(2,I),
+ & IDRES(I),IDXRES(I),NOBAM(I),IDCH(I),
+ & PHKK(5,I),CHAU
+ 1003 FORMAT(I5,I5,I6,4I5,4I4,F8.4,2X,A)
+C ENDIF
+ 3 CONTINUE
+ ENDIF
+
+ IF (MODE.EQ.5) THEN
+ WRITE(LOUT,1004)
+ 1004 FORMAT(/,1X,'EVTPLO:',14X,' content of COMMON /DTREJC/',/,
+ & 15X,' --------------------------',/)
+ WRITE(LOUT,1005) IRPT,IRHHA,IRRES,LOMRES,LOBRES,IREMC,IRFRAG,
+ & IRSEA,IRCRON
+ 1005 FORMAT(1X,'IRPT = ',I5,' IRHHA = ',I5,/,
+ & 1X,'IRRES = ',2I5,' LOMRES = ',I5,' LOBRES = ',I5,/,
+ & 1X,'IREMC = ',10I5,/,
+ & 1X,'IRFRAG = ',I5,' IRSEA = ',I5,' IRCRON = ',I5,/)
+ ENDIF
+
+ 9999 RETURN
+ END
+*
+*===evtput=============================================================*
+*
+CDECK ID>, DT_EVTPUT
+ SUBROUTINE DT_EVTPUT(IST,ID,M1,M2,PX,PY,PZ,E,IDR,IDXR,IDC)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TINY10=1.0D-10,TINY4=1.0D-4,TINY3=1.0D-3,
+ & TINY2=1.0D-2,SQTINF=1.0D+15,ZERO=0.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+C IF (MODE.GT.100) THEN
+C WRITE(LOUT,'(1X,A,I5,A,I5)')
+C & 'EVTPUT: reset NHKK = ',NHKK,' to NHKK =',NHKK-MODE+100
+C NHKK = NHKK-MODE+100
+C RETURN
+C ENDIF
+ MO1 = M1
+ MO2 = M2
+ NHKK = NHKK+1
+
+ IF (NHKK.GT.NMXHKK) THEN
+ WRITE(LOUT,1000) NHKK
+ 1000 FORMAT(1X,'EVTPUT: NHKK exeeds NMXHKK = ',I7,
+ & '! program execution stopped..')
+ STOP
+ ENDIF
+ IF (M1.LT.0) MO1 = NHKK+M1
+ IF (M2.LT.0) MO2 = NHKK+M2
+ ISTHKK(NHKK) = IST
+ IDHKK(NHKK) = ID
+ JMOHKK(1,NHKK) = MO1
+ JMOHKK(2,NHKK) = MO2
+ JDAHKK(1,NHKK) = 0
+ JDAHKK(2,NHKK) = 0
+ IDRES(NHKK) = IDR
+ IDXRES(NHKK) = IDXR
+ IDCH(NHKK) = IDC
+** here we need to do something..
+ IF (ID.EQ.88888) THEN
+ IDMO1 = ABS(IDHKK(MO1))
+ IDMO2 = ABS(IDHKK(MO2))
+ IF ((IDMO1.LT.100).AND.(IDMO2.LT.100)) NOBAM(NHKK) = 3
+ IF ((IDMO1.LT.100).AND.(IDMO2.GT.100)) NOBAM(NHKK) = 4
+ IF ((IDMO1.GT.100).AND.(IDMO2.GT.100)) NOBAM(NHKK) = 5
+ IF ((IDMO1.GT.100).AND.(IDMO2.LT.100)) NOBAM(NHKK) = 6
+ ELSE
+ NOBAM(NHKK) = 0
+ ENDIF
+ IDBAM(NHKK) = IDT_ICIHAD(ID)
+ IF (MO1.GT.0) THEN
+ IF (JDAHKK(1,MO1).NE.0) THEN
+ JDAHKK(2,MO1) = NHKK
+ ELSE
+ JDAHKK(1,MO1) = NHKK
+ ENDIF
+ ENDIF
+ IF (MO2.GT.0) THEN
+ IF (JDAHKK(1,MO2).NE.0) THEN
+ JDAHKK(2,MO2) = NHKK
+ ELSE
+ JDAHKK(1,MO2) = NHKK
+ ENDIF
+ ENDIF
+C IF ((IDBAM(NHKK).GT.0).AND.(IDBAM(NHKK).NE.7)) THEN
+C PTOT = SQRT(PX**2+PY**2+PZ**2)
+C AM0 = SQRT(ABS( (E-PTOT)*(E+PTOT) ))
+C AMRQ = AAM(IDBAM(NHKK))
+C AMDIF2 = (AM0-AMRQ)*(AM0+AMRQ)
+C IF ((ABS(AMDIF2).GT.TINY3).AND.(E.LT.SQTINF).AND.
+C & (PTOT.GT.ZERO)) THEN
+C DELTA = -AMDIF2/(2.0D0*(E+PTOT))
+CC DELTA = (AMRQ2-AM2)/(2.0D0*(E+PTOT))
+C E = E+DELTA
+C PTOT1 = PTOT-DELTA
+C PX = PX*PTOT1/PTOT
+C PY = PY*PTOT1/PTOT
+C PZ = PZ*PTOT1/PTOT
+C ENDIF
+C ENDIF
+ PHKK(1,NHKK) = PX
+ PHKK(2,NHKK) = PY
+ PHKK(3,NHKK) = PZ
+ PHKK(4,NHKK) = E
+ PTOT = SQRT( PX**2+PY**2+PZ**2 )
+ IF ((IDHKK(NHKK).GE.22).AND.(IDHKK(NHKK).LE.24)) THEN
+ PHKK(5,NHKK) = PHKK(4,NHKK)**2-PTOT**2
+ PHKK(5,NHKK) = SIGN(SQRT(ABS(PHKK(5,NHKK))),PHKK(5,NHKK))
+ ELSE
+ PHKK(5,NHKK) = (PHKK(4,NHKK)-PTOT)*(PHKK(4,NHKK)+PTOT)
+C IF ((PHKK(5,NHKK).LT.0.0D0).AND.(ABS(PHKK(5,NHKK)).GT.TINY4))
+C & WRITE(LOUT,'(1X,A,G10.3)')
+C & 'EVTPUT: negative mass**2 ',PHKK(5,NHKK)
+ PHKK(5,NHKK) = SQRT(ABS(PHKK(5,NHKK)))
+ ENDIF
+ IDCHK = ID/10000
+ IF (((IDCHK.EQ.7).OR.(IDCHK.EQ.8)).AND.(ID.NE.80000)) THEN
+* special treatment for chains:
+* z coordinate of chain in Lab = pos. of target nucleon
+* time of chain-creation in Lab = time of passage of projectile
+* nucleus at pos. of taget nucleus
+C VHKK(1,NHKK) = 0.5D0*(VHKK(1,MO1)+VHKK(1,MO2))
+C VHKK(2,NHKK) = 0.5D0*(VHKK(2,MO1)+VHKK(2,MO2))
+ VHKK(1,NHKK) = VHKK(1,MO2)
+ VHKK(2,NHKK) = VHKK(2,MO2)
+ VHKK(3,NHKK) = VHKK(3,MO2)
+ VHKK(4,NHKK) = VHKK(3,MO2)/BLAB-VHKK(3,MO1)/BGLAB
+C WHKK(1,NHKK) = 0.5D0*(WHKK(1,MO1)+WHKK(1,MO2))
+C WHKK(2,NHKK) = 0.5D0*(WHKK(2,MO1)+WHKK(2,MO2))
+ WHKK(1,NHKK) = WHKK(1,MO1)
+ WHKK(2,NHKK) = WHKK(2,MO1)
+ WHKK(3,NHKK) = WHKK(3,MO1)
+ WHKK(4,NHKK) = -WHKK(3,MO1)/BLAB+WHKK(3,MO2)/BGLAB
+ ELSE
+ IF (MO1.GT.0) THEN
+ DO 1 I=1,4
+ VHKK(I,NHKK) = VHKK(I,MO1)
+ WHKK(I,NHKK) = WHKK(I,MO1)
+ 1 CONTINUE
+ ELSE
+ DO 2 I=1,4
+ VHKK(I,NHKK) = ZERO
+ WHKK(I,NHKK) = ZERO
+ 2 CONTINUE
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+*
+*===chasta=============================================================*
+*
+CDECK ID>, DT_CHASTA
+ SUBROUTINE DT_CHASTA(MODE)
+
+************************************************************************
+* This subroutine performs CHAin STAtistics and checks sequence of *
+* partons in dtevt1 and sorts them with projectile partons coming *
+* first if necessary. *
+* *
+* This version dated 8.5.00 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ CHARACTER*5 CCHTYP
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* pointer to chains in hkkevt common (used by qq-breaking mechanisms)
+ PARAMETER (MAXCHN=10000)
+ COMMON /DTIXCH/ IDXCHN(2,MAXCHN),NCHAIN
+
+ DIMENSION ICHCFG(10,10,9,2),ICHTYP(5,5),
+ & CCHTYP(9),ICHSTA(10),ITOT(10)
+ DATA ICHCFG /1800*0/
+ DATA (ICHTYP(1,K),K=1,5) / 0, 1, 3, 0, 0/
+ DATA (ICHTYP(2,K),K=1,5) / 2, 0, 0, 5, 0/
+ DATA (ICHTYP(3,K),K=1,5) / 4, 0, 0, 7, 0/
+ DATA (ICHTYP(4,K),K=1,5) / 0, 6, 8, 0, 0/
+ DATA (ICHTYP(5,K),K=1,5) / 0, 0, 0, 0, 9/
+ DATA ICHSTA / 21, 22, 31, 32, 41, 42, 51, 52, 61, 62/
+ DATA CCHTYP / ' q aq','aq q ',' q d ',' d q ','aq ad',
+ & 'ad aq',' d ad','ad d ',' g g '/
+*
+* initialization
+*
+ IF (MODE.EQ.-1) THEN
+ NCHAIN = 0
+*
+* loop over DTEVT1 and analyse chain configurations
+*
+ ELSEIF (MODE.EQ.0) THEN
+ DO 21 IDX=NPOINT(3),NHKK
+ IDCHK = IDHKK(IDX)/10000
+ IF (((IDCHK.EQ.7).OR.(IDCHK.EQ.8)).AND.
+ & (IDHKK(IDX).NE.80000).AND.
+ & (ISTHKK(IDX).NE.2).AND.(IDRES(IDX).EQ.0)) THEN
+ IF (JMOHKK(1,IDX).GT.JMOHKK(2,IDX)) THEN
+ WRITE(LOUT,*) ' CHASTA: JMOHKK(1,x) > JMOHKK(2,x) ',
+ & ' at entry ',IDX
+ GOTO 21
+ ENDIF
+*
+ IST1 = ABS(ISTHKK(JMOHKK(1,IDX)))
+ IST2 = ABS(ISTHKK(JMOHKK(2,IDX)))
+ IMO1 = IST1/10
+ IMO1 = IST1-10*IMO1
+ IMO2 = IST2/10
+ IMO2 = IST2-10*IMO2
+* swop parton entries if necessary since we need projectile partons
+* to come first in the common
+ IF (IMO1.GT.IMO2) THEN
+ NPTN = JMOHKK(2,IDX)-JMOHKK(1,IDX)+1
+ DO 22 K=1,NPTN/2
+ I0 = JMOHKK(1,IDX)-1+K
+ I1 = JMOHKK(2,IDX)+1-K
+ ITMP = ISTHKK(I0)
+ ISTHKK(I0) = ISTHKK(I1)
+ ISTHKK(I1) = ITMP
+ ITMP = IDHKK(I0)
+ IDHKK(I0) = IDHKK(I1)
+ IDHKK(I1) = ITMP
+ IF (JDAHKK(1,JMOHKK(1,I0)).EQ.I0)
+ & JDAHKK(1,JMOHKK(1,I0)) = I1
+ IF (JDAHKK(2,JMOHKK(1,I0)).EQ.I0)
+ & JDAHKK(2,JMOHKK(1,I0)) = I1
+ IF (JDAHKK(1,JMOHKK(2,I0)).EQ.I0)
+ & JDAHKK(1,JMOHKK(2,I0)) = I1
+ IF (JDAHKK(2,JMOHKK(2,I0)).EQ.I0)
+ & JDAHKK(2,JMOHKK(2,I0)) = I1
+ IF (JDAHKK(1,JMOHKK(1,I1)).EQ.I1)
+ & JDAHKK(1,JMOHKK(1,I1)) = I0
+ IF (JDAHKK(2,JMOHKK(1,I1)).EQ.I1)
+ & JDAHKK(2,JMOHKK(1,I1)) = I0
+ IF (JDAHKK(1,JMOHKK(2,I1)).EQ.I1)
+ & JDAHKK(1,JMOHKK(2,I1)) = I0
+ IF (JDAHKK(2,JMOHKK(2,I1)).EQ.I1)
+ & JDAHKK(2,JMOHKK(2,I1)) = I0
+ ITMP = JMOHKK(1,I0)
+ JMOHKK(1,I0) = JMOHKK(1,I1)
+ JMOHKK(1,I1) = ITMP
+ ITMP = JMOHKK(2,I0)
+ JMOHKK(2,I0) = JMOHKK(2,I1)
+ JMOHKK(2,I1) = ITMP
+ ITMP = JDAHKK(1,I0)
+ JDAHKK(1,I0) = JDAHKK(1,I1)
+ JDAHKK(1,I1) = ITMP
+ ITMP = JDAHKK(2,I0)
+ JDAHKK(2,I0) = JDAHKK(2,I1)
+ JDAHKK(2,I1) = ITMP
+ DO 23 J=1,4
+ RTMP1 = PHKK(J,I0)
+ RTMP2 = VHKK(J,I0)
+ RTMP3 = WHKK(J,I0)
+ PHKK(J,I0) = PHKK(J,I1)
+ VHKK(J,I0) = VHKK(J,I1)
+ WHKK(J,I0) = WHKK(J,I1)
+ PHKK(J,I1) = RTMP1
+ VHKK(J,I1) = RTMP2
+ WHKK(J,I1) = RTMP3
+ 23 CONTINUE
+ RTMP1 = PHKK(5,I0)
+ PHKK(5,I0) = PHKK(5,I1)
+ PHKK(5,I1) = RTMP1
+ ITMP = IDRES(I0)
+ IDRES(I0) = IDRES(I1)
+ IDRES(I1) = ITMP
+ ITMP = IDXRES(I0)
+ IDXRES(I0) = IDXRES(I1)
+ IDXRES(I1) = ITMP
+ ITMP = NOBAM(I0)
+ NOBAM(I0) = NOBAM(I1)
+ NOBAM(I1) = ITMP
+ ITMP = IDBAM(I0)
+ IDBAM(I0) = IDBAM(I1)
+ IDBAM(I1) = ITMP
+ ITMP = IDCH(I0)
+ IDCH(I0) = IDCH(I1)
+ IDCH(I1) = ITMP
+ ITMP = IHIST(1,I0)
+ IHIST(1,I0) = IHIST(1,I1)
+ IHIST(1,I1) = ITMP
+ ITMP = IHIST(2,I0)
+ IHIST(2,I0) = IHIST(2,I1)
+ IHIST(2,I1) = ITMP
+ 22 CONTINUE
+ ENDIF
+ IST1 = ABS(ISTHKK(JMOHKK(1,IDX)))
+ IST2 = ABS(ISTHKK(JMOHKK(2,IDX)))
+*
+* parton 1 (projectile side)
+ IF (IST1.EQ.21) THEN
+ IDX1 = 1
+ ELSEIF (IST1.EQ.22) THEN
+ IDX1 = 2
+ ELSEIF (IST1.EQ.31) THEN
+ IDX1 = 3
+ ELSEIF (IST1.EQ.32) THEN
+ IDX1 = 4
+ ELSEIF (IST1.EQ.41) THEN
+ IDX1 = 5
+ ELSEIF (IST1.EQ.42) THEN
+ IDX1 = 6
+ ELSEIF (IST1.EQ.51) THEN
+ IDX1 = 7
+ ELSEIF (IST1.EQ.52) THEN
+ IDX1 = 8
+ ELSEIF (IST1.EQ.61) THEN
+ IDX1 = 9
+ ELSEIF (IST1.EQ.62) THEN
+ IDX1 = 10
+ ELSE
+c WRITE(LOUT,*)
+c & ' CHASTA: unknown parton status flag (',
+c & IST1,') at entry ',JMOHKK(1,IDX),'(',IDX,')'
+ GOTO 21
+ ENDIF
+ ID = IDHKK(JMOHKK(1,IDX))
+ IF (ABS(ID).LE.4) THEN
+ IF (ID.GT.0) THEN
+ ITYP1 = 1
+ ELSE
+ ITYP1 = 2
+ ENDIF
+ ELSEIF (ABS(ID).GE.1000) THEN
+ IF (ID.GT.0) THEN
+ ITYP1 = 3
+ ELSE
+ ITYP1 = 4
+ ENDIF
+ ELSEIF (ID.EQ.21) THEN
+ ITYP1 = 5
+ ELSE
+ WRITE(LOUT,*)
+ & ' CHASTA: inconsistent parton identity (',
+ & ID,') at entry ',JMOHKK(1,IDX),'(',IDX,')'
+ GOTO 21
+ ENDIF
+*
+* parton 2 (target side)
+ IF (IST2.EQ.21) THEN
+ IDX2 = 1
+ ELSEIF (IST2.EQ.22) THEN
+ IDX2 = 2
+ ELSEIF (IST2.EQ.31) THEN
+ IDX2 = 3
+ ELSEIF (IST2.EQ.32) THEN
+ IDX2 = 4
+ ELSEIF (IST2.EQ.41) THEN
+ IDX2 = 5
+ ELSEIF (IST2.EQ.42) THEN
+ IDX2 = 6
+ ELSEIF (IST2.EQ.51) THEN
+ IDX2 = 7
+ ELSEIF (IST2.EQ.52) THEN
+ IDX2 = 8
+ ELSEIF (IST2.EQ.61) THEN
+ IDX2 = 9
+ ELSEIF (IST2.EQ.62) THEN
+ IDX2 = 10
+ ELSE
+c WRITE(LOUT,*)
+c & ' CHASTA: unknown parton status flag (',
+c & IST2,') at entry ',JMOHKK(2,IDX),'(',IDX,')'
+ GOTO 21
+ ENDIF
+ ID = IDHKK(JMOHKK(2,IDX))
+ IF (ABS(ID).LE.4) THEN
+ IF (ID.GT.0) THEN
+ ITYP2 = 1
+ ELSE
+ ITYP2 = 2
+ ENDIF
+ ELSEIF (ABS(ID).GE.1000) THEN
+ IF (ID.GT.0) THEN
+ ITYP2 = 3
+ ELSE
+ ITYP2 = 4
+ ENDIF
+ ELSEIF (ID.EQ.21) THEN
+ ITYP2 = 5
+ ELSE
+ WRITE(LOUT,*)
+ & ' CHASTA: inconsistent parton identity (',
+ & ID,') at entry ',JMOHKK(1,IDX),'(',IDX,')'
+ GOTO 21
+ ENDIF
+*
+* fill counter
+ ITYPE = ICHTYP(ITYP1,ITYP2)
+ IF (ITYPE.NE.0) THEN
+ ICHCFG(IDX1,IDX2,ITYPE,1) =ICHCFG(IDX1,IDX2,ITYPE,1)+1
+ NGLUON = JMOHKK(2,IDX)-JMOHKK(1,IDX)-1
+ ICHCFG(IDX1,IDX2,ITYPE,2) =
+ & ICHCFG(IDX1,IDX2,ITYPE,2)+NGLUON
+
+ NCHAIN = NCHAIN+1
+ IF (NCHAIN.GT.MAXCHN) THEN
+ WRITE(LOUT,*) ' CHASTA: NCHAIN > MAXCHN ! ',
+ & NCHAIN,MAXCHN
+ STOP
+ ENDIF
+ IDXCHN(1,NCHAIN) = IDX
+ IDXCHN(2,NCHAIN) = ITYPE
+ ELSE
+ WRITE(LOUT,*)
+ & ' CHASTA: inconsistent chain at entry ',IDX
+ GOTO 21
+ ENDIF
+ ENDIF
+ 21 CONTINUE
+*
+* write statistics to output unit
+*
+ ELSEIF (MODE.EQ.1) THEN
+C *** Commented by Chiara
+C WRITE(LOUT,'(/,A)') ' CHASTA: generated chain configurations'
+ DO 31 I=1,10
+C WRITE(LOUT,'(/,2A)')
+C & ' -----------------------------------------',
+C & '------------------------------------'
+C WRITE(LOUT,'(2A)')
+C & ' p\\t 21 22 31 32 41',
+C & ' 42 51 52 61 62'
+C WRITE(LOUT,'(2A)')
+C & ' -----------------------------------------',
+C & '------------------------------------'
+ DO 32 J=1,10
+ ITOT(J) = 0
+ DO 33 K=1,9
+ ITOT(J) = ITOT(J)+ICHCFG(I,J,K,1)
+ 33 CONTINUE
+ 32 CONTINUE
+C *** Commented by Chiara
+c WRITE(LOUT,'(1X,I2,5X,10I7,/)') ICHSTA(I),(ITOT(J),J=1,10)
+ DO 34 K=1,9
+ ISUM = 0
+ DO 35 J=1,10
+ ISUM = ISUM+ICHCFG(I,J,K,1)
+ 35 CONTINUE
+C *** Commented by Chiara
+C IF (ISUM.GT.0)
+C & WRITE(LOUT,'(1X,A5,2X,10I7)')
+C & CCHTYP(K),(ICHCFG(I,J,K,1),J=1,10)
+ 34 CONTINUE
+C WRITE(LOUT,'(2A)')
+C & ' -----------------------------------------',
+C & '-------------------------------'
+ 31 CONTINUE
+*
+ ELSE
+ WRITE(LOUT,*) ' CHASTA: MODE ',MODE,' not supported !'
+ STOP
+ ENDIF
+
+ RETURN
+ END
+*
+*===pohist=============================================================*
+*
+
+CDECK ID>, PHO_PHIST
+ SUBROUTINE PHO_PHIST(IMODE,WEIGHT)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-X,Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+
+ ILAB = 0
+ IF (IMODE.EQ.10) THEN
+ IMODE = 1
+ ILAB = 1
+ ENDIF
+ IF (ABS(IMODE).LT.1000) THEN
+* PHOJET-statistics
+C CALL POHISX(IMODE,WEIGHT)
+ IF (IMODE.EQ.-1) THEN
+ MODE = 1
+ XSTOT(1,1,1) = WEIGHT
+ ENDIF
+ IF (IMODE.EQ. 1) MODE = 2
+ IF (IMODE.EQ.-2) MODE = 3
+ IF (MODE.EQ.2) CALL DT_SWPPHO(ILAB)
+C IF (MODE.EQ.3) WRITE(LOUT,*)
+C & ' Sigma = ',XSPRO(1,1,1),' mb used for normalization'
+ CALL DT_HISTOG(MODE)
+ CALL DT_USRHIS(MODE)
+ ELSE
+* DTUNUC-statistics
+ MODE = IMODE/1000
+C IF (MODE.EQ.3) WRITE(LOUT,*)
+C & ' Sigma = ',XSPRO(1,1,1),' mb used for normalization'
+ CALL DT_HISTOG(MODE)
+ CALL DT_USRHIS(MODE)
+ ENDIF
+
+ RETURN
+ END
+*
+*===swppho=============================================================*
+*
+CDECK ID>, DT_SWPPHO
+ SUBROUTINE DT_SWPPHO(ILAB)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-X,Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,TINY14=1.0D-14)
+
+ LOGICAL LSTART
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* properties of photon/lepton projectiles
+ COMMON /DTGPRO/ VIRT,PGAMM(4),PLEPT0(4),PLEPT1(4),PNUCL(4),IDIREC
+
+**PHOJET105a
+C PARAMETER (NMXHEP=2000)
+C COMMON/HEPEVS/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+C &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
+C COMMON /GLOCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C COMMON /PLASAV/ PLAB
+**PHOJET110
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+**
+ DATA ICOUNT/0/
+
+ DATA LSTART /.TRUE./
+
+C IF ((IFRAME.EQ.1).AND.(ILAB.EQ.0).AND.LSTART) THEN
+ IF ((IFRAME.EQ.1).AND.LSTART) THEN
+ UMO = ECM
+ ELA = ZERO
+ PLA = ZERO
+ IDP = IDT_ICIHAD(IFPAP(1))
+ IDT = IDT_ICIHAD(IFPAP(2))
+ VIRT = PVIRT(1)
+ CALL DT_LTINI(IDP,IDT,ELA,PLA,UMO,0)
+ PLAB = PLA
+ LSTART = .FALSE.
+ ENDIF
+
+ NHKK = 0
+ ICOUNT = ICOUNT+1
+C NEVHKK = NEVHEP
+ NEVHKK = ICOUNT
+ IF (MOD(ICOUNT,500).EQ.0) WRITE(LOUT,*)' SWPPHO: event # ',ICOUNT
+ DO 1 I=3,NHEP
+ IF (ISTHEP(I).EQ.1) THEN
+ NHKK = NHKK+1
+ ISTHKK(NHKK) = 1
+ IDHKK(NHKK) = IDHEP(I)
+ JMOHKK(1,NHKK) = 0
+ JMOHKK(2,NHKK) = 0
+ JDAHKK(1,NHKK) = 0
+ JDAHKK(2,NHKK) = 0
+ DO 2 K=1,4
+ PHKK(K,NHKK) = PHEP(K,I)
+ VHKK(K,NHKK) = ZERO
+ WHKK(K,NHKK) = ZERO
+ 2 CONTINUE
+ IF ((IFRAME.EQ.1).AND.(ILAB.EQ.0))
+ & CALL DT_LTNUC(PHEP(3,I),PHEP(4,I),
+ & PHKK(3,NHKK),PHKK(4,NHKK),-3)
+ PHKK(5,NHKK) = PHEP(5,I)
+ IDRES(NHKK) = 0
+ IDXRES(NHKK) = 0
+ NOBAM(NHKK) = 0
+ IDBAM(NHKK) = IDT_ICIHAD(IDHEP(I))
+ IDCH(NHKK) = 0
+ ENDIF
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===histog=============================================================*
+*
+CDECK ID>, DT_HISTOG
+ SUBROUTINE DT_HISTOG(MODE)
+
+************************************************************************
+* This version dated 25.03.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ LOGICAL LFSP,LRNL
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* event flag used for histograms
+ COMMON /DTNORM/ ICEVT,IEVHKK
+* flags for activated histograms
+ COMMON /DTHIS3/ IHISPP(50),IHISXS(50),IXSTBL
+
+ IEVHKK = NEVHKK
+ GOTO (1,2,3) MODE
+
+*------------------------------------------------------------------
+* initialization
+ 1 CONTINUE
+ ICEVT = 0
+ IF (IHISPP(1).EQ.1) CALL DT_HISTAT(IDUM,1)
+ IF (IHISPP(2).EQ.1) CALL DT_HIMULT(1)
+
+ RETURN
+*------------------------------------------------------------------
+* filling of histogram with event-record
+ 2 CONTINUE
+ ICEVT = ICEVT+1
+
+ DO 20 I=1,NHKK
+ CALL DT_SWPFSP(I,LFSP,LRNL)
+ IF (LFSP) THEN
+ IF (IHISPP(1).EQ.1) CALL DT_HISTAT(I,2)
+ IF (IHISPP(2).EQ.1) CALL DT_HIMULT(2)
+ ENDIF
+ IF (IHISPP(1).EQ.1) CALL DT_HISTAT(I,5)
+ 20 CONTINUE
+ IF (IHISPP(1).EQ.1) CALL DT_HISTAT(IDUM,4)
+
+ RETURN
+*------------------------------------------------------------------
+* output
+ 3 CONTINUE
+ IF (IHISPP(1).EQ.1) CALL DT_HISTAT(IDUM,3)
+ IF (IHISPP(2).EQ.1) CALL DT_HIMULT(3)
+
+ RETURN
+ END
+*
+*===swpfsp=============================================================*
+*
+CDECK ID>, DT_SWPFSP
+ SUBROUTINE DT_SWPFSP(IDX,LFSP,LRNL)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,TINY14=1.0D-14)
+ PARAMETER (TWOPI=6.283185307179586476925286766559D+00,
+ & PI =TWOPI/TWO,
+ & BOG =TWOPI/360.0D0)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ INCLUDE './flukapro/(DIMPAR)'
+ INCLUDE './flukapro/(PAREVT)'
+
+* temporary storage for one final state particle
+ LOGICAL LFRAG,LGREY,LBLACK
+ COMMON /DTFSPA/ AMASS,PE,EECMS,PX,PY,PZ,PZCMS,PT,PTOT,ET,EKIN,
+ & SINTHE,COSTHE,THETA,THECMS,
+ & BETA,YY,YYCMS,ETA,ETACMS,XLAB,XF,
+ & IST,IDPDG,IDBJT,IBARY,ICHAR,MULDEF,
+ & LFRAG,LGREY,LBLACK
+
+ LOGICAL LFSP,LRNL
+
+ LFSP = .FALSE.
+ LRNL = .FALSE.
+ ISTRNL = 1000
+ MULDEF = 1
+ IF (LEVPRT) ISTRNL = 1001
+
+ IF (ABS(ISTHKK(IDX)).EQ.1) THEN
+ IST = ISTHKK(IDX)
+ IDPDG = IDHKK(IDX)
+ LFRAG = .FALSE.
+ IF (IDHKK(IDX).LT.80000) THEN
+ IDBJT = IDBAM(IDX)
+ IBARY = IIBAR(IDBJT)
+ ICHAR = IICH(IDBJT)
+ AMASS = AAM(IDBJT)
+ ELSEIF (IDHKK(IDX).EQ.80000) THEN
+ IDBJT = 0
+ IBARY = IDRES(IDX)
+ ICHAR = IDXRES(IDX)
+ AMASS = PHKK(5,IDX)
+ INUT = IBARY-ICHAR
+ IF ((ICHAR.EQ.1).AND.(INUT.EQ.1)) IDBJT = 116
+ IF ((ICHAR.EQ.1).AND.(INUT.EQ.2)) IDBJT = 117
+ IF ((ICHAR.EQ.2).AND.(INUT.EQ.1)) IDBJT = 118
+ IF ((ICHAR.EQ.2).AND.(INUT.EQ.2)) IDBJT = 119
+ IF (IDBJT.EQ.0) LFRAG = .TRUE.
+ ELSE
+ GOTO 9999
+ ENDIF
+ PE = PHKK(4,IDX)
+ PX = PHKK(1,IDX)
+ PY = PHKK(2,IDX)
+ PZ = PHKK(3,IDX)
+ PT2 = PX**2+PY**2
+ PT = SQRT(PT2)
+ PTOT = SQRT(PT2+PZ**2)
+ SINTHE = PT/MAX(PTOT,TINY14)
+ COSTHE = PZ/MAX(PTOT,TINY14)
+ IF (COSTHE.GT.ONE) THEN
+ THETA = ZERO
+ ELSEIF (COSTHE.LT.-ONE) THEN
+ THETA = TWOPI/2.0D0
+ ELSE
+ THETA = ACOS(COSTHE)
+ ENDIF
+ EKIN = PE-AMASS
+**sr 15.4.96 new E_t-definition
+ IF (IBARY.GT.0) THEN
+ ET = EKIN*SINTHE
+ ELSEIF (IBARY.LT.0) THEN
+ ET = (EKIN+TWO*AMASS)*SINTHE
+ ELSE
+ ET = PE*SINTHE
+ ENDIF
+**
+ XLAB = PZ/MAX(PPROJ,TINY14)
+C XLAB = PE/MAX(EPROJ,TINY14)
+ BETA = SQRT(ABS( (ONE-AMASS/MAX(PE,TINY14))
+ & *(ONE+AMASS/MAX(PE,TINY14)) ))
+ PPLUS = PE+PZ
+ PMINUS = PE-PZ
+ IF (PMINUS.GT.TINY14) THEN
+ YY = 0.5D0*LOG(ABS(PPLUS/PMINUS))
+ ELSE
+ YY = 100.0D0
+ ENDIF
+ IF ((THETA.GT.TINY14).AND.((PI-THETA).GT.TINY14)) THEN
+ ETA = -LOG(TAN(THETA/TWO))
+ ELSE
+ ETA = 100.0D0
+ ENDIF
+ IF (IFRAME.EQ.1) THEN
+ CALL DT_LTNUC(PZ,PE,PZCMS,EECMS,3)
+ PPLUS = EECMS+PZCMS
+ PMINUS = EECMS-PZCMS
+ IF ((PPLUS*PMINUS).GT.TINY14) THEN
+ YYCMS = 0.5D0*LOG(ABS(PPLUS/PMINUS))
+ ELSE
+ YYCMS = 100.0D0
+ ENDIF
+ PTOTCM = SQRT(PT2+PZCMS**2)
+ COSTH = PZCMS/MAX(PTOTCM,TINY14)
+ IF (COSTH.GT.ONE) THEN
+ THECMS = ZERO
+ ELSEIF (COSTH.LT.-ONE) THEN
+ THECMS = TWOPI/2.0D0
+ ELSE
+ THECMS = ACOS(COSTH)
+ ENDIF
+ IF ((THECMS.GT.TINY14).AND.((PI-THECMS).GT.TINY14)) THEN
+ ETACMS = -LOG(TAN(THECMS/TWO))
+ ELSE
+ ETACMS = 100.0D0
+ ENDIF
+ XF = PZCMS/MAX(PPCM,TINY14)
+ THECMS = THECMS/BOG
+ ELSE
+ PZCMS = PZ
+ EECMS = PE
+ YYCMS = YY
+ ETACMS = ETA
+ XF = XLAB
+ THECMS = THETA/BOG
+ ENDIF
+ THETA = THETA/BOG
+
+* set flag for "grey/black"
+ LGREY = .FALSE.
+ LBLACK = .FALSE.
+ EK = EKIN
+ IF (IDHKK(IDX).EQ.80000) EK = EKIN/DBLE(IBARY)
+ IF (MULDEF.EQ.1) THEN
+* EMU01-Def.
+ IF ( ( (IDBJT.EQ. 1).AND.(EK.GT. 26.0D-3).AND.
+ & (EK.LE.375.0D-3) ).OR.
+ & ( (IDBJT.EQ.13).AND.(EK.GT. 12.0D-3).AND.
+ & (EK.LE. 56.0D-3) ).OR.
+ & ( (IDBJT.EQ.14).AND.(EK.GT. 12.0D-3).AND.
+ & (EK.LE. 56.0D-3) ).OR.
+ & ( (IDBJT.EQ.15).AND.(EK.GT. 20.0D-3).AND.
+ & (EK.LE.198.0D-3) ).OR.
+ & ( (IDBJT.EQ.16).AND.(EK.GT. 20.0D-3).AND.
+ & (EK.LE.198.0D-3) ).OR.
+ & ( (IDBJT.NE. 1).AND.(IDBJT.NE.13).AND.
+ & (IDBJT.NE.14).AND.(IDBJT.NE.15).AND.
+ & (IDBJT.NE.16).AND.
+ & (BETA.GT.0.23D0).AND.(BETA.LE.0.70D0) ) )
+ & LGREY = .TRUE.
+ IF ( ( (IDBJT.EQ. 1).AND.(EK.LE. 26.0D-3) ).OR.
+ & ( (IDBJT.EQ.13).AND.(EK.LE. 12.0D-3) ).OR.
+ & ( (IDBJT.EQ.14).AND.(EK.LE. 12.0D-3) ).OR.
+ & ( (IDBJT.EQ.15).AND.(EK.LE. 20.0D-3) ).OR.
+ & ( (IDBJT.EQ.16).AND.(EK.LE. 20.0D-3) ).OR.
+ & ( (IDBJT.NE. 1).AND.(IDBJT.NE.13).AND.
+ & (IDBJT.NE.14).AND.(IDBJT.NE.15).AND.
+ & (IDBJT.NE.16).AND.(BETA.LE.0.23D0) ) )
+ & LBLACK = .TRUE.
+ ELSE
+* common Def.
+ IF ((BETA.GT.0.23D0).AND.(BETA.LE.0.70D0)) LGREY=.TRUE.
+ IF (BETA.LE.0.23D0) LBLACK=.TRUE.
+ ENDIF
+ LFSP = .TRUE.
+ ELSEIF (ABS(ISTHKK(IDX)).EQ.ISTRNL) THEN
+ IST = ISTHKK(IDX)
+ IDPDG = IDHKK(IDX)
+ LFRAG = .TRUE.
+ IDBJT = 0
+ IBARY = IDRES(IDX)
+ ICHAR = IDXRES(IDX)
+ AMASS = PHKK(5,IDX)
+ PE = PHKK(4,IDX)
+ PX = PHKK(1,IDX)
+ PY = PHKK(2,IDX)
+ PZ = PHKK(3,IDX)
+ PT2 = PX**2+PY**2
+ PT = SQRT(PT2)
+ PTOT = SQRT(PT2+PZ**2)
+ SINTHE = PT/MAX(PTOT,TINY14)
+ COSTHE = PZ/MAX(PTOT,TINY14)
+ IF (COSTHE.GT.ONE) THEN
+ THETA = ZERO
+ ELSEIF (COSTHE.LT.-ONE) THEN
+ THETA = TWOPI/2.0D0
+ ELSE
+ THETA = ACOS(COSTHE)
+ ENDIF
+ EKIN = PE-AMASS
+**sr 15.4.96 new E_t-definition
+C ET = PE*SINTHE
+ ET = EKIN*SINTHE
+**
+ IF ((THETA.GT.TINY14).AND.((PI-THETA).GT.TINY14)) THEN
+ ETA = -LOG(TAN(THETA/TWO))
+ ELSE
+ ETA = 100.0D0
+ ENDIF
+ THETA = THETA/BOG
+ LRNL = .TRUE.
+ ENDIF
+
+ 9999 CONTINUE
+ RETURN
+ END
+*
+*===himult=============================================================*
+*
+CDECK ID>, DT_HIMULT
+ SUBROUTINE DT_HIMULT(MODE)
+
+************************************************************************
+* Tables of average energies/multiplicities. *
+* This version dated 30.08.2000 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,TINY14=1.0D-14)
+
+ PARAMETER (SWMEXP=1.7D0)
+
+ CHARACTER*8 ANAMEH(4)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* temporary storage for one final state particle
+ LOGICAL LFRAG,LGREY,LBLACK
+ COMMON /DTFSPA/ AMASS,PE,EECMS,PX,PY,PZ,PZCMS,PT,PTOT,ET,EKIN,
+ & SINTHE,COSTHE,THETA,THECMS,
+ & BETA,YY,YYCMS,ETA,ETACMS,XLAB,XF,
+ & IST,IDPDG,IDBJT,IBARY,ICHAR,MULDEF,
+ & LFRAG,LGREY,LBLACK
+* event flag used for histograms
+ COMMON /DTNORM/ ICEVT,IEVHKK
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+
+ PARAMETER (NOPART=210)
+ DIMENSION AVMULT(4,NOPART),AVE(4,NOPART),AVSWM(4,NOPART),
+ & AVPT(4,NOPART),IAVPT(4,NOPART)
+ DATA ANAMEH /'DEUTERON','3-H ','3-HE ','4-HE '/
+
+ GOTO (1,2,3) MODE
+
+*------------------------------------------------------------------
+* initialization
+ 1 CONTINUE
+ DO 10 I=1,NOPART
+ DO 11 J=1,4
+ AVMULT(J,I) = ZERO
+ AVE(J,I) = ZERO
+ AVSWM(J,I) = ZERO
+ AVPT(J,I) = ZERO
+ IAVPT(J,I) = 0
+ 11 CONTINUE
+ 10 CONTINUE
+
+ RETURN
+
+*------------------------------------------------------------------
+* filling of histogram with event-record
+ 2 CONTINUE
+ IF (PE.LT.0.0D0) THEN
+ WRITE(LOUT,*) ' HIMULT: PE < 0 ! ',PE
+ RETURN
+ ENDIF
+ IF (.NOT.LFRAG) THEN
+ IVEL = 2
+ IF (LGREY) IVEL = 3
+ IF (LBLACK) IVEL = 4
+ AVE(1,IDBJT) = AVE(1,IDBJT) +PE
+ AVE(IVEL,IDBJT) = AVE(IVEL,IDBJT)+PE
+ AVPT(1,IDBJT) = AVPT(1,IDBJT) +PT
+ AVPT(IVEL,IDBJT) = AVPT(IVEL,IDBJT)+PT
+ IAVPT(1,IDBJT) = IAVPT(1,IDBJT) +1
+ IAVPT(IVEL,IDBJT) = IAVPT(IVEL,IDBJT)+1
+ AVSWM(1,IDBJT) = AVSWM(1,IDBJT) +PE**SWMEXP
+ AVSWM(IVEL,IDBJT) = AVSWM(IVEL,IDBJT)+PE**SWMEXP
+ AVMULT(1,IDBJT) = AVMULT(1,IDBJT) +ONE
+ AVMULT(IVEL,IDBJT) = AVMULT(IVEL,IDBJT)+ONE
+ IF (IDBJT.LT.116) THEN
+* total energy, multiplicity
+ AVE(1,30) = AVE(1,30) +PE
+ AVE(IVEL,30) = AVE(IVEL,30)+PE
+ AVPT(1,30) = AVPT(1,30) +PT
+ AVPT(IVEL,30) = AVPT(IVEL,30)+PT
+ IAVPT(1,30) = IAVPT(1,30) +1
+ IAVPT(IVEL,30) = IAVPT(IVEL,30)+1
+ AVSWM(1,30) = AVSWM(1,30)+PE**SWMEXP
+ AVSWM(IVEL,30) = AVSWM(IVEL,30)+PE**SWMEXP
+ AVMULT(1,30) = AVMULT(1,30) +ONE
+ AVMULT(IVEL,30) = AVMULT(IVEL,30)+ONE
+* charged energy, multiplicity
+ IF (ICHAR.LT.0) THEN
+ AVE(1,26) = AVE(1,26) +PE
+ AVE(IVEL,26) = AVE(IVEL,26)+PE
+ AVPT(1,26) = AVPT(1,26) +PT
+ AVPT(IVEL,26) = AVPT(IVEL,26)+PT
+ IAVPT(1,26) = IAVPT(1,26) +1
+ IAVPT(IVEL,26) = IAVPT(IVEL,26)+1
+ AVSWM(1,26) = AVSWM(1,26) +PE**SWMEXP
+ AVSWM(IVEL,26) = AVSWM(IVEL,26)+PE**SWMEXP
+ AVMULT(1,26) = AVMULT(1,26) +ONE
+ AVMULT(IVEL,26) = AVMULT(IVEL,26)+ONE
+ ENDIF
+ IF (ICHAR.NE.0) THEN
+ AVE(1,27) = AVE(1,27) +PE
+ AVE(IVEL,27) = AVE(IVEL,27)+PE
+ AVPT(1,27) = AVPT(1,27) +PT
+ AVPT(IVEL,27) = AVPT(IVEL,27)+PT
+ IAVPT(1,27) = IAVPT(1,27) +1
+ IAVPT(IVEL,27) = IAVPT(IVEL,27)+1
+ AVSWM(1,27) = AVSWM(1,27) +PE**SWMEXP
+ AVSWM(IVEL,27) = AVSWM(IVEL,27)+PE**SWMEXP
+ AVMULT(1,27) = AVMULT(1,27) +ONE
+ AVMULT(IVEL,27) = AVMULT(IVEL,27)+ONE
+ ENDIF
+ ENDIF
+ ENDIF
+
+ RETURN
+
+*------------------------------------------------------------------
+* output
+ 3 CONTINUE
+ WRITE(LOUT,3000)
+ 3000 FORMAT(/,1X,'HIMULT:',21X,'particle - statistics',/,
+ & 29X,'---------------------',/)
+ PRINT*,' MULDEF = ',MULDEF
+ IF (MULDEF.EQ.1) THEN
+ WRITE(LOUT,'(1X,A,/)') 'fast/grey/black: EMU-def.'
+ ELSE
+ BETGRE = 0.7D0
+ BETBLC = 0.23D0
+ WRITE(LOUT,3002) BETGRE,BETGRE,BETBLC,BETBLC
+ 3002 FORMAT(1X,'fast: beta > ',F4.2,' grey: ',F4.2,' > beta > '
+ & ,F4.2,' black: beta < ',F4.2,/)
+ ENDIF
+ WRITE(LOUT,3003) SWMEXP
+ 3003 FORMAT(1X,'particle |',12X,'average multiplicity',/,
+ & 13X,'| total fast',
+C & ' grey black K f(',F3.1,')',/,1X,
+ & ' grey black <pt> f(',F3.1,')',/,1X,
+ & '------------+--------------',
+ & '-------------------------------------------------')
+ DO 30 I=1,NOPART
+ DO 31 J=1,4
+ AVMULT(J,I) = AVMULT(J,I)/DBLE(MAX(ICEVT,1))
+ AVE(J,I) = AVE(J,I)/DBLE(MAX(ICEVT,1))/EPROJ
+ AVPT(J,I) = AVPT(J,I)/DBLE(MAX(IAVPT(J,I),1))
+ AVSWM(J,I) = AVSWM(J,I)/DBLE(MAX(ICEVT,1))/EPROJ**SWMEXP
+ 31 CONTINUE
+ IF (I.LE.115) THEN
+ WRITE(LOUT,3004) ANAME(I),I,
+ & AVMULT(1,I),AVMULT(2,I),
+ & AVMULT(3,I),AVMULT(4,I),
+C & AVE(1,I),AVSWM(1,I)
+ & AVPT(1,I),AVSWM(1,I)
+ ELSEIF (I.LE.119) THEN
+ WRITE(LOUT,3004) ANAMEH(I-115),I,
+ & AVMULT(1,I),AVMULT(2,I),
+ & AVMULT(3,I),AVMULT(4,I),
+C & AVE(1,I),AVSWM(1,I)
+ & AVPT(1,I),AVSWM(1,I)
+ ENDIF
+ 3004 FORMAT(1X,A8,I4,'| ',2F13.6,2F9.5,2F9.5)
+ 30 CONTINUE
+**temporary
+C WRITE(LOUT,'(A,F7.3)') ' number of charged heavy particles: ',
+C & AVMULT(3,27)+AVMULT(4,27)
+**
+
+ RETURN
+ END
+*
+*===histat=============================================================*
+*
+CDECK ID>, DT_HISTAT
+ SUBROUTINE DT_HISTAT(IDX,MODE)
+
+************************************************************************
+* This version dated 26.02.96 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO=0.0D0,ONE=1.0D0,TWO=2.0D0,TINY14=1.0D-14)
+ PARAMETER (NDIM=199)
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* Glauber formalism: cross sections
+ COMMON /DTGLXS/ ECMNN(NEB),Q2G(NQB),ECMNOW,Q2,
+ & XSTOT(NEB,NQB,NCOMPX),XSELA(NEB,NQB,NCOMPX),
+ & XSQEP(NEB,NQB,NCOMPX),XSQET(NEB,NQB,NCOMPX),
+ & XSQE2(NEB,NQB,NCOMPX),XSPRO(NEB,NQB,NCOMPX),
+ & XSDEL(NEB,NQB,NCOMPX),XSDQE(NEB,NQB,NCOMPX),
+ & XETOT(NEB,NQB,NCOMPX),XEELA(NEB,NQB,NCOMPX),
+ & XEQEP(NEB,NQB,NCOMPX),XEQET(NEB,NQB,NCOMPX),
+ & XEQE2(NEB,NQB,NCOMPX),XEPRO(NEB,NQB,NCOMPX),
+ & XEDEL(NEB,NQB,NCOMPX),XEDQE(NEB,NQB,NCOMPX),
+ & BSLOPE,NEBINI,NQBINI
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+* properties of interacting particles
+ COMMON /DTPRTA/ IT,ITZ,IP,IPZ,IJPROJ,IBPROJ,IJTARG,IBTARG
+* rejection counter
+ COMMON /DTREJC/ IRPT,IRHHA,IRRES(2),LOMRES,LOBRES,
+ & IRCHKI(2),IRFRAG,IRCRON(3),IREVT,
+ & IREXCI(3),IRDIFF(2),IRINC
+* statistics: residual nuclei
+ COMMON /DTSTA2/ EXCDPM(4),EXCEVA(2),
+ & NINCGE,NINCCO(2,3),NINCHR(2,2),NINCWO(2),
+ & NINCST(2,4),NINCEV(2),
+ & NRESTO(2),NRESPR(2),NRESNU(2),NRESBA(2),
+ & NRESPB(2),NRESCH(2),NRESEV(4),
+ & NEVA(2,6),NEVAGA(2),NEVAHT(2),NEVAHY(2,2,240),
+ & NEVAFI(2,2)
+* parameter for intranuclear cascade
+ LOGICAL LPAULI
+ COMMON /DTFOTI/ TAUFOR,KTAUGE,ITAUVE,INCMOD,LPAULI
+
+ INCLUDE './flukapro/(DIMPAR)'
+ INCLUDE './flukapro/(PAREVT)'
+ INCLUDE './flukapro/(FRBKCM)'
+ INCLUDE './flukapro/(EVAPAR)'
+
+* temporary storage for one final state particle
+ LOGICAL LFRAG,LGREY,LBLACK
+ COMMON /DTFSPA/ AMASS,PE,EECMS,PX,PY,PZ,PZCMS,PT,PTOT,ET,EKIN,
+ & SINTHE,COSTHE,THETA,THECMS,
+ & BETA,YY,YYCMS,ETA,ETACMS,XLAB,XF,
+ & IST,IDPDG,IDBJT,IBARY,ICHAR,MULDEF,
+ & LFRAG,LGREY,LBLACK
+* event flag used for histograms
+ COMMON /DTNORM/ ICEVT,IEVHKK
+* statistics: double-Pomeron exchange
+ COMMON /DTFLG2/ INTFLG,IPOPO
+
+ DIMENSION EMUSAM(NCOMPX)
+
+ CHARACTER*13 CMSG(3)
+ DATA CMSG /'not requested','not requested','not requested'/
+
+ GOTO (1,2,3,4,5) MODE
+
+*------------------------------------------------------------------
+* initialization
+ 1 CONTINUE
+* emulsion treatment
+ IF (NCOMPO.GT.0) THEN
+ DO 10 I=1,NCOMPX
+ EMUSAM(I) = ZERO
+ 10 CONTINUE
+ ENDIF
+* common /DTSTA2/, statistics on i.n.c., residual nuclei, evap.
+ NINCGE = 0
+ DO 11 I=1,2
+ EXCDPM(I) = ZERO
+ EXCDPM(I+2) = ZERO
+ EXCEVA(I) = ZERO
+ NINCWO(I) = 0
+ NINCEV(I) = 0
+ NRESTO(I) = 0
+ NRESPR(I) = 0
+ NRESNU(I) = 0
+ NRESBA(I) = 0
+ NRESPB(I) = 0
+ NRESCH(I) = 0
+ NRESEV(I) = 0
+ NRESEV(I+2) = 0
+ NEVAGA(I) = 0
+ NEVAHT(I) = 0
+ NEVAFI(1,I) = 0
+ NEVAFI(2,I) = 0
+ DO 12 J=1,6
+ IF (J.LE.2) NINCHR(I,J) = 0
+ IF (J.LE.3) NINCCO(I,J) = 0
+ IF (J.LE.4) NINCST(I,J) = 0
+ NEVA(I,J) = 0
+ 12 CONTINUE
+ DO 13 J=1,210
+ NEVAHY(1,I,J) = 0
+ NEVAHY(2,I,J) = 0
+ 13 CONTINUE
+ 11 CONTINUE
+ MAXGEN = 0
+**dble Po statistics.
+ KPOPO = 0
+
+ RETURN
+*------------------------------------------------------------------
+* filling of histogram with event-record
+ 2 CONTINUE
+ IF (IST.EQ.-1) THEN
+ IF (.NOT.LFRAG) THEN
+ IF (IDPDG.EQ.2212) THEN
+ NEVA(NOBAM(IDX),1) = NEVA(NOBAM(IDX),1)+1
+ ELSEIF (IDPDG.EQ.2112) THEN
+ NEVA(NOBAM(IDX),2) = NEVA(NOBAM(IDX),2)+1
+ ELSEIF (IDPDG.EQ.22) THEN
+ NEVAGA(NOBAM(IDX)) = NEVAGA(NOBAM(IDX))+1
+ ELSEIF (IDPDG.EQ.80000) THEN
+ IF (IDBJT.EQ.116) THEN
+ NEVA(NOBAM(IDX),3) = NEVA(NOBAM(IDX),3)+1
+ ELSEIF (IDBJT.EQ.117) THEN
+ NEVA(NOBAM(IDX),4) = NEVA(NOBAM(IDX),4)+1
+ ELSEIF (IDBJT.EQ.118) THEN
+ NEVA(NOBAM(IDX),5) = NEVA(NOBAM(IDX),5)+1
+ ELSEIF (IDBJT.EQ.119) THEN
+ NEVA(NOBAM(IDX),6) = NEVA(NOBAM(IDX),6)+1
+ ENDIF
+ ENDIF
+ ELSE
+* heavy fragments (here: fission products only)
+ NEVAHY(NOBAM(IDX),1,IBARY) = NEVAHY(NOBAM(IDX),1,IBARY)+1
+ NEVAHY(NOBAM(IDX),2,ICHAR) = NEVAHY(NOBAM(IDX),2,ICHAR)+1
+ NEVAHT(NOBAM(IDX)) = NEVAHT(NOBAM(IDX))+1
+ ENDIF
+ ELSEIF ((IST.EQ.1).AND.(.NOT.LFRAG)) THEN
+ IF (IDCH(IDX).GT.MAXGEN) MAXGEN = IDCH(IDX)
+ ENDIF
+
+ RETURN
+*------------------------------------------------------------------
+* output
+ 3 CONTINUE
+
+**dble Po statistics.
+C WRITE(LOUT,'(1X,A,2I7,2E12.4)')
+C & '# evts. / # dble-Po. evts / s_in / s_popo :',
+C & ICEVT,KPOPO,XSPRO(1,1,1),XSPRO(1,1,1)*DBLE(KPOPO)/DBLE(ICEVT)
+
+* emulsion treatment
+ IF (NCOMPO.GT.0) THEN
+ WRITE(LOUT,3000)
+ 3000 FORMAT(/,1X,'HISTAT:',14X,'statistics - target emulsion',/,
+ & 22X,'----------------------------',/,/,19X,
+ & 'mass charge fraction',/,39X,
+ & 'input treated',/)
+ DO 30 I=1,NCOMPO
+ WRITE(LOUT,3013) I,IEMUMA(I),IEMUCH(I),EMUFRA(I),
+ & EMUSAM(I)/DBLE(ICEVT)
+ 3013 FORMAT(12X,I2,1X,2I8,6X,F7.3,5X,F7.3)
+ 30 CONTINUE
+ ENDIF
+
+* i.n.c. statistics: output
+ WRITE(LOUT,3001) ICEVT,NRESEV(2),IRINC
+ 3001 FORMAT(/,1X,'HISTAT:',14X,'statistics - intranuclear cascade',/,
+ & 22X,'---------------------------------',/,/,1X,
+ & 'no. of events for normalization: (accepted final events,',
+ & ' evt)',4X,I6,/,34X,'(events before evap.-step, evt1)',I6,
+ & /,1X,'no. of rejected events due to intranuclear',
+ & ' cascade',15X,I6,/)
+ ICEV = MAX(ICEVT,1)
+ ICEV1 = ICEV
+ IF (LEVPRT) ICEV1 = MAX(NRESEV(2),1)
+ WRITE(LOUT,3002)
+ & (DBLE(NINCWO(I))/DBLE(ICEV),I=1,2),
+ & ((DBLE(NINCST(I,J))/DBLE(ICEV),I=1,2),J=1,4),
+ & KTAUGE,DBLE(NINCGE)/DBLE(ICEV),
+ & (DBLE(NINCCO(I,1)+NINCCO(I,2)+NINCCO(I,3))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NINCCO(I,2))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NINCCO(I,3))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NINCCO(I,1))/DBLE(ICEV1),I=1,2)
+ 3002 FORMAT(1X,'no. of wounded nucl. in proj./ target (mean per evt)',
+ & 5X,F6.2,' /',F6.2,/,1X,'no. of particles unable to escape',
+ & ' proj./ target (mean per evt)',/,8X,'baryons: pos. ',
+ & F7.3,' /',F7.3,' neg. ',F7.3,' /',F7.3,/,8X,
+ & 'mesons: pos. ',F7.3,' /',F7.3,' neg. ',F7.3,' /',F7.3,
+ & /,1X,'maximum no. of generations treated (maximum allowed:'
+ & ,I4,')',/,43X,'(mean per evt)',5X,F6.2,/,1X,'no. of sec.',
+ & ' interactions in proj./ target (mean per evt1)',
+ & F7.3,' /',F7.3,/,8X,'out of which by inelastic',
+ & ' interactions',12X,F7.3,' /',F7.3,/,21X,'by elastic ',
+ & 'interactions',14X,F7.3,' /',F7.3,/,21X,'by absorption ',
+ & '(ap, K-, pi- only) ',F7.3,' /',F7.3,/)
+ WRITE(LOUT,3003) NRESEV(2),NRESEV(4),IREXCI,
+ & IREXCI(1)+IREXCI(2)+IREXCI(3)
+ 3003 FORMAT(/,1X,'HISTAT:',14X,'statistics - residual nuclei, ',
+ & 'evaporation',/,22X,'-----------------------------',
+ & '------------',/,/,1X,'no. of events for normal.: ',
+ & '(events handled by FICONF, evt)',7X,I6,/,28X,'(events',
+ & ' passing the evap.-step, evt1) ',I6,/,1X,'no. of',
+ & ' rejected events (',I4,',',I4,',',I4,')',22X,I6,/)
+
+ WRITE(LOUT,3004)
+ 3004 FORMAT(/,22X,'1) before evaporation-step:',/)
+ ICEV = MAX(NRESEV(2),1)
+ WRITE(LOUT,3005)
+ & (DBLE(NRESTO(I))/DBLE(ICEV),I=1,2),
+ & (DBLE(NRESPR(I))/DBLE(ICEV),I=1,2),
+ & (DBLE(NRESNU(I))/DBLE(ICEV),I=1,2),
+ & (DBLE(NRESBA(I))/DBLE(ICEV),I=1,2),
+ & (DBLE(NRESPB(I))/DBLE(ICEV),I=1,2),
+ & (DBLE(NRESCH(I))/DBLE(ICEV),I=1,2),
+ & (EXCDPM(I)/DBLE(ICEV),I=1,2),
+ & (EXCDPM(I+2)/DBLE(ICEV),I=1,2)
+ 3005 FORMAT(1X,'residual nuclei: (mean values per evt)',12X,
+ & 'proj. / target',/,/,8X,'total number of particles',15X,
+ & 2F9.3,/,8X,'out of which: protons',19X,2F9.3,/,22X,
+ & 'neutrons',18X,2F9.3,/,22X,'baryons',19X,2F9.3,/,22X,
+ & 'pos. baryons',14X,2F9.3,/,8X,'total charge',28X,2F9.3,/,
+ & /,8X,'excitation energy (bef. evap.-step) ',2E11.3,/,
+ & 8X,'excitation energy per nucleon ',2E11.3,/,/)
+
+* evaporation / fission / fragmentation statistics: output
+ ICEV = MAX(NRESEV(2),1)
+ ICEV1 = MAX(NRESEV(4),1)
+ NTEVA1 =
+ & NEVA(1,1)+NEVA(1,2)+NEVA(1,3)+NEVA(1,4)+NEVA(1,5)+NEVA(1,6)
+ NTEVA2 =
+ & NEVA(2,1)+NEVA(2,2)+NEVA(2,3)+NEVA(2,4)+NEVA(2,5)+NEVA(2,6)
+ IF (LEVPRT) THEN
+ IF (IFISS.EQ.1) CMSG(1) = 'requested '
+ IF (LFRMBK) CMSG(2) = 'requested '
+ IF (LDEEXG) CMSG(3) = 'requested '
+ WRITE(LOUT,3006)
+ & CMSG,
+ & DBLE(NTEVA1)/DBLE(ICEV1),DBLE(NTEVA2)/DBLE(ICEV1),
+ & (DBLE(NEVA(I,1))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVA(I,2))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVA(I,3))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVA(I,4))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVA(I,5))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVA(I,6))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVAGA(I))/DBLE(ICEV1),I=1,2),
+ & (DBLE(NEVAHT(I))/DBLE(ICEV1),I=1,2)
+ 3006 FORMAT(22X,'2) after evaporation-step:',/,/,1X,'Fission:',
+ & 13X,A13,/,1X,'Fermi-Break-up:',6X,A13,/,1X,'Gamma-',
+ & 'deexcitation:',2X,A13,/,/,
+ & 1X,'evaporation/deexcitation: (mean values per evt1) ',
+ & 'proj. / target',/,/,8X,'total number of evap. particles',
+ & 9X,2F9.3,/,8X,'out of which: protons',19X,2F9.3,/,22X,
+ & 'neutrons',18X,2F9.3,/,22X,'deuterons',17X,2F9.3,/,22X,
+ & '3-H',23X,2F9.3,/,22X,'3-He',22X,2F9.3,/,22X,'4-He',22X,
+ & 2F9.3,/,8X,'nucl. deexcit. gammas',19X,2F9.3,/,8X,
+ & 'heavy fragments',25X,2F9.3,/)
+ IF (IFISS.EQ.1) THEN
+ WRITE(LOUT,3007) NEVAFI(1,1),NEVAFI(1,2),
+ & NEVAFI(2,1),NEVAFI(2,2),
+ & DBLE(NEVAFI(2,1))/DBLE(MAX(NEVAFI(1,1),1))*100.0D0,
+ & DBLE(NEVAFI(2,2))/DBLE(MAX(NEVAFI(1,2),1))*100.0D0
+ 3007 FORMAT(1X,'Fission: total number of events',14X,2I9,/
+ & 12X,'out of which fission occured',8X,2I9,/,
+ & 50X,'(',F5.2,'%) (',F5.2,'%)',/)
+ ENDIF
+C IF ((LFRMBK).OR.(IFISS.EQ.1)) THEN
+C WRITE(LOUT,3008)
+C3008 FORMAT(1X,'heavy fragments - statistics:',7X,'charge',
+C & ' proj. / target',/)
+C DO 31 I=1,210
+C IF ((NEVAHY(1,2,I).NE.0).OR.(NEVAHY(2,2,I).NE.0)) THEN
+C WRITE(LOUT,3009) I,
+C & (DBLE(NEVAHY(K,2,I))*XSPRO(1,1,1)/DBLE(ICEV1),K=1,2)
+C3009 FORMAT(38X,I3,3X,2E12.3)
+C ENDIF
+C 31 CONTINUE
+C WRITE(LOUT,3010)
+C3010 FORMAT(1X,'heavy fragments - statistics:',7X,'mass ',
+C & ' proj. / target',/)
+C DO 32 I=1,210
+C IF ((NEVAHY(1,1,I).NE.0).OR.(NEVAHY(2,1,I).NE.0)) THEN
+C WRITE(LOUT,3011) I,
+C & (DBLE(NEVAHY(K,1,I))*XSPRO(1,1,1)/DBLE(ICEV1),K=1,2)
+C3011 FORMAT(38X,I3,3X,2E12.3)
+C ENDIF
+C 32 CONTINUE
+C WRITE(LOUT,*)
+C ENDIF
+ ELSE
+ WRITE(LOUT,3012)
+ 3012 FORMAT(22X,'2) after evaporation-step:',/,/,1X,
+ & 'Evaporation: not requested',/)
+ ENDIF
+
+ RETURN
+*------------------------------------------------------------------
+* filling of histogram with event-record
+ 4 CONTINUE
+* emulsion treatment
+ IF (NCOMPO.GT.0) THEN
+ DO 40 I=1,NCOMPO
+ IF (IT.EQ.IEMUMA(I)) THEN
+ EMUSAM(I) = EMUSAM(I)+ONE
+ ENDIF
+ 40 CONTINUE
+ ENDIF
+ NINCGE = NINCGE+MAXGEN
+ MAXGEN = 0
+**dble Po statistics.
+ IF (IPOPO.EQ.1) KPOPO = KPOPO+1
+
+ RETURN
+*------------------------------------------------------------------
+* filling of histogram with event-record
+ 5 CONTINUE
+ IF ((ISTHKK(IDX).EQ.15).OR.(ISTHKK(IDX).EQ.16)) THEN
+ IB = IIBAR(IDBAM(IDX))
+ IC = IICH(IDBAM(IDX))
+ J = ISTHKK(IDX)-14
+ IF ( ((ABS(IB).EQ.1).AND.(IC.EQ.1)).OR.(IC.EQ.0) ) THEN
+ NINCST(J,1) = NINCST(J,1)+1
+ ELSEIF ((ABS(IB).EQ.1).AND.(IC.EQ.-1)) THEN
+ NINCST(J,2) = NINCST(J,2)+1
+ ELSEIF ((ABS(IB).EQ.0).AND.(IC.EQ. 1)) THEN
+ NINCST(J,3) = NINCST(J,3)+1
+ ELSEIF ((ABS(IB).EQ.0).AND.(IC.EQ.-1)) THEN
+ NINCST(J,4) = NINCST(J,4)+1
+ ENDIF
+ ELSEIF (ISTHKK(IDX).EQ.17) THEN
+ NINCWO(1) = NINCWO(1)+1
+ ELSEIF (ISTHKK(IDX).EQ.18) THEN
+ NINCWO(2) = NINCWO(2)+1
+ ELSEIF (ISTHKK(IDX).EQ.1001) THEN
+ IB = IDRES(IDX)
+ IC = IDXRES(IDX)
+ IF (IC.GT.0) THEN
+ NEVAHY(NOBAM(IDX),1,IB) = NEVAHY(NOBAM(IDX),1,IB)+1
+ NEVAHY(NOBAM(IDX),2,IC) = NEVAHY(NOBAM(IDX),2,IC)+1
+ ENDIF
+ NEVAHT(NOBAM(IDX)) = NEVAHT(NOBAM(IDX))+1
+ ENDIF
+
+ RETURN
+ END
+*
+*===newhgr=============================================================*
+*
+CDECK ID>, DT_NEWHGR
+ SUBROUTINE DT_NEWHGR(XLIM1,XLIM2,XLIM3,XLIMB,IBIN,IREFN)
+
+************************************************************************
+* *
+* Histogram initialization. *
+* *
+* input: XLIM1/XLIM2 lower/upper edge of histogram-window *
+* XLIM3 bin size *
+* IBIN > 0 number of bins in equidistant lin. binning *
+* = -1 reset histograms *
+* < -1 |IBIN| number of bins in equidistant log. *
+* binning or log. binning in user def. struc. *
+* XLIMB(*) user defined bin structure *
+* *
+* The bin structure is sensitive to *
+* XLIM1, XLIM3, IBIN if XLIM3 > 0 (lin.) *
+* XLIM1, XLIM2, IBIN if XLIM3 = 0 (lin. & log.) *
+* XLIMB, IBIN if XLIM3 < 0 *
+* *
+* *
+* output: IREFN histogram index *
+* (= -1 for inconsistent histogr. request) *
+* *
+* This subroutine is based on a original version by R. Engel. *
+* This version dated 22.4.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ LOGICAL LSTART
+
+ PARAMETER (ZERO = 0.0D0,
+ & TINY = 1.0D-10)
+
+ DIMENSION XLIMB(*)
+
+* histograms
+
+ PARAMETER (NHIS=150, NDIM=250)
+
+ COMMON /DTHIS1/ HIST(7,NHIS,NDIM),DENTRY(2,NHIS),OVERF(NHIS),
+ & UNDERF(NHIS),IBINS(NHIS),ISWI(NHIS),IHISL
+* auxiliary common for histograms
+ COMMON /DTHIS2/ TMPHIS(3,NHIS,NDIM),TMPUFL(NHIS),TMPOFL(NHIS)
+
+ DATA LSTART /.TRUE./
+
+* reset histogram counter
+ IF (LSTART.OR.(IBIN.EQ.-1)) THEN
+ IHISL = 0
+ IF (IBIN.EQ.-1) RETURN
+ LSTART = .FALSE.
+ ENDIF
+
+ IHIS = IHISL+1
+* check for maximum number of allowed histograms
+ IF (IHIS.GT.NHIS) THEN
+ WRITE(LOUT,1003) IHIS,NHIS,IHIS
+ 1003 FORMAT(1X,'NEWHGR: warning! number of histograms (',
+ & I4,') exceeds array size (',I4,')',/,21X,
+ & 'histogram',I3,' skipped!')
+ GOTO 9999
+ ENDIF
+
+ IREFN = IHIS
+ IBINS(IHIS) = ABS(IBIN)
+* check requested number of bins
+ IF (IBINS(IHIS).GE.NDIM) THEN
+ WRITE(LOUT,1000) IBIN,NDIM,NDIM
+ 1000 FORMAT(1X,'NEWHGR: warning! number of bins (',
+ & I3,') exceeds array size (',I3,')',/,21X,
+ & 'and will be reset to ',I3)
+ IBINS(IHIS) = NDIM
+ ENDIF
+ IF (IBINS(IHIS).EQ.0) THEN
+ WRITE(LOUT,1001) IBIN,IHIS
+ 1001 FORMAT(1X,'NEWHGR: warning! inconsistent number of',
+ & ' bins (',I3,')',/,21X,'histogram',I3,' skipped!')
+ GOTO 9999
+ ENDIF
+
+* initialize arrays
+ DO 1 I=1,NDIM
+ DO 2 K=1,3
+ HIST(K,IHIS,I) = ZERO
+ HIST(K+3,IHIS,I) = ZERO
+ TMPHIS(K,IHIS,I) = ZERO
+ 2 CONTINUE
+ HIST(7,IHIS,I) = ZERO
+ 1 CONTINUE
+ DENTRY(1,IHIS)= ZERO
+ DENTRY(2,IHIS)= ZERO
+ OVERF(IHIS) = ZERO
+ UNDERF(IHIS) = ZERO
+ TMPUFL(IHIS) = ZERO
+ TMPOFL(IHIS) = ZERO
+
+* bin str. sensitive to lower edge, bin size, and numb. of bins
+ IF (XLIM3.GT.ZERO) THEN
+ DO 3 K=1,IBINS(IHIS)+1
+ HIST(1,IHIS,K) = XLIM1+DBLE(K-1)*XLIM3
+ 3 CONTINUE
+ ISWI(IHIS) = 1
+* bin str. sensitive to lower/upper edge and numb. of bins
+ ELSEIF (XLIM3.EQ.ZERO) THEN
+* linear binning
+ IF (IBIN.GT.0) THEN
+ XLOW = XLIM1
+ XHI = XLIM2
+ IF (XLIM2.LE.XLIM1) THEN
+ WRITE(LOUT,1002) XLIM1,XLIM2
+ 1002 FORMAT(1X,'NEWHGR: warning! inconsistent x-range',
+ & /,21X,'(XLIM1,XLIM2 = ',2E11.4,')')
+ GOTO 9999
+ ENDIF
+ ISWI(IHIS) = 1
+ ELSEIF (IBIN.LT.-1) THEN
+* logarithmic binning
+ IF ((XLIM1.LE.ZERO).OR.(XLIM2.LE.ZERO)) THEN
+ WRITE(LOUT,1004) XLIM1,XLIM2
+ 1004 FORMAT(1X,'NEWHGR: warning! inconsistent log. ',
+ & 'binning',/,21X,'(XLIM1,XLIM2 = ',2E11.4,')')
+ GOTO 9999
+ ENDIF
+ IF (XLIM2.LE.XLIM1) THEN
+ WRITE(LOUT,1005) XLIM1,XLIM2
+ 1005 FORMAT(1X,'NEWHGR: warning! inconsistent x-range',
+ & /,21X,'(XLIM1,XLIM2 = ',2E11.4,')')
+ GOTO 9999
+ ENDIF
+ XLOW = LOG10(XLIM1)
+ XHI = LOG10(XLIM2)
+ ISWI(IHIS) = 3
+ ENDIF
+ DX = ABS(XHI-XLOW)/DBLE(MAX(IBINS(IHIS),1))
+ DO 4 K=1,IBINS(IHIS)+1
+ HIST(1,IHIS,K) = XLOW+DBLE(K-1)*DX
+ 4 CONTINUE
+ ELSE
+* user defined bin structure
+ DO 5 K=1,IBINS(IHIS)+1
+ IF (IBIN.GT.0) THEN
+ HIST(1,IHIS,K) = XLIMB(K)
+ ISWI(IHIS) = 2
+ ELSEIF (IBIN.LT.-1) THEN
+ HIST(1,IHIS,K) = LOG10(XLIMB(K))
+ ISWI(IHIS) = 4
+ ENDIF
+ 5 CONTINUE
+ ENDIF
+
+* histogram accepted
+ IHISL = IHIS
+
+ RETURN
+
+ 9999 CONTINUE
+ IREFN = -1
+ RETURN
+ END
+*
+*===filhgr=============================================================*
+*
+CDECK ID>, DT_FILHGR
+ SUBROUTINE DT_FILHGR(XI,YI,IHIS,NEVT)
+
+************************************************************************
+* *
+* Scoring for histogram IHIS. *
+* *
+* This subroutine is based on a original version by R. Engel. *
+* This version dated 23.4.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO = 0.0D0,
+ & ONE = 1.0D0,
+ & TINY = 1.0D-10)
+
+* histograms
+
+ PARAMETER (NHIS=150, NDIM=250)
+
+ COMMON /DTHIS1/ HIST(7,NHIS,NDIM),DENTRY(2,NHIS),OVERF(NHIS),
+ & UNDERF(NHIS),IBINS(NHIS),ISWI(NHIS),IHISL
+* auxiliary common for histograms
+ COMMON /DTHIS2/ TMPHIS(3,NHIS,NDIM),TMPUFL(NHIS),TMPOFL(NHIS)
+
+ DATA NCEVT /1/
+
+ X = XI
+ Y = YI
+
+* dump content of temorary arrays into histograms
+ IF ((NEVT.NE.NCEVT).OR.(NEVT.LT.0)) THEN
+ CALL DT_EVTHIS(IDUM)
+ NCEVT = NEVT
+ ENDIF
+
+* check histogram index
+ IF (IHIS.EQ.-1) RETURN
+ IF ((IHIS.LT.1).OR.(IHIS.GT.IHISL)) THEN
+C WRITE(LOUT,1000) IHIS,IHISL
+ 1000 FORMAT(1X,'FILHGR: warning! histogram index',I4,
+ & ' out of range (1..',I3,')')
+ RETURN
+ ENDIF
+
+ IF ((ISWI(IHIS).EQ.1).OR.(ISWI(IHIS).EQ.3)) THEN
+* bin structure not explicitly given
+ IF ((ISWI(IHIS).EQ.3).AND.(X.GT.ZERO)) X = LOG10(X)
+ DX = ABS(HIST(1,IHIS,2)-HIST(1,IHIS,1))
+ IF (X.LT.HIST(1,IHIS,1)) THEN
+ I1 = 0
+ ELSE
+ I1 = INT( (X-HIST(1,IHIS,1))/MAX(DX,TINY) )+1
+ ENDIF
+
+ ELSEIF ((ISWI(IHIS).EQ.2).OR.(ISWI(IHIS).EQ.4)) THEN
+* user defined bin structure
+ IF ((ISWI(IHIS).EQ.4).AND.(X.GT.ZERO)) X = LOG10(X)
+ IF (X.LT.HIST(1,IHIS,1)) THEN
+ I1 = 0
+ ELSE IF (X.GT.HIST(1,IHIS,IBINS(IHIS)+1)) THEN
+ I1 = IBINS(IHIS)+1
+ ELSE
+* binary sort algorithm
+ KMIN = 0
+ KMAX = IBINS(IHIS)+1
+ 1 CONTINUE
+ IF ((KMAX-KMIN).EQ.1) GOTO 2
+ KK = (KMAX+KMIN)/2
+ IF (X.LE.HIST(1,IHIS,KK)) THEN
+ KMAX=KK
+ ELSE
+ KMIN=KK
+ ENDIF
+ GOTO 1
+ 2 CONTINUE
+ I1 = KMIN
+ ENDIF
+
+ ELSE
+ WRITE(LOUT,1001)
+ 1001 FORMAT(1X,'FILHGR: warning! histogram not initialized')
+ RETURN
+ ENDIF
+
+* scoring
+ IF (I1.LE.0) THEN
+ TMPUFL(IHIS) = TMPUFL(IHIS)+ONE
+ ELSEIF (I1.LE.IBINS(IHIS)) THEN
+ TMPHIS(1,IHIS,I1) = TMPHIS(1,IHIS,I1)+ONE
+ IF ((ISWI(IHIS).EQ.3).OR.(ISWI(IHIS).EQ.4)) THEN
+ TMPHIS(2,IHIS,I1) = TMPHIS(2,IHIS,I1)+10**X
+ ELSE
+ TMPHIS(2,IHIS,I1) = TMPHIS(2,IHIS,I1)+X
+ ENDIF
+ TMPHIS(3,IHIS,I1) = TMPHIS(3,IHIS,I1)+Y
+ ELSE
+ TMPOFL(IHIS) = TMPOFL(IHIS)+ONE
+ ENDIF
+
+ RETURN
+ END
+*
+*===evthis=============================================================*
+*
+CDECK ID>, DT_EVTHIS
+ SUBROUTINE DT_EVTHIS(NEVT)
+
+************************************************************************
+* Dump content of temorary histograms into /DTHIS1/. This subroutine *
+* is called after each event and for the last event before any call *
+* to OUTHGR. *
+* NEVT number of events dumped, this is only needed to *
+* get the normalization after the last event *
+* This version dated 23.4.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ LOGICAL LNOETY
+
+ PARAMETER (ZERO = 0.0D0,
+ & ONE = 1.0D0,
+ & TINY = 1.0D-10)
+
+* histograms
+
+ PARAMETER (NHIS=150, NDIM=250)
+
+ COMMON /DTHIS1/ HIST(7,NHIS,NDIM),DENTRY(2,NHIS),OVERF(NHIS),
+ & UNDERF(NHIS),IBINS(NHIS),ISWI(NHIS),IHISL
+* auxiliary common for histograms
+ COMMON /DTHIS2/ TMPHIS(3,NHIS,NDIM),TMPUFL(NHIS),TMPOFL(NHIS)
+
+ DATA NCEVT /0/
+
+ NCEVT = NCEVT+1
+ NEVT = NCEVT
+
+ DO 1 I=1,IHISL
+ LNOETY = .TRUE.
+ DO 2 J=1,IBINS(I)
+ IF (TMPHIS(1,I,J).GT.ZERO) THEN
+ LNOETY = .FALSE.
+ HIST(2,I,J) = HIST(2,I,J)+ONE
+ HIST(7,I,J) = HIST(7,I,J)+TMPHIS(1,I,J)
+ DENTRY(2,I) = DENTRY(2,I)+TMPHIS(1,I,J)
+ AVX = TMPHIS(2,I,J)/TMPHIS(1,I,J)
+ HIST(3,I,J) = HIST(3,I,J)+TMPHIS(3,I,J)*AVX
+ HIST(4,I,J) = HIST(4,I,J)+TMPHIS(3,I,J)*AVX**2
+ HIST(5,I,J) = HIST(5,I,J)+TMPHIS(3,I,J)
+ HIST(6,I,J) = HIST(6,I,J)+TMPHIS(3,I,J)**2
+ TMPHIS(1,I,J) = ZERO
+ TMPHIS(2,I,J) = ZERO
+ TMPHIS(3,I,J) = ZERO
+ ENDIF
+ 2 CONTINUE
+ IF (LNOETY) THEN
+ IF (TMPUFL(I).GT.ZERO) THEN
+ UNDERF(I) = UNDERF(I)+ONE
+ TMPUFL(I) = ZERO
+ ELSEIF (TMPOFL(I).GT.ZERO) THEN
+ OVERF(I) = OVERF(I)+ONE
+ TMPOFL(I) = ZERO
+ ENDIF
+ ELSE
+ DENTRY(1,I) = DENTRY(1,I)+ONE
+ ENDIF
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===outhgr=============================================================*
+*
+CDECK ID>, DT_OUTHGR
+ SUBROUTINE DT_OUTHGR(I1,I2,I3,I4,I5,I6,CHEAD,IHEAD,NEVTS,FAC,
+ & ILOGY,INORM,NMODE)
+
+************************************************************************
+* *
+* Plot histogram(s) to standard output unit *
+* *
+* I1..6 indices of histograms to be plotted *
+* CHEAD,IHEAD header string,integer *
+* NEVTS number of events *
+* FAC scaling factor *
+* ILOGY = 1 logarithmic y-axis *
+* INORM normalization *
+* = 0 no further normalization (FAC is obsolete) *
+* = 1 per event and bin width *
+* = 2 per entry and bin width *
+* = 3 per bin entry *
+* = 4 per event and "bin width" x1^2...x2^2 *
+* = 5 per event and "log. bin width" ln x1..ln x2 *
+* = 6 per event *
+* MODE = 0 no output but normalization applied *
+* = 1 all valid histograms separately (small frame) *
+* all valid histograms separately (small frame) *
+* = -1 and tables as histograms *
+* = 2 all valid histograms (one plot, wide frame) *
+* all valid histograms (one plot, wide frame) *
+* = -2 and tables as histograms *
+* *
+* *
+* Note: All histograms to be plotted with one call to this *
+* subroutine and |MODE|=2 must have the same bin structure! *
+* There is no test included ensuring this fact. *
+* *
+* This version dated 23.4.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ CHARACTER*72 CHEAD
+
+ PARAMETER (ZERO = 0.0D0,
+ & IZERO = 0,
+ & ONE = 1.0D0,
+ & TWO = 2.0D0,
+ & OHALF = 0.5D0,
+ & EPS = 1.0D-5,
+ & TINY = 1.0D-8,
+ & SMALL = -1.0D8,
+ & RLARGE = 1.0D8 )
+
+* histograms
+
+ PARAMETER (NHIS=150, NDIM=250)
+
+ COMMON /DTHIS1/ HIST(7,NHIS,NDIM),DENTRY(2,NHIS),OVERF(NHIS),
+ & UNDERF(NHIS),IBINS(NHIS),ISWI(NHIS),IHISL
+
+ PARAMETER (NDIM2 = 2*NDIM)
+ DIMENSION XX(NDIM2),YY(NDIM2)
+
+ PARAMETER (NHISTO = 6)
+ DIMENSION YY1(NDIM,NHISTO),XX1(NDIM,NHISTO),IDX1(NHISTO),
+ & IDX(NHISTO)
+
+ CHARACTER*43 CNORM(0:8)
+ DATA CNORM /'no further normalization ',
+ & 'per event and bin width ',
+ & 'per entry1 and bin width ',
+ & 'per bin entry ',
+ & 'per event and "bin width" x1^2...x2^2 ',
+ & 'per event and "log. bin width" ln x1..ln x2',
+ & 'per event ',
+ & 'per bin entry1 ',
+ & 'per entry2 and bin width '/
+
+ IDX1(1) = I1
+ IDX1(2) = I2
+ IDX1(3) = I3
+ IDX1(4) = I4
+ IDX1(5) = I5
+ IDX1(6) = I6
+
+ MODE = NMODE
+
+* initialization if "wide frame" is requested
+ IF (ABS(MODE).EQ.2) THEN
+ DO 1 I=1,NHISTO
+ DO 2 J=1,NDIM
+ XX1(J,I) = ZERO
+ YY1(J,I) = ZERO
+ 2 CONTINUE
+ 1 CONTINUE
+ ENDIF
+
+* plot header
+ WRITE(LOUT,'(/1X,A,I3,/,1X,70A1)') CHEAD,IHEAD,('=',II=1,70)
+
+* check histogram indices
+ NHI = 0
+ DO 3 I=1,NHISTO
+ IF ((IDX1(I).GE.1).AND.(IDX1(I).LE.IHISL)) THEN
+ IF (ISWI(IDX1(I)).NE.0) THEN
+ IF (DENTRY(1,IDX1(I)).LT.ONE) THEN
+ WRITE(LOUT,1000)
+ & IDX1(I),UNDERF(IDX1(I)),OVERF(IDX1(I))
+ 1000 FORMAT(/,1X,'OUTHGR: warning! no entries in',
+ & ' histogram ',I3,/,21X,'underflows:',F10.0,
+ & ' overflows: ',F10.0)
+ ELSE
+ NHI = NHI+1
+ IDX(NHI) = IDX1(I)
+ ENDIF
+ ENDIF
+ ENDIF
+ 3 CONTINUE
+ IF (NHI.EQ.0) THEN
+ WRITE(LOUT,1001)
+ 1001 FORMAT(/,1X,'OUTHGR: warning! histogram indices not valid')
+ RETURN
+ ENDIF
+
+* check normalization request
+ IF ( ((FAC.EQ.ZERO).AND.(INORM.NE.0)).OR.
+ & ((NEVTS.LT.1).AND.((INORM.EQ.1).OR.(INORM.EQ.4).OR.
+ & (INORM.EQ.5).OR.(INORM.EQ.6))).OR.
+ & (INORM.LT.0).OR.(INORM.GT.8) ) THEN
+ WRITE(LOUT,1002) NEVTS,INORM,FAC
+ 1002 FORMAT(/,1X,'OUTHGR: warning! normalization request not ',
+ & 'valid',/,21X,'NEVTS = ',I7,4X,'INORM = ',I2,4X,
+ & 'FAC = ',E11.4)
+ RETURN
+ ENDIF
+
+ WRITE(LOUT,'(/,1X,A,I8)') 'number of events:',NEVTS
+
+* apply normalization
+ DO 4 N=1,NHI
+
+ I = IDX(N)
+
+ IF (ISWI(I).EQ.1) THEN
+ WRITE(LOUT,1003) I,HIST(1,I,1),HIST(1,I,IBINS(I)+1),IBINS(I)
+ 1003 FORMAT(/,1X,'histo.',I4,', linear binning from',2X,E10.4,
+ & ' to',2X,E10.4,',',2X,I3,' bins')
+ ELSEIF (ISWI(I).EQ.2) THEN
+ WRITE(LOUT,1003) I,HIST(1,I,1),HIST(1,I,IBINS(I)+1),IBINS(I)
+ WRITE(LOUT,1007)
+ 1007 FORMAT(1X,'user defined bin structure')
+ ELSEIF (ISWI(I).EQ.3) THEN
+ WRITE(LOUT,1004)
+ & I,10**HIST(1,I,1),10**HIST(1,I,IBINS(I)+1),IBINS(I)
+ 1004 FORMAT(/,1X,'histo.',I4,', logar. binning from',2X,E10.4,
+ & ' to',2X,E10.4,',',2X,I3,' bins')
+ ELSEIF (ISWI(I).EQ.4) THEN
+ WRITE(LOUT,1004)
+ & I,10**HIST(1,I,1),10**HIST(1,I,IBINS(I)+1),IBINS(I)
+ WRITE(LOUT,1007)
+ ELSE
+ WRITE(LOUT,1008) ISWI(I)
+ 1008 FORMAT(/,1X,'warning! inconsistent bin structure flag ',I4)
+ ENDIF
+ WRITE(LOUT,1005) DENTRY(1,I),DENTRY(2,I),UNDERF(I),OVERF(I)
+ 1005 FORMAT(13X,'entries:',2F9.0,' underfl.:',F8.0,
+ & ' overfl.:',F8.0)
+ WRITE(LOUT,1009) CNORM(INORM)
+ 1009 FORMAT(1X,'normalization: ',A,/)
+
+ DO 5 K=1,IBINS(I)
+ CALL DT_GETBIN(I,K,NEVTS,INORM,XLOW,XHI,XMEAN,YMEAN,YERR)
+ YMEAN = FAC*YMEAN
+ YERR = FAC*YERR
+ WRITE(LOUT,1006) XLOW,XMEAN,YMEAN,YERR,HIST(2,I,K)
+ WRITE(LOUT,1006) XHI ,XMEAN,YMEAN,YERR,HIST(2,I,K)
+ 1006 FORMAT(1X,5E11.3)
+* small frame
+ II = 2*K
+ XX(II-1) = HIST(1,I,K)
+ XX(II) = HIST(1,I,K+1)
+ YY(II-1) = YMEAN
+ YY(II) = YMEAN
+* wide frame
+ XX1(K,N) = XMEAN
+ IF ((ISWI(I).EQ.3).OR.(ISWI(I).EQ.4))
+ & XX1(K,N) = LOG10(XMEAN)
+ YY1(K,N) = YMEAN
+ 5 CONTINUE
+
+* plot small frame
+ IF (ABS(MODE).EQ.1) THEN
+ IBIN2 = 2*IBINS(I)
+ WRITE(LOUT,'(/,1X,A)') 'Preview:'
+ IF(ILOGY.EQ.1) THEN
+ CALL DT_XGLOGY(IBIN2,1,XX,YY,YY)
+ ELSE
+ CALL DT_XGRAPH(IBIN2,1,XX,YY,YY)
+ ENDIF
+ ENDIF
+
+ 4 CONTINUE
+
+* plot wide frame
+ IF (ABS(MODE).EQ.2) THEN
+ WRITE(LOUT,'(/,1X,A)') 'Preview:'
+ NSIZE = NDIM*NHISTO
+ DXLOW = HIST(1,IDX(1),1)
+ DDX = ABS(HIST(1,IDX(1),2)-HIST(1,IDX(1),1))
+ YLOW = RLARGE
+ YHI = SMALL
+ DO 6 I=1,NHISTO
+ DO 7 J=1,NDIM
+ IF (YY1(J,I).LT.YLOW) THEN
+ IF (ILOGY.EQ.1) THEN
+ IF (YY1(J,I).GT.ZERO) YLOW = YY1(J,I)
+ ELSE
+ YLOW = YY1(J,I)
+ ENDIF
+ ENDIF
+ IF (YY1(J,I).GT.YHI) YHI = YY1(J,I)
+ 7 CONTINUE
+ 6 CONTINUE
+ DY = (YHI-YLOW)/DBLE(NDIM)
+ IF (DY.LE.ZERO) THEN
+ WRITE(LOUT,'(1X,A,6I4,A,2E12.4)')
+ & 'OUTHGR: warning! zero bin width for histograms ',
+ & IDX,': ',YLOW,YHI
+ RETURN
+ ENDIF
+ IF (ILOGY.EQ.1) THEN
+ YLOW = LOG10(YLOW)
+ DY = (LOG10(YHI)-YLOW)/100.0D0
+ DO 8 I=1,NHISTO
+ DO 9 J=1,NDIM
+ IF (YY1(J,I).LE.ZERO) THEN
+ YY1(J,I) = YLOW
+ ELSE
+ YY1(J,I) = LOG10(YY1(J,I))
+ ENDIF
+ 9 CONTINUE
+ 8 CONTINUE
+ ENDIF
+ CALL DT_SRPLOT(XX1,YY1,NSIZE,NHISTO,NDIM,DXLOW,DDX,YLOW,DY)
+ ENDIF
+
+ RETURN
+ END
+*
+*===getbin=============================================================*
+*
+CDECK ID>, DT_GETBIN
+ SUBROUTINE DT_GETBIN(IHIS,IBIN,KEVT,NORM,XLOW,XHI,
+ & XMEAN,YMEAN,YERR)
+
+************************************************************************
+* This version dated 23.4.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (ZERO = 0.0D0,
+ & ONE = 1.0D0,
+ & TINY35 = 1.0D-35)
+
+* histograms
+
+ PARAMETER (NHIS=150, NDIM=250)
+
+ COMMON /DTHIS1/ HIST(7,NHIS,NDIM),DENTRY(2,NHIS),OVERF(NHIS),
+ & UNDERF(NHIS),IBINS(NHIS),ISWI(NHIS),IHISL
+
+ XLOW = HIST(1,IHIS,IBIN)
+ XHI = HIST(1,IHIS,IBIN+1)
+ IF ((ISWI(IHIS).EQ.3).OR.(ISWI(IHIS).EQ.4)) THEN
+ XLOW = 10**XLOW
+ XHI = 10**XHI
+ ENDIF
+ IF (NORM.EQ.2) THEN
+ DX = XHI-XLOW
+ NEVT = INT(DENTRY(1,IHIS))
+ ELSEIF (NORM.EQ.3) THEN
+ DX = ONE
+ NEVT = INT(HIST(2,IHIS,IBIN))
+ ELSEIF (NORM.EQ.4) THEN
+ DX = XHI**2-XLOW**2
+ NEVT = KEVT
+ ELSEIF (NORM.EQ.5) THEN
+ DX = LOG(ABS(XHI))-LOG(ABS(XLOW))
+ NEVT = KEVT
+ ELSEIF (NORM.EQ.6) THEN
+ DX = ONE
+ NEVT = KEVT
+ ELSEIF (NORM.EQ.7) THEN
+ DX = ONE
+ NEVT = INT(HIST(7,IHIS,IBIN))
+ ELSEIF (NORM.EQ.8) THEN
+ DX = XHI-XLOW
+ NEVT = INT(DENTRY(2,IHIS))
+ ELSE
+ DX = ABS(XHI-XLOW)
+ NEVT = KEVT
+ ENDIF
+ IF (ABS(DX).LT.TINY35) DX = ONE
+ NEVT = MAX(NEVT,1)
+ YMEAN = HIST(5,IHIS,IBIN)/DX/DBLE(NEVT)
+ YMEAN2 = HIST(6,IHIS,IBIN)/DX**2/DBLE(NEVT)
+ YERR = SQRT(ABS(YMEAN2-YMEAN**2))/SQRT(DBLE(NEVT))
+ YSUM = HIST(5,IHIS,IBIN)
+ IF (ABS(YSUM).LT.TINY35) YSUM = ONE
+C XMEAN = HIST(3,IHIS,IBIN)/YSUM/MAX(HIST(2,IHIS,IBIN),ONE)
+ XMEAN = HIST(3,IHIS,IBIN)/YSUM
+ IF (XMEAN.EQ.ZERO) XMEAN = XLOW
+
+ RETURN
+ END
+*
+*===joihis=============================================================*
+*
+CDECK ID>, DT_JOIHIS
+ SUBROUTINE DT_JOIHIS(IH1,IH2,COPER,FAC1,FAC2,KEVT,NORM,ILOGY,MODE)
+
+************************************************************************
+* *
+* Operation on histograms. *
+* *
+* input: IH1,IH2 histogram indices to be joined *
+* COPER character defining the requested operation, *
+* i.e. '+', '-', '*', '/' *
+* FAC1,FAC2 factors for joining, i.e. *
+* FAC1*histo1 COPER FAC2*histo2 *
+* *
+* This version dated 23.4.95 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ CHARACTER COPER*1
+
+ PARAMETER (ZERO = 0.0D0,
+ & ONE = 1.0D0,
+ & OHALF = 0.5D0,
+ & TINY8 = 1.0D-8,
+ & SMALL = -1.0D8,
+ & RLARGE = 1.0D8 )
+
+* histograms
+
+ PARAMETER (NHIS=150, NDIM=250)
+
+ COMMON /DTHIS1/ HIST(7,NHIS,NDIM),DENTRY(2,NHIS),OVERF(NHIS),
+ & UNDERF(NHIS),IBINS(NHIS),ISWI(NHIS),IHISL
+
+ PARAMETER (NDIM2 = 2*NDIM)
+ DIMENSION XX(NDIM2),YY(NDIM2),YY1(NDIM),XX1(NDIM)
+
+ CHARACTER*43 CNORM(0:6)
+ DATA CNORM /'no further normalization ',
+ & 'per event and bin width ',
+ & 'per entry and bin width ',
+ & 'per bin entry ',
+ & 'per event and "bin width" x1^2...x2^2 ',
+ & 'per event and "log. bin width" ln x1..ln x2',
+ & 'per event '/
+
+* check histogram indices
+ IF ((IH1.LT. 1).OR.(IH2.LT. 1).OR.
+ & (IH1.GT.IHISL).OR.(IH2.GT.IHISL)) THEN
+ WRITE(LOUT,1000) IH1,IH2,IHISL
+ 1000 FORMAT(1X,'JOIHIS: warning! inconsistent histogram ',
+ & 'indices (',I3,',',I3,'),',/,21X,'valid range: 1,',I3)
+ GOTO 9999
+ ENDIF
+
+* check bin structure of histograms to be joined
+ IF (IBINS(IH1).NE.IBINS(IH2)) THEN
+ WRITE(LOUT,1001) IH1,IH2,IBINS(IH1),IBINS(IH2)
+ 1001 FORMAT(1X,'JOIHIS: warning! joining histograms ',I3,
+ & ' and ',I3,' failed',/,21X,
+ & 'due to different numbers of bins (',I3,',',I3,')')
+ GOTO 9999
+ ENDIF
+ DO 1 K=1,IBINS(IH1)+1
+ IF (ABS(HIST(1,IH1,K)-HIST(1,IH2,K)).GT.TINY8) THEN
+ WRITE(LOUT,1002) IH1,IH2,K,HIST(1,IH1,K),HIST(1,IH2,K)
+ 1002 FORMAT(1X,'JOIHIS: warning! joining histograms ',I3,
+ & ' and ',I3,' failed at bin edge ',I3,/,21X,
+ & 'X1,X2 = ',2E11.4)
+ GOTO 9999
+ ENDIF
+ 1 CONTINUE
+
+ WRITE(LOUT,1003) IH1,IH2,COPER,FAC1,FAC2
+ 1003 FORMAT(1X,'JOIHIS: joining histograms ',I3,',',I3,' with ',
+ & 'operation ',A,/,11X,'and factors ',2E11.4)
+ WRITE(LOUT,1004) CNORM(NORM)
+ 1004 FORMAT(1X,'normalization: ',A,/)
+
+ DO 2 K=1,IBINS(IH1)
+ CALL DT_GETBIN(IH1,K,KEVT,NORM,XLOW1,XHI1,XMEAN1,YMEAN1,YERR1)
+ CALL DT_GETBIN(IH2,K,KEVT,NORM,XLOW2,XHI2,XMEAN2,YMEAN2,YERR2)
+ XLOW = XLOW1
+ XHI = XHI1
+ XMEAN = OHALF*(XMEAN1+XMEAN2)
+ IF (COPER.EQ.'+') THEN
+ YMEAN = FAC1*YMEAN1+FAC2*YMEAN2
+ ELSEIF (COPER.EQ.'*') THEN
+ YMEAN = FAC1*YMEAN1*FAC2*YMEAN2
+ ELSEIF (COPER.EQ.'/') THEN
+ IF (YMEAN2.EQ.ZERO) THEN
+ YMEAN = ZERO
+ ELSE
+ IF (FAC2.EQ.ZERO) FAC2 = ONE
+ YMEAN = FAC1*YMEAN1/(FAC2*YMEAN2)
+ ENDIF
+ ELSE
+ GOTO 9998
+ ENDIF
+ WRITE(LOUT,1006) XLOW,XMEAN,YMEAN,HIST(2,IH1,K),HIST(2,IH2,K)
+ WRITE(LOUT,1006) XHI ,XMEAN,YMEAN,HIST(2,IH1,K),HIST(2,IH2,K)
+ 1006 FORMAT(1X,5E11.3)
+* small frame
+ II = 2*K
+ XX(II-1) = HIST(1,IH1,K)
+ XX(II) = HIST(1,IH1,K+1)
+ YY(II-1) = YMEAN
+ YY(II) = YMEAN
+* wide frame
+ XX1(K) = XMEAN
+ IF ((ISWI(IH1).EQ.3).OR.(ISWI(IH1).EQ.4)) XX1(K) = LOG10(XMEAN)
+ YY1(K) = YMEAN
+ 2 CONTINUE
+
+* plot small frame
+ IF (ABS(MODE).EQ.1) THEN
+ IBIN2 = 2*IBINS(IH1)
+ WRITE(LOUT,'(/,1X,A)') 'Preview:'
+ IF(ILOGY.EQ.1) THEN
+ CALL DT_XGLOGY(IBIN2,1,XX,YY,YY)
+ ELSE
+ CALL DT_XGRAPH(IBIN2,1,XX,YY,YY)
+ ENDIF
+ ENDIF
+
+* plot wide frame
+ IF (ABS(MODE).EQ.2) THEN
+ WRITE(LOUT,'(/,1X,A)') 'Preview:'
+ NSIZE = NDIM
+ DXLOW = HIST(1,IH1,1)
+ DDX = ABS(HIST(1,IH1,2)-HIST(1,IH1,1))
+ YLOW = RLARGE
+ YHI = SMALL
+ DO 3 I=1,NDIM
+ IF (YY1(I).LT.YLOW) THEN
+ IF (ILOGY.EQ.1) THEN
+ IF (YY1(I).GT.ZERO) YLOW = YY1(I)
+ ELSE
+ YLOW = YY1(I)
+ ENDIF
+ ENDIF
+ IF (YY1(I).GT.YHI) YHI = YY1(I)
+ 3 CONTINUE
+ DY = (YHI-YLOW)/DBLE(NDIM)
+ IF (DY.LE.ZERO) THEN
+ WRITE(LOUT,'(1X,A,2I4,A,2E12.4)')
+ & 'JOIHIS: warning! zero bin width for histograms ',
+ & IH1,IH2,': ',YLOW,YHI
+ RETURN
+ ENDIF
+ IF (ILOGY.EQ.1) THEN
+ YLOW = LOG10(YLOW)
+ DY = (LOG10(YHI)-YLOW)/100.0D0
+ DO 4 I=1,NDIM
+ IF (YY1(I).LE.ZERO) THEN
+ YY1(I) = YLOW
+ ELSE
+ YY1(I) = LOG10(YY1(I))
+ ENDIF
+ 4 CONTINUE
+ ENDIF
+ CALL DT_SRPLOT(XX1,YY1,NSIZE,1,NDIM,DXLOW,DDX,YLOW,DY)
+ ENDIF
+
+ RETURN
+
+ 9998 CONTINUE
+ WRITE(LOUT,1005) COPER
+ 1005 FORMAT(1X,'JOIHIS: unknown operation ',A)
+
+ 9999 CONTINUE
+ RETURN
+ END
+*
+*===qgraph=============================================================*
+*
+CDECK ID>, DT_XGRAPH
+ SUBROUTINE DT_XGRAPH(N,IARG,X,Y1,Y2)
+C***********************************************************************
+C
+C calculate quasi graphic picture with 25 lines and 79 columns
+C ranges will be chosen automatically
+C
+C input N dimension of input fields
+C IARG number of curves (fields) to plot
+C X field of X
+C Y1 field of Y1
+C Y2 field of Y2
+C
+C This subroutine is written by R. Engel.
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+C
+ DIMENSION X(N),Y1(N),Y2(N)
+ PARAMETER (EPS=1.D-30)
+ PARAMETER (IYRAST=5,IXRAST=10,IBREIT=79,IZEIL=20)
+ CHARACTER SYMB(5)
+ CHARACTER COL(0:149,0:49)
+C
+ DATA SYMB /'0','e','z','#','x'/
+C
+ ISPALT=IBREIT-10
+C
+C*** automatic range fitting
+C
+ XMAX=X(1)
+ XMIN=X(1)
+ DO 600 I=1,N
+ XMAX=MAX(X(I),XMAX)
+ XMIN=MIN(X(I),XMIN)
+ 600 CONTINUE
+ XZOOM=(XMAX-XMIN)/DBLE(ISPALT)
+C
+ ITEST=0
+ DO 1100 K=0,IZEIL-1
+ ITEST=ITEST+1
+ IF (ITEST.EQ.IYRAST) THEN
+ DO 1010 L=1,ISPALT-1
+ COL(L,K)='-'
+1010 CONTINUE
+ COL(ISPALT,K)='+'
+ ITEST=0
+ DO 1020 L=0,ISPALT-1,IXRAST
+ COL(L,K)='+'
+1020 CONTINUE
+ ELSE
+ DO 1030 L=1,ISPALT-1
+ COL(L,K)=' '
+1030 CONTINUE
+ DO 1040 L=0,ISPALT-1,IXRAST
+ COL(L,K)='|'
+1040 CONTINUE
+ COL(ISPALT,K)='|'
+ ENDIF
+1100 CONTINUE
+C
+C*** plot curve Y1
+C
+ YMAX=Y1(1)
+ YMIN=Y1(1)
+ DO 500 I=1,N
+ YMAX=MAX(Y1(I),YMAX)
+ YMIN=MIN(Y1(I),YMIN)
+500 CONTINUE
+ IF(IARG.GT.1) THEN
+ DO 550 I=1,N
+ YMAX=MAX(Y2(I),YMAX)
+ YMIN=MIN(Y2(I),YMIN)
+550 CONTINUE
+ ENDIF
+ YMAX=(YMAX-YMIN)/40.0D0+YMAX
+ YMIN=YMIN-(YMAX-YMIN)/40.0D0
+ YZOOM=(YMAX-YMIN)/DBLE(IZEIL)
+ IF(YZOOM.LT.EPS) THEN
+ WRITE(LOUT,'(1X,A)')
+ & 'XGRAPH:WARNING: MIN = MAX, OUTPUT SUPPRESSED'
+ RETURN
+ ENDIF
+C
+C*** plot curve Y1
+C
+ ILAST=-1
+ LLAST=-1
+ DO 1200 K=1,N
+ L=NINT((X(K)-XMIN)/XZOOM)
+ I=NINT((YMAX-Y1(K))/YZOOM)
+ IF(ILAST.GE.0) THEN
+ LD = L-LLAST
+ ID = I-ILAST
+ DO 55 II=0,LD,SIGN(1,LD)
+ DO 66 KK=0,ID,SIGN(1,ID)
+ COL(II+LLAST,KK+ILAST)=SYMB(1)
+ 66 CONTINUE
+ 55 CONTINUE
+ ELSE
+ COL(L,I)=SYMB(1)
+ ENDIF
+ ILAST = I
+ LLAST = L
+1200 CONTINUE
+C
+ IF(IARG.GT.1) THEN
+C
+C*** plot curve Y2
+C
+ DO 1250 K=1,N
+ L=NINT((X(K)-XMIN)/XZOOM)
+ I=NINT((YMAX-Y2(K))/YZOOM)
+ COL(L,I)=SYMB(2)
+1250 CONTINUE
+ ENDIF
+C
+C*** write it
+C
+ WRITE(LOUT,'(1X,79A)') ('-',I=1,IBREIT)
+C
+C*** write range of X
+C
+ XZOOM = (XMAX-XMIN)/DBLE(7)
+ WRITE(LOUT,120) (XZOOM*DBLE(I-1)+XMIN,I=1,7)
+C
+ DO 1300 K=0,IZEIL-1
+ YPOS=YMAX-((DBLE(K)+0.5D0)*YZOOM)
+ WRITE(LOUT,110) YPOS,(COL(I,K),I=0,ISPALT)
+ 110 FORMAT(1X,1PE9.2,70A1)
+1300 CONTINUE
+C
+C*** write range of X
+C
+ XZOOM = (XMAX-XMIN)/DBLE(7)
+ WRITE(LOUT,120) (XZOOM*DBLE(I-1)+XMIN,I=1,7)
+ WRITE(LOUT,'(1X,79A)') ('-',I=1,IBREIT)
+ 120 FORMAT(6X,7(1PE10.3))
+ END
+*
+*===qglogy=============================================================*
+*
+CDECK ID>, DT_XGLOGY
+ SUBROUTINE DT_XGLOGY(N,IARG,X,Y1,Y2)
+C***********************************************************************
+C
+C calculate quasi graphic picture with 25 lines and 79 columns
+C logarithmic y axis
+C ranges will be chosen automatically
+C
+C input N dimension of input fields
+C IARG number of curves (fields) to plot
+C X field of X
+C Y1 field of Y1
+C Y2 field of Y2
+C
+C This subroutine is written by R. Engel.
+C***********************************************************************
+C
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ DIMENSION X(N),Y1(N),Y2(N)
+ PARAMETER (EPS=1.D-30)
+ PARAMETER (IYRAST=5,IXRAST=10,IBREIT=79,IZEIL=20)
+ CHARACTER SYMB(5)
+ CHARACTER COL(0:149,0:49)
+ PARAMETER (DEPS = 1.D-10)
+C
+ DATA SYMB /'0','e','z','#','x'/
+C
+ ISPALT=IBREIT-10
+C
+C*** automatic range fitting
+C
+ XMAX=X(1)
+ XMIN=X(1)
+ DO 600 I=1,N
+ XMAX=MAX(X(I),XMAX)
+ XMIN=MIN(X(I),XMIN)
+ 600 CONTINUE
+ XZOOM=(XMAX-XMIN)/DBLE(ISPALT)
+C
+ ITEST=0
+ DO 1100 K=0,IZEIL-1
+ ITEST=ITEST+1
+ IF (ITEST.EQ.IYRAST) THEN
+ DO 1010 L=1,ISPALT-1
+ COL(L,K)='-'
+1010 CONTINUE
+ COL(ISPALT,K)='+'
+ ITEST=0
+ DO 1020 L=0,ISPALT-1,IXRAST
+ COL(L,K)='+'
+1020 CONTINUE
+ ELSE
+ DO 1030 L=1,ISPALT-1
+ COL(L,K)=' '
+1030 CONTINUE
+ DO 1040 L=0,ISPALT-1,IXRAST
+ COL(L,K)='|'
+1040 CONTINUE
+ COL(ISPALT,K)='|'
+ ENDIF
+1100 CONTINUE
+C
+C*** plot curve Y1
+C
+ YMAX=Y1(1)
+ YMIN=MAX(Y1(1),EPS)
+ DO 500 I=1,N
+ YMAX =MAX(Y1(I),YMAX)
+ IF(Y1(I).GT.EPS) THEN
+ IF(YMIN.EQ.EPS) THEN
+ YMIN = Y1(I)/10.D0
+ ELSE
+ YMIN = MIN(Y1(I),YMIN)
+ ENDIF
+ ENDIF
+500 CONTINUE
+ IF(IARG.GT.1) THEN
+ DO 550 I=1,N
+ YMAX=MAX(Y2(I),YMAX)
+ IF(Y2(I).GT.EPS) THEN
+ IF(YMIN.EQ.EPS) THEN
+ YMIN = Y2(I)
+ ELSE
+ YMIN = MIN(Y2(I),YMIN)
+ ENDIF
+ ENDIF
+550 CONTINUE
+ ENDIF
+C
+ DO 560 I=1,N
+ Y1(I) = MAX(Y1(I),YMIN)
+ 560 CONTINUE
+ IF(IARG.GT.1) THEN
+ DO 570 I=1,N
+ Y2(I) = MAX(Y2(I),YMIN)
+ 570 CONTINUE
+ ENDIF
+C
+ IF(YMAX.LE.YMIN) THEN
+ WRITE(LOUT,'(/1X,A,2E12.3,/)')
+ & 'XGLOGY:ERROR:YMIN,YMAX ',YMIN,YMAX
+ WRITE(LOUT,'(1X,A)') 'MIN = MAX, OUTPUT SUPPRESSED'
+ RETURN
+ ENDIF
+C
+ YMA=(LOG10(YMAX)-LOG10(YMIN))/20.0D0+LOG10(YMAX)
+ YMI=LOG10(YMIN)-(LOG10(YMAX)-LOG10(YMIN))/20.0D0
+ YZOOM=(YMA-YMI)/DBLE(IZEIL)
+ IF(YZOOM.LT.EPS) THEN
+ WRITE(LOUT,'(1X,A)')
+ & 'XGLOGY:WARNING: MIN = MAX, OUTPUT SUPPRESSED'
+ RETURN
+ ENDIF
+C
+C*** plot curve Y1
+C
+ ILAST=-1
+ LLAST=-1
+ DO 1200 K=1,N
+ L=NINT((X(K)-XMIN)/XZOOM)
+ I=NINT((YMA-LOG10(Y1(K)))/YZOOM)
+ IF(ILAST.GE.0) THEN
+ LD = L-LLAST
+ ID = I-ILAST
+ DO 55 II=0,LD,SIGN(1,LD)
+ DO 66 KK=0,ID,SIGN(1,ID)
+ COL(II+LLAST,KK+ILAST)=SYMB(1)
+ 66 CONTINUE
+ 55 CONTINUE
+ ELSE
+ COL(L,I)=SYMB(1)
+ ENDIF
+ ILAST = I
+ LLAST = L
+1200 CONTINUE
+C
+ IF(IARG.GT.1) THEN
+C
+C*** plot curve Y2
+C
+ DO 1250 K=1,N
+ L=NINT((X(K)-XMIN)/XZOOM)
+ I=NINT((YMA-LOG10(Y2(K)))/YZOOM)
+ COL(L,I)=SYMB(2)
+1250 CONTINUE
+ ENDIF
+C
+C*** write it
+C
+ WRITE(LOUT,'(2X,A)') '(LOGARITHMIC Y AXIS)'
+ WRITE(LOUT,'(1X,79A)') ('-',I=1,IBREIT)
+C
+C*** write range of X
+C
+ XZOOM1 = (XMAX-XMIN)/DBLE(7)
+ WRITE(LOUT,120) (XZOOM1*DBLE(I-1)+XMIN,I=1,7)
+C
+ DO 1300 K=0,IZEIL-1
+ YPOS=10.D0**(YMA-((DBLE(K)+0.5D0)*YZOOM))
+ WRITE(LOUT,110) YPOS,(COL(I,K),I=0,ISPALT)
+ 110 FORMAT(1X,1PE9.2,70A1)
+1300 CONTINUE
+C
+C*** write range of X
+C
+ WRITE(LOUT,120) (XZOOM1*DBLE(I-1)+XMIN,I=1,7)
+ WRITE(LOUT,'(1X,79A)') ('-',I=1,IBREIT)
+ 120 FORMAT(6X,7(1PE10.3))
+C
+ END
+*
+*===plot===============================================================*
+*
+CDECK ID>, DT_SRPLOT
+ SUBROUTINE DT_SRPLOT(X,Y,N,M,MM,XO,DX,YO,DY)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+*
+* initial version
+* J. Ranft, (FORTRAN-Programmierung,J.R.,Teubner, Leipzig, 72)
+* This is a subroutine of fluka to plot Y across the page
+* as a function of X down the page. Up to 37 curves can be
+* plotted in the same picture with different plotting characters.
+* Output of first 10 overprinted characters addad by FB 88
+* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+*
+* Input Variables:
+* X = array containing the values of X
+* Y = array containing the values of Y
+* N = number of values in X and in Y
+* can exceed the fixed number of lines
+* M = number of different curves X,Y are containing
+* MM = number of points in each curve i.e. N=M*MM
+* XO = smallest value of X to be plotted
+* DX = increment of X between subsequent lines
+* YO = smallest value of Y to be plotted
+* DY = increment of Y between subsequent character spaces
+*
+* other variables used inside:
+* XX = numbers along the X-coordinate axis
+* YY = numbers along the Y-coordinate axis
+* LL = ten lines temporary storage for the plot
+* L = character set used to plot different curves
+* LOV = memorizes overprinted symbols
+* the first 10 overprinted symbols are printed on
+* the end of the line to avoid ambiguities
+* (added by FB as considered quite helpful)
+*
+*********************************************************************
+*
+ DIMENSION XX(61),YY(61),LL(101,10)
+ DIMENSION X(N),Y(N),L(40),LOV(40,10)
+ DATA L/
+ 11H*,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1HZ,
+ 21H+,1HA,1HO,1HB,1HC,1HD,1HE,1HF,1HG,1HH,
+ 31HI,1HJ,1HK,1HL,1HM,1HN,1HO,1HP,1HQ,1HR,
+ 41HS,1HT,1HU,1HV,1HW,1HX,1HY,1H1,1H-,1H /
+*
+*
+ MN=51
+ DO 10 I=1,MN
+ AI=I-1
+ 10 XX(I)=XO+AI*DX
+ DO 20 I=1,11
+ AI=I-1
+ 20 YY(I)=YO+10.0D0*AI*DY
+ WRITE(LOUT, 500) (YY(I),I=1,11)
+ MMN=MN-1
+*
+*
+ DO 90 JJ=1,MMN,10
+ JJJ=JJ-1
+ DO 30 I=1,101
+ DO 30 J=1,10
+ 30 LL(I,J)=L(40)
+ DO 40 I=1,101
+ 40 LL(I,1)=L(39)
+ DO 50 I=1,101,10
+ DO 50 J=1,10
+ 50 LL(I,J)=L(38)
+ DO 60 I=1,40
+ DO 60 J=1,10
+ 60 LOV(I,J)=L(40)
+*
+*
+ DO 70 I=1,M
+ DO 70 J=1,MM
+ II=J+(I-1)*MM
+ AIX=(X(II)-(XO-DX/2.0D0))/DX+1.0D0
+ AIY=(Y(II)-(YO-DY/2.0D0))/DY+1.0D0
+ AIX=AIX-DBLE(JJJ)
+* changed Sept.88 by FB to avoid INTEGER OVERFLOW
+ IF( AIX .GT. 1.D0.AND. AIX .LT. 11.D0.AND. AIY .GT. 1.D0.AND
+ + . AIY .LT. 102.D0) THEN
+ IX=INT(AIX)
+ IY=INT(AIY)
+ IF( IX.GT. 0.AND. IX.LE. 10.AND. IY.GT. 0.AND. IY.LE. 101)
+ + THEN
+ IF(LL(IY,IX).NE.L(38).AND.LL(IY,IX).NE.L(39)) LOV(I,IX)
+ + =LL(IY,IX)
+ LL(IY,IX)=L(I)
+ ENDIF
+ ENDIF
+ 70 CONTINUE
+*
+*
+ DO 80 I=1,10
+ II=I+JJJ
+ III=II+1
+ WRITE(LOUT,510) XX(II),XX(III) , (LL(J,I),J=1,101) ,
+ & (LOV(J,I),J=1,10)
+ 80 CONTINUE
+ 90 CONTINUE
+*
+*
+ WRITE(LOUT, 520)
+ WRITE(LOUT, 500) (YY(I),I=1,11)
+ RETURN
+*
+ 500 FORMAT(11X,11(1PE10.2),11HOVERPRINTED)
+ 510 FORMAT(1X,2(1PE10.2),101A1,1H ,10A1)
+ 520 FORMAT(20X,10('1---------'),'1')
+ END
+*
+*===defset=============================================================*
+*
+CDECK ID>, DT_DEFSET
+ BLOCK DATA DT_DEFSET
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+
+ PARAMETER (NCOMPX=20,NEB=8,NQB= 5,KSITEB=50)
+
+* emulsion treatment
+ COMMON /DTCOMP/ EMUFRA(NCOMPX),IEMUMA(NCOMPX),IEMUCH(NCOMPX),
+ & NCOMPO,IEMUL
+
+* / DTFLG1 /
+ DATA IFRAG / 2, 1 /
+ DATA IRESCO / 1 /
+ DATA IMSHL / 1 /
+ DATA IRESRJ / 0 /
+ DATA IOULEV / -1, -1, -1, -1, -1, -1 /
+ DATA LEMCCK / .FALSE. /
+ DATA LHADRO / .FALSE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.,
+ & .TRUE.,.TRUE.,.TRUE./
+ DATA LSEADI / .TRUE. /
+ DATA LEVAPO / .TRUE. /
+ DATA IFRAME / 1 /
+* Introduced by Chiara -> Forcing CMS-system
+* DATA IFRAME / 2 /
+ DATA ITRSPT / 0 /
+
+* / DTCOMP /
+ DATA EMUFRA / NCOMPX*0.0D0 /
+ DATA IEMUMA / NCOMPX*1 /
+ DATA IEMUCH / NCOMPX*1 /
+ DATA NCOMPO / 0 /
+ DATA IEMUL / 0 /
+
+ END
+*
+*
+*===hadprp=============================================================*
+*
+CDECK ID>, DT_HADPRP
+ BLOCK DATA DT_HADPRP
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* auxiliary common for reggeon exchange (DTUNUC 1.x)
+ COMMON /DTQUAR/ IQECHR(-6:6),IQBCHR(-6:6),IQICHR(-6:6),
+ & IQSCHR(-6:6),IQCCHR(-6:6),IQUCHR(-6:6),
+ & IQTCHR(-6:6),MQUARK(3,39)
+* hadron index conversion (BAMJET <--> PDG)
+ COMMON /DTHAIC/ IPDG2(2,7),IBAM2(2,7),IPDG3(2,22),IBAM3(2,22),
+ & IPDG4(2,29),IBAM4(2,29),IPDG5(2,19),IBAM5(2,19),
+ & IAMCIN(210)
+* names of hadrons used in input-cards
+ CHARACTER*8 BTYPE
+ COMMON /DTPAIN/ BTYPE(30)
+
+* / DTQUAR /
+*----------------------------------------------------------------------*
+* *
+* Quark content of particles: *
+* index quark el. charge bar. charge isospin isospin3 *
+* 1 = u 2/3 1/3 1/2 1/2 *
+* -1 = ubar -2/3 -1/3 1/2 -1/2 *
+* 2 = d -1/3 1/3 1/2 -1/2 *
+* -2 = dbar 1/3 -1/3 1/2 1/2 *
+* 3 = s -1/3 1/3 0 0 *
+* -3 = sbar 1/3 -1/3 0 0 *
+* 4 = c 2/3 1/3 0 0 *
+* -4 = cbar -2/3 -1/3 0 0 *
+* 5 = b -1/3 1/3 0 0 *
+* -5 = bbar 1/3 -1/3 0 0 *
+* 6 = t 2/3 1/3 0 0 *
+* -6 = tbar -2/3 -1/3 0 0 *
+* *
+* Mquark = particle quark composition (Paprop numbering) *
+* Iqechr = electric charge ( in 1/3 unit ) *
+* Iqbchr = baryonic charge ( in 1/3 unit ) *
+* Iqichr = isospin ( in 1/2 unit ), z component *
+* Iqschr = strangeness *
+* Iqcchr = charm *
+* Iquchr = beauty *
+* Iqtchr = ...... *
+* *
+*----------------------------------------------------------------------*
+ DATA IQECHR / -2, 1, -2, 1, 1, -2, 0, 2, -1, -1, 2, -1, 2 /
+ DATA IQBCHR / 6*-1, 0, 6*1 /
+ DATA IQICHR / 4*0, 1, -1, 0, 1, -1, 4*0 /
+ DATA IQSCHR / 3*0, 1, 5*0, -1, 3*0 /
+ DATA IQCCHR / 2*0, -1, 7*0, 1, 2*0 /
+ DATA IQUCHR / 0, 1, 9*0, -1, 0 /
+ DATA IQTCHR / -1, 11*0, 1 /
+ DATA MQUARK /
+ & 2, 1, 1, -2,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 2, 2, 1, -2,-2,-1, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 1,-2, 0, 2,-1, 0, 1,-3, 0,
+ & 3,-1, 0, 1, 2, 3, -1,-2,-3, 0, 0, 0, 2, 2, 3,
+ & 1, 1, 3, 1, 2, 3, 1,-1, 0, 2,-3, 0, 3,-2, 0,
+ & 2,-2, 0, 3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & -1,-1,-3, -1,-2,-3, -2,-2,-3, 1, 3, 3, -1,-3,-3,
+ & 2, 3, 3, -2,-3,-3, 3, 3, 3, -3,-3,-3 /
+
+* / DTHAIC /
+* (renamed) (HAdron InDex COnversion)
+* translation table version filled up by r.e. 25.01.94 *
+ DATA IAMCIN /
+ &2212,-2212,11,-11,12, -12,22,2112,-2112,-13,
+ &13,130,211,-211,321, -321,3122,-3122,310,3112,
+ &3222,3212,111,311,-311, 0,0,0,0,0,
+ &221,213,113,-213,223, 323,313,-323,-313,10323,
+ &10313,-10323,-10313,30323,30313, -30323,-30313,3224,3214,3114,
+ &3216,3218,2224,2214,2114, 1114,12224,12214,12114,11114,
+ &99999,99999,22212,22112,32124, 31214,-2224,-2214,-2114,-1114,
+ &-12224,-12214,-12114,-11114,-2124, -1214,4*99999,
+ &5*99999, 5*99999,
+ &4*99999,331, 333,3322,3312,-3222,-3212,
+ &-3112,-3322,-3312,3224,3214, 3114,3324,3314,3334,-3224,
+ &-3214,-3114,-3324,-3314,-3334, 421,411,-411,-421,431,
+ &-431,441,423,413,-413, -423,433,-433,20443,443,
+ &-15,15,16,-16,14, -14,4122,4232,4132,4222,
+ &4212,4112,3*99999, 3*99999,-4122,-4232,
+ &-4132,-4222,-4212,-4112,99999, 5*99999,
+ &5*99999, 5*99999,
+ &10*99999,
+ &5*99999 , 20211,20111,-20211,99999,20321,
+ &-20321,20311,-20311,7*99999 ,
+ &7*99999,12212,12112,99999/
+
+* / DTHAIC /
+* (HAdron InDex COnversion)
+ DATA (IPDG2(1,K),K=1,7)
+ & / -11, -12, -13, -15, -16, -14, 0/
+ DATA (IBAM2(1,K),K=1,7)
+ & / 4, 6, 10, 131, 134, 136, 0/
+ DATA (IPDG2(2,K),K=1,7)
+ & / 11, 12, 22, 13, 15, 16, 14/
+ DATA (IBAM2(2,K),K=1,7)
+ & / 3, 5, 7, 11, 132, 133, 135/
+ DATA (IPDG3(1,K),K=1,22)
+ & / -211, -321, -311, -213, -323, -313, -411, -421,
+ & -431, -413, -423, -433, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0/
+ DATA (IBAM3(1,K),K=1,22)
+ & / 14, 16, 25, 34, 38, 39, 118, 119,
+ & 121, 125, 126, 128, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0/
+ DATA (IPDG3(2,K),K=1,22)
+ & / 130, 211, 321, 310, 111, 311, 221, 213,
+ & 113, 223, 323, 313, 331, 333, 421, 411,
+ & 431, 441, 423, 413, 433, 443/
+ DATA (IBAM3(2,K),K=1,22)
+ & / 12, 13, 15, 19, 23, 24, 31, 32,
+ & 33, 35, 36, 37, 95, 96, 116, 117,
+ & 120, 122, 123, 124, 127, 130/
+ DATA (IPDG4(1,K),K=1,29)
+ & / -2212, -2112, -3122, -2224, -2214, -2114, -1114, -2124,
+ & -1214, -3222, -3212, -3112, -3322, -3312, -3224, -3214,
+ & -3114, -3324, -3314, -3334, -4122, -4232, -4132, -4222,
+ & -4212, -4112, 0, 0, 0/
+ DATA (IBAM4(1,K),K=1,29)
+ & / 2, 9, 18, 67, 68, 69, 70, 75,
+ & 76, 99, 100, 101, 102, 103, 110, 111,
+ & 112, 113, 114, 115, 149, 150, 151, 152,
+ & 153, 154, 0, 0, 0/
+ DATA (IPDG4(2,K),K=1,29)
+ & / 2212, 2112, 3122, 3112, 3222, 3212, 3224, 3214,
+ & 3114, 3216, 3218, 2224, 2214, 2114, 1114, 3322,
+ & 3312, 3224, 3214, 3114, 3324, 3314, 3334, 4122,
+ & 4232, 4132, 4222, 4212, 4112/
+ DATA (IBAM4(2,K),K=1,29)
+ & / 1, 8, 17, 20, 21, 22, 48, 49,
+ & 50, 51, 52, 53, 54, 55, 56, 97,
+ & 98, 104, 105, 106, 107, 108, 109, 137,
+ & 138, 139, 140, 141, 142/
+ DATA (IPDG5(1,K),K=1,19)
+ & /-10323,-10313,-30323,-30313,-12224,-12214,-12114,-11114,
+ & -20211,-20321,-20311, 0, 0, 0, 0, 0,
+ & 0, 0, 0/
+ DATA (IBAM5(1,K),K=1,19)
+ & / 42, 43, 46, 47, 71, 72, 73, 74,
+ & 188, 191, 193, 0, 0, 0, 0, 0,
+ & 0, 0, 0/
+ DATA (IPDG5(2,K),K=1,19)
+ & / 10323, 10313, 30323, 30313, 12224, 12214, 12114, 11114,
+ & 22212, 22112, 32124, 31214, 20443, 20211, 20111, 20321,
+ & 20311, 12212, 12112/
+ DATA (IBAM5(2,K),K=1,19)
+ & / 40, 41, 44, 45, 57, 58, 59, 60,
+ & 63, 64, 65, 66, 129, 186, 187, 190,
+ & 192, 208, 209/
+
+* / DTPAIN /
+* internal particle names
+ DATA BTYPE / 'PROTON ' , 'APROTON ' , 'ELECTRON' , 'POSITRON' ,
+ &'NEUTRIE ' , 'ANEUTRIE' , 'PHOTON ' , 'NEUTRON ' , 'ANEUTRON' ,
+ &'MUON+ ' , 'MUON- ' , 'KAONLONG' , 'PION+ ' , 'PION- ' ,
+ &'KAON+ ' , 'KAON- ' , 'LAMBDA ' , 'ALAMBDA ' , 'KAONSHRT' ,
+ &'SIGMA- ' , 'SIGMA+ ' , 'SIGMAZER' , 'PIZERO ' , 'KAONZERO' ,
+ &'AKAONZER' , 'NEUTRIM ' , 'ANEUTRIM' , 'NEUTRIT ' , 'ANEUTRIT' ,
+ &'BLANK ' /
+
+ END
+*
+*===blkd46=============================================================*
+*
+CDECK ID>, DT_BLKD46
+ BLOCK DATA DT_BLKD46
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( AMELCT = 0.51099906 D-03 )
+ PARAMETER ( AMMUON = 0.105658389 D+00 )
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+
+* / DTPART /
+* Particle masses Engel version JETSET compatible
+ DATA (AAM(K),K=1,85) /
+ & .9383D+00, .9383D+00, AMELCT , AMELCT , .0000D+00,
+ & .0000D+00, .0000D+00, .9396D+00, .9396D+00, AMMUON ,
+ & AMMUON , .4977D+00, .1396D+00, .1396D+00, .4936D+00,
+ & .4936D+00, .1116D+01, .1116D+01, .4977D+00, .1197D+01,
+ & .1189D+01, .1193D+01, .1350D+00, .4977D+00, .4977D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & .5488D+00, .7669D+00, .7700D+00, .7669D+00, .7820D+00,
+ & .8921D+00, .8962D+00, .8921D+00, .8962D+00, .1300D+01,
+ & .1300D+01, .1300D+01, .1300D+01, .1421D+01, .1421D+01,
+ & .1421D+01, .1421D+01, .1383D+01, .1384D+01, .1387D+01,
+ & .1820D+01, .2030D+01, .1231D+01, .1232D+01, .1233D+01,
+ & .1234D+01, .1675D+01, .1675D+01, .1675D+01, .1675D+01,
+ & .1500D+01, .1500D+01, .1515D+01, .1515D+01, .1775D+01,
+ & .1775D+01, .1231D+01, .1232D+01, .1233D+01, .1234D+01,
+ & .1675D+01, .1675D+01, .1675D+01, .1675D+01, .1515D+01,
+ & .1515D+01, .2500D+01, .4890D+00, .4890D+00, .4890D+00,
+ & .1300D+01, .1300D+01, .1300D+01, .1300D+01, .2200D+01 /
+ DATA (AAM(K),K=86,183) /
+ & .2200D+01, .2200D+01, .2200D+01, .1700D+01, .1700D+01,
+ & .1700D+01, .1700D+01, .1820D+01, .2030D+01, .9575D+00,
+ & .1019D+01, .1315D+01, .1321D+01, .1189D+01, .1193D+01,
+ & .1197D+01, .1315D+01, .1321D+01, .1383D+01, .1384D+01,
+ & .1387D+01, .1532D+01, .1535D+01, .1672D+01, .1383D+01,
+ & .1384D+01, .1387D+01, .1532D+01, .1535D+01, .1672D+01,
+ & .1865D+01, .1869D+01, .1869D+01, .1865D+01, .1969D+01,
+ & .1969D+01, .2980D+01, .2007D+01, .2010D+01, .2010D+01,
+ & .2007D+01, .2113D+01, .2113D+01, .3686D+01, .3097D+01,
+ & .1784D+01, .1784D+01, .0000D+00, .0000D+00, .0000D+00,
+ & .0000D+00, .2285D+01, .2460D+01, .2460D+01, .2452D+01,
+ & .2453D+01, .2454D+01, .2560D+01, .2560D+01, .2730D+01,
+ & .3610D+01, .3610D+01, .3790D+01, .2285D+01, .2460D+01,
+ & .2460D+01, .2452D+01, .2453D+01, .2454D+01, .2560D+01,
+ & .2560D+01, .2730D+01, .3610D+01, .3610D+01, .3790D+01,
+ & .2490D+01, .2490D+01, .2490D+01, .2610D+01, .2610D+01,
+ & .2770D+01, .3670D+01, .3670D+01, .3850D+01, .4890D+01,
+ & .2490D+01, .2490D+01, .2490D+01, .2610D+01, .2610D+01,
+ & .2770D+01, .3670D+01, .3670D+01, .3850D+01, .4890D+01,
+ & .1250D+01, .1250D+01, .1250D+01 /
+ DATA (AAM ( I ), I = 184,210 ) /
+ & 1.44000000000000D+00, 1.44000000000000D+00, 1.30000000000000D+00,
+ & 1.30000000000000D+00, 1.30000000000000D+00, 1.40000000000000D+00,
+ & 1.46000000000000D+00, 1.46000000000000D+00, 1.46000000000000D+00,
+ & 1.46000000000000D+00, 1.60000000000000D+00, 1.60000000000000D+00,
+ & 1.66000000000000D+00, 1.66000000000000D+00, 1.66000000000000D+00,
+ & 1.66000000000000D+00, 1.66000000000000D+00, 1.66000000000000D+00,
+ & 1.95000000000000D+00, 1.95000000000000D+00, 1.95000000000000D+00,
+ & 1.95000000000000D+00, 2.25000000000000D+00, 2.25000000000000D+00,
+ & 1.44000000000000D+00, 1.44000000000000D+00, 0.00000000000000D+00/
+* Particle mean lives
+ DATA (TAU(K),K=1,183) /
+ & .1000D+19, .1000D+19, .1000D+19, .1000D+19, .1000D+19,
+ & .1000D+19, .1000D+19, .9180D+03, .9180D+03, .2200D-05,
+ & .2200D-05, .5200D-07, .2600D-07, .2600D-07, .1200D-07,
+ & .1200D-07, .2600D-09, .2600D-09, .9000D-10, .1500D-09,
+ & .8000D-10, .5000D-14, .8000D-16, .0000D+00, .0000D+00,
+ & 70*.0000D+00,
+ & .0000D+00, .3000D-09, .1700D-09, .8000D-10, .1000D-13,
+ & .1500D-09, .3000D-09, .1700D-09, .0000D+00, .0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .1000D-09, .0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .0000D+00, .1000D-09,
+ & .0000D+00, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & .9000D-11, .9000D-11, .9000D-11, .9000D-11, .1000D+19,
+ & .1000D+19, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & 40*.0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00 /
+ DATA ( TAU ( I ), I = 184,210 ) /
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00,
+ & 0.00000000000000D+00, 0.00000000000000D+00, 0.00000000000000D+00/
+* Resonance width Gamma in GeV
+ DATA (GA(K),K= 1,85) /
+ & 30*.0000D+00,
+ & .8500D-06, .1520D+00, .1520D+00, .1520D+00, .1000D-01,
+ & .7900D-01, .7900D-01, .7900D-01, .7900D-01, .4500D+00,
+ & .4500D+00, .4500D+00, .4500D+00, .1080D+00, .1080D+00,
+ & .1080D+00, .1080D+00, .5000D-01, .5000D-01, .5000D-01,
+ & .8500D-01, .1800D+00, .1150D+00, .1150D+00, .1150D+00,
+ & .1150D+00, .2000D+00, .2000D+00, .2000D+00, .2000D+00,
+ & .2000D+00, .2000D+00, .1000D+00, .1000D+00, .2000D+00,
+ & .2000D+00, .1150D+00, .1150D+00, .1150D+00, .1150D+00,
+ & .2000D+00, .2000D+00, .2000D+00, .2000D+00, .1000D+00,
+ & .1000D+00, .2000D+00, .1000D+00, .1000D+00, .1000D+00,
+ & .1000D+00, .1000D+00, .1000D+00, .1000D+00, .2000D+00 /
+ DATA (GA(K),K= 86,183) /
+ & .2000D+00, .2000D+00, .2000D+00, .1500D+00, .1500D+00,
+ & .1500D+00, .1500D+00, .8500D-01, .1800D+00, .2000D-02,
+ & .4000D-02, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .3400D-01, .3400D-01,
+ & .3600D-01, .9000D-02, .9000D-02, .0000D+00, .3400D-01,
+ & .3400D-01, .3600D-01, .9000D-02, .9000D-02, .0000D+00,
+ & .0000D+00, .0000D+00, .0000D+00, .0000D+00, .0000D+00,
+ & .0000D+00, .0000D+00, .5000D-02, .2000D-02, .2000D-02,
+ & .5000D-02, .2000D-02, .2000D-02, .2000D-03, .7000D-03,
+ & 50*.0000D+00,
+ & .3000D+00, .3000D+00, .3000D+00 /
+ DATA ( GA ( I ), I = 184,210 ) /
+ & 2.00000000000000D-01, 2.00000000000000D-01, 3.00000000000000D-01,
+ & 3.00000000000000D-01, 3.00000000000000D-01, 2.70000000000000D-01,
+ & 2.50000000000000D-01, 2.50000000000000D-01, 2.50000000000000D-01,
+ & 2.50000000000000D-01, 1.50000000000000D-01, 1.50000000000000D-01,
+ & 1.00000000000000D-01, 1.00000000000000D-01, 1.00000000000000D-01,
+ & 1.00000000000000D-01, 1.00000000000000D-01, 1.00000000000000D-01,
+ & 6.00000000000000D-02, 6.00000000000000D-02, 6.00000000000000D-02,
+ & 6.00000000000000D-02, 5.50000000000000D-02, 5.50000000000000D-02,
+ & 2.00000000000000D-01, 2.00000000000000D-01, 0.00000000000000D+00/
+* Particle names
+* S+1385+Sigma+(1385) L02030+Lambda0(2030)
+* Rho77=Rho(770) Om783=Omega(783) K*14=K*(1420) and so on
+* designation N*@@ means N*@1(@2)
+ DATA (ANAME(K),K=1,85) /
+ & 'P ','AP ','E- ','E+ ','NUE ',
+ & 'ANUE ','GAM ','NEU ','ANEU ','MUE+ ',
+ & 'MUE- ','K0L ','PI+ ','PI- ','K+ ',
+ & 'K- ','LAM ','ALAM ','K0S ','SIGM- ',
+ & 'SIGM+ ','SIGM0 ','PI0 ','K0 ','AK0 ',
+ & 'BLANK ','BLANK ','BLANK ','BLANK ','BLANK ',
+ & 'ETA550 ','RHO+77 ','RHO077 ','RHO-77 ','OM0783 ',
+ & 'K*+892 ','K*0892 ','K*-892 ','AK*089 ','KA+125 ',
+ & 'KA0125 ','KA-125 ','AKA012 ','K*+142 ','K*0142 ',
+ & 'K*-142 ','AK*014 ','S+1385 ','S01385 ','S-1385 ',
+ & 'L01820 ','L02030 ','N*++12 ','N*+ 12 ','N*012 ',
+ & 'N*-12 ','N*++16 ','N*+16 ','N*016 ','N*-16 ',
+ & 'N*+14 ','N*014 ','N*+15 ','N*015 ','N*+18 ',
+ & 'N*018 ','AN--12 ','AN*-12 ','AN*012 ','AN*+12 ',
+ & 'AN--16 ','AN*-16 ','AN*016 ','AN*+16 ','AN*-15 ',
+ & 'AN*015 ','DE*=24 ','RPI+49 ','RPI049 ','RPI-49 ',
+ & 'PIN++ ','PIN+0 ','PIN+- ','PIN-0 ','PPPI ' /
+ DATA (ANAME(K),K=86,183) /
+ & 'PNPI ','APPPI ','APNPI ','K+PPI ','K-PPI ',
+ & 'K+NPI ','K-NPI ','S+1820 ','S-2030 ','ETA* ',
+ & 'PHI ','TETA0 ','TETA- ','ASIG- ','ASIG0 ',
+ & 'ASIG+ ','ATETA0 ','ATETA+ ','SIG*+ ','SIG*0 ',
+ & 'SIG*- ','TETA*0 ','TETA* ','OMEGA- ','ASIG*- ',
+ & 'ASIG*0 ','ASIG*+ ','ATET*0 ','ATET*+ ','OMEGA+ ',
+ & 'D0 ','D+ ','D- ','AD0 ','F+ ',
+ & 'F- ','ETAC ','D*0 ','D*+ ','D*- ',
+ & 'AD*0 ','F*+ ','F*- ','PSI ','JPSI ',
+ & 'TAU+ ','TAU- ','NUET ','ANUET ','NUEM ',
+ & 'ANUEM ','C0+ ','A+ ','A0 ','C1++ ',
+ & 'C1+ ','C10 ','S+ ','S0 ','T0 ',
+ & 'XU++ ','XD+ ','XS+ ','AC0- ','AA- ',
+ & 'AA0 ','AC1-- ','AC1- ','AC10 ','AS- ',
+ & 'AS0 ','AT0 ','AXU-- ','AXD- ','AXS ',
+ & 'C1*++ ','C1*+ ','C1*0 ','S*+ ','S*0 ',
+ & 'T*0 ','XU*++ ','XD*+ ','XS*+ ','TETA++ ',
+ & 'AC1*-- ','AC1*- ','AC1*0 ','AS*- ','AS*0 ',
+ & 'AT*0 ','AXU*-- ','AXD*- ','AXS*- ','ATET-- ',
+ & 'RO ','R+ ','R- ' /
+ DATA ( ANAME ( I ), I = 184,210 ) /
+ &'AN*-14 ','AN*014 ','PI+130 ','PI0130 ','PI-130 ','F01400 ',
+ &'K*+146 ','K*-146 ','K*0146 ','AK0146 ','L01600 ','AL0160 ',
+ &'S+1660 ','S01660 ','S-1660 ','AS-166 ','AS0166 ','AS+166 ',
+ &'X01950 ','X-1950 ','AX0195 ','AX+195 ','OM-225 ','AOM+22 ',
+ &'N*+14 ','N*014 ','BLANK '/
+* Charge of particles and resonances
+ DATA (IICH ( I ), I = 1,210 ) /
+ & 1, -1, -1, 1, 0, 0, 0, 0, 0, 1, -1, 0, 1, -1, 1,
+ & -1, 0, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0, -1, 0, 1, 0,
+ & -1, 0, 1, 0, -1, 0, 0, 2, 1, 0, -1, 2, 1, 0, -1,
+ & 1, 0, 1, 0, 1, 0, -2, -1, 0, 1, -2, -1, 0, 1, -1,
+ & 0, 1, 1, 0, -1, 2, 1, 0, -1, 2, 1, 0, -1, 2, 0,
+ & 1, -1, 1, -1, 0, 0, 0, -1, -1, 0, 1, 0, 1, 1, 0,
+ & -1, 0, -1, -1, -1, 0, 1, 0, 1, 1, 0, 1, -1, 0, 1,
+ & -1, 0, 0, 1, -1, 0, 1, -1, 0, 0, 1, -1, 0, 0, 0,
+ & 0, 1, 1, 0, 2, 1, 0, 1, 0, 0, 2, 1, 1, -1, -1,
+ & 0, -2, -1, 0, -1, 0, 0, -2, -1, -1, 2, 1, 0, 1, 0,
+ & 0, 2, 1, 1, 2, -2, -1, 0, -1, 0, 0, -2, -1, -1, -2,
+ & 0, 1, -1, -1, 0, 1, 0, -1, 0, 1, -1, 0, 0, 0, 0,
+ & 1, 0, -1, -1, 0, 1, 0, -1, 0, 1, -1, 1, 1, 0, 0/
+* Particle baryonic charges
+ DATA (IIBAR ( I ), I = 1,210 ) /
+ & 1, -1, 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 0, 0,
+ & 0, 1, -1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ & 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ & -1, 2, 0, 0, 0, 1, 1, 1, 1, 2, 2, 0, 0, 1, 1,
+ & 1, 1, 1, 1, 0, 0, 1, 1, -1, -1, -1, -1, -1, 1, 1,
+ & 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1,
+ & -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1,
+ & 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ & 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1,
+ & 1, 1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, 0/
+* First number of decay channels used for resonances
+* and decaying particles
+ DATA K1/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17,
+ & 18, 24, 30, 34, 38, 40, 41, 43, 44, 136, 138, 330, 327, 328,
+ & 2*330, 46, 51, 52, 54, 55, 58,
+* 50
+ & 60, 62, 64, 66, 68, 70, 72, 74, 82, 90, 98, 106, 109, 112, 114,
+ & 123, 140, 141, 143, 145, 146, 150, 157, 164, 168, 174, 180, 187,
+ & 194, 202, 210, 211, 213, 215, 216, 220, 227, 234, 238, 245, 252,
+* 85
+ & 254, 255, 256, 257, 259, 262, 265, 267, 269, 272, 276, 279, 282,
+ & 286, 290, 293, 299, 331, 335, 339, 340, 341, 343, 344, 345, 346,
+ & 347, 350, 353, 356, 358, 360, 363, 366, 369, 372, 374, 376, 379,
+ & 383, 385, 387, 391, 394, 397, 400, 402, 405, 408, 410, 412, 414,
+ & 417, 420, 425, 430, 431, 432, 433, 434, 448, 452, 457, 458, 459,
+ & 460, 461, 462, 466, 468, 470, 472, 486, 490, 495, 496, 497, 498,
+ & 499, 500, 504, 506, 508, 510, 511, 512, 513, 514, 515, 516, 517,
+ & 518, 519, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 534,
+ & 537, 539, 541, 547, 553, 558, 563, 568, 572, 573, 574, 575, 576,
+ & 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589,
+ & 590, 596, 602 /
+* Last number of decay channels used for resonances
+* and decaying particles
+ DATA K2/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17,
+ & 23, 29, 31, 35, 39, 40, 42, 43, 45, 137, 139, 330, 327, 328,
+ & 2* 330, 50, 51, 53, 54, 57,
+* 50
+ & 59, 61, 63, 65, 67, 69, 71, 73, 81, 89, 97, 105, 108, 111, 113,
+ & 122, 135, 140, 142, 144, 145, 149, 156, 163, 167, 173, 179, 186,
+ & 193, 201, 209, 210, 212, 214, 215, 219, 226, 233, 237, 244, 251,
+* 85
+ & 253, 254, 255, 256, 258, 261, 264, 266, 268, 271, 275, 278, 281,
+ & 285, 289, 292, 298, 307, 334, 338, 339, 340, 342, 343, 344, 345,
+ & 346, 349, 352, 355, 357, 359, 362, 365, 368, 371, 373, 375, 378,
+ & 382, 384, 386, 390, 393, 396, 399, 401, 404, 407, 409, 411, 413,
+ & 416, 419, 424, 429, 430, 431, 432, 433, 447, 451, 456, 457, 458,
+ & 459, 460, 461, 465, 467, 469, 471, 485, 489, 494, 495, 496, 497,
+ & 498, 499, 503, 505, 507, 509, 510, 511, 512, 513, 514, 515, 516,
+ & 517, 518, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 533,
+ & 536, 538, 540, 546, 552, 557, 562, 567, 571, 572, 573, 574, 575,
+ & 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588,
+ & 589, 595, 601, 602 /
+
+ END
+*
+*===blkd47=============================================================*
+*
+CDECK ID>, DT_BLKD47
+ BLOCK DATA DT_BLKD47
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* HADRIN: decay channel information
+ PARAMETER (IDMAX9=602)
+ CHARACTER*8 ZKNAME
+ COMMON /HNDECH/ ZKNAME(IDMAX9),WT(IDMAX9),NZK(IDMAX9,3)
+
+* Name of decay channel
+* Designation N*@ means N*@1(1236)
+* @1=# means ++, @1 = = means --
+* Designation P+/0/- means Pi+/Pi0/Pi- , respectively
+ DATA (ZKNAME(K),K= 1, 85) /
+ & 'P ','AP ','E- ','E+ ','NUE ',
+ & 'ANUE ','GAM ','PE-NUE ','APEANU ','EANUNU ',
+ & 'E-NUAN ','3PI0 ','PI+-0 ','PIMUNU ','PIE-NU ',
+ & 'MU+NUE ','MU-NUE ','MU+NUE ','PI+PI0 ','PI++- ',
+ & 'PI+00 ','M+P0NU ','E+P0NU ','MU-NU ','PI-0 ',
+ & 'PI+-- ','PI-00 ','M-P0NU ','E-P0NU ','PPI- ',
+ & 'NPI0 ','PD-NUE ','PM-NUE ','APPI+ ','ANPI0 ',
+ & 'APE+NU ','APM+NU ','PI+PI- ','PI0PI0 ','NPI- ',
+ & 'PPI0 ','NPI+ ','LAGA ','GAGA ','GAE+E- ',
+ & 'GAGA ','GAGAP0 ','PI000 ','PI+-0 ','PI+-GA ',
+ & 'PI+0 ','PI+- ','PI00 ','PI-0 ','PI+-0 ',
+ & 'PI+- ','PI0GA ','K+PI0 ','K0PI+ ','KOPI0 ',
+ & 'K+PI- ','K-PI0 ','AK0PI- ','AK0PI0 ','K-PI+ ',
+ & 'K+PI0 ','K0PI+ ','K0PI0 ','K+PI- ','K-PI0 ',
+ & 'K0PI- ','AK0PI0 ','K-PI+ ','K+PI0 ','K0PI+ ',
+ & 'K+89P0 ','K08PI+ ','K+RO77 ','K0RO+7 ','K+OM07 ',
+ & 'K+E055 ','K0PI0 ','K+PI+ ','K089P0 ','K+8PI- ' /
+ DATA (ZKNAME(K),K= 86,170) /
+ & 'K0R077 ','K+R-77 ','K+R-77 ','K0OM07 ','K0E055 ',
+ & 'K-PI0 ','K0PI- ','K-89P0 ','AK08P- ','K-R077 ',
+ & 'AK0R-7 ','K-OM07 ','K-E055 ','AK0PI0 ','K-PI+ ',
+ & 'AK08P0 ','K-8PI+ ','AK0R07 ','AK0OM7 ','AK0E05 ',
+ & 'LA0PI+ ','SI0PI+ ','SI+PI0 ','LA0PI0 ','SI+PI- ',
+ & 'SI-PI+ ','LA0PI- ','SI0PI- ','NEUAK0 ','PK- ',
+ & 'SI+PI- ','SI0PI0 ','SI-PI+ ','LA0ET0 ','S+1PI- ',
+ & 'S-1PI+ ','SO1PI0 ','NEUAK0 ','PK- ','LA0PI0 ',
+ & 'LA0OM0 ','LA0RO0 ','SI+RO- ','SI-RO+ ','SI0RO0 ',
+ & 'LA0ET0 ','SI0ET0 ','SI+PI- ','SI-PI+ ','SI0PI0 ',
+ & 'K0S ','K0L ','K0S ','K0L ','P PI+ ',
+ & 'P PI0 ','N PI+ ','P PI- ','N PI0 ','N PI- ',
+ & 'P PI+ ','N*#PI0 ','N*+PI+ ','PRHO+ ','P PI0 ',
+ & 'N PI+ ','N*#PI- ','N*+PI0 ','N*0PI+ ','PRHO0 ',
+ & 'NRHO+ ','P PI- ','N PI0 ','N*+PI- ','N*0PI0 ',
+ & 'N*-PI+ ','PRHO- ','NRHO0 ','N PI- ','N*0PI- ',
+ & 'N*-PI0 ','NRHO- ','PETA0 ','N*#PI- ','N*+PI0 ' /
+ DATA (ZKNAME(K),K=171,255) /
+ & 'N*0PI+ ','PRHO0 ','NRHO+ ','NETA0 ','N*+PI- ',
+ & 'N*0PI0 ','N*-PI+ ','PRHO- ','NRHO0 ','P PI0 ',
+ & 'N PI+ ','N*#PI- ','N*+PI0 ','N*0PI+ ','PRHO0 ',
+ & 'NRHO+ ','P PI- ','N PI0 ','N*+PI- ','N*0PI0 ',
+ & 'N*-PI+ ','PRHO- ','NRHO0 ','P PI0 ','N PI+ ',
+ & 'PRHO0 ','NRHO+ ','LAMK+ ','S+ K0 ','S0 K+ ',
+ & 'PETA0 ','P PI- ','N PI0 ','PRHO- ','NRHO0 ',
+ & 'LAMK0 ','S0 K0 ','S- K+ ','NETA/ ','APPI- ',
+ & 'APPI0 ','ANPI- ','APPI+ ','ANPI0 ','ANPI+ ',
+ & 'APPI- ','AN*=P0 ','AN*-P- ','APRHO- ','APPI0 ',
+ & 'ANPI- ','AN*=P+ ','AN*-P0 ','AN*0P- ','APRHO0 ',
+ & 'ANRHO- ','APPI+ ','ANPI0 ','AN*-P+ ','AN*0P0 ',
+ & 'AN*+P- ','APRHO+ ','ANRHO0 ','ANPI+ ','AN*0P+ ',
+ & 'AN*+P0 ','ANRHO+ ','APPI0 ','ANPI- ','AN*=P+ ',
+ & 'AN*-P0 ','AN*0P- ','APRHO0 ','ANRHO- ','APPI+, ',
+ & 'ANPI0 ','AN*-P+ ','AN*0P0 ','AN*+P- ','APRHO+ ',
+ & 'ANRHO0 ','PN*014 ','NN*=14 ','PI+0 ','PI+- ' /
+ DATA (ZKNAME(K),K=256,340) /
+ & 'PI-0 ','P+0 ','N++ ','P+- ','P00 ',
+ & 'N+0 ','N+- ','N00 ','P-0 ','N-0 ',
+ & 'P-- ','PPPI0 ','PNPI+ ','PNPI0 ','PPPI- ',
+ & 'NNPI+ ','APPPI0 ','APNPI+ ','ANNPI0 ','ANPPI- ',
+ & 'APNPI0 ','APPPI- ','ANNPI- ','K+PPI0 ','K+NPI+ ',
+ & 'K0PPI0 ','K-PPI0 ','K-NPI+ ','AKPPI- ','AKNPI0 ',
+ & 'K+NPI0 ','K+PPI- ','K0PPI0 ','K0NPI+ ','K-NPI0 ',
+ & 'K-PPI- ','AKNPI- ','PAK0 ','SI+PI0 ','SI0PI+ ',
+ & 'SI+ETA ','S+1PI0 ','S01PI+ ','NEUK- ','LA0PI- ',
+ & 'SI-OM0 ','LA0RO- ','SI0RO- ','SI-RO0 ','SI-ET0 ',
+ & 'SI0PI- ','SI-0 ','BLANC ','BLANC ','BLANC ',
+ & 'BLANC ','BLANC ','BLANC ','BLANC ','BLANC ',
+ & 'BLANC ','BLANC ','BLANC ','BLANC ','BLANC ',
+ & 'BLANC ','BLANC ','BLANC ','BLANC ','BLANC ',
+ & 'BLANC ','BLANC ','BLANC ','BLANC ','BLANC ',
+ & 'EPI+- ','EPI00 ','GAPI+- ','GAGA* ','K+- ',
+ & 'KLKS ','PI+-0 ','EGA ','LPI0 ','LPI ' /
+ DATA (ZKNAME(K),K=341,425) /
+ & 'APPI0 ','ANPI- ','ALAGA ','ANPI ','ALPI0 ',
+ & 'ALPI+ ','LAPI+ ','SI+PI0 ','SI0PI+ ','LAPI0 ',
+ & 'SI+PI- ','SI-PI+ ','LAPI- ','SI-PI0 ','SI0PI- ',
+ & 'TE0PI0 ','TE-PI+ ','TE0PI- ','TE-PI0 ','TE0PI ',
+ & 'TE-PI ','LAK- ','ALPI- ','AS-PI0 ','AS0PI- ',
+ & 'ALPI0 ','AS+PI- ','AS-PI+ ','ALPI+ ','AS+PI0 ',
+ & 'AS0PI+ ','AT0PI0 ','AT+PI- ','AT0PI+ ','AT+PI0 ',
+ & 'AT0PI ','AT+PI ','ALK+ ','K-PI+ ','K-PI+0 ',
+ & 'K0PI+- ','K0PI0 ','K-PI++ ','AK0PI+ ','K+PI-- ',
+ & 'K0PI- ','K+PI- ','K+PI-0 ','AKPI-+ ','AK0PI0 ',
+ & 'ETAPIF ','K++- ','K+AK0 ','ETAPI- ','K--+ ',
+ & 'K-K0 ','PI00 ','PI+- ','GAGA ','D0PI0 ',
+ & 'D0GA ','D0PI+ ','D+PI0 ','DFGA ','AD0PI- ',
+ & 'D-PI0 ','D-GA ','AD0PI0 ','AD0GA ','F+GA ',
+ & 'F+GA ','F-GA ','F-GA ','PSPI+- ','PSPI00 ',
+ & 'PSETA ','E+E- ','MUE+- ','PI+-0 ','M+NN ',
+ & 'E+NN ','RHO+NT ','PI+ANT ','K*+ANT ','M-NN ' /
+ DATA (ZKNAME(K),K=426,510) /
+ & 'E-NN ','RHO-NT ','PI-NT ','K*-NT ','NUET ',
+ & 'ANUET ','NUEM ','ANUEM ','SI+ETA ','SI+ET* ',
+ & 'PAK0 ','TET0K+ ','SI*+ET ','N*+AK0 ','N*++K- ',
+ & 'LAMRO+ ','SI0RO+ ','SI+RO0 ','SI+OME ','PAK*0 ',
+ & 'N*+AK* ','N*++K* ','SI+AK0 ','TET0PI ','SI+AK* ',
+ & 'TET0RO ','SI0AK* ','SI+K*- ','TET0OM ','TET-RO ',
+ & 'SI*0AK ','C0+PI+ ','C0+PI0 ','C0+PI- ','A+GAM ',
+ & 'A0GAM ','TET0AK ','TET0K* ','OM-RO+ ','OM-PI+ ',
+ & 'C1++AK ','A+PI+ ','C0+AK0 ','A0PI+ ','A+AK0 ',
+ & 'T0PI+ ','ASI-ET ','ASI-E* ','APK0 ','ATET0K ',
+ & 'ASI*-E ','AN*-K0 ','AN*--K ','ALAMRO ','ASI0RO ',
+ & 'ASI-RO ','ASI-OM ','APK*0 ','AN*-K* ','AN*--K ',
+ & 'ASI-K0 ','ATETPI ','ASI-K* ','ATETRO ','ASI0K* ',
+ & 'ASI-K* ','ATE0OM ','ATE+RO ','ASI*0K ','AC-PI- ',
+ & 'AC-PI0 ','AC-PI+ ','AA-GAM ','AA0GAM ','ATET0K ',
+ & 'ATE0K* ','AOM+RO ','AOM+PI ','AC1--K ','AA-PI- ',
+ & 'AC0-K0 ','AA0PI- ','AA-K0 ','AT0PI- ','C1++GA ' /
+ DATA (ZKNAME(K),K=511,540) /
+ & 'C1++GA ','C10GAM ','S+GAM ','S0GAM ','T0GAM ',
+ & 'XU++GA ','XD+GAM ','XS+GAM ','A+AKPI ','T02PI+ ',
+ & 'C1++2K ','AC1--G ','AC1-GA ','AC10GA ','AS-GAM ',
+ & 'AS0GAM ','AT0GAM ','AXU--G ','AXD-GA ','AXS-GA ',
+ & 'AA-KPI ','AT02PI ','AC1--K ','RH-PI+ ','RH+PI- ',
+ & 'RH3PI0 ','RH0PI+ ','RH+PI0 ','RH0PI- ','RH-PI0 ' /
+ DATA (ZKNAME(I),I=541,602)/
+ & 'APETA ','AN=P+ ','AN-PO ','ANOPO ','APRHO0','ANRHO-','ANETA ',
+ & 'AN-P+ ','AN0PO ','AN+P- ','APRHO+','ANRHO0','RH0PI+','RH+PI0',
+ & '3PI+00','3PI-++','F0PI+ ','RH+PI-','RH0PI0','3PI000','3PI0+-',
+ & 'F0PI0 ','RH0PI-','RH-PI0','3PI-00','3PI--+','F0PI- ','PI0PI0',
+ & 'PI+PI-','K+K- ','K0AK0 ','L01600','AL0160','K*+146','K*-146',
+ & 'K*0146','AK0146','S+1660','S01660','S-1660','AS-166','AS0166',
+ & 'AS+166','X01690','X-1690','AX0169','AX+169','OM-225','AOM+22',
+ & 'N*PPI0','N*NPI+','N*P2P0','N*PP+-','N*D+P0','N*D0P+','N*NPI0',
+ & 'N*PPI-','N*N2P0','N*NP+-','N*D+P-','N*D0P0','BLANK '/
+* Weight of decay channel
+ DATA (WT(K),K= 1, 85) /
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .2100D+00, .1200D+00, .2700D+00, .4000D+00,
+ & .1000D+01, .1000D+01, .6400D+00, .2100D+00, .6000D-01,
+ & .2000D-01, .3000D-01, .4000D-01, .6400D+00, .2100D+00,
+ & .6000D-01, .2000D-01, .3000D-01, .4000D-01, .6400D+00,
+ & .3600D+00, .0000D+00, .0000D+00, .6400D+00, .3600D+00,
+ & .0000D+00, .0000D+00, .6900D+00, .3100D+00, .1000D+01,
+ & .5200D+00, .4800D+00, .1000D+01, .9900D+00, .1000D-01,
+ & .3800D+00, .3000D-01, .3000D+00, .2400D+00, .5000D-01,
+ & .1000D+01, .1000D+01, .0000D+00, .1000D+01, .9000D+00,
+ & .1000D-01, .9000D-01, .3300D+00, .6700D+00, .3300D+00,
+ & .6700D+00, .3300D+00, .6700D+00, .3300D+00, .6700D+00,
+ & .3300D+00, .6700D+00, .3300D+00, .6700D+00, .3300D+00,
+ & .6700D+00, .3300D+00, .6700D+00, .1900D+00, .3800D+00,
+ & .9000D-01, .2000D+00, .3000D-01, .4000D-01, .5000D-01,
+ & .2000D-01, .1900D+00, .3800D+00, .9000D-01, .2000D+00 /
+ DATA (WT(K),K= 86,170) /
+ & .3000D-01, .4000D-01, .5000D-01, .2000D-01, .1900D+00,
+ & .3800D+00, .9000D-01, .2000D+00, .3000D-01, .4000D-01,
+ & .5000D-01, .2000D-01, .1900D+00, .3800D+00, .9000D-01,
+ & .2000D+00, .3000D-01, .4000D-01, .5000D-01, .2000D-01,
+ & .8800D+00, .6000D-01, .6000D-01, .8800D+00, .6000D-01,
+ & .6000D-01, .8800D+00, .1200D+00, .1900D+00, .1900D+00,
+ & .1600D+00, .1600D+00, .1700D+00, .3000D-01, .3000D-01,
+ & .3000D-01, .4000D-01, .1000D+00, .1000D+00, .2000D+00,
+ & .1200D+00, .1000D+00, .4000D-01, .4000D-01, .5000D-01,
+ & .7500D-01, .7500D-01, .3000D-01, .3000D-01, .4000D-01,
+ & .5000D+00, .5000D+00, .5000D+00, .5000D+00, .1000D+01,
+ & .6700D+00, .3300D+00, .3300D+00, .6700D+00, .1000D+01,
+ & .2500D+00, .2700D+00, .1800D+00, .3000D+00, .1700D+00,
+ & .8000D-01, .1800D+00, .3000D-01, .2400D+00, .2000D+00,
+ & .1000D+00, .8000D-01, .1700D+00, .2400D+00, .3000D-01,
+ & .1800D+00, .1000D+00, .2000D+00, .2500D+00, .1800D+00,
+ & .2700D+00, .3000D+00, .4000D+00, .2000D+00, .1250D+00 /
+ DATA (WT(K),K=171,255) /
+ & .7500D-01, .7500D-01, .1250D+00, .4000D+00, .7500D-01,
+ & .1250D+00, .2000D+00, .1250D+00, .7500D-01, .1800D+00,
+ & .3700D+00, .1300D+00, .8000D-01, .4000D-01, .7000D-01,
+ & .1300D+00, .3700D+00, .1800D+00, .4000D-01, .8000D-01,
+ & .1300D+00, .1300D+00, .7000D-01, .7000D-01, .1300D+00,
+ & .2300D+00, .4700D+00, .5000D-01, .2000D-01, .1000D-01,
+ & .2000D-01, .1300D+00, .7000D-01, .4700D+00, .2300D+00,
+ & .5000D-01, .1000D-01, .2000D-01, .2000D-01, .1000D+01,
+ & .6700D+00, .3300D+00, .3300D+00, .6700D+00, .1000D+01,
+ & .2500D+00, .2700D+00, .1800D+00, .3000D+00, .1700D+00,
+ & .8000D-01, .1800D+00, .3000D-01, .2400D+00, .2000D+00,
+ & .1000D+00, .8000D-01, .1700D+00, .2400D+00, .3000D-01,
+ & .1800D+00, .1000D+00, .2000D+00, .2500D+00, .1800D+00,
+ & .2700D+00, .3000D+00, .1800D+00, .3700D+00, .1300D+00,
+ & .8000D-01, .4000D-01, .7000D-01, .1300D+00, .3700D+00,
+ & .1800D+00, .4000D-01, .8000D-01, .1300D+00, .1300D+00,
+ & .7000D-01, .5000D+00, .5000D+00, .1000D+01, .1000D+01 /
+ DATA (WT(K),K=256,340) /
+ & .1000D+01, .8000D+00, .2000D+00, .6000D+00, .3000D+00,
+ & .1000D+00, .6000D+00, .3000D+00, .1000D+00, .8000D+00,
+ & .2000D+00, .3300D+00, .6700D+00, .6600D+00, .1700D+00,
+ & .1700D+00, .3200D+00, .1700D+00, .3200D+00, .1900D+00,
+ & .3300D+00, .3300D+00, .3400D+00, .3000D+00, .5000D-01,
+ & .6500D+00, .3800D+00, .1200D+00, .3800D+00, .1200D+00,
+ & .3800D+00, .1200D+00, .3800D+00, .1200D+00, .3000D+00,
+ & .5000D-01, .6500D+00, .3800D+00, .2500D+00, .2500D+00,
+ & .2000D-01, .5000D-01, .5000D-01, .2000D+00, .2000D+00,
+ & .1200D+00, .1000D+00, .7000D-01, .7000D-01, .1400D+00,
+ & .5000D-01, .5000D-01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .4800D+00, .2400D+00, .2600D+00, .2000D-01, .4700D+00,
+ & .3500D+00, .1500D+00, .3000D-01, .1000D+01, .1000D+01 /
+ DATA (WT(K),K=341,425) /
+ & .5200D+00, .4800D+00, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .9000D+00, .5000D-01, .5000D-01, .9000D+00,
+ & .5000D-01, .5000D-01, .9000D+00, .5000D-01, .5000D-01,
+ & .3300D+00, .6700D+00, .6700D+00, .3300D+00, .2500D+00,
+ & .2500D+00, .5000D+00, .9000D+00, .5000D-01, .5000D-01,
+ & .9000D+00, .5000D-01, .5000D-01, .9000D+00, .5000D-01,
+ & .5000D-01, .3300D+00, .6700D+00, .6700D+00, .3300D+00,
+ & .2500D+00, .2500D+00, .5000D+00, .1000D+00, .5000D+00,
+ & .1600D+00, .2400D+00, .7000D+00, .3000D+00, .7000D+00,
+ & .3000D+00, .1000D+00, .5000D+00, .1600D+00, .2400D+00,
+ & .3000D+00, .4000D+00, .3000D+00, .3000D+00, .4000D+00,
+ & .3000D+00, .4900D+00, .4900D+00, .2000D-01, .5500D+00,
+ & .4500D+00, .6800D+00, .3000D+00, .2000D-01, .6800D+00,
+ & .3000D+00, .2000D-01, .5500D+00, .4500D+00, .9000D+00,
+ & .1000D+00, .9000D+00, .1000D+00, .6000D+00, .3000D+00,
+ & .1000D+00, .1000D+00, .1000D+00, .8000D+00, .2800D+00,
+ & .2800D+00, .3500D+00, .7000D-01, .2000D-01, .2800D+00 /
+ DATA (WT(K),K=426,510) /
+ & .2800D+00, .3500D+00, .7000D-01, .2000D-01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .2000D-01, .3000D-01,
+ & .7000D-01, .2000D-01, .2000D-01, .4000D-01, .1300D+00,
+ & .7000D-01, .6000D-01, .6000D-01, .2000D+00, .1400D+00,
+ & .4000D-01, .1000D+00, .2500D+00, .3000D-01, .3000D+00,
+ & .4200D+00, .2200D+00, .3500D+00, .1900D+00, .1600D+00,
+ & .8000D-01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .3700D+00, .2000D+00, .3600D+00, .7000D-01,
+ & .5000D+00, .5000D+00, .5000D+00, .5000D+00, .5000D+00,
+ & .5000D+00, .2000D-01, .3000D-01, .7000D-01, .2000D-01,
+ & .2000D-01, .4000D-01, .1300D+00, .7000D-01, .6000D-01,
+ & .6000D-01, .2000D+00, .1400D+00, .4000D-01, .1000D+00,
+ & .2500D+00, .3000D-01, .3000D+00, .4200D+00, .2200D+00,
+ & .3500D+00, .1900D+00, .1600D+00, .8000D-01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .3700D+00,
+ & .2000D+00, .3600D+00, .7000D-01, .5000D+00, .5000D+00,
+ & .5000D+00, .5000D+00, .5000D+00, .5000D+00, .1000D+01 /
+ DATA (WT(K),K=511,540) /
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .3000D+00, .3000D+00,
+ & .4000D+00, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .1000D+01, .1000D+01, .1000D+01, .1000D+01, .1000D+01,
+ & .3000D+00, .3000D+00, .4000D+00, .3300D+00, .3300D+00,
+ & .3400D+00, .5000D+00, .5000D+00, .5000D+00, .5000D+00 /
+C
+ DATA (WT(I),I=541,602) / .0D+00, .3334D+00, .2083D+00, 2*.125D+00,
+ & .2083D+00, .0D+00, .125D+00, .2083D+00, .3334D+00, .2083D+00,
+ & .125D+00, 0.2D+00, 0.2D+00, 0.3D+00, 0.3D+00, 0.0D+00, 0.2D+00,
+ & 0.2D+00, 0.3D+00, 0.3D+00, 0.0D+00, 0.2D+00, 0.2D+00, 0.3D+00,
+ & 0.3D+00, 0.0D+00, 0.31D+00, 0.62D+00, 0.035D+00, 0.035D+00,
+ & 18*1.D+00, 0.5D+00, 0.16D+00, 2*0.12D+00, 2*0.05D+00, 0.5D+00,
+ & 0.16D+00, 2*0.12D+00, 2*0.05D+00, 1.D+00 /
+* Particle numbers in decay channel
+ DATA (NZK(K,1),K= 1,170) /
+ & 1, 2, 3, 4, 5, 6, 7, 1, 2, 4,
+ & 3, 23, 13, 13, 13, 10, 11, 10, 13, 13,
+ & 13, 10, 4, 11, 14, 14, 14, 11, 3, 1,
+ & 8, 1, 1, 2, 9, 2, 2, 13, 23, 8,
+ & 1, 8, 17, 7, 7, 7, 23, 23, 13, 13,
+ & 13, 13, 23, 14, 13, 13, 23, 15, 24, 24,
+ & 15, 16, 25, 25, 16, 15, 24, 24, 15, 16,
+ & 24, 25, 16, 15, 24, 36, 37, 15, 24, 15,
+ & 15, 24, 15, 37, 36, 24, 15, 24, 24, 16,
+ & 24, 38, 39, 16, 25, 16, 16, 25, 16, 39,
+ & 38, 25, 16, 25, 25, 17, 22, 21, 17, 21,
+ & 20, 17, 22, 8, 1, 21, 22, 20, 17, 48,
+ & 50, 49, 8, 1, 17, 17, 17, 21, 20, 22,
+ & 17, 22, 21, 20, 22, 19, 12, 19, 12, 1,
+ & 1, 8, 1, 8, 8, 1, 53, 54, 1, 1,
+ & 8, 53, 54, 55, 1, 8, 1, 8, 54, 55,
+ & 56, 1, 8, 8, 55, 56, 8, 1, 53, 54 /
+ DATA (NZK(K,1),K=171,340) /
+ & 55, 1, 8, 8, 54, 55, 56, 1, 8, 1,
+ & 8, 53, 54, 55, 1, 8, 1, 8, 54, 55,
+ & 56, 1, 8, 1, 8, 1, 8, 17, 21, 22,
+ & 1, 1, 8, 1, 8, 17, 22, 20, 8, 2,
+ & 2, 9, 2, 9, 9, 2, 67, 68, 2, 2,
+ & 9, 67, 68, 69, 2, 9, 2, 9, 68, 69,
+ & 70, 2, 9, 9, 69, 70, 9, 2, 9, 67,
+ & 68, 69, 2, 9, 2, 9, 68, 69, 70, 2,
+ & 9, 1, 8, 13, 13, 14, 1, 8, 1, 1,
+ & 8, 8, 8, 1, 8, 1, 1, 1, 1, 1,
+ & 8, 2, 2, 9, 9, 2, 2, 9, 15, 15,
+ & 24, 16, 16, 25, 25, 15, 15, 24, 24, 16,
+ & 16, 25, 1, 21, 22, 21, 48, 49, 8, 17,
+ & 20, 17, 22, 20, 20, 22, 20, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 31, 31, 13, 7, 15, 12, 13, 31, 17, 17 /
+ DATA (NZK(K,1),K=341,510) /
+ & 2, 9, 18, 9, 18, 18, 17, 21, 22, 17,
+ & 21, 20, 17, 20, 22, 97, 98, 97, 98, 97,
+ & 98, 17, 18, 99, 100, 18, 101, 99, 18, 101,
+ & 100, 102, 103, 102, 103, 102, 103, 18, 16, 16,
+ & 24, 24, 16, 25, 15, 24, 15, 15, 25, 25,
+ & 31, 15, 15, 31, 16, 16, 23, 13, 7, 116,
+ & 116, 116, 117, 117, 119, 118, 118, 119, 119, 120,
+ & 120, 121, 121, 130, 130, 130, 4, 10, 13, 10,
+ & 4, 32, 13, 36, 11, 3, 34, 14, 38, 133,
+ & 134, 135, 136, 21, 21, 1, 97, 104, 54, 53,
+ & 17, 22, 21, 21, 1, 54, 53, 21, 97, 21,
+ & 97, 22, 21, 97, 98, 105, 137, 137, 137, 138,
+ & 139, 97, 97, 109, 109, 140, 138, 137, 139, 138,
+ & 145, 99, 99, 2, 102, 110, 68, 67, 18, 100,
+ & 99, 99, 2, 68, 67, 99, 102, 99, 102, 100,
+ & 99, 102, 103, 111, 149, 149, 149, 150, 151, 113,
+ & 113, 115, 115, 152, 150, 149, 151, 150, 157, 140 /
+ DATA (NZK(K,1),K=511,540) /
+ & 141, 142, 143, 144, 145, 146, 147, 148, 138, 145,
+ & 140, 152, 153, 154, 155, 156, 157, 158, 159, 160,
+ & 150, 157, 152, 34, 32, 33, 33, 32, 33, 34 /
+ DATA (NZK(I,1),I=541,602) / 2, 67, 68, 69, 2, 9, 9, 68, 69,
+ & 70, 2, 9, 33, 32, 13, 14, 189, 32, 34, 23, 23, 189, 33, 34, 14,
+ & 14, 189, 23, 13, 15, 24, 36, 38, 37, 39, 194, 195, 196, 197,
+ & 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 1, 8, 1, 1, 54,
+ & 55, 8, 1, 8, 8, 54, 55, 210/
+ DATA (NZK(K,2),K= 1,170) /
+ & 0, 0, 0, 0, 0, 0, 0, 3, 4, 6,
+ & 5, 23, 14, 11, 3, 5, 5, 5, 23, 13,
+ & 23, 23, 23, 5, 23, 13, 23, 23, 23, 14,
+ & 23, 3, 11, 13, 23, 4, 10, 14, 23, 14,
+ & 23, 13, 7, 7, 4, 7, 7, 23, 14, 14,
+ & 23, 14, 23, 23, 14, 14, 7, 23, 13, 23,
+ & 14, 23, 14, 23, 13, 23, 13, 23, 14, 23,
+ & 14, 23, 13, 23, 13, 23, 13, 33, 32, 35,
+ & 31, 23, 14, 23, 14, 33, 34, 35, 31, 23,
+ & 14, 23, 14, 33, 34, 35, 31, 23, 13, 23,
+ & 13, 33, 32, 35, 31, 13, 13, 23, 23, 14,
+ & 13, 14, 14, 25, 16, 14, 23, 13, 31, 14,
+ & 13, 23, 25, 16, 23, 35, 33, 34, 32, 33,
+ & 31, 31, 14, 13, 23, 0, 0, 0, 0, 13,
+ & 23, 13, 14, 23, 14, 13, 23, 13, 78, 23,
+ & 13, 14, 23, 13, 79, 78, 14, 23, 14, 23,
+ & 13, 80, 79, 14, 14, 23, 80, 31, 14, 23 /
+ DATA (NZK(K,2),K=171,340) /
+ & 13, 79, 78, 31, 14, 23, 13, 80, 79, 23,
+ & 13, 14, 23, 13, 79, 78, 14, 23, 14, 23,
+ & 13, 80, 79, 23, 13, 33, 32, 15, 24, 15,
+ & 31, 14, 23, 34, 33, 24, 24, 15, 31, 14,
+ & 23, 14, 13, 23, 13, 14, 23, 14, 80, 23,
+ & 14, 13, 23, 14, 79, 80, 13, 23, 13, 23,
+ & 14, 78, 79, 13, 13, 23, 78, 23, 14, 13,
+ & 23, 14, 79, 80, 13, 23, 13, 23, 14, 78,
+ & 79, 62, 61, 23, 14, 23, 13, 13, 13, 23,
+ & 13, 13, 23, 14, 14, 14, 1, 8, 8, 1,
+ & 8, 1, 8, 8, 1, 8, 1, 8, 1, 8,
+ & 1, 1, 8, 1, 8, 8, 1, 1, 8, 8,
+ & 1, 8, 25, 23, 13, 31, 23, 13, 16, 14,
+ & 35, 34, 34, 33, 31, 14, 23, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 13, 23, 14, 7, 16, 19, 14, 7, 23, 14 /
+ DATA (NZK(K,2),K=341,510) /
+ & 23, 14, 7, 13, 23, 13, 13, 23, 13, 23,
+ & 14, 13, 14, 23, 14, 23, 13, 14, 23, 14,
+ & 23, 16, 14, 23, 14, 23, 14, 13, 13, 23,
+ & 13, 23, 14, 13, 23, 13, 23, 15, 13, 13,
+ & 13, 23, 13, 13, 14, 14, 14, 14, 14, 23,
+ & 13, 16, 25, 14, 15, 24, 23, 14, 7, 23,
+ & 7, 13, 23, 7, 14, 23, 7, 23, 7, 7,
+ & 7, 7, 7, 13, 23, 31, 3, 11, 14, 135,
+ & 5, 134, 134, 134, 136, 6, 133, 133, 133, 0,
+ & 0, 0, 0, 31, 95, 25, 15, 31, 95, 16,
+ & 32, 32, 33, 35, 39, 39, 38, 25, 13, 39,
+ & 32, 39, 38, 35, 32, 39, 13, 23, 14, 7,
+ & 7, 25, 37, 32, 13, 25, 13, 25, 13, 25,
+ & 13, 31, 95, 24, 16, 31, 24, 15, 34, 34,
+ & 33, 35, 37, 37, 36, 24, 14, 37, 34, 37,
+ & 36, 35, 34, 37, 14, 23, 13, 7, 7, 24,
+ & 39, 34, 14, 24, 14, 24, 14, 24, 14, 7 /
+ DATA (NZK(K,2),K=511,540) /
+ & 7, 7, 7, 7, 7, 7, 7, 7, 25, 13,
+ & 25, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ & 24, 14, 24, 13, 14, 23, 13, 23, 14, 23 /
+ DATA (NZK(I,2),I=541,602) / 31, 13, 23, 14, 79, 80, 31, 13, 23,
+ & 14, 78, 79, 13, 23, 23, 13, 13, 14, 13, 23, 13, 23, 14, 23, 23,
+ & 14, 14, 23, 14, 16, 25,
+ & 4*23, 14*0, 23, 13, 23, 13, 23, 13, 23, 14,
+ & 23, 13, 14, 23, 0 /
+ DATA (NZK(K,3),K= 1,170) /
+ & 0, 0, 0, 0, 0, 0, 0, 5, 6, 5,
+ & 6, 23, 23, 5, 5, 0, 0, 0, 0, 14,
+ & 23, 5, 5, 0, 0, 14, 23, 5, 5, 0,
+ & 0, 5, 5, 0, 0, 5, 5, 0, 0, 0,
+ & 0, 0, 0, 0, 3, 0, 7, 23, 23, 7,
+ & 0, 0, 0, 0, 23, 0, 0, 0, 0, 0,
+ & 110*0 /
+ DATA (NZK(K,3),K=171,340) /
+ & 80*0,
+ & 0, 0, 0, 0, 0, 0, 23, 13, 14, 23,
+ & 23, 14, 23, 23, 23, 14, 23, 13, 23, 14,
+ & 13, 23, 13, 23, 14, 23, 14, 14, 23, 13,
+ & 13, 23, 13, 14, 23, 23, 14, 23, 13, 23,
+ & 14, 14, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 30*0,
+ & 14, 23, 7, 0, 0, 0, 23, 0, 0, 0 /
+ DATA (NZK(K,3),K=341,510) /
+ & 30*0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 23,
+ & 14, 0, 13, 0, 14, 0, 0, 23, 13, 0,
+ & 0, 15, 0, 0, 16, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 14, 23, 0, 0, 0, 23, 134,
+ & 134, 0, 0, 0, 133, 133, 0, 0, 0, 0,
+ & 80*0 /
+ DATA (NZK(K,3),K=511,540) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 13, 13,
+ & 25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 14, 14, 24, 0, 0, 0, 0, 0, 0, 0 /
+ DATA (NZK(I,3),I=541,602) / 12*0, 2*0, 23, 13, 0, 2*0, 23, 14, 0,
+ & 2*0, 23, 13, 0, 4*0, 18*0, 2*0, 23, 14, 2*0, 2*0, 23, 14, 2*0, 0/
+
+ END
+
+*
+*====phoini============================================================*
+*
+CDECK ID>, DT_XHOINI
+ SUBROUTINE DT_XHOINI
+C SUBROUTINE DT_PHOINI
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ RETURN
+ END
+*
+*====eventb============================================================*
+*
+CDECK ID>, DT_XVENTB
+ SUBROUTINE DT_XVENTB(NCSY,IREJ)
+C SUBROUTINE DT_EVENTB(NCSY,IREJ)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ WRITE(LOUT,1000)
+ 1000 FORMAT(1X,'EVENTB: PHOJET-package requested but not linked!')
+ STOP
+
+ END
+*
+*===event==============================================================*
+*
+CDECK ID>, DT_XVENT
+ SUBROUTINE DT_XVENT(IDUM,PP,PT,DUM,IREJ)
+C SUBROUTINE EVENT(IDUM,PP,PT,DUM,IREJ)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION PP(4),PT(4)
+
+ RETURN
+ END
+*
+*===pohisx=============================================================*
+*
+CDECK ID>, DT_XOHISX
+ SUBROUTINE DT_XOHISX(I,X)
+C SUBROUTINE POHISX(I,X)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ RETURN
+ END
+*
+*===poluhi=============================================================*
+*
+**PHOJET105a
+C SUBROUTINE XOLUHI(I,X)
+**PHOJET112
+
+CDECK ID>, PHO_LHIST
+ SUBROUTINE PHO_LHIST(I,X)
+
+**
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ RETURN
+ END
+*
+CDECK ID>, PDFSET
+C**********************************************************************
+C
+C dummy subroutines, remove to link PDFLIB
+C
+C**********************************************************************
+ SUBROUTINE PDFSET(PARAM,VALUE)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ DIMENSION PARAM(20),VALUE(20)
+ CHARACTER*20 PARAM
+ END
+CDECK ID>, STRUCTM
+ SUBROUTINE STRUCTM(XI,SCALE2,UV,DV,US,DS,SS,CS,BS,TS,GL)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ END
+CDECK ID>, STRUCTP
+ SUBROUTINE STRUCTP(XI,SCALE2,P2,IP2,UV,DV,US,DS,SS,CS,BS,TS,GL)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ END
+*
+*===diqbrk=============================================================*
+*
+CDECK ID>, DT_DIQBRK
+ SUBROUTINE DT_XIQBRK
+C SUBROUTINE DT_DIQBRK
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ STOP 'diquark-breaking not implemeted !'
+
+ RETURN
+ END
+*
+*===pho_rndm===========================================================*
+*
+CDECK ID>, PHO_RNDM
+ DOUBLE PRECISION FUNCTION PHO_RNDM(DUMMY)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PHO_RNDM = DT_RNDM(DUMMY)
+
+ RETURN
+ END
+*
+*===pyr================================================================*
+*
+CDECK ID>, PYR
+ DOUBLE PRECISION FUNCTION PYR(IDUMMY)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DUMMY = DBLE(IDUMMY)
+ PYR = DT_RNDM(DUMMY)
+
+ RETURN
+ END
+*
+*===elhain=============================================================*
+*
+CDECK ID>, DT_ELHAIN
+ SUBROUTINE DT_ELHAIN(IP,PLA,ELAB,CX,CY,CZ,IT,IREJ)
+
+************************************************************************
+* Elastic hadron-hadron scattering. *
+* This is a revised version of the original. *
+* This version dated 03.04.98 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TWO=2.0D0,ONE=1.0D0,OHALF=0.5D0,ZERO=0.0D0,
+ & TINY10=1.0D-10)
+
+ PARAMETER (ENNTHR = 3.5D0)
+ PARAMETER (PLOWH=0.01D0,PHIH=9.0D0,
+ & BLOWB=0.05D0,BHIB=0.2D0,
+ & BLOWM=0.1D0, BHIM=2.0D0)
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* final state from HADRIN interaction
+ PARAMETER (MAXFIN=10)
+ COMMON /HNFSPA/ ITRH(MAXFIN),CXRH(MAXFIN),CYRH(MAXFIN),
+ & CZRH(MAXFIN),ELRH(MAXFIN),PLRH(MAXFIN),IRH
+
+C DATA TSLOPE /10.0D0/
+
+ IREJ = 0
+
+ 1 CONTINUE
+
+ PLAB = SQRT( (ELAB-AAM(IP))*(ELAB+AAM(IP)) )
+ EKIN = ELAB-AAM(IP)
+* kinematical quantities in cms of the hadrons
+ AMP2 = AAM(IP)**2
+ AMT2 = AAM(IT)**2
+ S = AMP2+AMT2+TWO*ELAB*AAM(IT)
+ ECM = SQRT(S)
+ ECMP = OHALF*ECM+(AMP2-AMT2)/(TWO*ECM)
+ PCM = SQRT( (ECMP-AAM(IP))*(ECMP+AAM(IP)) )
+
+* nucleon-nucleon scattering at E_kin<3.5: use DT_TSAMCS(HETC-KFA)
+ IF ( ((IP.EQ.1).OR.(IP.EQ.8)).AND.
+ & ((IT.EQ.1).OR.(IT.EQ.8)).AND.(EKIN.LT.ENNTHR) ) THEN
+* TSAMCS treats pp and np only, therefore change pn into np and
+* nn into pp
+ IF (IT.EQ.1) THEN
+ KPROJ = IP
+ ELSE
+ KPROJ = 8
+ IF (IP.EQ.8) KPROJ = 1
+ ENDIF
+ CALL DT_TSAMCS(KPROJ,EKIN,CTCMS)
+ T = TWO*PCM**2*(CTCMS-ONE)
+
+* very crude treatment otherwise: sample t from exponential dist.
+ ELSE
+* momentum transfer t
+ TMAX = TWO*TWO*PCM**2
+ RR = (PLAB-PLOWH)/(PHIH-PLOWH)
+ IF (IIBAR(IP).NE.0) THEN
+ TSLOPE = BLOWB+RR*(BHIB-BLOWB)
+ ELSE
+ TSLOPE = BLOWM+RR*(BHIM-BLOWM)
+ ENDIF
+ FMAX = EXP(-TSLOPE*TMAX)-ONE
+ R = DT_RNDM(RR)
+ T = LOG(ONE+R*FMAX+TINY10)/TSLOPE
+ IF (T.GT.ZERO) T = LOG(ONE+R*FMAX)/TSLOPE
+ ENDIF
+
+* target hadron in Lab after scattering
+ ELRH(2) = (TWO*AMT2-T)/(TWO*AAM(IT))
+ PLRH(2) = SQRT( ABS(ELRH(2)-AAM(IT))*(ELRH(2)+AAM(IT)) )
+ IF (PLRH(2).LE.TINY10) THEN
+C WRITE(*,*)'ELHAIN: T,PLRH(2) ',T,PLRH(2)
+ GOTO 1
+ ENDIF
+* projectile hadron in Lab after scattering
+ ELRH(1) = ELAB+AAM(IT)-ELRH(2)
+ PLRH(1) = SQRT( ABS(ELRH(1)-AAM(IP))*(ELRH(1)+AAM(IP)) )
+* scattering angle of projectile in Lab
+ CTLABP = (T-TWO*AMP2+TWO*ELAB*ELRH(1))/(TWO*PLAB*PLRH(1))
+ STLABP = SQRT( (ONE-CTLABP)*(ONE+CTLABP) )
+ CALL DT_DSFECF(SPLABP,CPLABP)
+* direction cosines of projectile in Lab
+ CALL DT_STTRAN(CX,CY,CZ,CTLABP,STLABP,SPLABP,CPLABP,
+ & CXRH(1),CYRH(1),CZRH(1))
+* scattering angle of target in Lab
+ PLLABT = PLAB-CTLABP*PLRH(1)
+ CTLABT = PLLABT/PLRH(2)
+ STLABT = SQRT( (ONE-CTLABT)*(ONE+CTLABT) )
+* direction cosines of target in Lab
+ CALL DT_STTRAN(CX,CY,CZ,CTLABT,STLABT,-SPLABP,-CPLABP,
+ & CXRH(2),CYRH(2),CZRH(2))
+* fill /HNFSPA/
+ IRH = 2
+ ITRH(1) = IP
+ ITRH(2) = IT
+
+ RETURN
+ END
+*
+*===tsamcs=============================================================*
+*
+CDECK ID>, DT_TSAMCS
+ SUBROUTINE DT_TSAMCS(KPROJ,EKIN,CST)
+
+************************************************************************
+* Sampling of cos(theta) for nucleon-proton scattering according to *
+* hetkfa2/bertini parametrization. *
+* This is a revised version of the original (HJM 24/10/88) *
+* This version dated 28.10.95 is written by S. Roesler *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (TWO=2.0D0,ONE=1.0D0,OHALF=0.5D0,ZERO=0.0D0,
+ & TINY10=1.0D-10)
+
+ DIMENSION DCLIN(195),DCHN(143),DCHNA(36),DCHNB(60)
+ DIMENSION PDCI(60),PDCH(55)
+
+ DATA (DCLIN(I),I=1,80) /
+ & 5.000D-01, 1.000D+00, 0.000D+00, 1.000D+00, 0.000D+00,
+ & 4.993D-01, 9.881D-01, 5.963D-02, 9.851D-01, 5.945D-02,
+ & 4.936D-01, 8.955D-01, 5.224D-01, 8.727D-01, 5.091D-01,
+ & 4.889D-01, 8.228D-01, 8.859D-01, 7.871D-01, 8.518D-01,
+ & 4.874D-01, 7.580D-01, 1.210D+00, 7.207D-01, 1.117D+00,
+ & 4.912D-01, 6.969D-01, 1.516D+00, 6.728D-01, 1.309D+00,
+ & 5.075D-01, 6.471D-01, 1.765D+00, 6.667D-01, 1.333D+00,
+ & 5.383D-01, 6.054D-01, 1.973D+00, 7.059D-01, 1.176D+00,
+ & 5.397D-01, 5.990D-01, 2.005D+00, 7.023D-01, 1.191D+00,
+ & 5.336D-01, 6.083D-01, 1.958D+00, 6.959D-01, 1.216D+00,
+ & 5.317D-01, 6.075D-01, 1.962D+00, 6.897D-01, 1.241D+00,
+ & 5.300D-01, 6.016D-01, 1.992D+00, 6.786D-01, 1.286D+00,
+ & 5.281D-01, 6.063D-01, 1.969D+00, 6.786D-01, 1.286D+00,
+ & 5.280D-01, 5.960D-01, 2.020D+00, 6.667D-01, 1.333D+00,
+ & 5.273D-01, 5.920D-01, 2.040D+00, 6.604D-01, 1.358D+00,
+ & 5.273D-01, 5.862D-01, 2.069D+00, 6.538D-01, 1.385D+00/
+ DATA (DCLIN(I),I=81,160) /
+ & 5.223D-01, 5.980D-01, 2.814D+00, 6.538D-01, 1.385D+00,
+ & 5.202D-01, 5.969D-01, 2.822D+00, 6.471D-01, 1.412D+00,
+ & 5.183D-01, 5.881D-01, 2.883D+00, 6.327D-01, 1.469D+00,
+ & 5.159D-01, 5.866D-01, 2.894D+00, 6.250D-01, 1.500D+00,
+ & 5.133D-01, 5.850D-01, 2.905D+00, 6.170D-01, 1.532D+00,
+ & 5.106D-01, 5.833D-01, 2.917D+00, 6.087D-01, 1.565D+00,
+ & 5.084D-01, 5.801D-01, 2.939D+00, 6.000D-01, 1.600D+00,
+ & 5.063D-01, 5.763D-01, 2.966D+00, 5.909D-01, 1.636D+00,
+ & 5.036D-01, 5.730D-01, 2.989D+00, 5.814D-01, 1.674D+00,
+ & 5.014D-01, 5.683D-01, 3.022D+00, 5.714D-01, 1.714D+00,
+ & 4.986D-01, 5.641D-01, 3.051D+00, 5.610D-01, 1.756D+00,
+ & 4.964D-01, 5.580D-01, 3.094D+00, 5.500D-01, 1.800D+00,
+ & 4.936D-01, 5.573D-01, 3.099D+00, 5.431D-01, 1.827D+00,
+ & 4.909D-01, 5.509D-01, 3.144D+00, 5.313D-01, 1.875D+00,
+ & 4.885D-01, 5.512D-01, 3.142D+00, 5.263D-01, 1.895D+00,
+ & 4.857D-01, 5.437D-01, 3.194D+00, 5.135D-01, 1.946D+00/
+ DATA (DCLIN(I),I=161,195) /
+ & 4.830D-01, 5.353D-01, 3.253D+00, 5.000D-01, 2.000D+00,
+ & 4.801D-01, 5.323D-01, 3.274D+00, 4.915D-01, 2.034D+00,
+ & 4.770D-01, 5.228D-01, 3.341D+00, 4.767D-01, 2.093D+00,
+ & 4.738D-01, 5.156D-01, 3.391D+00, 4.643D-01, 2.143D+00,
+ & 4.701D-01, 5.010D-01, 3.493D+00, 4.444D-01, 2.222D+00,
+ & 4.672D-01, 4.990D-01, 3.507D+00, 4.375D-01, 2.250D+00,
+ & 4.634D-01, 4.856D-01, 3.601D+00, 4.194D-01, 2.323D+00/
+
+ DATA PDCI /
+ & 4.400D+02, 1.896D-01, 1.931D-01, 1.982D-01, 1.015D-01,
+ & 1.029D-01, 4.180D-02, 4.228D-02, 4.282D-02, 4.350D-02,
+ & 2.204D-02, 2.236D-02, 5.900D+02, 1.433D-01, 1.555D-01,
+ & 1.774D-01, 1.000D-01, 1.128D-01, 5.132D-02, 5.600D-02,
+ & 6.158D-02, 6.796D-02, 3.660D-02, 3.820D-02, 6.500D+02,
+ & 1.192D-01, 1.334D-01, 1.620D-01, 9.527D-02, 1.141D-01,
+ & 5.283D-02, 5.952D-02, 6.765D-02, 7.878D-02, 4.796D-02,
+ & 6.957D-02, 8.000D+02, 4.872D-02, 6.694D-02, 1.152D-01,
+ & 9.348D-02, 1.368D-01, 6.912D-02, 7.953D-02, 9.577D-02,
+ & 1.222D-01, 7.755D-02, 9.525D-02, 1.000D+03, 3.997D-02,
+ & 5.456D-02, 9.804D-02, 8.084D-02, 1.208D-01, 6.520D-02,
+ & 8.233D-02, 1.084D-01, 1.474D-01, 9.328D-02, 1.093D-01/
+
+ DATA PDCH /
+ & 1.000D+03, 9.453D-02, 9.804D-02, 8.084D-02, 1.208D-01,
+ & 6.520D-02, 8.233D-02, 1.084D-01, 1.474D-01, 9.328D-02,
+ & 1.093D-01, 1.400D+03, 1.072D-01, 7.450D-02, 6.645D-02,
+ & 1.136D-01, 6.750D-02, 8.580D-02, 1.110D-01, 1.530D-01,
+ & 1.010D-01, 1.350D-01, 2.170D+03, 4.004D-02, 3.013D-02,
+ & 2.664D-02, 5.511D-02, 4.240D-02, 7.660D-02, 1.364D-01,
+ & 2.300D-01, 1.670D-01, 2.010D-01, 2.900D+03, 1.870D-02,
+ & 1.804D-02, 1.320D-02, 2.970D-02, 2.860D-02, 5.160D-02,
+ & 1.020D-01, 2.400D-01, 2.250D-01, 3.370D-01, 4.400D+03,
+ & 1.196D-03, 8.784D-03, 1.517D-02, 2.874D-02, 2.488D-02,
+ & 4.464D-02, 8.330D-02, 2.008D-01, 2.360D-01, 3.567D-01/
+
+ DATA (DCHN(I),I=1,90) /
+ & 4.770D-01, 4.750D-01, 4.715D-01, 4.685D-01, 4.650D-01,
+ & 4.610D-01, 4.570D-01, 4.550D-01, 4.500D-01, 4.450D-01,
+ & 4.405D-01, 4.350D-01, 4.300D-01, 4.250D-01, 4.200D-01,
+ & 4.130D-01, 4.060D-01, 4.000D-01, 3.915D-01, 3.840D-01,
+ & 3.760D-01, 3.675D-01, 3.580D-01, 3.500D-01, 3.400D-01,
+ & 3.300D-01, 3.200D-01, 3.100D-01, 3.000D-01, 2.900D-01,
+ & 2.800D-01, 2.700D-01, 2.600D-01, 2.500D-01, 2.400D-01,
+ & 2.315D-01, 2.240D-01, 2.150D-01, 2.060D-01, 2.000D-01,
+ & 1.915D-01, 1.850D-01, 1.780D-01, 1.720D-01, 1.660D-01,
+ & 1.600D-01, 1.550D-01, 1.500D-01, 1.450D-01, 1.400D-01,
+ & 1.360D-01, 1.320D-01, 1.280D-01, 1.250D-01, 1.210D-01,
+ & 1.180D-01, 1.150D-01, 1.120D-01, 1.100D-01, 1.070D-01,
+ & 1.050D-01, 1.030D-01, 1.010D-01, 9.900D-02, 9.700D-02,
+ & 9.550D-02, 9.480D-02, 9.400D-02, 9.200D-02, 9.150D-02,
+ & 9.100D-02, 9.000D-02, 8.990D-02, 8.900D-02, 8.850D-02,
+ & 8.750D-02, 8.700D-02, 8.650D-02, 8.550D-02, 8.500D-02,
+ & 8.499D-02, 8.450D-02, 8.350D-02, 8.300D-02, 8.250D-02,
+ & 8.150D-02, 8.100D-02, 8.030D-02, 8.000D-02, 7.990D-02/
+ DATA (DCHN(I),I=91,143) /
+ & 7.980D-02, 7.950D-02, 7.900D-02, 7.860D-02, 7.800D-02,
+ & 7.750D-02, 7.650D-02, 7.620D-02, 7.600D-02, 7.550D-02,
+ & 7.530D-02, 7.500D-02, 7.499D-02, 7.498D-02, 7.480D-02,
+ & 7.450D-02, 7.400D-02, 7.350D-02, 7.300D-02, 7.250D-02,
+ & 7.230D-02, 7.200D-02, 7.100D-02, 7.050D-02, 7.020D-02,
+ & 7.000D-02, 6.999D-02, 6.995D-02, 6.993D-02, 6.991D-02,
+ & 6.990D-02, 6.870D-02, 6.850D-02, 6.800D-02, 6.780D-02,
+ & 6.750D-02, 6.700D-02, 6.650D-02, 6.630D-02, 6.600D-02,
+ & 6.550D-02, 6.525D-02, 6.510D-02, 6.500D-02, 6.499D-02,
+ & 6.498D-02, 6.496D-02, 6.494D-02, 6.493D-02, 6.490D-02,
+ & 6.488D-02, 6.485D-02, 6.480D-02/
+
+ DATA DCHNA /
+ & 6.300D+02, 7.810D-02, 1.421D-01, 1.979D-01, 2.479D-01,
+ & 3.360D-01, 5.400D-01, 7.236D-01, 1.000D+00, 1.540D+03,
+ & 2.225D-01, 3.950D-01, 5.279D-01, 6.298D-01, 7.718D-01,
+ & 9.405D-01, 9.835D-01, 1.000D+00, 2.560D+03, 2.625D-01,
+ & 4.550D-01, 5.963D-01, 7.020D-01, 8.380D-01, 9.603D-01,
+ & 9.903D-01, 1.000D+00, 3.520D+03, 4.250D-01, 6.875D-01,
+ & 8.363D-01, 9.163D-01, 9.828D-01, 1.000D+00, 1.000D+00,
+ & 1.000D+00/
+
+ DATA DCHNB /
+ & 6.300D+02, 3.800D-02, 7.164D-02, 1.275D-01, 2.171D-01,
+ & 3.227D-01, 4.091D-01, 5.051D-01, 6.061D-01, 7.074D-01,
+ & 8.434D-01, 1.000D+00, 2.040D+03, 1.200D-01, 2.115D-01,
+ & 3.395D-01, 5.295D-01, 7.251D-01, 8.511D-01, 9.487D-01,
+ & 9.987D-01, 1.000D+00, 1.000D+00, 1.000D+00, 2.200D+03,
+ & 1.344D-01, 2.324D-01, 3.754D-01, 5.674D-01, 7.624D-01,
+ & 8.896D-01, 9.808D-01, 1.000D+00, 1.000D+00, 1.000D+00,
+ & 1.000D+00, 2.850D+03, 2.330D-01, 4.130D-01, 6.610D-01,
+ & 9.010D-01, 9.970D-01, 1.000D+00, 1.000D+00, 1.000D+00,
+ & 1.000D+00, 1.000D+00, 1.000D+00, 3.500D+03, 3.300D-01,
+ & 5.450D-01, 7.950D-01, 1.000D+00, 1.000D+00, 1.000D+00,
+ & 1.000D+00, 1.000D+00, 1.000D+00, 1.000D+00, 1.000D+00/
+
+ CST = ONE
+ IF (EKIN.GT.3.5D0) RETURN
+C
+ IF(KPROJ.EQ.8) GOTO 101
+ IF(KPROJ.EQ.1) GOTO 102
+C* INVALID REACTION
+ WRITE(LOUT,'(A,I5/A)')
+ & ' INVALID PARTICLE TYPE IN DNUPRE - KPROJ=',KPROJ,
+ & ' COS(THETA) = 1D0 RETURNED'
+ RETURN
+C-------------------------------- NP ELASTIC SCATTERING----------
+101 CONTINUE
+ IF (EKIN.GT.0.740D0)GOTO 1000
+ IF (EKIN.LT.0.300D0)THEN
+C EKIN .LT. 300 MEV
+ IDAT=1
+ ELSE
+C 300 MEV < EKIN < 740 MEV
+ IDAT=6
+ END IF
+C
+ ENER=EKIN
+ IE=INT(ABS(ENER/0.020D0))
+ UNIV=(ENER-DBLE(IE)*0.020D0)/0.020D0
+C FORWARD/BACKWARD DECISION
+ K=IDAT+5*IE
+ BWFW=(DCLIN(K+5)-DCLIN(K))*UNIV + DCLIN(K)
+ IF (DT_RNDM(CST).LT.BWFW)THEN
+ VALUE2=-1D0
+ K=K+1
+ ELSE
+ VALUE2=1D0
+ K=K+3
+ END IF
+C
+ COEF=(DCLIN(K+5)-DCLIN(K))*UNIV + DCLIN(K)
+ RND=DT_RNDM(COEF)
+C
+ IF(RND.LT.COEF)THEN
+ CST=DT_RNDM(RND)
+ CST=CST*VALUE2
+ ELSE
+ R1=DT_RNDM(CST)
+ R2=DT_RNDM(R1)
+ R3=DT_RNDM(R2)
+ R4=DT_RNDM(R3)
+C
+ IF(VALUE2.GT.0.0)THEN
+ CST=MAX(R1,R2,R3,R4)
+ GOTO 1500
+ ELSE
+ R5=DT_RNDM(R4)
+C
+ IF (IDAT.EQ.1)THEN
+ CST=-MAX(R1,R2,R3,R4,R5)
+ ELSE
+ R6=DT_RNDM(R5)
+ R7=DT_RNDM(R6)
+ CST=-MAX(R1,R2,R3,R4,R5,R6,R7)
+ END IF
+C
+ END IF
+C
+ END IF
+C
+ GOTO 1500
+C
+C******** EKIN .GT. 0.74 GEV
+C
+1000 ENER=EKIN - 0.66D0
+C IE=ABS(ENER/0.02)
+ IE=INT(ENER/0.02D0)
+ EMEV=EKIN*1D3
+C
+ UNIV=(ENER-DBLE(IE)*0.020D0)/0.020D0
+ K=IE
+ BWFW=(DCHN(K+1)-DCHN(K))*UNIV + DCHN(K)
+ RND=DT_RNDM(BWFW)
+C FORWARD NEUTRON
+ IF (RND.GE.BWFW)THEN
+ DO 1200 K=10,36,9
+ IF (DCHNA(K).GT.EMEV) THEN
+ UNIVE=(EMEV-DCHNA(K-9))/(DCHNA(K)-DCHNA(K-9))
+ UNIV=DT_RNDM(UNIVE)
+ DO 1100 I=1,8
+ II=K+I
+ P=(DCHNA(II)-DCHNA(II-9))*UNIVE + DCHNA(II-9)
+C
+ IF (P.GT.UNIV)THEN
+ UNIV=DT_RNDM(UNIVE)
+ FLTI=DBLE(I)-UNIV
+ GOTO(290,290,290,290,330,340,350,360) I
+ END IF
+ 1100 CONTINUE
+ END IF
+ 1200 CONTINUE
+C
+ ELSE
+C BACKWARD NEUTRON
+ DO 1400 K=13,60,12
+ IF (DCHNB(K).GT.EMEV) THEN
+ UNIVE=(EMEV-DCHNB(K-12))/(DCHNB(K)-DCHNB(K-12))
+ UNIV=DT_RNDM(UNIVE)
+ DO 1300 I=1,11
+ II=K+I
+ P=(DCHNB(II)-DCHNB(II-12))*UNIVE + DCHNB(II-12)
+C
+ IF (P.GT.UNIV)THEN
+ UNIV=DT_RNDM(P)
+ FLTI=DBLE(I)-UNIV
+ GOTO(120,120,140,150,160,160,180,190,200,210,220) I
+ END IF
+ 1300 CONTINUE
+ END IF
+ 1400 CONTINUE
+ END IF
+C
+120 CST=1.0D-2*FLTI-1.0D0
+ GOTO 1500
+140 CST=2.0D-2*UNIV-0.98D0
+ GOTO 1500
+150 CST=4.0D-2*UNIV-0.96D0
+ GOTO 1500
+160 CST=6.0D-2*FLTI-1.16D0
+ GOTO 1500
+180 CST=8.0D-2*UNIV-0.80D0
+ GOTO 1500
+190 CST=1.0D-1*UNIV-0.72D0
+ GOTO 1500
+200 CST=1.2D-1*UNIV-0.62D0
+ GOTO 1500
+210 CST=2.0D-1*UNIV-0.50D0
+ GOTO 1500
+220 CST=3.0D-1*(UNIV-1.0D0)
+ GOTO 1500
+C
+290 CST=1.0D0-2.5d-2*FLTI
+ GOTO 1500
+330 CST=0.85D0+0.5D-1*UNIV
+ GOTO 1500
+340 CST=0.70D0+1.5D-1*UNIV
+ GOTO 1500
+350 CST=0.50D0+2.0D-1*UNIV
+ GOTO 1500
+360 CST=0.50D0*UNIV
+C
+1500 RETURN
+C
+C----------------------------------- PP ELASTIC SCATTERING -------
+C
+ 102 CONTINUE
+ EMEV=EKIN*1D3
+C
+ IF (EKIN.LE.0.500D0) THEN
+ RND=DT_RNDM(EMEV)
+ CST=2.0D0*RND-1.0D0
+ RETURN
+C
+ ELSEIF (EKIN.LT.1.0D0) THEN
+ DO 2200 K=13,60,12
+ IF (PDCI(K).GT.EMEV) THEN
+ UNIVE=(EMEV-PDCI(K-12))/(PDCI(K)-PDCI(K-12))
+ UNIV=DT_RNDM(UNIVE)
+ SUM=0
+ DO 2100 I=1,11
+ II=K+I
+ SUM=SUM + (PDCI(II)-PDCI(II-12))*UNIVE + PDCI(II-12)
+C
+ IF (UNIV.LT.SUM)THEN
+ UNIV=DT_RNDM(SUM)
+ FLTI=DBLE(I)-UNIV
+ GOTO(55,55,55,60,60,65,65,65,65,70,70) I
+ END IF
+ 2100 CONTINUE
+ END IF
+ 2200 CONTINUE
+ ELSE
+ DO 2400 K=12,55,11
+ IF (PDCH(K).GT.EMEV) THEN
+ UNIVE=(EMEV-PDCH(K-11))/(PDCH(K)-PDCH(K-11))
+ UNIV=DT_RNDM(UNIVE)
+ SUM=0.0D0
+ DO 2300 I=1,10
+ II=K+I
+ SUM=SUM + (PDCH(II)-PDCH(II-11))*UNIVE + PDCH(II-11)
+C
+ IF (UNIV.LT.SUM)THEN
+ UNIV=DT_RNDM(SUM)
+ FLTI=UNIV+DBLE(I)
+ GOTO(50,55,60,60,65,65,65,65,70,70) I
+ END IF
+ 2300 CONTINUE
+ END IF
+ 2400 CONTINUE
+ END IF
+C
+50 CST=0.4D0*UNIV
+ GOTO 2500
+55 CST=0.2D0*FLTI
+ GOTO 2500
+60 CST=0.3D0+0.1D0*FLTI
+ GOTO 2500
+65 CST=0.6D0+0.04D0*FLTI
+ GOTO 2500
+70 CST=0.78D0+0.02D0*FLTI
+C
+2500 CONTINUE
+ IF (DT_RNDM(CST).GT.0.5D0) CST=-CST
+C
+ RETURN
+ END
+*
+*===dhadri=============================================================*
+*
+CDECK ID>, DT_DHADRI
+ SUBROUTINE DT_DHADRI(N,PLAB,ELAB,CX,CY,CZ,ITTA)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+C
+C-----------------------------
+C*** INPUT VARIABLES LIST:
+C*** SAMPLING OF HADRON NUCLEON INTERACTION FOR (ABOUT) 0.1 LE PLAB LE 6
+C*** GEV/C LABORATORY MOMENTUM REGION
+C*** N - PROJECTILE HADRON INDEX
+C*** PLAB - LABORATORY MOMENTUM OF N (GEV/C)
+C*** ELAB - LABORATORY ENERGY OF N (GEV)
+C*** CX,CY,CZ - DIRECTION COSINES OF N IN THE LABORATORY SYSTEM
+C*** ITTA - TARGET NUCLEON INDEX
+C*** OUTPUT VARIABLES LIST OF PARTICLE CHARACTERISTICS IN /FINLSP/
+C IR COUNTS THE NUMBER OF PRODUCED PARTICLES
+C*** ITR - PARTICLE INDEX, CXR,CYR,CZR - DIRECTION COSINES (LAB. SYST.)
+C*** ELR,PLR LAB. ENERGY AND LAB. MOMENTUM OF THE SAMPLED PARTICLE
+C*** RESPECT., UNITS (GEV/C AND GEV)
+C----------------------------
+
+ COMMON /HNGAMR/ REDU,AMO,AMM(15)
+ COMMON /HNREDV/ THRESH(268),IRII(17),IKII(17),IEII(17)
+ COMMON /HNREAC/ UMO(296),PLABF(296),SIIN(296),WK(5184),
+ & NRK(2,268),NURE(30,2)
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+ COMMON /HNSPLI/ WTI(460),NZKI(460,3)
+ COMMON /HNMETL/ CXS(149),CYS(149),CZS(149),ELS(149),PLS(149),
+ & ITS(149),IS
+ COMMON /HNDRUN/ RUNTES,EFTES
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* final state from HADRIN interaction
+ PARAMETER (MAXFIN=10)
+ COMMON /HNFSPA/ ITRH(MAXFIN),CXRH(MAXFIN),CYRH(MAXFIN),
+ & CZRH(MAXFIN),ELRH(MAXFIN),PLRH(MAXFIN),IRH
+
+ DIMENSION ITPRF(110)
+ DATA NNN/0/
+ DATA UMODA/0./
+ DATA ITPRF/-1,-1,5*1,-1,-1,1,1,1,-1,-1,-1,-1,6*1,-1,-1,-1,85*1/
+ LOWP=0
+ IF (N.LE.0.OR.N.GE.111)N=1
+ IF (ITPRF( N ).GT.0 .OR. ITTA.GT.8) THEN
+ GOTO 280
+* WRITE (6,1000)
+* + ' FALSE USE OF THE PARTICLE TYPE INDEX: N, ITTA', N, ITTA
+* STOP
+*1000 FORMAT (3(5H ****/),A,2I4,3(5H ****/))
+* + 45H FALSE USE OF THE PARTICLE TYPE INDEX, N,LUE ,I4,3(5H ****/))
+ ENDIF
+ IATMPT=0
+ IF (ABS(PLAB-5.0D0).LT.4.99999D0) GO TO 20
+C IF(IPRI.GE.1) WRITE (6,1010) PLAB
+C STOP
+ 1010 FORMAT ( ' PROJECTILE HADRON MOMENTUM OUTSIDE OF THE
+ + ALLOWED REGION, PLAB=',1E15.5)
+
+ 20 CONTINUE
+ UMODAT=N*1.11111D0+ITTA*2.19291D0
+ IF(UMODAT.NE.UMODA) CALL DT_DCALUM(N,ITTA)
+ UMODA=UMODAT
+ 30 IATMPT=0
+ LOWP=LOWP+1
+ 40 CONTINUE
+ IMACH=0
+ REDU=2.0D0
+ IF (LOWP.GT.20) THEN
+C WRITE(LOUT,*) ' jump 1'
+ GO TO 280
+ ENDIF
+ NNN=N
+ IF (NNN.EQ.N) GO TO 50
+ RUNTES=0.0D0
+ EFTES=0.0D0
+ 50 CONTINUE
+ IS=1
+ IRH=0
+ IST=1
+ NSTAB=23
+ IRE=NURE(N,1)
+ IF(ITTA.GT.1) IRE=NURE(N,2)
+C
+C-----------------------------
+C*** IE,AMT,ECM,SI DETERMINATION
+C----------------------------
+ CALL DT_DSIGIN(IRE,PLAB,N,IE,AMT ,AMN,ECM,SI,ITTA)
+ IANTH=-1
+**sr
+C IF (AMH(1).NE.0.93828D0) IANTH=1
+ IF (AMH(1).NE.0.9383D0) IANTH=1
+**
+ IF (IANTH.GE.0) SI=1.0D0
+ ECMMH=ECM
+C
+C-----------------------------
+C ENERGY INDEX
+C IRE CHARACTERIZES THE REACTION
+C IE IS THE ENERGY INDEX
+C----------------------------
+ IF (SI.LT.1.D-6) THEN
+C WRITE(LOUT,*) ' jump 2'
+ GO TO 280
+ ENDIF
+ IF (N.LE.NSTAB) GO TO 60
+ RUNTES=RUNTES+1.0D0
+ IF (RUNTES.LT.20.D0) WRITE(LOUT,1020)N
+ 1020 FORMAT(3H N=,I10,30H THE PROEKTILE IS A RESONANCE )
+ IF(IBARH(N).EQ.1) N=8
+ IF(IBARH(N).EQ.-1) N=9
+ 60 CONTINUE
+ IMACH=IMACH+1
+**sr 19.2.97: loop for direct channel suppression
+C IF (IMACH.GT.10) THEN
+ IF (IMACH.GT.1000) THEN
+**
+C WRITE(LOUT,*) ' jump 3'
+ GO TO 280
+ ENDIF
+ ECM =ECMMH
+ AMN2=AMN**2
+ AMT2=AMT**2
+ ECMN=(ECM**2+AMN2-AMT2)/(2.0D0*ECM )
+ IF(ECMN.LE.AMN) ECMN=AMN
+ PCMN=SQRT(ECMN**2-AMN2)
+ GAM=(ELAB+AMT)/ECM
+ BGAM=PLAB/ECM
+ IF (IANTH.GE.0) ECM=2.1D0
+C
+C-----------------------------
+C*** RANDOM CHOICE OF REACTION CHANNEL
+C----------------------------
+ IST=0
+ VV=DT_RNDM(AMN2)
+ VV=VV-1.D-17
+C
+C-----------------------------
+C*** PLACE REDUCED VERSION
+C----------------------------
+ IIEI=IEII(IRE)
+ IDWK=IEII(IRE+1)-IIEI
+ IIWK=IRII(IRE)
+ IIKI=IKII(IRE)
+C
+C-----------------------------
+C*** SHRINKAGE TO THE CONSIDERED ENERGY REGION FOR THE USE OF WEIGHTS
+C----------------------------
+ HECM=ECM
+ HUMO=2.0D0*UMO(IIEI+IDWK)-UMO(IIEI+IDWK-1)
+ IF (HUMO.LT.ECM) ECM=HUMO
+C
+C-----------------------------
+C*** INTERPOLATION PREPARATION
+C----------------------------
+ ECMO=UMO(IE)
+ ECM1=UMO(IE-1)
+ DECM=ECMO-ECM1
+ DEC=ECMO-ECM
+C
+C-----------------------------
+C*** RANDOM LOOP
+C----------------------------
+ IK=0
+ WKK=0.0D0
+ WICOR=0.0D0
+ 70 IK=IK+1
+ IWK=IIWK+(IK-1)*IDWK+IE-IIEI
+ WOK=WK(IWK)
+ WDK=WOK-WK(IWK-1)
+C
+C-----------------------------
+C*** TESTVARIABLE WICO/WICOR: IF CHANNEL IK HAS THE SAME WEIGHTS LIKE IK
+C GO TO NEXT CHANNEL, BECAUSE WKK((IK))-WKK((IK-1))=0, IK CAN NOT
+C CONTRIBUTE
+C----------------------------
+ IF (PLAB.LT.PLABF(IIEI+2)) WDK=0.0D0
+ WICO=WOK*1.23459876D0+WDK*1.735218469D0
+ IF (WICO.EQ.WICOR) GO TO 70
+ IF (UMO(IIEI+IDWK).LT.HECM) WDK=0.0D0
+ WICOR=WICO
+C
+C-----------------------------
+C*** INTERPOLATION IN CHANNEL WEIGHTS
+C----------------------------
+ EKLIM=-THRESH(IIKI+IK)
+ IELIM=IDT_IEFUND(EKLIM,IRE)
+ DELIM=UMO(IELIM)+EKLIM
+ *+1.D-16
+ DETE=(ECM-(ECMO-EKLIM)*0.5D0)*2.0D0
+ IF (DELIM*DELIM-DETE*DETE) 90,90,80
+ 80 DECC=DELIM
+ GO TO 100
+ 90 DECC=DECM
+ 100 CONTINUE
+ WKK=WOK-WDK*DEC/(DECC+1.D-9)
+C
+C-----------------------------
+C*** RANDOM CHOICE
+C----------------------------
+C
+ IF (VV.GT.WKK) GO TO 70
+C
+C***IK IS THE REACTION CHANNEL
+C----------------------------
+ INRK=IKII(IRE)+IK
+ ECM=HECM
+ I1001 =0
+C
+ 110 CONTINUE
+ IT1=NRK(1,INRK)
+ AM1=DT_DAMG(IT1)
+ IT2=NRK(2,INRK)
+ AM2=DT_DAMG(IT2)
+ AMS=AM1+AM2
+ I1001=I1001+1
+ IF (I1001.GT.50) GO TO 60
+C
+ IF (IT2*AMS.GT.IT2*ECM) GO TO 110
+ IT11=IT1
+ IT22=IT2
+ IF (IANTH.GE.0) ECM=ELAB+AMT+0.00001D0
+ AM11=AM1
+ AM22=AM2
+ IF (IT2.GT.0) GO TO 120
+**sr 19.2.97: supress direct channel for pp-collisions
+ IF ((N.EQ.1).AND.(ITTA.EQ.1).AND.(IT2.LE.0)) THEN
+ RR = DT_RNDM(AM11)
+ IF (RR.LE.0.75D0) GOTO 60
+ ENDIF
+**
+C
+C-----------------------------
+C INCLUSION OF DIRECT RESONANCES
+C RANDOM CHOICE OF DECAY CHANNELS OF THE DIRECT RESONANCE IT1
+C------------------------
+ KZ1=K1H(IT1)
+ IST=IST+1
+ IECO=0
+ ECO=ECM
+ GAM=(ELAB+AMT)/ECO
+ BGAM=PLAB/ECO
+ CXS(1)=CX
+ CYS(1)=CY
+ CZS(1)=CZ
+ GO TO 170
+ 120 CONTINUE
+ WW=DT_RNDM(ECO)
+ IF(WW.LT. 0.5D0) GO TO 130
+ IT1=IT22
+ IT2=IT11
+ AM1=AM22
+ AM2=AM11
+ 130 CONTINUE
+C
+C-----------------------------
+C THE FIRST PARTICLE IS DEFINED TO BE THE FORWARD GOING ONE AT SMALL T
+ IBN=IBARH(N)
+ IB1=IBARH(IT1)
+ IT11=IT1
+ IT22=IT2
+ AM11=AM1
+ AM22=AM2
+ IF(IB1.EQ.IBN) GO TO 140
+ IT1=IT22
+ IT2=IT11
+ AM1=AM22
+ AM2=AM11
+ 140 CONTINUE
+C-----------------------------
+C***IT1,IT2 ARE THE CREATED PARTICLES
+C***MOMENTA AND DIRECTION COSINA IN THE CM - SYSTEM
+C------------------------
+ CALL DT_DTWOPA(ECM1,ECM2,PCM1,PCM2,COD1,COD2,COF1,COF2,SIF1,SIF2,
+ *IT1,IT2,ECM,ECMN,PCMN,N,AM1,AM2)
+ IST=IST+1
+ ITS(IST)=IT1
+ AMM(IST)=AM1
+C
+C-----------------------------
+C***TRANSFORMATION INTO LAB SYSTEM AND ROTATION
+C----------------------------
+ CALL DT_DTRAFO(GAM,BGAM,CX,CY,CZ,COD1,COF1,SIF1,
+ &PCM1,ECM1,PLS(IST),CXS(IST),CYS(IST),CZS(IST),ELS(IST))
+ IST=IST+1
+ ITS(IST)=IT2
+ AMM(IST)=AM2
+ CALL DT_DTRAFO(GAM,BGAM,CX,CY,CZ,COD2,COF2,SIF2,
+ *PCM2,ECM2,PLS(IST),CXS(IST),CYS(IST),CZS(IST),ELS(IST))
+ 150 CONTINUE
+C
+C-----------------------------
+C***TEST STABLE OR UNSTABLE
+C----------------------------
+ IF(ITS(IST).GT.NSTAB) GO TO 160
+ IRH=IRH+1
+C
+C-----------------------------
+C***IRH IS THE NUMBER OF THE FINAL STABLE PARTICLE
+C----------------------------
+C* IF (REDU.LT.0.D0) GO TO 1009
+ ITRH(IRH)=ITS(IST)
+ PLRH(IRH)=PLS(IST)
+ CXRH(IRH)=CXS(IST)
+ CYRH(IRH)=CYS(IST)
+ CZRH(IRH)=CZS(IST)
+ ELRH(IRH)=ELS(IST)
+ IST=IST-1
+ IF(IST.GE.1) GO TO 150
+ GO TO 260
+ 160 CONTINUE
+C
+C RANDOM CHOICE OF DECAY CHANNELS
+C----------------------------
+C
+ IT=ITS(IST)
+ ECO=AMM(IST)
+ GAM=ELS(IST)/ECO
+ BGAM=PLS(IST)/ECO
+ IECO=0
+ KZ1=K1H(IT)
+ 170 CONTINUE
+ IECO=IECO+1
+ VV=DT_RNDM(GAM)
+ VV=VV-1.D-17
+ IIK=KZ1-1
+ 180 IIK=IIK+1
+ IF (VV.GT.WTI(IIK)) GO TO 180
+C
+C IIK IS THE DECAY CHANNEL
+C----------------------------
+ IT1=NZKI(IIK,1)
+ I310=0
+ 190 CONTINUE
+ I310=I310+1
+ AM1=DT_DAMG(IT1)
+ IT2=NZKI(IIK,2)
+ AM2=DT_DAMG(IT2)
+ IF (IT2-1.LT.0) GO TO 240
+ IT3=NZKI(IIK,3)
+ AM3=DT_DAMG(IT3)
+ AMS=AM1+AM2+AM3
+C
+C IF IIK-KIN.LIM.GT.ACTUAL TOTAL CM-ENERGY, DO AGAIN RANDOM IIK-CHOICE
+C----------------------------
+ IF (IECO.LE.10) GO TO 200
+ IATMPT=IATMPT+1
+ IF(IATMPT.GT.3) THEN
+C WRITE(LOUT,*) ' jump 4'
+ GO TO 280
+ ENDIF
+ GO TO 40
+ 200 CONTINUE
+ IF (I310.GT.50) GO TO 170
+ IF (AMS.GT.ECO) GO TO 190
+C
+C FOR THE DECAY CHANNEL
+C IT1,IT2, IT3 ARE THE PRODUCED PARTICLES FROM IT
+C----------------------------
+ IF (REDU.LT.0.D0) GO TO 30
+ ITWTHC=0
+ REDU=2.0D0
+ IF(IT3.EQ.0) GO TO 220
+ 210 CONTINUE
+ ITWTH=1
+ CALL DT_DTHREP(ECO,ECM1,ECM2,ECM3,PCM1,PCM2,PCM3,COD1,COF1,SIF1,
+ *COD2,COF2,SIF2,COD3,COF3,SIF3,AM1,AM2,AM3)
+ GO TO 230
+ 220 CALL DT_DTWOPD(ECO,ECM1,ECM2,PCM1,PCM2,COD1,COF1,SIF1,
+ &COD2,COF2,SIF2,AM1,AM2)
+ ITWTH=-1
+ IT3=0
+ 230 CONTINUE
+ ITWTHC=ITWTHC+1
+ IF (REDU.GT.0.D0) GO TO 240
+ REDU=2.0D0
+ IF (ITWTHC.GT.100) GO TO 30
+ IF (ITWTH) 220,220,210
+ 240 CONTINUE
+ ITS(IST )=IT1
+ IF (IT2-1.LT.0) GO TO 250
+ ITS(IST+1) =IT2
+ ITS(IST+2)=IT3
+ RX=CXS(IST)
+ RY=CYS(IST)
+ RZ=CZS(IST)
+ AMM(IST)=AM1
+ CALL DT_DTRAFO(GAM,BGAM,RX,RY,RZ,COD1,COF1,SIF1,PCM1,ECM1,
+ *PLS(IST),CXS(IST),CYS(IST),CZS(IST),ELS(IST))
+ IST=IST+1
+ AMM(IST)=AM2
+ CALL DT_DTRAFO(GAM,BGAM,RX,RY,RZ,COD2,COF2,SIF2,PCM2,ECM2,
+ *PLS(IST),CXS(IST),CYS(IST),CZS(IST),ELS(IST))
+ IF (IT3.LE.0) GO TO 250
+ IST=IST+1
+ AMM(IST)=AM3
+ CALL DT_DTRAFO(GAM,BGAM,RX,RY,RZ,COD3,COF3,SIF3,PCM3,ECM3,
+ *PLS(IST),CXS(IST),CYS(IST),CZS(IST),ELS(IST))
+ 250 CONTINUE
+ GO TO 150
+ 260 CONTINUE
+ 270 CONTINUE
+ RETURN
+ 280 CONTINUE
+C
+C----------------------------
+C
+C ZERO CROSS SECTION CASE
+C----------------------------
+C
+ IRH=1
+ ITRH(1)=N
+ CXRH(1)=CX
+ CYRH(1)=CY
+ CZRH(1)=CZ
+ ELRH(1)=ELAB
+ PLRH(1)=PLAB
+ RETURN
+ END
+*
+*===runtt==============================================================*
+*
+CDECK ID>, DT_RUNTT
+ BLOCK DATA DT_RUNTT
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ COMMON /HNDRUN/ RUNTES,EFTES
+
+ DATA RUNTES,EFTES /100.D0,100.D0/
+
+ END
+*
+*===noname=============================================================*
+*
+CDECK ID>, DT_NONAME
+ BLOCK DATA DT_NONAME
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* slope parameters for HADRIN interactions
+ COMMON /HNSLOP/ SM(25),BBM(25),BBB(25)
+ COMMON /HNREDV/ THRESH(268),IRII(17),IKII(17),IEII(17)
+
+C DATAS DATAS DATAS DATAS DATAS
+C****** *********
+ DATA IKII/ 0, 15, 41, 67, 82, 93, 110, 133, 148, 159, 172, 183,
+ & 207, 224, 241, 252, 268 /
+ DATA IEII/ 0, 21, 46, 71, 92, 109, 126, 143, 160, 173, 186, 199,
+ & 220, 241, 262, 279, 296 /
+ DATA IRII/ 0, 315, 965, 1615, 1930, 2117, 2406, 2797, 3052, 3195,
+ & 3364, 3507, 4011, 4368, 4725, 4912, 5184/
+
+C
+C MASSES FOR THE SLOPE B(M) IN GEV
+C SLOPE B(M) FOR AN MESONIC SYSTEM
+C SLOPE B(M) FOR A BARYONIC SYSTEM
+
+*
+ DATA SM,BBM,BBB/ 0.8D0, 0.85D0, 0.9D0, 0.95D0, 1.D0,
+ & 1.05D0, 1.1D0, 1.15D0, 1.2D0, 1.25D0,
+ & 1.3D0, 1.35D0, 1.4D0, 1.45D0, 1.5D0,
+ & 1.55D0, 1.6D0, 1.65D0, 1.7D0, 1.75D0,
+ & 1.8D0, 1.85D0, 1.9D0, 1.95D0, 2.D0,
+ & 15.6D0, 14.95D0, 14.3D0, 13.65D0, 13.D0,
+ & 12.35D0, 11.7D0, 10.85D0, 10.D0, 9.15D0,
+ & 8.3D0, 7.8D0, 7.3D0, 7.25D0, 7.2D0,
+ & 6.95D0, 6.7D0, 6.6D0, 6.5D0, 6.3D0,
+ & 6.1D0, 5.85D0, 5.6D0, 5.35D0, 5.1D0,
+ & 15.D0, 15.D0, 15.D0, 15.D0, 15.D0, 15.D0, 15.D0,
+ & 14.2D0, 13.4D0, 12.6D0,
+ & 11.8D0, 11.2D0, 10.6D0, 9.8D0, 9.D0,
+ & 8.25D0, 7.5D0, 6.25D0, 5.D0, 4.5D0, 5*4.D0 /
+*
+ END
+*
+*===damg===============================================================*
+*
+CDECK ID>, DT_DAMG
+ DOUBLE PRECISION FUNCTION DT_DAMG(IT)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+
+ DIMENSION GASUNI(14)
+ DATA GASUNI/
+ *-1.D0,-.98D0,-.95D0,-.87D0,-.72D0,-.48D0,
+ *-.17D0,.17D0,.48D0,.72D0,.87D0,.95D0,.98D0,1.D0/
+ DATA GAUNO/2.352D0/
+ DATA GAUNON/2.4D0/
+ DATA IO/14/
+ DATA NSTAB/23/
+
+ I=1
+ IF (IT.LE.0) GO TO 30
+ IF (IT.LE.NSTAB) GO TO 20
+ DGAUNI=GAUNO*GAUNON/DBLE(IO-1)
+ VV=DT_RNDM(DGAUNI)
+ VV=VV*2.0D0-1.0D0+1.D-16
+ 10 CONTINUE
+ VO=GASUNI(I)
+ I=I+1
+ V1=GASUNI(I)
+ IF (VV.GT.V1) GO TO 10
+ UNIGA=DGAUNI*(DBLE(I)-2.0D0+(VV-VO+1.D-16)/
+ & (V1-VO)-(DBLE(IO)-1.0D0)*0.5D0)
+ DAM=GAH(IT)*UNIGA/GAUNO
+ AAM=AMH(IT)+DAM
+ DT_DAMG=AAM
+ RETURN
+ 20 CONTINUE
+ DT_DAMG=AMH(IT)
+ RETURN
+ 30 CONTINUE
+ DT_DAMG=0.0D0
+ RETURN
+ END
+*
+*===dcalum=============================================================*
+*
+CDECK ID>, DT_DCALUM
+ SUBROUTINE DT_DCALUM(N,ITTA)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C*** C.M.S.-ENERGY AND REACTION CHANNEL THRESHOLD CALCULATION
+
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+ COMMON /HNREDV/ THRESH(268),IRII(17),IKII(17),IEII(17)
+ COMMON /HNSPLI/ WTI(460),NZKI(460,3)
+ COMMON /HNREAC/ UMO(296),PLABF(296),SIIN(296),WK(5184),
+ & NRK(2,268),NURE(30,2)
+
+ IRE=NURE(N,ITTA/8+1)
+ IEO=IEII(IRE)+1
+ IEE=IEII(IRE +1)
+ AM1=AMH(N )
+ AM12=AM1**2
+ AM2=AMH(ITTA)
+ AM22=AM2**2
+ DO 10 IE=IEO,IEE
+ PLAB2=PLABF(IE)**2
+ ELAB=SQRT(AM12+AM22+2.0D0*SQRT(PLAB2+AM12)*AM2)
+ UMO(IE)=ELAB
+ 10 CONTINUE
+ IKO=IKII(IRE)+1
+ IKE=IKII(IRE +1)
+ UMOO=UMO(IEO)
+ DO 30 IK=IKO,IKE
+ IF(NRK(2,IK).GT.0) GO TO 30
+ IKI=NRK(1,IK)
+ AMSS=5.0D0
+ K11=K1H(IKI)
+ K22=K2H(IKI)
+ DO 20 IK1=K11,K22
+ IN=NZKI(IK1,1)
+ AMS=AMH(IN)
+ IN=NZKI(IK1,2)
+ IF(IN.GT.0)AMS=AMS+AMH(IN)
+ IN=NZKI(IK1,3)
+ IF(IN.GT.0) AMS=AMS+AMH(IN)
+ IF (AMS.LT.AMSS) AMSS=AMS
+ 20 CONTINUE
+ IF(UMOO.LT.AMSS) UMOO=AMSS
+ THRESH(IK)=UMOO
+ 30 CONTINUE
+ RETURN
+ END
+*
+*===dchanh=============================================================*
+*
+CDECK ID>, DT_DCHANH
+ SUBROUTINE DT_DCHANH
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+ COMMON /HNSPLI/ WTI(460),NZKI(460,3)
+ COMMON /HNREDV/ THRESH(268),IRII(17),IKII(17),IEII(17)
+ COMMON /HNREAC/ UMO(296),PLABF(296),SIIN(296),WK(5184),
+ & NRK(2,268),NURE(30,2)
+
+ DIMENSION HWT(460),HWK(40),SI(5184)
+ EQUIVALENCE (WK(1),SI(1))
+C--------------------
+C*** USE ONLY FOR DATAPREPARATION OF PURE HADRIN
+C*** CALCULATION OF REACTION- AND DECAY-CHANNEL-WEIGHTS,
+C*** THRESHOLD ENERGIES+MOMENTA OF REACTION CHNLS.
+C*** CHANGE OF WT- AND WK-INPUTDATA INTO WEIGHTS FOR THE M.-C.-PROCEDURE
+C*** (ADDED ONE TO EACH OTHER FOR CORRESPONDING CHANNELS)
+C--------------------------
+ IREG=16
+ DO 90 IRE=1,IREG
+ IWKO=IRII(IRE)
+ IEE=IEII(IRE+1)-IEII(IRE)
+ IKE=IKII(IRE+1)-IKII(IRE)
+ IEO=IEII(IRE)+1
+ IIKA=IKII(IRE)
+* modifications to suppress elestic scattering 24/07/91
+ DO 80 IE=1,IEE
+ SIS=1.D-14
+ SINORC=0.0D0
+ DO 10 IK=1,IKE
+ IWK=IWKO+IEE*(IK-1)+IE
+ IF(NRK(2,IIKA+IK).EQ.0) SINORC=1.0D0
+ SIS=SIS+SI(IWK)*SINORC
+ 10 CONTINUE
+ SIIN(IEO+IE-1)=SIS
+ SIO=0.D0
+ IF (SIS.GE.1.D-12) GO TO 20
+ SIS=1.D0
+ SIO=1.D0
+ 20 CONTINUE
+ SINORC=0.0D0
+ DO 30 IK=1,IKE
+ IWK=IWKO+IEE*(IK-1)+IE
+ IF(NRK(2,IIKA+IK).EQ.0) SINORC=1.0D0
+ SIO=SIO+SI(IWK)*SINORC/SIS
+ HWK(IK)=SIO
+ 30 CONTINUE
+ DO 40 IK=1,IKE
+ IWK=IWKO+IEE*(IK-1)+IE
+ 40 WK(IWK)=HWK(IK)
+ IIKI=IKII(IRE)
+ DO 70 IK=1,IKE
+ AM111=0.D0
+ INRK1=NRK(1,IIKI+IK)
+ IF (INRK1.GT.0) AM111=AMH(INRK1)
+ AM222=0.D0
+ INRK2=NRK(2,IIKI+IK)
+ IF (INRK2.GT.0) AM222=AMH(INRK2)
+ THRESH(IIKI+IK)=AM111 +AM222
+ IF (INRK2-1.GE.0) GO TO 60
+ INRKK=K1H(INRK1)
+ AMSS=5.D0
+ INRKO=K2H(INRK1)
+ DO 50 INRK1=INRKK,INRKO
+ INZK1=NZKI(INRK1,1)
+ INZK2=NZKI(INRK1,2)
+ INZK3=NZKI(INRK1,3)
+ IF (INZK1.LE.0.OR.INZK1.GT.110) GO TO 50
+ IF (INZK2.LE.0.OR.INZK2.GT.110) GO TO 50
+ IF (INZK3.LE.0.OR.INZK3.GT.110) GO TO 50
+C WRITE (6,310)INRK1,INZK1,INZK2,INZK3
+ 1000 FORMAT (4I10)
+ AMS=AMH(INZK1)+AMH(INZK2)
+ IF (INZK3-1.GE.0) AMS=AMS+AMH(INZK3)
+ IF (AMSS.GT.AMS) AMSS=AMS
+ 50 CONTINUE
+ AMS=AMSS
+ IF (AMS.LT.UMO(IEO)) AMS=UMO(IEO)
+ THRESH(IIKI+IK)=AMS
+ 60 CONTINUE
+ 70 CONTINUE
+ 80 CONTINUE
+ 90 CONTINUE
+ DO 100 J=1,460
+ 100 HWT(J)=0.D0
+ DO 120 I=1,110
+ IK1=K1H(I)
+ IK2=K2H(I)
+ HV=0.D0
+ IF (IK2.GT.460)IK2=460
+ IF (IK1.LE.0)IK1=1
+ DO 110 J=IK1,IK2
+ HV=HV+WTI(J)
+ HWT(J)=HV
+ JI=J
+ 110 CONTINUE
+ IF (ABS(HV-1.0D0).GT.1.D-4) WRITE(LOUT,1010)I,JI,HV
+ 1010 FORMAT (35H ERROR IN HWT, FALSE USE OF CHANWH ,2I6,F10.2)
+ 120 CONTINUE
+ DO 130 J=1,460
+ 130 WTI(J)=HWT(J)
+ RETURN
+ END
+*
+*===dhadde=============================================================*
+*
+CDECK ID>, DT_DHADDE
+ SUBROUTINE DT_DHADDE
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* particle properties (BAMJET index convention)
+ CHARACTER*8 ANAME
+ COMMON /DTPART/ ANAME(210),AAM(210),GA(210),TAU(210),
+ & IICH(210),IIBAR(210),K1(210),K2(210)
+* HADRIN: decay channel information
+ PARAMETER (IDMAX9=602)
+ CHARACTER*8 ZKNAME
+ COMMON /HNDECH/ ZKNAME(IDMAX9),WT(IDMAX9),NZK(IDMAX9,3)
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+ COMMON /HNSPLI/ WTI(460),NZKI(460,3)
+* decay channel information for HADRIN
+ COMMON /HNADDH/ AMZ(16),GAZ(16),TAUZ(16),ICHZ(16),IBARZ(16),
+ & K1Z(16),K2Z(16),WTZ(153),II22,
+ & NZK1(153),NZK2(153),NZK3(153)
+
+ DATA IRETUR/0/
+
+ IRETUR=IRETUR+1
+ AMH(31)=0.48D0
+ IF (IRETUR.GT.1) RETURN
+ DO 10 I=1,94
+ AMH(I) = AAM(I)
+ GAH(I) = GA(I)
+ TAUH(I) = TAU(I)
+ ICHH(I) = IICH(I)
+ IBARH(I) = IIBAR(I)
+ K1H(I) = K1(I)
+ K2H(I) = K2(I)
+ 10 CONTINUE
+**sr
+C AMH(1)=0.93828D0
+ AMH(1)=0.9383D0
+**
+ AMH(2)=AMH(1)
+ DO 20 I=26,30
+ K1H(I)=452
+ K2H(I)=452
+ 20 CONTINUE
+ DO 30 I=1,307
+ WTI(I) = WT(I)
+ NZKI(I,1) = NZK(I,1)
+ NZKI(I,2) = NZK(I,2)
+ NZKI(I,3) = NZK(I,3)
+ 30 CONTINUE
+ DO 40 I=1,16
+ L=I+94
+ AMH(L)=AMZ(I)
+ GAH( L)=GAZ(I)
+ TAUH( L)=TAUZ(I)
+ ICHH( L)=ICHZ(I)
+ IBARH( L)=IBARZ(I)
+ K1H( L)=K1Z(I)
+ K2H( L)=K2Z(I)
+ 40 CONTINUE
+ DO 50 I=1,153
+ L=I+307
+ WTI(L) = WTZ(I)
+ NZKI(L,3) = NZK3(I)
+ NZKI(L,2) = NZK2(I)
+ NZKI(L,1) = NZK1(I)
+ 50 CONTINUE
+ RETURN
+ END
+*
+*===iefund=============================================================*
+*
+CDECK ID>, IDT_IEFUND
+ INTEGER FUNCTION IDT_IEFUND(PL,IRE)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C*****IEFUN CALCULATES A MOMENTUM INDEX
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ COMMON /HNDRUN/ RUNTES,EFTES
+ COMMON /HNREDV/ THRESH(268),IRII(17),IKII(17),IEII(17)
+ COMMON /HNREAC/ UMO(296),PLABF(296),SIIN(296),WK(5184),
+ & NRK(2,268),NURE(30,2)
+
+ IPLA=IEII(IRE)+1
+ *+1
+ IPLE=IEII(IRE+1)
+ IF (PL.LT.0.) GO TO 30
+ DO 10 I=IPLA,IPLE
+ J=I-IPLA+1
+ IF (PL.LE.PLABF(I)) GO TO 60
+ 10 CONTINUE
+ I=IPLE
+ IF ( EFTES.GT.40.D0) GO TO 20
+ EFTES=EFTES+1.0D0
+ WRITE(LOUT,1000)PL,J
+ 20 CONTINUE
+ GO TO 70
+ 30 CONTINUE
+ DO 40 I=IPLA,IPLE
+ J=I-IPLA+1
+ IF (-PL.LE.UMO(I)) GO TO 60
+ 40 CONTINUE
+ I=IPLE
+ IF ( EFTES.GT.40.D0) GO TO 50
+ EFTES=EFTES+1.0D0
+ WRITE(LOUT,1000)PL,I
+ 50 CONTINUE
+ 60 CONTINUE
+ 70 CONTINUE
+ IDT_IEFUND=I
+ RETURN
+ 1000 FORMAT(14H PLAB OR -ECM=,E12.4,27H IS OUT OF CONSIDERED RANGE ,
+ +7H IEFUN=,I5)
+ END
+*
+*===dsigin=============================================================*
+*
+CDECK ID>, DT_DSIGIN
+ SUBROUTINE DT_DSIGIN(IRE ,PLAB,N,IE ,AMT ,AMN,ECM ,SI ,ITAR)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+ COMMON /HNREDV/ THRESH(268),IRII(17),IKII(17),IEII(17)
+ COMMON /HNREAC/ UMO(296),PLABF(296),SIIN(296),WK(5184),
+ & NRK(2,268),NURE(30,2)
+
+ IE=IDT_IEFUND(PLAB,IRE)
+ IF (IE.LE.IEII(IRE)) IE=IE+1
+ AMT=AMH(ITAR)
+ AMN=AMH(N)
+ AMN2=AMN*AMN
+ AMT2=AMT*AMT
+ ECM=SQRT(AMN2+AMT2+2.0D0*AMT*SQRT(AMN2+PLAB**2))
+C*** INTERPOLATION PREPARATION
+ ECMO=UMO(IE)
+ ECM1=UMO(IE-1)
+ DECM=ECMO-ECM1
+ DEC=ECMO-ECM
+ IIKI=IKII(IRE)+1
+ EKLIM=-THRESH(IIKI)
+ WOK=SIIN(IE)
+ WDK=WOK-SIIN(IE-1)
+ IF (ECM.GT.ECMO) WDK=0.0D0
+C*** INTERPOLATION IN CHANNEL WEIGHTS
+ IELIM=IDT_IEFUND(EKLIM,IRE)
+ DELIM=UMO(IELIM)+EKLIM
+ *+1.D-16
+ DETE=(ECM-(ECMO-EKLIM)*0.5D0)*2.0D0
+ IF (DELIM*DELIM-DETE*DETE) 20,20,10
+ 10 DECC=DELIM
+ GO TO 30
+ 20 DECC=DECM
+ 30 CONTINUE
+ WKK=WOK-WDK*DEC/(DECC+1.D-9)
+ IF (WKK.LT.0.0D0) WKK=0.0D0
+ SI=WKK+1.D-12
+ IF (-EKLIM.GT.ECM) SI=1.D-14
+ RETURN
+ END
+*
+*===dtchoi=============================================================*
+*
+CDECK ID>, DT_DTCHOI
+ SUBROUTINE DT_DTCHOI(T,P,PP,E,EE,I,II,N,AM1,AM2)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C ****************************
+C TCHOIC CALCULATES A RANDOM VALUE
+C FOR THE FOUR-MOMENTUM-TRANSFER T
+C ****************************
+
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+* slope parameters for HADRIN interactions
+ COMMON /HNSLOP/ SM(25),BBM(25),BBB(25)
+
+ AMA=AM1
+ AMB=AM2
+ IF (I.GT.30.AND.II.GT.30) GO TO 20
+ III=II
+ AM3=AM2
+ IF (I.LE.30) GO TO 10
+ III=I
+ AM3=AM1
+ 10 CONTINUE
+ GO TO 30
+ 20 CONTINUE
+ III=II
+ AM3=AM2
+ IF (AMA.LE.AMB) GO TO 30
+ III=I
+ AM3=AM1
+ 30 CONTINUE
+ IB=IBARH(III)
+ AMA=AM3
+ K=INT((AMA-0.75D0)/0.05D0)
+ IF (K-2.LT.0) K=1
+ IF (K-26.GE.0) K=25
+ IF (IB)50,40,50
+ 40 BM=BBM(K)
+ GO TO 60
+ 50 BM=BBB(K)
+ 60 CONTINUE
+C NORMALIZATION
+ TMIN=-2.0D0*(E*EE-P*PP)+AMH(N)**2+AM1 **2
+ TMAX=-2.0D0*(E*EE+P*PP)+AMH(N)**2+AM1 **2
+ VB=DT_RNDM(TMIN)
+**sr test
+C IF (VB.LT.0.2D0) BM=BM*0.1
+C **0.5
+ BM = BM*5.05D0
+**
+ TMI=BM*TMIN
+ TMA=BM*TMAX
+ ETMA=0.D0
+ IF (ABS(TMA).GT.120.D0) GO TO 70
+ ETMA=EXP(TMA)
+ 70 CONTINUE
+ AN=(1.0D0/BM)*(EXP(TMI)-ETMA)
+C*** RANDOM CHOICE OF THE T - VALUE
+ R=DT_RNDM(TMI)
+ T=(1.0D0/BM)*LOG(ETMA+R*AN*BM)
+ RETURN
+ END
+*
+*===dtwopa=============================================================*
+*
+CDECK ID>, DT_DTWOPA
+ SUBROUTINE DT_DTWOPA(E1,E2,P1,P2,COD1,COD2,COF1,COF2,SIF1,SIF2,
+ &IT1,IT2,UMOO,ECM,P,N,AM1,AM2)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C ******************************************************
+C QUASI TWO PARTICLE PRODUCTION
+C TWOPAR CALCULATES THE ENERGYS AND THE MOMENTA
+C FOR THE CREATED PARTICLES OR RESONANCES IT1 AND IT2
+C IN THE CM - SYSTEM
+C COD1,COD2,COF1,COF2,SIF1,SIF2 ARE THE ANGLES FOR
+C SPHERICAL COORDINATES
+C ******************************************************
+
+* particle properties (BAMJET index convention),
+* (dublicate of DTPART for HADRIN)
+ COMMON /HNABLT/ AMH(110),GAH(110),TAUH(110),ICHH(110),IBARH(110),
+ & K1H(110),K2H(110)
+
+ AMA=AM1
+ AMB=AM2
+ AMA2=AMA*AMA
+ E1=((UMOO-AMB)*(UMOO+AMB) + AMA2)/(2.0D0*UMOO)
+ E2=UMOO - E1
+ IF (E1.LT.AMA*1.00001D0) E1=AMA*1.00001D0
+ AMTE=(E1-AMA)*(E1+AMA)
+ AMTE=AMTE+1.D-18
+ P1=SQRT(AMTE)
+ P2=P1
+C / P2 / = / P1 / BUT OPPOSITE DIRECTIONS
+C DETERMINATION OF THE ANGLES
+C COS(THETA1)=COD1 COS(THETA2)=COD2
+C SIN(PHI1)=SIF1 SIN(PHI2)=SIF2
+C COS(PHI1)=COF1 COS(PHI2)=COF2
+C PHI IS UNIFORMLY DISTRIBUTED IN ( 0,2*PI )
+ CALL DT_DSFECF(COF1,SIF1)
+ COF2=-COF1
+ SIF2=-SIF1
+C CALCULATION OF THETA1
+ CALL DT_DTCHOI(TR,P,P1,ECM,E1,IT1,IT2,N,AM1,AM2)
+ COD1=(TR-AMA2-AMH(N)*AMH(N)+2.0D0*ECM*E1)/(2.0D0*P*P1+1.D-18)
+ IF (COD1.GT.0.9999999D0) COD1=0.9999999D0
+ COD2=-COD1
+ RETURN
+ END
+*
+*===zk=================================================================*
+*
+CDECK ID>, DT_ZK
+ BLOCK DATA DT_ZK
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* decay channel information for HADRIN
+ COMMON /HNADDH/ AMZ(16),GAZ(16),TAUZ(16),ICHZ(16),IBARZ(16),
+ & K1Z(16),K2Z(16),WTZ(153),II22,
+ & NZK1(153),NZK2(153),NZK3(153)
+* decay channel information for HADRIN
+ CHARACTER*8 ANAMZ,ZKNAM4,ZKNAM5,ZKNAM6
+ COMMON /HNADDN/ ANAMZ(16),ZKNAM4(9),ZKNAM5(90),ZKNAM6(54)
+
+* Particle masses in GeV *
+ DATA AMZ/ 3*2.2D0, 0.9576D0, 3*1.887D0, 2.4D0, 2.03D0, 2*1.44D0,
+ & 2*1.7D0, 3*0.D0/
+* Resonance width Gamma in GeV *
+ DATA GAZ/ 3*.2D0, .1D0, 4*.2D0, .18D0, 2*.2D0, 2*.15D0, 3*0.D0 /
+* Mean life time in seconds *
+ DATA TAUZ / 16*0.D0 /
+* Charge of particles and resonances *
+ DATA ICHZ/ 0, 1, 3*0, 1, -1, 0, 1, -1, 0, 0, 1 , 3*0 /
+* Baryonic charge *
+ DATA IBARZ/ 2, 7*0, 1, -1, -1, 1, 1, 3*0 /
+* First number of decay channels used for resonances *
+* and decaying particles *
+ DATA K1Z/ 308,310,313,317,322,365,393,421,425,434,440,446,449,
+ & 3*460/
+* Last number of decay channels used for resonances *
+* and decaying particles *
+ DATA K2Z/ 309,312,316,321,364,392,420,424,433,439,445,448,451,
+ & 3*460/
+* Weight of decay channel *
+ DATA WTZ/ .17D0, .83D0, 2*.33D0, .34D0, .17D0, 2*.33D0, .17D0,
+ & .01D0, .13D0, .36D0, .27D0, .23D0, .0014D0, .0029D0, .0014D0,
+ & .0029D0, 4*.0007D0, .0517D0, .0718D0, .0144D0, .0431D0, .0359D0,
+ & .0718D0, .0014D0, .0273D0, .0014D0, .0431D0, 2*.0129D0, .0259D0,
+ & .0517D0, .0359D0, .0014D0, 2*.0144D0, .0129D0, .0014D0, .0259D0,
+ & .0359D0, .0072D0, .0474D0, .0948D0, .0259D0, .0072D0, .0144D0,
+ & .0287D0, .0431D0, .0144D0, .0287D0, .0474D0, .0144D0, .0075D0,
+ & .0057D0, .0019D0, .0038D0, .0095D0, 2*.0014D0, .0191D0, .0572D0,
+ & .1430D0, 2*.0029D0, 5*.0477D0, .0019D0, .0191D0, .0686D0,.0172D0,
+ & .0095D0, .1888D0, .0172D0, .0191D0, .0381D0, 2*.0571D0, .0190D0,
+ & .0057D0, .0019D0, .0038D0, .0095D0, .0014D0, .0014D0, .0191D0,
+ & .0572D0, .1430D0, 2*.0029D0, 5*.0477D0, .0019D0, .0191D0,.0686D0,
+ & .0172D0, .0095D0, .1888D0, .0172D0, .0191D0, .0381D0, 2*.0571D0,
+ & .0190D0, 4*.25D0, 2*.2D0, .12D0, .1D0, .07D0, .07D0, .14D0,
+ & 2*.05D0, .0D0, .3334D0, .2083D0, 2*.125D0, .2083D0, .0D0, .125D0,
+ & .2083D0, .3334D0, .2083D0, .125D0, .3D0, .05D0, .65D0, .3D0,
+ & .05D0, .65D0, 9*1.D0 /
+* Particle numbers in decay channel *
+ DATA NZK1/ 8, 1, 2, 9, 1, 2, 9, 2, 9, 7, 13, 31, 15, 24, 23, 13,
+ & 23, 13, 2*23, 14, 13, 23, 31, 98, 2*33, 32, 23, 14, 13, 35, 2*23,
+ & 14, 13, 33, 23, 98, 31, 23, 14, 13, 35, 2*33, 32, 23, 35, 33, 32,
+ & 98, 5*35, 4*13, 23, 13, 98, 32, 33, 23, 13, 23, 13, 14, 13, 32,
+ & 13, 98, 23, 13, 2*32, 13, 33, 32, 98, 2*35, 4*14, 23, 14, 98,
+ & 2*34, 23, 14, 23, 2*14, 13, 34, 14, 98, 23, 14, 2*34, 14, 33, 32,
+ & 98, 2*35, 104, 61, 105, 62, 1, 17, 21, 17, 22, 2*21, 22, 21, 2,
+ & 67, 68, 69, 2, 2*9, 68, 69, 70, 2, 9, 2*24, 15, 2*25, 16, 9*0/
+ DATA NZK2/ 2*8, 1, 8, 9, 2*8, 2*1, 7, 14, 13, 16, 25, 23, 14, 23,
+ & 14, 31, 33, 32, 34, 35, 31, 23, 31, 33, 34, 31, 32, 34, 31, 33,
+ & 32, 2*33, 35, 31, 33, 31, 33, 32, 34, 35, 31, 33, 34, 35, 31,
+ & 4*33, 32, 3*35, 2*23, 13, 31, 32, 33, 13, 31, 32, 2*31, 32, 33,
+ & 32, 32, 35, 31, 2*32, 33, 31, 33, 35, 33, 3*32, 35, 2*23, 14,
+ & 31, 34, 33, 14, 31, 33, 2*31, 34, 32, 33, 34, 35, 31, 2*34, 33,
+ & 31, 33, 35, 33, 2*34, 33, 35, 1, 2, 8, 9, 25, 13, 35, 2*32, 33,
+ & 31, 13, 23, 31, 13, 23, 14, 79, 80, 31, 13, 23, 14, 78, 79, 8,
+ & 1, 8, 1, 8, 1, 9*0 /
+ DATA NZK3/ 23, 14, 2*13, 23, 13, 2*23, 14, 0, 7, 14, 4*0, 2*23,
+ & 10*0, 33, 2*31, 0, 33, 34, 32, 34, 0, 35, 0, 31, 3*35, 0, 3*31,
+ & 35, 31, 33, 34, 31, 33, 34, 31, 33, 35, 0, 23, 14, 6*0, 32, 3*33,
+ & 32, 34, 0, 35, 0, 2*35, 2*31, 35, 32, 34, 31, 33, 32, 0, 23, 13,
+ & 6*0, 34, 2*33, 34, 33, 34, 0, 35, 0,2*35, 2*31, 35, 2*34, 31,
+ & 2*34, 25*0, 23, 2*14, 23, 2*13, 9*0 /
+* Particle names *
+ DATA ANAMZ / 'NNPI', 'ANPPI', 'ANNPI', ' ETS ',' PAP ',' PAN ',
+ & 'APN', 'DEO ', 'S+2030', 'AN*-14', 'AN*014','KONPI ','AKOPPI',
+ & 3*'BLANK' /
+* Name of decay channel *
+ DATA ZKNAM4/'NNPI0','PNPI-','APPPI+','ANNPI+','ANPPI0','APNPI+',
+ & 'ANNPI0','APPPI0','ANPPI-'/
+ DATA ZKNAM5/' GAGA ','P+P-GA','ETP+P-','K+K- ','K0AK0 ',
+ & ' POPO ',' P+P- ','POPOPO','P+P0P-','P0ET ','&0R0 ','P-R+ ',
+ & 'P+R- ','POOM ',' ETET ','ETSP0 ','R0ET ',' R0R0 ','R+R- ',
+ & 'P0ETR0','P-ETR+','P+ETR-',' OMET ','P0R0R0','P0R+R-','P-R+R0',
+ & 'P+R-R0','R0OM ','P0ETOM','ETSR0 ','ETETET','P0R0OM','P-R+OM',
+ & 'P+R-OM','OMOM ','R0ETET','R0R0ET','R+R-ET','P0OMOM','OMETET',
+ & 'R0R0R0','R+R0R-','ETSRET','OMR0R0','OMR+R-','OMOMET','OMOMR0',
+ & 'OMOMOM',
+ & ' P+PO ','P+POPO','P+P+P-','P+ET ','P0R+ ','P+R0 ','ETSP+ ',
+ & 'R+ET ',' R0R+ ','POETR+','P+ETR0','POR+R-','P+R0R0','P-R+R+',
+ & 'P+R-R+','R+OM ','P+ETOM','ETSR+ ','POR+OM','P+R0OM','R+ETET',
+ & 'R+R0ET','P+OMOM','R0R0R+','R+R+R-','ETSR+E','OMR+R0','OMOMR+',
+ & 'P-PO ','P-POPO','P-P-P+','P-ET ','POR- ','P-R0 ','ETSP- ',
+ & 'R-ET ','R-R0 ','POETR-','P-ETR0','POR-R0','P-R+R-','P-R0R0'/
+ DATA ZKNAM6/'P+R-R-','R-OM ','P-ETOM','ETSR- ','POR-OM','P-R0OM',
+ & 'R-ETET','R-R0ET','P-OMOM','R0R0R-','R+R-R-','ETSR-E','OMR0R-',
+ & 'OMOMR-', 'PAN-14','APN+14','NAN014','ANN014','PAKO ','LPI+ ',
+ & 'SI+OM','LAMRO+','SI0RO+','SI+RO0','SI+ETA','SI0PI+','SI+PI0',
+ & 'APETA ','AN=P+ ','AN-PO ','ANOPO ','APRHOO','ANRHO-','ANETA ',
+ & 'AN-P+ ','AN0PO ','AN+P- ','APRHO+','ANRHO0',
+ & 'KONPIO','KOPPI-','K+NPI-','AKOPPO','AKONP+','K-PPI+',
+ & 9*'BLANK'/
+*= end*block.zk *
+ END
+*
+*===blkd43=============================================================*
+*
+CDECK ID>, DT_BLKD43
+ BLOCK DATA DT_BLKD43
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+*$ CREATE REAC.ADD
+*COPY REAC
+*
+*=== reac =============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 10 december 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-dec-91 by Alfredo Ferrari *
+* *
+* This is the original common reac of Hadrin *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /HNREAC/ UMO(296),PLABF(296),SIIN(296),WK(5184),
+ & NRK(2,268),NURE(30,2)
+
+ DIMENSION
+ & UMOPI(92), UMOKC(68), UMOP(39), UMON(63), UMOK0(34),
+ & PLAPI(92), PLAKC(68), PLAP(39), PLAN(63), PLAK0(34),
+ & SPIKP1(315), SPIKPU(278), SPIKPV(372),
+ & SPIKPW(278), SPIKPX(372), SPIKP4(315),
+ & SPIKP5(187), SPIKP6(289),
+ & SKMPEL(102), SPIKP7(289), SKMNEL(68), SPIKP8(187),
+ & SPIKP9(143), SPIKP0(169), SPKPV(143),
+ & SAPPEL(105), SPIKPE(399), SAPNEL(84), SPIKPZ(273),
+ & SANPEL(84) , SPIKPF(273),
+ & SPKP15(187), SPKP16(272),
+ & NRKPI(164), NRKKC(132), NRKP(70), NRKN(116), NRKK0(54),
+ & NURELN(60)
+*
+ DIMENSION NRKLIN(532)
+ EQUIVALENCE (NRK(1,1), NRKLIN(1))
+ EQUIVALENCE ( UMO( 1), UMOPI(1)), ( UMO( 93), UMOKC(1))
+ EQUIVALENCE ( UMO(161), UMOP(1)), ( UMO(200), UMON(1))
+ EQUIVALENCE ( UMO(263), UMOK0(1))
+ EQUIVALENCE ( PLABF( 1), PLAPI(1)), ( PLABF( 93), PLAKC(1))
+ EQUIVALENCE ( PLABF(161), PLAP(1)), ( PLABF(200), PLAN(1))
+ EQUIVALENCE ( PLABF(263), PLAK0(1))
+ EQUIVALENCE ( WK( 1), SPIKP1(1)), ( WK( 316), SPIKPU(1))
+ EQUIVALENCE ( WK( 594), SPIKPV(1)), ( WK( 966), SPIKPW(1))
+ EQUIVALENCE ( WK(1244), SPIKPX(1)), ( WK(1616), SPIKP4(1))
+ EQUIVALENCE ( WK(1931), SPIKP5(1)), ( WK(2118), SPIKP6(1))
+ EQUIVALENCE ( WK(2407), SKMPEL(1)), ( WK(2509), SPIKP7(1))
+ EQUIVALENCE ( WK(2798), SKMNEL(1)), ( WK(2866), SPIKP8(1))
+ EQUIVALENCE ( WK(3053), SPIKP9(1)), ( WK(3196), SPIKP0(1))
+ EQUIVALENCE ( WK(3365), SPKPV(1)), ( WK(3508), SAPPEL(1))
+ EQUIVALENCE ( WK(3613), SPIKPE(1)), ( WK(4012), SAPNEL(1))
+ EQUIVALENCE ( WK(4096), SPIKPZ(1)), ( WK(4369), SANPEL(1))
+ EQUIVALENCE ( WK(4453), SPIKPF(1)), ( WK(4726), SPKP15(1))
+ EQUIVALENCE ( WK(4913), SPKP16(1))
+ EQUIVALENCE (NRK(1,1), NRKLIN(1))
+ EQUIVALENCE (NRKLIN( 1), NRKPI(1)), (NRKLIN( 165), NRKKC(1))
+ EQUIVALENCE (NRKLIN( 297), NRKP(1)), (NRKLIN( 367), NRKN(1))
+ EQUIVALENCE (NRKLIN( 483), NRKK0(1))
+ EQUIVALENCE (NURE(1,1), NURELN(1))
+*
+**** pi- p data *
+**** pi+ n data *
+ DATA PLAPI / 0.D0, .3D0, .5D0, .6D0, .7D0, .8D0, .9D0, .95D0,1.D0,
+ & 1.15D0, 1.3D0, 1.5D0, 1.6D0, 1.8D0, 2.D0, 2.3D0, 2.5D0, 2.8D0,
+ & 3.D0, 3.5D0, 4.D0, 0.D0, .285D0, .4D0, .45D0, .5D0, .6D0, .7D0,
+ & .75D0, .8D0, .85D0, .9D0, 1.D0, 1.15D0, 1.3D0, 1.5D0, 1.6D0,
+ & 1.8D0, 2.D0, 2.3D0, 2.5D0, 2.8D0, 3.D0, 3.5D0, 4.D0, 4.5D0, 0.D0,
+ & .285D0, .4D0, .45D0, .5D0, .6D0, .7D0, .75D0, .8D0, .85D0, .9D0,
+ & 1.D0, 1.15D0, 1.3D0, 1.5D0, 1.6D0, 1.8D0, 2.D0, 2.3D0, 2.5D0,
+ & 2.8D0, 3.D0, 3.5D0, 4.D0, 4.5D0, 0.D0, .3D0, .5D0, .6D0, .7D0,
+ & .8D0, .9D0, .95D0, 1.D0, 1.15D0, 1.3D0, 1.5D0, 1.6D0, 1.8D0,
+ & 2.D0, 2.3D0, 2.5D0, 2.8D0, 3.D0, 3.5D0, 4.D0 /
+ DATA PLAKC /
+ & 0.D0, .58D0, .8D0, 1.01D0, 1.23D0, 1.45D0, 1.68D0, 1.94D0,
+ & 2.18D0, 2.42D0, 2.68D0, 2.96D0, 3.24D0,
+ & 3.51D0, 3.84D0, 4.16D0, 4.49D0,
+ & 0.D0, .58D0, .8D0, 1.01D0, 1.23D0, 1.45D0, 1.68D0, 1.94D0,
+ & 2.18D0, 2.42D0, 2.68D0, 2.96D0, 3.24D0,
+ & 3.51D0, 3.84D0, 4.16D0, 4.49D0,
+ & 0.D0, .58D0, .8D0, 1.01D0, 1.23D0, 1.45D0, 1.68D0, 1.94D0,
+ & 2.18D0, 2.42D0, 2.68D0, 2.96D0, 3.24D0,
+ & 3.51D0, 3.84D0, 4.16D0, 4.49D0,
+ & 0.D0, .58D0, .8D0, 1.01D0, 1.23D0, 1.45D0, 1.68D0, 1.94D0,
+ & 2.18D0, 2.42D0, 2.68D0, 2.96D0, 3.24D0,
+ & 3.51D0, 3.84D0, 4.16D0, 4.49D0/
+ DATA PLAK0 /
+ & 0.D0, .58D0, .8D0, 1.01D0, 1.23D0, 1.45D0, 1.68D0, 1.94D0,
+ & 2.18D0, 2.42D0, 2.68D0, 2.96D0, 3.24D0,
+ & 3.51D0, 3.84D0, 4.16D0, 4.49D0,
+ & 0.D0, .58D0, .8D0, 1.01D0, 1.23D0, 1.45D0, 1.68D0, 1.94D0,
+ & 2.18D0, 2.42D0, 2.68D0, 2.96D0, 3.24D0,
+ & 3.51D0, 3.84D0, 4.16D0, 4.49D0/
+* pp pn np nn *
+ DATA PLAP /
+ & 0.D0, 1.06D0, 1.34D0, 1.63D0, 1.92D0, 2.2D0, 2.5D0,2.8D0,3.1D0,
+ & 3.43D0, 3.75D0, 4.07D0, 4.43D0,
+ & 0.D0, 1.06D0, 1.34D0, 1.63D0, 1.92D0, 2.2D0, 2.5D0,2.8D0,3.1D0,
+ & 3.43D0, 3.75D0, 4.07D0, 4.43D0,
+ & 0.D0, 1.06D0, 1.34D0, 1.63D0, 1.92D0, 2.2D0, 2.5D0,2.8D0,3.1D0,
+ & 3.43D0, 3.75D0, 4.07D0, 4.43D0 /
+* app apn anp ann *
+ DATA PLAN /
+ & 0.D0, 1.D-3, .1D0, .2D0, .3D0, .4D0, .5D0, .6D0,
+ & .74D0, 1.06D0, 1.34D0, 1.63D0, 1.92D0, 2.2D0, 2.5D0,2.8D0,3.1D0,
+ & 3.43D0, 3.75D0, 4.07D0, 4.43D0,
+ & 0.D0, 1.D-3, .1D0, .2D0, .3D0, .4D0, .5D0, .6D0,
+ & .74D0, 1.06D0, 1.34D0, 1.63D0, 1.92D0, 2.2D0, 2.5D0,2.8D0,3.1D0,
+ & 3.43D0, 3.75D0, 4.07D0, 4.43D0,
+ & 0.D0, 1.D-3, .1D0, .2D0, .3D0, .4D0, .5D0, .6D0,
+ & .74D0, 1.06D0, 1.34D0, 1.63D0, 1.92D0, 2.2D0, 2.5D0,2.8D0,3.1D0,
+ & 3.43D0, 3.75D0, 4.07D0, 4.43D0 /
+ DATA SIIN / 296*0.D0 /
+ DATA UMOPI/ 1.08D0,1.233D0,1.302D0,1.369D0,1.496D0,
+ & 1.557D0,1.615D0,1.6435D0,
+ & 1.672D0,1.753D0,1.831D0,1.930D0,1.978D0,2.071D0,2.159D0,
+ & 2.286D0,2.366D0,2.482D0,2.56D0,
+ & 2.735D0,2.90D0,
+ & 1.08D0,1.222D0,1.302D0,1.3365D0,1.369D0,1.434D0,
+ & 1.496D0,1.527D0,1.557D0,
+ & 1.586D0,1.615D0,1.672D0,1.753D0,1.831D0,1.930D0,1.978D0,
+ & 2.071D0,2.159D0,2.286D0,2.366D0,
+ & 2.482D0,2.560D0,2.735D0,2.90D0,3.06D0,
+ & 1.08D0,1.222D0,1.302D0,1.3365D0,1.369D0,1.434D0,
+ & 1.496D0,1.527D0,1.557D0,
+ & 1.586D0,1.615D0,1.672D0,1.753D0,1.831D0,1.930D0,1.978D0,
+ & 2.071D0,2.159D0,2.286D0,2.366D0,
+ & 2.482D0,2.560D0,2.735D0,2.90D0,3.06D0,
+ & 1.08D0,1.233D0,1.302D0,1.369D0,1.496D0,
+ & 1.557D0,1.615D0,1.6435D0,
+ & 1.672D0,1.753D0,1.831D0,1.930D0,1.978D0,2.071D0,2.159D0,
+ & 2.286D0,2.366D0,2.482D0,2.56D0,
+ & 2.735D0, 2.90D0/
+ DATA UMOKC/ 1.44D0,
+ & 1.598D0,1.7D0,1.8D0,1.9D0,2.0D0,2.1D0,2.2D0,2.3D0,2.4D0,2.5D0,
+ & 2.6D0,2.7D0,2.8D0,2.9D0,3.0D0,
+ & 3.1D0,1.44D0,
+ & 1.598D0,1.7D0,1.8D0,1.9D0,2.0D0,2.1D0,2.2D0,2.3D0,2.4D0,2.5D0,
+ & 2.6D0,2.7D0,2.8D0,2.9D0,3.0D0,
+ & 3.1D0,1.44D0,
+ & 1.598D0,1.7D0,1.8D0,1.9D0,2.0D0,2.1D0,2.2D0,2.3D0,2.4D0,2.5D0,
+ & 2.6D0,2.7D0,2.8D0,2.9D0,3.0D0,
+ & 3.1D0,1.44D0,
+ & 1.598D0,1.7D0,1.8D0,1.9D0,2.0D0,2.1D0,2.2D0,2.3D0,2.4D0,2.5D0,
+ & 2.6D0,2.7D0,2.8D0,2.9D0,3.0D0,
+ & 3.1D0/
+ DATA UMOK0/ 1.44D0,
+ & 1.598D0,1.7D0,1.8D0,1.9D0,2.0D0,2.1D0,2.2D0,2.3D0,2.4D0,2.5D0,
+ & 2.6D0,2.7D0,2.8D0,2.9D0,3.0D0,
+ & 3.1D0,1.44D0,
+ & 1.598D0,1.7D0,1.8D0,1.9D0,2.0D0,2.1D0,2.2D0,2.3D0,2.4D0,2.5D0,
+ & 2.6D0,2.7D0,2.8D0,2.9D0,3.0D0,
+ & 3.1D0/
+* pp pn np nn *
+ DATA UMOP/
+ & 1.88D0,2.102D0,2.2D0,2.3D0,2.4D0,2.5D0,2.6D0,2.7D0,2.8D0,2.9D0,
+ & 3.D0,3.1D0,3.2D0,
+ & 1.88D0,2.102D0,2.2D0,2.3D0,2.4D0,2.5D0,2.6D0,2.7D0,2.8D0,2.9D0,
+ & 3.D0,3.1D0,3.2D0,
+ & 1.88D0,2.102D0,2.2D0,2.3D0,2.4D0,2.5D0,2.6D0,2.7D0,2.8D0,2.9D0,
+ & 3.D0,3.1D0,3.2D0/
+* app apn anp ann *
+ DATA UMON /
+ & 1.877D0,1.87701D0,1.879D0,1.887D0,1.9D0,1.917D0,1.938D0,1.962D0,
+ & 2.D0,2.102D0,2.2D0,2.3D0,2.4D0,2.5D0,2.6D0,2.7D0,2.8D0,2.9D0,
+ & 3.D0,3.1D0,3.2D0,
+ & 1.877D0,1.87701D0,1.879D0,1.887D0,1.9D0,1.917D0,1.938D0,1.962D0,
+ & 2.D0,2.102D0,2.2D0,2.3D0,2.4D0,2.5D0,2.6D0,2.7D0,2.8D0,2.9D0,
+ & 3.D0,3.1D0,3.2D0,
+ & 1.877D0,1.87701D0,1.879D0,1.887D0,1.9D0,1.917D0,1.938D0,1.962D0,
+ & 2.D0,2.102D0,2.2D0,2.3D0,2.4D0,2.5D0,2.6D0,2.7D0,2.8D0,2.9D0,
+ & 3.D0,3.1D0,3.2D0/
+**** reaction channel state particles *
+ DATA NRKPI / 13, 1, 15, 21, 81, 0, 13, 54, 23, 53, 13, 63, 13, 58,
+ & 23, 57, 13, 65, 1, 32, 53, 31, 54, 32, 53, 33, 53, 35, 63, 32,
+ & 13, 8, 23, 1, 17, 15, 21, 24, 22, 15, 82, 0, 61, 0, 13, 55, 23,
+ & 54, 14, 53, 13, 64, 23, 63, 13, 59, 23, 58, 14, 57, 13, 66, 23,
+ & 65, 1, 31, 8, 32, 1, 33, 1, 35, 54, 31, 55, 32, 54, 33, 53, 34,
+ & 54, 35, 14, 1, 23, 8, 17, 24, 20, 15, 22, 24, 83, 0, 62, 0, 14,
+ & 54, 23, 55, 13, 56, 14, 63, 23, 64, 14, 58, 23, 59, 13, 60, 14,
+ & 65, 23, 66, 8, 31, 1, 34, 8, 33, 8, 35, 55, 31, 54, 34, 55, 33,
+ & 56, 32, 55, 35, 14, 8, 24, 20, 84, 0, 14, 55, 23, 56, 14, 64, 14,
+ & 59, 23, 60, 14, 66, 8, 34, 56, 31, 55, 34, 56, 33, 56, 35, 64,34/
+ DATA NRKKC/ 15, 1, 89, 0, 24, 53, 15, 54, 1, 36, 1, 40, 1, 44, 36,
+ & 63, 15, 63, 45, 53, 44, 54, 15, 8, 24, 1, 91, 0, 24, 54, 15, 55,
+ & 8, 36, 1, 37, 8, 40, 1, 41, 8, 44, 1, 45, 36, 64, 37, 63, 15, 64,
+ & 24, 63, 45, 54, 44, 55, 16, 1, 25, 8, 17, 23, 21, 14, 20,
+ & 13, 22, 23, 90, 0, 38, 1, 39, 8, 16, 54, 25, 55, 1, 42, 8, 43,
+ & 16, 63, 25, 64, 39, 64, 38, 63, 46, 54, 47, 55, 8, 47, 1, 46, 52,
+ & 0, 51, 0, 16, 8, 17, 14, 20, 23, 22, 14, 92, 0, 8, 38, 16, 55,
+ & 25, 56, 8, 42, 16, 64, 38, 64, 46, 55, 47, 56, 8, 46, 94, 0 /
+* *
+* k0 p k0 n ak0 p ak/ n *
+* *
+ DATA NRKK0 / 24, 8, 106, 0, 15, 56, 24, 55, 37, 8, 41, 8, 45, 8,
+ & 37, 64, 24, 64, 44, 56, 45, 55, 25, 1, 17, 13, 22, 13, 21, 23,
+ & 107, 0, 39, 1, 25, 54, 16, 53, 43, 1, 25, 63, 39, 63, 47, 54, 46,
+ & 53, 47, 1, 103, 0, 93, 0/
+* pp pn np nn *
+ DATA NRKP / 1, 1, 85, 0, 8, 53, 1, 54, 1, 63, 8, 57, 1, 58, 2*54,
+ & 53, 55, 63, 54, 64, 53, 1, 8, 86, 0, 8, 54, 1, 55, 8, 63, 1, 64,
+ & 8, 58, 1, 59, 64, 54, 63, 55, 54, 55, 53, 56, 77, 0, 2*8, 95, 0,
+ & 8, 55, 1, 56, 8, 64, 8, 59, 1, 60, 2*55, 54, 56, 64, 55, 63, 56 /
+* app apn anp ann *
+ DATA NRKN/ 1, 2, 17, 18, 15, 16, 8, 9, 13, 14, 99, 0, 87, 0, 1,
+ & 68, 8, 69, 2, 54, 9, 55, 102, 0, 2, 63, 9, 64, 1, 75, 8, 76, 53,
+ & 67, 54, 68, 55, 69, 56, 70, 63, 68, 64, 69, 75, 54, 76, 55, 2, 8,
+ & 18, 20, 16, 24, 14, 23, 101, 0, 88, 0, 2, 55, 9, 56, 1, 67, 8,
+ & 68, 2, 64, 8, 75, 2, 59, 8, 72, 68, 55, 67, 54, 69, 56, 1, 9, 18,
+ & 21, 15, 25, 13, 23, 100, 0, 96, 0, 2, 53, 9, 54, 1, 69, 8, 70, 1,
+ & 76, 9, 63, 1, 73, 9, 58, 55, 70, 53, 68, 54, 69 /
+**** channel cross section *
+ DATA SPIKP1/ 0.D0, 300.D0, 40.D0, 20.D0, 13.D0,8.5D0,8.D0, 9.5D0,
+ & 12.D0,14.D0,15.5D0,20.D0,17.D0,13.D0,10.D0,9.D0,8.5D0,8.D0,7.8D0,
+ & 7.3D0, 6.7D0, 9*0.D0,.23D0,.35D0,.7D0,.52D0,.4D0,.3D0,.2D0,.15D0,
+ & .13D0, .11D0, .09D0, .07D0, 0.D0, .033D0,.8D0,1.35D0,1.35D0,.5D0,
+ & 15*0.D0, 3*0.D0,.00D0,0.80D0,2.2D0,3.6D0,4.6D0,4.7D0,3.5D0,2.4D0,
+ &1.8D0,1.4D0,.75D0,.47D0,.25D0,.13D0,.08D0,6*0.D0,0.D0,1.2D0,3.3D0,
+ & 5.4D0,6.9D0,7.3D0,5.3D0,3.6D0,2.7D0,2.2D0,1.1D0,.73D0,.4D0,.22D0,
+ & .12D0,9*0.D0,.0D0,0.D0,2.0D0,4.4D0,6.8D0,9.9D0,7.9D0,6.0D0,3.8D0,
+ &2.5D0,2.D0,1.4D0,1.D0,.6D0,.35D0,10*0.D0,.25D0,.55D0,.75D0,1.25D0,
+ & 1.9D0,2.D0,1.8D0,1.5D0,1.25D0,1.D0,.8D0,6*0.D0,4*0.D0,.4D0,.85D0,
+ & 1.1D0, 1.85D0, 2.8D0, 3.D0,2.7D0,2.2D0,1.85D0,1.5D0,1.2D0,6*0.D0,
+ & 6*0.D0, .5D0, 1.2D0, 1.7D0, 3.4D0, 5.2D0, 6.4D0, 6.1D0, 5.6D0,
+ & 5.2D0, 6*0.D0, 2*0.D0, .0D0, 1.D0, 3.3D0, 5.2D0, 4.45D0, 3.6D0,
+ & 2.75D0, 1.9D0, 1.65D0, 1.3D0, .95D0, .6D0, .45D0, 6*0.D0, 3*0.D0,
+ & .0D0, .45D0, 1.4D0, 1.5D0, 1.1D0, .85D0, .5D0, .3D0, .2D0, .15D0,
+ & 8*0.D0, 5*0.D0, .0D0, .0D0, .6D0, .8D0, .95D0, .8D0, .7D0, .6D0,
+ & .5D0, .4D0, 6*0.D0, 5*0.D0, .0D0, .00D0, .85D0, 1.2D0, 1.4D0,
+ & 1.2D0, 1.05D0, .9D0, .7D0, .55D0, 6*0.D0, 5*0.D0, .0D0, .00D0,
+ & 1.D0, 1.5D0, 3.5D0, 4.15D0, 3.7D0, 2.7D0, 2.3D0, 1.75D0, 6*0.D0,
+ & 10*0.D0, .5D0, 2.0D0, 3.3D0, 5.4D0, 7.D0 /
+**** pi+ n data *
+ DATA SPIKPU/ 0.D0, 25.D0, 13.D0, 11.D0, 10.5D0, 14.D0, 20.D0,
+ & 20.D0, 16.D0, 14.D0, 19.D0, 28.D0, 17.5D0, 13.5D0, 12.D0, 10.5D0,
+ & 10.D0, 10.D0, 9.5D0, 9.D0, 8.D0, 7.5D0, 7.D0, 6.5D0, 6.D0, 0.D0,
+ & 48.D0, 19.D0, 15.D0, 11.5D0, 10.D0, 8.D0, 6.5D0, 5.5D0, 4.8D0,
+ & 4.2D0, 7.5D0, 3.4D0, 2.5D0, 2.5D0, 2.1D0, 1.4D0, 1.D0, .8D0,
+ & .6D0, .46D0, .3D0, .2D0, .15D0, .13D0, 11*0.D0, .95D0, .65D0,
+ & .48D0, .35D0, .2D0, .18D0, .17D0, .16D0, .15D0, .1D0, .09D0,
+ & .065D0, .05D0, .04D0, 12*0.D0, .2D0, .25D0, .25D0, .2D0, .1D0,
+ & .08D0, .06D0, .045D0, .03D0, .02D0, .01D0, .005D0, .003D0,
+ & 12*0.D0, .3D0, .24D0, .18D0, .15D0, .13D0, .12D0, .11D0, .1D0,
+ & .09D0, .08D0, .05D0, .04D0, .03D0, 0.D0, 0.16D0, .7D0, 1.3D0,
+ & 3.1D0, 4.5D0, 2.D0, 18*0.D0, 3*.0D0, 0.D0, 0.D0, 4.0D0, 11.D0,
+ & 11.4D0, 10.3D0, 7.5D0, 6.8D0, 4.75D0, 2.5D0, 1.5D0, .9D0, .55D0,
+ & .35D0, 13*0.D0, .1D0, .34D0, .5D0, .8D0, 1.1D0, 2.25D0, 3.3D0,
+ & 2.3D0, 1.6D0, .95D0, .45D0, .28D0, .15D0, 10*0.D0, 2*0.D0, .17D0,
+ & .64D0, 1.D0, 1.5D0, 2.1D0, 4.25D0, 6.2D0, 4.4D0, 3.D0, 1.8D0,
+ & .9D0, .53D0, .28D0, 10*0.D0, 2*0.D0, .25D0, .82D0,
+ & 1.3D0, 1.9D0, 2.8D0, 5.5D0 , 8.D0, 5.7D0, 3.9D0, 2.35D0, 1.15D0,
+ & .69D0, .37D0, 10*0.D0, 7*0.D0, .0D0, .34D0, 1.5D0, 3.47D0,
+ & 5.87D0, 6.23D0, 4.27D0, 2.6D0, 1.D0, .6D0, .3D0, .15D0, 6*0.D0/
+*
+ DATA SPIKPV/ 7*0.D0, .00D0, .16D0, .75D0, 1.73D0, 2.93D0, 3.12D0,
+ & 2.13D0, 1.3D0, .5D0, .3D0, .15D0, .08D0, 6*0.D0, 10*0.D0, .2D0,
+ & .6D0, .92D0, 2.4D0, 4.9D0, 6.25D0, 5.25D0, 3.5D0, 2.15D0, 1.4D0,
+ & 1.D0, .7D0, 13*0.D0, .13D0, .4D0, .62D0, 1.6D0, 3.27D0, 4.17D0,
+ & 3.5D0, 2.33D0, 1.43D0, .93D0, .66D0, .47D0, 13*0.D0, .07D0, .2D0,
+ & .31D0, .8D0, 1.63D0, 2.08D0, 1.75D0, 1.17D0, .72D0, .47D0, .34D0,
+ & .23D0, 17*0.D0, .33D0, 1.D0, 1.8D0, 2.67D0, 5.33D0, 6.D0, 5.53D0,
+ & 5.D0, 17*0.D0, .17D0, .5D0, .9D0, 1.83D0, 2.67D0, 3.0D0, 2.77D0,
+ & 2.5D0, 3*0.D0, 3*0.D0, 1.D0, 3.3D0, 2.8D0, 2.5D0, 2.3D0, 1.8D0,
+ & 1.5D0, 1.1D0, .8D0, .7D0, .55D0, .3D0, 10*0.D0, 9*0.D0, .1D0,
+ & .4D0, 1.D0, 1.4D0, 2.2D0, 2.5D0, 2.2D0, 1.65D0, 1.35D0, 1.1D0,
+ & .8D0, .6D0, .4D0, 12*0.D0, .15D0, .6D0, 1.5D0, 2.1D0, 3.3D0,
+ & 3.8D0, 3.3D0, 2.45D0, 2.05D0, 1.65D0, 1.2D0, .9D0, .6D0, 3*0.D0,
+ & 9*0.D0, .10D0, .2D0, .5D0, .7D0, 1.3D0, 1.55D0, 1.9D0, 1.8D0,
+ & 1.55D0, 1.35D0, 1.15D0, .95D0, .7D0, 13*0.D0, .2D0, .5D0, .7D0,
+ & 1.3D0, 1.55D0, 1.9D0, 1.8D0, 1.55D0, 1.35D0, 1.15D0, .95D0, .7D0,
+ & 17*0.D0, .2D0, .5D0, .85D0, 2.D0, 2.15D0, 2.05D0, 1.75D0, 1.D0,
+ & 17*0.D0, .13D0, .33D0, .57D0, 1.33D0, 1.43D0, 1.36D0, 1.17D0,
+ & .67D0, 17*0.D0, .07D0, .17D0, .28D0, .67D0, .72D0, .69D0, .58D0,
+ & .33D0,17*0.D0,.4D0, .7D0, 1.D0, 1.6D0, 1.8D0, 2.3D0,1.9D0,1.7D0 /
+**** pi- p data *
+ DATA SPIKPW/ 0.D0, 25.D0, 13.D0, 11.D0, 10.5D0, 14.D0, 2*20.D0,
+ & 16.D0, 14.D0, 19.D0, 28.D0, 17.5D0, 13.5D0, 12.D0, 10.5D0,
+ & 2*10.D0, 9.5D0, 9.D0, 8.D0, 7.5D0, 7.D0, 6.5D0, 6.D0, 0.D0,
+ & 48.D0, 19.D0, 15.D0, 11.5D0, 10.D0, 8.D0, 6.5D0, 5.5D0, 4.8D0,
+ & 4.2D0, 7.5D0, 3.4D0, 2*2.5D0, 2.1D0, 1.4D0, 1.D0, .8D0, .6D0,
+ & .46D0, .3D0, .2D0, .15D0, .13D0, 11*0.D0, .95D0, .65D0, .48D0,
+ & .35D0, .2D0, .18D0, .17D0, .16D0, .15D0, .1D0, .09D0, .065D0,
+ & .05D0, .04D0, 12*0.D0, .2D0, 2*.25D0, .2D0, .1D0, .08D0, .06D0,
+ & .045D0, .03D0, .02D0, .01D0, .005D0, .003D0, 12*0.D0, .3D0,
+ & .24D0, .18D0, .15D0, .13D0, .12D0, .11D0, .1D0, .09D0, .08D0,
+ & .05D0, .04D0, .03D0, 0.D0, 0.16D0, .7D0, 1.3D0, 3.1D0, 4.5D0,
+ & 2.D0, 23*0.D0, 4.0D0, 11.D0, 11.4D0, 10.3D0, 7.5D0, 6.8D0,
+ & 4.75D0, 2.5D0, 1.5D0, .9D0, .55D0, .35D0, 13*0.D0, .1D0, .34D0,
+ & .5D0, .8D0, 1.1D0, 2.25D0, 3.3D0, 2.3D0, 1.6D0, .95D0, .45D0,
+ & .28D0, .15D0, 12*0.D0, .17D0, .64D0, 1.D0, 1.5D0, 2.1D0, 4.25D0,
+ & 6.2D0, 4.4D0, 3.D0, 1.8D0, .9D0, .53D0, .28D0, 12*0.D0, .25D0,
+ & .82D0, 1.3D0, 1.9D0, 2.8D0, 5.5D0, 8.D0, 5.7D0, 3.9D0, 2.35D0,
+ & 1.15D0, .69D0, .37D0, 18*0.D0, .34D0, 1.5D0, 3.47D0, 5.87D0,
+ & 6.23D0, 4.27D0, 2.6D0, 1.D0, .6D0, .3D0, .15D0, 6*0.D0/
+*
+ DATA SPIKPX/ 8*0.D0, .16D0, .75D0, 1.73D0, 2.93D0, 3.12D0,
+ & 2.13D0, 1.3D0, .5D0, .3D0, .15D0, .08D0, 16*0.D0, .2D0, .6D0,
+ & .92D0, 2.4D0, 4.9D0, 6.25D0, 5.25D0, 3.5D0, 2.15D0, 1.4D0, 1.D0,
+ & .7D0, 13*0.D0, .13D0, .4D0, .62D0, 1.6D0, 3.27D0, 4.17D0, 3.5D0,
+ & 2.33D0, 1.43D0, .93D0, .66D0, .47D0, 13*0.D0, .07D0, .2D0, .31D0,
+ & .8D0, 1.63D0, 2.08D0, 1.75D0, 1.17D0, .72D0, .47D0, .34D0, .23D0,
+ & 17*0.D0, .33D0, 1.D0, 1.8D0, 2.67D0, 5.33D0, 6.D0, 5.53D0, 5.D0,
+ & 17*0.D0, .17D0, .5D0, .9D0, 1.83D0, 2.67D0, 3.0D0, 2.77D0, 2.5D0,
+ & 6*0.D0, 1.D0, 3.3D0, 2.8D0, 2.5D0, 2.3D0, 1.8D0, 1.5D0, 1.1D0,
+ & .8D0, .7D0, .55D0, .3D0, 19*0.D0, .1D0, .4D0, 1.D0, 1.4D0, 2.2D0,
+ & 2.5D0, 2.2D0, 1.65D0, 1.35D0, 1.1D0, .8D0, .6D0, .4D0, 12*0.D0,
+ & .15D0, .6D0, 1.5D0, 2.1D0, 3.3D0, 3.8D0, 3.3D0, 2.45D0, 2.05D0,
+ & 1.65D0, 1.2D0, .9D0, .6D0, 12*0.D0, .10D0, .2D0, .5D0, .7D0,
+ & 1.3D0, 1.55D0, 1.9D0, 1.8D0, 1.55D0, 1.35D0, 1.15D0, .95D0, .7D0,
+ & 13*0.D0, .2D0, .5D0, .7D0, 1.3D0, 1.55D0, 1.9D0, 1.8D0, 1.55D0,
+ & 1.35D0, 1.15D0, .95D0, .7D0, 17*0.D0, .2D0, .5D0, .85D0, 2.D0,
+ & 2.15D0, 2.05D0, 1.75D0, 1.D0, 17*0.D0, .13D0, .33D0, .57D0,
+ & 1.33D0, 1.43D0, 1.36D0, 1.17D0, .67D0, 17*0.D0, .07D0, .17D0,
+ & .28D0, .67D0, .72D0, .69D0, .58D0, .33D0, 17*0.D0, .4D0, .7D0,
+ & 1.D0, 1.6D0, 1.8D0, 2.3D0, 1.9D0, 1.7D0 /
+**** pi- n data *
+ DATA SPIKP4 / 0.D0, 300.D0, 40.D0, 20.D0, 13.D0, 8.5D0, 8.D0,
+ & 9.5D0, 12.D0, 14.D0, 15.5D0, 20.D0, 17.D0, 13.D0, 10.D0, 9.D0,
+ & 8.5D0, 8.D0, 7.8D0, 7.3D0, 6.7D0, 9*0.D0, .23D0, .35D0, .7D0,
+ & .52D0, .4D0, .3D0, .2D0, .15D0, .13D0, .11D0, .09D0, .07D0, 0.D0,
+ & .033D0, .8D0, 2*1.35D0, .5D0, 19*0.D0, 0.8D0, 2.2D0, 3.6D0,
+ & 4.6D0, 4.7D0, 3.5D0, 2.4D0, 1.8D0, 1.4D0, .75D0, .47D0, .25D0,
+ & .13D0, .08D0, 7*0.D0, 1.2D0, 3.3D0, 5.4D0, 6.9D0, 7.3D0, 5.3D0,
+ & 3.6D0, 2.7D0, 2.2D0, 1.1D0, .73D0, .4D0, .22D0, .12D0, 11*0.D0,
+ & 2.0D0, 4.4D0, 6.8D0, 9.9D0, 7.9D0, 6.0D0, 3.8D0, 2.5D0, 2.D0,
+ & 1.4D0, 1.D0, .6D0, .35D0, 10*0.D0, .25D0, .55D0, .75D0, 1.25D0,
+ & 1.9D0, 2.D0, 1.8D0, 1.5D0, 1.25D0, 1.D0, .8D0, 10*0.D0, .4D0,
+ & .85D0, 1.1D0, 1.85D0, 2.8D0, 3.D0, 2.7D0, 2.2D0, 1.85D0, 1.5D0,
+ & 1.2D0, 12*0.D0, .5D0, 1.2D0, 1.7D0, 3.4D0, 5.2D0, 6.4D0, 6.1D0,
+ & 5.6D0, 5.2D0, 9*0.D0, 1.D0, 3.3D0, 5.2D0, 4.45D0, 3.6D0, 2.75D0,
+ & 1.9D0, 1.65D0, 1.3D0, .95D0, .6D0, .45D0, 10*0.D0, .45D0, 1.4D0,
+ & 1.5D0, 1.1D0, .85D0, .5D0, .3D0, .2D0, .15D0, 15*0.D0, .6D0,
+ & .8D0, .95D0, .8D0, .7D0, .6D0, .5D0, .4D0, 13*0.D0, .85D0, 1.2D0,
+ & 1.4D0, 1.2D0, 1.05D0, .9D0, .7D0, .55D0, 13*0.D0, 1.D0, 1.5D0,
+ & 3.5D0, 4.15D0, 3.7D0, 2.7D0, 2.3D0, 1.75D0, 16*0.D0, .5D0, 2.0D0,
+ & 3.3D0, 5.4D0, 7.D0 /
+**** k+ p data *
+ DATA SPIKP5/ 0.D0, 20.D0, 14.D0, 12.D0, 11.5D0, 10.D0, 8.D0,
+ & 7.D0, 6.D0, 5.5D0, 5.3D0, 5.D0, 4.5D0, 4.4D0, 3.8D0, 3.D0, 2.8D0,
+ & 0.D0, .5D0, 1.15D0, 2.D0, 1.3D0, .8D0, .45D0, 13*0.D0, 0.9D0,
+ & 2.5D0, 3.D0, 2.5D0, 2.3D0, 2.D0, 1.7D0, 1.5D0, 1.2D0, .9D0, .6D0,
+ & .45D0, .21D0, .2D0, 3*0.D0, .9D0, 2.5D0, 3.D0, 2.5D0, 2.3D0,
+ & 2.D0, 1.7D0, 1.5D0, 1.2D0, .9D0, .6D0, .45D0, .21D0, .2D0,
+ & 4*0.D0, 1.D0, 2.1D0, 2.6D0, 2.3D0, 2.1D0, 1.8D0, 1.7D0, 1.4D0,
+ & 1.2D0, 1.05D0, .9D0, .66D0, .5D0, 7*0.D0, .3D0, 2*1.D0, .9D0,
+ & .7D0, .4D0, .3D0, .2D0, 11*0.D0, .1D0, 1.D0, 2.2D0, 3.5D0, 4.2D0,
+ & 4.55D0, 4.85D0, 4.9D0, 10*0.D0, .2D0, .7D0, 1.6D0, 2.5D0, 2.2D0,
+ & 1.71D0, 1.6D0, 6*0.D0, 1.4D0, 3.8D0, 5.D0, 4.7D0, 4.4D0, 4.D0,
+ & 3.5D0, 2.85D0, 2.35D0, 2.01D0, 1.8D0, 12*0.D0, .1D0, .8D0,2.05D0,
+ & 3.31D0, 3.5D0, 12*0.D0, .034D0, .2D0, .75D0, 1.04D0, 1.24D0 /
+**** k+ n data *
+ DATA SPIKP6/ 0.D0, 6.D0, 11.D0, 13.D0, 6.D0, 5.D0, 3.D0, 2.2D0,
+ & 1.5D0, 1.2D0, 1.D0, .7D0, .6D0, .5D0, .45D0, .35D0, .3D0, 0.D0,
+ & 6.D0, 11.D0, 13.D0, 6.D0, 5.D0, 3.D0, 2.2D0, 1.5D0, 1.2D0, 1.D0,
+ & .7D0, .6D0, .5D0, .45D0, .35D0, .3D0, 0.D0, .5D0, 1.3D0, 2.8D0,
+ & 2.3D0, 1.6D0, .9D0, 13*0.D0, 0.9D0, 2.5D0, 3.D0, 2.5D0, 2.3D0,
+ & 2.D0, 1.7D0, 1.5D0,1.2D0,.9D0,.6D0,.45D0,.21D0,.2D0,3*0.D0,0.9D0,
+ & 2.5D0, 3.D0, 2.5D0, 2.3D0,2.D0,1.7D0,1.5D0,1.2D0,.9D0,.6D0,.45D0,
+ & .21D0, .2D0,4*0.D0,1.D0,2.1D0,2.6D0,2.3D0,2.D0,1.8D0,1.7D0,1.4D0,
+ & 1.2D0,1.15D0,.9D0,.66D0,.5D0,4*0.D0,1.D0,2.1D0,2.6D0,2.3D0,2.1D0,
+ & 1.8D0,1.7D0,1.4D0,1.2D0, 1.15D0, .9D0, .66D0, .5D0, 7*0.D0, .3D0,
+ & 2*1.D0, .9D0, .7D0, .4D0, .35D0, .2D0, 9*0.D0, .3D0, 2*1.D0,.9D0,
+ & .7D0, .4D0, .35D0, .2D0, 11*0.D0, .1D0, 1.D0, 2.4D0,3.5D0,4.25D0,
+ & 4.55D0, 4.85D0, 4.9D0, 9*0.D0, .1D0, 1.D0, 2.4D0, 3.5D0, 4.25D0,
+ & 4.55D0, 4.85D0, 4.9D0, 10*0.D0, .2D0, .7D0, 1.6D0, 2.5D0, 2.2D0,
+ & 1.71D0, 1.6D0, 10*0.D0, .2D0, .7D0, 1.6D0, 2.5D0, 2.2D0, 1.71D0,
+ & 1.6D0, 6*0.D0, 1.4D0, 3.8D0, 5.D0, 4.7D0,4.4D0,4.D0,3.5D0,2.85D0,
+ & 2.35D0, 2.01D0, 1.8D0, 6*0.D0, 1.4D0,3.8D0,5.D0,4.7D0,4.4D0,4.D0,
+ & 3.5D0,2.85D0,2.35D0,2.01D0,1.8D0,12*0.D0,.1D0,.8D0,2.05D0,3.31D0,
+ & 3.5D0, 12*0.D0, .034D0,.2D0,.75D0,1.04D0,1.24D0 /
+**** k- p data *
+ DATA SKMPEL/ 0.D0, 35.D0, 22.D0, 25.D0, 17.D0, 9.D0, 9.5D0, 8.D0,
+ & 7.D0, 6.5D0, 6.1D0, 5.D0, 4.8D0, 4.6D0, 4.45D0, 4.3D0, 4.2D0,
+ & 0.D0, 8.D0, 3.5D0, 8.D0, 3.D0, 1.9D0, 1.7D0, 1.D0, .9D0, .8D0,
+ & .75D0, .5D0, .42D0, .38D0, .34D0, .25D0, .2D0,
+ & 0.D0, 3.D0, 3.2D0, 3.5D0, 1.5D0, 1.4D0, 1.1D0, .6D0, .5D0,
+ & .35D0, .28D0, .25D0, .18D0, .12D0, .1D0, .08D0, .04D0,
+ & 0.D0, 8.5D0, 2.4D0, 1.7D0, 1.3D0, 1.3D0, 1.1D0, .5D0,
+ & .4D0, .4D0, .35D0, .3D0, .28D0, .2D0, .16D0, .13D0, .11D0,
+ & 0.D0, 7.D0, 4.8D0, 1.4D0, 1.9D0, .9D0, .4D0, .2D0, .13D0,
+ & .1D0, .08D0, .06D0, .04D0, .02D0, .015D0, .01D0, .01D0,
+ & 0.D0, 5.5D0, 1.D0, .8D0, .75D0, .32D0, .2D0, .1D0, .09D0,
+ & .08D0, .065D0, .05D0, .04D0, .022D0, .017D0, 2*.01D0/
+ DATA SPIKP7 / 0.D0, .56D0, 1.46D0, 3.16D0, 2.01D0, 1.28D0, .74D0,
+ & 14*0.D0, 1.13D0, 2.61D0, 2.91D0, 2.58D0, 2.35D0, 2.02D0,
+ & 1.91D0, 1.57D0, 1.35D0, 1.29D0, 1.01D0, .74D0, .65D0, 4*0.D0,
+ & 1.13D0, 2.61D0, 2.91D0, 2.58D0, 2.35D0, 2.02D0, 1.91D0, 1.57D0,
+ & 1.35D0, 1.29D0, 1.01D0, .74D0, .65D0, 3*0.D0, 1.0D0, 3.03D0,
+ & 3.36D0, 2.8D0, 2.58D0, 2.24D0, 1.91D0, 1.68D0, 1.35D0, 1.01D0,
+ & .67D0, .5D0, .24D0, .23D0, 3*0.D0, 1.0D0, 3.03D0, 3.36D0, 2.8D0,
+ & 2.58D0, 2.24D0, 1.91D0, 1.68D0, 1.35D0, 1.01D0, .67D0, .5D0,
+ & .24D0, .23D0, 7*0.D0, .34D0, 1.12D0, 1.12D0, 1.01D0, .78D0,
+ & .45D0, .39D0, .22D0, .07D0, 0.D0, 7*0.D0, .34D0, 1.12D0, 1.12D0,
+ & 1.01D0, .78D0, .45D0, .39D0, .22D0, .07D0, 0.D0, 6*0.D0, 1.71D0,
+ & 4.26D0, 5.6D0, 5.57D0, 4.93D0, 4.48D0, 3.92D0, 3.19D0, 2.63D0,
+ & 2.25D0, 2.D0, 6*0.D0, 1.71D0, 4.26D0, 5.6D0, 5.57D0, 4.93D0,
+ & 4.48D0, 3.92D0, 3.19D0, 2.63D0, 2.25D0, 2.D0, 10*0.D0, .22D0,
+ & .8D0, .75D0, 1.D0, 1.3D0, 1.5D0, 1.3D0, 10*0.D0, .22D0, .8D0,
+ & .75D0, 1.D0, 1.3D0, 1.5D0, 1.3D0, 13*0.D0, .1D0, .3D0, .7D0,1.D0,
+ & 13*0.D0, .1D0, .3D0, .7D0, 1.D0, 9*0.D0, .11D0, 1.72D0, 2.69D0,
+ & 3.92D0, 4.76D0, 5.10D0, 5.44D0, 5.3D0, 9*0.D0, .11D0, 1.72D0,
+ & 2.69D0, 3.92D0, 4.76D0, 5.1D0, 5.44D0, 5.3D0, 5*0.D0,9.2D0,4.7D0,
+ & 1.9D0, 10*0.D0, 2.5D0, 15.D0, 21.5D0, 15.3D0, 3.D0, 1.5D0,
+ & 10*0.D0/
+***** k- n data *
+ DATA SKMNEL/0.D0, 4.D0, 9.5D0, 20.D0, 13.D0, 9.5D0, 6.D0, 4.4D0,
+ & 3.D0, 2.4D0, 2.D0, 1.4D0, 1.2D0, 1.D0, .9D0, .7D0, .6D0,
+ & 0.D0, 4.5D0, 6.D0, 5.D0, 2.5D0, 2.D0, 1.7D0, 2.1D0,
+ & 1.9D0, .9D0, .5D0, .3D0, .24D0, .2D0, .18D0, .1D0, .09D0,
+ & 0.D0, 1.8D0, 2.D0, 1.1D0, .9D0, .5D0, .5D0, .4D0, .4D0,
+ & .2D0, .1D0, .06D0, .05D0, .04D0, .03D0, .02D0, .02D0,
+ & 0.D0, 1.5D0, 2.D0, .9D0, 1.1D0, .4D0, .6D0, .7D0, .65D0,
+ & .3D0, .17D0, .1D0, .08D0, .07D0, .06D0, .04D0, .03D0/
+ DATA SPIKP8/0.D0, .56D0, 1.29D0, 2.26D0, 1.01D0, .64D0, .37D0,
+ & 14*0.D0, 1.13D0, 2.61D0, 2.91D0, 2.58D0, 2.35D0, 2.02D0,
+ & 1.91D0, 1.57D0, 1.35D0, 1.29D0, 1.01D0, .74D0, .65D0,
+ & 3*0.D0, 1.D0, 3.03D0, 3.36D0, 2.8D0, 2.58D0, 2.24D0,
+ & 1.91D0, 1.68D0, 1.35D0, 1.01D0, .67D0, .5D0, .24D0, .23D0,
+ & 3*0.D0, 1.D0, 3.03D0, 3.36D0, 2.8D0, 2.58D0, 2.24D0,
+ & 1.91D0, 1.68D0, 1.35D0, 1.01D0, .67D0, .5D0, .24D0, .23D0,
+ & 7*0.D0, .34D0, 1.12D0, 1.12D0, 1.01D0, .78D0, .45D0,
+ & .39D0, .22D0, .07D0, 0.D0,
+ & 6*0.D0, 1.71D0, 4.26D0, 5.6D0, 5.57D0, 4.93D0,
+ & 4.48D0, 3.92D0, 3.19D0, 2.63D0, 2.25D0, 2.D0,
+ & 10*0.D0, .22D0, .8D0, .75D0, 1.D0, 1.3D0, 1.5D0, 1.3D0,
+ & 13*0.D0, .1D0, .3D0, .7D0, 1.D0,
+ & 13*0.D0, .1D0, .3D0, .7D0, 1.D0,
+ & 9*0.D0, .11D0, 1.72D0, 2.69D0, 3.92D0, 4.76D0,
+ & 5.10D0, 5.44D0, 5.3D0,
+ & 4*0.D0, 0.00D0, 9.2D0, 4.7D0, 1.9D0, 9*0.D0/
+***** p p data *
+ DATA SPIKP9/ 0.D0, 24.D0, 25.D0, 27.D0, 23.D0, 21.D0, 20.D0,
+ & 19.D0, 17.D0, 15.5D0, 14.D0, 13.5D0, 13.D0,
+ & 0.D0, 3.6D0, 1.7D0, 10*0.D0,
+ & .0D0, 0.D0, 8.7D0, 17.7D0, 18.8D0, 15.9D0,
+ & 11.7D0, 8.D0, 6.D0, 5.3D0, 4.5D0, 3.9D0, 3.5D0,
+ & .0D0, .0D0, 2.8D0, 5.8D0, 6.2D0, 5.1D0, 3.8D0,
+ & 2.7D0, 2.1D0, 1.8D0, 1.5D0, 1.3D0, 1.1D0,
+ & 5*0.D0, 4.6D0, 10.2D0, 15.1D0,
+ & 16.9D0, 16.5D0, 11.D0, 5.5D0, 3.5D0,
+ & 10*0.D0, 4.3D0, 7.6D0, 9.D0,
+ & 10*0.D0, 1.7D0, 2.6D0, 3.D0,
+ & 6*0.D0, .3D0, .6D0, 1.D0, 1.6D0, 1.3D0, .8D0, .6D0,
+ & 6*0.D0, .7D0, 1.2D0, 1.8D0, 2.5D0, 1.8D0, 1.3D0,
+ & 1.2D0, 10*0.D0, .6D0, 1.4D0, 1.7D0,
+ & 10*0.D0, 1.9D0, 4.1D0, 5.2D0/
+***** p n data *
+ DATA SPIKP0/ 0.D0, 24.D0, 25.D0, 27.D0, 23.D0, 21.D0, 20.D0,
+ & 19.D0, 17.D0, 15.5D0, 14.D0, 13.5D0, 13.D0,
+ & 0.D0, 1.8D0, .2D0, 12*0.D0,
+ & 3.2D0, 6.05D0, 9.9D0, 5.1D0,
+ & 3.8D0, 2.7D0, 1.9D0, 1.5D0, 1.4D0, 1.3D0, 1.1D0,
+ & 2*.0D0, 3.2D0, 6.05D0, 9.9D0, 5.1D0,
+ & 3.8D0, 2.7D0, 1.9D0, 1.5D0, 1.4D0, 1.3D0, 1.1D0,
+ & 5*0.D0, 4.6D0, 10.2D0, 15.1D0,
+ & 16.4D0, 15.2D0, 11.D0, 5.4D0, 3.5D0,
+ & 5*0.D0, 4.6D0, 10.2D0, 15.1D0,
+ & 16.4D0, 15.2D0, 11.D0, 5.4D0, 3.5D0,
+ & 10*0.D0, .7D0, 5.1D0, 8.D0,
+ & 10*0.D0, .7D0, 5.1D0, 8.D0,
+ & 10*.0D0, .3D0, 2.8D0, 4.7D0,
+ & 10*.0D0, .3D0, 2.8D0, 4.7D0,
+ & 7*0.D0, 1.2D0, 2.5D0, 3.5D0, 6.D0, 5.3D0, 2.9D0,
+ & 7*0.D0, 1.7D0, 3.6D0, 5.4D0, 9.D0, 7.6D0, 4.2D0,
+ & 5*0.D0, 7.7D0, 6.1D0, 2.9D0, 5*0.D0/
+* nn - data *
+* *
+ DATA SPKPV/ 0.D0, 24.D0, 25.D0, 27.D0, 23.D0, 21.D0, 20.D0,
+ & 19.D0, 17.D0, 15.5D0, 14.D0, 13.5D0, 13.D0,
+ & 0.D0, 3.6D0, 1.7D0, 12*0.D0,
+ & 8.7D0, 17.7D0, 18.8D0, 15.9D0,
+ & 11.7D0, 8.D0, 6.D0, 5.3D0, 4.5D0, 3.9D0, 3.5D0,
+ & .0D0, .0D0, 2.8D0, 5.8D0, 6.2D0, 5.1D0, 3.8D0,
+ & 2.7D0, 2.1D0, 1.8D0, 1.5D0, 1.3D0, 1.1D0,
+ & 5*0.D0, 4.6D0, 10.2D0, 15.1D0, 16.9D0, 16.5D0,
+ & 11.D0, 5.5D0, 3.5D0,
+ & 10*0.D0, 4.3D0, 7.6D0, 9.D0,
+ & 10*0.D0, 1.7D0, 2.6D0, 3.D0,
+ & 6*0.D0, .3D0, .6D0, 1.D0, 1.6D0, 1.3D0, .8D0, .6D0,
+ & 6*0.D0, .7D0, 1.2D0, 1.8D0, 2.5D0, 1.8D0, 1.3D0,
+ & 1.2D0, 10*0.D0, .6D0, 1.4D0, 1.7D0,
+ & 10*0.D0, 1.9D0, 4.1D0, 5.2D0/
+**************** ap - p - data *
+ DATA SAPPEL/ 0.D0, 176.D0, 160.D0, 105.D0, 75.D0, 68.D0, 65.D0,
+ & 50.D0, 50.D0, 43.D0, 42.D0, 40.5D0, 35.D0, 30.D0, 28.D0,
+ & 25.D0, 22.D0, 21.D0, 20.D0, 18.D0, 17.D0, 11*0.D0,
+ & .05D0, .15D0, .18D0, .2D0, .2D0, .3D0, .4D0, .6D0, .7D0, .85D0,
+ & 0.D0, 1.D0, .9D0, .46D0, .3D0, .23D0, .18D0, .16D0, .14D0,
+ & .1D0, .08D0, .05D0, .02D0, .015D0, 4*.011D0, 3*.005D0,
+ & 0.D0, 55.D0, 50.D0, 25.D0, 15.D0, 15.D0, 14.D0, 12.D0,
+ & 10.D0, 7.D0, 6.D0, 4.D0, 3.3D0, 2.8D0, 2.4D0, 2.D0, 1.8D0,
+ & 1.55D0, 1.3D0, .95D0, .75D0,
+ & 0.D0, 3.3D0, 3.D0, 1.5D0, 1.D0, .7D0, .4D0, .35D0, .4D0,
+ & .25D0, .18D0, .08D0, .04D0, .03D0, .023D0, .016D0, .014D0,
+ & .01D0, .008D0, .006D0, .005D0/
+ DATA SPIKPE/0.D0, 215.D0, 193.D0, 170.D0, 148.D0, 113.D0, 97.D0,
+ & 84.D0, 78.D0, 68.D0, 64.D0, 61.D0, 46.D0, 36.D0, 31.3D0, 28.5D0,
+ & 25.7D0, 22.6D0, 21.4D0, 20.7D0, 19.9D0,
+ & 9*0.D0, 2.D0, 2.5D0, .2D0, 19*0.D0, .3D0, 1.4D0, 2.2D0, 1.2D0,
+ & 1.1D0, 1.D0, .8D0, .6D0, .5D0, .4D0, .3D0, 10*0.D0, .3D0, 1.4D0,
+ & 2.2D0, 1.2D0, 1.1D0, 1.D0, .8D0, .6D0, .5D0, .4D0, .3D0, 10*0.D0,
+ & .3D0, 1.4D0, 2.2D0, 1.2D0, 1.1D0, 1.D0, .8D0, .6D0, .5D0, .4D0,
+ & .3D0, 10*0.D0, .3D0, 1.4D0, 2.2D0, 1.2D0, 1.1D0, 1.D0, .8D0,
+ & .6D0, .5D0, .4D0, .3D0, 9*0.D0, .6D0, 2.5D0, 5.D0, 5.2D0, 5.1D0,
+ & 5.4D0, 5.8D0, 2.8D0, 2.1D0, 1.8D0, 1.6D0, 1.2D0, 13*0.D0, 1.3D0,
+ & 1.5D0, 2.D0, 2.5D0, 2.5D0, 2.3D0, 1.8D0, 1.4D0, 13*0.D0, 1.3D0,
+ & 1.5D0, 2.D0, 2.5D0, 2.5D0, 2.3D0, 1.8D0, 1.4D0, 13*0.D0, 1.3D0,
+ & 1.5D0, 2.D0, 2.5D0, 2.5D0, 2.3D0, 1.8D0, 1.4D0, 13*0.D0, 1.3D0,
+ & 1.5D0, 2.D0, 2.5D0, 2.5D0, 2.3D0, 1.8D0, 1.4D0, 14*0.D0, .2D0,
+ & .5D0, 1.1D0, 1.6D0, 1.4D0, 1.1D0, .9D0, 14*0.D0, .2D0, .5D0,
+ & 1.1D0, 1.6D0, 1.4D0, 1.1D0, .9D0, 14*0.D0, .2D0, .5D0, 1.1D0,
+ & 1.6D0, 1.4D0, 1.1D0, .9D0, 14*0.D0, .2D0, .5D0, 1.1D0, 1.6D0,
+ & 1.4D0, 1.1D0, .9D0, 17*0.D0, .3D0, 1.6D0, 2.6D0, 3.6D0, 17*0.D0,
+ & .3D0, 1.6D0, 2.6D0, 3.6D0, 17*0.D0, .3D0, 1.6D0, 2.6D0,
+ & 3.6D0, 17*0.D0, .3D0, 1.6D0, 2.6D0, 3.6D0 /
+**************** ap - n - data *
+ DATA SAPNEL/
+ & 0.D0, 176.D0, 160.D0, 105.D0, 75.D0, 68.D0, 65.D0,
+ & 50.D0, 50.D0, 43.D0, 42.D0, 40.5D0, 35.D0, 30.D0, 28.D0,
+ & 25.D0, 22.D0, 21.D0, 20.D0, 18.D0, 17.D0, 11*0.D0,
+ & .05D0, .15D0, .18D0, .2D0, .2D0, .3D0, .4D0, .6D0, .7D0,
+ & .85D0, 0.D0, 1.D0, .9D0, .46D0, .3D0, .23D0, .18D0, .16D0,
+ & .14D0, .1D0, .08D0, .05D0, .02D0, .015D0, 4*.011D0, 3*.005D0,
+ & 0.D0, 3.3D0, 3.D0, 1.5D0, 1.D0, .7D0, .4D0, .35D0, .4D0,
+ & .25D0, .18D0, .08D0, .04D0, .03D0, .023D0, .016D0, .014D0,
+ & .01D0, .008D0, .006D0, .005D0 /
+ DATA SPIKPZ/ 0.D0, 215.D0, 193.D0, 170.D0, 148.D0, 113.D0, 97.D0,
+ & 84.D0, 78.D0, 68.D0, 64.D0, 61.D0, 46.D0, 36.D0, 31.3D0, 28.5D0,
+ & 25.7D0, 22.6D0, 21.4D0, 20.7D0, 19.9D0, 9*0.D0, 2.4D0, .2D0,
+ & 20*0.D0, 1.8D0, 2.8D0, 3.6D0, 2.3D0, 1.8D0, 1.5D0, 1.3D0, 1.D0,
+ & .7D0, .5D0, .3D0, 10*0.D0, 1.8D0, 2.8D0, 3.6D0, 2.3D0, 1.8D0,
+ & 1.5D0, 1.3D0, 1.D0, .7D0, .5D0, .3D0, 10*0.D0, 1.8D0, 2.8D0,
+ & 3.6D0, 2.3D0, 1.8D0, 1.5D0, 1.3D0, 1.D0, .7D0, .5D0, .3D0,
+ & 10*0.D0, 1.8D0, 2.8D0, 3.6D0, 2.3D0, 1.8D0, 1.5D0, 1.3D0, 1.D0,
+ & .7D0, .5D0, .3D0, 13*0.D0, 5.2D0, 8.7D0, 11.4D0, 14.D0, 11.9D0,
+ & 7.6D0, 6.D0, 5.D0, 13*0.D0, 5.2D0, 8.7D0, 11.4D0, 14.D0, 11.9D0,
+ & 7.6D0, 6.D0, 5.D0, 18*0.D0, 1.D0, 4.9D0, 8.5D0, 18*0.D0, 1.D0,
+ & 4.9D0, 8.5D0, 15*0.D0, 1.9D0, 2.3D0, 4.D0, 6.5D0, 5.2D0, 3.4D0,
+ & 15*0.D0, 1.9D0, 2.3D0, 4.D0, 6.5D0, 5.2D0, 3.4D0, 15*0.D0, 1.9D0,
+ & 2.3D0, 4.D0, 6.5D0, 5.2D0, 3.4D0 /
+* *
+* *
+**************** an - p - data *
+* *
+ DATA SANPEL/
+ & 0.D0, 176.D0, 160.D0, 105.D0, 75.D0, 68.D0, 65.D0, 50.D0,
+ & 50.D0, 43.D0, 42.D0, 40.5D0, 35.D0, 30.D0, 28.D0,
+ & 25.D0, 22.D0, 21.D0, 20.D0, 18.D0, 17.D0, 11*0.D0, .05D0,
+ & .15D0, .18D0, .2D0, .2D0, .3D0, .4D0, .6D0, .7D0, .85D0,
+ & 0.D0, 1.D0, .9D0, .46D0, .3D0, .23D0, .18D0, .16D0, .14D0,
+ & .1D0, .08D0, .05D0, .02D0, .015D0, 4*.011D0, 3*.005D0,
+ & 0.D0, 3.3D0, 3.D0, 1.5D0, 1.D0, .7D0, .4D0, .35D0, .4D0, .25D0,
+ & .18D0, .08D0, .04D0, .03D0, .023D0, .016D0, .014D0,
+ & .01D0, .008D0, .006D0, .005D0 /
+ DATA SPIKPF/ 0.D0, 215.D0, 193.D0, 170.D0, 148.D0, 113.D0, 97.D0,
+ & 84.D0, 78.D0, 68.D0, 64.D0, 61.D0, 46.D0, 36.D0, 31.3D0, 28.5D0,
+ & 25.7D0, 22.6D0, 21.4D0, 20.7D0, 19.9D0, 9*0.D0, 2.4D0, .2D0,
+ & 20*0.D0, 1.8D0, 2.8D0, 3.6D0, 2.3D0, 1.8D0, 1.5D0, 1.3D0, 1.D0,
+ & .7D0, .5D0, .3D0, 10*0.D0, 1.8D0, 2.8D0, 3.6D0, 2.3D0, 1.8D0,
+ & 1.5D0, 1.3D0, 1.D0, .7D0, .5D0, .3D0, 10*0.D0, 1.8D0, 2.8D0,
+ & 3.6D0, 2.3D0, 1.8D0, 1.5D0, 1.3D0, 1.D0, .7D0, .5D0, .3D0,
+ & 10*0.D0, 1.8D0, 2.8D0, 3.6D0, 2.3D0, 1.8D0, 1.5D0, 1.3D0, 1.D0,
+ & .7D0, .5D0, .3D0, 13*0.D0, 5.2D0, 8.7D0, 11.4D0, 14.D0, 11.9D0,
+ & 7.6D0, 6.D0, 5.D0, 13*0.D0, 5.2D0, 8.7D0, 11.4D0, 14.D0, 11.9D0,
+ & 7.6D0, 6.D0, 5.D0, 18*0.D0, 1.D0, 4.9D0, 8.5D0, 18*0.D0, 1.D0,
+ & 4.9D0, 8.5D0, 15*0.D0, 1.9D0, 2.3D0, 4.D0, 6.5D0, 5.2D0, 3.4D0,
+ & 15*0.D0, 1.9D0, 2.3D0, 4.D0, 6.5D0, 5.2D0, 3.4D0, 15*0.D0, 1.9D0,
+ & 2.3D0, 4.D0, 6.5D0, 5.2D0, 3.4D0 /
+**** ko - n - data *
+ DATA SPKP15/0.D0, 20.D0, 14.D0, 12.D0, 11.5D0, 10.D0, 8.D0, 7.D0,
+ & 6.D0, 5.5D0, 5.3D0, 5.D0, 4.5D0, 4.4D0, 3.8D0, 3.D0, 2.8D0,
+ & 0.D0, .5D0, 1.15D0, 2.D0, 1.3D0, .8D0, .45D0, 10*0.D0,
+ & 3*0.D0, 0.9D0, 2.5D0, 3.D0, 2.5D0, 2.3D0, 2.D0, 1.7D0,
+ & 1.5D0, 1.2D0, .9D0, .6D0, .45D0, .21D0, .2D0,
+ & 3*0.D0, 0.9D0, 2.5D0, 3.D0, 2.5D0, 2.3D0, 2.D0, 1.7D0,
+ & 1.5D0, 1.2D0, .9D0, .6D0, .45D0, .21D0, .2D0,
+ & 4*0.D0, 1.D0, 2.1D0, 2.6D0, 2.3D0, 2.1D0, 1.8D0, 1.7D0,
+ & 1.4D0, 1.2D0, 1.05D0, .9D0, .66D0, .5D0,
+ & 7*0.D0, .3D0, 1.D0, 1.D0, .9D0, .7D0, .4D0, .30D0, .2D0,
+ & 11*0.D0, .1D0, 1.D0, 2.2D0, 3.5D0, 4.20D0, 4.55D0,
+ & 4.85D0, 4.9D0,
+ & 10*0.D0, .2D0, .7D0, 1.6D0, 2.5D0, 2.2D0, 1.71D0, 1.6D0,
+ & 6*0.D0, 1.4D0, 3.8D0, 5.D0, 4.7D0, 4.4D0, 4.D0, 3.5D0,
+ & 2.85D0, 2.35D0, 2.01D0, 1.8D0,
+ & 12*0.D0, .1D0, .8D0, 2.05D0, 3.31D0, 3.5D0,
+ & 12*0.D0, .034D0, .20D0, .75D0, 1.04D0, 1.24D0 /
+**** ako - p - data *
+ DATA SPKP16/ 0.D0, 4.D0, 9.5D0, 20.D0, 13.D0, 9.5D0, 6.D0, 4.4D0,
+ & 3.D0, 2.4D0, 2.D0, 1.4D0, 1.2D0, 1.D0, .9D0, .7D0, .6D0, 0.D0,
+ & 4.5D0, 6.D0, 5.D0, 2.5D0, 2.D0, 1.7D0, 2.1D0, 1.9D0, .9D0, .5D0,
+ & .3D0, .24D0, .2D0, .18D0, .1D0, .09D0, 0.D0, 1.8D0, 2.D0, 1.1D0,
+ & .9D0, .5D0, .5D0, .4D0, .4D0, .2D0, .1D0, .06D0, .05D0, .04D0,
+ & .03D0, .02D0, .02D0, 0.D0, 1.5D0, 2.D0, .9D0, 1.1D0, .4D0, .6D0,
+ & .7D0, .65D0, .3D0, .17D0, .1D0, .08D0, .07D0, .06D0, .04D0,
+ & .03D0, 0.D0, .56D0, 1.29D0, 2.26D0, 1.01D0, .64D0, .37D0,
+ & 14*0.D0, 1.13D0, 2.61D0, 2.91D0, 2.58D0, 2.35D0, 2.02D0, 1.91D0,
+ & 1.57D0, 1.35D0, 1.29D0, 1.01D0, .74D0, .65D0, 3*0.D0, 1.0D0,
+ & 3.03D0, 3.36D0, 2.8D0, 2.58D0, 2.24D0, 1.91D0, 1.68D0, 1.35D0,
+ & 1.01D0, .67D0, .5D0, .24D0, .23D0, 3*0.D0, 1.0D0, 3.03D0, 3.36D0,
+ & 2.8D0, 2.58D0, 2.24D0, 1.91D0, 1.68D0, 1.35D0, 1.01D0, .67D0,
+ & .5D0, .24D0, .23D0, 7*0.D0, .34D0, 1.12D0, 1.12D0, 1.01D0, .78D0,
+ & .45D0, .39D0, .22D0, .07D0, 7*0.D0, 1.71D0, 4.26D0, 5.6D0,5.57D0,
+ & 4.93D0, 4.48D0, 3.92D0, 3.19D0, 2.63D0, 2.25D0, 2.D0, 10*0.D0,
+ & .22D0, .8D0, .75D0, 1.D0, 1.3D0, 1.5D0, 1.3D0, 13*0.D0, .1D0,
+ & .3D0, .7D0, 1.D0, 13*0.D0, .1D0, .3D0, .7D0, 1.D0, 9*0.D0, .11D0,
+ & 1.72D0, 2.69D0, 3.92D0, 4.76D0, 5.10D0, 5.44D0, 5.3D0, 5*0.D0,
+ & 9.2D0, 4.7D0, 1.9D0, 9*0.D0, .0D0,2.5D0,15.D0,
+ & 21.5D0, 15.3D0, 3.D0, 1.5D0, 10*0.D0 /
+ DATA NURELN/9, 12, 5*0, 10, 14, 3*0, 1, 3, 5, 7, 6*0, 2, 6, 16,
+ & 5*0, 10, 13, 5*0, 11, 12, 3*0, 2, 4, 6, 8, 6*0, 3, 15, 7, 5*0 /
+*= end*block.blkdt3 *
+ END
+*
+*===qel_pol============================================================*
+*
+CDECK ID>, DT_QEL_POL
+ SUBROUTINE DT_QEL_POL(ENU,LTYP,P21,P22,P23,P24,P25)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ CALL DT_MASS_INI
+ CALL DT_GEN_QEL(ENU,LTYP,P21,P22,P23,P24,P25)
+
+ RETURN
+ END
+
+C==================================================================
+C Generation of a Quasi-Elastic neutrino scattering
+C==================================================================
+*
+*===gen_qel============================================================*
+*
+CDECK ID>, DT_GEN_QEL
+ SUBROUTINE DT_GEN_QEL(ENU,LTYP,P21,P22,P23,P24,P25)
+
+C...Generate a quasi-elastic neutrino/antineutrino
+C. Interaction on a nuclear target
+C. INPUT : LTYP = neutrino type (1,...,6)
+C. ENU (GeV) = neutrino energy
+C----------------------------------------------------
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER (MAXLND=4000)
+ COMMON/PYJETS/N,NPAD,K(MAXLND,5),P(MAXLND,5),V(MAXLND,5)
+
+* nuclear potential
+ LOGICAL LFERMI
+ COMMON /DTNPOT/ PFERMP(2),PFERMN(2),FERMOD,
+ & EBINDP(2),EBINDN(2),EPOT(2,210),
+ & ETACOU(2),ICOUL,LFERMI
+* steering flags for qel neutrino scattering modules
+ COMMON /QNEUTO/ DSIGSU,DSIGMC,NDSIG,NEUTYP,NEUDEC
+**sr - removed (not needed)
+C COMMON /CBAD/ LBAD, NBAD
+C COMMON /CNUC/ XMN,XMN2,PFERMI,EFERMI,EBIND,EB2,C0
+**
+
+ DIMENSION PI(3),PO(3)
+CJR+
+ DATA ININU/0/
+CJR-
+C REAL*8 DBETA(3)
+C REAL*8 MN(2), ML0(6), ML, ML2, MI, MI2, MF, MF2
+ DIMENSION DBETA(3),DBETB(3),AMN(2),AML0(6)
+ DATA AMN /0.93827231D0, 0.93956563D0/
+ DATA AML0 /2*0.51100D-03,2*0.105659D0, 2*1.777D0/
+ DATA INIPRI/0/
+
+C DATA PFERMI/0.22D0/
+CGB+...Binding Energy
+ DATA EBIND/0.008D0/
+CGB-...
+
+ ININU=ININU+1
+ IF(ININU.EQ.1)NDSIG=0
+ LBAD = 0
+ enu0=enu
+c write(*,*) enu0
+C...Lepton mass
+ AML = AML0(LTYP) ! massa leptoni
+ AML2 = AML**2 ! massa leptoni **2
+C...Particle labels (LUND)
+ N = 5
+ K(1,1) = 21
+ K(2,1) = 21
+ K(3,1) = 21
+ K(3,3) = 1
+ K(4,1) = 1
+ K(4,3) = 1
+ K(5,1) = 1
+ K(5,3) = 2
+ K0 = (LTYP-1)/2 ! 2
+ K1 = LTYP/2 ! 2
+ KA = 12 + 2*K0 ! 16
+ IS = -1 + 2*LTYP - 4*K1 ! -1 +10 -8 = 1
+ K(1,2) = IS*KA
+ K(4,2) = IS*(KA-1)
+ K(3,2) = IS*24
+ LNU = 2 - LTYP + 2*K1 ! 2 - 5 + 2 = - 1
+ IF (LNU .EQ. 2) THEN
+ K(2,2) = 2212
+ K(5,2) = 2112
+ AMI = AMN(1)
+ AMF = AMN(2)
+CJR+
+ PFERMI=PFERMN(2)
+CJR-
+ ELSE
+ K(2,2) = 2112
+ K(5,2) = 2212
+ AMI = AMN(2)
+ AMF = AMN(1)
+CJR+
+ PFERMI=PFERMP(2)
+CJR-
+ ENDIF
+ AMI2 = AMI**2
+ AMF2 = AMF**2
+
+ DO IGB=1,5
+ P(3,IGB) = 0.
+ P(4,IGB) = 0.
+ P(5,IGB) = 0.
+ END DO
+
+ NTRY = 0
+CGB+...
+ EFMAX = SQRT(PFERMI**2 + AMI2) -AMI ! max. Fermi Energy
+ ENWELL = EFMAX + EBIND ! depth of nuclear potential well
+CGB-...
+
+ 100 CONTINUE
+
+C...4-momentum initial lepton
+ P(1,5) = 0. ! massa
+ P(1,4) = ENU0 ! energia
+ P(1,1) = 0. ! px
+ P(1,2) = 0. ! py
+ P(1,3) = ENU0 ! pz
+
+C PF = PFERMI*PYR(0)**(1./3.)
+c write(23,*) PYR(0)
+c write(*,*) 'Pfermi=',PF
+c PF = 0.
+ NTRY=NTRY+1
+C IF(ntry.GT.2) WRITE(*,*) ntry,enu0,k2
+ IF (NTRY .GT. 500) THEN
+ LBAD = 1
+ WRITE (LOUT,1001) NBAD, ENU
+ RETURN
+ ENDIF
+C CT = -1. + 2.*PYR(0)
+c CT = -1.
+C ST = SQRT(1.-CT*CT)
+C F = 2.*3.1415926*PYR(0)
+c F = 0.
+
+C P(2,4) = SQRT(PF*PF + MI2) - EBIND ! energia
+C P(2,1) = PF*ST*COS(F) ! px
+C P(2,2) = PF*ST*SIN(F) ! py
+C P(2,3) = PF*CT ! pz
+C P(2,5) = SQRT(P(2,4)**2-PF*PF) ! massa
+ P(2,1) = P21
+ P(2,2) = P22
+ P(2,3) = P23
+ P(2,4) = P24
+ P(2,5) = P25
+ beta1=-p(2,1)/p(2,4)
+ beta2=-p(2,2)/p(2,4)
+ beta3=-p(2,3)/p(2,4)
+ N=2
+C WRITE(6,*)' before transforming into target rest frame'
+
+ CALL PYROBO(0,0,0.0D0,0.0D0,BETA1,BETA2,BETA3)
+
+C print*,' nucl. rest fram ( fermi incl.) prima della rotazione'
+ N=5
+
+ phi11=atan(p(1,2)/p(1,3))
+ pi(1)=p(1,1)
+ pi(2)=p(1,2)
+ pi(3)=p(1,3)
+
+ CALL DT_TESTROT(PI,Po,PHI11,1)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+c WRITE(*,*) po
+ p(1,1)=po(1)
+ p(1,2)=po(2)
+ p(1,3)=po(3)
+ phi12=atan(p(1,1)/p(1,3))
+
+ pi(1)=p(1,1)
+ pi(2)=p(1,2)
+ pi(3)=p(1,3)
+ CALL DT_TESTROT(Pi,Po,PHI12,2)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+c WRITE(*,*) po
+ p(1,1)=po(1)
+ p(1,2)=po(2)
+ p(1,3)=po(3)
+
+ enu=p(1,4)
+
+C...Kinematical limits in Q**2
+c S = P(2,5)**2 + 2.*ENU*(P(2,4)-P(2,3)) ! ????
+ S = P(2,5)**2 + 2.*ENU*P(2,5)
+ SQS = SQRT(S) ! E centro massa
+ IF (SQS .LT. (AML + AMF + 3.E-03)) GOTO 100
+ ELF = (S-AMF2+AML2)/(2.*SQS) ! energia leptone finale p
+ PSTAR = (S-P(2,5)**2)/(2.*SQS) ! p* neutrino nel c.m.
+ PLF = SQRT(ELF**2-AML2) ! 3-momento leptone finale
+ Q2MIN = -AML2 + 2.*PSTAR*(ELF-PLF) ! + o -
+ Q2MAX = -AML2 + 2.*PSTAR*(ELF+PLF) ! according con cos(theta)
+ IF (Q2MIN .LT. 0.) Q2MIN = 0. ! ??? non fisico
+
+C...Generate Q**2
+ DSIGMAX = DT_DSQEL_Q2 (LTYP,ENU, Q2MIN)
+ 200 Q2 = Q2MIN + (Q2MAX-Q2MIN)*PYR(0)
+ DSIG = DT_DSQEL_Q2 (LTYP,ENU, Q2)
+ IF (DSIG .LT. DSIGMAX*PYR(0)) GOTO 200
+ CALL DT_QGAUS(Q2MIN,Q2MAX,DSIGEV,ENU,LTYP)
+ NDSIG=NDSIG+1
+C WRITE(6,*)' Q2,Q2min,Q2MAX,DSIGEV',
+C &Q2,Q2min,Q2MAX,DSIGEV
+
+C...c.m. frame. Neutrino along z axis
+ DETOT = (P(1,4)) + (P(2,4)) ! e totale
+ DBETA(1) = ((P(1,1)) + (P(2,1)))/DETOT ! px1+px2/etot = beta_x
+ DBETA(2) = ((P(1,2)) + (P(2,2)))/DETOT !
+ DBETA(3) = ((P(1,3)) + (P(2,3)))/DETOT !
+c WRITE(*,*)
+c WRITE(*,*)
+C WRITE(*,*) 'Input values laboratory frame'
+ N=2
+
+ CALL PYROBO(0,0,0.0D0,0.0D0,-DBETA(1),-DBETA(2),-DBETA(3))
+
+ N=5
+c STHETA = ULANGL(P(1,3),P(1,1))
+c write(*,*) 'stheta' ,stheta
+c stheta=0.
+c CALL PYROBO (0,0,-STHETA,0.,0.D0,0.D0,0.D0)
+c WRITE(*,*)
+c WRITE(*,*)
+C WRITE(*,*) 'Output values cm frame'
+C...Kinematic in c.m. frame
+ CTSTAR = ELF/PLF - (Q2 + AML2)/(2.*PSTAR*PLF) ! cos(theta) cm
+ STSTAR = SQRT(1.-CTSTAR**2)
+ PHI = 6.28319*PYR(0) ! random phi tra 0 e 2*pi
+ P(4,5) = AML ! massa leptone
+ P(4,4) = ELF ! e leptone
+ P(4,3) = PLF*CTSTAR ! px
+ P(4,1) = PLF*STSTAR*COS(PHI) ! py
+ P(4,2) = PLF*STSTAR*SIN(PHI) ! pz
+
+ P(5,5) = AMF ! barione
+ P(5,4) = (S+AMF2-AML2)/(2.*SQS)! e barione
+ P(5,3) = -P(4,3) ! px
+ P(5,1) = -P(4,1) ! py
+ P(5,2) = -P(4,2) ! pz
+
+ P(3,5) = -Q2
+ P(3,1) = P(1,1)-P(4,1)
+ P(3,2) = P(1,2)-P(4,2)
+ P(3,3) = P(1,3)-P(4,3)
+ P(3,4) = P(1,4)-P(4,4)
+
+C...Transform back to laboratory frame
+C WRITE(*,*) 'before going back to nucl rest frame'
+c CALL PYROBO (0,0,STHETA,0.,0.D0,0.D0,0.D0)
+ N=5
+
+ CALL PYROBO(0,0,0.0D0,0.0D0,DBETA(1),DBETA(2),DBETA(3))
+
+C WRITE(*,*) 'Now back in nucl rest frame'
+ IF(LTYP.GE.3) CALL DT_PREPOLA(Q2,LTYP,ENU)
+
+c********************************************
+
+ DO kw=1,5
+ pi(1)=p(kw,1)
+ pi(2)=p(kw,2)
+ pi(3)=p(kw,3)
+ CALL DT_TESTROT(Pi,Po,PHI12,3)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+ p(kw,1)=po(1)
+ p(kw,2)=po(2)
+ p(kw,3)=po(3)
+ END DO
+c********************************************
+
+ DO kw=1,5
+ pi(1)=p(kw,1)
+ pi(2)=p(kw,2)
+ pi(3)=p(kw,3)
+ CALL DT_TESTROT(Pi,Po,PHI11,4)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+ p(kw,1)=po(1)
+ p(kw,2)=po(2)
+ p(kw,3)=po(3)
+ END DO
+
+c********************************************
+
+C WRITE(*,*) 'Now back in lab frame'
+
+ CALL PYROBO(1,5,0.0D0,0.0D0,-BETA1,-BETA2,-BETA3)
+
+CGB+...
+C...test (on final momentum of nucleon) if Fermi-blocking
+C...is operating
+ ENUCL = SQRT(P(5,1)**2 + P(5,2)**2 + P(5,3)**2 + P(5,5)**2)
+ & - P(5,5)
+ IF (ENUCL.LT. EFMAX) THEN
+ IF(INIPRI.LT.10)THEN
+ INIPRI=INIPRI+1
+C WRITE(6,*)' qel: Pauli ENUCL.LT.EFMAX ', ENUCL,EFMAX
+C...the interaction is not possible due to Pauli-Blocking and
+C...it must be resampled
+ ENDIF
+ GOTO 100
+ ELSE IF (ENUCL.LT.ENWELL.and.ENUCL.GE.EFMAX) THEN
+ IF(INIPRI.LT.10)THEN
+ INIPRI=INIPRI+1
+C WRITE(6,*)' qel: inside ENUCL.LT.ENWELL ', ENUCL,ENWELL
+ ENDIF
+C Reject (J:R) here all these events
+C are otherwise rejected in dpmjet
+ GOTO 100
+C...the interaction is possible, but the nucleon remains inside
+C...the nucleus. The nucleus is therefore left excited.
+C...We treat this case as a nucleon with 0 kinetic energy.
+C P(5,5) = AMF
+C P(5,4) = AMF
+C P(5,1) = 0.
+C P(5,2) = 0.
+C P(5,3) = 0.
+ ELSE IF (ENUCL.GE.ENWELL) THEN
+C WRITE(6,*)' qel ENUCL.GE.ENWELL ',ENUCL,ENWELL
+C...the interaction is possible, the nucleon can exit the nucleus
+C...but the nuclear well depth must be subtracted. The nucleus could be
+C...left in an excited state.
+ Pstart = SQRT(P(5,1)**2 + P(5,2)**2 + P(5,3)**2)
+C P(5,4) = ENUCL-ENWELL + AMF
+ Pnucl = SQRT(P(5,4)**2-AMF**2)
+C...The 3-momentum is scaled assuming that the direction remains
+C...unaffected
+ P(5,1) = P(5,1) * Pnucl/Pstart
+ P(5,2) = P(5,2) * Pnucl/Pstart
+ P(5,3) = P(5,3) * Pnucl/Pstart
+C WRITE(6,*)' qel new P(5,4) ',P(5,4)
+ ENDIF
+CGB-...
+ DSIGSU=DSIGSU+DSIGEV
+
+ GA=P(4,4)/P(4,5)
+ BGX=P(4,1)/P(4,5)
+ BGY=P(4,2)/P(4,5)
+ BGZ=P(4,3)/P(4,5)
+*
+ DBETB(1)=BGX/GA
+ DBETB(2)=BGY/GA
+ DBETB(3)=BGZ/GA
+ IF(NEUDEC.EQ.1.OR.NEUDEC.EQ.2) THEN
+
+ CALL PYROBO(6,8,0.0D0,0.0D0,DBETB(1),DBETB(2),DBETB(3))
+
+ ENDIF
+c
+C PRINT*,' FINE EVENTO '
+ enu=enu0
+ RETURN
+
+ 1001 FORMAT(2X, 'DT_GEN_QEL : event rejected ', I5, G10.3)
+ END
+
+C====================================================================
+C. Masses
+C====================================================================
+
+*
+*===mass_ini===========================================================*
+*
+CDECK ID>, DT_MASS_INI
+ SUBROUTINE DT_MASS_INI
+C...Initialize the kinematics for the quasi-elastic cross section
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* particle masses used in qel neutrino scattering modules
+ COMMON /QNMASS/ EML(6),EMLSQ(6),EMN1(6),EMN2(6),ETQE(6),
+ & EMN1SQ(6),EMN2SQ(6),EMPROT,EMNEUT,EMN,
+ & EMPROTSQ,EMNEUTSQ,EMNSQ
+
+ EML(1) = 0.51100D-03 ! e-
+ EML(2) = EML(1) ! e+
+ EML(3) = 0.105659D0 ! mu-
+ EML(4) = EML(3) ! mu+
+ EML(5) = 1.7777D0 ! tau-
+ EML(6) = EML(5) ! tau+
+ EMPROT = 0.93827231D0 ! p
+ EMNEUT = 0.93956563D0 ! n
+ EMPROTSQ = EMPROT**2
+ EMNEUTSQ = EMNEUT**2
+ EMN = (EMPROT + EMNEUT)/2.
+ EMNSQ = EMN**2
+ DO J=1,3
+ J0 = 2*(J-1)
+ EMN1(J0+1) = EMNEUT
+ EMN1(J0+2) = EMPROT
+ EMN2(J0+1) = EMPROT
+ EMN2(J0+2) = EMNEUT
+ ENDDO
+ DO J=1,6
+ EMLSQ(J) = EML(J)**2
+ ETQE(J) = ((EMN2(J)+ EML(J))**2-EMN1(J)**2)/(2.*EMN1(J))
+ ENDDO
+ RETURN
+ END
+*
+*===dsqel_q2===========================================================*
+*
+CDECK ID>, DT_DSQEL_Q2
+ DOUBLE PRECISION FUNCTION DT_DSQEL_Q2 (JTYP,ENU, Q2)
+
+C...differential cross section for Quasi-Elastic scattering
+C. nu + N -> l + N'
+C. From Llewellin Smith Phys.Rep. 3C, 261, (1971).
+C.
+C. INPUT : JTYP = 1,...,6 nu_e, ...., nubar_tau
+C. ENU (GeV) = Neutrino energy
+C. Q2 (GeV**2) = (Transfer momentum)**2
+C.
+C. OUTPUT : DSQEL_Q2 = differential cross section :
+C. dsigma/dq**2 (10**-38 cm+2/GeV**2)
+C------------------------------------------------------------------
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* particle masses used in qel neutrino scattering modules
+ COMMON /QNMASS/ EML(6),EMLSQ(6),EMN1(6),EMN2(6),ETQE(6),
+ & EMN1SQ(6),EMN2SQ(6),EMPROT,EMNEUT,EMN,
+ & EMPROTSQ,EMNEUTSQ,EMNSQ
+**sr - removed (not needed)
+C COMMON /CAXIAL/ FA0, AXIAL2
+**
+
+ DIMENSION SS(6)
+ DATA C0 /0.17590D0 / ! G_F**2 cos(theta_c)**2 M**2 /(8 pi) 10**-38 cm+2
+ DATA SS /1.D0, -1.D0, 1.D0, -1.D0, 1.D0, -1.D0/
+ DATA AXIAL2 /1.03D0/ ! to be checked
+
+ FA0=-1.253D0
+ CSI = 3.71D0 ! ???
+ GVE = 1.D0/ (1.D0 + Q2/0.84D0**2)**2 ! G_e(q**2)
+ GVM = (1.D0+CSI)*GVE ! G_m (q**2)
+ X = Q2/(EMN*EMN) ! emn=massa barione
+ XA = X/4.D0
+ FV1 = 1.D0/(1.D0+XA)*(GVE+XA*GVM)
+ FV2 = 1.D0/(1.D0+XA)*(GVM-GVE)
+ FA = FA0/(1.D0 + Q2/AXIAL2)**2
+ FFA = FA*FA
+ FFV1 = FV1*FV1
+ FFV2 = FV2*FV2
+ RM = EMLSQ(JTYP)/(EMN*EMN) ! emlsq(jtyp)
+ A1 = (4.D0+X)*FFA - (4.D0-X)*FFV1 + X*FFV2*(1.D0-XA)+4*X*FV1*FV2
+ A2 = -RM * ((FV1 + FV2)**2 + FFA)
+ AA = (XA+0.25D0*RM)*(A1 + A2)
+ BB = -X*FA*(FV1 + FV2)
+ CC = 0.25D0*(FFA + FFV1 + XA*FFV2)
+ SU = (4.D0*ENU*EMN - Q2 - EMLSQ(JTYP))/(EMN*EMN)
+ DT_DSQEL_Q2 = C0*(AA + SS(JTYP)*BB*SU + CC*SU*SU) / (ENU*ENU) !
+ IF(DT_DSQEL_Q2 .LT. 0.D0) DT_DSQEL_Q2 = 0.D0
+
+ RETURN
+ END
+*
+*===prepola============================================================*
+*
+CDECK ID>, DT_PREPOLA
+ SUBROUTINE DT_PREPOLA(Q2,JTYP,ENU)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+c
+c By G. Battistoni and E. Scapparone (sept. 1997)
+c According to:
+c Albright & Jarlskog, Nucl Phys B84 (1975) 467
+c
+c
+
+ PARAMETER (MAXLND=4000)
+ COMMON/PYJETS/N,NPAD,K(MAXLND,5),P(MAXLND,5),V(MAXLND,5)
+
+ COMMON /QNPOL/ POLARX(4),PMODUL
+* particle masses used in qel neutrino scattering modules
+ COMMON /QNMASS/ EML(6),EMLSQ(6),EMN1(6),EMN2(6),ETQE(6),
+ & EMN1SQ(6),EMN2SQ(6),EMPROT,EMNEUT,EMN,
+ & EMPROTSQ,EMNEUTSQ,EMNSQ
+* steering flags for qel neutrino scattering modules
+ COMMON /QNEUTO/ DSIGSU,DSIGMC,NDSIG,NEUTYP,NEUDEC
+**sr - removed (not needed)
+C COMMON /CAXIAL/ FA0, AXIAL2
+C COMMON /TAUTAU/Q(4,5),ETL,PXL,PYL,PZL,
+C & ETB,PXB,PYB,PZB,ETN,PXN,PYN,PZN
+**
+ REAL*8 POL(4,4),BB2(3)
+ DIMENSION SS(6)
+C DATA C0 /0.17590D0 / ! G_F**2 cos(theta_c)**2 M**2 /(8 pi) 10**-38 cm+2
+ DATA SS /1.D0, -1.D0, 1.D0, -1.D0, 1.D0, -1.D0/
+**sr uncommented since common block CAXIAL is now commented
+ DATA AXIAL2 /1.03D0/ ! to be checked
+**
+
+ RML=P(4,5)
+ RMM=0.93960D+00
+ FM2 = RMM**2
+ MPI = 0.135D+00
+ OLDQ2=Q2
+ FA0=-1.253D+00
+ CSI = 3.71D+00 !
+ GVE = 1.D0/ (1.D0 + Q2/(0.84D+00)**2)**2 ! G_e(q**2)
+ GVM = (1.D0+CSI)*GVE ! G_m (q**2)
+ X = Q2/(EMN*EMN) ! emn=massa barione
+ XA = X/4.D0
+ FV1 = 1.D0/(1.D0+XA)*(GVE+XA*GVM)
+ FV2 = 1.D0/(1.D0+XA)*(GVM-GVE)
+ FA = FA0/(1.D0 + Q2/AXIAL2**2)**2
+ FFA = FA*FA
+ FFV1 = FV1*FV1
+ FFV2 = FV2*FV2
+ FP=2.D0*FA*RMM/(MPI**2 + Q2)
+ RM = EMLSQ(JTYP)/(EMN*EMN) ! emlsq(jtyp)
+ A1 = (4.D0+X)*FFA-(4.D0-X)*FFV1+X*FFV2*(1.D0-XA)+4.D0*X*FV1*FV2
+ A2 = -RM * ((FV1 + FV2)**2 + FFA)
+ AA = (XA+0.25D+00*RM)*(A1 + A2)
+ BB = -X*FA*(FV1 + FV2)
+ CC = 0.25D+00*(FFA + FFV1 + XA*FFV2)
+ SU = (4.D+00*ENU*EMN - Q2 - EMLSQ(JTYP))/(EMN*EMN)
+
+ OMEGA1=FFA+XA*(FFA+(FV1+FV2)**2 ) ! articolo di ll...-smith
+ OMEGA2=4.D+00*CC
+ OMEGA3=2.D+00*FA*(FV1+FV2)
+ OMEGA4P=(-(FV1+FV2)**2-(FA+2*FP)**2+(4.0D+00+
+ 1 (Q2/FM2))*FP**2)
+ OMEGA5=OMEGA2
+ OMEGA4=(OMEGA4P-OMEGA2+2*OMEGA5)/4.D+00
+ WW1=2.D+00*OMEGA1*EMN**2
+ WW2=2.D+00*OMEGA2*EMN**2
+ WW3=2.D+00*OMEGA3*EMN**2
+ WW4=2.D+00*OMEGA4*EMN**2
+ WW5=2.D+00*OMEGA5*EMN**2
+
+ DO I=1,3
+ BB2(I)=-P(4,I)/P(4,4)
+ END DO
+c WRITE(*,*)
+c WRITE(*,*)
+c WRITE(*,*) 'Prepola: ready to transform to lepton rest frame'
+ N=5
+
+ CALL PYROBO(0,0,0.0D0,0.0D0,BB2(1),BB2(2),BB2(3))
+
+* NOW PARTICLES ARE IN THE SCATTERED LEPTON REST FRAME
+c WRITE(*,*)
+c WRITE(*,*)
+c WRITE(*,*) 'Prepola: now in lepton rest frame'
+ EE=ENU
+ QM2=Q2+RML**2
+ U=Q2/(2.*RMM)
+ FRAC=QM2*WW1 + (2.D+00*EE*(EE-U) - 0.5D+00*QM2)*WW2 - SS(JTYP)*
+ + (0.5D+00/(RMM**2))*(2.D+00*RMM*EE*Q2 - U*QM2)*WW3 +
+ + ((RML**2)/(2.D+00*FM2))*(QM2*WW4-2.D+00*RMM*EE*WW5) !<=FM2 inv di RMM!!
+
+ FACTK=2.D+00*WW1 -WW2 -SS(JTYP)*(EE/RMM)*WW3 +((EE-U)/RMM)*WW5
+ + - ((RML**2)/FM2)*WW4 !<=FM2 inv di RMM!!
+
+ FACTP=2.D+00*EE/RMM*WW2 - (QM2/(2.D+00*RMM**2))*(SS(JTYP)*WW3+WW5)
+
+ DO I=1,3
+ POL(4,I)=RML*SS(JTYP)*(FACTK*P(1,I)+FACTP*P(2,I))/FRAC
+ POLARX(I)=POL(4,I)
+ END DO
+
+ PMODUL=0.D0
+ DO I=1,3
+ PMODUL=PMODUL+POL(4,I)**2
+ END DO
+
+ IF(JTYP.GT.4.AND.NEUDEC.GT.0) THEN
+ IF(NEUDEC.EQ.1) THEN
+ CALL DT_LEPDCYP(EML(JTYP),EML(JTYP-2),POLARX(3),
+ + ETL,PXL,PYL,PZL,
+ + ETB,PXB,PYB,PZB,ETN,PXN,PYN,PZN)
+c
+c Tau has decayed in muon
+c
+ ENDIF
+ IF(NEUDEC.EQ.2) THEN
+ CALL DT_LEPDCYP(EML(JTYP),EML(JTYP-4),POLARX(3),
+ + ETL,PXL,PYL,PZL,
+ + ETB,PXB,PYB,PZB,ETN,PXN,PYN,PZN)
+c
+c Tau has decayed in electron
+c
+ ENDIF
+ K(4,1)=15
+ K(4,4) = 6
+ K(4,5) = 8
+ N=N+3
+c
+c fill common for muon(electron)
+c
+ P(6,1)=PXL
+ P(6,2)=PYL
+ P(6,3)=PZL
+ P(6,4)=ETL
+ K(6,1)=1
+ IF(JTYP.EQ.5) THEN
+ IF(NEUDEC.EQ.1) THEN
+ P(6,5)=EML(JTYP-2)
+ K(6,2)=13
+ ELSEIF(NEUDEC.EQ.2) THEN
+ P(6,5)=EML(JTYP-4)
+ K(6,2)=11
+ ENDIF
+ ELSEIF(JTYP.EQ.6) THEN
+ IF(NEUDEC.EQ.1) THEN
+ K(6,2)=-13
+ ELSEIF(NEUDEC.EQ.2) THEN
+ K(6,2)=-11
+ ENDIF
+ END IF
+ K(6,3)=4
+ K(6,4)=0
+ K(6,5)=0
+c
+c fill common for tau_(anti)neutrino
+c
+ P(7,1)=PXB
+ P(7,2)=PYB
+ P(7,3)=PZB
+ P(7,4)=ETB
+ P(7,5)=0.
+ K(7,1)=1
+ IF(JTYP.EQ.5) THEN
+ K(7,2)=16
+ ELSEIF(JTYP.EQ.6) THEN
+ K(7,2)=-16
+ END IF
+ K(7,3)=4
+ K(7,4)=0
+ K(7,5)=0
+c
+c Fill common for muon(electron)_(anti)neutrino
+c
+ P(8,1)=PXN
+ P(8,2)=PYN
+ P(8,3)=PZN
+ P(8,4)=ETN
+ P(8,5)=0.
+ K(8,1)=1
+ IF(JTYP.EQ.5) THEN
+ IF(NEUDEC.EQ.1) THEN
+ K(8,2)=-14
+ ELSEIF(NEUDEC.EQ.2) THEN
+ K(8,2)=-12
+ ENDIF
+ ELSEIF(JTYP.EQ.6) THEN
+ IF(NEUDEC.EQ.1) THEN
+ K(8,2)=14
+ ELSEIF(NEUDEC.EQ.2) THEN
+ K(8,2)=12
+ ENDIF
+ END IF
+ K(8,3)=4
+ K(8,4)=0
+ K(8,5)=0
+ ENDIF
+c WRITE(*,*)
+c WRITE(*,*)
+
+c IF(PMODUL.GE.1.D+00) THEN
+c WRITE(*,*) 'Pol',(POLARX(I),I=1,3)
+c write(*,*) pmodul
+c DO I=1,3
+c POL(4,I)=POL(4,I)/PMODUL
+c POLARX(I)=POL(4,I)
+c END DO
+c PMODUL=0.
+c DO I=1,3
+c PMODUL=PMODUL+POL(4,I)**2
+c END DO
+c WRITE(*,*) 'Pol',(POLARX(I),I=1,3)
+c
+c ENDIF
+
+c WRITE(*,*) 'PMODUL = ',PMODUL
+
+c WRITE(*,*)
+c WRITE(*,*)
+c WRITE(*,*) 'prepola: Now back to nucl rest frame'
+
+ CALL PYROBO(1,5,0.0D0,0.0D0,-BB2(1),-BB2(2),-BB2(3))
+
+ XDC = V(4,1)+V(4,5)*P(4,1)/P(4,5)
+ YDC = V(4,2)+V(4,5)*P(4,2)/P(4,5)
+ ZDC = V(4,3)+V(4,5)*P(4,3)/P(4,5)
+ DO NDC =6,8
+ V(NDC,1) = XDC
+ V(NDC,2) = YDC
+ V(NDC,3) = ZDC
+ END DO
+
+ RETURN
+ END
+*
+*===testrot============================================================*
+*
+CDECK ID>, DT_TESTROT
+ SUBROUTINE DT_TESTROT(PI,PO,PHI,MODE)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION ROT(3,3),PI(3),PO(3)
+
+ IF (MODE.EQ.1) THEN
+ ROT(1,1) = 1.D0
+ ROT(1,2) = 0.D0
+ ROT(1,3) = 0.D0
+ ROT(2,1) = 0.D0
+ ROT(2,2) = COS(PHI)
+ ROT(2,3) = -SIN(PHI)
+ ROT(3,1) = 0.D0
+ ROT(3,2) = SIN(PHI)
+ ROT(3,3) = COS(PHI)
+ ELSEIF (MODE.EQ.2) THEN
+ ROT(1,1) = 0.D0
+ ROT(1,2) = 1.D0
+ ROT(1,3) = 0.D0
+ ROT(2,1) = COS(PHI)
+ ROT(2,2) = 0.D0
+ ROT(2,3) = -SIN(PHI)
+ ROT(3,1) = SIN(PHI)
+ ROT(3,2) = 0.D0
+ ROT(3,3) = COS(PHI)
+ ELSEIF (MODE.EQ.3) THEN
+ ROT(1,1) = 0.D0
+ ROT(2,1) = 1.D0
+ ROT(3,1) = 0.D0
+ ROT(1,2) = COS(PHI)
+ ROT(2,2) = 0.D0
+ ROT(3,2) = -SIN(PHI)
+ ROT(1,3) = SIN(PHI)
+ ROT(2,3) = 0.D0
+ ROT(3,3) = COS(PHI)
+ ELSEIF (MODE.EQ.4) THEN
+ ROT(1,1) = 1.D0
+ ROT(2,1) = 0.D0
+ ROT(3,1) = 0.D0
+ ROT(1,2) = 0.D0
+ ROT(2,2) = COS(PHI)
+ ROT(3,2) = -SIN(PHI)
+ ROT(1,3) = 0.D0
+ ROT(2,3) = SIN(PHI)
+ ROT(3,3) = COS(PHI)
+ ELSE
+ STOP ' TESTROT: mode not supported!'
+ ENDIF
+ DO 1 J=1,3
+ PO(J) = ROT(J,1)*PI(1)+ROT(J,2)*PI(2)+ROT(J,3)*PI(3)
+ 1 CONTINUE
+
+ RETURN
+ END
+*
+*===lepdcyp============================================================*
+*
+CDECK ID>, DT_LEPDCYP
+ SUBROUTINE DT_LEPDCYP(AMA,AML,POL,ETL,PXL,PYL,PZL,
+ & ETB,PXB,PYB,PZB,ETN,PXN,PYN,PZN)
+C
+C-----------------------------------------------------------------
+C
+C Author :- G. Battistoni 10-NOV-1995
+C
+C=================================================================
+C
+C Purpose : performs decay of polarized lepton in
+C its rest frame: a => b + l + anti-nu
+C (Example: mu- => nu-mu + e- + anti-nu-e)
+C Polarization is assumed along Z-axis
+C WARNING:
+C 1) b AND anti-nu ARE ASSUMED TO BE NEUTRINOS
+C OF NEGLIGIBLE MASS
+C 2) RADIATIVE CORRECTIONS ARE NOT CONSIDERED
+C IN THIS VERSION
+C
+C Method : modifies phase space distribution obtained
+C by routine EXPLOD using a rejection against the
+C matrix element for unpolarized lepton decay
+C
+C Inputs : Mass of a : AMA
+C Mass of l : AML
+C Polar. of a: POL
+C (Example: fully polar. mu- decay: AMA=AMMUON, AML=AMELCT,
+C POL = -1)
+C
+C Outputs : kinematic variables in the rest frame of decaying lepton
+C ETL,PXL,PYL,PZL 4-moment of l
+C ETB,PXB,PYB,PZB 4-moment of b
+C ETN,PXN,PYN,PZN 4-moment of anti-nu
+C
+C============================================================
+C +
+C Declarations.
+C -
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+ PARAMETER ( KALGNM = 2 )
+ PARAMETER ( ANGLGB = 5.0D-16 )
+ PARAMETER ( ANGLSQ = 2.5D-31 )
+ PARAMETER ( AXCSSV = 0.2D+16 )
+ PARAMETER ( ANDRFL = 1.0D-38 )
+ PARAMETER ( AVRFLW = 1.0D+38 )
+ PARAMETER ( AINFNT = 1.0D+30 )
+ PARAMETER ( AZRZRZ = 1.0D-30 )
+ PARAMETER ( EINFNT = +69.07755278982137 D+00 )
+ PARAMETER ( EZRZRZ = -69.07755278982137 D+00 )
+ PARAMETER ( ONEMNS = 0.999999999999999 D+00 )
+ PARAMETER ( ONEPLS = 1.000000000000001 D+00 )
+ PARAMETER ( CSNNRM = 2.0D-15 )
+ PARAMETER ( DMXTRN = 1.0D+08 )
+ PARAMETER ( ZERZER = 0.D+00 )
+ PARAMETER ( ONEONE = 1.D+00 )
+ PARAMETER ( TWOTWO = 2.D+00 )
+ PARAMETER ( THRTHR = 3.D+00 )
+ PARAMETER ( FOUFOU = 4.D+00 )
+ PARAMETER ( FIVFIV = 5.D+00 )
+ PARAMETER ( SIXSIX = 6.D+00 )
+ PARAMETER ( SEVSEV = 7.D+00 )
+ PARAMETER ( EIGEIG = 8.D+00 )
+ PARAMETER ( ANINEN = 9.D+00 )
+ PARAMETER ( TENTEN = 10.D+00 )
+ PARAMETER ( HLFHLF = 0.5D+00 )
+ PARAMETER ( ONETHI = ONEONE / THRTHR )
+ PARAMETER ( TWOTHI = TWOTWO / THRTHR )
+ PARAMETER ( PIPIPI = 3.1415926535897932270 D+00 )
+ PARAMETER ( ENEPER = 2.7182818284590452354 D+00 )
+ PARAMETER ( SQRENT = 1.6487212707001281468 D+00 )
+ PARAMETER ( CLIGHT = 2.99792458 D+10 )
+ PARAMETER ( AVOGAD = 6.0221367 D+23 )
+ PARAMETER ( AMELGR = 9.1093897 D-28 )
+ PARAMETER ( PLCKBR = 1.05457266 D-27 )
+ PARAMETER ( ELCCGS = 4.8032068 D-10 )
+ PARAMETER ( ELCMKS = 1.60217733 D-19 )
+ PARAMETER ( AMUGRM = 1.6605402 D-24 )
+ PARAMETER ( AMMUMU = 0.113428913 D+00 )
+ PARAMETER ( ALPFSC = 7.2973530791728595 D-03 )
+ PARAMETER ( FSCTO2 = 5.3251361962113614 D-05 )
+ PARAMETER ( FSCTO3 = 3.8859399018437826 D-07 )
+ PARAMETER ( FSCTO4 = 2.8357075508200407 D-09 )
+ PARAMETER ( PLABRC = 0.197327053 D+00 )
+ PARAMETER ( AMELCT = 0.51099906 D-03 )
+ PARAMETER ( AMUGEV = 0.93149432 D+00 )
+ PARAMETER ( AMMUON = 0.105658389 D+00 )
+ PARAMETER ( RCLSEL = 2.8179409183694872 D-13 )
+ PARAMETER ( GEVMEV = 1.0 D+03 )
+ PARAMETER ( EMVGEV = 1.0 D-03 )
+ PARAMETER ( ALGVMV = 6.90775527898214 D+00 )
+ PARAMETER ( RADDEG = 180.D+00 / PIPIPI )
+ PARAMETER ( DEGRAD = PIPIPI / 180.D+00 )
+C +
+C variables for EXPLOD
+C -
+ PARAMETER ( KPMX = 10 )
+ DIMENSION AMEXPL (KPMX), PXEXPL (KPMX), PYEXPL (KPMX),
+ & PZEXPL (KPMX), ETEXPL (KPMX)
+C +
+C test variables
+C -
+**sr - removed (not needed)
+C COMMON /GBATNU/ ELERAT,NTRY
+**
+C +
+C Initializes test variables
+C -
+ NTRY = 0
+ ELERAT = 0.D+00
+C +
+C Maximum value for matrix element
+C -
+ ELEMAX = ( AMA**2 + AML**2 )**2 / AMA**2 * ( AMA**2 - AML**2 +
+ & SQRT( AMA**4 + AML**4 - 3.D+00 * AMA**2 * AML**2 ) )
+C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+C Inputs for EXPLOD
+C part. no. 1 is l (e- in mu- decay)
+C part. no. 2 is b (nu-mu in mu- decay)
+C part. no. 3 is anti-nu (anti-nu-e in mu- decay)
+C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ NPEXPL = 3
+ ETOTEX = AMA
+ AMEXPL(1) = AML
+ AMEXPL(2) = 0.D+00
+ AMEXPL(3) = 0.D+00
+C +
+C phase space distribution
+C -
+ 100 CONTINUE
+ NTRY = NTRY + 1
+
+ CALL EXPLOD ( NPEXPL, AMEXPL, ETOTEX, ETEXPL, PXEXPL,
+ & PYEXPL, PZEXPL )
+
+C +
+C Calculates matrix element:
+C 64*GF**2{[P(a)-ama*S(a)]*P(anti-nu)}{P(l)*P(b)}
+C Here CTH is the cosine of the angle between anti-nu and Z axis
+C -
+ CTH = PZEXPL(3) / SQRT ( PXEXPL(3)**2 + PYEXPL(3)**2 +
+ & PZEXPL(3)**2 )
+ PROD1 = ETEXPL(3) * AMA * (1.D+00 - POL * CTH)
+ PROD2 = ETEXPL(1) * ETEXPL(2) - PXEXPL(1)*PXEXPL(2) -
+ & PYEXPL(1)*PYEXPL(2) - PZEXPL(1)*PZEXPL(2)
+ ELEMAT = 16.D+00 * PROD1 * PROD2
+ IF(ELEMAT.GT.ELEMAX) THEN
+ WRITE(LOUT,*) 'Problems in LEPDCY',ELEMAX,ELEMAT
+ STOP
+ ENDIF
+C +
+C Here performs the rejection
+C -
+ TEST = DT_RNDM(ETOTEX) * ELEMAX
+ IF ( TEST .GT. ELEMAT ) GO TO 100
+C +
+C final assignment of variables
+C -
+ ELERAT = ELEMAT/ELEMAX
+ ETL = ETEXPL(1)
+ PXL = PXEXPL(1)
+ PYL = PYEXPL(1)
+ PZL = PZEXPL(1)
+ ETB = ETEXPL(2)
+ PXB = PXEXPL(2)
+ PYB = PYEXPL(2)
+ PZB = PZEXPL(2)
+ ETN = ETEXPL(3)
+ PXN = PXEXPL(3)
+ PYN = PYEXPL(3)
+ PZN = PZEXPL(3)
+ 999 RETURN
+ END
+
+C==================================================================
+C. Generation of Delta resonance events
+C==================================================================
+*
+*===gen_delta==========================================================*
+*
+CDECK ID>, DT_GEN_DELTA
+ SUBROUTINE DT_GEN_DELTA(ENU,LLEP,LTARG,JINT,P21,P22,P23,P24,P25)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+C...Generate a Delta-production neutrino/antineutrino
+C. CC-interaction on a nucleon
+C
+C. INPUT ENU (GeV) = Neutrino Energy
+C. LLEP = neutrino type
+C. LTARG = nucleon target type 1=p, 2=n.
+C. JINT = 1:CC, 2::NC
+C.
+C. OUTPUT PPL(4) 4-monentum of final lepton
+C----------------------------------------------------
+
+ PARAMETER (MAXLND=4000)
+ COMMON/PYJETS/N,NPAD,K(MAXLND,5),P(MAXLND,5),V(MAXLND,5)
+
+**sr - removed (not needed)
+C COMMON /CBAD/ LBAD, NBAD
+**
+
+ DIMENSION PI(3),PO(3)
+C REAL*4 AMD0, AMD, AMN(2), AML0(6), AML, AML2, AMDMIN
+ DIMENSION AML0(6),AMN(2)
+ DATA AMD0 /1.231/, GAMD /0.12/, DELD/0.169/, AMDMIN/1.084/
+ DATA AMN /0.93827231, 0.93956563/
+ DATA AML0 /2*0.51100E-03,2*0.105659, 2*1.777/
+
+c WRITE(6,*)' GEN_DEL',ENU,LLEP,LTARG,JINT,P21,P22,P23,P24,P25
+ LBAD = 0
+C...Final lepton mass
+ IF (JINT.EQ.1) THEN
+ AML = AML0(LLEP)
+ ELSE
+ AML = 0.
+ ENDIF
+ AML2 = AML**2
+
+C...Particle labels (LUND)
+ N = 5
+ K(1,1) = 21
+ K(2,1) = 21
+ K(3,1) = 21
+ K(4,1) = 1
+ K(3,3) = 1
+ K(4,3) = 1
+ IF (LTARG .EQ. 1) THEN
+ K(2,2) = 2212
+ ELSE
+ K(2,2) = 2112
+ ENDIF
+ K0 = (LLEP-1)/2
+ K1 = LLEP/2
+ KA = 12 + 2*K0
+ IS = -1 + 2*LLEP - 4*K1
+ LNU = 2 - LLEP + 2*K1
+ K(1,2) = IS*KA
+ K(5,1) = 1
+ K(5,3) = 2
+ IF (JINT .EQ. 1) THEN ! CC interactions
+ K(3,2) = IS*24
+ K(4,2) = IS*(KA-1)
+ IF(LNU.EQ.1) THEN
+ IF (LTARG .EQ. 1) THEN
+ K(5,2) = 2224
+ ELSE
+ K(5,2) = 2214
+ ENDIF
+ ELSE
+ IF (LTARG .EQ. 1) THEN
+ K(5,2) = 2114
+ ELSE
+ K(5,2) = 1114
+ ENDIF
+ ENDIF
+ ELSE
+ K(3,2) = 23 ! NC (Z0) interactions
+ K(4,2) = K(1,2)
+**sr 7.5.00: swop Delta's (bug), Delta+ for proton (LTARG=1),
+* Delta0 for neutron (LTARG=2)
+C IF (LTARG .EQ. 1) THEN
+C K(5,2) = 2114
+C ELSE
+C K(5,2) = 2214
+C ENDIF
+ IF (LTARG .EQ. 1) THEN
+ K(5,2) = 2214
+ ELSE
+ K(5,2) = 2114
+ ENDIF
+**
+ ENDIF
+
+C...4-momentum initial lepton
+ P(1,5) = 0.
+ P(1,4) = ENU
+ P(1,1) = 0.
+ P(1,2) = 0.
+ P(1,3) = ENU
+C...4-momentum initial nucleon
+ P(2,5) = AMN(LTARG)
+C P(2,4) = P(2,5)
+C P(2,1) = 0.
+C P(2,2) = 0.
+C P(2,3) = 0.
+ P(2,1) = P21
+ P(2,2) = P22
+ P(2,3) = P23
+ P(2,4) = P24
+ P(2,5) = P25
+ N=2
+ beta1=-p(2,1)/p(2,4)
+ beta2=-p(2,2)/p(2,4)
+ beta3=-p(2,3)/p(2,4)
+ N=2
+
+ CALL PYROBO(0,0,0.0D0,0.0D0,BETA1,BETA2,BETA3)
+
+C print*,' nucl. rest fram ( fermi incl.) prima della rotazione'
+
+ phi11=atan(p(1,2)/p(1,3))
+ pi(1)=p(1,1)
+ pi(2)=p(1,2)
+ pi(3)=p(1,3)
+
+ CALL DT_TESTROT(PI,Po,PHI11,1)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+ p(1,1)=po(1)
+ p(1,2)=po(2)
+ p(1,3)=po(3)
+ phi12=atan(p(1,1)/p(1,3))
+
+ pi(1)=p(1,1)
+ pi(2)=p(1,2)
+ pi(3)=p(1,3)
+ CALL DT_TESTROT(Pi,Po,PHI12,2)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+ p(1,1)=po(1)
+ p(1,2)=po(2)
+ p(1,3)=po(3)
+
+ ENUU=P(1,4)
+
+C...Generate the Mass of the Delta
+ NTRY = 0
+100 R = PYR(0)
+ AMD=AMD0+0.5*GAMD*TAN((2.*R-1.)*ATAN(2.*DELD/GAMD))
+ NTRY = NTRY + 1
+ IF (NTRY .GT. 1000) THEN
+ LBAD = 1
+ WRITE (LOUT,1001) NBAD, ENUU,AMD,AMDMIN,AMD0,GAMD,ET
+ RETURN
+ ENDIF
+ IF (AMD .LT. AMDMIN) GOTO 100
+ ET = ((AMD+AML)**2 - AMN(LTARG)**2)/(2.*AMN(LTARG))
+ IF (ENUU .LT. ET) GOTO 100
+
+C...Kinematical limits in Q**2
+ S = AMN(LTARG)**2 + 2.*AMN(LTARG)*ENUU
+ SQS = SQRT(S)
+ PSTAR = (S - AMN(LTARG)**2)/(2.*SQS)
+ ELF = (S - AMD**2 + AML2)/(2.*SQS)
+ PLF = SQRT(ELF**2 - AML2)
+ Q2MIN = -AML2 + 2.*PSTAR*(ELF-PLF)
+ Q2MAX = -AML2 + 2.*PSTAR*(ELF+PLF)
+ IF (Q2MIN .LT. 0.) Q2MIN = 0.
+
+ DSIGMAX = DT_DSIGMA_DELTA(LNU,-Q2MIN, S, AML, AMD)
+200 Q2 = Q2MIN + (Q2MAX-Q2MIN)*PYR(0)
+ DSIG = DT_DSIGMA_DELTA(LNU,-Q2, S, AML, AMD)
+ IF (DSIG .LT. DSIGMAX*PYR(0)) GOTO 200
+
+C...Generate the kinematics of the final particles
+ EISTAR = (S + AMN(LTARG)**2)/(2.*SQS)
+ GAM = EISTAR/AMN(LTARG)
+ BET = PSTAR/EISTAR
+ CTSTAR = ELF/PLF - (Q2 + AML2)/(2.*PSTAR*PLF)
+ EL = GAM*(ELF + BET*PLF*CTSTAR)
+ PLZ = GAM*(PLF*CTSTAR + BET*ELF)
+ PL = SQRT(EL**2 - AML2)
+ PLT = SQRT(MAX(1.D-06,(PL*PL - PLZ*PLZ)))
+ PHI = 6.28319*PYR(0)
+ P(4,1) = PLT*COS(PHI)
+ P(4,2) = PLT*SIN(PHI)
+ P(4,3) = PLZ
+ P(4,4) = EL
+ P(4,5) = AML
+
+C...4-momentum of Delta
+ P(5,1) = -P(4,1)
+ P(5,2) = -P(4,2)
+ P(5,3) = ENUU-P(4,3)
+ P(5,4) = ENUU+AMN(LTARG)-P(4,4)
+ P(5,5) = AMD
+
+C...4-momentum of intermediate boson
+ P(3,5) = -Q2
+ P(3,4) = P(1,4)-P(4,4)
+ P(3,1) = P(1,1)-P(4,1)
+ P(3,2) = P(1,2)-P(4,2)
+ P(3,3) = P(1,3)-P(4,3)
+ N=5
+
+ DO kw=1,5
+ pi(1)=p(kw,1)
+ pi(2)=p(kw,2)
+ pi(3)=p(kw,3)
+ CALL DT_TESTROT(Pi,Po,PHI12,3)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+ p(kw,1)=po(1)
+ p(kw,2)=po(2)
+ p(kw,3)=po(3)
+ END DO
+
+c********************************************
+
+ DO kw=1,5
+ pi(1)=p(kw,1)
+ pi(2)=p(kw,2)
+ pi(3)=p(kw,3)
+ CALL DT_TESTROT(Pi,Po,PHI11,4)
+ DO ll=1,3
+ IF(abs(po(ll)).LT.1.D-07) po(ll)=0.
+ END DO
+ p(kw,1)=po(1)
+ p(kw,2)=po(2)
+ p(kw,3)=po(3)
+ END DO
+c********************************************
+C transform back into Lab.
+
+ CALL PYROBO(0,0,0.0D0,0.0D0,-BETA1,-BETA2,-BETA3)
+
+C WRITE(6,*)' Lab fram ( fermi incl.) '
+ N=5
+ CALL PYEXEC
+
+ RETURN
+1001 FORMAT(2X, 'DT_GEN_DELTA : event rejected ', I5, 6G10.3)
+ END
+*
+*===dsigma_delta=======================================================*
+*
+CDECK ID>, DT_DSIGMA_DELTA
+ DOUBLE PRECISION FUNCTION DT_DSIGMA_DELTA (LNU, QQ, S, AML, MD)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C...Reaction nu + N -> lepton + Delta
+C. returns the cross section
+C. dsigma/dt
+C. INPUT LNU = 1, 2 (neutrino-antineutrino)
+C. QQ = t (always negative) GeV**2
+C. S = (c.m energy)**2 GeV**2
+C. OUTPUT = 10**-38 cm+2/GeV**2
+C-----------------------------------------------------
+ REAL*8 MN, MN2, MN4, MD,MD2, MD4
+ DATA MN /0.938/
+ DATA PI /3.1415926/
+
+ GF = (1.1664 * 1.97)
+ GF2 = GF*GF
+ MN2 = MN*MN
+ MN4 = MN2*MN2
+ MD2 = MD*MD
+ MD4 = MD2*MD2
+ AML2 = AML*AML
+ AML4 = AML2*AML2
+ VQ = (MN2 - MD2 - QQ)/2.
+ VPI = (MN2 + MD2 - QQ)/2.
+ VK = (S + QQ - MN2 - AML2)/2.
+ PIK = (S - MN2)/2.
+ QK = (AML2 - QQ)/2.
+ PIQ = (QQ + MN2 - MD2)/2.
+ Q = SQRT(-QQ)
+ C3V = 2.07*SQRT(EXP(-6.3*Q)*(1.+9*Q))
+ C3 = SQRT(3.)*C3V/MN
+ C4 = -C3/MD ! attenzione al segno
+ C5A = 1.18/(1.-QQ/0.4225)**2
+ C32 = C3**2
+ C42 = C4**2
+ C5A2 = C5A**2
+
+ IF (LNU .EQ. 1) THEN
+ ANS3=-MD2*VPI*QK*QQ*C32+MD2*VPI*QK*C5A2+2.*MD2*VQ*
+ . PIK*QK*C32+2.*MD2*VQ*QK*PIQ*C32+MD4*VPI*QK*QQ*C42-
+ . 2.*VK**2*VPI*QQ*C32+2.*VK**2*VPI*C5A2+4.*VK*VPI*VQ*
+ . QK*C32+2.*VK*VPI*VQ*C5A2+2.*VPI*VQ**2*QK*C32
+ ANS2=2.*MN*MD*MD2*VK**2*QQ*C42-4.*MN*MD*MD2*VK*VQ*QK
+ . *C42-2.*MN*MD*MD2*VQ**2*QK*C42-2.*MN*MD*MD2*QK**2*
+ . C32-3.*MN*MD*MD2*QK*QQ*C32+MN*MD*MD2*QK*C5A2-MN*MD*
+ . MD4*QK*QQ*C42+2.*MN*MD*VK**2*C5A2+2.*MN*MD*VK*VQ*
+ . C5A2+4.*MN*C3*C4*MD2*VK**2*QQ-8.*MN*C3*C4*MD2*VK*VQ
+ . *QK-4.*MN*C3*C4*MD2*VQ**2*QK-2.*MN*C3*C4*MD4*QK*QQ-
+ . 4.*MN*C3*C5A*MD2*VK*QQ+4.*MN*C3*C5A*MD2*VQ*QK-2.*MD*
+ . C3*C4*MD2*VK*PIK*QQ+2.*MD*C3*C4*MD2*VK*QK*PIQ+2.*MD
+ . *C3*C4*MD2*VPI*QK*QQ+2.*MD*C3*C4*MD2*VQ*PIK*QK+2.*
+ . MD*C3*C4*MD2*VQ*QK*PIQ-2.*MD*C3*C4*VK**2*VPI*QQ+4.*
+ . MD*C3*C4*VK*VPI*VQ*QK+2.*MD*C3*C4*VPI*VQ**2*QK-MD*
+ . C3*C5A*MD2*PIK*QQ+MD*C3*C5A*MD2*QK*PIQ-3.*MD*C3*C5A
+ . *VK*VPI*QQ+MD*C3*C5A*VK*VQ*PIQ+3.*MD*C3*C5A*VPI*VQ*
+ . QK-MD*C3*C5A*VQ**2*PIK+C4*C5A*MD2*VK*VPI*QQ+C4*C5A*
+ . MD2*VK*VQ*PIQ-C4*C5A*MD2*VPI*VQ*QK-C4*C5A*MD2*VQ**2
+ . *PIK-C4*C5A*MD4*PIK*QQ+C4*C5A*MD4*QK*PIQ-2.*MD2*VK
+ . **2*VPI*QQ*C42+4.*MD2*VK*VPI*VQ*QK*C42-2.*MD2*VK*
+ . PIK*QQ*C32+2.*MD2*VK*QK*PIQ*C32+2.*MD2*VPI*VQ**2*QK
+ . *C42-2.*MD2*VPI*QK**2*C32+ANS3
+ ELSE
+ ANS3=-MD2*VPI*QK*QQ*C32+MD2*VPI*QK*C5A2+2.*MD2*VQ*
+ . PIK*QK*C32+2.*MD2*VQ*QK*PIQ*C32+MD4*VPI*QK*QQ*C42-
+ . 2.*VK**2*VPI*QQ*C32+2.*VK**2*VPI*C5A2+4.*VK*VPI*VQ*
+ . QK*C32+2.*VK*VPI*VQ*C5A2+2.*VPI*VQ**2*QK*C32
+ ANS2=2.*MN*MD*MD2*VK**2*QQ*C42-4.*MN*MD*MD2*VK*VQ*QK
+ . *C42-2.*MN*MD*MD2*VQ**2*QK*C42-2.*MN*MD*MD2*QK**2*
+ . C32-3.*MN*MD*MD2*QK*QQ*C32+MN*MD*MD2*QK*C5A2-MN*MD*
+ . MD4*QK*QQ*C42+2.*MN*MD*VK**2*C5A2+2.*MN*MD*VK*VQ*
+ . C5A2+4.*MN*C3*C4*MD2*VK**2*QQ-8.*MN*C3*C4*MD2*VK*VQ
+ . *QK-4.*MN*C3*C4*MD2*VQ**2*QK-2.*MN*C3*C4*MD4*QK*QQ+
+ . 4.*MN*C3*C5A*MD2*VK*QQ-4.*MN*C3*C5A*MD2*VQ*QK-2.*MD*
+ . C3*C4*MD2*VK*PIK*QQ+2.*MD*C3*C4*MD2*VK*QK*PIQ+2.*MD
+ . *C3*C4*MD2*VPI*QK*QQ+2.*MD*C3*C4*MD2*VQ*PIK*QK+2.*
+ . MD*C3*C4*MD2*VQ*QK*PIQ-2.*MD*C3*C4*VK**2*VPI*QQ+4.*
+ . MD*C3*C4*VK*VPI*VQ*QK+2.*MD*C3*C4*VPI*VQ**2*QK+MD*
+ . C3*C5A*MD2*PIK*QQ-MD*C3*C5A*MD2*QK*PIQ+3.*MD*C3*C5A
+ . *VK*VPI*QQ-MD*C3*C5A*VK*VQ*PIQ-3.*MD*C3*C5A*VPI*VQ*
+ . QK+MD*C3*C5A*VQ**2*PIK-C4*C5A*MD2*VK*VPI*QQ-C4*C5A*
+ . MD2*VK*VQ*PIQ+C4*C5A*MD2*VPI*VQ*QK+C4*C5A*MD2*VQ**2
+ . *PIK+C4*C5A*MD4*PIK*QQ-C4*C5A*MD4*QK*PIQ-2.*MD2*VK
+ . **2*VPI*QQ*C42+4.*MD2*VK*VPI*VQ*QK*C42-2.*MD2*VK*
+ . PIK*QQ*C32+2.*MD2*VK*QK*PIQ*C32+2.*MD2*VPI*VQ**2*QK
+ . *C42-2.*MD2*VPI*QK**2*C32+ANS3
+ ENDIF
+ ANS1=32.*ANS2
+ ANS=ANS1/(3.*MD2)
+ P1CM = (S-MN2)/(2.*SQRT(S))
+ DT_DSIGMA_DELTA = GF2/2. * ANS/(64.*PI*S*P1CM**2)
+
+ RETURN
+ END
+*
+*===qgaus==============================================================*
+*
+CDECK ID>, DT_QGAUS
+ SUBROUTINE DT_QGAUS(A,B,SS,ENU,LTYP)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION X(5),W(5)
+ DATA X/.1488743389D0,.4333953941D0,
+ & .6794095682D0,.8650633666D0,.9739065285D0
+ */
+ DATA W/.2955242247D0,.2692667193D0,
+ & .2190863625D0,.1494513491D0,.0666713443D0
+ */
+ XM=0.5D0*(B+A)
+ XR=0.5D0*(B-A)
+ SS=0
+ DO 11 J=1,5
+ DX=XR*X(J)
+ SS=SS+W(J)*(DT_DSQEL_Q2(LTYP,ENU,XM+DX)+
+ * DT_DSQEL_Q2(LTYP,ENU,XM-DX))
+11 CONTINUE
+ SS=XR*SS
+
+ RETURN
+ END
+*
+*===diqbrk=============================================================*
+*
+CDECK ID>, DT_DIQBRK
+ SUBROUTINE DT_DIQBRK
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+C IF(DT_RNDM(VV).LE.0.5D0)THEN
+C CALL GSQBS1(NHKK)
+C CALL GSQBS2(NHKK)
+C CALL USQBS1(NHKK)
+C CALL USQBS2(NHKK)
+C CALL GSABS1(NHKK)
+C CALL GSABS2(NHKK)
+C CALL USABS1(NHKK)
+C CALL USABS2(NHKK)
+C ELSE
+C CALL GSQBS2(NHKK)
+C CALL GSQBS1(NHKK)
+C CALL USQBS2(NHKK)
+C CALL USQBS1(NHKK)
+C CALL GSABS2(NHKK)
+C CALL GSABS1(NHKK)
+C CALL USABS2(NHKK)
+C CALL USABS1(NHKK)
+C ENDIF
+
+ IF(DT_RNDM(VV).LE.0.5D0) THEN
+ CALL DT_DBREAK(1)
+ CALL DT_DBREAK(2)
+ CALL DT_DBREAK(3)
+ CALL DT_DBREAK(4)
+ CALL DT_DBREAK(5)
+ CALL DT_DBREAK(6)
+ CALL DT_DBREAK(7)
+ CALL DT_DBREAK(8)
+ ELSE
+ CALL DT_DBREAK(2)
+ CALL DT_DBREAK(1)
+ CALL DT_DBREAK(4)
+ CALL DT_DBREAK(3)
+ CALL DT_DBREAK(6)
+ CALL DT_DBREAK(5)
+ CALL DT_DBREAK(8)
+ CALL DT_DBREAK(7)
+ ENDIF
+
+ RETURN
+ END
+C
+C
+C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ SUBROUTINE MUSQBS2(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+ * IP1,IP21,IP22,IPP1,IPP2,IPIP,ISQ,IGCOUN)
+C
+C USQBS-2 diagram (split target diquark)
+C
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+
+C
+ PARAMETER (NTMHKK= 300)
+ COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+ +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+ +(4,NTMHKK)
+*KEEP,XSEADI.
+ COMMON /XSEADI/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ +SSMIMQ,VVMTHR
+*KEEP,DPRIN.
+ COMMON /DPRIN/ IPRI,IPEV,IPPA,IPCO,INIT,IPHKK,ITOPD,IPAUPR
+ COMMON /EVFLAG/ NUMEV
+C
+C USQBS-2 diagram (split target diquark)
+C
+C
+C Input chain 1(NC1) valence-quark(NC1P)-valence-diquark(NC1T)
+C Input chain 2(NC2) sea-antiquark(NC2P)-sea-quark(NC2T)
+C
+C Create antiquark(aqsP)-quark(qsT) pair, energy from NC1P and NC1T
+C Split remaining valence diquark(NC1T) into quarks vq1T and vq2T
+C
+C Create chains 3 sea antiquark(NC2P 1)-valence-quark(vq1T 2)
+C 6 sea-antiquark(aqsP 4)-valence-quark(vq2T 5)
+C 9 valence-quark(NC1P 7)-diquark(NC2T+qsT 8)
+C
+C
+C Put new chains into COMMON /HKKTMP/
+C
+ IIGLU1=NC1T-NC1P-1
+ IIGLU2=NC2T-NC2P-1
+ IGCOUN=0
+C WRITE(LOUT,*)'MUSQBS2: IIGLU1,IIGLU2 ',IIGLU1,IIGLU2
+ CVQ=1.D0
+ IREJ=0
+ IF(IPIP.EQ.2)THEN
+C IF(NUMEV.EQ.-324)THEN
+C WRITE(LOUT,*)' MUSQBS2(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,',
+C * 'IP1,IP21,IP22,IPP1,IPP2,IPIP,IGCOUN)',
+C *NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+C * IP1,IP21,IP22,IPP1,IPP2,IPIP,IGCOUN
+ ENDIF
+C
+C
+C
+C determine x-values of NC1T diquark
+ XDIQT=PHKK(4,NC1T)*2.D0/UMO
+ XVQP=PHKK(4,NC1P)*2.D0/UMO
+C
+C determine x-values of sea quark pair
+C
+ IPCO=1
+ ICOU=0
+ 2234 CONTINUE
+ ICOU=ICOU+1
+ IF(ICOU.GE.500)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MUSQBS2 Rejection 2234 ICOU. GT.500'
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPCO.GE.3)WRITE(LOUT,*)'MUSQBS2 call XSEAPA: UMO,XDIQT,XVQP ',
+ * UMO, XDIQT,XVQP
+ XSQ=0.D0
+ XSAQ=0.D0
+**NEW
+C CALL XSEAPA(UMO,XDIQT/2.D0,ISQ,ISAQ,XSQ,XSAQ,IREJ)
+ IF (IPIP.EQ.1) THEN
+ XQMAX = XDIQT/2.0D0
+ XAQMAX = 2.D0*XVQP/3.0D0
+ ELSE
+ XQMAX = 2.D0*XVQP/3.0D0
+ XAQMAX = XDIQT/2.0D0
+ ENDIF
+ CALL DT_CQPAIR(XQMAX,XAQMAX,XSQ,XSAQ,ISQ,IREJ)
+ ISAQ = 6+ISQ
+C write(*,*) 'MUSQBS2: ',ISQ,XSQ,XDIQT,XSAQ,XVQP
+**
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MUSQBS2 after XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IF(IREJ.GE.1)THEN
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MUSQBS2 reject XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPIP.EQ.1)THEN
+ IF(XSAQ.GE.2.D0*XVQP/3.D0)GO TO 2234
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(XSQ.GE.2.D0*XVQP/3.D0)GO TO 2234
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,4E12.4)')' MUSQBS2 XDIQT,XVQP,XSQ,XSAQ ',
+ * XDIQT,XVQP,XSQ,XSAQ
+ ENDIF
+C
+C subtract xsq,xsaq from NC1T diquark and NC1P quark
+C
+C XSQ=0.D0
+ IF(IPIP.EQ.1)THEN
+ XDIQT=XDIQT-XSQ
+ XVQP =XVQP -XSAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XDIQT=XDIQT-XSAQ
+ XVQP =XVQP -XSQ
+ ENDIF
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'XDIQT,XVQP after subtraction',XDIQT,XVQP
+C
+C Split remaining valence diquark(NC1T) into quarks vq1T and vq2T
+C
+ XVTHRO=CVQ/UMO
+ IVTHR=0
+ 3466 CONTINUE
+ IF(IVTHR.EQ.10)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MUSQBS2 3466 reject IVTHR 10'
+ IPCO=0
+ RETURN
+ ENDIF
+ IVTHR=IVTHR+1
+ XVTHR=XVTHRO/(201-IVTHR)
+ UNOPRV=UNON
+ 380 CONTINUE
+ IF(XVTHR.GT.0.66D0*XDIQT)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MUSQBS2 Rejection 380 XVTHR large ',
+ * XVTHR
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(DT_RNDM(V).LT.0.5D0)THEN
+ XVTQI=DT_SAMPEX(XVTHR,0.66D0*XDIQT)
+ XVTQII=XDIQT-XVTQI
+ ELSE
+ XVTQII=DT_SAMPEX(XVTHR,0.66D0*XDIQT)
+ XVTQI=XDIQT-XVTQII
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,2E12.4)')' MUSQBS2:XVTQI,XVTQII ',XVTQI,XVTQII
+ ENDIF
+C
+C Prepare 4 momenta of new chains and chain ends
+C
+C COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+C +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+C +(4,NTMHKK)
+C
+C Create chains 3 sea antiquark(NC2P 1)-valence-quark(vq1T 2)
+C 6 sea-antiquark(aqsP 4)-valence-quark(vq2T 5)
+C 9 valence-quark(NC1P 7)-diquark(NC2T+qsT 8)
+C
+C SUBROUTINE MUSQBS2(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+C * IP1,IP21,IP22,IPP1,IPP2)
+C
+ IF(IPIP.EQ.1)THEN
+ XSQ1=XSQ
+ XSAQ1=XSAQ
+ ISQ1=ISQ
+ ISAQ1=ISAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XSQ1=XSAQ
+ XSAQ1=XSQ
+ ISQ1=ISAQ
+ ISAQ1=ISQ
+ ENDIF
+ IDHKT(1) =IPP1
+ ISTHKT(1) =951
+ JMOHKT(1,1)=NC2P
+ JMOHKT(2,1)=0
+ JDAHKT(1,1)=3+IIGLU1
+ JDAHKT(2,1)=0
+C Create chains 3 sea antiquark(NC2P 1)-valence-quark(vq1T 2)
+ PHKT(1,1) =PHKK(1,NC2P)
+ PHKT(2,1) =PHKK(2,NC2P)
+ PHKT(3,1) =PHKK(3,NC2P)
+ PHKT(4,1) =PHKK(4,NC2P)
+C PHKT(5,1) =PHKK(5,NC2P)
+ XMIST =(PHKT(4,1)**2-
+ * PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,1) =SQRT(PHKT(4,1)**2- PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2)
+ ELSE
+C WRITE(LOUT,*)'MUSQBS2 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,1)=0.D0
+ ENDIF
+ VHKT(1,1) =VHKK(1,NC2P)
+ VHKT(2,1) =VHKK(2,NC2P)
+ VHKT(3,1) =VHKK(3,NC2P)
+ VHKT(4,1) =VHKK(4,NC2P)
+ WHKT(1,1) =WHKK(1,NC2P)
+ WHKT(2,1) =WHKK(2,NC2P)
+ WHKT(3,1) =WHKK(3,NC2P)
+ WHKT(4,1) =WHKK(4,NC2P)
+C Add here IIGLU1 gluons to this chaina
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU1.GE.1)THEN
+ JJG=NC1P
+ DO 61 IIG=2,2+IIGLU1-1
+ KKG=JJG+IIG-1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=3+IIGLU1
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 61 CONTINUE
+ ENDIF
+ IDHKT(2+IIGLU1) =IP21
+ ISTHKT(2+IIGLU1) =952
+ JMOHKT(1,2+IIGLU1)=NC1T
+ JMOHKT(2,2+IIGLU1)=0
+ JDAHKT(1,2+IIGLU1)=3+IIGLU1
+ JDAHKT(2,2+IIGLU1)=0
+ PHKT(1,2+IIGLU1) =PHKK(1,NC1T)*XVTQI/(XDIQT+XSQ1)
+ PHKT(2,2+IIGLU1) =PHKK(2,NC1T)*XVTQI/(XDIQT+XSQ1)
+ PHKT(3,2+IIGLU1) =PHKK(3,NC1T)*XVTQI/(XDIQT+XSQ1)
+ PHKT(4,2+IIGLU1) =PHKK(4,NC1T)*XVTQI/(XDIQT+XSQ1)
+C PHKT(5,2) =PHKK(5,NC1T)
+ XMIST =(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,2+IIGLU1) =SQRT(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ ELSE
+C WRITE(LOUT,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,2+IIGLU1) =VHKK(1,NC1T)
+ VHKT(2,2+IIGLU1) =VHKK(2,NC1T)
+ VHKT(3,2+IIGLU1) =VHKK(3,NC1T)
+ VHKT(4,2+IIGLU1) =VHKK(4,NC1T)
+ WHKT(1,2+IIGLU1) =WHKK(1,NC1T)
+ WHKT(2,2+IIGLU1) =WHKK(2,NC1T)
+ WHKT(3,2+IIGLU1) =WHKK(3,NC1T)
+ WHKT(4,2+IIGLU1) =WHKK(4,NC1T)
+ IDHKT(3+IIGLU1) =88888
+ ISTHKT(3+IIGLU1) =95
+ JMOHKT(1,3+IIGLU1)=1
+ JMOHKT(2,3+IIGLU1)=2+IIGLU1
+ JDAHKT(1,3+IIGLU1)=0
+ JDAHKT(2,3+IIGLU1)=0
+ PHKT(1,3+IIGLU1) =PHKT(1,1)+PHKT(1,2+IIGLU1)+PG1
+ PHKT(2,3+IIGLU1) =PHKT(2,1)+PHKT(2,2+IIGLU1)+PG2
+ PHKT(3,3+IIGLU1) =PHKT(3,1)+PHKT(3,2+IIGLU1)+PG3
+ PHKT(4,3+IIGLU1) =PHKT(4,1)+PHKT(4,2+IIGLU1)+PG4
+ XMIST
+ * =(PHKT(4,3+IIGLU1)**2-PHKT(1,3+IIGLU1)**2-PHKT(2,3+IIGLU1)**2
+ * -PHKT(3,3+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,3+IIGLU1)
+ * =SQRT(PHKT(4,3+IIGLU1)**2-PHKT(1,3+IIGLU1)**2-PHKT(2,3+IIGLU1)**2
+ * -PHKT(3,3+IIGLU1)**2)
+ ELSE
+C WRITE(LOUT,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ IF(IPIP.GE.2)THEN
+C IF(NUMEV.EQ.-324)THEN
+C WRITE(LOUT,*)1,ISTHKT(1),IDHKT(1),JMOHKT(1,1),JMOHKT(2,1),
+C * JDAHKT(1,1),
+C *JDAHKT(2,1),(PHKT(III,1),III=1,5)
+ DO 71 IIG=2,2+IIGLU1-1
+C WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+C & JMOHKT(1,IIG),JMOHKT(2,IIG),
+C * JDAHKT(1,IIG),
+C *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 71 CONTINUE
+C WRITE(LOUT,*)2+IIGLU1,ISTHKT(2+IIGLU1),IDHKT(2+IIGLU1),
+C * JMOHKT(1,2+IIGLU1),JMOHKT(2,2+IIGLU1),JDAHKT(1,2+IIGLU1),
+C *JDAHKT(2,2+IIGLU1),(PHKT(III,2+IIGLU1),III=1,5)
+C WRITE(LOUT,*)3+IIGLU1,ISTHKT(3+IIGLU1),IDHKT(3+IIGLU1),
+C * JMOHKT(1,3+IIGLU1),JMOHKT(2,3+IIGLU1),JDAHKT(1,3+IIGLU1),
+C *JDAHKT(2,3+IIGLU1),(PHKT(III,3+IIGLU1),III=1,5)
+ ENDIF
+ CHAMAL=CHAM1
+ IF(IPIP.EQ.1)THEN
+ IF(IPP1.LE.-3.OR.IP21.GE.3)CHAMAL=CHAM3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IPP1.GE.3.OR.IP21.LE.-3)CHAMAL=CHAM3
+ ENDIF
+ IF(PHKT(5,3+IIGLU1).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(LOUT,*)' MUSQBS1 jump back from chain 3'
+ GO TO 3466
+ ENDIF
+ VHKT(1,3+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,3+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,3+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,3+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,3+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,3+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,3+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,3+IIGLU1) =WHKK(4,NC1)
+ IF(IPIP.EQ.1)THEN
+ IDHKT(4+IIGLU1) =-(ISAQ1-6)
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(4+IIGLU1) =ISAQ1
+ ENDIF
+ ISTHKT(4+IIGLU1) =951
+ JMOHKT(1,4+IIGLU1)=NC1P
+ JMOHKT(2,4+IIGLU1)=0
+ JDAHKT(1,4+IIGLU1)=6+IIGLU1
+ JDAHKT(2,4+IIGLU1)=0
+C create chain 6 sea-antiquark(aqsP 4)-valence-quark(vq2T 5)
+ PHKT(1,4+IIGLU1) =PHKK(1,NC1P)*XSAQ1/(XVQP+XSAQ1)
+ PHKT(2,4+IIGLU1) =PHKK(2,NC1P)*XSAQ1/(XVQP+XSAQ1)
+ PHKT(3,4+IIGLU1) =PHKK(3,NC1P)*XSAQ1/(XVQP+XSAQ1)
+ PHKT(4,4+IIGLU1) =PHKK(4,NC1P)*XSAQ1/(XVQP+XSAQ1)
+C PHKT(5,4+IIGLU1) =PHKK(5,NC1P)
+ XMIST =(PHKT(4,4+IIGLU1)**2-
+ * PHKT(3,4+IIGLU1)**2-PHKT(2,4+IIGLU1)**2-
+ *PHKT(1,4+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,4+IIGLU1) =SQRT(PHKT(4,4+IIGLU1)**2-
+ * PHKT(3,4+IIGLU1)**2-PHKT(2,4+IIGLU1)**2-
+ *PHKT(1,4+IIGLU1)**2)
+ ELSE
+C WRITE(LOUT,*)'MUSQBS2 parton 4 mass square LT.0 ',XMIST
+ PHKT(5,4+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,4+IIGLU1) =VHKK(1,NC1P)
+ VHKT(2,4+IIGLU1) =VHKK(2,NC1P)
+ VHKT(3,4+IIGLU1) =VHKK(3,NC1P)
+ VHKT(4,4+IIGLU1) =VHKK(4,NC1P)
+ WHKT(1,4+IIGLU1) =WHKK(1,NC1P)
+ WHKT(2,4+IIGLU1) =WHKK(2,NC1P)
+ WHKT(3,4+IIGLU1) =WHKK(3,NC1P)
+ WHKT(4,4+IIGLU1) =WHKK(4,NC1P)
+ IDHKT(5+IIGLU1) =IP22
+ ISTHKT(5+IIGLU1) =952
+ JMOHKT(1,5+IIGLU1)=NC1T
+ JMOHKT(2,5+IIGLU1)=0
+ JDAHKT(1,5+IIGLU1)=6+IIGLU1
+ JDAHKT(2,5+IIGLU1)=0
+ PHKT(1,5+IIGLU1) =PHKK(1,NC1T)*XVTQII/(XDIQT+XSQ1)
+ PHKT(2,5+IIGLU1) =PHKK(2,NC1T)*XVTQII/(XDIQT+XSQ1)
+ PHKT(3,5+IIGLU1) =PHKK(3,NC1T)*XVTQII/(XDIQT+XSQ1)
+ PHKT(4,5+IIGLU1) =PHKK(4,NC1T)*XVTQII/(XDIQT+XSQ1)
+C PHKT(5,5+IIGLU1) =PHKK(5,NC1T)
+ XMIST =(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,5+IIGLU1) =SQRT(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,5+IIGLU1) =VHKK(1,NC1T)
+ VHKT(2,5+IIGLU1) =VHKK(2,NC1T)
+ VHKT(3,5+IIGLU1) =VHKK(3,NC1T)
+ VHKT(4,5+IIGLU1) =VHKK(4,NC1T)
+ WHKT(1,5+IIGLU1) =WHKK(1,NC1T)
+ WHKT(2,5+IIGLU1) =WHKK(2,NC1T)
+ WHKT(3,5+IIGLU1) =WHKK(3,NC1T)
+ WHKT(4,5+IIGLU1) =WHKK(4,NC1T)
+ IDHKT(6+IIGLU1) =88888
+ ISTHKT(6+IIGLU1) =95
+ JMOHKT(1,6+IIGLU1)=4+IIGLU1
+ JMOHKT(2,6+IIGLU1)=5+IIGLU1
+ JDAHKT(1,6+IIGLU1)=0
+ JDAHKT(2,6+IIGLU1)=0
+ PHKT(1,6+IIGLU1) =PHKT(1,4+IIGLU1)+PHKT(1,5+IIGLU1)
+ PHKT(2,6+IIGLU1) =PHKT(2,4+IIGLU1)+PHKT(2,5+IIGLU1)
+ PHKT(3,6+IIGLU1) =PHKT(3,4+IIGLU1)+PHKT(3,5+IIGLU1)
+ PHKT(4,6+IIGLU1) =PHKT(4,4+IIGLU1)+PHKT(4,5+IIGLU1)
+ XMIST
+ * =(PHKT(4,6+IIGLU1)**2-PHKT(1,6+IIGLU1)**2-PHKT(2,6+IIGLU1)**2
+ * -PHKT(3,6+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,6+IIGLU1)
+ * =SQRT(PHKT(4,6+IIGLU1)**2-PHKT(1,6+IIGLU1)**2-PHKT(2,6+IIGLU1)**2
+ * -PHKT(3,6+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+C IF(IPIP.GE.2)THEN
+C IF(NUMEV.EQ.-324)THEN
+C WRITE(6,*)4+IIGLU1,ISTHKT(4+IIGLU1),IDHKT(4+IIGLU1),
+C * JMOHKT(1,4+IIGLU1),JMOHKT(2,4+IIGLU1),JDAHKT(1,4+IIGLU1),
+C *JDAHKT(2,4+IIGLU1),(PHKT(III,4+IIGLU1),III=1,5)
+C WRITE(6,*)5+IIGLU1,ISTHKT(5+IIGLU1),IDHKT(5+IIGLU1),
+C * JMOHKT(1,5+IIGLU1),JMOHKT(2,5+IIGLU1),JDAHKT(1,5+IIGLU1),
+C *JDAHKT(2,5+IIGLU1),(PHKT(III,5+IIGLU1),III=1,5)
+C WRITE(6,*)6+IIGLU1,ISTHKT(6+IIGLU1),IDHKT(6+IIGLU1),
+C * JMOHKT(1,6+IIGLU1),JMOHKT(2,6+IIGLU1),JDAHKT(1,6+IIGLU1),
+C *JDAHKT(2,6+IIGLU1),(PHKT(III,6+IIGLU1),III=1,5)
+C ENDIF
+ CHAMAL=CHAM1
+ IF(IPIP.EQ.1)THEN
+ IF(IP22.GE.3.OR.ISAQ1.GE.9)CHAMAL=CHAM3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP22.LE.-3.OR.ISAQ1.GE.3)CHAMAL=CHAM3
+ ENDIF
+ IF(PHKT(5,6+IIGLU1).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MUSQBS1 jump back from chain 6',
+C * CHAMAL,PHKT(5,6+IIGLU1)
+ GO TO 3466
+ ENDIF
+ VHKT(1,6+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,6+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,6+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,6+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,6+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,6+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,6+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,6+IIGLU1) =WHKK(4,NC1)
+C IDHKT(7) =1000*IPP1+100*ISQ+1
+ IDHKT(7+IIGLU1) =IP1
+ ISTHKT(7+IIGLU1) =951
+ JMOHKT(1,7+IIGLU1)=NC1P
+ JMOHKT(2,7+IIGLU1)=0
+**NEW
+C JDAHKT(1,7+IIGLU1)=9+IIGLU1
+ JDAHKT(1,7+IIGLU1)=9+IIGLU1+IIGLU2
+**
+ JDAHKT(2,7+IIGLU1)=0
+ PHKT(1,7+IIGLU1) =PHKK(1,NC1P)*XVQP/(XVQP+XSAQ1)
+ PHKT(2,7+IIGLU1) =PHKK(2,NC1P)*XVQP/(XVQP+XSAQ1)
+ PHKT(3,7+IIGLU1) =PHKK(3,NC1P)*XVQP/(XVQP+XSAQ1)
+ PHKT(4,7+IIGLU1) =PHKK(4,NC1P)*XVQP/(XVQP+XSAQ1)
+C PHKT(5,7+IIGLU1) =PHKK(5,NC1P)
+ XMIST =(PHKT(4,7+IIGLU1)**2-
+ * PHKT(3,7+IIGLU1)**2-PHKT(2,7+IIGLU1)**2-
+ *PHKT(1,7+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,7+IIGLU1) =SQRT(PHKT(4,7+IIGLU1)**2-
+ * PHKT(3,7+IIGLU1)**2-PHKT(2,7+IIGLU1)**2-
+ *PHKT(1,7+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS2 parton 7 mass square LT.0 ',XMIST
+ PHKT(5,7+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,7+IIGLU1) =VHKK(1,NC1P)
+ VHKT(2,7+IIGLU1) =VHKK(2,NC1P)
+ VHKT(3,7+IIGLU1) =VHKK(3,NC1P)
+ VHKT(4,7+IIGLU1) =VHKK(4,NC1P)
+ WHKT(1,7+IIGLU1) =WHKK(1,NC1P)
+ WHKT(2,7+IIGLU1) =WHKK(2,NC1P)
+ WHKT(3,7+IIGLU1) =WHKK(3,NC1P)
+ WHKT(4,7+IIGLU1) =WHKK(4,NC2P)
+C Insert here the IIGLU2 gluons
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU2.GE.1)THEN
+ JJG=NC2P
+ DO 81 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ KKG=JJG+IIG-7-IIGLU1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=9+IIGLU1+IIGLU2
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 81 CONTINUE
+ ENDIF
+ IF(IPIP.EQ.1)THEN
+ IDHKT(8+IIGLU1+IIGLU2) =1000*IPP2+100*ISQ1+3
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.1203)IDHKT(8+IIGLU1+IIGLU2)=2103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.1303)IDHKT(8+IIGLU1+IIGLU2)=3103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.2303)IDHKT(8+IIGLU1+IIGLU2)=3203
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(8+IIGLU1+IIGLU2) =1000*IPP2+100*(-ISQ1+6)-3
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.-1203)IDHKT(8+IIGLU1+IIGLU2)=-2103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.-1303)IDHKT(8+IIGLU1+IIGLU2)=-3103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.-2303)IDHKT(8+IIGLU1+IIGLU2)=-3203
+ ENDIF
+ ISTHKT(8+IIGLU1+IIGLU2) =952
+ JMOHKT(1,8+IIGLU1+IIGLU2)=NC2T
+ JMOHKT(2,8+IIGLU1+IIGLU2)=0
+ JDAHKT(1,8+IIGLU1+IIGLU2)=9+IIGLU1+IIGLU2
+ JDAHKT(2,8+IIGLU1+IIGLU2)=0
+ PHKT(1,8+IIGLU1+IIGLU2) =PHKK(1,NC2T)+
+ * PHKK(1,NC1T)*XSQ1/(XDIQT+XSQ1)
+ PHKT(2,8+IIGLU1+IIGLU2) =PHKK(2,NC2T)+
+ * PHKK(2,NC1T)*XSQ1/(XDIQT+XSQ1)
+ PHKT(3,8+IIGLU1+IIGLU2) =PHKK(3,NC2T)+
+ * PHKK(3,NC1T)*XSQ1/(XDIQT+XSQ1)
+ PHKT(4,8+IIGLU1+IIGLU2) =PHKK(4,NC2T)+
+ * PHKK(4,NC1T)*XSQ1/(XDIQT+XSQ1)
+C WRITE(6,*)'PHKK(4,NC1T),PHKK(4,NC2T), PHKT(4,7)',
+C * PHKK(4,NC1T),PHKK(4,NC2T), PHKT(4,7)
+ IF(PHKT(4,8+IIGLU1+IIGLU2).GE. PHKK(4,NC1T))THEN
+C IREJ=1
+C WRITE(6,*)'reject PHKT(4,8+IIGLU1+IIGLU2).GE. PHKK(4,NC1T)'
+C * ,PHKT(4,8+IIGLU1+IIGLU2), PHKK(4,NC2T),NC2T
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+C PHKT(5,8) =PHKK(5,NC2T)
+ XMIST =(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,8+IIGLU1+IIGLU2) =SQRT(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,8+IIGLU1+IIGLU2) =VHKK(1,NC2T)
+ VHKT(2,8+IIGLU1+IIGLU2) =VHKK(2,NC2T)
+ VHKT(3,8+IIGLU1+IIGLU2) =VHKK(3,NC2T)
+ VHKT(4,8+IIGLU1+IIGLU2) =VHKK(4,NC2T)
+ WHKT(1,8+IIGLU1+IIGLU2) =WHKK(1,NC2T)
+ WHKT(2,8+IIGLU1+IIGLU2) =WHKK(2,NC2T)
+ WHKT(3,8+IIGLU1+IIGLU2) =WHKK(3,NC2T)
+ WHKT(4,8+IIGLU1+IIGLU2) =WHKK(4,NC2T)
+ IDHKT(9+IIGLU1+IIGLU2) =88888
+ ISTHKT(9+IIGLU1+IIGLU2) =95
+ JMOHKT(1,9+IIGLU1+IIGLU2)=7+IIGLU1
+ JMOHKT(2,9+IIGLU1+IIGLU2)=8+IIGLU1+IIGLU2
+ JDAHKT(1,9+IIGLU1+IIGLU2)=0
+ JDAHKT(2,9+IIGLU1+IIGLU2)=0
+**NEW
+C PHKT(1,9+IIGLU1+IIGLU2)
+C * =PHKT(1,7+IIGLU1+IIGLU2)+PHKT(1,8+IIGLU1+IIGLU2)+PG1
+C PHKT(2,9+IIGLU1+IIGLU2)
+C * =PHKT(2,7+IIGLU1+IIGLU2)+PHKT(2,8+IIGLU1+IIGLU2)+PG2
+C PHKT(3,9+IIGLU1+IIGLU2)
+C * =PHKT(3,7+IIGLU1+IIGLU2)+PHKT(3,8+IIGLU1+IIGLU2)+PG3
+C PHKT(4,9+IIGLU1+IIGLU2)
+C * =PHKT(4,7+IIGLU1+IIGLU2)+PHKT(4,8+IIGLU1+IIGLU2)+PG4
+ PHKT(1,9+IIGLU1+IIGLU2)
+ * =PHKT(1,7+IIGLU1)+PHKT(1,8+IIGLU1+IIGLU2)+PG1
+ PHKT(2,9+IIGLU1+IIGLU2)
+ * =PHKT(2,7+IIGLU1)+PHKT(2,8+IIGLU1+IIGLU2)+PG2
+ PHKT(3,9+IIGLU1+IIGLU2)
+ * =PHKT(3,7+IIGLU1)+PHKT(3,8+IIGLU1+IIGLU2)+PG3
+ PHKT(4,9+IIGLU1+IIGLU2)
+ * =PHKT(4,7+IIGLU1)+PHKT(4,8+IIGLU1+IIGLU2)+PG4
+**
+ XMIST
+ * =(PHKT(4,9+IIGLU1+IIGLU2)**2-PHKT(1,9+IIGLU1+IIGLU2)**2
+ * -PHKT(2,9+IIGLU1+IIGLU2)**2
+ * -PHKT(3,9+IIGLU1+IIGLU2)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,9+IIGLU1+IIGLU2)
+ * =SQRT(PHKT(4,9+IIGLU1+IIGLU2)**2-PHKT(1,9+IIGLU1+IIGLU2)**2
+ * -PHKT(2,9+IIGLU1+IIGLU2)**2
+ * -PHKT(3,9+IIGLU1+IIGLU2)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ IF(IPIP.GE.2)THEN
+C IF(NUMEV.EQ.-324)THEN
+C WRITE(6,*)7+IIGLU1,ISTHKT(7+IIGLU1),IDHKT(7+IIGLU1),
+C * JMOHKT(1,7+IIGLU1),JMOHKT(2,7+IIGLU1),JDAHKT(1,7+IIGLU1),
+C *JDAHKT(2,7+IIGLU1),(PHKT(III,7+IIGLU1),III=1,5)
+C DO 91 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+C WRITE(6,*)IIG,ISTHKT(IIG),IDHKT(IIG),JMOHKT(1,IIG),JMOHKT(2,IIG),
+C * JDAHKT(1,IIG),
+C *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+C 91 CONTINUE
+C WRITE(6,*)8+IIGLU1+IIGLU2,ISTHKT(8+IIGLU1+IIGLU2),
+C * IDHKT(8+IIGLU1+IIGLU2),JMOHKT(1,8+IIGLU1+IIGLU2),
+C *JMOHKT(2,8+IIGLU1+IIGLU2),JDAHKT(1,8+IIGLU1+IIGLU2),
+C *JDAHKT(2,8+IIGLU1+IIGLU2),(PHKT(III,8+IIGLU1+IIGLU2),III=1,5)
+C WRITE(6,*)9+IIGLU1+IIGLU2,ISTHKT(9+IIGLU1+IIGLU2),
+C * IDHKT(9+IIGLU1+IIGLU2),JMOHKT(1,9+IIGLU1+IIGLU2),
+C *JMOHKT(2,9+IIGLU1+IIGLU2),JDAHKT(1,9+IIGLU1+IIGLU2),
+C *JDAHKT(2,9+IIGLU1+IIGLU2),(PHKT(III,9+IIGLU1+IIGLU2),III=1,5)
+ ENDIF
+ CHAMAL=CHAB1
+ IF(IPIP.EQ.1)THEN
+ IF(IP1.GE.3.OR.IPP2.GE.3.OR.ISQ1.GE.3)CHAMAL=CHAB3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP1.LE.-3.OR.IPP2.LE.-3.OR.ISQ1.GE.9)CHAMAL=CHAB3
+ ENDIF
+ IF(PHKT(5,9+IIGLU1+IIGLU2).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MUSQBS1 jump back from chain 9',
+C * 'CHAMAL,PHKT(5,9+IIGLU1+IIGLU2)',CHAMAL,PHKT(5,9+IIGLU1+IIGLU2)
+ GO TO 3466
+ ENDIF
+ VHKT(1,9+IIGLU1+IIGLU2) =VHKK(1,NC1)
+ VHKT(2,9+IIGLU1+IIGLU2) =VHKK(2,NC1)
+ VHKT(3,9+IIGLU1+IIGLU2) =VHKK(3,NC1)
+ VHKT(4,9+IIGLU1+IIGLU2) =VHKK(4,NC1)
+ WHKT(1,9+IIGLU1+IIGLU2) =WHKK(1,NC1)
+ WHKT(2,9+IIGLU1+IIGLU2) =WHKK(2,NC1)
+ WHKT(3,9+IIGLU1+IIGLU2) =WHKK(3,NC1)
+ WHKT(4,9+IIGLU1+IIGLU2) =WHKK(4,NC1)
+C
+ IPCO=0
+ IGCOUN=9+IIGLU1+IIGLU2
+ RETURN
+ END
+C
+C
+C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ SUBROUTINE MGSQBS2(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+ * IP1,IP21,IP22,IPP11,IPP12,IPP2,IPIP,ISQ,IGCOUN)
+C
+C GSQBS-2 diagram (split target diquark)
+C
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+
+C
+ PARAMETER (NTMHKK= 300)
+ COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+ +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+ +(4,NTMHKK)
+
+*KEEP,XSEADI.
+ COMMON /XSEADI/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ +SSMIMQ,VVMTHR
+*KEEP,DPRIN.
+ COMMON /DPRIN/ IPRI,IPEV,IPPA,IPCO,INIT,IPHKK,ITOPD,IPAUPR
+C
+C GSQBS-2 diagram (split target diquark)
+C
+C
+C Input chain 1(NC1) valence-quark(NC1P)-valence-diquark(NC1T)
+C Input chain 2(NC2) valence-diquark(NC2P)-sea-quark(NC2T)
+C
+C Create antiquark(aqsP)-quark(qsT) pair, energy from NC1P and NC1T
+C Split remaining valence diquark(NC1T) into quarks vq1T and vq2T
+C
+C Create chains 3 valence-diquark(NC2P 1)-valence-quark(vq1T 2)
+C 6 sea-antiquark(aqsP 4)-valence-quark(vq2T 5)
+C 9 valence-quark(NC1P 7)-diquark(NC2T+qsT 8)
+C
+C
+C
+C Put new chains into COMMON /HKKTMP/
+C
+ IIGLU1=NC1T-NC1P-1
+ IIGLU2=NC2T-NC2P-1
+ IGCOUN=0
+C WRITE(6,*)' IIGLU1,IIGLU2 ',IIGLU1,IIGLU2
+ CVQ=1.D0
+ IREJ=0
+C IF(IPIP.EQ.2)THEN
+C WRITE(6,*)' MGSQBS2(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,',
+C * 'IP1,IP21,IP22,IPP11,IPP12,IPP2,IPIP,IGCOUN)',
+C *NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+C * IP1,IP21,IP22,IPP11,IPP12,IPP2,IPIP,IGCOUN
+C ENDIF
+C
+C
+C
+C determine x-values of NC1T diquark
+ XDIQT=PHKK(4,NC1T)*2.D0/UMO
+ XVQP=PHKK(4,NC1P)*2.D0/UMO
+C
+C determine x-values of sea quark pair
+C
+ IPCO=1
+ ICOU=0
+ 2234 CONTINUE
+ ICOU=ICOU+1
+ IF(ICOU.GE.500)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)' MGSQBS2 Rejection 2234 ICOU. GT.500'
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MGSQBS2 call XSEAPA: UMO,XDIQT,XVQP ',
+ * UMO, XDIQT,XVQP
+ XSQ=0.D0
+ XSAQ=0.D0
+**NEW
+C CALL XSEAPA(UMO,XDIQT/2.D0,ISQ,ISAQ,XSQ,XSAQ,IREJ)
+ IF (IPIP.EQ.1) THEN
+ XQMAX = XDIQT/2.0D0
+ XAQMAX = 2.D0*XVQP/3.0D0
+ ELSE
+ XQMAX = 2.D0*XVQP/3.0D0
+ XAQMAX = XDIQT/2.0D0
+ ENDIF
+ CALL DT_CQPAIR(XQMAX,XAQMAX,XSQ,XSAQ,ISQ,IREJ)
+ ISAQ = 6+ISQ
+C write(*,*) 'MGSQBS2: ',ISQ,XSQ,XDIQT,XSAQ,XVQP
+**
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MGSQBS2 after XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IF(IREJ.GE.1)THEN
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MGSQBS2 reject XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPIP.EQ.1)THEN
+ IF(XSAQ.GE.2.D0*XVQP/3.D0)GO TO 2234
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(XSQ.GE.2.D0*XVQP/3.D0)GO TO 2234
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,4E12.4)')' MGSQBS2 XDIQT,XVQP,XSQ,XSAQ ',
+ * XDIQT,XVQP,XSQ,XSAQ
+ ENDIF
+C
+C subtract xsq,xsaq from NC1T diquark and NC1P quark
+C
+C XSQ=0.D0
+ IF(IPIP.EQ.1)THEN
+ XDIQT=XDIQT-XSQ
+ XVQP =XVQP -XSAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XDIQT=XDIQT-XSAQ
+ XVQP =XVQP -XSQ
+ ENDIF
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'XDIQT,XVQP after subtraction',XDIQT,XVQP
+C
+C Split remaining valence diquark(NC1T) into quarks vq1T and vq2T
+C
+ XVTHRO=CVQ/UMO
+ IVTHR=0
+ 3466 CONTINUE
+ IF(IVTHR.EQ.10)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MGSQBS2 3466 reject IVTHR 10'
+ IPCO=0
+ RETURN
+ ENDIF
+ IVTHR=IVTHR+1
+ XVTHR=XVTHRO/(201-IVTHR)
+ UNOPRV=UNON
+ 380 CONTINUE
+ IF(XVTHR.GT.0.66D0*XDIQT)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MGSQBS2 Rejection 380 XVTHR large ',
+ * XVTHR
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(DT_RNDM(V).LT.0.5D0)THEN
+ XVTQI=DT_SAMPEX(XVTHR,0.66D0*XDIQT)
+ XVTQII=XDIQT-XVTQI
+ ELSE
+ XVTQII=DT_SAMPEX(XVTHR,0.66D0*XDIQT)
+ XVTQI=XDIQT-XVTQII
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,2E12.4)')' MGSQBS2:XVTQI,XVTQII ',XVTQI,XVTQII
+ ENDIF
+C
+C Prepare 4 momenta of new chains and chain ends
+C
+C COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+C +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+C +(4,NTMHKK)
+C
+C Create chains 3 valence-diquark(NC2P 1)-valence-quark(vq1T 2)
+C 6 sea-antiquark(aqsP 4)-valence-quark(vq2T 5)
+C 9 valence-quark(NC1P 7)-diquark(NC2T+qsT 8)
+C
+C SUBROUTINE MGSQBS2(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+C * IP1,IP21,IP22,IPP11,IPP12,IPP2,IGCOUN)
+C
+ IF(IPIP.EQ.1)THEN
+ XSQ1=XSQ
+ XSAQ1=XSAQ
+ ISQ1=ISQ
+ ISAQ1=ISAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XSQ1=XSAQ
+ XSAQ1=XSQ
+ ISQ1=ISAQ
+ ISAQ1=ISQ
+ ENDIF
+ KK11=IP21
+C IDHKT(1) =1000*IPP11+100*IPP12+1
+ KK21=IPP11
+ KK22=IPP12
+ XGIVE=0.D0
+ IF(IPIP.EQ.1)THEN
+ IDHKT(4+IIGLU1) =-(ISAQ1-6)
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(4+IIGLU1) =ISAQ1
+ ENDIF
+ ISTHKT(4+IIGLU1) =961
+ JMOHKT(1,4+IIGLU1)=NC1P
+ JMOHKT(2,4+IIGLU1)=0
+ JDAHKT(1,4+IIGLU1)=6+IIGLU1
+ JDAHKT(2,4+IIGLU1)=0
+C create chain 6 sea-antiquark(aqsP 4)-valence-quark(vq2T 5)
+ PHKT(1,4+IIGLU1) =PHKK(1,NC1P)*XSAQ1/(XVQP+XSAQ1)
+ PHKT(2,4+IIGLU1) =PHKK(2,NC1P)*XSAQ1/(XVQP+XSAQ1)
+ PHKT(3,4+IIGLU1) =PHKK(3,NC1P)*XSAQ1/(XVQP+XSAQ1)
+ PHKT(4,4+IIGLU1) =PHKK(4,NC1P)*XSAQ1/(XVQP+XSAQ1)
+C PHKT(5,4+IIGLU1) =PHKK(5,NC1P)
+ XXMIST=(PHKT(4,4+IIGLU1)**2-
+ * PHKT(3,4+IIGLU1)**2-PHKT(2,4+IIGLU1)**2-
+ *PHKT(1,4+IIGLU1)**2)
+ IF(XXMIST.GT.0.D0)THEN
+ PHKT(5,4+IIGLU1) =SQRT(XXMIST)
+ ELSE
+ WRITE(LOUT,*)'MGSQBS2 XXMIST',XXMIST
+ XXMIST=ABS(XXMIST)
+ PHKT(5,4+IIGLU1) =SQRT(XXMIST)
+ ENDIF
+ VHKT(1,4+IIGLU1) =VHKK(1,NC1P)
+ VHKT(2,4+IIGLU1) =VHKK(2,NC1P)
+ VHKT(3,4+IIGLU1) =VHKK(3,NC1P)
+ VHKT(4,4+IIGLU1) =VHKK(4,NC1P)
+ WHKT(1,4+IIGLU1) =WHKK(1,NC1P)
+ WHKT(2,4+IIGLU1) =WHKK(2,NC1P)
+ WHKT(3,4+IIGLU1) =WHKK(3,NC1P)
+ WHKT(4,4+IIGLU1) =WHKK(4,NC1P)
+ IDHKT(5+IIGLU1) =IP22
+ ISTHKT(5+IIGLU1) =962
+ JMOHKT(1,5+IIGLU1)=NC1T
+ JMOHKT(2,5+IIGLU1)=0
+ JDAHKT(1,5+IIGLU1)=6+IIGLU1
+ JDAHKT(2,5+IIGLU1)=0
+ PHKT(1,5+IIGLU1) =PHKK(1,NC1T)*XVTQII/(XDIQT+XSQ1)
+ PHKT(2,5+IIGLU1) =PHKK(2,NC1T)*XVTQII/(XDIQT+XSQ1)
+ PHKT(3,5+IIGLU1) =PHKK(3,NC1T)*XVTQII/(XDIQT+XSQ1)
+ PHKT(4,5+IIGLU1) =PHKK(4,NC1T)*XVTQII/(XDIQT+XSQ1)
+C PHKT(5,5+IIGLU1) =PHKK(5,NC1T)
+ XXMIST=(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ IF(XXMIST.GT.0.D0)THEN
+ PHKT(5,5+IIGLU1) =SQRT(XXMIST)
+ ELSE
+ WRITE(LOUT,*)' MGSQBS2 XXMIST', XXMIST
+ XXMIST=ABS(XXMIST)
+ PHKT(5,5+IIGLU1) =SQRT(XXMIST)
+ ENDIF
+ VHKT(1,5+IIGLU1) =VHKK(1,NC1T)
+ VHKT(2,5+IIGLU1) =VHKK(2,NC1T)
+ VHKT(3,5+IIGLU1) =VHKK(3,NC1T)
+ VHKT(4,5+IIGLU1) =VHKK(4,NC1T)
+ WHKT(1,5+IIGLU1) =WHKK(1,NC1T)
+ WHKT(2,5+IIGLU1) =WHKK(2,NC1T)
+ WHKT(3,5+IIGLU1) =WHKK(3,NC1T)
+ WHKT(4,5+IIGLU1) =WHKK(4,NC1T)
+ IDHKT(6+IIGLU1) =88888
+ ISTHKT(6+IIGLU1) =96
+ JMOHKT(1,6+IIGLU1)=4+IIGLU1
+ JMOHKT(2,6+IIGLU1)=5+IIGLU1
+ JDAHKT(1,6+IIGLU1)=0
+ JDAHKT(2,6+IIGLU1)=0
+ PHKT(1,6+IIGLU1) =PHKT(1,4+IIGLU1)+PHKT(1,5+IIGLU1)
+ PHKT(2,6+IIGLU1) =PHKT(2,4+IIGLU1)+PHKT(2,5+IIGLU1)
+ PHKT(3,6+IIGLU1) =PHKT(3,4+IIGLU1)+PHKT(3,5+IIGLU1)
+ PHKT(4,6+IIGLU1) =PHKT(4,4+IIGLU1)+PHKT(4,5+IIGLU1)
+ PHKT(5,6+IIGLU1)
+ * =SQRT(PHKT(4,6+IIGLU1)**2-PHKT(1,6+IIGLU1)**2-PHKT(2,6+IIGLU1)**2
+ * -PHKT(3,6+IIGLU1)**2)
+ CHAMAL=CHAM1
+ IF(IPIP.EQ.1)THEN
+ IF(IP22.GE.3.OR.ISAQ1.GE.9)CHAMAL=CHAM3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP22.LE.-3.OR.ISAQ1.GE.3)CHAMAL=CHAM3
+ ENDIF
+C---------------------------------------------------
+ IF(PHKT(5,6+IIGLU1).LT.CHAMAL)THEN
+ IF(IDHKT(5+IIGLU1).EQ.-IDHKT(4+IIGLU1))THEN
+C we drop chain 6 and give the energy to chain 3
+ IDHKT(6+IIGLU1)=22888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1'
+ GO TO 7788
+ ELSEIF(IDHKT(4+IIGLU1).EQ.-IP21)THEN
+C we drop chain 6 and give the energy to chain 3
+C and change KK11 to IDHKT(5)
+ IDHKT(6+IIGLU1)=22888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1 KK11=IDHKT(5)'
+ KK11=IDHKT(5+IIGLU1)
+ GO TO 7788
+ ELSEIF(IDHKT(4+IIGLU1).EQ.-IPP11)THEN
+C we drop chain 6 and give the energy to chain 3
+C and change KK21 to IDHKT(5+IIGLU1)
+C IDHKT(1) =1000*IPP11+100*IPP12+1
+ IDHKT(6+IIGLU1)=22888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1 KK21=IDHKT(5+IIGLU1)'
+ KK21=IDHKT(5+IIGLU1)
+ GO TO 7788
+ ELSEIF(IDHKT(4+IIGLU1).EQ.-IPP12)THEN
+C we drop chain 6 and give the energy to chain 3
+C and change KK22 to IDHKT(5)
+C IDHKT(1) =1000*IPP11+100*IPP12+1
+ IDHKT(6+IIGLU1)=22888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1 KK22=IDHKT(5+IIGLU1)'
+ KK22=IDHKT(5+IIGLU1)
+ GO TO 7788
+ ENDIF
+C IREJ=1
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+ 7788 CONTINUE
+C---------------------------------------------------
+ IF(IPIP.GE.3)THEN
+ WRITE(LOUT,*)4+IIGLU1,ISTHKT(4+IIGLU1),IDHKT(4+IIGLU1),
+ * JMOHKT(1,4+IIGLU1),JMOHKT(2,4+IIGLU1),JDAHKT(1,4+IIGLU1),
+ *JDAHKT(2,4+IIGLU1),(PHKT(III,4+IIGLU1),III=1,5)
+ WRITE(LOUT,*)5+IIGLU1,ISTHKT(5+IIGLU1),IDHKT(5+IIGLU1),
+ * JMOHKT(1,5+IIGLU1),JMOHKT(2,5+IIGLU1),JDAHKT(1,5+IIGLU1),
+ *JDAHKT(2,5+IIGLU1),(PHKT(III,5+IIGLU1),III=1,5)
+ WRITE(LOUT,*)6+IIGLU1,ISTHKT(6+IIGLU1),IDHKT(6+IIGLU1),
+ * JMOHKT(1,6+IIGLU1),JMOHKT(2,6+IIGLU1),JDAHKT(1,6+IIGLU1),
+ *JDAHKT(2,6+IIGLU1),(PHKT(III,6+IIGLU1),III=1,5)
+ ENDIF
+ VHKT(1,6+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,6+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,6+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,6+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,6+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,6+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,6+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,6+IIGLU1) =WHKK(4,NC1)
+C IDHKT(1) =1000*IPP11+100*IPP12+1
+ IF(IPIP.EQ.1)THEN
+ IDHKT(1) =1000*KK21+100*KK22+3
+ IF(IDHKT(1).EQ.1203)IDHKT(1)=2103
+ IF(IDHKT(1).EQ.1303)IDHKT(1)=3103
+ IF(IDHKT(1).EQ.2303)IDHKT(1)=3203
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(1) =1000*KK21+100*KK22-3
+ IF(IDHKT(1).EQ.-1203)IDHKT(1)=-2103
+ IF(IDHKT(1).EQ.-1303)IDHKT(1)=-3103
+ IF(IDHKT(1).EQ.-2303)IDHKT(1)=-3203
+ ENDIF
+ ISTHKT(1) =961
+ JMOHKT(1,1)=NC2P
+ JMOHKT(2,1)=0
+ JDAHKT(1,1)=3+IIGLU1
+ JDAHKT(2,1)=0
+C Create chains 3 valence-diquark(NC2P 1)-valence-quark(vq1T 2)
+ PHKT(1,1) =PHKK(1,NC2P)
+ *+XGIVE*PHKT(1,4+IIGLU1)
+ PHKT(2,1) =PHKK(2,NC2P)
+ *+XGIVE*PHKT(2,4+IIGLU1)
+ PHKT(3,1) =PHKK(3,NC2P)
+ *+XGIVE*PHKT(3,4+IIGLU1)
+ PHKT(4,1) =PHKK(4,NC2P)
+ *+XGIVE*PHKT(4,4+IIGLU1)
+C PHKT(5,1) =PHKK(5,NC2P)
+ XXMIST=PHKT(4,1)**2- PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2
+ IF(XXMIST.GT.0.D0)THEN
+ PHKT(5,1) =SQRT(XXMIST)
+ ELSE
+ WRITE(LOUT,*)'MGSQBS2',XXMIST
+ XXMIST=ABS(XXMIST)
+ PHKT(5,1) =SQRT(XXMIST)
+ ENDIF
+ VHKT(1,1) =VHKK(1,NC2P)
+ VHKT(2,1) =VHKK(2,NC2P)
+ VHKT(3,1) =VHKK(3,NC2P)
+ VHKT(4,1) =VHKK(4,NC2P)
+ WHKT(1,1) =WHKK(1,NC2P)
+ WHKT(2,1) =WHKK(2,NC2P)
+ WHKT(3,1) =WHKK(3,NC2P)
+ WHKT(4,1) =WHKK(4,NC2P)
+C Add here IIGLU1 gluons to this chaina
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU1.GE.1)THEN
+ JJG=NC1P
+ DO 61 IIG=2,2+IIGLU1-1
+ KKG=JJG+IIG-1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=3+IIGLU1
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 61 CONTINUE
+ ENDIF
+C IDHKT(2) =IP21
+ IDHKT(2+IIGLU1) =KK11
+ ISTHKT(2+IIGLU1) =962
+ JMOHKT(1,2+IIGLU1)=NC1T
+ JMOHKT(2,2+IIGLU1)=0
+ JDAHKT(1,2+IIGLU1)=3+IIGLU1
+ JDAHKT(2,2+IIGLU1)=0
+ PHKT(1,2+IIGLU1) =PHKK(1,NC1T)*XVTQI/(XDIQT+XSQ1)
+C * +0.5D0*PHKK(1,NC2T)
+ *+XGIVE*PHKT(1,5+IIGLU1)
+ PHKT(2,2+IIGLU1) =PHKK(2,NC1T)*XVTQI/(XDIQT+XSQ1)
+C *+0.5D0*PHKK(2,NC2T)
+ *+XGIVE*PHKT(2,5+IIGLU1)
+ PHKT(3,2+IIGLU1) =PHKK(3,NC1T)*XVTQI/(XDIQT+XSQ1)
+C *+0.5D0*PHKK(3,NC2T)
+ *+XGIVE*PHKT(3,5+IIGLU1)
+ PHKT(4,2+IIGLU1) =PHKK(4,NC1T)*XVTQI/(XDIQT+XSQ1)
+C *+0.5D0*PHKK(4,NC2T)
+ *+XGIVE*PHKT(4,5+IIGLU1)
+C PHKT(5,2) =PHKK(5,NC1T)
+ XXMIST=(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ IF(XXMIST.GT.0.D0)THEN
+ PHKT(5,2+IIGLU1) =SQRT(XXMIST)
+ ELSE
+ WRITE(LOUT,*)'MGSQBS2 XXMIST',XXMIST
+ XXMIST=ABS(XXMIST)
+ PHKT(5,2+IIGLU1) =SQRT(XXMIST)
+ ENDIF
+ VHKT(1,2+IIGLU1) =VHKK(1,NC1T)
+ VHKT(2,2+IIGLU1) =VHKK(2,NC1T)
+ VHKT(3,2+IIGLU1) =VHKK(3,NC1T)
+ VHKT(4,2+IIGLU1) =VHKK(4,NC1T)
+ WHKT(1,2+IIGLU1) =WHKK(1,NC1T)
+ WHKT(2,2+IIGLU1) =WHKK(2,NC1T)
+ WHKT(3,2+IIGLU1) =WHKK(3,NC1T)
+ WHKT(4,2+IIGLU1) =WHKK(4,NC1T)
+ IDHKT(3+IIGLU1) =88888
+ ISTHKT(3+IIGLU1) =96
+ JMOHKT(1,3+IIGLU1)=1
+ JMOHKT(2,3+IIGLU1)=2+IIGLU1
+ JDAHKT(1,3+IIGLU1)=0
+ JDAHKT(2,3+IIGLU1)=0
+ PHKT(1,3+IIGLU1) =PHKT(1,1)+PHKT(1,2+IIGLU1)+PG1
+ PHKT(2,3+IIGLU1) =PHKT(2,1)+PHKT(2,2+IIGLU1)+PG2
+ PHKT(3,3+IIGLU1) =PHKT(3,1)+PHKT(3,2+IIGLU1)+PG3
+ PHKT(4,3+IIGLU1) =PHKT(4,1)+PHKT(4,2+IIGLU1)+PG4
+ PHKT(5,3+IIGLU1)
+ * =SQRT(PHKT(4,3+IIGLU1)**2-PHKT(1,3+IIGLU1)**2-PHKT(2,3+IIGLU1)**2
+ * -PHKT(3,3+IIGLU1)**2)
+ IF(IPIP.EQ.3)THEN
+ WRITE(LOUT,*)1,ISTHKT(1),IDHKT(1),JMOHKT(1,1),JMOHKT(2,1),
+ * JDAHKT(1,1),
+ *JDAHKT(2,1),(PHKT(III,1),III=1,5)
+ DO 71 IIG=2,2+IIGLU1-1
+ WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+ & JMOHKT(1,IIG),JMOHKT(2,IIG),
+ * JDAHKT(1,IIG),
+ *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 71 CONTINUE
+ WRITE(LOUT,*)2+IIGLU1,ISTHKT(2+IIGLU1),IDHKT(2+IIGLU1),
+ * JMOHKT(1,2+IIGLU1),JMOHKT(2,2+IIGLU1),JDAHKT(1,2+IIGLU1),
+ *JDAHKT(2,2+IIGLU1),(PHKT(III,2+IIGLU1),III=1,5)
+ WRITE(LOUT,*)3+IIGLU1,ISTHKT(3+IIGLU1),IDHKT(3+IIGLU1),
+ * JMOHKT(1,3+IIGLU1),JMOHKT(2,3+IIGLU1),JDAHKT(1,3+IIGLU1),
+ *JDAHKT(2,3+IIGLU1),(PHKT(III,3+IIGLU1),III=1,5)
+ ENDIF
+ CHAMAL=CHAB1
+ IF(IPIP.EQ.1)THEN
+ IF(IPP11.GE.3.OR.IPP12.GE.3.OR.IP21.GE.3)CHAMAL=CHAB3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IPP11.LE.-3.OR.IPP12.LE.-3.OR.IP21.LE.-3)CHAMAL=CHAB3
+ ENDIF
+ IF(PHKT(5,3+IIGLU1).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+ VHKT(1,3+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,3+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,3+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,3+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,3+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,3+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,3+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,3+IIGLU1) =WHKK(4,NC1)
+C IDHKT(7+IIGLU1) =1000*IPP1+100*ISQ+1
+ IDHKT(7+IIGLU1) =IP1
+ ISTHKT(7+IIGLU1) =961
+ JMOHKT(1,7+IIGLU1)=NC1P
+ JMOHKT(2,7+IIGLU1)=0
+ JDAHKT(1,7+IIGLU1)=9+IIGLU1+IIGLU2
+ JDAHKT(2,7+IIGLU1)=0
+ PHKT(1,7+IIGLU1) =PHKK(1,NC1P)*XVQP/(XVQP+XSAQ1)
+ PHKT(2,7+IIGLU1) =PHKK(2,NC1P)*XVQP/(XVQP+XSAQ1)
+ PHKT(3,7+IIGLU1) =PHKK(3,NC1P)*XVQP/(XVQP+XSAQ1)
+ PHKT(4,7+IIGLU1) =PHKK(4,NC1P)*XVQP/(XVQP+XSAQ1)
+C PHKT(5,7+IIGLU1) =PHKK(5,NC1P)
+ XXMIST=(PHKT(4,7+IIGLU1)**2-
+ * PHKT(3,7+IIGLU1)**2-PHKT(2,7+IIGLU1)**2-
+ *PHKT(1,7+IIGLU1)**2)
+ IF(XXMIST.GT.0.D0)THEN
+ PHKT(5,7+IIGLU1) =SQRT(XXMIST)
+ ELSE
+ WRITE(LOUT,*)' MGSQBS2, XXMIST',XXMIST
+ XXMIST=ABS(XXMIST)
+ PHKT(5,7+IIGLU1) =SQRT(XXMIST)
+ ENDIF
+ VHKT(1,7+IIGLU1) =VHKK(1,NC1P)
+ VHKT(2,7+IIGLU1) =VHKK(2,NC1P)
+ VHKT(3,7+IIGLU1) =VHKK(3,NC1P)
+ VHKT(4,7+IIGLU1) =VHKK(4,NC1P)
+ WHKT(1,7+IIGLU1) =WHKK(1,NC1P)
+ WHKT(2,7+IIGLU1) =WHKK(2,NC1P)
+ WHKT(3,7+IIGLU1) =WHKK(3,NC1P)
+ WHKT(4,7+IIGLU1) =WHKK(4,NC2P)
+C IDHKT(7) =1000*IPP1+100*ISQ+1
+C Insert here the IIGLU2 gluons
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU2.GE.1)THEN
+ JJG=NC2P
+ DO 81 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ KKG=JJG+IIG-7-IIGLU1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=9+IIGLU1+IIGLU2
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 81 CONTINUE
+ ENDIF
+ IF(IPIP.EQ.1)THEN
+ IDHKT(8+IIGLU1+IIGLU2) =1000*IPP2+100*ISQ1+3
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.1203)IDHKT(8+IIGLU1+IIGLU2)=2103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.1303)IDHKT(8+IIGLU1+IIGLU2)=3103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.2303)IDHKT(8+IIGLU1+IIGLU2)=3203
+ ELSEIF(IPIP.EQ.2)THEN
+**NEW
+C IDHKT(8) =1000*IPP2+100*(-ISQ1+6)-3
+ IDHKT(8+IIGLU1+IIGLU2) =1000*IPP2+100*(-ISQ1+6)-3
+**
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.-1203)IDHKT(8+IIGLU1+IIGLU2)=-2103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.-1303)IDHKT(8+IIGLU1+IIGLU2)=-3103
+ IF(IDHKT(8+IIGLU1+IIGLU2).EQ.-2303)IDHKT(8+IIGLU1+IIGLU2)=-3203
+ ENDIF
+ ISTHKT(8+IIGLU1+IIGLU2) =962
+ JMOHKT(1,8+IIGLU1+IIGLU2)=NC2T
+ JMOHKT(2,8+IIGLU1+IIGLU2)=0
+ JDAHKT(1,8+IIGLU1+IIGLU2)=9+IIGLU1+IIGLU2
+ JDAHKT(2,8+IIGLU1+IIGLU2)=0
+C PHKT(1,8) =0.5D0*PHKK(1,NC2T)+PHKK(1,NC1T)*XSQ/(XDIQT+XSQ)
+C PHKT(2,8) =0.5D0*PHKK(2,NC2T)+PHKK(2,NC1T)*XSQ/(XDIQT+XSQ)
+C PHKT(3,8) =0.5D0*PHKK(3,NC2T)+PHKK(3,NC1T)*XSQ/(XDIQT+XSQ)
+C PHKT(4,8) =0.5D0*PHKK(4,NC2T)+PHKK(4,NC1T)*XSQ/(XDIQT+XSQ)
+ PHKT(1,8+IIGLU1+IIGLU2) =
+ * PHKK(1,NC2T)+PHKK(1,NC1T)*XSQ1/(XDIQT+XSQ1)
+ PHKT(2,8+IIGLU1+IIGLU2) =
+ * PHKK(2,NC2T)+PHKK(2,NC1T)*XSQ1/(XDIQT+XSQ1)
+ PHKT(3,8+IIGLU1+IIGLU2) =
+ * PHKK(3,NC2T)+PHKK(3,NC1T)*XSQ1/(XDIQT+XSQ1)
+ PHKT(4,8+IIGLU1+IIGLU2) =
+ * PHKK(4,NC2T)+PHKK(4,NC1T)*XSQ1/(XDIQT+XSQ1)
+C WRITE(6,*)'PHKK(4,NC1T),PHKK(4,NC2T), PHKT(4,7)',
+C * PHKK(4,NC1T),PHKK(4,NC2T), PHKT(4,7)
+ IF(PHKT(4,8+IIGLU1+IIGLU2).GE. PHKK(4,NC1T))THEN
+C IREJ=1
+C WRITE(6,*)'reject PHKT(4,8+IIGLU1+IIGLU2).GE. PHKK(4,NC1T)'
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+C PHKT(5,8) =PHKK(5,NC2T)
+ PHKT(5,8+IIGLU1+IIGLU2) =SQRT(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ VHKT(1,8+IIGLU1+IIGLU2) =VHKK(1,NC2T)
+ VHKT(2,8+IIGLU1+IIGLU2) =VHKK(2,NC2T)
+ VHKT(3,8+IIGLU1+IIGLU2) =VHKK(3,NC2T)
+ VHKT(4,8+IIGLU1+IIGLU2) =VHKK(4,NC2T)
+ WHKT(1,8+IIGLU1+IIGLU2) =WHKK(1,NC2T)
+ WHKT(2,8+IIGLU1+IIGLU2) =WHKK(2,NC2T)
+ WHKT(3,8+IIGLU1+IIGLU2) =WHKK(3,NC2T)
+ WHKT(4,8+IIGLU1+IIGLU2) =WHKK(4,NC2T)
+ IDHKT(9+IIGLU1+IIGLU2) =88888
+ ISTHKT(9+IIGLU1+IIGLU2) =96
+ JMOHKT(1,9+IIGLU1+IIGLU2)=7+IIGLU1
+ JMOHKT(2,9+IIGLU1+IIGLU2)=8+IIGLU1+IIGLU2
+ JDAHKT(1,9+IIGLU1+IIGLU2)=0
+ JDAHKT(2,9+IIGLU1+IIGLU2)=0
+ PHKT(1,9+IIGLU1+IIGLU2)
+ * =PHKT(1,7+IIGLU1)+PHKT(1,8+IIGLU1+IIGLU2)+PG1
+ PHKT(2,9+IIGLU1+IIGLU2)
+ * =PHKT(2,7+IIGLU1)+PHKT(2,8+IIGLU1+IIGLU2)+PG2
+ PHKT(3,9+IIGLU1+IIGLU2)
+ * =PHKT(3,7+IIGLU1)+PHKT(3,8+IIGLU1+IIGLU2)+PG3
+ PHKT(4,9+IIGLU1+IIGLU2)
+ * =PHKT(4,7+IIGLU1)+PHKT(4,8+IIGLU1+IIGLU2)+PG4
+ PHKT(5,9+IIGLU1+IIGLU2)
+ * =SQRT(PHKT(4,9+IIGLU1+IIGLU2)**2-PHKT(1,9+IIGLU1+IIGLU2)**2-
+ * PHKT(2,9+IIGLU1+IIGLU2)**2
+ * -PHKT(3,9+IIGLU1+IIGLU2)**2)
+ IF(IPIP.GE.3)THEN
+ WRITE(LOUT,*)7+IIGLU1,ISTHKT(7+IIGLU1),IDHKT(7+IIGLU1),
+ * JMOHKT(1,7+IIGLU1),JMOHKT(2,7+IIGLU1),JDAHKT(1,7+IIGLU1),
+ *JDAHKT(2,7+IIGLU1),(PHKT(III,7+IIGLU1),III=1,5)
+ DO 91 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+ & JMOHKT(1,IIG),JMOHKT(2,IIG),
+ * JDAHKT(1,IIG),
+ *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 91 CONTINUE
+ WRITE(LOUT,*)8+IIGLU1+IIGLU2,ISTHKT(8+IIGLU1+IIGLU2),
+ * IDHKT(8+IIGLU1+IIGLU2),JMOHKT(1,8+IIGLU1+IIGLU2),
+ *JMOHKT(2,8+IIGLU1+IIGLU2),JDAHKT(1,8+IIGLU1+IIGLU2),
+ *JDAHKT(2,8+IIGLU1+IIGLU2),(PHKT(III,8+IIGLU1+IIGLU2),III=1,5)
+ WRITE(LOUT,*)9+IIGLU1+IIGLU2,ISTHKT(9+IIGLU1+IIGLU2),
+ * IDHKT(9+IIGLU1+IIGLU2),JMOHKT(1,9+IIGLU1+IIGLU2),
+ *JMOHKT(2,9+IIGLU1+IIGLU2),JDAHKT(1,9+IIGLU1+IIGLU2),
+ *JDAHKT(2,9+IIGLU1+IIGLU2),(PHKT(III,9+IIGLU1+IIGLU2),III=1,5)
+ ENDIF
+ CHAMAL=CHAB1
+ IF(IPIP.EQ.1)THEN
+ IF(IP1.GE.3.OR.IPP2.GE.3.OR.ISQ1.GE.3)CHAMAL=CHAB3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP1.LE.-3.OR.IPP2.LE.-3.OR.ISQ1.GE.9)CHAMAL=CHAB3
+ ENDIF
+ IF(PHKT(5,9+IIGLU1+IIGLU2).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+ VHKT(1,9+IIGLU1+IIGLU2) =VHKK(1,NC1)
+ VHKT(2,9+IIGLU1+IIGLU2) =VHKK(2,NC1)
+ VHKT(3,9+IIGLU1+IIGLU2) =VHKK(3,NC1)
+ VHKT(4,9+IIGLU1+IIGLU2) =VHKK(4,NC1)
+ WHKT(1,9+IIGLU1+IIGLU2) =WHKK(1,NC1)
+ WHKT(2,9+IIGLU1+IIGLU2) =WHKK(2,NC1)
+ WHKT(3,9+IIGLU1+IIGLU2) =WHKK(3,NC1)
+ WHKT(4,9+IIGLU1+IIGLU2) =WHKK(4,NC1)
+C
+ IPCO=0
+ IGCOUN=9+IIGLU1+IIGLU2
+ RETURN
+ END
+C
+C
+C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ SUBROUTINE MUSQBS1(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+ * IP11,IP12,IP2,IPP1,IPP2,IPIP,ISQ,IGCOUN)
+C
+C USQBS-1 diagram (split projectile diquark)
+C
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+
+C
+ PARAMETER (NTMHKK= 300)
+ COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+ +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+ +(4,NTMHKK)
+*KEEP,XSEADI.
+ COMMON /XSEADI/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ +SSMIMQ,VVMTHR
+*KEEP,DPRIN.
+ COMMON /DPRIN/ IPRI,IPEV,IPPA,IPCO,INIT,IPHKK,ITOPD,IPAUPR
+ COMMON /EVFLAG/ NUMEV
+C
+C USQBS-1 diagram (split projectile diquark)
+C
+C Input chain 1(NC1) valence-diquark(NC1P)-valence-quark(NC1T)
+C Input chain 2(NC2) sea-quark(NC2P)-sea-antiquark(NC2T)
+C
+C Create quark(qsP)-antiquark(aqsT) pair, energy from NC1P and NC1T
+C Split remaining valence diquark(NC1P) into quarks vq1P and vq2P
+C
+C Create chains 3 valence quark(vq1P 1)-sea-antiquark(NC2T 2)
+C 6 valence quark(vq2P 4)-sea-quark(aqsT 5)
+C 9 diquark(qsP+NC2P 7)-valence quark(NC1T 8)
+C
+C Put new chains into COMMON /HKKTMP/
+C
+ IIGLU1=NC1T-NC1P-1
+ IIGLU2=NC2T-NC2P-1
+ IGCOUN=0
+C WRITE(6,*)'MUSQBS1: IIGLU1,IIGLU2,IPIP ',IIGLU1,IIGLU2,IPIP
+ CVQ=1.D0
+ IREJ=0
+ IF(IPIP.EQ.3)THEN
+C IF(NUMEV.EQ.-324)THEN
+ WRITE(LOUT,*)' MUSQBS1(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,',
+ * ' IP11,IP12,IP2,IPP1,IPP2,IPIP,IGCOUN)',
+ *NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+ * IP11,IP12,IP2,IPP1,IPP2,IPIP,IGCOUN
+ ENDIF
+C
+C
+C
+C determine x-values of NC1P diquark
+ XDIQP=PHKK(4,NC1P)*2.D0/UMO
+ XVQT=PHKK(4,NC1T)*2.D0/UMO
+C
+C determine x-values of sea quark pair
+C
+ IPCO=1
+ ICOU=0
+ 2234 CONTINUE
+ ICOU=ICOU+1
+ IF(ICOU.GE.500)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MUSQBS1 Rejection 2234 ICOU. GT.100'
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPCO.GE.3)WRITE(LOUT,*)'MUSQBS1 call XSEAPA: UMO,XDIQP,XVQT ',
+ * UMO, XDIQP,XVQT
+ XSQ=0.D0
+ XSAQ=0.D0
+**NEW
+C CALL XSEAPA(UMO,XDIQP/2.D0,ISQ,ISAQ,XSQ,XSAQ,IREJ)
+ IF (IPIP.EQ.1) THEN
+ XQMAX = XDIQP/2.0D0
+ XAQMAX = 2.D0*XVQT/3.0D0
+ ELSE
+ XQMAX = 2.D0*XVQT/3.0D0
+ XAQMAX = XDIQP/2.0D0
+ ENDIF
+ CALL DT_CQPAIR(XQMAX,XAQMAX,XSQ,XSAQ,ISQ,IREJ)
+ ISAQ = 6+ISQ
+C write(*,*) 'MUSQBS1: ',ISQ,XSQ,XDIQP,XSAQ,XVQT
+**
+ IF(IPCO.GE.3)WRITE(LOUT,*)'MUSQBS1 after XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IF(IREJ.GE.1)THEN
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MUSQBS1 reject XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPIP.EQ.1)THEN
+ IF(XSAQ.GE.2.D0*XVQT/3.D0)GO TO 2234
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(XSQ.GE.2.D0*XVQT/3.D0)GO TO 2234
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,4E12.4)')' MUSQBS1 XDIQP,XVQT,XSQ,XSAQ ',
+ * XDIQP,XVQT,XSQ,XSAQ
+ ENDIF
+C
+C subtract xsq,xsaq from NC1P diquark and NC1T quark
+C
+C XSQ=0.D0
+ IF(IPIP.EQ.1)THEN
+ XDIQP=XDIQP-XSQ
+ XVQT =XVQT -XSAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XDIQP=XDIQP-XSAQ
+ XVQT =XVQT -XSQ
+ ENDIF
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'XDIQP,XVQT after subtraction',XDIQP,XVQT
+C
+C Split remaining valence diquark(NC1P) into quarks vq1P and vq2P
+C
+ XVTHRO=CVQ/UMO
+ IVTHR=0
+ 3466 CONTINUE
+ IF(IVTHR.EQ.10)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MUSQBS1 3466 reject IVTHR 10'
+ IPCO=0
+ RETURN
+ ENDIF
+ IVTHR=IVTHR+1
+ XVTHR=XVTHRO/(201-IVTHR)
+ UNOPRV=UNON
+ 380 CONTINUE
+ IF(XVTHR.GT.0.66D0*XDIQP)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MUSQBS1 Rejection 380 XVTHR large ',
+ * XVTHR
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(DT_RNDM(V).LT.0.5D0)THEN
+ XVPQI=DT_SAMPEX(XVTHR,0.66D0*XDIQP)
+ XVPQII=XDIQP-XVPQI
+ ELSE
+ XVPQII=DT_SAMPEX(XVTHR,0.66D0*XDIQP)
+ XVPQI=XDIQP-XVPQII
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,2E12.4)')' MUSQBS1:XVPQI,XVPQII ',XVPQI,XVPQII
+ ENDIF
+C
+C Prepare 4 momenta of new chains and chain ends
+C
+C COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+C +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+C +(4,NTMHKK)
+C Create chains 3 valence quark(vq1P 1)-sea-antiquark(NC2T 2)
+C 6 valence quark(vq2P 4)-sea-quark(aqsT 5)
+C 9 diquark(qsP+NC2P 7)-valence quark(NC1T 8)
+ IF(IPIP.EQ.1)THEN
+ XSQ1=XSQ
+ XSAQ1=XSAQ
+ ISQ1=ISQ
+ ISAQ1=ISAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XSQ1=XSAQ
+ XSAQ1=XSQ
+ ISQ1=ISAQ
+ ISAQ1=ISQ
+ ENDIF
+ IDHKT(1) =IP11
+ ISTHKT(1) =931
+ JMOHKT(1,1)=NC1P
+ JMOHKT(2,1)=0
+ JDAHKT(1,1)=3+IIGLU1
+ JDAHKT(2,1)=0
+C Create chains 3 valence quark(vq1P 1)-sea-antiquark(NC2T 2)
+ PHKT(1,1) =PHKK(1,NC1P)*XVPQI/(XDIQP+XSQ1)
+ PHKT(2,1) =PHKK(2,NC1P)*XVPQI/(XDIQP+XSQ1)
+ PHKT(3,1) =PHKK(3,NC1P)*XVPQI/(XDIQP+XSQ1)
+ PHKT(4,1) =PHKK(4,NC1P)*XVPQI/(XDIQP+XSQ1)
+C PHKT(5,1) =PHKK(5,NC1P)
+ XMIST =(PHKT(4,1)**2- PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2)
+ IF(XMIST.GE.0.D0)THEN
+ PHKT(5,1) =SQRT(PHKT(4,1)**2- PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS1 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,1)=0.D0
+ ENDIF
+ VHKT(1,1) =VHKK(1,NC1P)
+ VHKT(2,1) =VHKK(2,NC1P)
+ VHKT(3,1) =VHKK(3,NC1P)
+ VHKT(4,1) =VHKK(4,NC1P)
+ WHKT(1,1) =WHKK(1,NC1P)
+ WHKT(2,1) =WHKK(2,NC1P)
+ WHKT(3,1) =WHKK(3,NC1P)
+ WHKT(4,1) =WHKK(4,NC1P)
+C Add here IIGLU1 gluons to this chaina
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU1.GE.1)THEN
+ JJG=NC1P
+ DO 61 IIG=2,2+IIGLU1-1
+ KKG=JJG+IIG-1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=3+IIGLU1
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 61 CONTINUE
+ ENDIF
+ IDHKT(2+IIGLU1) =IPP2
+ ISTHKT(2+IIGLU1) =932
+ JMOHKT(1,2+IIGLU1)=NC2T
+ JMOHKT(2,2+IIGLU1)=0
+ JDAHKT(1,2+IIGLU1)=3+IIGLU1
+ JDAHKT(2,2+IIGLU1)=0
+ PHKT(1,2+IIGLU1) =PHKK(1,NC2T)
+ PHKT(2,2+IIGLU1) =PHKK(2,NC2T)
+ PHKT(3,2+IIGLU1) =PHKK(3,NC2T)
+ PHKT(4,2+IIGLU1) =PHKK(4,NC2T)
+C PHKT(5,2+IIGLU1) =PHKK(5,NC2T)
+ XMIST=(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,2+IIGLU1) =SQRT(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,2+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,2+IIGLU1) =VHKK(1,NC2T)
+ VHKT(2,2+IIGLU1) =VHKK(2,NC2T)
+ VHKT(3,2+IIGLU1) =VHKK(3,NC2T)
+ VHKT(4,2+IIGLU1) =VHKK(4,NC2T)
+ WHKT(1,2+IIGLU1) =WHKK(1,NC2T)
+ WHKT(2,2+IIGLU1) =WHKK(2,NC2T)
+ WHKT(3,2+IIGLU1) =WHKK(3,NC2T)
+ WHKT(4,2+IIGLU1) =WHKK(4,NC2T)
+ IDHKT(3+IIGLU1) =88888
+ ISTHKT(3+IIGLU1) =94
+ JMOHKT(1,3+IIGLU1)=1
+ JMOHKT(2,3+IIGLU1)=2+IIGLU1
+ JDAHKT(1,3+IIGLU1)=0
+ JDAHKT(2,3+IIGLU1)=0
+ PHKT(1,3+IIGLU1) =PHKT(1,1)+PHKT(1,2+IIGLU1)+PG1
+ PHKT(2,3+IIGLU1) =PHKT(2,1)+PHKT(2,2+IIGLU1)+PG2
+ PHKT(3,3+IIGLU1) =PHKT(3,1)+PHKT(3,2+IIGLU1)+PG3
+ PHKT(4,3+IIGLU1) =PHKT(4,1)+PHKT(4,2+IIGLU1)+PG4
+ XMIST
+ * =(PHKT(4,3+IIGLU1)**2-PHKT(1,3+IIGLU1)**2-PHKT(2,3+IIGLU1)**2
+ * -PHKT(3,3+IIGLU1)**2)
+ IF(XMIST.GE.0.D0)THEN
+ PHKT(5,3+IIGLU1)
+ * =SQRT(PHKT(4,3+IIGLU1)**2-PHKT(1,3+IIGLU1)**2-PHKT(2,3+IIGLU1)**2
+ * -PHKT(3,3+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS1 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,1)=0.D0
+ ENDIF
+ IF(IPIP.GE.3)THEN
+C IF(NUMEV.EQ.-324)THEN
+ WRITE(LOUT,*)1,ISTHKT(1),IDHKT(1),JMOHKT(1,1),
+ * JMOHKT(2,1),JDAHKT(1,1),
+ *JDAHKT(2,1),(PHKT(III,1),III=1,5)
+ DO 71 IIG=2,2+IIGLU1-1
+ WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+ & JMOHKT(1,IIG),JMOHKT(2,IIG),
+ * JDAHKT(1,IIG),
+ *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 71 CONTINUE
+ WRITE(LOUT,*)2+IIGLU1,ISTHKT(2+IIGLU1),IDHKT(2+IIGLU1),
+ * JMOHKT(1,2+IIGLU1),JMOHKT(2,2+IIGLU1),JDAHKT(1,2+IIGLU1),
+ *JDAHKT(2,2+IIGLU1),(PHKT(III,2+IIGLU1),III=1,5)
+ WRITE(LOUT,*)3+IIGLU1,ISTHKT(3+IIGLU1),IDHKT(3+IIGLU1),
+ * JMOHKT(1,3+IIGLU1),JMOHKT(2,3+IIGLU1),JDAHKT(1,3+IIGLU1),
+ *JDAHKT(2,3+IIGLU1),(PHKT(III,3+IIGLU1),III=1,5)
+ ENDIF
+ CHAMAL=CHAM1
+ IF(IPIP.EQ.1)THEN
+ IF(IP11.GE.3.OR.IPP2.GE.3)CHAMAL=CHAM3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP11.LE.-3.OR.IPP2.LE.-3)CHAMAL=CHAM3
+ ENDIF
+ IF(PHKT(5,3+IIGLU1).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MUSQBS1 jump back from chain 3'
+ GO TO 3466
+ ENDIF
+ VHKT(1,3+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,3+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,3+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,3+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,3+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,3+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,3+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,3+IIGLU1) =WHKK(4,NC1)
+ IDHKT(4+IIGLU1) =IP12
+ ISTHKT(4+IIGLU1) =931
+ JMOHKT(1,4+IIGLU1)=NC1P
+ JMOHKT(2,4+IIGLU1)=0
+ JDAHKT(1,4+IIGLU1)=6+IIGLU1
+ JDAHKT(2,4+IIGLU1)=0
+C create chain 6 valence quark(vq2P 4)-sea-quark(aqsT 5)
+ PHKT(1,4+IIGLU1) =PHKK(1,NC1P)*XVPQII/(XDIQP+XSQ1)
+ PHKT(2,4+IIGLU1) =PHKK(2,NC1P)*XVPQII/(XDIQP+XSQ1)
+ PHKT(3,4+IIGLU1) =PHKK(3,NC1P)*XVPQII/(XDIQP+XSQ1)
+ PHKT(4,4+IIGLU1) =PHKK(4,NC1P)*XVPQII/(XDIQP+XSQ1)
+C PHKT(5,4+IIGLU1) =PHKK(5,NC1P)
+ XMIST =(PHKT(4,4+IIGLU1)**2-
+ * PHKT(3,4+IIGLU1)**2-PHKT(2,4+IIGLU1)**2-
+ *PHKT(1,4+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,4+IIGLU1) =SQRT(PHKT(4,4+IIGLU1)**2-
+ * PHKT(3,4+IIGLU1)**2-PHKT(2,4+IIGLU1)**2-
+ *PHKT(1,4+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,4+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,4+IIGLU1) =VHKK(1,NC1P)
+ VHKT(2,4+IIGLU1) =VHKK(2,NC1P)
+ VHKT(3,4+IIGLU1) =VHKK(3,NC1P)
+ VHKT(4,4+IIGLU1) =VHKK(4,NC1P)
+ WHKT(1,4+IIGLU1) =WHKK(1,NC1P)
+ WHKT(2,4+IIGLU1) =WHKK(2,NC1P)
+ WHKT(3,4+IIGLU1) =WHKK(3,NC1P)
+ WHKT(4,4+IIGLU1) =WHKK(4,NC1P)
+ IF(IPIP.EQ.1)THEN
+ IDHKT(5+IIGLU1) =-(ISAQ1-6)
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(5+IIGLU1) =ISAQ1
+ ENDIF
+ ISTHKT(5+IIGLU1) =932
+ JMOHKT(1,5+IIGLU1)=NC1T
+ JMOHKT(2,5+IIGLU1)=0
+ JDAHKT(1,5+IIGLU1)=6+IIGLU1
+ JDAHKT(2,5+IIGLU1)=0
+ PHKT(1,5+IIGLU1) =PHKK(1,NC1T)*XSAQ1/(XVQT+XSAQ1)
+ PHKT(2,5+IIGLU1) =PHKK(2,NC1T)*XSAQ1/(XVQT+XSAQ1)
+ PHKT(3,5+IIGLU1) =PHKK(3,NC1T)*XSAQ1/(XVQT+XSAQ1)
+ PHKT(4,5+IIGLU1) =PHKK(4,NC1T)*XSAQ1/(XVQT+XSAQ1)
+C IF( PHKT(4,5).EQ.0.D0)THEN
+C IREJ=1
+CIPCO=0
+CRETURN
+C ENDIF
+C PHKT(5,5) =PHKK(5,NC1T)
+ XMIST=(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,5+IIGLU1) =SQRT(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,5+IIGLU1) =VHKK(1,NC1T)
+ VHKT(2,5+IIGLU1) =VHKK(2,NC1T)
+ VHKT(3,5+IIGLU1) =VHKK(3,NC1T)
+ VHKT(4,5+IIGLU1) =VHKK(4,NC1T)
+ WHKT(1,5+IIGLU1) =WHKK(1,NC1T)
+ WHKT(2,5+IIGLU1) =WHKK(2,NC1T)
+ WHKT(3,5+IIGLU1) =WHKK(3,NC1T)
+ WHKT(4,5+IIGLU1) =WHKK(4,NC1T)
+ IDHKT(6+IIGLU1) =88888
+ ISTHKT(6+IIGLU1) =94
+ JMOHKT(1,6+IIGLU1)=4+IIGLU1
+ JMOHKT(2,6+IIGLU1)=5+IIGLU1
+ JDAHKT(1,6+IIGLU1)=0
+ JDAHKT(2,6+IIGLU1)=0
+ PHKT(1,6+IIGLU1) =PHKT(1,4+IIGLU1)+PHKT(1,5+IIGLU1)
+ PHKT(2,6+IIGLU1) =PHKT(2,4+IIGLU1)+PHKT(2,5+IIGLU1)
+ PHKT(3,6+IIGLU1) =PHKT(3,4+IIGLU1)+PHKT(3,5+IIGLU1)
+ PHKT(4,6+IIGLU1) =PHKT(4,4+IIGLU1)+PHKT(4,5+IIGLU1)
+ XMIST
+ * =(PHKT(4,6+IIGLU1)**2-PHKT(1,6+IIGLU1)**2-PHKT(2,6+IIGLU1)**2
+ * -PHKT(3,6+IIGLU1)**2)
+ IF(XMIST.GE.0.D0)THEN
+ PHKT(5,6+IIGLU1)
+ * =SQRT(PHKT(4,6+IIGLU1)**2-PHKT(1,6+IIGLU1)**2-PHKT(2,6+IIGLU1)**2
+ * -PHKT(3,6+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS1 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,1)=0.D0
+ ENDIF
+C IF(IPIP.EQ.3)THEN
+ CHAMAL=CHAM1
+ IF(IPIP.EQ.1)THEN
+ IF(IP12.GE.3.OR.ISAQ1.GE.9)CHAMAL=CHAM3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP12.LE.-3.OR.ISAQ1.GE.3)CHAMAL=CHAM3
+ ENDIF
+ IF(PHKT(5,6+IIGLU1).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MGSQBS1 jump back from chain 6',
+C * CHAMAL,PHKT(5,6+IIGLU1)
+ GO TO 3466
+ ENDIF
+ IF(IPIP.GE.3)THEN
+C IF(NUMEV.EQ.-324)THEN
+ WRITE(LOUT,*)4+IIGLU1,ISTHKT(4+IIGLU1),IDHKT(4+IIGLU1),
+ * JMOHKT(1,4+IIGLU1),JMOHKT(2,4+IIGLU1),JDAHKT(1,4+IIGLU1),
+ *JDAHKT(2,4+IIGLU1),(PHKT(III,4+IIGLU1),III=1,5)
+ WRITE(LOUT,*)5+IIGLU1,ISTHKT(5+IIGLU1),IDHKT(5+IIGLU1),
+ * JMOHKT(1,5+IIGLU1),JMOHKT(2,5+IIGLU1),JDAHKT(1,5+IIGLU1),
+ *JDAHKT(2,5+IIGLU1),(PHKT(III,5+IIGLU1),III=1,5)
+ WRITE(LOUT,*)6+IIGLU1,ISTHKT(6+IIGLU1),IDHKT(6+IIGLU1),
+ * JMOHKT(1,6+IIGLU1),JMOHKT(2,6+IIGLU1),JDAHKT(1,6+IIGLU1),
+ *JDAHKT(2,6+IIGLU1),(PHKT(III,6+IIGLU1),III=1,5)
+ ENDIF
+ VHKT(1,6+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,6+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,6+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,6+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,6+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,6+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,6+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,6+IIGLU1) =WHKK(4,NC1)
+ IF(IPIP.EQ.1)THEN
+ IDHKT(7+IIGLU1) =1000*IPP1+100*ISQ+3
+ IF(IDHKT(7+IIGLU1).EQ.1203)IDHKT(7+IIGLU1)=2103
+ IF(IDHKT(7+IIGLU1).EQ.1303)IDHKT(7+IIGLU1)=3103
+ IF(IDHKT(7+IIGLU1).EQ.2303)IDHKT(7+IIGLU1)=3203
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(7+IIGLU1) =1000*IPP1+100*(-ISQ1+6)-3
+ IF(IDHKT(7+IIGLU1).EQ.-1203)IDHKT(7+IIGLU1)=-2103
+ IF(IDHKT(7+IIGLU1).EQ.-1303)IDHKT(7+IIGLU1)=-3103
+ IF(IDHKT(7+IIGLU1).EQ.-2303)IDHKT(7+IIGLU1)=-3203
+C WRITE(6,*)'IDHKT(7+IIGLU1),IPP1,ISQ1',IDHKT(7+IIGLU1),IPP1,ISQ1
+ ENDIF
+ ISTHKT(7+IIGLU1) =931
+ JMOHKT(1,7+IIGLU1)=NC2P
+ JMOHKT(2,7+IIGLU1)=0
+ JDAHKT(1,7+IIGLU1)=9+IIGLU1+IIGLU2
+ JDAHKT(2,7+IIGLU1)=0
+C create chain 9 diquark(qsP+NC2P 7)-valence quark(NC1T 8)
+ PHKT(1,7+IIGLU1) =PHKK(1,NC2P)+PHKK(1,NC1P)*XSQ1/(XDIQP+XSQ1)
+ PHKT(2,7+IIGLU1) =PHKK(2,NC2P)+PHKK(2,NC1P)*XSQ1/(XDIQP+XSQ1)
+ PHKT(3,7+IIGLU1) =PHKK(3,NC2P)+PHKK(3,NC1P)*XSQ1/(XDIQP+XSQ1)
+ PHKT(4,7+IIGLU1) =PHKK(4,NC2P)+PHKK(4,NC1P)*XSQ1/(XDIQP+XSQ1)
+C WRITE(6,*)'PHKK(4,NC1P),PHKK(4,NC2P), PHKT(4,7)',
+C * PHKK(4,NC1P),PHKK(4,NC2P), PHKT(4,7)
+ IF(PHKT(4,7+IIGLU1).GE. PHKK(4,NC1P))THEN
+C IREJ=1
+C WRITE(6,*)'reject PHKT(4,7+IIGLU1).GE. PHKK(4,NC1P)'
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+C PHKT(5,7) =PHKK(5,NC2P)
+ PHKT(5,7+IIGLU1) =SQRT(PHKT(4,7+IIGLU1)**2-
+ * PHKT(3,7+IIGLU1)**2-PHKT(2,7+IIGLU1)**2-
+ *PHKT(1,7+IIGLU1)**2)
+ VHKT(1,7+IIGLU1) =VHKK(1,NC2P)
+ VHKT(2,7+IIGLU1) =VHKK(2,NC2P)
+ VHKT(3,7+IIGLU1) =VHKK(3,NC2P)
+ VHKT(4,7+IIGLU1) =VHKK(4,NC2P)
+ WHKT(1,7+IIGLU1) =WHKK(1,NC2P)
+ WHKT(2,7+IIGLU1) =WHKK(2,NC2P)
+ WHKT(3,7+IIGLU1) =WHKK(3,NC2P)
+ WHKT(4,7+IIGLU1) =WHKK(4,NC2P)
+C Insert here the IIGLU2 gluons
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU2.GE.1)THEN
+ JJG=NC2P
+ DO 81 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ KKG=JJG+IIG-7-IIGLU1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=9+IIGLU1+IIGLU2
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 81 CONTINUE
+ ENDIF
+ IDHKT(8+IIGLU1+IIGLU2) =IP2
+ ISTHKT(8+IIGLU1+IIGLU2) =932
+ JMOHKT(1,8+IIGLU1+IIGLU2)=NC1T
+ JMOHKT(2,8+IIGLU1+IIGLU2)=0
+ JDAHKT(1,8+IIGLU1+IIGLU2)=9+IIGLU1+IIGLU2
+ JDAHKT(2,8+IIGLU1+IIGLU2)=0
+ PHKT(1,8+IIGLU1+IIGLU2) =PHKK(1,NC1T)*XVQT/(XSAQ1+XVQT)
+ PHKT(2,8+IIGLU1+IIGLU2) =PHKK(2,NC1T)*XVQT/(XSAQ1+XVQT)
+ PHKT(3,8+IIGLU1+IIGLU2) =PHKK(3,NC1T)*XVQT/(XSAQ1+XVQT)
+ PHKT(4,8+IIGLU1+IIGLU2) =PHKK(4,NC1T)*XVQT/(XSAQ1+XVQT)
+C PHKT(5,8+IIGLU1+IIGLU2) =PHKK(5,NC1T)
+ XMIST=(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,8+IIGLU1+IIGLU2) =SQRT(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,8+IIGLU1+IIGLU2)=0.D0
+ ENDIF
+ VHKT(1,8+IIGLU1+IIGLU2) =VHKK(1,NC1T)
+ VHKT(2,8+IIGLU1+IIGLU2) =VHKK(2,NC1T)
+ VHKT(3,8+IIGLU1+IIGLU2) =VHKK(3,NC1T)
+ VHKT(4,8+IIGLU1+IIGLU2) =VHKK(4,NC1T)
+ WHKT(1,8+IIGLU1+IIGLU2) =WHKK(1,NC1T)
+ WHKT(2,8+IIGLU1+IIGLU2) =WHKK(2,NC1T)
+ WHKT(3,8+IIGLU1+IIGLU2) =WHKK(3,NC1T)
+ WHKT(4,8+IIGLU1+IIGLU2) =WHKK(4,NC1T)
+ IDHKT(9+IIGLU1+IIGLU2) =88888
+ ISTHKT(9+IIGLU1+IIGLU2) =94
+ JMOHKT(1,9+IIGLU1+IIGLU2)=7+IIGLU1
+ JMOHKT(2,9+IIGLU1+IIGLU2)=8+IIGLU1+IIGLU2
+ JDAHKT(1,9+IIGLU1+IIGLU2)=0
+ JDAHKT(2,9+IIGLU1+IIGLU2)=0
+ PHKT(1,9+IIGLU1+IIGLU2)
+ * =PHKT(1,7+IIGLU1)+PHKT(1,8+IIGLU1+IIGLU2)+PG1
+ PHKT(2,9+IIGLU1+IIGLU2)
+ * =PHKT(2,7+IIGLU1)+PHKT(2,8+IIGLU1+IIGLU2)+PG2
+ PHKT(3,9+IIGLU1+IIGLU2)
+ * =PHKT(3,7+IIGLU1)+PHKT(3,8+IIGLU1+IIGLU2)+PG3
+ PHKT(4,9+IIGLU1+IIGLU2)
+ * =PHKT(4,7+IIGLU1)+PHKT(4,8+IIGLU1+IIGLU2)+PG4
+ XMIST
+ *=(PHKT(4,9+IIGLU1+IIGLU2)**2-PHKT(1,9+IIGLU1+IIGLU2)**2
+ * -PHKT(2,9+IIGLU1+IIGLU2)**2
+ * -PHKT(3,9+IIGLU1+IIGLU2)**2)
+ IF(XMIST.GE.0.D0)THEN
+ PHKT(5,9+IIGLU1+IIGLU2)
+ *=SQRT(PHKT(4,9+IIGLU1+IIGLU2)**2-PHKT(1,9+IIGLU1+IIGLU2)**2
+ * -PHKT(2,9+IIGLU1+IIGLU2)**2
+ * -PHKT(3,9+IIGLU1+IIGLU2)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS1 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,1)=0.D0
+ ENDIF
+ IF(IPIP.GE.3)THEN
+C IF(NUMEV.EQ.-324)THEN
+ WRITE(LOUT,*)7+IIGLU1,ISTHKT(7+IIGLU1),IDHKT(7+IIGLU1),
+ * JMOHKT(1,7+IIGLU1),JMOHKT(2,7+IIGLU1),JDAHKT(1,7+IIGLU1),
+ *JDAHKT(2,7+IIGLU1),(PHKT(III,7+IIGLU1),III=1,5)
+ DO 91 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+ & JMOHKT(1,IIG),JMOHKT(2,IIG),
+ * JDAHKT(1,IIG),
+ *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 91 CONTINUE
+ WRITE(LOUT,*)8+IIGLU1+IIGLU2,
+ * ISTHKT(8+IIGLU1+IIGLU2),IDHKT(8+IIGLU1+IIGLU2),
+ * JMOHKT(1,8+IIGLU1+IIGLU2),JMOHKT(2,8+IIGLU1+IIGLU2),
+ *JDAHKT(1,8+IIGLU1+IIGLU2),
+ *JDAHKT(2,8+IIGLU1+IIGLU2),(PHKT(III,8+IIGLU1+IIGLU2),III=1,5)
+ WRITE(LOUT,*)9+IIGLU1+IIGLU2,ISTHKT(9+IIGLU1+IIGLU2),
+ * IDHKT(9+IIGLU1+IIGLU2),JMOHKT(1,9+IIGLU1+IIGLU2),
+ *JMOHKT(2,9+IIGLU1+IIGLU2),JDAHKT(1,9+IIGLU1+IIGLU2),
+ *JDAHKT(2,9+IIGLU1+IIGLU2),(PHKT(III,9+IIGLU1+IIGLU2),III=1,5)
+ ENDIF
+ CHAMAL=CHAB1
+ IF(IPIP.EQ.1)THEN
+ IF(IP2.GE.3.OR.IPP1.GE.3.OR.ISQ1.GE.3)CHAMAL=CHAB3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP2.LE.-3.OR.IPP1.LE.-3.OR.ISQ1.GE.9)CHAMAL=CHAB3
+ ENDIF
+ IF(PHKT(5,9+IIGLU1+IIGLU2).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MGSQBS1 jump back from chain 9',
+C * 'CHAMAL,PHKT(5,9+IIGLU1+IIGLU2)',CHAMAL,PHKT(5,9+IIGLU1+IIGLU2)
+ GO TO 3466
+ ENDIF
+ VHKT(1,9+IIGLU1+IIGLU2) =VHKK(1,NC1)
+ VHKT(2,9+IIGLU1+IIGLU2) =VHKK(2,NC1)
+ VHKT(3,9+IIGLU1+IIGLU2) =VHKK(3,NC1)
+ VHKT(4,9+IIGLU1+IIGLU2) =VHKK(4,NC1)
+ WHKT(1,9+IIGLU1+IIGLU2) =WHKK(1,NC1)
+ WHKT(2,9+IIGLU1+IIGLU2) =WHKK(2,NC1)
+ WHKT(3,9+IIGLU1+IIGLU2) =WHKK(3,NC1)
+ WHKT(4,9+IIGLU1+IIGLU2) =WHKK(4,NC1)
+C
+ IPCO=0
+ IGCOUN=9+IIGLU1+IIGLU2
+ RETURN
+ END
+C
+C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ SUBROUTINE MGSQBS1(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+ * IP11,IP12,IP2,IPP1,IPP21,IPP22,IPIP,ISQ,IGCOUN)
+C
+C GSQBS-1 diagram (split projectile diquark)
+C
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+
+C
+ PARAMETER (NTMHKK= 300)
+ COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+ +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+ +(4,NTMHKK)
+*KEEP,XSEADI.
+ COMMON /XSEADI/ XSEACU,UNON,UNOM,UNOSEA,CVQ,CDQ,CSEA,SSMIMA,
+ +SSMIMQ,VVMTHR
+*KEEP,DPRIN.
+ COMMON /DPRIN/ IPRI,IPEV,IPPA,IPCO,INIT,IPHKK,ITOPD,IPAUPR
+C
+C GSQBS-1 diagram (split projectile diquark)
+C
+C
+C Input chain 1(NC1) valence-diquark(NC1P)-valence-quark(NC1T)
+C Input chain 2(NC2) sea-quark(NC2P)-valence-diquark(NC2T)
+C
+C Create quark(qs)-antiquark(aqs) pair energy from NC1P and NC1T
+C Split remaining valence diquark(NC1P) into quarks vq1P and vq2P
+C
+C Create chains 3 valence quark(vq1P 1)-valence diquark(NC2T 2)
+C 6 valence quark(vq2P 4)-sea-quark(aqsP 5)
+C 9 diquark(qsP+NC2P 7)-valence quark(NC1T 8)
+C
+C Put new chains into COMMON /HKKTMP/
+C
+ IIGLU1=NC1T-NC1P-1
+ IIGLU2=NC2T-NC2P-1
+ IGCOUN=0
+C WRITE(6,*)' IIGLU1,IIGLU2 ',IIGLU1,IIGLU2
+ CVQ=1.D0
+ NNNC1=IDHKK(NC1)/1000
+ MMMC1=IDHKK(NC1)-NNNC1*1000
+ KKKC1=ISTHKK(NC1)
+ NNNC2=IDHKK(NC2)/1000
+ MMMC2=IDHKK(NC2)-NNNC2*1000
+ KKKC2=ISTHKK(NC2)
+ IREJ=0
+ IF(IPIP.EQ.3)THEN
+ WRITE(LOUT,*)' MGSQBS1(NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,',
+ * ' IP11,IP12,IP2,IPP1,IPP21,IPP22,IPIP,IGCOUN)',
+ *NC1,NC1P,NC1T,NC2,NC2P,NC2T,IREJ,
+ * IP11,IP12,IP2,IPP1,IPP21,IPP22,IPIP,IGCOUN
+ ENDIF
+C
+C
+C
+C determine x-values of NC1P diquark
+ XDIQP=PHKK(4,NC1P)*2.D0/UMO
+ XVQT=PHKK(4,NC1T)*2.D0/UMO
+C
+C determine x-values of sea quark pair
+C
+ IPCO=1
+ ICOU=0
+ 2234 CONTINUE
+ ICOU=ICOU+1
+ IF(ICOU.GE.500)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MGSQBS1 Rejection 2234 ICOU. GT.100'
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPCO.GE.3)WRITE(LOUT,*)'MGSQBS1 call XSEAPA: UMO,XDIQP,XVQT ',
+ * UMO, XDIQP,XVQT
+ XSQ=0.D0
+ XSAQ=0.D0
+**NEW
+C CALL XSEAPA(UMO,XDIQP/2.D0,ISQ,ISAQ,XSQ,XSAQ,IREJ)
+ IF (IPIP.EQ.1) THEN
+ XQMAX = XDIQP/2.0D0
+ XAQMAX = 2.D0*XVQT/3.0D0
+ ELSE
+ XQMAX = 2.D0*XVQT/3.0D0
+ XAQMAX = XDIQP/2.0D0
+ ENDIF
+ CALL DT_CQPAIR(XQMAX,XAQMAX,XSQ,XSAQ,ISQ,IREJ)
+ ISAQ = 6+ISQ
+C write(*,*) 'MGSQBS1: ',ISQ,XSQ,XDIQP,XSAQ,XVQT
+**
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MGSQBS1 after XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IF(IREJ.GE.1)THEN
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'MGSQBS1 reject XSEAPA',ISQ,ISAQ,XSQ,XSAQ
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(IPIP.EQ.1)THEN
+ IF(XSAQ.GE.2.D0*XVQT/3.D0)GO TO 2234
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(XSQ.GE.2.D0*XVQT/3.D0)GO TO 2234
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,4E12.4)')' MGSQBS1 XDIQP,XVQT,XSQ,XSAQ ',
+ * XDIQP,XVQT,XSQ,XSAQ
+ ENDIF
+C
+C subtract xsq,xsaq from NC1P diquark and NC1T quark
+C
+C XSQ=0.D0
+ IF(IPIP.EQ.1)THEN
+ XDIQP=XDIQP-XSQ
+**NEW
+C IF (XDIQP.LT.0.0D0) WRITE(*,*) ' mgsqbs1: XDIQP<0!!',XDIQP
+**
+ XVQT =XVQT -XSAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XDIQP=XDIQP-XSAQ
+ XVQT =XVQT -XSQ
+ ENDIF
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)'XDIQP,XVQT after subtraction',XDIQP,XVQT
+C
+C Split remaining valence diquark(NC1P) into quarks vq1P and vq2P
+C
+ XVTHRO=CVQ/UMO
+ IVTHR=0
+ 3466 CONTINUE
+ IF(IVTHR.EQ.10)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)WRITE(LOUT,*)' MGSQBS1 3466 reject IVTHR 10'
+ IPCO=0
+ RETURN
+ ENDIF
+ IVTHR=IVTHR+1
+ XVTHR=XVTHRO/(201-IVTHR)
+ UNOPRV=UNON
+ 380 CONTINUE
+ IF(XVTHR.GT.0.66D0*XDIQP)THEN
+ IREJ=1
+ IF(ISQ.EQ.3)IREJ=3
+ IF(IPCO.GE.3)
+ & WRITE(LOUT,*)' MGSQBS1 Rejection 380 XVTHR large ',
+ * XVTHR
+ IPCO=0
+ RETURN
+ ENDIF
+ IF(DT_RNDM(V).LT.0.5D0)THEN
+ XVPQI=DT_SAMPEX(XVTHR,0.66D0*XDIQP)
+ XVPQII=XDIQP-XVPQI
+ ELSE
+ XVPQII=DT_SAMPEX(XVTHR,0.66D0*XDIQP)
+ XVPQI=XDIQP-XVPQII
+ ENDIF
+ IF(IPCO.GE.3)THEN
+ WRITE(LOUT,'(A,4E12.4)')' MGSQBS1:XVTHR,XDIQP,XVPQI,XVPQII ',
+ * XVTHR,XDIQP,XVPQI,XVPQII
+ ENDIF
+C
+C Prepare 4 momenta of new chains and chain ends
+C
+C COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+C +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+C +(4,NTMHKK)
+C Create chains 3 valence quark(vq1P 1)-valence diquark(NC2T 2)
+C 6 valence quark(vq2P 4)-sea-quark(aqsP 5)
+C 9 diquark(qsP+NC2P 7)-valence quark(NC1T 8)
+ IF(IPIP.EQ.1)THEN
+ XSQ1=XSQ
+ XSAQ1=XSAQ
+ ISQ1=ISQ
+ ISAQ1=ISAQ
+ ELSEIF(IPIP.EQ.2)THEN
+ XSQ1=XSAQ
+ XSAQ1=XSQ
+ ISQ1=ISAQ
+ ISAQ1=ISQ
+ ENDIF
+ KK11=IP11
+C IDHKT(2) =1000*IPP21+100*IPP22+1
+ KK21= IPP21
+ KK22= IPP22
+ XGIVE=0.D0
+ IDHKT(4+IIGLU1) =IP12
+ ISTHKT(4+IIGLU1) =921
+ JMOHKT(1,4+IIGLU1)=NC1P
+ JMOHKT(2,4+IIGLU1)=0
+ JDAHKT(1,4+IIGLU1)=6+IIGLU1
+ JDAHKT(2,4+IIGLU1)=0
+**NEW
+ IF ((XDIQP.LT.0.0D0).OR.(XVPQII.LT.0.0D0).OR.
+ & (XSQ1.LT.0.0D0)) WRITE(LOUT,*) ' mgsqbs1: ',XDIQP,XVPQII,XSQ1
+**
+ PHKT(1,4+IIGLU1) =PHKK(1,NC1P)*XVPQII/(XDIQP+XSQ1)
+ PHKT(2,4+IIGLU1) =PHKK(2,NC1P)*XVPQII/(XDIQP+XSQ1)
+ PHKT(3,4+IIGLU1) =PHKK(3,NC1P)*XVPQII/(XDIQP+XSQ1)
+ PHKT(4,4+IIGLU1) =PHKK(4,NC1P)*XVPQII/(XDIQP+XSQ1)
+C PHKT(5,4+IIGLU1) =PHKK(5,NC1P)
+ XXMIST=(PHKT(4,4+IIGLU1)**2-
+ * PHKT(3,4+IIGLU1)**2-PHKT(2,4+IIGLU1)**2-
+ * PHKT(1,4+IIGLU1)**2)
+ IF(XXMIST.GT.0.D0)THEN
+ PHKT(5,4+IIGLU1) =SQRT(XXMIST)
+ ELSE
+ WRITE(LOUT,*)'MGSQBS1 XXMIST',XXMIST
+ XXMIST=ABS(XXMIST)
+ PHKT(5,4+IIGLU1) =SQRT(XXMIST)
+ ENDIF
+ VHKT(1,4+IIGLU1) =VHKK(1,NC1P)
+ VHKT(2,4+IIGLU1) =VHKK(2,NC1P)
+ VHKT(3,4+IIGLU1) =VHKK(3,NC1P)
+ VHKT(4,4+IIGLU1) =VHKK(4,NC1P)
+ WHKT(1,4+IIGLU1) =WHKK(1,NC1P)
+ WHKT(2,4+IIGLU1) =WHKK(2,NC1P)
+ WHKT(3,4+IIGLU1) =WHKK(3,NC1P)
+ WHKT(4,4+IIGLU1) =WHKK(4,NC1P)
+ IF(IPIP.EQ.1)THEN
+ IDHKT(5+IIGLU1) =-(ISAQ1-6)
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(5+IIGLU1) =ISAQ1
+ ENDIF
+ ISTHKT(5+IIGLU1) =922
+ JMOHKT(1,5+IIGLU1)=NC1T
+ JMOHKT(2,5+IIGLU1)=0
+ JDAHKT(1,5+IIGLU1)=6+IIGLU1
+ JDAHKT(2,5+IIGLU1)=0
+**NEW
+ IF ((XSAQ1.LT.0.0D0).OR.(XVQT .LT.0.0D0))
+ & WRITE(LOUT,*) ' mgsqbs2: ',XSAQ1,XVQT
+**
+ PHKT(1,5+IIGLU1) =PHKK(1,NC1T)*XSAQ1/(XVQT+XSAQ1)
+ PHKT(2,5+IIGLU1) =PHKK(2,NC1T)*XSAQ1/(XVQT+XSAQ1)
+ PHKT(3,5+IIGLU1) =PHKK(3,NC1T)*XSAQ1/(XVQT+XSAQ1)
+ PHKT(4,5+IIGLU1) =PHKK(4,NC1T)*XSAQ1/(XVQT+XSAQ1)
+C PHKT(5,5+IIGLU1) =PHKK(5,NC1T)
+ XMIST=(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,5+IIGLU1) =SQRT(PHKT(4,5+IIGLU1)**2-
+ * PHKT(3,5+IIGLU1)**2-PHKT(2,5+IIGLU1)**2-
+ *PHKT(1,5+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)' parton 4 mass square LT.0 ',XMIST
+ PHKT(5,5+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,5+IIGLU1) =VHKK(1,NC1T)
+ VHKT(2,5+IIGLU1) =VHKK(2,NC1T)
+ VHKT(3,5+IIGLU1) =VHKK(3,NC1T)
+ VHKT(4,5+IIGLU1) =VHKK(4,NC1T)
+ WHKT(1,5+IIGLU1) =WHKK(1,NC1T)
+ WHKT(2,5+IIGLU1) =WHKK(2,NC1T)
+ WHKT(3,5+IIGLU1) =WHKK(3,NC1T)
+ WHKT(4,5+IIGLU1) =WHKK(4,NC1T)
+ IDHKT(6+IIGLU1) =88888
+C IDHKT(6) =1000*NNNC1+MMMC1
+ ISTHKT(6+IIGLU1) =93
+C ISTHKT(6) =KKKC1
+ JMOHKT(1,6+IIGLU1)=4+IIGLU1
+ JMOHKT(2,6+IIGLU1)=5+IIGLU1
+ JDAHKT(1,6+IIGLU1)=0
+ JDAHKT(2,6+IIGLU1)=0
+ PHKT(1,6+IIGLU1) =PHKT(1,4+IIGLU1)+PHKT(1,5+IIGLU1)
+ PHKT(2,6+IIGLU1) =PHKT(2,4+IIGLU1)+PHKT(2,5+IIGLU1)
+ PHKT(3,6+IIGLU1) =PHKT(3,4+IIGLU1)+PHKT(3,5+IIGLU1)
+ PHKT(4,6+IIGLU1) =PHKT(4,4+IIGLU1)+PHKT(4,5+IIGLU1)
+ PHKT(5,6+IIGLU1)
+ * =SQRT(PHKT(4,6+IIGLU1)**2-PHKT(1,6+IIGLU1)**2-PHKT(2,6+IIGLU1)**2
+ * -PHKT(3,6+IIGLU1)**2)
+ CHAMAL=CHAM1
+ IF(IPIP.EQ.1)THEN
+ IF(IP12.GE.3.OR.ISAQ.GE.9)CHAMAL=CHAM3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP12.LE.-3.OR.ISAQ.GE.3)CHAMAL=CHAM3
+ ENDIF
+ IF(PHKT(5,6+IIGLU1).LT.CHAMAL)THEN
+ IF(IDHKT(5+IIGLU1).EQ.-IDHKT(4+IIGLU1))THEN
+C we drop chain 6 and give the energy to chain 3
+ IDHKT(6+IIGLU1)=33888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1'
+ GO TO 7788
+ ELSEIF(IDHKT(5+IIGLU1).EQ.-IP11)THEN
+C we drop chain 6 and give the energy to chain 3
+C and change KK11 to IDHKT(4)
+ IDHKT(6+IIGLU1)=33888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1 KK11=IDHKT(4+IIGLU1)'
+ KK11=IDHKT(4+IIGLU1)
+ GO TO 7788
+ ELSEIF(IDHKT(5+IIGLU1).EQ.-IPP21)THEN
+C we drop chain 6 and give the energy to chain 3
+C and change KK21 to IDHKT(4)
+C IDHKT(2) =1000*IPP21+100*IPP22+1
+ IDHKT(6+IIGLU1)=33888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1 KK21=IDHKT(4+IIGLU1)'
+ KK21=IDHKT(4+IIGLU1)
+ GO TO 7788
+ ELSEIF(IDHKT(5+IIGLU1).EQ.-IPP22)THEN
+C we drop chain 6 and give the energy to chain 3
+C and change KK22 to IDHKT(4)
+C IDHKT(2) =1000*IPP21+100*IPP22+1
+ IDHKT(6+IIGLU1)=33888
+ XGIVE=1.D0
+C WRITE(6,*)' drop chain 6 xgive=1 KK22=IDHKT(4+IIGLU1)'
+ KK22=IDHKT(4+IIGLU1)
+ GO TO 7788
+ ENDIF
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MGSQBS1 jump back from chain 6'
+ GO TO 3466
+ ENDIF
+ 7788 CONTINUE
+ IF(IPIP.GE.3)THEN
+ WRITE(LOUT,*)4+IIGLU1,ISTHKT(4+IIGLU1),IDHKT(4+IIGLU1),
+ * JMOHKT(1,4+IIGLU1),
+ * JMOHKT(2,4+IIGLU1),JDAHKT(1,4+IIGLU1),
+ *JDAHKT(2,4+IIGLU1),(PHKT(III,4+IIGLU1),III=1,5)
+ WRITE(LOUT,*)5+IIGLU1,ISTHKT(5+IIGLU1),IDHKT(5+IIGLU1),
+ * JMOHKT(1,5+IIGLU1),
+ * JMOHKT(2,5+IIGLU1),JDAHKT(1,5+IIGLU1),
+ *JDAHKT(2,5+IIGLU1),(PHKT(III,5+IIGLU1),III=1,5)
+ WRITE(LOUT,*)6+IIGLU1,ISTHKT(6+IIGLU1),IDHKT(6+IIGLU1),
+ * JMOHKT(1,6+IIGLU1),
+ * JMOHKT(2,6+IIGLU1),JDAHKT(1,6+IIGLU1),
+ *JDAHKT(2,6+IIGLU1),(PHKT(III,6+IIGLU1),III=1,5)
+ ENDIF
+ VHKT(1,6+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,6+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,6+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,6+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,6+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,6+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,6+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,6+IIGLU1) =WHKK(4,NC1)
+C IDHKT(1) =IP11
+ IDHKT(1) =KK11
+ ISTHKT(1) =921
+ JMOHKT(1,1)=NC1P
+ JMOHKT(2,1)=0
+ JDAHKT(1,1)=3+IIGLU1
+ JDAHKT(2,1)=0
+ PHKT(1,1) =PHKK(1,NC1P)*XVPQI/(XDIQP+XSQ1)
+C * +0.5D0*PHKK(1,NC2P)
+ *+XGIVE*PHKT(1,4+IIGLU1)
+ PHKT(2,1) =PHKK(2,NC1P)*XVPQI/(XDIQP+XSQ1)
+C * +0.5D0*PHKK(2,NC2P)
+ *+XGIVE*PHKT(2,4+IIGLU1)
+ PHKT(3,1) =PHKK(3,NC1P)*XVPQI/(XDIQP+XSQ1)
+C * +0.5D0*PHKK(3,NC2P)
+ *+XGIVE*PHKT(3,4+IIGLU1)
+ PHKT(4,1) =PHKK(4,NC1P)*XVPQI/(XDIQP+XSQ1)
+C * +0.5D0*PHKK(4,NC2P)
+ *+XGIVE*PHKT(4,4+IIGLU1)
+C PHKT(5,1) =PHKK(5,NC1P)
+ XMIST =(PHKT(4,1)**2- PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2)
+ IF(XMIST.GE.0.D0)THEN
+ PHKT(5,1) =SQRT(PHKT(4,1)**2- PHKT(3,1)**2-PHKT(2,1)**2-
+ *PHKT(1,1)**2)
+ ELSE
+C WRITE(6,*)'MGSQBS1 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,1)=0.D0
+ ENDIF
+ VHKT(1,1) =VHKK(1,NC1P)
+ VHKT(2,1) =VHKK(2,NC1P)
+ VHKT(3,1) =VHKK(3,NC1P)
+ VHKT(4,1) =VHKK(4,NC1P)
+ WHKT(1,1) =WHKK(1,NC1P)
+ WHKT(2,1) =WHKK(2,NC1P)
+ WHKT(3,1) =WHKK(3,NC1P)
+ WHKT(4,1) =WHKK(4,NC1P)
+C Add here IIGLU1 gluons to this chaina
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU1.GE.1)THEN
+ JJG=NC1P
+ DO 61 IIG=2,2+IIGLU1-1
+ KKG=JJG+IIG-1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=3+IIGLU1
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 61 CONTINUE
+ ENDIF
+C IDHKT(2) =1000*IPP21+100*IPP22+1
+ IF(IPIP.EQ.1)THEN
+ IDHKT(2+IIGLU1) =1000*KK21+100*KK22+3
+ IF(IDHKT(2+IIGLU1).EQ.1203)IDHKT(2+IIGLU1)=2103
+ IF(IDHKT(2+IIGLU1).EQ.1303)IDHKT(2+IIGLU1)=3103
+ IF(IDHKT(2+IIGLU1).EQ.2303)IDHKT(2+IIGLU1)=3203
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(2+IIGLU1) =1000*KK21+100*KK22-3
+ IF(IDHKT(2+IIGLU1).EQ.-1203)IDHKT(2+IIGLU1)=-2103
+ IF(IDHKT(2+IIGLU1).EQ.-1303)IDHKT(2+IIGLU1)=-3103
+ IF(IDHKT(2+IIGLU1).EQ.-2303)IDHKT(2+IIGLU1)=-3203
+ ENDIF
+ ISTHKT(2+IIGLU1) =922
+ JMOHKT(1,2+IIGLU1)=NC2T
+ JMOHKT(2,2+IIGLU1)=0
+ JDAHKT(1,2+IIGLU1)=3+IIGLU1
+ JDAHKT(2,2+IIGLU1)=0
+ PHKT(1,2+IIGLU1) =PHKK(1,NC2T)
+ *+XGIVE*PHKT(1,5+IIGLU1)
+ PHKT(2,2+IIGLU1) =PHKK(2,NC2T)
+ *+XGIVE*PHKT(2,5+IIGLU1)
+ PHKT(3,2+IIGLU1) =PHKK(3,NC2T)
+ *+XGIVE*PHKT(3,5+IIGLU1)
+ PHKT(4,2+IIGLU1) =PHKK(4,NC2T)
+ *+XGIVE*PHKT(4,5+IIGLU1)
+C PHKT(5,2) =PHKK(5,NC2T)
+ XMIST=(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,2+IIGLU1) =SQRT(PHKT(4,2+IIGLU1)**2-
+ * PHKT(3,2+IIGLU1)**2-PHKT(2,2+IIGLU1)**2-
+ *PHKT(1,2+IIGLU1)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS2 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,2+IIGLU1)=0.D0
+ ENDIF
+ VHKT(1,2+IIGLU1) =VHKK(1,NC2T)
+ VHKT(2,2+IIGLU1) =VHKK(2,NC2T)
+ VHKT(3,2+IIGLU1) =VHKK(3,NC2T)
+ VHKT(4,2+IIGLU1) =VHKK(4,NC2T)
+ WHKT(1,2+IIGLU1) =WHKK(1,NC2T)
+ WHKT(2,2+IIGLU1) =WHKK(2,NC2T)
+ WHKT(3,2+IIGLU1) =WHKK(3,NC2T)
+ WHKT(4,2+IIGLU1) =WHKK(4,NC2T)
+ IDHKT(3+IIGLU1) =88888
+C IDHKT(3) =1000*NNNC1+MMMC1+10
+ ISTHKT(3+IIGLU1) =93
+C ISTHKT(3) =KKKC1
+ JMOHKT(1,3+IIGLU1)=1
+ JMOHKT(2,3+IIGLU1)=2+IIGLU1
+ JDAHKT(1,3+IIGLU1)=0
+ JDAHKT(2,3+IIGLU1)=0
+ PHKT(1,3+IIGLU1) =PHKT(1,1)+PHKT(1,2+IIGLU1)+PG1
+ PHKT(2,3+IIGLU1) =PHKT(2,1)+PHKT(2,2+IIGLU1)+PG2
+ PHKT(3,3+IIGLU1) =PHKT(3,1)+PHKT(3,2+IIGLU1)+PG3
+ PHKT(4,3+IIGLU1) =PHKT(4,1)+PHKT(4,2+IIGLU1)+PG4
+ PHKT(5,3+IIGLU1)
+ * =SQRT(PHKT(4,3+IIGLU1)**2-PHKT(1,3+IIGLU1)**2-PHKT(2,3+IIGLU1)**2
+ * -PHKT(3,3+IIGLU1)**2)
+ IF(IPIP.GE.3)THEN
+ WRITE(LOUT,*)1,ISTHKT(1),IDHKT(1),JMOHKT(1,1),JMOHKT(2,1),
+ * JDAHKT(1,1),
+ *JDAHKT(2,1),(PHKT(III,1),III=1,5)
+ DO 71 IIG=2,2+IIGLU1-1
+ WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+ & JMOHKT(1,IIG),JMOHKT(2,IIG),
+ * JDAHKT(1,IIG),
+ *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 71 CONTINUE
+ WRITE(LOUT,*)2+IIGLU1,ISTHKT(2+IIGLU1),
+ & IDHKT(2),JMOHKT(1,2+IIGLU1),
+ * JMOHKT(2,2+IIGLU1),JDAHKT(1,2+IIGLU1),
+ *JDAHKT(2,2+IIGLU1),(PHKT(III,2+IIGLU1),III=1,5)
+ WRITE(LOUT,*)3+IIGLU1,ISTHKT(3+IIGLU1),IDHKT(3+IIGLU1),
+ * JMOHKT(1,3+IIGLU1),
+ * JMOHKT(2,3+IIGLU1),JDAHKT(1,3+IIGLU1),
+ *JDAHKT(2,3+IIGLU1),(PHKT(III,3+IIGLU1),III=1,5)
+ ENDIF
+ CHAMAL=CHAB1
+**NEW
+C IF(IPIP.EQ.1)THEN
+C IF(IPP21.GE.3.OR.IPP22.GE.3.OR.IP11.GE.3)CHAMAL=CHAB3
+C ELSEIF(IPIP.EQ.2)THEN
+C IF(IPP21.LE.-3.OR.IPP22.LE.-3.OR.IP11.LE.-3)CHAMAL=CHAB3
+C ENDIF
+ IF(IPIP.EQ.1)THEN
+ IF(KK21.GE.3.OR.KK22.GE.3.OR.KK11.GE.3)CHAMAL=CHAB3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(KK21.LE.-3.OR.KK22.LE.-3.OR.KK11.LE.-3)CHAMAL=CHAB3
+ ENDIF
+**
+ IF(PHKT(5,3+IIGLU1).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MGSQBS1 jump back from chain 3'
+ GO TO 3466
+ ENDIF
+ VHKT(1,3+IIGLU1) =VHKK(1,NC1)
+ VHKT(2,3+IIGLU1) =VHKK(2,NC1)
+ VHKT(3,3+IIGLU1) =VHKK(3,NC1)
+ VHKT(4,3+IIGLU1) =VHKK(4,NC1)
+ WHKT(1,3+IIGLU1) =WHKK(1,NC1)
+ WHKT(2,3+IIGLU1) =WHKK(2,NC1)
+ WHKT(3,3+IIGLU1) =WHKK(3,NC1)
+ WHKT(4,3+IIGLU1) =WHKK(4,NC1)
+ IF(IPIP.EQ.1)THEN
+ IDHKT(7+IIGLU1) =1000*IPP1+100*ISQ1+3
+ IF(IDHKT(7+IIGLU1).EQ.1203)IDHKT(7+IIGLU1)=2103
+ IF(IDHKT(7+IIGLU1).EQ.1303)IDHKT(7+IIGLU1)=3103
+ IF(IDHKT(7+IIGLU1).EQ.2303)IDHKT(7+IIGLU1)=3203
+ ELSEIF(IPIP.EQ.2)THEN
+ IDHKT(7+IIGLU1) =1000*IPP1+100*(-ISQ1+6)-3
+ IF(IDHKT(7+IIGLU1).EQ.-1203)IDHKT(7+IIGLU1)=-2103
+ IF(IDHKT(7+IIGLU1).EQ.-1303)IDHKT(7+IIGLU1)=-3103
+ IF(IDHKT(7+IIGLU1).EQ.-2303)IDHKT(7+IIGLU1)=-3203
+C WRITE(6,*)'IDHKT(7),IPP1,ISQ1',IDHKT(7),IPP1,ISQ1
+ ENDIF
+ ISTHKT(7+IIGLU1) =921
+ JMOHKT(1,7+IIGLU1)=NC2P
+ JMOHKT(2,7+IIGLU1)=0
+ JDAHKT(1,7+IIGLU1)=9+IIGLU1+IIGLU2
+ JDAHKT(2,7+IIGLU1)=0
+C PHKT(1,7) =0.5D0*PHKK(1,NC2P)+PHKK(1,NC1P)*XSQ/(XDIQP+XSQ)
+C PHKT(2,7) =0.5D0*PHKK(2,NC2P)+PHKK(2,NC1P)*XSQ/(XDIQP+XSQ)
+C PHKT(3,7) =0.5D0*PHKK(3,NC2P)+PHKK(3,NC1P)*XSQ/(XDIQP+XSQ)
+C PHKT(4,7+IIGLU1) =0.5D0*PHKK(4,NC2P)+PHKK(4,NC1P)*XSQ/(XDIQP+XSQ)
+**NEW
+ IF ((XSQ1 .LT.0.0D0).OR.(XDIQP .LT.0.0D0))
+ & WRITE(LOUT,*) ' mgsqbs3: ',XSQ1,XDIQP
+**
+ PHKT(1,7+IIGLU1) =PHKK(1,NC2P)+PHKK(1,NC1P)*XSQ1/(XDIQP+XSQ1)
+ PHKT(2,7+IIGLU1) =PHKK(2,NC2P)+PHKK(2,NC1P)*XSQ1/(XDIQP+XSQ1)
+ PHKT(3,7+IIGLU1) =PHKK(3,NC2P)+PHKK(3,NC1P)*XSQ1/(XDIQP+XSQ1)
+ PHKT(4,7+IIGLU1) =PHKK(4,NC2P)+PHKK(4,NC1P)*XSQ1/(XDIQP+XSQ1)
+C WRITE(6,*)'PHKK(4,NC1P),PHKK(4,NC2P), PHKT(4,7)',
+C * PHKK(4,NC1P),PHKK(4,NC2P), PHKT(4,7)
+ IF(PHKT(4,7+IIGLU1).GE. PHKK(4,NC1P))THEN
+C IREJ=1
+C WRITE(6,*)'reject PHKT(4,7).GE. PHKK(4,NC1P)'
+ IPCO=0
+C RETURN
+ GO TO 3466
+ ENDIF
+C PHKT(5,7) =PHKK(5,NC2P)
+ PHKT(5,7+IIGLU1) =SQRT(PHKT(4,7+IIGLU1)**2-
+ * PHKT(3,7+IIGLU1)**2-PHKT(2,7+IIGLU1)**2-
+ *PHKT(1,7+IIGLU1)**2)
+ VHKT(1,7+IIGLU1) =VHKK(1,NC2P)
+ VHKT(2,7+IIGLU1) =VHKK(2,NC2P)
+ VHKT(3,7+IIGLU1) =VHKK(3,NC2P)
+ VHKT(4,7+IIGLU1) =VHKK(4,NC2P)
+ WHKT(1,7+IIGLU1) =WHKK(1,NC2P)
+ WHKT(2,7+IIGLU1) =WHKK(2,NC2P)
+ WHKT(3,7+IIGLU1) =WHKK(3,NC2P)
+ WHKT(4,7+IIGLU1) =WHKK(4,NC2P)
+C Insert here the IIGLU2 gluons
+ PG1=0.D0
+ PG2=0.D0
+ PG3=0.D0
+ PG4=0.D0
+ IF(IIGLU2.GE.1)THEN
+ JJG=NC2P
+ DO 81 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ KKG=JJG+IIG-7-IIGLU1
+ IDHKT(IIG) =IDHKK(KKG)
+ ISTHKT(IIG) =921
+ JMOHKT(1,IIG)=KKG
+ JMOHKT(2,IIG)=0
+ JDAHKT(1,IIG)=9+IIGLU1+IIGLU2
+ JDAHKT(2,IIG)=0
+ PHKT(1,IIG)=PHKK(1,KKG)
+ PG1=PG1+ PHKT(1,IIG)
+ PHKT(2,IIG)=PHKK(2,KKG)
+ PG2=PG2+ PHKT(2,IIG)
+ PHKT(3,IIG)=PHKK(3,KKG)
+ PG3=PG3+ PHKT(3,IIG)
+ PHKT(4,IIG)=PHKK(4,KKG)
+ PG4=PG4+ PHKT(4,IIG)
+ PHKT(5,IIG)=PHKK(5,KKG)
+ VHKT(1,IIG) =VHKK(1,KKG)
+ VHKT(2,IIG) =VHKK(2,KKG)
+ VHKT(3,IIG) =VHKK(3,KKG)
+ VHKT(4,IIG) =VHKK(4,KKG)
+ WHKT(1,IIG) =WHKK(1,KKG)
+ WHKT(2,IIG) =WHKK(2,KKG)
+ WHKT(3,IIG) =WHKK(3,KKG)
+ WHKT(4,IIG) =WHKK(4,KKG)
+ 81 CONTINUE
+ ENDIF
+ IDHKT(8+IIGLU1+IIGLU2) =IP2
+ ISTHKT(8+IIGLU1+IIGLU2) =922
+ JMOHKT(1,8+IIGLU1+IIGLU2)=NC1T
+ JMOHKT(2,8+IIGLU1+IIGLU2)=0
+ JDAHKT(1,8+IIGLU1+IIGLU2)=9+IIGLU1+IIGLU2
+ JDAHKT(2,8+IIGLU1+IIGLU2)=0
+**NEW
+ IF ((XVQT.LT.0.0D0).OR.(XSAQ1 .LT.0.0D0))
+ & WRITE(LOUT,*) ' mgsqbs4: ',XVQT,XSAQ1
+**
+ PHKT(1,8+IIGLU1+IIGLU2) =PHKK(1,NC1T)*XVQT/(XSAQ1+XVQT)
+ PHKT(2,8+IIGLU1+IIGLU2) =PHKK(2,NC1T)*XVQT/(XSAQ1+XVQT)
+ PHKT(3,8+IIGLU1+IIGLU2) =PHKK(3,NC1T)*XVQT/(XSAQ1+XVQT)
+ PHKT(4,8+IIGLU1+IIGLU2) =PHKK(4,NC1T)*XVQT/(XSAQ1+XVQT)
+C PHKT(5,8+IIGLU1+IIGLU2) =PHKK(5,NC1T)
+ XMIST=(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ IF(XMIST.GT.0.D0)THEN
+ PHKT(5,8+IIGLU1+IIGLU2) =SQRT(PHKT(4,8+IIGLU1+IIGLU2)**2-
+ * PHKT(3,8+IIGLU1+IIGLU2)**2-PHKT(2,8+IIGLU1+IIGLU2)**2-
+ *PHKT(1,8+IIGLU1+IIGLU2)**2)
+ ELSE
+C WRITE(6,*)'MUSQBS2 parton 1 mass square LT.0 ',XMIST
+ PHKT(5,8+IIGLU1+IIGLU2)=0.D0
+ ENDIF
+ VHKT(1,8+IIGLU1+IIGLU2) =VHKK(1,NC1T)
+ VHKT(2,8+IIGLU1+IIGLU2) =VHKK(2,NC1T)
+ VHKT(3,8+IIGLU1+IIGLU2) =VHKK(3,NC1T)
+ VHKT(4,8+IIGLU1+IIGLU2) =VHKK(4,NC1T)
+ WHKT(1,8+IIGLU1+IIGLU2) =WHKK(1,NC1T)
+ WHKT(2,8+IIGLU1+IIGLU2) =WHKK(2,NC1T)
+ WHKT(3,8+IIGLU1+IIGLU2) =WHKK(3,NC1T)
+ WHKT(4,8+IIGLU1+IIGLU2) =WHKK(4,NC1T)
+ IDHKT(9+IIGLU1+IIGLU2) =88888
+C IDHKT(9) =1000*NNNC2+MMMC2+10
+ ISTHKT(9+IIGLU1+IIGLU2) =93
+C ISTHKT(9) =KKKC2
+ JMOHKT(1,9+IIGLU1+IIGLU2)=7+IIGLU1
+ JMOHKT(2,9+IIGLU1+IIGLU2)=8+IIGLU1+IIGLU2
+ JDAHKT(1,9+IIGLU1+IIGLU2)=0
+ JDAHKT(2,9+IIGLU1+IIGLU2)=0
+ PHKT(1,9+IIGLU1+IIGLU2) =PHKT(1,7+IIGLU1)
+ * +PHKT(1,8+IIGLU1+IIGLU2)+PG1
+ PHKT(2,9+IIGLU1+IIGLU2) =PHKT(2,7+IIGLU1)
+ * +PHKT(2,8+IIGLU1+IIGLU2)+PG2
+ PHKT(3,9+IIGLU1+IIGLU2) =PHKT(3,7+IIGLU1)
+ * +PHKT(3,8+IIGLU1+IIGLU2)+PG3
+ PHKT(4,9+IIGLU1+IIGLU2) =PHKT(4,7+IIGLU1)
+ * +PHKT(4,8+IIGLU1+IIGLU2)+PG4
+ PHKT(5,9+IIGLU1+IIGLU2)
+ * =SQRT(PHKT(4,9+IIGLU1+IIGLU2)**2-PHKT(1,9+IIGLU1+IIGLU2)**2-
+ * PHKT(2,9+IIGLU1+IIGLU2)**2
+ * -PHKT(3,9+IIGLU1+IIGLU2)**2)
+ IF(IPIP.GE.3)THEN
+ WRITE(LOUT,*)7+IIGLU1,ISTHKT(7+IIGLU1),IDHKT(7+IIGLU1),
+ * JMOHKT(1,7+IIGLU1),
+ * JMOHKT(2,7+IIGLU1),JDAHKT(1,7+IIGLU1),
+ *JDAHKT(2,7+IIGLU1),(PHKT(III,7+IIGLU1),III=1,5)
+ DO 91 IIG=7+IIGLU1+1,7+IIGLU1+IIGLU2
+ WRITE(LOUT,*)IIG,ISTHKT(IIG),IDHKT(IIG),
+ & JMOHKT(1,IIG),JMOHKT(2,IIG),
+ * JDAHKT(1,IIG),
+ *JDAHKT(2,IIG),(PHKT(III,IIG),III=1,5)
+ 91 CONTINUE
+ WRITE(LOUT,*)8+IIGLU1+IIGLU2,ISTHKT(8+IIGLU1+IIGLU2),
+ * IDHKT(8+IIGLU1+IIGLU2),
+ * JMOHKT(1,8+IIGLU1+IIGLU2),JMOHKT(2,8+IIGLU1+IIGLU2),
+ * JDAHKT(1,8+IIGLU1+IIGLU2),
+ *JDAHKT(2,8+IIGLU1+IIGLU2),(PHKT(III,8+IIGLU1+IIGLU2),III=1,5)
+ WRITE(LOUT,*)9+IIGLU1+IIGLU2,ISTHKT(9+IIGLU1+IIGLU2),
+ * IDHKT(9+IIGLU1+IIGLU2),
+ * JMOHKT(1,9+IIGLU1+IIGLU2),JMOHKT(2,9+IIGLU1+IIGLU2),
+ * JDAHKT(1,9+IIGLU1+IIGLU2),
+ *JDAHKT(2,9+IIGLU1+IIGLU2),(PHKT(III,9+IIGLU1+IIGLU2),III=1,5)
+ ENDIF
+ CHAMAL=CHAB1
+ IF(IPIP.EQ.1)THEN
+ IF(IP2.GE.3.OR.IPP1.GE.3.OR.ISQ1.GE.3)CHAMAL=CHAB3
+ ELSEIF(IPIP.EQ.2)THEN
+ IF(IP2.LE.-3.OR.IPP1.LE.-3.OR.ISQ1.GE.9)CHAMAL=CHAB3
+ ENDIF
+ IF(PHKT(5,9+IIGLU1+IIGLU2).LT.CHAMAL)THEN
+C IREJ=1
+ IPCO=0
+C RETURN
+C WRITE(6,*)' MGSQBS1 jump back from chain 9',
+C * 'CHAMAL,PHKT(5,9+IIGLU1+IIGLU2)',CHAMAL,PHKT(5,9+IIGLU1+IIGLU2)
+ GO TO 3466
+ ENDIF
+ VHKT(1,9+IIGLU1+IIGLU2) =VHKK(1,NC1)
+ VHKT(2,9+IIGLU1+IIGLU2) =VHKK(2,NC1)
+ VHKT(3,9+IIGLU1+IIGLU2) =VHKK(3,NC1)
+ VHKT(4,9+IIGLU1+IIGLU2) =VHKK(4,NC1)
+ WHKT(1,9+IIGLU1+IIGLU2) =WHKK(1,NC1)
+ WHKT(2,9+IIGLU1+IIGLU2) =WHKK(2,NC1)
+ WHKT(3,9+IIGLU1+IIGLU2) =WHKK(3,NC1)
+ WHKT(4,9+IIGLU1+IIGLU2) =WHKK(4,NC1)
+C
+ IGCOUN=9+IIGLU1+IIGLU2
+ IPCO=0
+ RETURN
+ END
+C
+C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+C
+ SUBROUTINE HKKHKT(I,J)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ PARAMETER (NTMHKK= 300)
+ COMMON /HKKTMP/NHKKT,NEVHKT,ISTHKT(NTMHKK),IDHKT(NTMHKK),JMOHKT
+ +(2,NTMHKK),JDAHKT(2,NTMHKK), PHKT(5,NTMHKK),VHKT(4,NTMHKK),WHKT
+ +(4,NTMHKK)
+C
+ ISTHKK(I) =ISTHKT(J)
+ IDHKK(I) =IDHKT(J)
+C IF(J.EQ.3.OR.J.EQ.6.OR.J.EQ.9)THEN
+ IF(IDHKK(I).EQ.88888)THEN
+C JMOHKK(1,I)=I-2
+C JMOHKK(2,I)=I-1
+ JMOHKK(1,I)=I-(J-JMOHKT(1,J))
+ JMOHKK(2,I)=I-(J-JMOHKT(2,J))
+ ELSE
+ JMOHKK(1,I)=JMOHKT(1,J)
+ JMOHKK(2,I)=JMOHKT(2,J)
+ ENDIF
+ JDAHKK(1,I)=JDAHKT(1,J)
+ JDAHKK(2,I)=JDAHKT(2,J)
+C IF(J.EQ.1.OR.J.EQ.4.OR.J.EQ.7)THEN
+C JDAHKK(1,I)=I+2
+C ELSEIF(J.EQ.2.OR.J.EQ.5.OR.J.EQ.8)THEN
+C JDAHKK(1,I)=I+1
+C ENDIF
+ IF(JDAHKT(1,J).GT.0)THEN
+ JDAHKK(1,I)=I+(JDAHKT(1,J)-J)
+ ENDIF
+ PHKK(1,I) =PHKT(1,J)
+ PHKK(2,I) =PHKT(2,J)
+ PHKK(3,I) =PHKT(3,J)
+ PHKK(4,I) =PHKT(4,J)
+ PHKK(5,I) =PHKT(5,J)
+ VHKK(1,I) =VHKT(1,J)
+ VHKK(2,I) =VHKT(2,J)
+ VHKK(3,I) =VHKT(3,J)
+ VHKK(4,I) =VHKT(4,J)
+ WHKK(1,I) =WHKT(1,J)
+ WHKK(2,I) =WHKT(2,J)
+ WHKK(3,I) =WHKT(3,J)
+ WHKK(4,I) =WHKT(4,J)
+ RETURN
+ END
+*
+*===dbreak=============================================================*
+*
+CDECK ID>, DT_DBREAK
+ SUBROUTINE DT_DBREAK(MODE)
+
+************************************************************************
+* This is the steering subroutine for the different diquark breaking *
+* mechanisms. *
+* *
+* MODE = 1 breaking of projectile diquark in qq-q chain using *
+* a sea quark (q-qq chain) of the same projectile *
+* = 2 breaking of target diquark in q-qq chain using *
+* a sea quark (qq-q chain) of the same target *
+* = 3 breaking of projectile diquark in qq-q chain using *
+* a sea quark (q-aq chain) of the same projectile *
+* = 4 breaking of target diquark in q-qq chain using *
+* a sea quark (aq-q chain) of the same target *
+* = 5 breaking of projectile anti-diquark in aqaq-aq chain using *
+* a sea anti-quark (aq-aqaq chain) of the same projectile *
+* = 6 breaking of target anti-diquark in aq-aqaq chain using *
+* a sea anti-quark (aqaq-aq chain) of the same target *
+* = 7 breaking of projectile anti-diquark in aqaq-aq chain using *
+* a sea anti-quark (aq-q chain) of the same projectile *
+* = 8 breaking of target anti-diquark in aq-aqaq chain using *
+* a sea anti-quark (q-aq chain) of the same target *
+* *
+* Original version by J. Ranft. *
+* This version dated 17.5.00 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+* flags for input different options
+ LOGICAL LEMCCK,LHADRO,LSEADI,LEVAPO
+ COMMON /DTFLG1/ IFRAG(2),IRESCO,IMSHL,IRESRJ,IOULEV(6),
+ & LEMCCK,LHADRO(0:9),LSEADI,LEVAPO,IFRAME,ITRSPT
+* pointer to chains in hkkevt common (used by qq-breaking mechanisms)
+ PARAMETER (MAXCHN=10000)
+ COMMON /DTIXCH/ IDXCHN(2,MAXCHN),NCHAIN
+* diquark-breaking mechanism
+ COMMON /DTDIQB/ DBRKR(3,8),DBRKA(3,8),CHAM1,CHAM3,CHAB1,CHAB3
+* flags for particle decays
+ COMMON /DTFRPA/ MSTUX(20),PARUX(20),MSTJX(20),PARJX(20),
+ & IMSTU(20),IPARU(20),IMSTJ(20),IPARJ(20),
+ & NMSTU,NPARU,NMSTJ,NPARJ,PDB,PDBSEA(3),ISIG0,IPI0
+
+*
+* chain identifiers
+* ( 1 = q-aq, 2 = aq-q, 3 = q-qq, 4 = qq-q,
+* 5 = aq-adq, 6 = adq-aq, 7 = dq-adq, 8 = adq-dq )
+ DIMENSION IDCHN1(8),IDCHN2(8)
+ DATA IDCHN1 / 4, 3, 4, 3, 6, 5, 6, 5/
+ DATA IDCHN2 / 3, 4, 1, 2, 5, 6, 2, 1/
+*
+* parton identifiers
+* ( +-21/22 = valence, +-31/32 = Glauber-sea, +-41/42 = Pomeron (diff),
+* +-51/52 = unitarity-sea, +-61/62 = gluons )
+ DIMENSION ISP1P(8,3),ISP1T(8,3),ISP2P(8,3),ISP2T(8,3)
+ DATA ISP1P / 21, 21, 21, 21, 21, 21, 21, 21,
+ & 31, 31, 31, 31, 31, 31, 31, 31,
+ & 41, 41, 41, 41, 51, 51, 51, 51/
+ DATA ISP1T / 22, 22, 22, 22, 22, 22, 22, 22,
+ & 32, 32, 32, 32, 32, 32, 32, 32,
+ & 42, 42, 42, 42, 52, 52, 52, 52/
+ DATA ISP2P / 31, 21, 31, 31, 21, 21, 21, 21,
+ & 51, 31, 41, 41, 31, 31, 31, 31,
+ & 0, 41, 51, 51, 51, 51, 51, 51/
+ DATA ISP2T / 22, 32, 32, 32, 22, 22, 22, 22,
+ & 32, 52, 42, 42, 32, 32, 32, 32,
+ & 42, 0, 52, 52, 52, 52, 52, 52/
+
+ IF (NCHAIN.LE.0) RETURN
+ DO 1 I=1,NCHAIN
+ IDX1 = IDXCHN(1,I)
+ IS1P = ABS(ISTHKK(JMOHKK(1,IDX1)))
+ IS1T = ABS(ISTHKK(JMOHKK(2,IDX1)))
+ IF ( (IDXCHN(2,I).EQ.IDCHN1(MODE))
+ & .AND.
+ & ((IS1P.EQ.ISP1P(MODE,1)).OR.(IS1P.EQ.ISP1P(MODE,2)).OR.
+ & (IS1P.EQ.ISP1P(MODE,3)))
+ & .AND.
+ & ((IS1T.EQ.ISP1T(MODE,1)).OR.(IS1T.EQ.ISP1T(MODE,2)).OR.
+ & (IS1T.EQ.ISP1T(MODE,3)))
+ & ) THEN
+ DO 2 J=1,NCHAIN
+ IDX2 = IDXCHN(1,J)
+ IS2P = ABS(ISTHKK(JMOHKK(1,IDX2)))
+ IS2T = ABS(ISTHKK(JMOHKK(2,IDX2)))
+ IF ( (IDXCHN(2,J).EQ.IDCHN2(MODE))
+ & .AND.
+ & ((IS2P.EQ.ISP2P(MODE,1)).OR.(IS2P.EQ.ISP2P(MODE,2))
+ & .OR.(IS2P.EQ.ISP2P(MODE,3)))
+ & .AND.
+ & ((IS2T.EQ.ISP2T(MODE,1)).OR.(IS2T.EQ.ISP2T(MODE,2))
+ & .OR.(IS2T.EQ.ISP2T(MODE,3)))
+ & ) THEN
+* find mother nucleons of the diquark to be splitted and of the
+* sea-quark and reject this combination if it is not the same
+ IF ((MODE.EQ.1).OR.(MODE.EQ.3).OR.
+ & (MODE.EQ.5).OR.(MODE.EQ.7)) THEN
+ IANCES = 1
+ ELSE
+ IANCES = 2
+ ENDIF
+ IDXMO1 = JMOHKK(IANCES,IDX1)
+ 4 CONTINUE
+ IF ((JMOHKK(1,IDXMO1).NE.0).AND.
+ & (JMOHKK(2,IDXMO1).NE.0)) THEN
+ IANC = IANCES
+ ELSE
+ IANC = 1
+ ENDIF
+ IF (JMOHKK(IANC,IDXMO1).NE.0) THEN
+ IDXMO1 = JMOHKK(IANC,IDXMO1)
+ GOTO 4
+ ENDIF
+ IDXMO2 = JMOHKK(IANCES,IDX2)
+ 5 CONTINUE
+ IF ((JMOHKK(1,IDXMO2).NE.0).AND.
+ & (JMOHKK(2,IDXMO2).NE.0)) THEN
+ IANC = IANCES
+ ELSE
+ IANC = 1
+ ENDIF
+ IF (JMOHKK(IANC,IDXMO2).NE.0) THEN
+ IDXMO2 = JMOHKK(IANC,IDXMO2)
+ GOTO 5
+ ENDIF
+ IF (IDXMO1.NE.IDXMO2) GOTO 2
+* quark content of projectile parton
+ IP1 = IDHKK(JMOHKK(1,IDX1))
+ IP11 = IP1/1000
+ IP12 = (IP1-1000*IP11)/100
+ IP2 = IDHKK(JMOHKK(2,IDX1))
+ IP21 = IP2/1000
+ IP22 = (IP2-1000*IP21)/100
+* quark content of target parton
+ IT1 = IDHKK(JMOHKK(1,IDX2))
+ IT11 = IT1/1000
+ IT12 = (IT1-1000*IT11)/100
+ IT2 = IDHKK(JMOHKK(2,IDX2))
+ IT21 = IT2/1000
+ IT22 = (IT2-1000*IT21)/100
+* split diquark and form new chains
+ IF (MODE.EQ.1) THEN
+ IF (IT1.EQ.4) GOTO 2
+ CALL MGSQBS1(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP11,IP12,IP2,IT1,IT21,IT22,1,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.2) THEN
+ IF (IT2.EQ.4) GOTO 2
+ CALL MGSQBS2(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP1,IP21,IP22,IT11,IT12,IT2,1,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.3) THEN
+ IF (IT1.EQ.4) GOTO 2
+ CALL MUSQBS1(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP11,IP12,IP2,IT1,IT2,1,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.4) THEN
+ IF (IT2.EQ.4) GOTO 2
+ CALL MUSQBS2(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP1,IP21,IP22,IT1,IT2,1,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.5) THEN
+ CALL MGSQBS1(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP11,IP12,IP2,IT1,IT21,IT22,2,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.6) THEN
+ CALL MGSQBS2(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP1,IP21,IP22,IT11,IT12,IT2,2,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.7) THEN
+ CALL MUSQBS1(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP11,IP12,IP2,IT1,IT2,2,IPQ,IGCOUN)
+ ELSEIF (MODE.EQ.8) THEN
+ CALL MUSQBS2(IDX1,JMOHKK(1,IDX1),JMOHKK(2,IDX1),
+ & IDX2,JMOHKK(1,IDX2),JMOHKK(2,IDX2),IREJ,
+ & IP1,IP21,IP22,IT1,IT2,2,IPQ,IGCOUN)
+ ENDIF
+ IF (IREJ.GE.1) THEN
+ if ((ipq.lt.0).or.(ipq.ge.4))
+ & write(LOUT,*) 'ipq !!!',ipq,mode
+ DBRKR(IPQ,MODE) = DBRKR(IPQ,MODE)+1.0D0
+* accept or reject new chains corresponding to PDBSEA
+ ELSE
+ IF ((IPQ.EQ.1).OR.(IPQ.EQ.2)) THEN
+ ACC = DBRKA(1,MODE)+DBRKA(2,MODE)
+ REJ = DBRKR(1,MODE)+DBRKR(2,MODE)
+ ELSEIF (IPQ.EQ.3) THEN
+ ACC = DBRKA(3,MODE)
+ REJ = DBRKR(3,MODE)
+ ELSE
+ WRITE(LOUT,*) ' inconsistent IPQ ! ',IPQ
+ STOP
+ ENDIF
+ IF (ACC/(ACC+REJ).LE.PDBSEA(IPQ)) THEN
+ DBRKA(IPQ,MODE) = DBRKA(IPQ,MODE)+1.0D0
+ IACC = 1
+ ELSE
+ DBRKR(IPQ,MODE) = DBRKR(IPQ,MODE)+1.0D0
+ IACC = 0
+ ENDIF
+* new chains have been accepted and are now copied into HKKEVT
+ IF (IACC.EQ.1) THEN
+ IF (LEMCCK) THEN
+ CALL DT_EVTEMC(PHKK(1,IDX1),PHKK(2,IDX1),
+ & PHKK(3,IDX1),PHKK(4,IDX1),
+ & 1,IDUM1,IDUM2)
+ CALL DT_EVTEMC(PHKK(1,IDX2),PHKK(2,IDX2),
+ & PHKK(3,IDX2),PHKK(4,IDX2),
+ & 2,IDUM1,IDUM2)
+ ENDIF
+ IDHKK(IDX1) = 99888
+ IDHKK(IDX2) = 99888
+ IDXCHN(2,I) = -1
+ IDXCHN(2,J) = -1
+ DO 3 K=1,IGCOUN
+ NHKK = NHKK+1
+ CALL HKKHKT(NHKK,K)
+ IF ((LEMCCK).AND.(IDHKK(NHKK).EQ.88888))THEN
+ PX = -PHKK(1,NHKK)
+ PY = -PHKK(2,NHKK)
+ PZ = -PHKK(3,NHKK)
+ PE = -PHKK(4,NHKK)
+ CALL DT_EVTEMC(PX,PY,PZ,PE,2,IDUM1,IDUM2)
+ ENDIF
+ 3 CONTINUE
+ IF (LEMCCK) THEN
+ CHKLEV = 0.1D0
+ CALL DT_EVTEMC(DUM1,DUM2,DUM3,CHKLEV,-1,9000,
+ & IREJ)
+ IF (IREJ.NE.0) CALL DT_EVTOUT(4)
+ ENDIF
+ GOTO 1
+ ENDIF
+ ENDIF
+ ENDIF
+ 2 CONTINUE
+ ENDIF
+ 1 CONTINUE
+ RETURN
+ END
+*
+*===cqpair=============================================================*
+*
+CDECK ID>, DT_CQPAIR
+ SUBROUTINE DT_CQPAIR(XQMAX,XAQMAX,XQ,XAQ,IFLV,IREJ)
+
+************************************************************************
+* This subroutine Creates a Quark-antiquark PAIR from the sea. *
+* *
+* XQMAX maxium energy fraction of quark (input) *
+* XAQMAX maxium energy fraction of antiquark (input) *
+* XQ energy fraction of quark (output) *
+* XAQ energy fraction of antiquark (output) *
+* IFLV quark flavour (- antiquark flavor) (output) *
+* *
+* This version dated 14.5.00 is written by S. Roesler. *
+************************************************************************
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( LINP = 5 ,
+ & LOUT = 6 ,
+ & LDAT = 9 )
+
+* Lorentz-parameters of the current interaction
+ COMMON /DTLTRA/ GACMS(2),BGCMS(2),GALAB,BGLAB,BLAB,
+ & UMO,PPCM,EPROJ,PPROJ
+
+*
+ IREJ = 0
+ XQ = 0.0D0
+ XAQ = 0.0D0
+*
+* sample quark flavour
+*
+* set seasq here (the one from DTCHAI should be used in the future)
+ SEASQ = 0.5D0
+ IFLV = INT(1.0D0+DT_RNDM(XQMAX)*(2.0D0+SEASQ))
+*
+* sample energy fractions of sea pair
+* we first sample the energy fraction of a gluon and then split the gluon
+*
+* maximum energy fraction of the gluon forced via input
+ XGMAXI = XQMAX+XAQMAX
+* minimum energy fraction of the gluon
+ XTHR1 = 4.0D0 /UMO**2
+ XTHR2 = 0.54D0/UMO**1.5D0
+ XGMIN = MAX(XTHR1,XTHR2)
+* maximum energy fraction of the gluon
+ XGMAX = 0.3D0
+ XGMAX = MIN(XGMAXI,XGMAX)
+ IF (XGMIN.GE.XGMAX) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+*
+* sample energy fraction of the gluon
+ NLOOP = 0
+ 1 CONTINUE
+ NLOOP = NLOOP+1
+ IF (NLOOP.GE.50) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+ XGLUON = DT_SAMSQX(XGMIN,XGMAX)
+ EGLUON = XGLUON*UMO/2.0D0
+*
+* split gluon into q-aq pair (we follow PHOJET's subroutine PHO_GLU2QU)
+ ZMIN = MIN(0.1D0,0.5D0/EGLUON)
+ ZMAX = 1.0D0-ZMIN
+ RZ = DT_RNDM(ZMAX)
+ XHLP = ((1.0D0-RZ)*ZMIN**3+RZ*ZMAX**3)**0.33333
+ RQ = DT_RNDM(ZMAX)
+ IF (RQ.LT.0.5D0) THEN
+ XQ = XGLUON*XHLP
+ XAQ = XGLUON-XQ
+ ELSE
+ XAQ = XGLUON*XHLP
+ XQ = XGLUON-XAQ
+ ENDIF
+ IF ((XQ.GT.XQMAX).OR.(XAQ.GT.XAQMAX)) GOTO 1
+
+ RETURN
+ END
--- /dev/null
+***********************************************************
+*
+* parameter set for running cut option IPAMDL(7) = 1
+*
+* new fits
+*
+***********************************************************
+NEXTDATA
+ -2212 GRV94 LO 5 6 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ 2212 GRV94 LO 5 6 0
+ -2212 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ 2212 GRV94 LO 5 6 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.576 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ -211 GRV-P LO 5 2 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 3.658 6.926 0.359 1.208
+ 0.490 1.000 8.384 7.945 0.072 1.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.700 0.600
+ 0.300 1.100 3.000
+NEXTDATA
+ 211 GRV-P LO 5 2 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 3.706 6.926 0.362 1.208
+ 0.490 1.000 5.090 7.945 2.289 1.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.700 0.600
+ 0.300 1.100 3.000
+NEXTDATA
+ 111 GRV-P LO 5 2 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 3.706 6.926 0.362 1.208
+ 0.490 1.000 5.090 7.945 2.289 1.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.700 0.600
+ 0.300 1.100 3.000
+NEXTDATA
+ -321 GRV-P LO 5 2 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 3.658 6.926 0.359 1.208
+ 0.490 1.000 8.384 7.945 0.072 1.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.700 0.600
+ 0.300 1.100 3.000
+NEXTDATA
+ 321 GRV-P LO 5 2 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 3.706 6.926 0.362 1.208
+ 0.490 1.000 5.090 7.945 2.289 1.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.700 0.600
+ 0.300 1.100 3.000
+NEXTDATA
+ 22 GRV-G LO 5 3 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 2.863 6.926 1.030 1.208
+ 0.473 1.000 8.526 5.908 0.000 0.374
+ 0.149 0.500 0.176 0.300
+ 0.00446 0.00008 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.750 0.600
+ 1.000 1.100 3.000
+NEXTDATA
+ 2212 GRV94 LO 5 6 0
+ 22 GRV-G LO 5 3 0
+ 1.080 0.250 6.926 2.863 1.208 1.030
+ 0.473 1.000 5.908 8.526 0.374 0.000
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 0.00446 0.00008
+ 2.500
+ 1.000
+ 0.600 0.750
+ 1.100 1.000 3.000
+NEXTDATA
+ 22 GRV-G LO 5 3 0
+ 22 GRV-G LO 5 3 0
+ 1.080 0.250 2.863 2.863 1.030 1.030
+ 0.473 1.000 5.526 5.526 0.124 0.124
+ 0.149 0.500 0.176 0.300
+ 0.00446 0.00008 0.00446 0.00008
+ 2.500
+ 1.000
+ 0.750 0.750
+ 1.000 1.000 3.000
+NEXTDATA
+ 211 GRV-P LO 5 2 0
+ 211 GRV-P LO 5 2 0
+ 1.080 0.250 3.706 3.706 0.362 0.362
+ 0.490 1.000 7.945 7.945 1.174 1.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.700 0.700
+ 0.300 0.300 3.000
+NEXTDATA
+ 2212 GRV94 LO 5 6 0
+ 2112 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.576 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ 2112 GRV94 LO 5 6 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.576 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ 2112 GRV94 LO 5 6 0
+ 2112 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.576 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ -2112 GRV94 LO 5 6 0
+ 2212 GRV94 LO 5 6 0
+ 1.080 0.250 6.926 6.926 1.208 1.208
+ 0.490 1.000 5.908 5.908 2.174 2.174
+ 0.149 0.500 0.176 0.300
+ 1.00000 0.00000 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.600 0.600
+ 1.100 1.100 3.000
+NEXTDATA
+ 22 GRV-G LO 5 3 0
+ -2212 GRV94 LO 5 6 0
+ 1.080 0.250 2.863 6.926 1.030 1.208
+ 0.473 1.000 8.526 5.908 0.000 0.374
+ 0.149 0.500 0.176 0.300
+ 0.00446 0.00008 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.750 0.600
+ 1.000 1.100 3.000
+NEXTDATA
+ 22 GRV-G LO 5 3 0
+ 2112 GRV94 LO 5 6 0
+ 1.080 0.250 2.863 6.926 1.030 1.208
+ 0.473 1.000 8.526 5.908 0.000 0.374
+ 0.149 0.500 0.176 0.300
+ 0.00446 0.00008 1.00000 0.00000
+ 2.500
+ 1.000
+ 0.750 0.600
+ 1.000 1.100 3.000
+STOP
--- /dev/null
+*$ CREATE AACOLL.ADD
+*COPY AACOLL
+*
+*=== Aacoll ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* A-A COLLision common: *
+* *
+* Ion-Ion collision common for Fluka 9x....: *
+* *
+* Last change on 15-apr-99 by Alfredo Ferrari, INFN-Milan *
+* *
+* Description of the variable(s): *
+* *
+* Ekpern = kinetic energy per nucleon GeV/amu *
+* Enpern = total energy per nucleon GeV/amu *
+* Plpern = momentum per nucleon GeV/c/amu *
+* Eexion = excitation energy of the projectile ion *
+* Matprj(i) = list of materials used as projectiles *
+* Nmatpr = number of materials defined inside Matprj *
+* Iproa = the projectile mass number *
+* Iproz = the projectile proton number *
+* Mattar = material number of the target *
+* Itara = the target mass number *
+* Itarz = the target proton number *
+* Matpro = material number of the (current) projectile *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! Note that the units are GeV/amu --> per unit mass !!!! *
+* !!!! with mass measured in amu (1 amu = Amuc12 GeV) !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / AACOLL / EKPERN, ENPERN, PLPERN, EEXION, MATPRJ (MXXMDF),
+ & NMATPR, MATPRO, IPROA , IPROZ , MATTAR, ITARA ,
+ & ITARZ
+
--- /dev/null
+*$ CREATE AADAT.ADD
+*COPY AADAT
+* *
+*=== aadat ============================================================*
+* *
+ PARAMETER (IPROM = 100)
+ PARAMETER (ITARM = 100)
+ COMMON/AADAT/ENPERN,PLPERN,SIGAA(IPROM,ITARM),SIGNN,TMASS,AAEVNO,
+ + SELAA(IPROM,ITARM),RLASTP(IPROM,ITARM),
+ + MATPRO,MATTAR,LASTM,IPROA,IPROZ,ITARA,ITARZ
+
--- /dev/null
+*$ CREATE ABLTIS.ADD
+*COPY ABLTIS
+*
+*=== abltis ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* This is the old ABLTIS common of Hadrin, extracted and put *
+* into an include file *
+* *
+* Created on 17 may 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 07-feb-97 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* AMGA *
+* CALUMO *
+* CALUMV *
+* DATESH *
+* FERHAV *
+* HADDEN *
+* HADRIN *
+* HADRIV *
+* HYPERO *
+* NUCRIV *
+* RCHANV *
+* SIGINT *
+* TCHOIC *
+* TWOPAR *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / ABLTIS / AM (-6:MXPABL), GA (-6:MXPABL),
+ & TAU (-6:MXPABL), ICH (-6:MXPABL),
+ & IBAR (-6:MXPABL), K1 (-6:MXPABL),
+ & K2 (-6:MXPABL)
+
--- /dev/null
+*$ CREATE ADDHP.ADD
+*COPY ADDHP
+*
+*=== addhp ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file Addhp: (it is a very old one, recently put into an *
+* include file) *
+* *
+* Created on 17 may 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 03-aug-99 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BLKDT5 *
+* HADDEN *
+* *
+*----------------------------------------------------------------------*
+*
+* Till 3-aug-99:
+* PARAMETER ( MXPADD = 16 )
+* PARAMETER ( MXADZK = 153 )
+ PARAMETER ( MXPADD = 26 )
+ PARAMETER ( MXADZK = 183 )
+ CHARACTER*8 ANAMZ,ZKNAMZ
+ COMMON / ADDHP / AMZ (MXPADD), GAZ (MXPADD), TAUZ (MXPADD),
+ & WTZ (MXADZK), ICHZ (MXPADD), IBARZ (MXPADD),
+ & K1Z (MXPADD), K2Z (MXPADD), NZKZ (MXADZK,3),
+ & II22
+ COMMON / ADDHN / ANAMZ (MXPADD), ZKNAMZ (MXADZK)
+
--- /dev/null
+*$ CREATE ATFFAC.ADD
+*COPY ATFFAC
+*
+*=== ATFFAC ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file atffac: ATomic Form FACtors *
+* *
+* Created on 18 march 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 29-may-93 by Alfredo Ferrari *
+* *
+* Gmoliz(iz) = Z^1/3 / 121 *
+* Algmlz(iz) = Log (Gmoliz(iz)) *
+* Xsielz(iz) = asymptotic contribution of atomic electrons to pair *
+* and bremsstrahlung *
+* Fclmbz(iz) = Coulomb correction *
+* Aagelz(iz) = a for the Tsai fit to the atomic elastic form factor*
+* [1-F^2(q)]=(aq)^4/[1+(aq)^2]^2, [a] = [MeV/c]^-1 *
+* For Z>=5 is given by a = 111.7 / (Z^1/3 me) *
+* Apginz(iz) = a' for the Tsai fit to the atomic inelastic form *
+* factor S(q)=(a'q)^4/[1+(a'q)^2]^2, [a'] = [MeV/c]^-1*
+* For Z>=5 is given by a' = 724.2 / (Z^2/3 me) *
+* *
+* Actually a and a' are stored already squared !! *
+* *
+* Asqzft(iz) = a parameter for the fit to S(q,Z) computed with the *
+* Hartree-Fock method *
+* Bsqzft(iz) = b parameter for the fit to S(q,Z) computed with the *
+* Hartree-Fock method *
+* Csqzft(iz) = c parameter for the fit to S(q,Z) computed with the *
+* Hartree-Fock method *
+* Dsqzft(iz) = d parameter for the fit to S(q,Z) computed with the *
+* Hartree-Fock method *
+* Esqzft(iz) = e parameter for the fit to S(q,Z) computed with the *
+* Hartree-Fock method *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( A121 = 121. D+00 )
+ PARAMETER ( A111P7 = 111.7 D+00 )
+ PARAMETER ( A724P2 = 724.2 D+00 )
+ PARAMETER ( A184 = 184.15 D+00 )
+ PARAMETER ( A1194 = 1194. D+00 )
+*
+ COMMON / ATFFAC / GMOLIZ (100), ALGMLZ (100), XSIELZ (100),
+ & FCLMBZ (100), AAGELZ (100), APGINZ (100),
+ & ASQZFT (100), BSQZFT (100), CSQZFT (100),
+ & DSQZFT (100), ESQZFT (100)
+
--- /dev/null
+*$ CREATE ATNUBF.ADD
+*COPY ATNUBF
+*
+*=== atnubf ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* ATmospheric NeUtrino BuFfer: *
+* *
+* Created on 29 may 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 15-dec-99 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Idatnu = neutrino id (Paprop numbering) *
+* Lgatnu = neutrino generation *
+* Enatnu = neutrino energy (GeV) *
+* Diatnu = neutrino production height or distance (cm) *
+* Thatnu = neutrino direction polar (theta) angle (rad) *
+* Phatnu = neutrino direction azimuthal (phi) angle (rad) *
+* Wtatnu = neutrino weight (such to be automatically norm- *
+* alized to fluence per unit time and area) *
+* Ipatnu = parent cosmic ray id (Z + 100 x A) *
+* Ifatnu = "father" hadron/muon Fluka id *
+* Igatnu = "grandfather" hadron Fluka id *
+* Ictfnu = i1 + j1 x 3 + i2 x 9 + j2 x 27 + i3 x 81 + j3 x 243*
+* + i4 x 729 + j4 x 2187 + i5 x 6561 + j5 x 19683 *
+* ik = cutoff flag for the k_th location, direct nu *
+* jk = cutoff flag for the k_th location, mirror nu *
+* = 0 <-> not yet checked *
+* = 1 <-> neutrino not cutoffed *
+* = 2 <-> neutrino cutoffed *
+* Pmatnu = parent cosmic ray momentum (GeV/c/amu) *
+* Pfatnu = "father" hadron/muon momentum (GeV/c) *
+* Pgatnu = "grandfather" hadron momentum (GeV/c) *
+* Xpatnu = parent cosmic ray 1st interaction x coord. (cm) *
+* Ypatnu = parent cosmic ray 1st interaction y coord. (cm) *
+* Zpatnu = parent cosmic ray 1st interaction z coord. (cm) *
+* Tpatnu = parent cosmic ray direction polar angle (rad) *
+* Ppatnu = parent cosmic ray direction azimuthal angle (rad) *
+* Wpatnu = accumulated primary weight at the previous buffer *
+* flush *
+* Npatnu = accumulated primary number at the previous buffer *
+* flush *
+* Ncatnu = current pointer in the buffer *
+* Lbatnu = logical flag for atmospheric neutrino buffering *
+* Lunatn = logical unit for the atmospheric neutrino file *
+* *
+* ALL VARIABLES ARE MEANT IN THE FRAME WHERE THE NEUTRINO POSITION *
+* IS ALONG (0,0,1), THAT IS Z IS THE LOCAL ZENITH AXIS, X IS POIN- *
+* TING NORTH, AND Y IS POINTING WEST *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXATNU = 2000 )
+ LOGICAL LBATNU
+*
+ COMMON / ATNUBF / ENATNU (MXATNU), DIATNU (MXATNU),
+ & THATNU (MXATNU), PHATNU (MXATNU),
+ & WTATNU (MXATNU), PMATNU (MXATNU),
+ & PFATNU (MXATNU), PGATNU (MXATNU),
+ & XPATNU (MXATNU), YPATNU (MXATNU),
+ & ZPATNU (MXATNU), TPATNU (MXATNU),
+ & PPATNU (MXATNU), WPATNU,
+ & IDATNU (MXATNU), LGATNU (MXATNU),
+ & IPATNU (MXATNU), IFATNU (MXATNU),
+ & IGATNU (MXATNU), ICTFNU (MXATNU),
+ & NPATNU, NCATNU, LBATNU, LUNATN
--- /dev/null
+*$ CREATE ATNUBM.ADD
+*COPY ATNUBM
+*
+*=== atnubm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* ATmospheric NeUtrino Buffer for Mirrors neutrinos: *
+* *
+* Created on 29 may 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 15-dec-99 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Idatnm = neutrino id (Paprop numbering) *
+* Lgatnm = neutrino generation *
+* Enatnm = neutrino energy (GeV) *
+* Diatnm = neutrino production height or distance (cm) *
+* Thatnm = neutrino direction polar (theta) angle (rad) *
+* Phatnm = neutrino direction azimuthal (phi) angle (rad) *
+* Wtatnm = neutrino weight (such to be automatically norm- *
+* alized to fluence per unit time and area) *
+* Ipatnm = parent cosmic ray id (Z + 100 x A) *
+* Ictfnm = i1 + j1 x 3 + i2 x 9 + j2 x 27 + i3 x 81 + j3 x 243*
+* + i4 x 729 + j4 x 2187 + i5 x 6561 + j5 x 19683 *
+* ik = cutoff flag for the k_th location, direct nu *
+* jk = cutoff flag for the k_th location, mirror nu *
+* = 0 <-> not yet checked *
+* = 1 <-> neutrino not cutoffed *
+* = 2 <-> neutrino cutoffed *
+* Ifatnm = "father" hadron/muon Fluka id *
+* Igatnm = "grandfather" hadron Fluka id *
+* Pmatnm = parent cosmic ray momentum (GeV/c/amu) *
+* Pfatnm = "father" hadron/muon momentum (GeV/c) *
+* Pgatnm = "grandfather" hadron momentum (GeV/c) *
+* Xpatnm = parent cosmic ray 1st interaction x coord. (cm) *
+* Ypatnm = parent cosmic ray 1st interaction y coord. (cm) *
+* Zpatnm = parent cosmic ray 1st interaction z coord. (cm) *
+* Tpatnm = parent cosmic ray direction polar angle (rad) *
+* Ppatnm = parent cosmic ray direction azimuthal angle (rad) *
+* Ncatnm = current pointer in the buffer *
+* *
+* ALL VARIABLES ARE MEANT IN THE FRAME WHERE THE NEUTRINO POSITION *
+* IS ALONG (0,0,1), THAT IS Z IS THE LOCAL ZENITH AXIS, X IS POIN- *
+* TING NORTH, AND Y IS POINTING WEST *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXATNM = MXATNU )
+ COMMON / ATNUBM / ENATNM (MXATNM), DIATNM (MXATNM),
+ & THATNM (MXATNM), PHATNM (MXATNM),
+ & WTATNM (MXATNM), PMATNM (MXATNM),
+ & PFATNM (MXATNM), PGATNM (MXATNM),
+ & XPATNM (MXATNM), YPATNM (MXATNM),
+ & ZPATNM (MXATNM), TPATNM (MXATNM),
+ & PPATNM (MXATNM),
+ & IDATNM (MXATNM), LGATNM (MXATNM),
+ & IPATNM (MXATNM), IFATNM (MXATNM),
+ & IGATNM (MXATNM), ICTFNM (MXATNM),
+ & NCATNM
+
--- /dev/null
+*$ CREATE ATNUCM.ADD
+*COPY ATNUCM
+*
+*=== atnucm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* ATmospheric NeUtrino CoMmon: *
+* *
+* Created on 29 may 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 24-feb-00 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+* Earth magnetic field (Tesla) at surface at (earth) magnetic equator
+ PARAMETER ( BEQUA0 = 3.12 D-05 )
+*
+ COMMON / ATNUCM / BEQUAT, EARDIP, UDIPOL, VDIPOL, WDIPOL, BLATTD,
+ & XDIPOL, YDIPOL, ZDIPOL, ALATDT (5), ALONDT (5),
+ & NNUDTC, INUDTC, IMGFLG, IFLG3D, IFLOSC, IFLAMS,
+ & NATMSH, LCFLOC (5)
+ COMMON / ATNUCH / FLDATE
+ CHARACTER FLDATE*7
+ LOGICAL LCFLOC
+
+
--- /dev/null
+*$ CREATE AUXPAR.ADD
+*COPY AUXPAR
+*
+*=== Auxpar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of Auxpar: *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-oct-96 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Pxa(i) = X-component of the momentum of the i_th produced *
+* particle *
+* Pya(i) = Y-component of the momentum of the i_th produced *
+* particle *
+* Pza(i) = Z-component of the momentum of the i_th produced *
+* particle *
+* Hepa(i) = Total energy of the i_th produced particle *
+* Ama(i) = Mass of the i_th produced particle *
+* Icha(i) = Charge of the i_th produced particle *
+* Ibara(i) = Baryon number of the i_th produced particle *
+* Nrea(i) = Identity (part scheme) of the i_th produced particle *
+* Ichnfa(3,i) = Array containing additional information about pro- *
+* duction verteces, ranking etc *
+* Ana(i) = Literal name of the i_th produced particle *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANA
+ COMMON / AUXPAR / PXA (MXPDPM), PYA (MXPDPM), PZA (MXPDPM),
+ & HEPA (MXPDPM), AMA (MXPDPM), ICHA (MXPDPM),
+ & IBARA (MXPDPM), NREA (MXPDPM),
+ & ICHNFA(3,MXPDPM)
+ COMMON / CHAXPR / ANA (MXPDPM)
+
--- /dev/null
+*$ CREATE BALANC.ADD
+*COPY BALANC
+* *
+*=== balanc ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Include file Balanc *
+* *
+* Created on 20 april 1990 by Alfredo Ferrari *
+* INFN Milan *
+* *
+* Last change on 09-nov-99 by Alfredo Ferrari, INFN - Milan *
+* *
+* Actual common name changed from BALANC to CMBLNC on 22-jan-01 *
+* to get around a bug in the Linux compiler/linker *
+* *
+* Included in the following routines: not updated *
+* *
+* Kpprct = Id (Part) of the projectile of the current interac. *
+* Ptprct = Momentum of the projectile of the current interac. *
+* Px,y,zprct = Mom.comp. of the projectile of the current interac. *
+* Ax,y,zprct = Orb.Ang.Mom.comp. of the projectile of the current *
+* interac. *
+* Ekprct = Kin.ener. of the projectile of the current interac. *
+* Umoini = (initial and ... possibly final) invariant mass *
+* Uthinl = invariant mass threshold for inelastic scattering *
+* (h,h'X) *
+* Uthinl = invariant mass threshold for inelastic scattering *
+* (h,h'X) *
+* Uthcxp = threshold for charge exchange (h0,h-X)/(h-,h0X) *
+* Uthcxm = threshold for charge exchange (h-,h0X)/(h0,h+X) *
+* Jsprct = projectile spin (in hbar/2 units) *
+* Ipprct = projectile parity *
+* Llprct = Proj-target orbital angular momentum (hbar units) *
+* Jstrgt = target spin (in hbar/2 units) *
+* Iptrgt = target parity *
+* Lresmp = logical flag for resampling the whole event *
+* Lnupau = logical flag for resampling the target nucleus *
+* after a Pauli rejected neutrino interaction *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LRESMP, LNUPAU, LEVDIF, LPRDIF, LSCHAI
+ COMMON /CMBLNC/ EKPRCT, PTPRCT, PXPRCT, PYPRCT, PZPRCT, AXPRCT,
+ & AYPRCT, AZPRCT, ETTOT, PTTOT, PXTTOT, PYTTOT,
+ & PZTTOT, ENUCR, PXNUCR, PYNUCR, PZNUCR, AXNUCR,
+ & AYNUCR, AZNUCR, EINTR, PXINTR, PYINTR, PZINTR,
+ & AXINTR, AYINTR, AZINTR, EINCP, EINCN, TVGREY,
+ & TVGRE0, TVEUZ, EUZ, PUX, PUY, PUZ,
+ & EFRM, PXFRM, PYFRM, PZFRM, PSEA, UMOINI,
+ & UTHINL, UTHCXP, UTHCXM,
+ & NGREYP, NGREYN, ICU, IBU, ICNUCR, IBNUCR,
+ & ICINTR, IBINTR, KPPRCT, JSPRCT, IPPRCT, LLPRCT,
+ & LRESMP, LNUPAU, LEVDIF, LPRDIF, LSCHAI
+
--- /dev/null
+*$ CREATE BAMJCM.ADD
+*COPY BAMJCM
+*
+*=== bamjcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* BAMJev CoMmon: *
+* *
+* Created on 01 november 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 04-dec-97 by Alfredo Ferrari *
+* *
+* included in: *
+* bamjet *
+* *
+* When changing kmxjcm dimension look also at verein!!!!! *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LOQ1, LOQ2
+ PARAMETER ( KMXJCM = 100 )
+*
+ COMMON / BAMJCM / RPX (0:KMXJCM,0:1), RPY (0:KMXJCM,0:1),
+ & RPZ (0:KMXJCM,0:1), RE (0:KMXJCM,0:1),
+ & RPX1 (0:KMXJCM,0:1), RPX2 (0:KMXJCM,0:1),
+ & RPY1 (0:KMXJCM,0:1), RPY2 (0:KMXJCM,0:1),
+ & ISK12(0:KMXJCM,0:1), KFR1 (0:KMXJCM,0:1),
+ & KFR2 (0:KMXJCM,0:1), IV (0:KMXJCM,0:1),
+ & LOQ1 (0:KMXJCM,0:1), LOQ2 (0:KMXJCM,0:1)
+
--- /dev/null
+*$ CREATE BEAM.ADD
+*COPY BEAM
+*
+*=== Beam =============================================================*
+*
+*----------------------------------------------------------------------*
+* include file: beam copy created 26/11/86 by pa*
+* *
+* changes: on 22-oct-1993 by Alfredo Ferrari *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* /beam/ contains properties of the beam of primary particles *
+* pbeam = average momentum of the beam particles in gev/c *
+* dpbeam = momentum spread of the beam in gev/c *
+* divbm = angular divergense of the beam in mrad *
+* xspot = beam width in x-direction in cm *
+* yspot = beam width in y-direction in cm *
+* xina = x-coordinate of the centre of the beam spot *
+* yina = y-coordinate of the centre of the beam spot *
+* zina = z-coordinate of the centre of the beam spot *
+* tinx = direction cosine of the beam with respect to *
+* x-axis *
+* tiny = direction cosine of the beam with respect to *
+* y-axis *
+* tinz = direction cosine of the beam with respect to *
+* z-axis *
+* tinpx = direction cosine of the beam polariz. with respect to*
+* x-axis *
+* tinpy = direction cosine of the beam polariz. with respect to*
+* y-axis *
+* tinpz = direction cosine of the beam polariz. with respect to*
+* z-axis *
+* polfra = polarization fraction *
+* nforce = number of the region of forced interaction *
+* xfor = x-coord. of the starting point of the region nforce *
+* yfor = y-coord. of the starting point of the region nforce *
+* zfor = z-coord. of the starting point of the region nforce *
+* disfor = thickness of the region nforce in cm *
+* wfor = relative weight of the particle due to forcing *
+* ijbeam = beam particle type (see btype in /paprop/) *
+* ijhion = heavy ion type if ijbeam = -2 *
+* ipbite = flag describing the shape of the momentum *
+* distribution of the beam *
+* 0=rectangular, 1=gaussian *
+* idiv = flag describing the shape of the angular *
+* divergence distribution of the beam *
+* 0=rectangular, 1=gaussian *
+* ixspot = flag describing the shape of the spatial *
+* distribution of the beam spot in x-direction *
+* 0=rectangular, 1=gaussian *
+* iyspot = flag describing the shape of the spatial *
+* distribution of the beam spot in y-direction *
+* 0=rectangular, 1=gaussian *
+* beawei = weight of the beam particles *
+* lbeamc = flag for an annular beam *
+* lpperp = flag for polar. perp. to the beam direction *
+* lpfrac = flag for interpreting the polar. fraction *
+* *
+*----------------------------------------------------------------------*
+ LOGICAL LBEAMC, LPPERP, LPFRAC
+ COMMON / BEAM / PBEAM , DPBEAM, DIVBM , XSPOT , YSPOT , XINA ,
+ 1 YINA , ZINA , TINX , TINY , TINZ , TINPX ,
+ 2 TINPY , TINPZ , POLFRA, BEAWEI, XFOR , YFOR ,
+ 3 ZFOR , DISFOR, WFOR , IJBEAM, IJHION, IPBITE,
+ 4 IDIV , IXSPOT, IYSPOT, NFORCE, LBEAMC, LPPERP,
+ 5 LPFRAC
+
--- /dev/null
+*$ CREATE BEMIT.ADD
+*COPY BEMIT
+*----------------------------------------------------------------------*
+* include file: bemit copy created 26/11/86 by p*
+* changes: none *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /bemit/ contains beam properties when emittances specified *
+* verts = s-parameter for the vertical focus, is distance of *
+* v-focus from xina,yina,zina along the beam, *
+* +ve if focus upstream of xina,yina,zina. *
+* vertl = vertical l-parameter of the beam *
+* verte = vertical emittance *
+* hors = s-parameter for horizontal focus, is distance of *
+* h-focus from xina,yina,zina along the beam, *
+* +ve if focus upstream of xina,yina,zina. *
+* horl = horizontal l-parameter of the beam *
+* hore = horizontal emittance *
+* vsig = sigma of spatial v-distribution *
+* vpsig = sigma of angular vprime-distribution *
+* hsig = sigma of spatial h-distribution *
+* hpsig = sigma of angular hprime-distribution *
+* txv = x-direction cosine of v-axis *
+* tyv = y-direction cosine of v-axis *
+* tzv = z-direction cosine of v-axis *
+* txh = x-direction cosine of h-axis *
+* tyh = y direction cosine of h-axis *
+* tzh = z-direction cosine of h-axis *
+* ibemit = 1 if emittance option chosen, if not = 0 *
+*----------------------------------------------------------------------*
+ COMMON/BEMIT/VERTS,VERTL,VERTE,HORS,HORL,HORE,VSIG,VPSIG,
+ 1 HSIG,HPSIG,TXV,TYV,TZV,TXH,TYH,TZH,IBEMIT
+
--- /dev/null
+*$ CREATE BLNKCM.ADD
+*COPY BLNKCM
+*
+*=== blnkcm ===========================================================*
+*
+*======================================================================*
+* *
+* Include file Blnkcm : *
+* *
+* Created on 3 september 1989 by Alfredo Ferrari *
+* INFN, Milan *
+* *
+* Last change on 19-aug-00 by Alfredo Ferrari *
+* *
+* Blnkcm: this is the blank common for the Vax version of Fluka *
+* *
+* W A R N I N G !!!! check also blnkdm module for any change!!! *
+* *
+* Nblnmx: blank common dimension in real*8 units! *
+* *
+* Addrcm: this common contains all useful addresses for the blank *
+* common (in real*4 or i*4 numeration!!!!!!!!!!!!!!!!) *
+* *
+* Mblnmx = blank common dimension in i*4/real*4 units *
+* *
+* Kblnkl = Last memory location used in the blank common *
+* *
+* Kgmbgn = Beginning of geometry data *
+* *
+* Kgmlst = Last memory location for the geometry data *
+* *
+* Kcmbgn = Beginning of the region dependent Comsco energy *
+* and stars accumulation arrays *
+* (note this address if for zero index!!) *
+* *
+* Kcmlst = Last memory location of the region dependent *
+* Comsco energy and stars accumulation arrays *
+* *
+* Kisbgn = Beginning of isotope data tabulations *
+* *
+* Kislst = Last memory location of isotope data tabulations*
+* *
+* Kdtbgn = Beginning of detector data *
+* *
+* Kdtlst = Last memory location for the detector data *
+* *
+* Kubbgn = Beginning of user defined binning storage *
+* *
+* Kublst = Last memory location for user defined binnings *
+* *
+* Kuxbgn = Beginning of user defined bdrx storage *
+* *
+* Kuxlst = Last memory location for user defined bdrx *
+* *
+* Ktcbgn = Beginning of user defined track-length and/or *
+* collision estimators *
+* *
+* Ktclst = Last memory location for user defined track- *
+* length and/or collision density estimators *
+* *
+* Krnbgn = Beginning of user defined residual nuclei sco- *
+* ring *
+* (note this address is for zero index!!) *
+* *
+* Krnlst = Last memory location for user defined residual *
+* nuclei scoring *
+* *
+* Kylbgn = Beginning of user defined yield estimator *
+* (note this address is for zero index!!) *
+* *
+* Kyllst = Last memory location for user defined yield *
+* estimators *
+* *
+* Kxsbgn = Beginning of cross section storage *
+* *
+* Kxslst = Last memory location for cross section storage *
+* *
+* Kihbgn = Beginning of region importance storage *
+* for high energy particles *
+* (note this address is for zero index!!) *
+* *
+* Kihlst = Last memory location for region importances *
+* for high energy particles *
+* *
+* Kinbgn = Beginning of region importance storage *
+* for low energy neutrons *
+* (note this address is for zero index!!) *
+* *
+* Kinlst = Last memory location for region importances *
+* for low energy neutrons *
+* *
+* Kiebgn = Beginning of region importance storage *
+* for em cascade particles *
+* (note this address is for zero index!!) *
+* *
+* Kielst = Last memory location for region importances *
+* for em cascade particles *
+* *
+* Ketbgn = Beginning of exp. transf. parameters *
+* (note this address is for zero index!!) *
+* *
+* Ketlst = Last memory location for exp. transf. parameters*
+* *
+* Krrbgn = Beginning of region RR storage *
+* (note this address is for zero index!!) *
+* *
+* Krrlst = Last memory location for region RR storage *
+* *
+* Kglbgn = Beginning of the region dependent non-analog *
+* absorption group limit storage *
+* (note this address is for zero index!!) *
+* *
+* Kgllst = Last memory location of the region dependent *
+* non-analog absorption group limits *
+* *
+* Knabgn = Beginning of the region dependent non-analog *
+* absorption factor storage *
+* (note this address is for zero index!!) *
+* *
+* Knalst = Last memory location of the region dependent *
+* non-analog absorption factors *
+* *
+* Kgdbgn = Beginning of the region dependent biased down- *
+* scattering group limit storage *
+* (note this address is for zero index!!) *
+* *
+* Kgdlst = Last memory location of the region dependent *
+* biased downscattering group limits *
+* *
+* Kdwbgn = Beginning of the region dependent biased down- *
+* scattering factor storage *
+* (note this address is for zero index!!) *
+* *
+* Kdwlst = Last memory location of the region dependent *
+* biased downscattering factors *
+* *
+* Kgcbgn = Beginning of the region dependent group cut-off *
+* storage *
+* (note this address is for zero index!!) *
+* *
+* Kgclst = Last memory location of the region dependent *
+* group cut-off's *
+* *
+* Kwlbgn = Beginning of the region dependent weight window *
+* lower bound *
+* (note this address is for zero index!!) *
+* *
+* Kwllst = Last memory location of the region dependent *
+* weight window lower bound *
+* *
+* Kwhbgn = Beginning of the region dependent weight window *
+* higher bound *
+* (note this address is for zero index!!) *
+* *
+* Kwhlst = Last memory location of the region dependent *
+* weight window higher bound *
+* *
+* Kwmbgn = Beginning of the region dependent weight window *
+* threshold multiplication factor *
+* (note this address is for zero index!!) *
+* *
+* Kwmlst = Last memory location of the region dependent *
+* weight window threshold multiplication factor *
+* *
+* Kwsbgn = Beginning of the region dependent weight window *
+* shape profile index for low energy neutrons *
+* (note this address is for zero index!!) *
+* *
+* Kwslst = Last memory location of the region dependent *
+* shape profile index for low energy neutrons *
+* *
+* Kndbgn = Beginning of nuclear data tabulations required *
+* by the preequilibrium model *
+* *
+* Kndlst = Last memory location of nuclear data storage *
+* *
+* Kdpbgn = Beginning of the dp/dx tabulation storage *
+* (note this address is for zero index!!) *
+* *
+* Kdplst = Last memory location of dp/dx tabulations *
+* *
+* Krgbgn = Beginning of the range tabulation storage *
+* (note this address is for zero index!!) *
+* *
+* Krglst = Last memory location of range tabulations *
+* *
+* Ksgbgn = Beginning of the cross section storage *
+* (note this address is for zero index!!) *
+* *
+* Ksglst = Last memory location of cross section *
+* tabulations *
+* *
+* Kbrbgn = Beginning of the brem. (e+,e-) storage *
+* (note this address is for zero index!!) *
+* *
+* Kbrlst = Last memory location of the brem. (e+,e-) *
+* storage *
+* *
+* Kfybgn = Beginning of the fission yield storage *
+* (note this address is for zero index!!) *
+* *
+* Kfylst = Last memory location of the fission yield *
+* storage *
+* *
+* Kpwbgn = Beginning of the neutron pointwise cross section*
+* storage (note this address is for zero index!!) *
+* *
+* Kpwlst = Last memory location of the neutron pointwise *
+* cross section storage *
+* *
+* Kgrbgn = Beginning of the GDR cross section storage *
+* (note this address is for zero index!!) *
+* *
+* Kgrlst = Last memory location of the GDR cross section *
+* storage *
+* *
+* Ktmbgn = Beginning of the temporary storage *
+* (note this address is for zero index!!) *
+* *
+* W A R N I N G the blank common is initialized to 0 as a I*4 *
+* array!!!!!!!!!!!!! *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NBLNMX = 6000000 )
+ DIMENSION GMSTOR ( NBLNMX ), BRMBRR ( NBLNMX ), BRMEXP ( NBLNMX ),
+ & BRMSIG ( NBLNMX ), SIGGTT ( KALGNM*NBLNMX ),
+ & SIGGDR ( KALGNM*NBLNMX ), COMSCO ( NBLNMX ),
+ & LBSTOR ( KALGNM*NBLNMX )
+ REAL SIGGTT, SIGGDR
+ LOGICAL LBSTOR
+ COMMON NSTOR ( KALGNM*NBLNMX )
+ COMMON / ADDRCM / MBLNMX, KBLNKL, KGMBGN, KGMLST, KCMBGN, KCMLST,
+ & KISBGN, KISLST, KDTBGN, KDTLST, KUBBGN, KUBLST,
+ & KUXBGN, KUXLST, KTCBGN, KTCLST, KRNBGN, KRNLST,
+ & KYLBGN, KYLLST, KXSBGN, KXSLST, KIHBGN, KIHLST,
+ & KINBGN, KINLST, KIEBGN, KIELST, KETBGN, KETLST,
+ & KRRBGN, KRRLST, KGLBGN, KGLLST, KNABGN, KNALST,
+ & KGDBGN, KGDLST, KDWBGN, KDWLST, KGCBGN, KGCLST,
+ & KWLBGN, KWLLST, KWHBGN, KWHLST, KWMBGN, KWMLST,
+ & KWSBGN, KWSLST, KNDBGN, KNDLST, KDPBGN, KDPLST,
+ & KRGBGN, KRGLST, KSGBGN, KSGLST, KBRBGN, KBRLST,
+ & KFYBGN, KFYLST, KPWBGN, KPWLST, KGRBGN, KGRLST,
+ & KTMBGN
+
+ EQUIVALENCE ( NSTOR (1), GMSTOR (1) )
+ EQUIVALENCE ( NSTOR (1), BRMBRR (1) )
+ EQUIVALENCE ( NSTOR (1), BRMEXP (1) )
+ EQUIVALENCE ( NSTOR (1), BRMSIG (1) )
+ EQUIVALENCE ( NSTOR (1), COMSCO (1) )
+ EQUIVALENCE ( NSTOR (1), SIGGTT (1) )
+ EQUIVALENCE ( NSTOR (1), SIGGDR (1) )
+ EQUIVALENCE ( NSTOR (1), LBSTOR (1) )
+
--- /dev/null
+*$ CREATE BLNKDM.ADD
+*COPY BLNKDM
+*
+*=== blnkdm ===========================================================*
+*
+*======================================================================*
+* *
+* Include file Blnkdm : *
+* *
+* Created on 3 september 1989 by Alfredo Ferrari *
+* INFN, Milan *
+* *
+* Last change on 19-aug-00 by Alfredo Ferrari *
+* *
+* Blnkdm: this is dummy version of the blank common for the Vax *
+* version of Fluka. It is included in most routines to *
+* avoid to compile them again if the common dimension have *
+* been changed!! *
+* *
+* W A R N I N G !!!! check also blnkcm module for any change!!! *
+* *
+* *
+* Addrcm: this common contains all useful addresses for the blank *
+* common (in real*4 or i*4 numeration!!!!!!!!!!!!!!!!) *
+* *
+* Mblnmx = blank common dimension in i*4/real*4 units *
+* *
+* Kblnkl = Last memory location used in the blank common *
+* *
+* Kgmbgn = Beginning of geometry data *
+* *
+* Kgmlst = Last memory location for the geometry data *
+* *
+* Kcmbgn = Beginning of the region dependent Comsco energy *
+* and stars accumulation arrays *
+* (note this address if for zero index!!) *
+* *
+* Kcmlst = Last memory location of the region dependent *
+* Comsco energy and stars accumulation arrays *
+* *
+* Kisbgn = Beginning of isotope data tabulations *
+* *
+* Kislst = Last memory location of isotope data tabulations*
+* *
+* Kdtbgn = Beginning of detector data *
+* *
+* Kdtlst = Last memory location for the detector data *
+* *
+* Kubbgn = Beginning of user defined binning storage *
+* *
+* Kublst = Last memory location for user defined binnings *
+* *
+* Kuxbgn = Beginning of user defined bdrx storage *
+* *
+* Kuxlst = Last memory location for user defined bdrx *
+* *
+* Ktcbgn = Beginning of user defined track-length and/or *
+* collision estimators *
+* *
+* Ktclst = Last memory location for user defined track- *
+* length and/or collision density estimators *
+* *
+* Krnbgn = Beginning of user defined residual nuclei sco- *
+* ring *
+* (note this address is for zero index!!) *
+* *
+* Krnlst = Last memory location for user defined residual *
+* nuclei scoring *
+* *
+* Kylbgn = Beginning of user defined yield estimator *
+* (note this address is for zero index!!) *
+* *
+* Kyllst = Last memory location for user defined yield *
+* estimators *
+* *
+* Kxsbgn = Beginning of cross section storage *
+* *
+* Kxslst = Last memory location for cross section storage *
+* *
+* Kihbgn = Beginning of region importance storage *
+* for high energy particles *
+* (note this address is for zero index!!) *
+* *
+* Kihlst = Last memory location for region importances *
+* for high energy particles *
+* *
+* Kinbgn = Beginning of region importance storage *
+* for low energy neutrons *
+* (note this address is for zero index!!) *
+* *
+* Kinlst = Last memory location for region importances *
+* for low energy neutrons *
+* *
+* Kiebgn = Beginning of region importance storage *
+* for em cascade particles *
+* (note this address is for zero index!!) *
+* *
+* Kielst = Last memory location for region importances *
+* for em cascade particles *
+* *
+* Ketbgn = Beginning of exp. transf. parameters *
+* (note this address is for zero index!!) *
+* *
+* Ketlst = Last memory location for exp. transf. parameters*
+* *
+* Krrbgn = Beginning of region RR storage *
+* (note this address is for zero index!!) *
+* *
+* Krrlst = Last memory location for region RR storage *
+* *
+* Kglbgn = Beginning of the region dependent non-analog *
+* absorption group limit storage *
+* (note this address is for zero index!!) *
+* *
+* Kgllst = Last memory location of the region dependent *
+* non-analog absorption group limits *
+* *
+* Knabgn = Beginning of the region dependent non-analog *
+* absorption factor storage *
+* (note this address is for zero index!!) *
+* *
+* Knalst = Last memory location of the region dependent *
+* non-analog absorption factors *
+* *
+* Kgdbgn = Beginning of the region dependent biased down- *
+* scattering group limit storage *
+* (note this address is for zero index!!) *
+* *
+* Kgdlst = Last memory location of the region dependent *
+* biased downscattering group limits *
+* *
+* Kdwbgn = Beginning of the region dependent biased down- *
+* scattering factor storage *
+* (note this address is for zero index!!) *
+* *
+* Kdwlst = Last memory location of the region dependent *
+* biased downscattering factors *
+* *
+* Kgcbgn = Beginning of the region dependent group cut-off *
+* storage *
+* (note this address is for zero index!!) *
+* *
+* Kgclst = Last memory location of the region dependent *
+* group cut-off's *
+* *
+* Kwlbgn = Beginning of the region dependent weight window *
+* lower bound *
+* (note this address is for zero index!!) *
+* *
+* Kwllst = Last memory location of the region dependent *
+* weight window lower bound *
+* *
+* Kwhbgn = Beginning of the region dependent weight window *
+* higher bound *
+* (note this address is for zero index!!) *
+* *
+* Kwhlst = Last memory location of the region dependent *
+* weight window higher bound *
+* *
+* Kwmbgn = Beginning of the region dependent weight window *
+* threshold multiplication factor *
+* (note this address is for zero index!!) *
+* *
+* Kwmlst = Last memory location of the region dependent *
+* weight window threshold multiplication factor *
+* *
+* Kwsbgn = Beginning of the region dependent weight window *
+* shape profile index for low energy neutrons *
+* (note this address is for zero index!!) *
+* *
+* Kwslst = Last memory location of the region dependent *
+* shape profile index for low energy neutrons *
+* *
+* Kndbgn = Beginning of nuclear data tabulations required *
+* by the preequilibrium model *
+* *
+* Kndlst = Last memory location of nuclear data storage *
+* *
+* Kdpbgn = Beginning of the dp/dx tabulation storage *
+* (note this address is for zero index!!) *
+* *
+* Kdplst = Last memory location of dp/dx tabulations *
+* *
+* Krgbgn = Beginning of the range tabulation storage *
+* (note this address is for zero index!!) *
+* *
+* Krglst = Last memory location of range tabulations *
+* *
+* Ksgbgn = Beginning of the cross section storage *
+* (note this address is for zero index!!) *
+* *
+* Ksglst = Last memory location of cross section *
+* tabulations *
+* *
+* Kbrbgn = Beginning of the brem. (e+,e-) storage *
+* (note this address is for zero index!!) *
+* *
+* Kbrlst = Last memory location of the brem. (e+,e-) *
+* storage *
+* *
+* Kfybgn = Beginning of the fission yield storage *
+* (note this address is for zero index!!) *
+* *
+* Kfylst = Last memory location of the fission yield *
+* storage *
+* *
+* Kpwbgn = Beginning of the neutron pointwise cross section*
+* storage (note this address is for zero index!!) *
+* *
+* Kpwlst = Last memory location of the neutron pointwise *
+* cross section storage *
+* *
+* Kgrbgn = Beginning of the GDR cross section storage *
+* (note this address is for zero index!!) *
+* *
+* Kgrlst = Last memory location of the GDR cross section *
+* storage *
+* *
+* Ktmbgn = Beginning of the temporary storage *
+* (note this address is for zero index!!) *
+* *
+* W A R N I N G the blank common is initialized to 0 as a I*4 *
+* array!!!!!!!!!!!!! *
+* *
+*----------------------------------------------------------------------*
+*
+ DIMENSION GMSTOR ( 2 ), BRMBRR ( 2 ), BRMEXP ( 2 ), BRMSIG ( 2 ),
+ & SIGGTT ( 2 ), SIGGDR ( 2 ), COMSCO ( 2 ), LBSTOR ( 2 )
+ REAL SIGGTT, SIGGDR
+ LOGICAL LBSTOR
+ COMMON NSTOR ( 2 )
+ COMMON / ADDRCM / MBLNMX, KBLNKL, KGMBGN, KGMLST, KCMBGN, KCMLST,
+ & KISBGN, KISLST, KDTBGN, KDTLST, KUBBGN, KUBLST,
+ & KUXBGN, KUXLST, KTCBGN, KTCLST, KRNBGN, KRNLST,
+ & KYLBGN, KYLLST, KXSBGN, KXSLST, KIHBGN, KIHLST,
+ & KINBGN, KINLST, KIEBGN, KIELST, KETBGN, KETLST,
+ & KRRBGN, KRRLST, KGLBGN, KGLLST, KNABGN, KNALST,
+ & KGDBGN, KGDLST, KDWBGN, KDWLST, KGCBGN, KGCLST,
+ & KWLBGN, KWLLST, KWHBGN, KWHLST, KWMBGN, KWMLST,
+ & KWSBGN, KWSLST, KNDBGN, KNDLST, KDPBGN, KDPLST,
+ & KRGBGN, KRGLST, KSGBGN, KSGLST, KBRBGN, KBRLST,
+ & KFYBGN, KFYLST, KPWBGN, KPWLST, KGRBGN, KGRLST,
+ & KTMBGN
+
+ EQUIVALENCE ( NSTOR (1), GMSTOR (1) )
+ EQUIVALENCE ( NSTOR (1), BRMBRR (1) )
+ EQUIVALENCE ( NSTOR (1), BRMEXP (1) )
+ EQUIVALENCE ( NSTOR (1), BRMSIG (1) )
+ EQUIVALENCE ( NSTOR (1), COMSCO (1) )
+ EQUIVALENCE ( NSTOR (1), SIGGTT (1) )
+ EQUIVALENCE ( NSTOR (1), SIGGDR (1) )
+ EQUIVALENCE ( NSTOR (1), LBSTOR (1) )
+
--- /dev/null
+*$ CREATE BLNTMP.ADD
+*COPY BLNTMP
+* *
+*=== blntmp ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Blntmp: created on 9 july 1990 by Alfredo Ferrari *
+* *
+* included in : *
+* Blnset *
+* Fluka *
+* *
+* The following are all temporary locations in I*4 addresses !! *
+* *
+* Kihbtm = Beginning of region importance storage *
+* for high energy particles *
+* (note this address if for zero index!!) *
+* *
+* Kinbtm = Beginning of region importance storage *
+* for low energy neutrons *
+* (note this address if for zero index!!) *
+* *
+* Kiebtm = Beginning of region importance storage *
+* for em cascade particles *
+* (note this address if for zero index!!) *
+* *
+* Krrbtm = Beginning of region dependent inelastic inte- *
+* raction RR/Splitting fator storage *
+* (note this address if for zero index!!) *
+* *
+* Kglbtm = Beginning of the region dependent non-analog *
+* absorption group limit storage *
+* (note this address if for zero index!!) *
+* *
+* Knabtm = Beginning of the region dependent non-analog *
+* absorption factor storage *
+* (note this address if for zero index!!) *
+* *
+* Kgcbtm = Beginning of the region dependent group cut-off *
+* storage *
+* (note this address if for zero index!!) *
+* *
+* Kgdwtm = Beginning of the region dependent biased *
+* downscattering group limit storage *
+* (note this address if for zero index!!) *
+* *
+* Kbdwtm = Beginning of the region dependent biased *
+* downscattering factor storage *
+* (note this address if for zero index!!) *
+* *
+* Kwlotm = Beginning of the region dependent weight window *
+* lower bound storage *
+* (note this address if for zero index!!) *
+* *
+* Kwhitm = Beginning of the region dependent weight window *
+* higher bound storage *
+* (note this address if for zero index!!) *
+* *
+* Kwmutm = Beginning of the region dependent WW threshold *
+* multiplicative factor storage *
+* (note this address if for zero index!!) *
+* *
+* Kwshtm = Beginning of the region dependent WW shape *
+* profile index storage *
+* (note this address if for zero index!!) *
+* *
+* Kexttm = Beginning of the region dependent exponential *
+* transformation parameter temporary storage *
+* (note this address if for zero index!!) *
+* *
+* Kstxtm = Beginning of the region dependent maximum step *
+* size temporary storage *
+* (note this address if for zero index!!) *
+* *
+* Kstntm = Beginning of the region dependent minimum step *
+* size temporary storage *
+* (note this address if for zero index!!) *
+* *
+* Kecttm = Beginning of the region dependent electron cut *
+* off energy temporary storage *
+* (note this address if for zero index!!) *
+* *
+* Kpcttm = Beginning of the region dependent photon cut *
+* off energy temporary storage *
+* (note this address if for zero index!!) *
+* *
+* Klpbtm = Beginning of the region dependent leading par- *
+* ticle flag temporary storage *
+* (note this address if for zero index!!) *
+* *
+* Nxxrgn = Number of regions for which the temporary sto- *
+* rage must be set up *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / BLNTMP / KIHBTM, KINBTM, KIEBTM, KRRBTM, KGLBTM, KNABTM,
+ & KGCBTM, KGDWTM, KBDWTM, KWLOTM, KWHITM, KWMUTM,
+ & KWSHTM, KEXTTM, KSTXTM, KSTNTM, KECTTM, KPCTTM,
+ & KLPBTM, NXXRGN
+
--- /dev/null
+*$ CREATE BOUNDS.ADD
+*COPY BOUNDS
+*----------------------------------------------------------------------*
+* *
+* Common Bounds for EGS4 *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /BOUNDS/ ECUT(MXXRGN), PCUT(MXXRGN), VACDST
+
--- /dev/null
+*$ CREATE BPTECM.ADD
+*COPY BPTECM
+*
+*=== Bptecm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 25 february 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 27-feb-98 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXPRCN = 100 )
+ PARAMETER ( MXALPH = 25 )
+ PARAMETER ( MXBETA = 25 )
+* If Mxprcn is 100, then the prob of the last-1 percentiles
+* is 1 - 1/100, Mxdcds is giving Eps up to 1 - 1/10^(2+Mxdcds)
+* or more generally, up to 1 - 1/(Mxprcn x 10^Mxdcds)
+ PARAMETER ( MXDCDS = 6 )
+* Epsepi must be smaller than the minimum probability left
+* by Mxdcds:
+ PARAMETER ( EPSEPI = 1.D-09 )
+*
+ COMMON / BPTECM / ALNAL0, ALNAL1, DLNALP, ALNBE0, ALNBE1, DLNBET,
+ & EPSPER (0:MXPRCN,0:MXALPH,0:MXBETA),
+ & EPSDCD (0:MXDCDS,0:MXALPH,0:MXBETA),
+ & EPSOMN (0:MXALPH,0:MXBETA),
+ & PRCOOF (0:MXALPH,0:MXBETA),
+ & PRCOTN (0:MXALPH,0:MXBETA),
+ & PRCHLF (0:MXALPH,0:MXBETA),
+ & PRCHPI (0:MXALPH,0:MXBETA)
+
+
--- /dev/null
+*$ CREATE BREANG.ADD
+*COPY BREANG
+*
+*=== breang ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 22 march 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 22-mar-91 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BDANDI *
+* BREMNW *
+* BREMS *
+* *
+* Mxphtb = number of intervals on which phi(y) is tabulated *
+* Yphimn = minimum value of y for which phi is taublated *
+* Yphirt = ratio of y between two tabulated points *
+* Yphimx = maximum value of y for which phi is taublated *
+* (=Yphimn*Yphirt**(Mxphtb-1)) *
+* Phiytb = tabulated values of phi *
+* Alymin = natural logarithm of Yphimn *
+* Alyrat = natural logarithm of Yphirt *
+* Alytra = natural logarithm of the max. y allowed for Xsitra *
+* Phia00 = used for asymptotic behaviour *
+* Phib00 = used for asymptotic behaviour *
+* Phic0 = used for asymptotic behaviour *
+* Phid0 = used for asymptotic behaviour *
+* ( for y > yphimx, Phi = Phia00 + Phib00 / y^2 *
+* for y < yphimn, Phi = log(y) + Phic0 + Phid0 x y^2 ) *
+* Accrit = parameter used for the Migdal polarization effect, *
+* given by Nel x Lambda_compt^2 x r0 / pi *
+* Zbrem = approximate "effective" Z for bremsstrahlung *
+* Fcoul = Coulomb factor fc(Z) *
+* Gmolie = factor entering Moliere's expansion of Thomas-Fermi *
+* form factor ( = Z^1/3/121 ) *
+* Algmol = natural logarithm of Gmolie *
+* *
+*----------------------------------------------------------------------*
+*
+* Tpifsc = 2 x pi x fine structure constant
+ PARAMETER ( TPIFSC = 4.5850621648360624 D-02 )
+ PARAMETER ( MXPHTB = 100 )
+ PARAMETER ( YPHIMN = 1.0 D-01 )
+ PARAMETER ( YPHIRT = 1.07 D+00 )
+*
+ COMMON / BREANG / PHIYTB (MXPHTB), YPHIMX, ALYMIN, ALYRAT,
+ & ALYTRA, PHIA00, PHIB00, PHIC0, PHID0,
+ & ACCRIT (MXXMDE), ZBREM (MXXMDE),
+ & FCOUL (MXXMDE), GMOLIE (MXXMDE),
+ & ALGMOL (MXXMDE)
+
--- /dev/null
+*$ CREATE BREMPR.ADD
+*COPY BREMPR
+*----------------------------------------------------------------------*
+* *
+* Common Brempr for EMF *
+* Mxxmde = maximum number of media in Emf *
+* *
+* Variables for the new bremsstrahlung: *
+* *
+* Thbrem = total electron/positron threshold energy for *
+* bremsstrahlung production (or minimum energy *
+* of emitted photons), MeV *
+* Althbr = natural logarithm of Thbrem - me *
+* Ebrm0 = minimum energy for which bremsstrahlung data *
+* are tabulated *
+* Albrm0 = natural logarithm of Ebrm0 *
+* Ebrmrt = ratio between subsequent tabulated energies *
+* after the initial 0:nktl-3 values *
+* Abrmrt = natural logarithm of Ebrmrt *
+* Aktild = k/T values corresponding at the tabulated en- *
+* ergies ( jth energy = (Thbrem-me) / Aktild (j) )*
+* Alktld = natural logarithm of Aktild *
+* Indsum = array used for addressing data *
+* Jndsum = array used for addressing data *
+* Ind0br = zero index address of brm. branching ratios *
+* and of brm. power fit exponents *
+* Ind1br = last index address of brm. branching ratios *
+* and of brm. power fit exponents *
+* Jnd0br = zero index address of brm. tabulated ds/dk *
+* Jnd1br = last index address of brm. tabulated ds/dk *
+* Lnwbrm = Logical flag for the new bremss. *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NKTL = 17 )
+ PARAMETER ( NBRBIN = 75 )
+ COMMON /BREMPR/ DL1(6,MXXMDE), DL2(6,MXXMDE), DL3(6,MXXMDE),
+ & DL4(6,MXXMDE), DL5(6,MXXMDE), DL6(6,MXXMDE),
+ & DELCM(MXXMDE), ALPHI(2,MXXMDE), BPAR(2,MXXMDE),
+ & DELPOS(2,MXXMDE), PWR2I(50),
+ & THBREM (MXXMDE), ALTHBR (MXXMDE),
+ & EBRM0 (MXXMDE), ALBRM0 (MXXMDE),
+ & EBRMRT (MXXMDE), ABRMRT (MXXMDE),
+ & AKTILD (0:NBRBIN), ALKTLD (0:NBRBIN),
+ & INDSUM (0:NBRBIN+1), IND0BR (2,MXXMDE),
+ & IND1BR (2,MXXMDE), LND0BR (2,MXXMDE),
+ & LND1BR (2,MXXMDE), JND0BR (2,MXXMDE),
+ & JND1BR (2,MXXMDE), LNWBRM (MXXMDE)
+ LOGICAL LNWBRM
+ DIMENSION JNDSUM (0:NBRBIN)
+ EQUIVALENCE ( INDSUM (1), JNDSUM (0) )
+
--- /dev/null
+*$ CREATE BRPRHV.ADD
+*COPY BRPRHV
+*
+*=== brprhv ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: BRPRHV *
+* *
+* BRemsstrahlung and PaiR production by HeaVy particles *
+* *
+* Created on 10 march 1992 by Alfredo Ferrari *
+* INFN - Milan *
+* *
+* Last change on 11-may-94 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* FLUKA *
+* DPDX *
+* HEABRE *
+* HVPAIR *
+* HVBREM *
+* KASKAD *
+* SIGTAB *
+* ZEROIN *
+* *
+*----------------------------------------------------------------------*
+*
+* minimum eta^2 for pair production ( gamma = sqrt (1+eta^2) = 44.7,
+* E_prot = 42 GeV, E_mu = 4.7 GeV )
+ PARAMETER ( ESQTHP = 2000.D+00 )
+* minimum eta^2 for bremsstrahlung ( gamma = sqrt (1+eta^2) = 44.7,
+* E_prot = 42 GeV, E_mu = 4.7 GeV )
+ PARAMETER ( ESQTHB = 2000.D+00 )
+ LOGICAL LHPAIR, LHBREM
+ COMMON / BRPRHV / T0PAIR (MXXMDF), T0BREM (MXXMDF),
+ & CSTBRE (MXXMDF), AABREM (MXXMDF),
+ & APBREM (MXXMDF), VCR0BR (MXXMDF),
+ & ALRDCS (MPDPDX,MXXMDF), FNBREM (MPDPDX,MXXMDF),
+ & PCBREM (MPDPDX,MXXMDF),
+ & LHPAIR (MXXMDF), LHBREM (MXXMDF), IOFNBR,
+ & IOFCBR
+
--- /dev/null
+*$ CREATE CASLIM.ADD
+*COPY CASLIM
+*
+*=== caslim ===========================================================*
+*
+*----------------------------------------------------------------------*
+* include file: caslim copy created 26/11/86 by p*
+* changes: 20-sep-89 by A. Ferrari *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* *
+* /caslim/ is needed to decide when to stop the run *
+* tlim = if cpu-time-left<tlim the run will be ended *
+* tmean = is the average time needed for the following *
+* of one beam particle *
+* tmax = is the maximum time needed for the following *
+* of one beam particle *
+* ttot = the cumulative time needed to follow the beam *
+* particles *
+* ncases = the maximum number of beam particles to be followed *
+* nstars = the maximum number of stars to be generated *
+* ncase = the number of beam particles followed *
+* mbatch = batch sizes *
+* nbatch = number of batches *
+* ibatch = current batch number *
+* ncoinc = flag used by the detect option to know if the ncase *
+* particle has or has not to be considered in coinci- *
+* dence with the previous one (if they have the same *
+* ncoinc they belong to the same event) *
+* lpseed = if .true. seeds will be printed for any history *
+* levtdt = if .true. a few data will be printed at each history *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LPSEED, LEVTDT
+ COMMON / CASLIM / TLIM, TMEAN, TMAX, TTOT, NCASES, NSTARS, NCASE,
+ & MBATCH(500), NBATCH, IBATCH, NCOINC, LPSEED,
+ & LEVTDT
+
--- /dev/null
+*$ CREATE CHNCMM.ADD
+*COPY CHNCMM
+*
+*=== chncmm ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* CHaiN formation CoMMon: *
+* *
+* Created on 22 march 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 21-dec-97 by Alfredo Ferrari *
+* *
+* Gammes,Unomes = gamma and eta parameters for unflavoured mesons *
+* (P(x) = C x^(gamma-1) x (1-x)**(eta-1)) *
+* Gammes,Unomes = gamma and eta parameters for baryons *
+* Gamstr,Unostr = gamma and eta parameters for strange mesons *
+* Gamsea,Unosea = gamma and eta parameters for sea (anti)quarks *
+* Seamtr = minimal transverse mass for sea (anti)quarks *
+* Fslmtr = minimal transverse mass for X fraction selection *
+* Ecutrf = reference energy in p-p collisions for setting *
+* x-fraction minimal values *
+* Ucutrf = Sqrt(s) corresponding to Ecutrf *
+* Acutrf = coefficient used for x-fraction minimal values *
+* Bcutrf = coefficient used for x-fraction minimal values *
+* For E < Ecutrf: *
+* Xcutff = ( Acutrf + Bcutrf * Etrial / Ecutrf ) *
+* * Ethsea / Ekxlab *
+* for E > Ecutrf: *
+* Xcutff = ( Acutrf + Bcutrf ) * Ethsea * Umo *
+* / ( Ucutrf * Ekxlab ) *
+* Dfscml = diffractive single chain multiplicative factor *
+* with respect to the standard single chain prob. *
+* (Ldfscv=.false.), or triple pomeron cut-off mass *
+* multiplicative factor (Ldfscv=.true.) *
+* Dfscrs = number of gamma's after which diffractive resonant *
+* production is going into single chain production *
+* Ldfscv = Old single chain (low mass) probability for *
+* diffraction (=.false.), or new one (=.true.) *
+* Lxflip = If .true. random choiche of the Xp/Xt fraction to *
+* be changed of a parjet chain is performed *
+* Lmnxch = Meaningful only for Lxflip = .false. . If .true. *
+* minimal variation of both Xp/Xt for a parjet is *
+* performed *
+* Lmcons = Meaningful only for Lxflip, Lmnxch = .false., in *
+* this case invariant mass invariance is forced when *
+* computing Xp/Xt for a parjet. *
+* Lpcons = Meaningful only for Lxflip, Lmnxch, Lmcons =.false.,*
+* in this case momentum invariance is forced when *
+* computing Xp/Xt for a parjet. Never set to .false. *
+* Lsuxkn = Flag used to decide whether update immediately X *
+* fractions after one chain has been forced to a *
+* defined mass value, or do it for both at the end *
+* Imnxfr = Flag if requesting or not minimum fractions for *
+* q/qq, and their interpretation *
+* 0 = no threshold used (rejection if unphysical), *
+* 1 = minimum thresholds used, *
+* 2 = X interpreted as fractions of the available *
+* energy (minimum masses out) *
+* Lrealx = Flag for applying X fractions to real momenta/ *
+* energies of projectile/target: it should not be *
+* activated for Imnxfr > 0 since it will be inconsi- *
+* stent *
+* L2ndmp = Flag for using (whenever available) the 2nd baryon *
+* octet and the 2nd pseudoscalar meson nonet *
+* Lchspn = Flag for selecting a precise spin configuration *
+* (and hence "fixed" mass states according to) during *
+* chain creation *
+* Lsqgsm = flag for adopting the QGSM prescription for sea *
+* quarks X fractions, and in particular the "running" *
+* eta according to the number of sea qqbar to be *
+* produced *
+* *
+*----------------------------------------------------------------------*
+*
+* Minimum lab momentum requested for valence chain formation:
+* PARAMETER ( PLBCMN = 4.0D+00 )
+ PARAMETER ( PLBCMN = 3.5D+00 )
+*
+ LOGICAL LDFSCV, LXFLIP, LMNXCH, LMCONS, LPCONS, LSUXKN, LREALX,
+ & L2NDMP, LCHSPN, LSQGSM
+ COMMON / CHNCMM / GAMMES, UNOMES, GAMBAR, UNOBAR, GAMSTR, UNOSTR,
+ & GAMSEA, UNOSEA, SEAMTR, FSLMTR, ECUTRF, UCUTRF,
+ & ACUTRF, BCUTRF, DFSCML, DFSCRS,
+ & IMNXFR, LDFSCV, LXFLIP, LPCONS, LMNXCH, LSUXKN,
+ & LREALX, L2NDMP, LCHSPN, LMCONS, LSQGSM
+
--- /dev/null
+*$ CREATE CHNGLB.ADD
+*COPY CHNGLB
+* *
+*=== chnglb ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* CHaiN and GLauBer common: *
+* *
+* Created on 10 october 1996 by Alfredo Ferrari *
+* Infn - Milan *
+* *
+* Last change on 01-jul-00 by Alfredo Ferrari *
+* *
+* Nhtprj = number of hit nucleons of the projectile *
+* Nhttrg = number of hit nucleons of the target *
+* Nseprj(i) = number of sea aq-q (or aqaq-qq) components of the *
+* i_th projectile nucleon *
+* Nsetrg(j) = number of sea aq-q (or aqaq-qq) components of the *
+* j_th target nucleon *
+* Khttrg(i) = number of target nucleons hit by the i_th projec- *
+* tile nucleon *
+* Khtprj(j) = number of projectile nucleons hit by the j_th tar- *
+* get nucleon *
+* Ihtprj(i) = id. (part scheme) of the i_th hit nucleon of the *
+* projectile (every id is possible, not only p or n *
+* in case the projectile is a single particle) *
+* Ihttrg(j) = id. (part scheme) of the j_th hit nucleon of the *
+* target (1=proton, 8=neutron) *
+* Mhtrpr(j,i) = number of collisions for the elementary j_th target*
+* nucleon - i_th projectile nucleon interaction *
+* ( 0 = no collision ) *
+* Ehtprj(i) = total energy of the i_th hit projectile nucleon *
+* in the given frame *
+* Phprjx(i) = momentum X component of the i_th hit projectile *
+* nucleon in the given frame *
+* Phprjy(i) = momentum Y component of the i_th hit projectile *
+* nucleon in the given frame *
+* Phprjz(i) = momentum Z component of the i_th hit projectile *
+* nucleon in the given frame *
+* Rhprjp(i) = local proton density (fm^-3) for the i_th hit *
+* projectile nucleon *
+* Rhprjn(i) = local neutron density (fm^-3) for the i_th hit *
+* projectile nucleon *
+* Ehttrg(j) = total energy of the j_th hit target nucleon *
+* in the given frame *
+* Phtrgx(j) = momentum X component of the j_th hit target *
+* nucleon in the given frame *
+* Phtrgy(j) = momentum Y component of the j_th hit target *
+* nucleon in the given frame *
+* Phtrgz(j) = momentum Z component of the j_th hit target *
+* nucleon in the given frame *
+* Rhtrgp(j) = local proton density (fm^-3) for the j_th hit *
+* target nucleon *
+* Rhtrgn(j) = local neutron density (fm^-3) for the j_th hit *
+* target nucleon *
+* Xqkprj(i) = (anti)quark X fraction for mesons and (anti)baryons*
+* for the i_th projectile component *
+* Xdqprj(i) = qbar/(anti)diquark X fraction for mesons/(anti)ba- *
+* ryons for the i_th projectile component *
+* Xseprj(k,i) = X fraction of the (di)quark of the k_th sea *
+* q(q)-aq(aq) couple for the i_th projectile nucleon *
+* Xasprj(k,i) = X fraction of the anti(di)quark of the k_th sea *
+* q(q)-aq(aq) couple for the i_th projectile nucleon *
+* Xqktrg(j) = quark X fraction for the j_th target nucleon *
+* Xdqtrg(j) = diquark X fraction for the j_th target nucleon *
+* Xsetrg(k,j) = X fraction of the (di)quark of the k_th sea *
+* q(q)-aq(aq) couple for the j_th target nucleon *
+* Xastrg(k,j) = X fraction of the anti(di)quark of the k_th sea *
+* q(q)-aq(aq) couple for the j_th target nucleon *
+* Iqsprj(k,i) = quark id of the k_th sea q(q)-aq(aq) couple of the *
+* i_th projectile nucleon (diquark are recognized by *
+* the double index, i.e. uu=11, us=13 etc) *
+* Iqstrg(k,j) = quark id of the k_th sea q(q)-aq(aq) couple of the *
+* i_th target nucleon *
+* Kchain(m) = type of the m_th chain: *
+* Kchain = i0 + 100 * iqprj + 10000 * iqtrg *
+* Proj Target *
+* i0 = 0 <--> sea-q sea-q *
+* = 1 <--> sea-q sea-qq *
+* = 2 <--> sea-qq sea-q *
+* = 3 <--> sea-qq sea-qq *
+* = 10 <--> sea-q valence-q *
+* = 11 <--> sea-q valence-qq *
+* = 12 <--> sea-qq valence-q *
+* = 13 <--> sea-qq valence-qq *
+* = 20 <--> valence-q sea-q *
+* = 21 <--> valence-q sea-qq *
+* = 22 <--> valence-qq sea-q *
+* = 23 <--> valence-qq sea-qq *
+* = 30 <--> valence-q valence-q *
+* = 31 <--> valence-q valence-qq *
+* = 32 <--> valence-qq valence-q *
+* = 33 <--> valence-qq valence-qq *
+* iqprj = q(q) of the (di)quarks coming from the proje- *
+* ctile *
+* iqtrg = q(q) of the (di)quarks coming from the target *
+* Mchain(m) = type of the m_th chain: *
+* Mchain = ihtprj + 1000 * ihttrg *
+* ihtprj = index of hit projectile nucleon used to build *
+* this chain *
+* ihttrg = index of hit target nucleon used to build *
+* this chain *
+* Nchai0 = original number of chains *
+* Nchain = actual number of chains *
+* Nvvchn = actual number of valence-valence chains *
+* Nsvchn = actual number of sea(prj)-valence(trg) chains *
+* Nvschn = actual number of valence(prj)-sea(trg) chains *
+* Nsschn = actual number of sea-sea chains *
+* Lglaub = logical flag for activation of Glauber calculus *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXHTRG = MXHTTR + 1 )
+ PARAMETER ( MXHPRJ = 5 )
+* Mxseax: maximum number of sea component of a projectile/target
+* nucleon, it must be >= Max (MXHTRG-1,MXHPRJ-1)
+ PARAMETER ( MXSEAX = 20 )
+* Mxchan: maximum number of chains
+ PARAMETER ( MXCHAI = 200 )
+*
+ LOGICAL LGLAUB
+*
+ COMMON / CHNGLB / EHTPRJ (MXHPRJ), PHPRJX (MXHPRJ),
+ & PHPRJY (MXHPRJ), PHPRJZ (MXHPRJ),
+ & RHPRJP (MXHPRJ), RHPRJN (MXHPRJ),
+ & EHTTRG (MXHTRG), PHTRGX (MXHTRG),
+ & PHTRGY (MXHTRG), PHTRGZ (MXHTRG),
+ & RHTRGP (MXHTRG), RHTRGN (MXHTRG),
+ & XQKPRJ (MXHPRJ), XDQPRJ (MXHPRJ),
+ & XSEPRJ (MXSEAX,MXHPRJ), XASPRJ (MXSEAX,MXHPRJ),
+ & XQKTRG (MXHTRG), XDQTRG (MXHTRG),
+ & XSETRG (MXSEAX,MXHTRG), XASTRG (MXSEAX,MXHTRG),
+ & IHTPRJ (MXHPRJ), IHTTRG (MXHTRG),
+ & KHTTRG (MXHPRJ), KHTPRJ (MXHTRG),
+ & NSEPRJ (MXHPRJ), NSETRG (MXHTRG),
+ & IQSPRJ (MXSEAX,MXHPRJ), IQSTRG (MXSEAX,MXHTRG),
+ & MHTRPR (MXHTRG,MXHTRG), KCHAIN (MXCHAI),
+ & MCHAIN (MXCHAI), NCHAI0, NCHAIN, NVVCHN, NSVCHN,
+ & NVSCHN, NSSCHN, NHTPRJ, NHTTRG, LGLAUB
+
--- /dev/null
+*$ CREATE CLSCCM.ADD
+*COPY CLSCCM
+*
+*=== clsccm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CoaLeSCence CoMmon: *
+* *
+* Created on 5 april 1996 by Alfredo Ferrari, INFN Milan *
+* *
+* Last change on 23-jun-99 by Alfredo Ferrari, INFN Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* pclscn(i,j) = momentum sigma for coalescing a particle of mass *
+* i (i=1,2,3) into the jth heavy particle *
+* (j=-3 <-> deuteron) *
+* (j=-4 <-> triton ) *
+* (j=-5 <-> 3-He ) *
+* (j=-6 <-> alpha ) *
+* rclscn(i,j) = position sigma for coalescing a particle of mass *
+* i (i=1,2,3) into the jth heavy particle *
+* bnclmx(j) = number of maximum times the binding energy over *
+* the sum of proton/neutron masses to check for *
+* coalescence into the jth heavy particle *
+* dclwpk = sigma (fm) of the gaussian wave packet of each *
+* individual nucleon *
+* dsclcy = time (ct unit) between different preequilibrium *
+* cycles, see below *
+* ddscly = time/amu^1/3 (ct unit) between different pree- *
+* quilibrium cycles *
+* Total time = dsclcy + ddscly * A^1/3 *
+* dbscly = (relative) importance of the barrier when compu- *
+* ting the time between different preequilibrium *
+* cycles *
+* Final time = [ dsclcy + ddscly * A^1/3 ] *
+* x [ ( 1 - dbscly ) / beta_bar *
+* + dvscly / beta_part ] *
+* ftscly = multiplication factor for the above total time *
+* for cascade-preequilibrium transitions *
+* icycls = starting preequilibrium cycle to be used for *
+* coalescence checks *
+* n0clsc = number of stack particles to be skipped for *
+* coalescence purposes *
+* npclsc = (final) stack number of particles to be conside- *
+* red for coalescence purposes *
+* nsclsc = starting stack number of particles to be conside-*
+* red for coalescence purposes *
+* ndclsc = diff. stack number of particles to call the *
+* coalescence model *
+* laclsc = flag for making coalescence checks on angular *
+* momentum rather than on p and x separately *
+* lclscn = flag for activating the coalescence model *
+* iclexc = flag for coalescence excitation energy treatment *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXCLSC = 100 )
+ LOGICAL LACLSC, LCLSCN
+*
+ COMMON / CLSCCM / PCLSCN (3,-6:-3), RCLSCN (3,-6:-3), DCLWPK,
+ & BNCLMX (-6:-3), DSCLCY, DDSCLY, DBSCLY, FTSCLY,
+ & PXCLSC (MXCLSC), PYCLSC (MXCLSC),
+ & PZCLSC (MXCLSC), ECLSCN (MXCLSC),
+ & XCLSCN (MXCLSC), YCLSCN (MXCLSC),
+ & ZCLSCN (MXCLSC), ACLSCN (MXCLSC),
+ & ICYCLS, N0CLSC, NPCLSC, NSCLSC, NDCLSC,
+ & ICLEXC, LACLSC, LCLSCN
+
--- /dev/null
+*$ CREATE CMABRS.ADD
+*COPY CMABRS
+*
+*=== cmabrs ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CoMmon for ABsorption at ReSt: *
+* *
+* Created on 08 july 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-jul-95 by Alfredo Ferrari *
+* *
+* Hufffc (i) = Huff factor for mu- decay rate after atomic *
+* capture for Z=i *
+* Zeffmu (i) = Z_eff for mu- after atomic capture for Z=i *
+* *
+*----------------------------------------------------------------------*
+*
+* Parameters entering the Goulard-Primakoff formula for muon- nuclear
+* capture rates:
+ PARAMETER ( G1PRMK = 261. D+00 )
+ PARAMETER ( G2PRMK =-0.040D+00 )
+ PARAMETER ( G3PRMK =-0.26 D+00 )
+ PARAMETER ( G4PRMK = 3.24 D+00 )
+ COMMON / CMABRS / ZEFFMU (100), HUFFFC (100)
+
--- /dev/null
+*$ CREATE CMCSCM.ADD
+*COPY CMCSCM
+C------------------------------------------------------------------ COMMON /NEWGEOM/ -----------------------------------------------
+ PARAMETER (MAXNOGELE=2000) ! max no geometrical elements
+ PARAMETER (MAXNOGPAR=300) ! max no of parameters & pointers
+ PARAMETER (MAXNGTYPE=20) ! max no of element types
+
+ COMMON/NEWGEOM/HTITLE,NOGELE,IGEOTYPE(MAXNOGELE),
+ + GEONAME(MAXNOGELE),MATVAL(MAXNOGELE), ! generalities
+ + NGPARAM(MAXNOGELE),PARGEO(MAXNOGELE,MAXNOGPAR), ! parameters
+ + NGPOINT(MAXNOGELE),IIPOINT(MAXNOGELE,MAXNOGPAR), ! pointers
+ + IIMASTER,GEOTYPE(MAXNGTYPE),NONUMPAR(MAXNGTYPE) ! type & miscell
+ CHARACTER*20,GEONAME
+ CHARACTER*120 HTITLE
+ CHARACTER*4 GEOTYPE
+ DOUBLE PRECISION PARGEO
+C
+C HTITLE title(name) of geometry
+C NOGELE number of elements
+C IGEOTYPE(IGELE) type of element, address to GEOTYPE,NONUMPAR
+C GEONAME(IGELE) name of element (A20)
+C MATVAL(IGELE) material no (only for simple geometries)
+C NGPARAM(IGELE) no of associated parameters
+C PARGEO(IGELE,IPAR) associated parameters (floating DP)
+C NGPOINT(IGELE) no of associated pointers
+C IIPOINT(IGELE,IPNT) associated pointers (integers)=> IGELE of associated elements
+C IIMASTER IGELE of initiator element in the chain
+C GEOTYPE(k) key name for operator
+C NONUMPAR(k) no of elem in numeric list
+C
+C---------------------------------------------------------------END COMMON /NEWGEOM/ -----------------------------------------------
+C
+
+
+
--- /dev/null
+*$ CREATE CMKBSG.ADD
+*COPY CMKBSG
+*
+*=== cmkbsg ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CoMmon for Kaon-Bar-nucleon SiGmas: *
+* *
+* Created on 07 december 1996 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* Last change on 30-sep-98 by Alfredo Ferrari, INFN-Milan *
+* *
+* List of variables: *
+* *
+* Knbout(io,ir,ip,it) = reaction products indeces, (io=1,2 for the two *
+* two products, ir=1,6 for the various reactions,*
+* ip=1,2 for K- or K0bar projectiles, it=1,2 for *
+* proton or neutron targets) *
+* Ipkbar(ir,ip,it) = internal reaction identifier for the ir_th *
+* reaction with ip (1,2 for K- or K0bar) projec- *
+* tile and it (1,2 for proton or neutron) target *
+* Lcxkbr(ir,ip,it) = charge exchange flag *
+* *
+* Ir = 1 => elastic (K- N -> K- N or K0bar N -> K0bar N) *
+* (variable Selas in Sgkbar) *
+* Ir = 2 => ch.exc. (K- p -> K0bar n or K0bar n -> K- p) *
+* (variable Scx in Sgkbar) *
+* Ir = 3 => st.exc. (K- p -> pi- Sigma+ or K0bar n -> pi+ Sigma- *
+* or K- n -> pi- Sigma0 or K0bar p -> pi0 Sigma+)*
+* (variable Ssigm in Sgkbar) *
+* Ir = 4 => st.exc. (K- p -> pi+ Sigma- or K0bar n -> pi- Sigma+ *
+* or K- n -> pi0 Sigma- or K0bar p -> pi+ Sigma0)*
+* (variable Ssigmc in Sgkbar) *
+* Ir = 5 => st.exc. (K- p -> pi0 Lambda or K0bar n -> pi0 Lambda *
+* or K- n -> pi- Lambda or K0bar p -> pi+ Lambda)*
+* Ir = 6 => st.exc. (K- p -> pi0 Sigma0 or K0bar n -> pi0 Sigma0)*
+* *
+*----------------------------------------------------------------------*
+*
+* Thresholds for pion production
+* ( Kinetic energy threshold for producing particle x in a collision
+* between p and t giving rise to p,t,x:
+* Ekth_ptx = m_x ( 2 m_p + 2 m_t + m_x ) / ( 2 m_t ) )
+* ( Kinetic energy threshold for producing particle x in a collision
+* between p and t giving rise to a,b,x:
+* Ekth_pt_abx = ( ( m_a + m_a + m_x )^2 - ( m_p + m_t )^2 )
+* / ( 2 m_t ) )
+* K-+p-->Lamda+pi0+pi0
+ PARAMETER ( TKMP00 = 0.0 D+00 )
+*
+ PARAMETER ( MKBREA = 6 )
+ PARAMETER ( MKBETB = 200 )
+ PARAMETER ( MKBWAV = 11 )
+*
+ LOGICAL LCXKBR
+ COMMON / CMKBSG /
+ & RE0KBA (MKBETB,MKBWAV,3), RE1KBA (MKBETB,MKBWAV,3),
+ & AIM0KB (MKBETB,MKBWAV,3), AIM1KB (MKBETB,MKBWAV,3),
+ & EKBTAB (MKBETB), NEKBTB, KBNOUT (2,MKBREA,2,2),
+ & IPKBAR (MKBREA,2,2), LCXKBR (MKBREA,2,2)
+
--- /dev/null
+*$ CREATE CMMDNR.ADD
+*COPY CMMDNR
+*
+*=== cmmdnr ==========================================================*
+*
+*---------------------------------------------------------------------*
+* Module CMMDNR: *
+* *
+* Last change A. Ferrari 26-may-1990 *
+* Created on 26-05-1990 by A. Ferrari, Infn-Milan *
+* *
+* *
+*---------------------------------------------------------------------*
+*
+ LOGICAL LFLDNR
+ COMMON / CMMDNR / DDNEAR, LFLDNR
+
--- /dev/null
+*$ CREATE CMPAIR.ADD
+*COPY CMPAIR
+*
+*=== cmpair ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CoMmon for e+/e- PAIR production by heavy charged particles *
+* *
+* Created on 03 march 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 17-jun-97 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* HEAPAI *
+* CMPAIR *
+* DSDVVV *
+* DSDVVT *
+* DSDVRR *
+* DSDVDR *
+* PHEPAI *
+* PHPPAI *
+* ALPHE *
+* ALPHP *
+* YPAIRE *
+* YPAIRP *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( FELPAI = 1.0 D+00 )
+ PARAMETER ( RADLOG = 184.15 D+00 )
+ PARAMETER ( COSPAI = FSCTO4 * 2.D+00 / PIPIPI / 3.D+00 *
+ & PLABRC * PLABRC / AMELCT / AMELCT *
+ & AVOGAD * 1.D-26 )
+ COMMON / CMPAIR / AMPROJ, EPROJ, VTHRES, Z, Z2, Z13, DENS, ATOMW,
+ & COST , VV, RR, RRSQ, BBETA, XXSI, AMSQRT,
+ & ICHRG2, IPPROJ, MATBRE
+
--- /dev/null
+*$ CREATE CMPHLP.ADD
+*COPY CMPHLP
+*
+*=== Cmphlp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 01 august 1999 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 01-aug-99 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / CMPHLP / CNTNT (ICOMAX), MTNM (ICOMAX), ICNMAX, NMENUM
+ COMMON / CMPHCH / COMNAM (MXXMDF)
+ CHARACTER*8 COMNAM
+
--- /dev/null
+*$ CREATE CMPHNU.ADD
+*COPY CMPHNU
+* *
+*=== cmphnu ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Created on 05 october 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 22-oct-92 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* FLUKA *
+* DEFLTS *
+* EVXTES *
+* PHNCEV *
+* PHNCVR *
+* PHNVEV *
+* SIGTAB *
+* ZEROIN *
+* DSPHDV *
+* DSPHIV *
+* DSPHJV *
+* DSPVL1 *
+* DSPVL2 *
+* DSPVT1 *
+* DSPVT2 *
+* DVSPHV *
+* SGAPN *
+* *
+*----------------------------------------------------------------------*
+* *
+ PARAMETER ( ANGEPP = 1.2D-04 )
+*
+ LOGICAL LPHNCL
+ COMMON / CMPHNU / AMPPHN, AMTPHN, EPRPHN, PPRPHN, QPH2MN, QPH2MX,
+ & VVPHMN, VVPHMX, RHOPHN, CSTPHN, GXSHDW, AMNPHN,
+ & A13PHN, AMPHN1, AMPHN2, ASQPH1, ASQPH2, EPSPH1,
+ & EPSPH2, FR1PHN, FR2PHN, SGPHUB, XLNPHN, AOCPHN,
+ & ZPHNMN, ZPHNMX, WPHNMN, WPHNMX, EOUPHN, POUPHN,
+ & AMPHSQ, ENHPHN, QU2PHN, CSTPHV, ARSQP1, ARSQP2,
+ & AMRPHE, T1MVOV, PHNORD, PHNEXO, PHNSTR, PHNEXS,
+ & AMRP1N, VSQ44V, VVSQRD, EPSSQ1, EPSSQ2, RRPHN1,
+ & RRSQR1, RRPHN2, RRSQR2, YESS1T, YESS2T, YESS1L,
+ & YESS2L, AFACTZ, ALOGA1, DIFZPH, PHOZP1, ALOGB1,
+ & DPHNSQ, DENPHN, ZMTPHN, MATPHN, IPPHNU,
+ & JFLPHN (MXXMDF), LPHNCL
+
--- /dev/null
+*$ CREATE CMPISG.ADD
+*COPY CMPISG
+*
+*=== cmpisg ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CoMmon for PIon-nucleon SiGmas: *
+* *
+* Created on 07 december 1992 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* Last change on 06-sep-96 by Alfredo Ferrari, INFN-Milan *
+* *
+* List of variables: *
+* *
+* pmnpis = minimum momentum of tabulations *
+* pmmpis = median momentum of tabulations (switch from *
+* lin to log tabulations) *
+* pispis = maximum momentum for which an isotropic/- *
+* resonant term is computed for the angular *
+* distribution, it must be > pmmpis and *
+* =< pexpis / rtpisg. It is given by: *
+* pispis = pmmpis x rtpisg^(npisis-npirln) *
+* pexpis = momentum a exp(bt) term is computed from *
+* it is given by: *
+* pexpis = pmmpis x rtpisg^(npisex-npirln) *
+* pmxpis = maximum momentum of tabulations *
+* dppisg = Delta_p of the lin tabulation *
+* (dppisg = (pmmpis-pmnpis) / (npirln-1) ) *
+* rtpisg = ratio between subsequent tabulated momenta *
+* in the log part *
+* amnpis = log (pmnpis) *
+* ammpis = log (pmmpis) *
+* aispis = log (pispis) *
+* aexpis = log (pexpis) *
+* amxpis = log (pmxpis) *
+* arpisg = log (rtpisg) *
+* sgpicu(i,j,l) = cumulative cross section for cos theta = 1 *
+* - 0.1 * i at jth energy for lth reaction, ani-*
+* sotropic component (npirvr=1)/non resonant *
+* component (npirvr=2) *
+* sgpiis(j,l) = isotropic cross section (npirvr=1) /resonant*
+* cross section (npirvr=2), at jth energy for *
+* lth reaction, total cross section is given *
+* by sgpiis (j,l) + sgpicu (20,j,l) *
+* sgpidf(i,j,l) = differential cross section at cos theta = 1 *
+* - 0.1 * i at jth energy for lth reaction *
+* sgpiin(j,l) = inelastic (pion production, NO cx) cross *
+* section at jth energy for lth reaction *
+* ( l=1: pi+ p / pi- n, l=2: pi- p / pi+ n, *
+* l=3: pi0 p / pi0 n ) *
+* bpislo(j,l) = b slope parameter at jth energy for lth rea-*
+* ction (p>pexpis>pispis>pmmpis) *
+* cpislo(j,l) = bcurvature parameter at jth energy for lth *
+* reaction (p>pexpis>pispis>pmmpis) *
+* spislo(j,l) = cross section at jth energy for lth reaction*
+* for the exp(bt) part, the total cross *
+* section is given by: spislo (j,l) + *
+* sgpicu (20,j,l) *
+* sgrtrs(l) = ratio of the lth reaction at resonance with *
+* respect to the resonant "standard" form as *
+* given by Fpires *
+* brrein(l) = branching ratio in the entrance channel of *
+* the lth reaction, resonant part *
+* brreou(l) = branching ratio in the exit channel of *
+* the lth reaction, resonant part *
+* brdeou(i,j) = branching ratio in the (i=1->proton,i=2-> *
+* neutron) exit channel for 2-body resonant *
+* pion absorption of a Delta of charge j *
+* brd3ou(i,k,j) = branching ratio in the (i=1->proton,i=2-> *
+* neutron,k=1->proton,k=2->neutron) exit chan-*
+* nel for 3-body resonant pion absorption of *
+* a Delta of charge j *
+* brdeou(l) = branching ratio in the exit channel of *
+* the lth reaction, resonant part *
+* Prrsdl = random number representing the probability *
+* to select the anisotropic component *
+* ppithr(l) = threshold momentum for the pion in the lab *
+* system for the lth reaction channel *
+* rhpicr(l) = density correction factors for absorption of*
+* l type pions with respect to average rho *
+* ipirea(i,j,l) = reaction channel indexes (two at most) for *
+* l type incident particle (3=pi+,4=pi-,5=pi0)*
+* j type target nucleon (1=p,2=n) *
+* ipiine(j,l) = inelastic (pion production NO cx) reaction *
+* channel indexes for l type incident particle*
+* (3=pi+,4=pi-,5=pi0) j type target nucleon *
+* (1=p,2=n) *
+* kpiire(j,i) = incoming particles indexes (j=1,2, first the*
+* projectile pion, second the target nucleon, *
+* PAPROP numbering) for the ith reaction chan-*
+* nel *
+* kpiore(j,i) = outgoing particles indexes (j=1,2, first the*
+* pion, second the nucleon, PAPROP numbering) *
+* for the ith reaction channel *
+* ittrrs(l) = nucleon index of the resonant cross section *
+* for l type pions *
+* ldlres = flag for reaction going via an intermediate *
+* resonance Delta state *
+* *
+*----------------------------------------------------------------------*
+*
+* Thresholds for pion production
+* ( Kinetic energy threshold for producing particle x in a collision
+* between p and t giving rise to p,t,x:
+* Ekth_ptx = m_x ( 2 m_p + 2 m_t + m_x ) / ( 2 m_t ) )
+* ( Kinetic energy threshold for producing particle x in a collision
+* between p and t giving rise to a,b,x:
+* Ekth_pt_abx = ( ( m_a + m_a + m_x )^2 - ( m_p + m_t )^2 )
+* / ( 2 m_t ) )
+* p+p-->p+p+pi0
+ PARAMETER ( TPPPI0 = 0.279661403974980D+00 )
+* n+n-->n+n+pi0
+ PARAMETER ( TNNPI0 = 0.279648039999871D+00 )
+* p+p-->p+n+pi+
+ PARAMETER ( TPPPIP = 0.292300474999261D+00 )
+* p+p-->d+pi+
+ PARAMETER ( TPPDEP = 0.287520039338373D+00 )
+* n+n-->n+p+pi-
+ PARAMETER ( TNNPIM = 0.286728401466252D+00 )
+* n+n-->d+pi-
+ PARAMETER ( TNNDEM = 0.281954546115298D+00 )
+* p+n-->p+n+pi0
+ PARAMETER ( TPNPI0 = 0.279462243848891D+00 )
+* p+n-->d+pi0
+ PARAMETER ( TPNDE0 = 0.274699264355169D+00 )
+* p+n-->n+n+pi+
+ PARAMETER ( TPNPIP = 0.292092020411614D+00 )
+* n+p-->n+p+pi0
+ PARAMETER ( TNPPI0 = 0.279847456228455D+00 )
+* n+p-->d+pi0
+ PARAMETER ( TNPDE0 = 0.275077911416144D+00 )
+* n+p-->n+n+pi+
+ PARAMETER ( TNPPIP = 0.292494641748525D+00 )
+* This is the maximum momentum for which it makes sense to use
+* the "standard" resonant cross section given by Fpires to get
+* a resonant part: it can well be different from Pispis
+ PARAMETER ( PIRSMX = 1.2D+00 )
+*
+ PARAMETER ( NPIREA = 10 )
+ PARAMETER ( NPIRTA = 68 )
+ PARAMETER ( NPIRLN = 21 )
+ PARAMETER ( NPIRLG = NPIRTA - NPIRLN )
+ PARAMETER ( NPISIS = NPIRLN + 20 )
+ PARAMETER ( NPISEX = NPIRLN + 21 )
+ PARAMETER ( NPIIMN = 14 )
+ PARAMETER ( NPIIRC = 6 )
+* Delta nuclear well: 35 MeV (at center)
+ PARAMETER ( DELWLL = 0.035D+00 )
+ CHARACTER CHPIRE*8
+ LOGICAL LDLRES
+ COMMON / CMPISG / PMNPIS, PMMPIS, PISPIS, PEXPIS, PMXPIS, DPPISG,
+ & RTPISG, AMNPIS, AMMPIS, AISPIS, AEXPIS, AMXPIS,
+ & ARPISG, BPISLO (NPIRLN:NPIRTA,NPIREA),
+ & CPISLO (NPIRLN:NPIRTA,NPIREA), PPITHR (NPIREA),
+ & SPISLO (NPIRLN:NPIRTA,NPIREA), APITHR (NPIREA),
+ & SGPIIN (NPIIMN:NPIRTA,NPIIRC), RHPICR (1:5) ,
+ & SGPICU (0:20,NPIRTA,NPIREA) , SGRTRS (NPIREA),
+ & SGPIDF (0:20,NPIRTA,NPIREA) , BRREIN (NPIREA),
+ & SGPIIS (NPIRTA,NPIREA) , BRREOU (NPIREA),
+ & BRD3OU (2,2,-1:2), BRDEOU (2,-1:2),
+ & SGABSR (2,2,4) , PRRSDL,
+ & IPIREA (2,2,3:5) , IPIINE (2,3:5) , NPIRVR ,
+ & KPIIRE (2,NPIREA), KPIORE (2,NPIREA) ,
+ & JSTOKP (5), KPTOJS (23), ITTRRS (3:5), LDLRES
+ COMMON / CHPISG / CHPIRE (NPIREA)
+ DIMENSION SG2BRS (2,2), SGABSW (2,2), SG3BRS (2,2,2)
+ EQUIVALENCE ( SG2BRS (1,1), SGABSR (1,1,1) )
+ EQUIVALENCE ( SGABSW (1,1), SGABSR (1,1,2) )
+ EQUIVALENCE ( SG3BRS (1,1,1), SGABSR (1,1,3) )
+
--- /dev/null
+*$ CREATE CMSRES.ADD
+*COPY CMSRES
+*
+*=== cmsres ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of CMSRES: *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* *
+* Last change on 06-dec-97 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Pxr(i) = X-component of the momentum of the i_th produced *
+* resonance *
+* Pyr(i) = Y-component of the momentum of the i_th produced *
+* resonance *
+* Pzr(i) = Z-component of the momentum of the i_th produced *
+* resonance *
+* Her(i) = Total energy of the i_th produced resonance *
+* Amr(i) = Mass of the i_th produced resonance *
+* Ichr(i) = Charge of the i_th produced resonance *
+* Ibarr(i) = Baryon number of the i_th produced resonance *
+* Nrer(i) = Identity (part scheme) of the i_th produced resonance*
+* Ichnr(3,i) = Array containing additional informations about pro- *
+* duction verteces, ranking etc. *
+* Nres = Number of produced resonances *
+* Nres1 = Number of produced resonances from the first chain *
+* Nres2 = Number of produced resonances from the second chain *
+* Anr(i) = Literal name of the i_th produced resonance *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANR
+ COMMON / CMSRES / PXR (MXPDPM), PYR (MXPDPM), PZR (MXPDPM),
+ & HER (MXPDPM), AMR (MXPDPM), ICHR (MXPDPM),
+ & IBARR (MXPDPM), NRER (MXPDPM), ICHNR(3,MXPDPM),
+ & NRES, NRES1, NRES2
+ COMMON / CHCMSR / ANR (MXPDPM)
+
--- /dev/null
+*$ CREATE CMTIME.ADD
+*COPY CMTIME
+*
+*=== cmtime ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file cmtime *
+* *
+* Created on 03 august 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-jul-92 by Alfredo Ferrari *
+* *
+* Included in: *
+* Electr *
+* Feeder *
+* Fluka *
+* Kaskad *
+* Kasneu *
+* Photon *
+* Zeroin *
+* Variables: *
+* Tctffp(i) = cut off time for ith-particle type *
+* in seconds *
+* Tdelap(i) = delay time before applying the ti- *
+* me cutoff for ith-particle type in *
+* seconds *
+* Tcutof = total time cutoff for the present *
+* particle in seconds *
+* Tstart = start time in seconds *
+* Mtstrp(i) = material number for the start si- *
+* gnal *
+* *
+* W A R N I N G !!! S T A R T S I G N A L N O T Y E T *
+* I M P L E M E N T E D !!! *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / CMTIME / TCTFFP (-6:NALLWP), TDELAP (-6:NALLWP), TCUTOF,
+ & TSTART, MTSTRP (-6:NALLWP)
+
--- /dev/null
+*$ CREATE COMCON.ADD
+*COPY COMCON
+*
+*=== comcon ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file COMpound CONstants: new version for FLUKA92 on *
+* *
+* Created on 30 october 1992 by Alfredo Ferrari *
+* INFN, Milan *
+* *
+* Last change on 28-apr-97 by Alfredo Ferrari, INFN - Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /comcon/ contains information about compounds *
+* icompl(imat) = number of materials in a compound *
+* matnum(i) = material numbers (compounds consist of the *
+* materials) *
+* aocmbc(i) = atomic densities in barn**-1 cm**-1 *
+* (Atoms Over Cm times Barn for Compounds) *
+* cona13(i) = A^1/3 of the constituents *
+* sumzmf(i) = cumulative z^2 for multiple scattering *
+* contnt(i) = partial densities *
+* sumacn(i) = cumulative atom contents of the compounds *
+* cabinx(i) = cumulative at.cont.*inelastic cross section *
+* cabelx(i) = cumulative at.cont.* elastic cross section *
+* anxnor = total inelastic cross section *
+* elxnor = total elastic cross section *
+* pliflu(imat) = plasma energy of the Fluka medium Imat *
+* jchflu(imat) = number of harmonic oscillator levels in a *
+* compound *
+* jc0flu(imat) = starting position for 0 index for Imat medium *
+* in the following arrays *
+* ehoflu(j) = jth - jc0flu(imat) harmonic oscillator levels *
+* of Fluka medium Imat *
+* elnhfl(j) = natural logarithm of ehoflu (j) *
+* fosflu(j) = oscillator strength for the jth - jc0flu(Imat)*
+* harmonic oscillator levels of Fluka medium *
+* Imat *
+* zhoflu(j) = atomic number of the element for the jth - *
+* jc0flu(imat) harmonic oscillator level of *
+* Fluka medium Imat *
+* ahoflu(j) = atomic weights of the element for the jth - *
+* jc0flu(imat) harmonic oscillator level of *
+* Fluka medium Imat *
+* eliflu(j) = l_i of the Sternheimer theory for the jth - *
+* jc0flu(Imat) harmonic oscillator level of *
+* Fluka medium Imat *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /COMCON/ AOCMBC (ICOMAX), CONA13 (ICOMAX), SUMZMF (ICOMAX),
+ & CONTNT (ICOMAX), SUMACN (ICOMAX), CABINX (ICOMAX),
+ & CABELX (ICOMAX), ANXNOR, ELXNOR, EHOFLU (ICHMAX),
+ & ELNHFL (ICHMAX), FOSFLU (ICHMAX), ZHOFLU (ICHMAX),
+ & AHOFLU (ICHMAX), ELIFLU (ICHMAX), PLIFLU (MXXMDF),
+ & ICOMPL (MXXMDF), JC0FLU (MXXMDF), JCHFLU (MXXMDF),
+ & MATNUM (ICOMAX)
+
--- /dev/null
+*$ CREATE COMPUT.ADD
+*COPY COMPUT
+*
+*=== comput ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: comput copy created 23/08/94 by afa *
+* *
+* Last change on 09-nov-98 by Alfredo Ferrari, CERN *
+* included in the following subroutines or functions: *
+* *
+* berttp *
+* blkdt1 *
+* cmsppr *
+* dtimst *
+* elsgrd *
+* epilog *
+* feeder *
+* flukam *
+* fluoin *
+* geogeo *
+* mgdraw *
+* nuscti *
+* pisgrd *
+* plotgm *
+* rsncli *
+* source *
+* usrbdx *
+* usrbin *
+* usrtrk *
+* usryld *
+* which *
+* xnbnls *
+* xnloan *
+* xsread *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* /comput/ contains information about the computer used *
+* and about the input file *
+* komput = system (1=OpenVms, 2=ibm-vm, 3=ibm-mvs, *
+* 4=cray, 5=unix-aix, 6=unix-hp, *
+* 7=unix-sun, 8=DEC-unix, 9=Linux...) *
+* Cpuspe = computer speed with respect to IBM 370/168-3 *
+* or to VAX 780/11 or to IBM RISC/6000 7012/370 *
+* Cpujob = cpu limit (s) for the current job *
+* Kpwdir = last non blank character of Pwddir *
+* Kfldir = last non blank character of Hfldir *
+* Khmdir = last non blank character of Homdir *
+* Mxftnu = maximum fortran unit number allowed *
+* Comptr = model *
+* Inpfil = input file *
+* Pwddir = current work directory *
+* Hfldir = home FLUKA directory *
+* Homdir = user home directory *
+* Hostnm = host name *
+* Usrflk = user name *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER COMPTR*50, INPFIL*80, PWDDIR*80, HFLDIR*80, HOMDIR*80,
+ & HOSTNM*80, USRFLK*80
+ COMMON / COMPUT / CPUSPE, CPUJOB, KOMPUT, KPWDIR, KFLDIR, KHMDIR,
+ & MXFTNU
+ COMMON / CHCMPT / COMPTR, INPFIL, PWDDIR, HFLDIR, HOMDIR, HOSTNM,
+ & USRFLK
+
--- /dev/null
+*$ CREATE COOKCM.ADD
+*COPY COOKCM
+*
+*----------------------------------------------------------------------*
+* *
+* Include file CookCm *
+* *
+* This is the Fluka version of LAHET common COOK *
+* *
+* This common together with the routines GETA,GETG and the relevant*
+* initialization in common BDEVAP has been obtained by the corre- *
+* sponding LAHET routines, thanks to the kindness of R.E.Prael *
+* *
+* Created on 18 january 1993 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 22-jul-00 by Alfredo Ferrari *
+* *
+* Note that the AMEAN array has been eliminated since its function *
+* is already provided by the Aprime array of EVAP-V from HETC-KFA *
+* Moreover the following variable names have been changed to avoid *
+* clashes: *
+* PZ --> PZCOOK *
+* PN --> PNCOOK *
+* SZ --> SZCOOK *
+* SN --> SNCOOK *
+* ISZ --> LDEFOZ *
+* ISN --> LDEFON *
+* and the array CON has been directly coded into GETA/GETG *
+* *
+* Data tables of Cook et. al. from AAEC/TM392, supplemented by G+C.*
+* *
+* The variables Pzgica, Pngica, Szgica, Sngica are the original *
+* values from A.Gilbert, A.G.W.Cameron, Can.J.Phys. 43 (1965) 1447 *
+* *
+* The ...IGN variables relate to the Ignyatuk-like fit for the *
+* excitation energy dependence of the level density. *
+* In particular, the asymptotic level density parameter is given *
+* by: *
+* a(oo) = alpign + betign * Ahelp *
+* where: *
+* Ahelp = A, for powign = 0 *
+* Ahelp = A^powign, for powign >< 0 *
+* and for any given Ueff (Ueff=U-delta): *
+* a(Ueff) = a(0) * G(gamma*Ueff) + a(oo) * [1 - G(gamma*Ueff)] *
+* where: *
+* G(x) = [1 - exp(-x)]/x *
+* and: *
+* gamma = gamign, for gamign > 0 *
+* gamma = -a(oo) / gamign / A^1/3, for gamign < 0 *
+* *
+*----------------------------------------------------------------------*
+*
+* Conversion factor from a to g:
+ PARAMETER ( ASMTOG = SIXSIX / PIPIPI**2 )
+*
+ LOGICAL LDEFOZ, LDEFON
+ PARAMETER ( INCOOK = 150, IZCOOK = 98 )
+ PARAMETER ( INGICA = 150, IZGICA = 98 )
+ COMMON / COOKCM / ALPIGN, BETIGN, GAMIGN, POWIGN,
+ & SZCOOK (IZCOOK), SNCOOK (INCOOK), PZCOOK (IZCOOK),
+ & PNCOOK (INCOOK), SZGICA (IZGICA), SNGICA (INGICA),
+ & PZGICA (IZGICA), PNGICA (INGICA), SZGINW (IZGICA),
+ & SNGINW (INGICA), PZGINW (IZGICA), PNGINW (INGICA),
+ & SZGIEX (IZGICA), SNGIEX (INGICA), PZGIEX (IZGICA),
+ & PNGIEX (INGICA), LDEFOZ (IZCOOK), LDEFON (INCOOK)
+
--- /dev/null
+*$ CREATE CORINC.ADD
+*COPY CORINC
+* *
+*=== corinc ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Created on 02 february 1990 by Alfredo Ferrari *
+* Infn - Milan *
+* *
+* Last change on 19-may-95 by Alfredo Ferrari *
+* *
+* Be sure that the parameter Inmax is >= than the same parameter *
+* in the function Nudisv *
+* *
+* Xquark = projectile (anti)quark X fraction for mesons and *
+* (anti)baryons *
+* Xqbdiq = projectile qbar/(anti)diquark X fraction for *
+* mesons/(anti)baryons *
+* Xequar = lab energy associated with Xquark *
+* Xpquar = lab momentum associated with Xquark *
+* Xeqbdq = lab energy associated with Xqbdiq *
+* Xpqbdq = lab momentum associated with Xqbdiq *
+* Xsea(i) = X fraction of the quark of the i_th sea qqbar *
+* couple *
+* Xasea(i) = X fraction of the qbar of the i_th sea qqbar *
+* couple *
+* Xesea(1,i) = lab energy associated with Xsea(i) *
+* Xesea(2,i) = lab energy associated with Xasea(i) *
+* Xpsea(1,i) = lab momentum associated with Xsea(i) *
+* Xpsea(2,i) = lab momentum associated with Xasea(i) *
+* Frainc = reduction factor for intranuclear cascade energy, *
+* including correlations *
+* Anuav = expected asymptotic (E_cms>>m_pro) average number *
+* of primary collisions, before threshold effects *
+* Sgivmd = Vector meson - A inelastic sigma *
+* Sivmdp = Vector meson - p inelastic sigma *
+* Sivmdn = Vector meson - n inelastic sigma *
+* Sgtvmd = Vector meson - A total sigma *
+* Stvmdp = Vector meson - p total sigma *
+* Stvmdn = Vector meson - n total sigma *
+* Iqsea(i) = quark id of the i_th sea qqbar couple *
+* Ijtarg(i+1) = target nucleon id of the i_th sea-valence intera- *
+* ction (i=0 --> valence-valence) *
+* Nsea = number of sea-valence interactions *
+* Nsebdf = number of sea-valence interactions before possible *
+* reductions due to diffraction exclusion *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( INMAX = 30 )
+ COMMON / CORINC / XQUARK, XQBDIQ, XEQUAR, XPQUAR, XEQBDQ, XPQBDQ,
+ & XSEA (INMAX), XASEA (INMAX), XESEA (2,INMAX),
+ & XPSEA (2,INMAX), FRAINC, ANUAV, SGIVMD, SIVMDP,
+ & SIVMDN, SGTVMD, STVMDP, STVMDN,
+ & IQSEA (INMAX), IJTARG (INMAX+1), NSEA , NSEBDF
+
--- /dev/null
+*$ CREATE COUNTQ.ADD
+*COPY COUNTQ
+*
+*=== countq ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: countq copy *
+* *
+* New version of the original Countq from P.Aarnio: *
+* *
+* Now Sopp's have no meaning, it is used only to steer the new *
+* Fred James double precision random number generator *
+* *
+* Created on 19 july 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 29-jan-97 by Alfredo Ferrari *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MHLPAL = 2 * KALGNM )
+ LOGICAL LFJR48
+ COMMON / COUNTQ / SOPP (2), LFJR48
+ DIMENSION KSOPP (MHLPAL)
+ EQUIVALENCE ( KSOPP (1), SOPP (1) )
+
--- /dev/null
+*$ CREATE CRQRKS.ADD
+*COPY CRQRKS
+*
+*=== Crqrks ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CuRrent QuaRKS: *
+* *
+* Created on 21 october 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 16-oct-00 by Alfredo Ferrari *
+* *
+* i=1,2 Iqrkx(i) = x_th (anti)quark of the i_th particle selected *
+* by qrstvx (1 selected normally, two selected for*
+* chain joining) *
+* i=-1,0 Iqrkx(i) = x_th (anti)quark of the last particle produced *
+* out of the -i jet (-i=LL in bamjev terminology) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXQRKJ = 2 )
+*
+ COMMON / CRQRKS / IQURK1 (-1:MXQRKJ), IQURK2 (-1:MXQRKJ),
+ & IQURK3 (-1:MXQRKJ), NPRTST
--- /dev/null
+*$ CREATE CSMCRY.ADD
+*COPY CSMCRY
+*
+*=== csmcry ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CoSMiC RaY common: *
+* *
+* Created on 29 may 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 29-mar-01 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXATSH = 201 )
+ PARAMETER ( MXPNSK = 64 )
+ LOGICAL LGMGCO, LMBCKT, LCFCRC
+ COMMON / CSMCRY / ALMGMG, PHMGMG, DOSCRN, ALPSCR, DPHSCR, BESMPL,
+ & DOSMPL, TMNSMP, TMXSMP, PMNSMP, PMXSMP, PEARTH,
+ & RPLANT, RPLNTS, RMNCTF, RMXCTF, CRBNNR,
+ & SRSCRN (MXATSH),GAMMAE, SPNORM, CSTHPR,
+ & AFLUX (79), XFLUX (79), FFLUX (79), RFLUX (79),
+ & FLPINS(MXPNSK,28), FPINST(28), XCRCRR, YCRCRR,
+ & ZCRCRR, TXCRCR, TYCRCR, TZCRCR, PCRCRR, IACRCR,
+ & IZCRCR, IZPINS, NEPINS, IFLXFL, LGMGCO, LMBCKT,
+ & LCFCRC
+
--- /dev/null
+*$ CREATE CTITLE.ADD
+*COPY CTITLE
+*
+*=== ctitle ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common Ctitle: it allows the identification of the run *
+* created by A. Ferrari on 10-feb-1990 *
+* *
+* included in: *
+* fluka (main) *
+* bdnopt *
+* detect *
+* jomin *
+* usrbin *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER RUNTIT*80, RUNTIM*32, RUNKEY*10, RUNGEO*60
+ COMMON / CTITLE / RUNTIT, RUNTIM, RUNKEY, RUNGEO
+ COMMON / CEXPCK / ITEXPI, ITEXMX, IOPOUT, IOUTUN (MXOUTU)
+
--- /dev/null
+*$ CREATE CURPRO.ADD
+*COPY CURPRO
+*
+*=== curpro ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* CURrent PROjectile parameters *
+* *
+* Created on 28 january 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 29-jan-92 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BIMSEL *
+* NWISEL *
+* FORNUC *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / CURPRO / XCRRNT, YCRRNT, ZCRRNT, CXCRRN, CYCRRN, CZCRRN,
+ & RCRRNT, VCRRNT, PCRRNT, ECRNNT
+
--- /dev/null
+*$ CREATE DBLPRC.ADD
+*COPY DBLPRC
+* *
+*=== dblprc ==========================================================*
+* *
+*---------------------------------------------------------------------*
+* *
+* Dblprc: included in any routine, machine, mathematical and *
+* physical constants plus global declarations *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! O N M A C H I N E S W H E R E T H E D O U B L E !!!! *
+* !!!! P R E C I S I O N I S N O T R E Q U I R E D R E -!!!! *
+* !!!! M O V E T H E D O U B L E P R E C I S I O N !!!! *
+* !!!! S T A T E M E N T, S E T K A L G N M = 1 A N D !!!! *
+* !!!! C H A N G E A L L N U M E R I C A L C O N S - !!!! *
+* !!!! T A N T S T O S I N G L E P R E C I S I O N !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* Kalgnm = real address alignment, 2 for double precision, *
+* 1 for single precision *
+* Anglgb = this parameter should be set equal to the machine *
+* "zero" with respect to unit *
+* Anglsq = this parameter should be set equal to the square *
+* of Anglgb *
+* Axcssv = this parameter should be set equal to the number *
+* for which unity is negligible for the machine *
+* accuracy *
+* Andrfl = "underflow" of the machine for floating point *
+* operation *
+* Avrflw = "overflow" of the machine for floating point *
+* operation *
+* Ainfnt = code "infinite" *
+* Azrzrz = code "zero" *
+* Einfnt = natural logarithm of the code "infinite" *
+* Ezrzrz = natural logarithm of the code "zero" *
+* Excssv = natural logarithm of the code number for which *
+* unit is negligible *
+* Englgb = natural logarithm of the code "zero" with respect *
+* to unit *
+* Onemns = 1- of the machine, it is 1 - 2 x Anglgb *
+* Onepls = 1+ of the machine, it is 1 + 2 x Anglgb *
+* Csnnrm = maximum tolerable error on cosine normalization, *
+* u**2+v**2+w**2: assuming a typical anglgb relative *
+* error on each component we would get 2xanglgb: use *
+* 4xanglgb to avoid too many normalizations *
+* Dmxtrn = "infinite" distance for transport (cm) *
+* Rhflmn = minimal density for Fluka (g/cm^3) *
+* *
+* "Global" declarations: *
+* Lfluka = set to true for a real (full) Fluka run *
+* Lgbias = set to true for a fully biased run *
+* Lgbana = set to true for a fully analogue run *
+* Lflgeo = set to true when using the standard Fluka geometry *
+* Loflts = set to true for special off-line testing of speci- *
+* fic routines *
+* Lusrin = set to true if the user dependent initialization *
+* routine Usrini has been called at least onec *
+* *
+*---------------------------------------------------------------------*
+* *
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ PARAMETER ( KALGNM = 2 )
+ PARAMETER ( ANGLGB = 5.0D-16 )
+ PARAMETER ( ANGLSQ = 2.5D-31 )
+ PARAMETER ( AXCSSV = 0.2D+16 )
+ PARAMETER ( ANDRFL = 1.0D-38 )
+ PARAMETER ( AVRFLW = 1.0D+38 )
+ PARAMETER ( AINFNT = 1.0D+30 )
+ PARAMETER ( AZRZRZ = 1.0D-30 )
+ PARAMETER ( EINFNT = +69.07755278982137 D+00 )
+ PARAMETER ( EZRZRZ = -69.07755278982137 D+00 )
+ PARAMETER ( EXCSSV = +35.23192357547063 D+00 )
+ PARAMETER ( ENGLGB = -35.23192357547063 D+00 )
+ PARAMETER ( ONEMNS = 0.999999999999999 D+00 )
+ PARAMETER ( ONEPLS = 1.000000000000001 D+00 )
+ PARAMETER ( CSNNRM = 2.0D-15 )
+ PARAMETER ( DMXTRN = 1.0D+08 )
+ PARAMETER ( RHFLMN = 1.0D-06 )
+*
+*======================================================================*
+*======================================================================*
+*========= ==========*
+*========= M A T H E M A T I C A L C O N S T A N T S ==========*
+*========= ==========*
+*======================================================================*
+*======================================================================*
+* *
+* Numerical constants (single precision): *
+* *
+* Zersng = 0 *
+* *
+* Numerical constants (double precision): *
+* *
+* Zerzer = 0 *
+* Oneone = 1 *
+* Twotwo = 2 *
+* Thrthr = 3 *
+* Foufou = 4 *
+* Fivfiv = 5 *
+* Sixsix = 6 *
+* Sevsev = 7 *
+* Eigeig = 8 *
+* Aninen = 9 *
+* Tenten = 10 *
+* Eleven = 11 *
+* Twelve = 12 *
+* Fiften = 15 *
+* Sixten = 16 *
+* Hlfhlf = 1/2 *
+* Onethi = 1/3 *
+* Onefou = 1/4 *
+* Onefiv = 1/5 *
+* Onesix = 1/6 *
+* Onesev = 1/7 *
+* Oneeig = 1/8 *
+* Twothi = 2/3 *
+* Thrfou = 3/4 *
+* Thrtwo = 3/2 *
+* Pipipi = Circumference / diameter *
+* Twopip = 2 x Pipipi *
+* Pip5o2 = 5/2 x Pipipi *
+* Pipisq = Pipipi x Pipipi *
+* Pihalf = 1/2 x Pipipi *
+* Erfa00 = Erf (oo) = 1/2 x square root of pi *
+* Sqtwpi = square root of 2xpi *
+* Eulero = Eulero's constant *
+* Eulexp = exp ( Eulero ) *
+* E1m2eu = exp ( 1 - 2 eulero ) *
+* Eneper = "e", base of natural logarithm *
+* Sqrent = square root of "e" *
+* Sqrtwo = square root of 2 *
+* Sqrthr = square root of 3 *
+* Sqrfiv = square root of 5 *
+* Sqrsix = square root of 6 *
+* Sqrsev = square root of 7 *
+* Sqrt12 = square root of 12 *
+* *
+*----------------------------------------------------------------------*
+*
+ REAL ZERSNG
+ PARAMETER ( ZERSNG = 0.E+00 )
+ PARAMETER ( ZERZER = 0.D+00 )
+ PARAMETER ( ONEONE = 1.D+00 )
+ PARAMETER ( TWOTWO = 2.D+00 )
+ PARAMETER ( THRTHR = 3.D+00 )
+ PARAMETER ( FOUFOU = 4.D+00 )
+ PARAMETER ( FIVFIV = 5.D+00 )
+ PARAMETER ( SIXSIX = 6.D+00 )
+ PARAMETER ( SEVSEV = 7.D+00 )
+ PARAMETER ( EIGEIG = 8.D+00 )
+ PARAMETER ( ANINEN = 9.D+00 )
+ PARAMETER ( TENTEN = 10.D+00 )
+ PARAMETER ( ELEVEN = 11.D+00 )
+ PARAMETER ( TWELVE = 12.D+00 )
+ PARAMETER ( FIFTEN = 15.D+00 )
+ PARAMETER ( SIXTEN = 16.D+00 )
+ PARAMETER ( HLFHLF = 0.5D+00 )
+ PARAMETER ( ONETHI = ONEONE / THRTHR )
+ PARAMETER ( ONEFOU = ONEONE / FOUFOU )
+ PARAMETER ( ONEFIV = ONEONE / FIVFIV )
+ PARAMETER ( ONESIX = ONEONE / SIXSIX )
+ PARAMETER ( ONESEV = ONEONE / SEVSEV )
+ PARAMETER ( ONEEIG = ONEONE / EIGEIG )
+ PARAMETER ( TWOTHI = TWOTWO / THRTHR )
+ PARAMETER ( THRFOU = THRTHR / FOUFOU )
+ PARAMETER ( THRTWO = THRTHR / TWOTWO )
+ PARAMETER ( PIPIPI = 3.141592653589793238462643383279D+00 )
+ PARAMETER ( TWOPIP = 6.283185307179586476925286766559D+00 )
+ PARAMETER ( PIP5O2 = 7.853981633974483096156608458199D+00 )
+ PARAMETER ( PIPISQ = 9.869604401089358618834490999876D+00 )
+ PARAMETER ( PIHALF = 1.570796326794896619231321691640D+00 )
+ PARAMETER ( ERFA00 = 0.886226925452758013649083741671D+00 )
+ PARAMETER ( SQRTPI = 1.772453850905516027298167483341D+00 )
+ PARAMETER ( SQTWPI = 2.506628274631000502415765284811D+00 )
+ PARAMETER ( EULERO = 0.577215664901532860606512 D+00 )
+ PARAMETER ( EULEXP = 1.781072417990197985236504 D+00 )
+ PARAMETER ( EULLOG =-0.5495393129816448223376619 D+00 )
+ PARAMETER ( E1M2EU = 0.8569023337737540831433017 D+00 )
+ PARAMETER ( ENEPER = 2.718281828459045235360287471353D+00 )
+ PARAMETER ( SQRENT = 1.648721270700128146848650787814D+00 )
+ PARAMETER ( SQRTWO = 1.414213562373095048801688724210D+00 )
+ PARAMETER ( SQRTHR = 1.732050807568877293527446341506D+00 )
+ PARAMETER ( SQRFIV = 2.236067977499789696409173668731D+00 )
+ PARAMETER ( SQRSIX = 2.449489742783178098197284074706D+00 )
+ PARAMETER ( SQRSEV = 2.645751311064590590501615753639D+00 )
+ PARAMETER ( SQRT12 = 3.464101615137754587054892683012D+00 )
+*
+*======================================================================*
+*======================================================================*
+*========= ==========*
+*========= P H Y S I C A L C O N S T A N T S ==========*
+*========= ==========*
+*======================================================================*
+*======================================================================*
+* *
+* Primary constants: *
+* *
+* Clight = speed of light in cm s-1 *
+* Avogad = Avogadro number *
+* Boltzm = k Boltzmann constant (J K-1) *
+* Amelgr = electron mass (g) *
+* Plckbr = reduced Planck constant (erg s) *
+* Elccgs = elementary charge (CGS unit) *
+* Elcmks = elementary charge (MKS unit) *
+* Amugrm = Atomic mass unit (g) *
+* Ammumu = Muon mass (amu) *
+* Amprmu = Proton mass (amu) *
+* Amnemu = Neutron mass (amu) *
+* *
+* Derived constants: *
+* *
+* Alpfsc = Fine structure constant = e^2/(hbar c) (CGS units) *
+* Amelct = Electron mass (GeV) = 10^-16Amelgr Clight^2 / Elcmks*
+* Amugev = Atomic mass unit (GeV) = 10^-16Amugrm Clight^2 *
+* / Elcmks *
+* Ammuon = Muon mass (GeV) = Ammumu * Amugev *
+* Amprtn = Proton mass (GeV) = Amprmu * Amugev *
+* Amntrn = Neutron mass (GeV) = Amnemu * Amugev *
+* Amdeut = Deuteron mass (GeV) *
+* Amalph = Alpha mass (GeV) (derived from the excess mass *
+* and an (approximate) atomic binding not a really *
+* measured constant) *
+* Cougfm = e^2 (GeV fm) = Elccgs^2 / Elcmks * 10^-7 * 10^-9 *
+* * 10^13 (10^..=erg cm->joule cm->GeV cm->GeV fm *
+* it is equal to 0.00144 GeV fm *
+* Fscto2 = (Fine structure constant)^2 *
+* Fscto3 = (Fine structure constant)^3 *
+* Fscto4 = (Fine structure constant)^4 *
+* Plabrc = Reduced Planck constant times the light velocity *
+* expressed in GeV fm *
+* Rclsel = Classical electron radius (cm) = e^2 / (m_e c^2) *
+* Bltzmn = k Boltzmann constant in GeV K-1 *
+* A0bohr = Bohr radius, hbar^2 / ( m_e e^2) (fm) = Plabrc**2 *
+* / Amelct / Cougfm, or equivalently, *
+* Plabrc / Alpfsc / Amelct *
+* Gfohb3 = Fermi constant, G_f/(hbar c)^3, in GeV^-2 *
+* Gfermi = Fermi constant in GeV fm^3 *
+* Sin2tw = sin^2 theta_Weinberg *
+* Prmgnm = proton magnetic moment (magneton) *
+* Anmgnm = neutron magnetic moment (magneton) *
+* *
+* Astronomical constants: *
+* *
+* Rearth = Earth equatorial radius (cm) *
+* Auastu = Astronomical Unit (cm) *
+* *
+* Conversion constants: *
+* *
+* GeVMeV = from GeV to MeV *
+* eMVGeV = from MeV to GeV *
+* alGVMV = from GeV to MeV, log *
+* Raddeg = from radians to degrees *
+* Degrad = from degrees to radians *
+* GeVOmg = from (photon) energy [GeV] in 2pi x frequency [s^-1]*
+* *
+* Useful constants: *
+* *
+* Fertho = constant to be used in the Fermi-Thomas approxima- *
+* ted expression for atomic binding energies *
+* Expebn = exponent to be used in the Fermi-Thomas approxima- *
+* ted expression for atomic binding energies *
+* B_atomic (Z) = Fertho x Z^Expebn (GeV) *
+* Bexc12 = Fermi-Thomas approximated expression for 12-C ato- *
+* mic binding energies (GeV) *
+* Amunmu = difference between the atomic and nuclear mass units*
+* Amuc12 = "Nuclear" mass unit = 1/12 M_nucl (12-C), *
+* M_nucl (12-C) = M_atom (12-C) - 6 m_e + B_atom(12-C)*
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( CLIGHT = 2.99792458 D+10 )
+ PARAMETER ( AVOGAD = 6.0221367 D+23 )
+ PARAMETER ( BOLTZM = 1.380658 D-23 )
+ PARAMETER ( AMELGR = 9.1093897 D-28 )
+ PARAMETER ( PLCKBR = 1.05457266 D-27 )
+ PARAMETER ( ELCCGS = 4.8032068 D-10 )
+ PARAMETER ( ELCMKS = 1.60217733 D-19 )
+ PARAMETER ( AMUGRM = 1.6605402 D-24 )
+ PARAMETER ( AMMUMU = 0.113428913 D+00 )
+ PARAMETER ( AMPRMU = 1.007276470 D+00 )
+ PARAMETER ( AMNEMU = 1.008664904 D+00 )
+* PARAMETER ( ALPFSC = 1.D+00 / 137.035989561D+00 )
+* PARAMETER ( FSCTO2 = ALPFSC * ALPFSC )
+* PARAMETER ( FSCTO3 = FSCTO2 * ALPFSC )
+* PARAMETER ( FSCTO4 = FSCTO3 * ALPFSC )
+* It is important to set the electron mass exactly with the same
+* rounding as in the mass tables, so use the explicit expression
+* PARAMETER ( AMELCT = 1.D-16 * AMELGR * CLIGHT * CLIGHT / ELCMKS )
+* It is important to set the amu mass exactly with the same
+* rounding as in the mass tables, so use the explicit expression
+* PARAMETER ( AMUGEV = 1.D-16 * AMUGRM * CLIGHT * CLIGHT / ELCMKS )
+* It is important to set the muon,proton,neutron masses exactly with
+* the same rounding as in the mass tables, so use the explicit
+* expression
+* PARAMETER ( AMMUON = AMMUMU * AMUGEV )
+* PARAMETER ( AMPRTN = AMPRMU * AMUGEV )
+* PARAMETER ( AMNTRN = AMNEMU * AMUGEV )
+* PARAMETER ( RCLSEL = ELCCGS * ELCCGS / CLIGHT / CLIGHT / AMELGR )
+* PARAMETER ( BLTZMN = BOLTZM / ELCMKS * 1.D-09 )
+ PARAMETER ( ALPFSC = 7.2973530791728595 D-03 )
+ PARAMETER ( FSCTO2 = 5.3251361962113614 D-05 )
+ PARAMETER ( FSCTO3 = 3.8859399018437826 D-07 )
+ PARAMETER ( FSCTO4 = 2.8357075508200407 D-09 )
+ PARAMETER ( PLABRC = 0.197327053 D+00 )
+ PARAMETER ( AMELCT = 0.51099906 D-03 )
+ PARAMETER ( AMUGEV = 0.93149432 D+00 )
+ PARAMETER ( AMMUON = 0.105658389 D+00 )
+ PARAMETER ( AMPRTN = 0.93827231 D+00 )
+ PARAMETER ( AMNTRN = 0.93956563 D+00 )
+ PARAMETER ( AMDEUT = 1.87561339 D+00 )
+ PARAMETER ( AMALPH = 3.72738025692891 D+00 )
+ PARAMETER ( COUGFM = ELCCGS * ELCCGS / ELCMKS * 1.D-07 * 1.D+13
+ & * 1.D-09 )
+ PARAMETER ( RCLSEL = 2.8179409183694872 D-13 )
+ PARAMETER ( BLTZMN = 8.617385 D-14 )
+ PARAMETER ( A0BOHR = PLABRC / ALPFSC / AMELCT )
+ PARAMETER ( GFOHB3 = 1.16639 D-05 )
+ PARAMETER ( GFERMI = GFOHB3 * PLABRC * PLABRC * PLABRC )
+ PARAMETER ( SIN2TW = 0.2319 D+00 )
+ PARAMETER ( PRMGNM = 2.792847386 D+00 )
+ PARAMETER ( ANMGNM =-1.91304275 D+00 )
+ PARAMETER ( REARTH = 6.378140 D+08 )
+ PARAMETER ( AUASTU = 1.4959787066 D+13 )
+ PARAMETER ( GEVMEV = 1.0 D+03 )
+ PARAMETER ( EMVGEV = 1.0 D-03 )
+ PARAMETER ( ALGVMV = 6.90775527898214 D+00 )
+ PARAMETER ( RADDEG = 180.D+00 / PIPIPI )
+ PARAMETER ( DEGRAD = PIPIPI / 180.D+00 )
+ PARAMETER ( GEVOMG = CLIGHT * 1.D+13 / PLABRC )
+* Old Fermi-Thomas parametrization of atomic binding energies:
+* PARAMETER ( FERTHO = 15.73 D-09 )
+* PARAMETER ( EXPEBN = 7.D+00 / 3.D+00 )
+* PARAMETER ( BEXC12 = FERTHO * 65.41634134195703D+00 )
+* New Fermi-Thomas parametrization of atomic binding energies:
+ PARAMETER ( FERTHO = 14.33 D-09 )
+ PARAMETER ( EXPEBN = 2.39 D+00 )
+ PARAMETER ( BEXC12 = FERTHO * 72.40715579499394D+00 )
+ PARAMETER ( AMUNMU = HLFHLF * AMELCT - BEXC12 / 12.D+00 )
+ PARAMETER ( AMUC12 = AMUGEV - AMUNMU )
+*
+ LOGICAL LFLUKA, LGBIAS, LGBANA, LFLGEO, LOFLTS, LUSRIN
+ COMMON / GLOBAL / LFLUKA, LGBIAS, LGBANA, LFLGEO, LOFLTS,
+ & LUSRIN, KFLGEO, KFLDNR
+
--- /dev/null
+*$ CREATE DCDRBS.ADD
+*COPY DCDRBS
+*
+*=== Dcdrbs ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* DeCay DiRection BiaSing: *
+* *
+* Created on 30 march 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 13-apr-98 by Alfredo Ferrari *
+* *
+* Aldcdr = Lamda for eps=1-cos(theta). The polar direction *
+* around the direction corresponding to the one *
+* wished by the user is sample from *
+* P(eps) = exp (-eps/Aldcdr) *
+* U,V,Wdcdrb = Lab direction the neutrino should go along *
+* Sdcdrb = Sin(acos(Wdcdrb)) *
+* Spdcdr = Vdcdrb / Sdcdrb *
+* Cpdcdr = Udcdrb / Sdcdrb *
+* Aldcdc = current Lamda for eps=1-cos(theta) *
+* Sth0dc = Sin(Theta_0), where (Theta_0,Phi_0) is the direc- *
+* tion corresponding to U,V,Wdcdrb in the decaying *
+* particle CMS *
+* Cth0dc = Cos(Theta_0) *
+* Sph0dc = Sin(Phi_0) *
+* Cph0dc = Cos(Phi_0) *
+* Kpdcdr = number (1,2,3...) of the decay product whose *
+* direction is biased *
+* Ldcdrb(i) = flag for decay direction biasing for i_th particle *
+* type (Paprop numbering scheme) *
+* Ldcdbc = current flag for decay direction biasing *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LDCDRB, LDCDBC
+*
+ COMMON / DCDRBS / ALDCDR, UDCDRB, VDCDRB, WDCDRB, SDCDRB, SPDCDR,
+ & CPDCDR, ALDCDC, STH0DC, CTH0DC, SPH0DC, CPH0DC,
+ & KPDCDR, LDCDRB (-6:NALLWP), LDCDBC
+
--- /dev/null
+*$ CREATE DECAYC.ADD
+*COPY DECAYC
+*
+*=== Decayc ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: Decayc (new version of old Decayc) *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! S E E A L S O I N C L U D E F I L E !!!! *
+* !!!! D E C A Y C 2 !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* Created on 07 february 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 07-feb-97 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* AMPART *
+* BLKDT7 *
+* CHANWT *
+* DATEST *
+* DECAY *
+* DIFEVV *
+* HADDEN *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ZKNAME
+ COMMON / DECAYC / WT (-6:IDMXDC), NZK (-6:IDMXDC,3)
+ COMMON / DCYCCH / ZKNAME (-6:IDMXDC)
+
--- /dev/null
+*$ CREATE DECAYC2.ADD
+*COPY DECAYC2
+*
+*=== Decayc2 ==========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: Decayc2 (new version of old Decayc2) *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! S E E A L S O I N C L U D E F I L E !!!! *
+* !!!! D E C A Y C !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* Created on 07 february 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 07-feb-97 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* AMPART *
+* BLKDT7 *
+* CHANWT *
+* DATEST *
+* DECAY *
+* DIFEVV *
+* HADDEN *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ZKNAMC
+ COMMON / DECAYC / WTC (-6:IDMXDC), NZKC (-6:IDMXDC,3)
+ COMMON / DCYCCH / ZKNAMC (-6:IDMXDC)
+
--- /dev/null
+*$ CREATE DEPNUC.ADD
+*COPY DEPNUC
+* *
+*=== depnuc ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* DEPleted NUCleus: *
+* *
+* Created on 05 may 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 02-may-95 by Alfredo Ferrari *
+* *
+* Llastn = flag for the situation where just two residual *
+* target nucleons are left *
+* Llast1 = flag for the situation where just one residual *
+* target nucleon is left *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LLASTN, LLAST1
+ COMMON /DEPNUC/ EKLAST, AMLAST, PXLAST, PYLAST, PZLAST,
+ & EKINC , AMINC , PXXINC, PYYINC, PZZINC,
+ & KTLAST, KTINC , LLASTN, LLAST1
+
--- /dev/null
+*$ CREATE DETECT.ADD
+*COPY DETECT
+* *
+*=== detect ===========================================================*
+* *
+
+*----------------------------------------------------------------------*
+* *
+* detect created 20-sep-1989 by A. Ferrari *
+* *
+* included in: *
+* geoden *
+* detect *
+* bdnopt *
+* *
+* W A R N I N G any change of the Ndtcmx parameter must be *
+* done also on the Ndtcm2 parameter of the Detloc module! *
+*----------------------------------------------------------------------*
+* *
+ PARAMETER (NRGNMX = 10)
+ PARAMETER (NDTCMX = 10)
+ PARAMETER (NSCRMX = 10)
+ PARAMETER (NDTBIN = 1024)
+ CHARACTER*10 TITDET,TITSCO
+ LOGICAL LDTCTR
+ COMMON /DETCT/ EDTMIN(NDTCMX), EDTBIN(NDTCMX), EDTCUT(NDTCMX),
+ & KDTREG(NRGNMX,NDTCMX), KDTDET(NDTCMX,NSCRMX),
+ & NDTSCO, NDTDET, LDTCTR, IDTREG(MXXRGN),
+ & KDTSCD(NSCRMX)
+ COMMON /DETCH/ TITDET(NDTCMX), TITSCO(NSCRMX)
+
--- /dev/null
+*$ CREATE DETLOC.ADD
+*COPY DETLOC
+* *
+*=== detloc ===========================================================*
+* *
+
+*----------------------------------------------------------------------*
+* *
+* detloc created 20-sep-1989 by A. Ferrari *
+* *
+* included in: *
+* detect *
+* bdnopt *
+* *
+* W A R N I N G any change of the Ndtcm2 parameter must be *
+* done also on the Ndtcmx parameter of the Detect module! *
+*----------------------------------------------------------------------*
+* *
+ PARAMETER (NDTCM2 = 10)
+ COMMON /DETLOC/ ACCUMP (NDTCM2), ACCUMN (NDTCM2),
+ & ICOINC(NDTCM2), NCLAS
+
--- /dev/null
+*$ CREATE DFXSTB.ADD
+*COPY DFXSTB
+*
+*=== dfxstb ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* h-h DiFfractive X-section TaBulations: *
+* *
+* Created on 11-september-1996 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 11-sep-96 by Alfredo Ferrari, INFN-Milan *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXDFTB = 80 )
+ PARAMETER ( RTDFTB = 1.2D+00 )
+* This is the logarithm of the previous one:
+ PARAMETER ( ARDFTB = 0.182321556793955D+00 )
+ COMMON / DFXSTB / SGDFTB (MXDFTB,4,-6:NALLWP), ALS0DF (-6:NALLWP),
+ & UMSQDF, UMODFF, PCM0DF, ECMHA0, AMDFHA, ECMHX0,
+ & AMDFHX, TTMNDF, TTMXDF
+
--- /dev/null
+*$ CREATE DIFSCT.ADD
+*COPY DIFSCT
+*
+*=== difsct ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* h-h DIFfractive SCaTtering informations: *
+* *
+* Created on 15-september-1993 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 05-mar-98 by Alfredo Ferrari, INFN-Milan *
+* *
+* Sdftot = total single diffractive cross section (both target *
+* and projectile) *
+* *
+* Sdfprt(i) = single diffractive cross section for projectile (i=1) *
+* or target (i=2) *
+* Sdflwm(k) = single diffractive cross section for the k_th quantum *
+* number combination *
+* Sdfres(k,i) = single diffractive cross section for projectile (i=1) *
+* or target (i=2), resonant part, for the k_th quantum *
+* number combination *
+* *
+* Sdfrsc(k,j,i)= single diffractive cross section for projectile (i=1) *
+* target (i=2), resonant part components (before and *
+* after z_bmax), for the k_th quantum number combination*
+* *
+* Sdfnrs(k,i) = single diffractive cross section for projectile (i=1) *
+* or target (i=2), non resonant part, for the k_th *
+* quantum number combination *
+* *
+* Zbmxdf(k,i) = Zbmax for the transition from the increasing slope *
+* resonant part to the constant slope resonant part, *
+* for the k_th quantum number combination *
+* Zbdiff(k,i) = Zbar for the transition from the resonant part to the *
+* non resonant part, for the k_th quantum number *
+* combination *
+* *
+* Zbrhlp(k,i) = Z_r_hlp bar for the transition from the resonant part *
+* to the non resonant part, for the k_th quantum number *
+* combination* *
+* *
+* Atzmnd(k,i) = Atan (z_min_diff) *
+* *
+* Atzmxd(k,i) = Atan (zbmxdf(k,i)) *
+* *
+* Atzbdf(k,i) = Atan (zbdiff(k,i)) *
+* *
+* Adfhlp(k,i) = Mass of the hadron going to be diffracted or zero, *
+* depending on option *
+* *
+* Amdfrs(k,i) = Mass of the resonant system, for the k_th quantum *
+* number combination *
+* *
+* Gadfrs(k,i) = Width of the resonant system, for the k_th quantum *
+* number combination *
+* *
+* Amdfms(k,i) = Squared Mass of the diffracted system - m_hlp^2 at the*
+* linking point (z=zbdiff), for the k_th quantum number *
+* combination *
+* *
+* Almxdf(k,i) = Ratio of the maximum squared Mass of the diffracted *
+* system - m_hlp^2 to the squared invariant mass, for *
+* the k_th quantum number combination *
+* *
+* Aldmdf(k,i) = Ratio of the maximum dumping function squared Mass of *
+* the diffracted system - m_hlp^2 to the squared inva- *
+* riant mass, for the k_th quantum number combination *
+* *
+* Exdmdf(k,i) = exp (-(aldmdf(k,i)-almxdf(k,i))/almxdf(k,i)) or K *
+* factor depending on option, for the k_th quantum *
+* number combination *
+* *
+* Prdmdf(k,i) = Probability to sample from the dumping function with *
+* respect to sampling from 1/M_x^2, for the k_th quantum*
+* number combination *
+* *
+* B0sldf(k,i) = asymptotic B_slope to be used, for the k_th quantum *
+* number combination *
+* *
+* Bmaxdf(k,i) = maximum B_slope to be used (at Z=Zbmax), for the k_th *
+* quantum number combination *
+* *
+* Sg0hdf(k,i) = Sigma_0 for (high mass) diffractive cross section *
+* computation, for the k_th quantum number combination *
+* *
+* Sg0hrf(k,i) = Sigma_0 for (resonant) diffractive cross section *
+* computation, for the k_th quantum number combination *
+* *
+* Brlwmd(k,ip) = ip Paprop numbering, Brlwmd is the branching of the *
+* k_th quantum number combination for diffraction of *
+* particle ip *
+* *
+* Amdfxs = Sampled diffracted system mass squared *
+* *
+* Amdifx = Sampled diffracted system mass *
+* *
+* Bsldif = actual B_slope to be used for the current diffracting *
+* scattering *
+* *
+* Acsgdf = A coefficient for the diffractive cross section *
+* d2 s_diff/dtdM2 = A (1+B/s) f(t,M2) *
+* *
+* Bcsgdf = B coefficient for the diffractive cross section *
+* *
+* Ccsgdf = C coefficient for the diffractive cross section *
+* (same as p but for mesons) *
+* *
+* B0podf = asymptotic B_slope for triple pomeron diffracting *
+* scattering, *
+* B_slope = B0podf + 2 aprdff ln [ s / M_x^2 ] *
+* *
+* Aprdff = alpha' of Pomeron trajectory *
+* a(t) = 1 + eps + a't *
+* *
+* Epsdff = epsilon of Pomeron trajectory (0 for a critical *
+* pomeron, >0 for a supercritical one) *
+* *
+* Crvesc = curvature (GeV/c)^-4 for elastic scattering *
+* *
+* *
+* Zbdff0 = Zbdiff for options where it is not computed from *
+* continuity constraints *
+* *
+* Dfcoml = Multiplication factor for the coherence condition *
+* for determining the maximum diffr. mass *
+* *
+* Iflgdf = flag for main diffraction option *
+* *
+* Mlwmdf(i) = number of quantum number combinations available for *
+* the excited system (1:projectile,2:target) *
+* *
+* Idifpt = id of the excited system (1:projectile,2:target) *
+* *
+* Ilwmdf = id of the quantum number of the excited system *
+* *
+* Nlwmdf = maximum number of allowed quantum number combinations *
+* for the present run *
+* *
+* Ijlwmd(k,ip) = ip Paprop numbering, is the index of the low mass *
+* diffraction resonant state (if any) for particle ip *
+* and for quantum number combination k. It comes out *
+* in Part numbering of course! *
+* *
+* Ijchco(ip) = ip Paprop numbering, Ijchco is the index (Paprop num- *
+* bering) of the charge conjugated of particle ip *
+* *
+* Lrsdif = Run-time flag for performing direct resonance produc- *
+* tion of the (low mass) diffracted system *
+* *
+* Lscdif = Run-time flag for performing single chain production *
+* of the (low mass) diffracted system *
+* *
+* Lmcldf = Flag for performing or not diffractive scattering for *
+* valence collisions for h-A interactions were sea coll. *
+* also take place (.true. --> not performed) *
+* *
+* Lmndfs = Flag for accounting or not diffractive scattering cross *
+* sections in computing the number of collisions for h-A *
+* interactions when sea coll. also take place (.true. --> *
+* not accounted) *
+* *
+* Lmndft = Flag for accounting or not diffractive scattering cross *
+* sections for the (excited) target nucleon in computing *
+* the number of collisions for h-A interactions when sea *
+* coll. also take place (.true. --> not accounted) *
+* Meaningful for Lmndfs = .true. only *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXLWMD = 2 )
+ PARAMETER ( ALMXXD = 0.4 D+00 )
+* How many times hbar/q_min to define the coherence condition:
+ PARAMETER ( DFLMTM = 1.0 D+00 )
+* s0 to be used in Regge expressions like [s/s0]^alpha etc:
+ PARAMETER ( UM0SQR = 1.0 D+00 )
+ PARAMETER ( ZMNDIF = 1.5 D+00 )
+* Triple pomeron (--> high mass --> two chain) mass cut-off for
+* diffraction
+ PARAMETER ( AMDXTP = 3.0 D+00 )
+ LOGICAL LRSDIF, LSCDIF, LMCLDF, LMNDFS, LMNDFT
+ COMMON / DIFSCT / SDFTOT , SDFPRT (2), SDFLWM (MXLWMD),
+ & SDFRSC (2,MXLWMD,2), SDFRES (MXLWMD,2), SDFNRS (MXLWMD,2),
+ & ZBDIFF (MXLWMD,2), ZBMXDF (MXLWMD,2), ZBRHLP (MXLWMD,2),
+ & ADFHLP (MXLWMD,2), AMDFRS (MXLWMD,2), GADFRS (MXLWMD,2),
+ & ATZMND (MXLWMD,2), ATZMXD (MXLWMD,2), ATZBDF (MXLWMD,2),
+ & AMDFMS (MXLWMD,2), ALMXDF (MXLWMD,2), ALDMDF (MXLWMD,2),
+ & EXDMDF (MXLWMD,2), PRDMDF (MXLWMD,2), B0SLDF (MXLWMD,2),
+ & BMAXDF (MXLWMD,2), SG0HDF (MXLWMD,2), SG0RDF (MXLWMD,2),
+ & BRLWMD (MXLWMD,NALLWP), AMDIFX, AMDFXS, BSLDIF, ACSGDF,
+ & BCSGDF, CCSGDF, B0PODF, APRDFF, EPSDFF, CRVESC, ZBDFF0,
+ & DFCOML, IJLWMD (MXLWMD,NALLWP), IJCHCO (NALLWP),
+ & IJDFPT (MXLWMD,2), MLWMDF (2), IFLGDF, IDIFPT, ILWMDF,
+ & NLWMDF, LRSDIF, LSCDIF, LMCLDF, LMNDFS, LMNDFT
+
--- /dev/null
+*$ CREATE DIMPAR.ADD
+*COPY DIMPAR
+* *
+*=== dimpar ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* DIMPAR: included in any routine *
+* *
+* Mxxrgn = maximum number of regions *
+* Mxxmdf = maximum number of media in Fluka *
+* Mxxmde = maximum number of media in Emf *
+* Mfstck = stack dimension in Fluka *
+* Mestck = stack dimension in Emf *
+* Mostck = stack dimension for optical photons *
+* Mxprsn = secondary stack dimension for resonance generator *
+* Mxpdpm = secondary stack dimension for DPM generators *
+* Mxoutu = maximum number of output units *
+* Nallwp = number of allowed particles *
+* Nelemx = number of maximum allowed elements of a compound *
+* Mpdpdx = number of particle types for which EM dE/dx pro- *
+* cesses (ion,pair,bremss) have to be computed *
+* Mxhttr = maximum number of (hit) target nucleons for a *
+* given collision generation *
+* Icomax = maximum number of materials for compounds (equal *
+* to the sum of the number of materials for every *
+* compound ) *
+* Ichmax = maximum number of harmonic oscillator levels for *
+* compounds (equal to the sum of the number of har- *
+* monic oscillator levels for every compound ) *
+* Nstbis = number of stable isotopes recorded in common iso- *
+* top *
+* Mxpabl = number of resonances inside Hadrin common blocks *
+* Idmaxp = number of particles/resonances defined in common *
+* part *
+* Idmxdc = number of particles/resonances decay channels *
+* defined in common decayc *
+* Ihypmx = maximum number of hyperons in a hypernucleus *
+* Mkbmx1 = dimension for KWB real spare array in Fluka Stack *
+* Mkbmx2 = dimension for KWB int. spare array in Fluka Stack *
+* *
+*----------------------------------------------------------------------*
+* *
+ PARAMETER ( MXXRGN =10000 )
+ PARAMETER ( MXXMDF = 210 )
+ PARAMETER ( MXXMDE = 202 )
+ PARAMETER ( MFSTCK = 2500 )
+ PARAMETER ( MESTCK = 100 )
+ PARAMETER ( MOSTCK = 2000 )
+ PARAMETER ( MXPRSN = 100 )
+ PARAMETER ( MXPDPM = 800 )
+ PARAMETER ( MXOUTU = 50 )
+ PARAMETER ( NALLWP = 64 )
+ PARAMETER ( NELEMX = 80 )
+ PARAMETER ( MPDPDX = 18 )
+ PARAMETER ( MXHTTR = 20 )
+ PARAMETER ( ICOMAX = 700 )
+ PARAMETER ( ICHMAX = ICOMAX + MXXMDF )
+ PARAMETER ( NSTBIS = 304 )
+* Till 3-aug-99:
+* PARAMETER ( MXPABL = 110 )
+ PARAMETER ( MXPABL = 120 )
+ PARAMETER ( IDMAXP = 450 )
+ PARAMETER ( IDMXDC = 2000 )
+ PARAMETER ( MXMCIN = 410 )
+ PARAMETER ( IHYPMX = 4 )
+* Till 19-jul-2000:
+* PARAMETER ( MKBMX1 = 9 )
+* PARAMETER ( MKBMX2 = 3 )
+ PARAMETER ( MKBMX1 = 9 )
+ PARAMETER ( MKBMX2 = 9 )
+
--- /dev/null
+*$ CREATE DORTSF.ADD
+*COPY DORTSF
+*
+*=== Dortsf ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* DO RoTation Statement Functions: *
+* *
+* Created on 31 january 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 31-mar-98 by Alfredo Ferrari *
+* *
+* Rotate ux,y,z from the original frame to a frame where the z *
+* axis has components (csph0 x snth0, snph0 x snth0, csth0) *
+* *
+*----------------------------------------------------------------------*
+*
+ DOXROT ( UX, UY, UZ, SNPH0, CSPH0, SNTH0, CSTH0 ) =
+ & UX * CSPH0 * CSTH0 + UY * SNPH0 * CSTH0 - UZ * SNTH0
+ DOYROT ( UX, UY, UZ, SNPH0, CSPH0, SNTH0, CSTH0 ) =
+ & - UX * SNPH0 + UY * CSPH0
+ DOZROT ( UX, UY, UZ, SNPH0, CSPH0, SNTH0, CSTH0 ) =
+ & UX * CSPH0 * SNTH0 + UY * SNPH0 * SNTH0 + UZ * CSTH0
+
--- /dev/null
+*$ CREATE DPDXCM.ADD
+*COPY DPDXCM
+*
+*=== dpdxcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: dpdxcm (DP/DX CoMmon) *
+* *
+* Created on 10 february 1991 by Alfredo Ferrari *
+* INFN - Milan *
+* *
+* Last change on 17-jun-97 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* FLUKA *
+* BLKDT1 *
+* DEDX *
+* DPDXIO *
+* DPDX *
+* HVBREM *
+* ZEROIN *
+* *
+* Avionp (m) = average ionization potential (eV) of medium m *
+* Ccster (m) = Sternheimer cbar parameter for medium m *
+* X0ster (m) = Sternheimer x0 parameter for medium m *
+* Xester (m) = Sternheimer x1 parameter for medium m *
+* Amster (m) = Sternheimer m parameter for medium m *
+* Aaster (m) = Sternheimer a parameter for medium m *
+* D0ster (m) = Sternheimer delta0 parameter for medium m *
+* Aviont (m) = auxiliary ionization potential of medium m *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MNDPDX = 50 )
+ PARAMETER ( RMDPDX = 1.15D+00 )
+ PARAMETER ( DPDXR1 = 0.15D+00 )
+ PARAMETER ( DPDXR2 = 0.70D+00 )
+ PARAMETER ( ERDEDX = 0.15D+00 * 0.15D+00 )
+ PARAMETER ( MDPDXH = 4 )
+* Toln10 = 2 x log (10)
+ PARAMETER ( TOLN10 = 4.605170185988091 D+00 )
+*
+ LOGICAL LDELTA, LPDETB, LETFUN
+ COMMON / DPDXCM / P0DPDX (MPDPDX,MXXMDF), P1DPDX (MPDPDX,MXXMDF),
+ & TMDPDX (MXXMDF), T0DPDX (MXXMDF),
+ & D0DPDX (MXXMDF), AVIONP (MXXMDF),
+ & RHORFL (MXXMDF), GASPFL (MXXMDF),
+ & CCSTER (MXXMDF), AMSTER (MXXMDF),
+ & XOSTER (MXXMDF), XESTER (MXXMDF),
+ & AASTER (MXXMDF), D0STER (MXXMDF),
+ & AVIONT (MXXMDF), ETDPDX (MXXMDF),
+ & ALMASS (MPDPDX),
+ & NBDPDX (MXXMDF), KDPDXT (MPDPDX,MXXMDF),
+ & LDELTA (MXXMDF), LPDETB (MXXMDF),
+ & IJDPDX (-6:NALLWP), LETFUN
+
--- /dev/null
+*$ CREATE ELEINP.ADD
+*COPY ELEINP
+*
+*=== Eleinp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common Eleinp for EMF (It supersedes the old Elecin from EGS4) *
+* *
+* Created on 19 april 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-apr-97 by Alfredo Ferrari *
+* *
+* IESIG0, IESIG1 etc are the starting locations for 0 address *
+* in blank common of the ESIG0 etc arrays *
+* *
+*----------------------------------------------------------------------*
+*
+* Maximum (fractional) difference for computing de/dx without using
+* the accurate integration loop (used for setting Nldedx)
+ PARAMETER ( FDDXMX = 0.15D+00 )
+* Maximum (fractional) difference for computing de/dx without using
+* the accurate integration loop (used for direct checking)
+ PARAMETER ( FDRXMX = 0.1 D+00 )
+ COMMON /ELEINP/ EKE0 (MXXMDE), EKE1 (MXXMDE),
+ & CMFP0 (MXXMDE), CMFP1 (MXXMDE),
+ & RANGE0 (MXXMDE), RANGE1 (MXXMDE),
+ & XR0 (MXXMDE), TEFF0 (MXXMDE),
+ & BLCC (MXXMDE), XCC (MXXMDE),
+ & BLCCRA (MXXMDE), EKRAT (MXXMDE),
+ & NLDEDX (2,MXXMDE),
+ & IESIG0 (MXXMDE), IESIG1 (MXXMDE),
+ & IPSIG0 (MXXMDE), IPSIG1 (MXXMDE),
+ & IEDDX0 (MXXMDE), IEDDX1 (MXXMDE),
+ & IPDDX0 (MXXMDE), IPDDX1 (MXXMDE),
+ & IEBR10 (MXXMDE), IEBR11 (MXXMDE),
+ & IPBR10 (MXXMDE), IPBR11 (MXXMDE),
+ & IPBR20 (MXXMDE), IPBR21 (MXXMDE),
+ & ITXSE0 (MXXMDE), ITXSE1 (MXXMDE),
+ & ITXSP0 (MXXMDE), ITXSP1 (MXXMDE)
+
--- /dev/null
+*$ CREATE ELFLCM.ADD
+*COPY ELFLCM
+*
+*=== elflcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Energy Loss FLuctuation CoMmon: *
+* *
+* Created on 23 november 1993 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 25-oct-95 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* DLFINI *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NMXEPX = 20 )
+ PARAMETER ( NMNEPX = -8 )
+ PARAMETER ( ELSFTY = ONEONE )
+ PARAMETER ( EPMXRT = HLFHLF )
+*
+ COMMON / ELFLCM / USMCUM (6,NMNEPX:NMXEPX), ELLEIX (6), ELLEIE(6),
+ & AVEPSF (NMNEPX:NMXEPX), SGEPSF (NMNEPX:NMXEPX),
+ & AEPSDL, SGEPDL, EPSFMX, EPSFCT, EPSFTP,
+ & ENDLDF, SNDLDF, NDLDFL, IEPFMX
+
--- /dev/null
+*$ CREATE ELFLST.ADD
+*COPY ELFLST
+*
+*=== elflst ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Energy Loss
+* Created on 26 january 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 26-jan-96 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+* SAFETY (ALN,EPS,ILVL) = ONEONE + TWOTWO / ( ALN + TWOTHI )
+* SSAFET (ALN,EPS,ILVL) = 1.5D+00 + THRTHR / ( ALN + TWOTHI )
+* SAFETY (ALN,EPS,ILVL) = 0.7D+00 + ( 13.0 D+00 - ILVL - ALN ) / EPS
+* SSAFET (ALN,EPS,ILVL) = 0.8D+00 + ( 13.43D+00 - ILVL - ALN ) / EPS
+ SAFETY (ALN,EPS,ILVL) = 0.5D+00 + ( 10.0 D+00 - ILVL - ALN ) / EPS
+ SSAFET (ALN,EPS,ILVL) = 0.6D+00 + ( 10.5 D+00 - ILVL - ALN ) / EPS
+
--- /dev/null
+*$ CREATE ELSCRT.ADD
+*COPY ELSCRT
+*
+*=== Elscrt ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* p/n ELaStic SCattering Run Time informations: *
+* *
+* Created on 15-september-1993 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 08-jul-97 by Alfredo Ferrari, INFN-Milan *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LRJJ0, LRJJ1, LCOUJ0, LCOUJ1, L2TNT4
+ COMMON / ELSCRT / R0ACT (0:1), R0ESCO (0:1), VESCOU (0:1), PROJ0,
+ & ALMJ0 , ALMJ1 , LRJJ0 , LRJJ1 , LCOUJ0, LCOUJ1,
+ & L2TNT4
+
--- /dev/null
+*$ CREATE ELSSCT.ADD
+*COPY ELSSCT
+*
+*=== elssct ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* p/n ELaStic SCaTtering informations: *
+* *
+* Created on 15-september-1993 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 16-sep-93 by Alfredo Ferrari, INFN-Milan *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( R0ELNE = 1.4 D+00 )
+ PARAMETER ( R0ELPI = 1.3 D+00 )
+ PARAMETER ( N0ELSC = 152 )
+ PARAMETER ( D0ELSC = 0.005D+00 )
+ PARAMETER ( ELSI0M = ZERZER )
+ PARAMETER ( ELSI0X = ( N0ELSC - 2 ) * D0ELSC )
+ PARAMETER ( N1ELSC = 153 )
+ PARAMETER ( D1ELSC = 0.0015D+00 )
+ PARAMETER ( ELSI1M = ELSI0X - D1ELSC )
+ PARAMETER ( ELSI1X = ( N1ELSC - 2 ) * D1ELSC + ELSI1M )
+ PARAMETER ( N2ELSC = 152 )
+ PARAMETER ( D2ELSC = 0.000166D+00 )
+ PARAMETER ( ELSI2M = ELSI1X - D2ELSC )
+ PARAMETER ( ELSI2X = ( N2ELSC - 1 ) * D2ELSC + ELSI2M )
+ PARAMETER ( ELSIMX = ONEONE - 0.01D+00 * ELSI2X )
+ COMMON / ELSSCT / R0ELSC (NALLWP), XELJ00 (N0ELSC),
+ & XELJ01 (N1ELSC), XELJ02 (N2ELSC),
+ & XELJ10 (N0ELSC), XELJ11 (N1ELSC),
+ & XELJ12 (N2ELSC), ANRMJ0, AJ0DMP,
+ & XJ0MAX
+
--- /dev/null
+*$ CREATE EMFBCM.ADD
+*COPY EMFBCM
+*
+*=== emfbcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* EMF Biasing CoMmon: *
+* *
+* Created on 27 august 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 28-aug-94 by Alfredo Ferrari *
+* *
+* *
+* Pthlpb = threshold for playing leading particle biasing for *
+* photons (E must be below the threshold for applying *
+* lpb) *
+* Ethlpb = threshold for playing leading particle biasing for *
+* electrons/positrons (E_k / E_tot + m_e must be below *
+* the threshold to apply lpb) *
+* Lpbemf = flag for leading particle biasing for EMF particles *
+* Let be Lpbemf represented as: *
+* 2^0xb0 + 2^1xb1 + 2^2xb2 + 2^3xb3 + 2^4xb4 + *
+* 2^5Xb5 + 2^6xb6 + 2^7xb7 + 2^8xb8 + 2^9xb9 *
+* then the meaning of the nine bits is the following: *
+* b0 = 1 --> lpb for brems and pair activated *
+* (old default) *
+* b1 = 1 --> lpb for bremsstrahlung activated *
+* b2 = 1 --> lpb for pair production activated *
+* b3 = 1 --> lpb for rest annihilation activated *
+* b4 = 1 --> lpb for Compton activated *
+* b5 = 1 --> lpb for Bhabha & Moller activated *
+* b6 = 1 --> lpb for Photoelectric activated *
+* b7 = 1 --> lpb for in flight annih. activated *
+* b8 = 1 --> not used *
+* b9 = 1 --> not used *
+* Please note that flag=1022 activates everything (values larger*
+* than 1022 are converted into 1022) *
+* *
+* Rlbemf (j,i) = reduction factor for interaction mean free *
+* paths for jth medium (i=1->e+/e-,i=2->phot) *
+* Ilbemf (j,i) = flag for interaction mean free path biasing *
+* for jth medium (i=1->e+/e-,i=2->phot) *
+* 0 : no biasing *
+* 1 : only Compt/bremss no RR of survived primary *
+* 2 : all interactions no RR of survived primary *
+* 11 : only Compt/bremss RR for survived primary *
+* 12 : all interactions RR for survived primary *
+* Nlbemf (j,i) = maximum generation number for which interaction*
+* mean free path biasing is performed for jth *
+* medium (i=1->e+/e-,i=2->phot) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NLPBBT = 9 )
+* *** The following must equal 2**(nlpbbt+1) - 2
+ PARAMETER ( MAXLPB = 1022 )
+ COMMON / EMFBCM / PTHLPB (MXXRGN) , ETHLPB (MXXRGN),
+ & RLBEMF (MXXMDF,2), LPBEMF (MXXRGN),
+ & ILBEMF (MXXMDF,2), NLBEMF (MXXMDF,2)
+
--- /dev/null
+*$ CREATE EMFCMP.ADD
+*COPY EMFCMP
+*
+*=== emfcmp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: emfcmp created on 31-10-90 by A. Ferrari *
+* & P. Sala *
+* Infn - Milan *
+* Last change on 28-apr-97 by Alfredo Ferrari, INFN-Milan *
+* *
+* included in the following routines: *
+* *
+* Ededxf *
+* Electr(new version) *
+* Emfin (new version) *
+* Emfret(new version) *
+* Formfe *
+* Pdedxf *
+* Photfl *
+* Photon(new version) *
+* Thnzse *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /EMFCMP/ contains information about composition of Emf media *
+* iclemf(med) = number of materials in a compound *
+* ic0emf(med) = starting position for 0 index for med medium *
+* in the following arrays *
+* zetemf(i) = atomic numbers of the constituents *
+* rhozef(i) = partial densities (sum = rho ) *
+* pzemf (i) = proportion by number (sum = 1) *
+* atwemf(i) = atomic weights *
+* aocmbe(i) = atomic densities in barn**-1 cm**-1 *
+* (Atoms Over Cm times Barn for Emf compounds) *
+* cnea13(i) = atomic weight^1/3 *
+* sumzme(i) = cumulative proportion of z(z+fudgem) (sum=1) *
+* metofl(i) = fluka medium corresponding to ith Emf medium *
+* jchemf(med) = number of harmonic oscillator levels in a *
+* compound *
+* jc0emf(med) = starting position for 0 index for med medium *
+* in the following arrays *
+* pliemf(med) = plasma energy for Emf med medium *
+* ehoemf(j) = jth - jc0emf(med) harmonic oscillator levels *
+* of Emf medium Med *
+* elnhem(j) = natural logarithm of ehoemf (j) *
+* fosemf(j) = oscillator strength for the jth - jc0emf(med) *
+* harmonic oscillator levels of Emf medium Med *
+* zhoemf(j) = atomic number of the element for the jth - *
+* jc0emf(med) harmonic oscillator level of Emf *
+* medium Med *
+* ahoemf(j) = atomic weights of the element for the jth - *
+* jc0emf(med) harmonic oscillator level of Emf *
+* medium Med *
+* eliemf(j) = l_i of the Sternheimer theory for the jth - *
+* jc0emf(med) harmonic oscillator level of Emf *
+* medium Med *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / EMFCMP / AOCMBE (ICOMAX), ZETEMF (ICOMAX),
+ & RHOZEF (ICOMAX), PZEMF (ICOMAX),
+ & ATWEMF (ICOMAX), CNEA13 (ICOMAX),
+ & SUMZME (ICOMAX), EHOEMF (ICHMAX),
+ & ELNHEM (ICHMAX), FOSEMF (ICHMAX),
+ & ZHOEMF (ICHMAX), AHOEMF (ICHMAX),
+ & ELIEMF (ICHMAX), PLIEMF (MXXMDE),
+ & IC0EMF (MXXMDE), ICLEMF (MXXMDE),
+ & JC0EMF (MXXMDE), JCHEMF (MXXMDE),
+ & METOFL (0:MXXMDE)
+
--- /dev/null
+*$ CREATE EMFSTK.ADD
+*COPY EMFSTK
+*
+*=== Emfstk ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common emfstk (EMF STacK) for EMF *
+* *
+* Last change on 08-oct-97 by Alfredo Ferrari *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( IDMEMF = MESTCK )
+ COMMON /EMFSTK/ E (IDMEMF), X (IDMEMF), Y (IDMEMF),
+ & Z (IDMEMF), U (IDMEMF), V (IDMEMF),
+ & W (IDMEMF), DNEAR (IDMEMF), UPOL (IDMEMF),
+ & VPOL (IDMEMF), WPOL (IDMEMF), USNRML (IDMEMF),
+ & VSNRML (IDMEMF), WSNRML (IDMEMF), WT (IDMEMF),
+ & AGEMF (IDMEMF), ESPARK (MKBMX1,IDMEMF),
+ & IESPAK (MKBMX2,IDMEMF), IQ (IDMEMF),
+ & IR (IDMEMF), IRLATT (IDMEMF), NHPEMF (IDMEMF),
+ & LLOEMF (IDMEMF), LOUEMF (IDMEMF), NP , NPSTRT
+
--- /dev/null
+*$ CREATE EMGTRN.ADD
+*COPY EMGTRN
+*
+*=== emgtrn ==========================================================*
+*
+*---------------------------------------------------------------------*
+* *
+* Module Emgtrn: *
+* *
+* Last change A. Ferrari 02-nov-1993 *
+* Created on 26-05-1991 by A. Ferrari, Infn-Milan *
+* *
+* Included in: *
+* BDNOPT *
+* ELECTR *
+* KASKAD *
+* MAGNEW *
+* MAGEAS *
+* MAGMOV *
+* MULEMF *
+* MULHAD *
+* *
+*---------------------------------------------------------------------*
+*
+ LOGICAL LMCSMG
+ COMMON / EMGTRN / UMCSMG, VMCSMG, WMCSMG, LMCSMG
+
--- /dev/null
+*$ CREATE EMSHO.ADD
+*COPY EMSHO
+* *
+*=== emsho ============================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* !!!! N E W V E R S I O N !!!! *
+* *
+* Created on 20 june 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 20-jan-95 by Alfredo Ferrari *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* emflo = .true. emf is used for em cascades *
+* emfhlo = .true. photohadrons are produced *
+* emfelo = .true. electrohadrons are produced *
+* limpre = .true. importance biassing at boundaries selected for *
+* the EM cascade (meaningful only if emflo = .true. ) *
+* lexpte = .true. exponential transformation selected for *
+* the EM cascade (meaningful only if emflo = .true. ) *
+* emfeth = cut-off transport energy of emf electrons *
+* emfbia = biasing factor for electro/photohadron production: *
+* the interaction are sampled using a mean free path *
+* equal to the actual one divided by emfbia *
+* emfpth = cut-off transport energy of emf photons *
+* emfhet = cut-off energy for electrohadron production *
+* emfhpt = cut-off energy for photohadron production *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL EMFLO, EMFHLO, EMFELO, LIMPRE, LEXPTE
+ COMMON /EMSHO/ EMFETH, EMFPTH, EMFHET, EMFHPT, EMFBIA, EMFLO,
+ & EMFHLO, EMFELO, LIMPRE, LEXPTE
+
--- /dev/null
+*$ CREATE EPCONT.ADD
+*COPY EPCONT
+*----------------------------------------------------------------------*
+* *
+* Common Epcont for EGS4 *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / EPCONT / EDEP , TSTEP , TUSTEP, USTEP , TVSTEP, VSTEP ,
+ & RHOF , EOLD , ENEW , EKE , ELKE , BETA2 ,
+ & GLE , TSCAT , IDISC , IROLD , IRNEW ,
+ & IAUSFL (0:26)
+
--- /dev/null
+*$ CREATE EPISOR.ADD
+*COPY EPISOR
+*
+*=== episor ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: episor *
+* *
+* version march 1996 by Alfredo Ferrari, INFN - Milan *
+* *
+* Included in the following subroutines or functions: *
+* *
+* EPILOG *
+* FLUKA *
+* SOURCE *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Whasou(1-12) = user variables *
+* Tkesum = total kinetic energy of the primaries of the *
+* user written source *
+* Lussrc = flag to inform that the user written source was *
+* used *
+* Sdusou = user character variable *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LUSSRC
+ CHARACTER SDUSOU*8
+ COMMON / EPISOR / WHASOU (12), TKESUM, LUSSRC
+ COMMON / CHEPSR / SDUSOU
+
--- /dev/null
+*$ CREATE ERRGE2.ADD
+*COPY ERRGE2
+*----------------------------------------------------------------------*
+* include file: errge2 copy created 5/7/86 by A.Ferrari*
+* Any change must be done also in module errgeo which differs only *
+* for ekin ---> encur ( this is included in Kaskad ) *
+* (A.Ferrari 5/7/89) *
+* changes: none *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /errgeo/ variables to handle geometry errors (only implemented *
+* in combinatorial geometry at present) *
+* ljomes = if .false. switches off geometry error messages, *
+* giving only a global summary (default: .true.) *
+* lmgnmv = if .true. the last step was performed using the *
+* tracking inside the magnetic field *
+* lephad = index to distinguish hadrons (value = 1) and *
+* leptons/photons (value = 2) *
+* ekin = current particle kinetic energy for transmission to *
+* geometry subroutines *
+* jomerr = counters of geometry errors *
+* endisc = accumulators of energy discarded because of geometry *
+* errors *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LJOMES, LMGNMV
+ COMMON / ERRGEO / EKIN, ENDISC(2), LJOMES, LMGNMV, LEPHAD,
+ & JOMERR(2)
+
--- /dev/null
+*$ CREATE ERRGEO.ADD
+*COPY ERRGEO
+*----------------------------------------------------------------------*
+* include file: errgeo copy created 27/11/86 by p*
+* Any change must be done also in module errge2 which differs only *
+* for encur ---> ekin and which is included in Kaskad *
+* (A.Ferrari 5/7/89) *
+* changes: none *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /errgeo/ variables to handle geometry errors (only implemented *
+* in combinatorial geometry at present) *
+* ljomes = if .false. switches off geometry error messages, *
+* giving only a global summary (default: .true.) *
+* lmgnmv = if .true. the last step was performed using the *
+* tracking inside the magnetic field *
+* lephad = index to distinguish hadrons (value = 1) and *
+* leptons/photons (value = 2) *
+* encur = current particle kinetic energy for transmission to *
+* geometry subroutines *
+* jomerr = counters of geometry errors *
+* endisc = accumulators of energy discarded because of geometry *
+* errors *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LJOMES, LMGNMV
+ COMMON / ERRGEO / ENCUR, ENDISC(2), LJOMES, LMGNMV, LEPHAD,
+ & JOMERR(2)
+
--- /dev/null
+*$ CREATE EVA0.ADD
+*COPY EVA0
+* *
+*=== eva0 =============================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Created on 05 july 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 04-nov-96 by Alfredo Ferrari *
+* *
+* Originally based on common EVA0 of Hetc, has been now deeply *
+* changed and progressively emptied *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / EVA0 / P0 (1001), P1 (1001), P2 (1001)
+
--- /dev/null
+*$ CREATE EVAPAR.ADD
+*COPY EVAPAR
+* *
+*=== evapar ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Created on 05 july 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 21-jul-00 by Alfredo Ferrari *
+* *
+* Originally based on common EVA0 of Hetc, has been now deeply *
+* changed and progressively emptied *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / EVAPAR / CAM2 (130), CAM3 (200), CAM4 (130), CAM5 (200),
+ & TDSTR (4,7), RMASS (297), ALPH (297), BET (297),
+ & APRIME(250), Y0EVAP, B0EVAP, IFISS , IB0EVP,
+ & JSIPFL, IMSSFR
+
--- /dev/null
+*$ CREATE EVAPRD.ADD
+*COPY EVAPRD
+* *
+*=== evaprd ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* New version of evaporation product common: *
+* *
+* Created on 04 november 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 24-mar-97 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BDEVAP *
+* BERTTP *
+* DRES *
+* ERUP *
+* EVEVAP *
+* EVPRTN *
+* FPROB *
+* FRMBRK *
+* *
+* Evaporation products: *
+* *
+* 0 = photon *
+* 1 = neutron *
+* 2 = proton *
+* 3 = deuteron *
+* 4 = triton *
+* 5 = 3-He *
+* 6 = alpha *
+* *
+* Variables: *
+* *
+* Flaevp(k) = mass number of the k_th type particle *
+* Flzevp(k) = atomic number of the k_th type particle *
+* Iaevpr(k) = mass number of the k_th type particle *
+* Izevpr(k) = atomic number of the k_th type particle *
+* Exmsev(k) = excess mass (MeV) (atomic or nuclear, depend- *
+* ing on Lncmss flag in common Frbkcm) of the *
+* k_th type particle *
+* Rhoevp(k) = Coulomb barrier radius factors of the k_th *
+* type particle *
+* Eprtev(i,k) = (kinetic) energy (MeV) of the i_th evaporated *
+* particle of the k_th type *
+* Pprtev(i,k) = Momentum (MeV/c) of the i_th evaporated *
+* particle of the k_th type *
+* Cosevp(j,i,k) = j_th (j=1,2,3) cosine of the i_th evaporated *
+* particle of the k_th type *
+* Hevsum = Total (kinetic) energy of evaporated heavies *
+* (heavies=Z>1) *
+* Nprtev(k) = number of evaporated particles of k_th type *
+* Ioprev(l) = id of the l_th evaporated particle of the *
+* present event (including fission etc) *
+* Npevap = Total number of evaporated particles for the *
+* present event (including fission etc) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NEVPRD = 6 )
+ COMMON / EVAPRD / FLAEVP (0:NEVPRD), FLZEVP (0:NEVPRD),
+ & EXMSEV (0:NEVPRD), RHOEVP (0:NEVPRD),
+ & EPRTEV (100,0:NEVPRD), PPRTEV (100,0:NEVPRD),
+ & COSEVP (3,100,0:NEVPRD), HEVSUM,
+ & IAEVPR (0:NEVPRD), IZEVPR (0:NEVPRD),
+ & NPRTEV (0:NEVPRD), IOPREV (250), NPEVAP
+
--- /dev/null
+*$ CREATE EVESEL.ADD
+*COPY EVESEL
+* *
+*=== evesel ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* include file: evesel copy created 26/11/86 by p*
+* changes: none *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* /evesel/ used to remember the event-creation method *
+* evecod = literal descriptions of the event-generation *
+* ieve = number of the event subroutines used *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 EVECOD
+ COMMON /EVESEL/ EVECOD(12), IEVE
+
--- /dev/null
+*$ CREATE EVTFLG.ADD
+*COPY EVTFLG
+*
+*=== Evtflg ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* EVenT FLaGs: *
+* *
+* Created on 19 may 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 13-aug-99 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LELEVT, LINEVT, LDECAY, LDLTRY, LPAIRP, LBRMSP, LANNRS,
+ & LANNFL, LPHOEL, LCMPTN, LCOHSC, LLENSC, LOPPSC
+*
+ COMMON / EVTFLG / LELEVT, LINEVT, LDECAY, LDLTRY, LPAIRP, LBRMSP,
+ & LANNRS, LANNFL, LPHOEL, LCMPTN, LCOHSC, LLENSC,
+ & LOPPSC, NTRCKS
+
--- /dev/null
+*$ CREATE FHEAVY.ADD
+*COPY FHEAVY
+*
+*=== fheavy ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: fheavy *
+* *
+* Created on 5 april 1990 by Alfredo Ferrari, INFN Milan *
+* *
+* Last change on 26-jul-97 by Alfredo Ferrari, INFN Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /fheavy/ is the storage for heavy secondaries created in the *
+* nuclear evaporation *
+* npheav = number of secondaries *
+* kheavy(ip) = type of the secondary ip *
+* ( 3 = deuteron, 4 = 3-H, 5 = 3-He, 6 = 4-He, *
+* 7-12 = "Heavy" fragment specified by Ibheav and *
+* Icheav ) *
+* cxheav(ip) = direction cosine of the secondary ip *
+* with respect to x-axis *
+* cyheav(ip) = direction cosine of the secondary ip *
+* with respect to y-axis *
+* czheav(ip) = direction cosine of the secondary ip *
+* with respect to z-axis *
+* tkheav(ip) = kinetic energy of secondary ip *
+* pheavy(ip) = momentum of the secondary ip *
+* wheavy(ip) = weight of the secondary ip *
+* agheav(ip) = "age" of the secondary ip with respect to the *
+* interaction time *
+* amheav(kp) = atomic masses of the twelve types of evaporated *
+* or fragmented or fissioned particles *
+* amnhea(kp) = nuclear masses of the twelve types of evaporated *
+* or fragmented or fissioned particles *
+* bhheav(jp,kp) = (nuclear) binding energy of the jp_th hyperon of *
+* the kp-type heavy particle *
+* anheav(kp) = name of the kp-type heavy particle *
+* icheav(kp) = charge of the kp-type heavy particle *
+* ibheav(kp) = mass number of the kp-type heavy particle *
+* imheav(kp) = isomeric state of the kp-type heavy particle *
+* ihheav(kp) = number of hyperons of the kp-type heavy particle *
+* khheav(jp,kp) = id of the jp_th hyperon of the kp-type heavy *
+* particle *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!! There is now the possibility to produce up to 6 "heavy" !!!! *
+* !!! fragments besides the residual nucleus recorded in !!!! *
+* !!! Resnuc: they are identified by indeces 7-12, of course !!!! *
+* !!! the corresponding physical properties (Z,A,m..) must be !!!! *
+* !!! updated every time they are produced !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXHEAV = 100 )
+ PARAMETER ( KXHEAV = 12 )
+ CHARACTER*8 ANHEAV
+ COMMON / FHEAVY / CXHEAV (MXHEAV), CYHEAV (MXHEAV),
+ & CZHEAV (MXHEAV), TKHEAV (MXHEAV),
+ & PHEAVY (MXHEAV), WHEAVY (MXHEAV),
+ & AGHEAV (MXHEAV), BHHEAV (IHYPMX,KXHEAV),
+ & AMHEAV (KXHEAV), AMNHEA (KXHEAV),
+ & KHEAVY (MXHEAV), ICHEAV (KXHEAV),
+ & IBHEAV (KXHEAV), IMHEAV (KXHEAV),
+ & IHHEAV (KXHEAV), KHHEAV (IHYPMX,KXHEAV), NPHEAV
+ COMMON / FHEAVC / ANHEAV (KXHEAV)
+
--- /dev/null
+*$ CREATE FINLSP.ADD
+*COPY FINLSP
+*
+*=== Finlsp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of FINLSP: *
+* *
+* W A R N I N G !!!! check also Finlsp2/3 modules for any change!!!*
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-oct-96 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Cxr(i) = X-cosine of the i_th produced particle *
+* Cyr(i) = Y-cosine of the i_th produced particle *
+* Czr(i) = Z-cosine of the i_th produced particle *
+* Elr(i) = Total energy of the i_th produced particle *
+* Plr(i) = Momentum of the i_th produced particle *
+* Itr(i) = Identity (part scheme) of the i_th produced particle *
+* Ir = Number of produced particles *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / FINLSP / CXR (MXPRSN), CYR (MXPRSN), CZR (MXPRSN),
+ & ELR (MXPRSN), PLR (MXPRSN), ITR (MXPRSN),
+ & IR
+
--- /dev/null
+*$ CREATE FINLSP2.ADD
+*COPY FINLSP2
+*
+*=== Finlsp2 ==========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of FINLSP2: *
+* *
+* W A R N I N G !!!! check also Finlsp/3 modules for any change!!! *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-oct-96 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Cxr(i) = X-cosine of the i_th produced particle *
+* Cyr(i) = Y-cosine of the i_th produced particle *
+* Czr(i) = Z-cosine of the i_th produced particle *
+* El(i) = Total energy of the i_th produced particle *
+* Pl(i) = Momentum of the i_th produced particle *
+* Itr(i) = Identity (part scheme) of the i_th produced particle *
+* Ir = Number of produced particles *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / FINLSP / CXR (MXPRSN), CYR (MXPRSN), CZR (MXPRSN),
+ & EL (MXPRSN), PL (MXPRSN), ITR (MXPRSN),
+ & IR
+
--- /dev/null
+*$ CREATE FINLSP3.ADD
+*COPY FINLSP3
+*
+*=== Finlsp3 ==========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of FINLSP3: *
+* *
+* W A R N I N G !!!! check also Finlsp/2 modules for any change!!! *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-oct-96 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Cxh(i) = X-cosine of the i_th produced particle *
+* Cyh(i) = Y-cosine of the i_th produced particle *
+* Czh(i) = Z-cosine of the i_th produced particle *
+* Elh(i) = Total energy of the i_th produced particle *
+* Plh(i) = Momentum of the i_th produced particle *
+* Ith(i) = Identity (part scheme) of the i_th produced particle *
+* Ih = Number of produced particles *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / FINLSP / CXH (MXPRSN), CYH (MXPRSN), CZH (MXPRSN),
+ & ELH (MXPRSN), PLH (MXPRSN), ITH (MXPRSN),
+ & IH
+
--- /dev/null
+*$ CREATE FINPAR.ADD
+*COPY FINPAR
+*
+*=== Finpar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of Finpar: *
+* *
+* W A R N I N G !!!! HEP --> HEF on 28-nov-97 and Finpar2 module *
+* eliminated *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 06-dec-97 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Pxf(i) = X-component of the momentum of the i_th produced *
+* particle *
+* Pyf(i) = Y-component of the momentum of the i_th produced *
+* particle *
+* Pzf(i) = Z-component of the momentum of the i_th produced *
+* particle *
+* Hef(i) = Total energy of the i_th produced particle *
+* Amf(i) = Mass of the i_th produced particle *
+* Ichf(i) = Charge of the i_th produced particle *
+* Ibarf(i) = Baryon number of the i_th produced particle *
+* Nref(i) = Identity (part scheme) of the i_th produced particle *
+* Ipzf(i) = Auxiliary array *
+* Noqrk(i) = Array counting the number of (anti)quark of the ori- *
+* ginal chain ends making up this hadron *
+* Ichnf(3,i) = Array containing additional informations about prod- *
+* uction verteces, ranking etc *
+* Ichnf(1,i) = Ivx + 100 * Irank *
+* Ivx = Bamjet production vertex id, or *
+* -10 for a parjet, *
+* 10+Ivx for the last normally cre- *
+* ated hadron used together with*
+* the residual quark hadron of *
+* a q-qbar, qbar-qbarqbar or *
+* q-qq final jet joining *
+* +30 for the last antibaryon of a *
+* final qbar-qbarqbar jet join- *
+* ing *
+* +40 for the last meson of a final *
+* q-qbar jet joining *
+* +50 for the last baryon of a final*
+* q-qq jet joining *
+* +60 for both mesons of a final *
+* qq-qbarqbar jet joining *
+* Irank = rank order of production in the *
+* corresponding jet *
+* Ichnf(2,i) = Noqrk + 10 x Idcyg + 1000 x Idori *
+* Noqrk = Number of chain end quarks in *
+* the mother resonance *
+* Idcyg = decay generation (1,2,...), if *
+* any *
+* Idori = id of the mother resonance, if *
+* any *
+* Ichnf(3,i) = Nresn *
+* Nresn = number of the mother resonance *
+* recorded in Cmsres *
+* Anf(i) = Literal name of the i_th produced particle *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANF
+ COMMON / FINPAR / PXF (MXPDPM), PYF (MXPDPM), PZF (MXPDPM),
+ & HEF (MXPDPM), AMF (MXPDPM), ICHF (MXPDPM),
+ & IBARF (MXPDPM), NREF (MXPDPM), IPZF (MXPDPM),
+ & NOQRK (MXPDPM), ICHNF (3,MXPDPM)
+ COMMON / CHFNPR / ANF (MXPDPM)
+
--- /dev/null
+*$ CREATE FINUC.ADD
+*COPY FINUC
+*
+*=== finuc ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: Finuc (new version of old Finuc of FLUKA86) *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! S E E A L S O I N C L U D E F I L E !!!! *
+* !!!! F I N U C 2 !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* Created on 20 january 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 26-jul-97 by Alfredo Ferrari *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /finuc/ is the storage for secondaries created in event *
+* np = number of secondaries *
+* kpart (ip) = type of the secondary ip *
+* cxr (ip) = direction cosine of the secondary ip *
+* with respect to x-axis *
+* cyr (ip) = direction cosine of the secondary ip *
+* with respect to y-axis *
+* czr (ip) = direction cosine of the secondary ip *
+* with respect to z-axis *
+* cxrpol (ip) = direction cosine of the secondary ip polarization *
+* with respect to x-axis *
+* cyrpol (ip) = direction cosine of the secondary ip polarization *
+* with respect to y-axis *
+* czrpol (ip) = direction cosine of the secondary ip polarization *
+* with respect to z-axis *
+* tki (ip) = kinetic energy of secondary ip *
+* plr (ip) = momentum of the secondary ip *
+* wei (ip) = weight of the secondary ip *
+* agesec (ip) = "age" of the secondary ip with respect to the *
+* interaction time *
+* tv = excitation energy *
+* tvcms = actual excitation energy of the residual nucleus *
+* tvrecl = recoil kinetic energy of the residual nucleus *
+* tvheav = recoil kinetic energies of heavy (2-H, 3-H, 3-He, *
+* 4-He) fragments after evaporation *
+* tvbind = approximate energy wasted in nuclear binding *
+* effects (not yet operational) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER (MXP=999)
+*
+ COMMON / FINUC / CXR (MXP), CYR (MXP), CZR (MXP),
+ & CXRPOL (MXP), CYRPOL (MXP), CZRPOL (MXP),
+ & TKI (MXP), PLR (MXP), WEI (MXP),
+ & AGESEC (MXP), TV, TVCMS, TVRECL, TVHEAV, TVBIND,
+ & NP0, NP, KPART (MXP)
+
--- /dev/null
+*$ CREATE FINUC2.ADD
+*COPY FINUC2
+*
+*=== finuc2 ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: Finuc2 (new version of old Finuc2 of FLUKA86) *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! S E E A L S O I N C L U D E F I L E !!!! *
+* !!!! F I N U C !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* Created on 20 january 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 26-jul-97 by Alfredo Ferrari *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /finuc/ is the storage for secondaries created in event *
+* irn = number of secondaries *
+* itrn (ip) = type of the secondary ip *
+* cxrn (ip) = direction cosine of the secondary ip *
+* with respect to x-axis *
+* cyrn (ip) = direction cosine of the secondary ip *
+* with respect to y-axis *
+* czrn (ip) = direction cosine of the secondary ip *
+* with respect to z-axis *
+* cxrpol (ip) = direction cosine of the secondary ip polarization *
+* with respect to x-axis *
+* cyrpol (ip) = direction cosine of the secondary ip polarization *
+* with respect to y-axis *
+* czrpol (ip) = direction cosine of the secondary ip polarization *
+* with respect to z-axis *
+* elr (ip) = kinetic energy of secondary ip *
+* plr (ip) = momentum of the secondary ip *
+* wei (ip) = weight of the secondary ip *
+* agesec (ip) = "age" of the secondary ip with respect to the *
+* interaction time *
+* tv = excitation energy *
+* tvcms = actual excitation energy of the residual nucleus *
+* tvrecl = recoil kinetic energy of the residual nucleus *
+* tvheav = recoil kinetic energies of heavy (2-H, 3-H, 3-He, *
+* 4-He) fragments after evaporation *
+* tvbind = approximate energy wasted in nuclear binding *
+* effects (not yet operational) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER (MXP=999)
+*
+ COMMON / FINUC / CXRN (MXP), CYRN (MXP), CZRN (MXP),
+ & CXRPOL (MXP), CYRPOL (MXP), CZRPOL (MXP),
+ & ELR (MXP), PLR (MXP), WEI (MXP),
+ & AGESEC (MXP), TV, TVCMS, TVRECL, TVHEAV, TVBIND,
+ & NP0, IRN, ITRN (MXP)
+
--- /dev/null
+*$ CREATE FLUOXR.ADD
+*COPY FLUOXR
+*
+*=== fluoxr ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file Fluoxr: created on 4-october-1990 by A. Ferrari *
+* INFN - Milan *
+* Description of the variables (not complete): *
+* *
+* Brrlxl(ix,il,iz) = Relative branching ratios of the *
+* ix-th Lil line (il=1-3, LI,LII,LIII) *
+* Brrkxl(ix,iz) = Relative branching ratios of the *
+* ix-th K line *
+* Flyldk(iz) = Fluorescence yield for the K-shell *
+* of the iz-th element *
+* Flyldl(il,iz) = Fluorescence yield for the il sub- *
+* shell of the L-shell (LI,LII,LII) *
+* of the iz-th element *
+* Ishell(id) = Main shell (K,L,M,N,O) of the id-th *
+* level *
+* id=1 --> K *
+* id=2 - 4 --> L *
+* id=5 - 9 --> M *
+* id=10-16 --> N *
+* id=17-20 --> O *
+* Ktoxtr(ix) = end level index for the ix-th X *
+* transitions from the K shell *
+* Ltoxtr(ix,il) = end level index for the ix-th X *
+* transitions from Lil subshell *
+* Nshell(is) = Number of sub-shell for the is-th *
+* shell (is=1-5 --> K,L,M,N,O) *
+* Nflndx(3,iz) = Starting level number for the iz ele-*
+* ment in the global numbering (for the*
+* 0th level,Nlfndx(3,iz)-Nflndx(3,iz-1)*
+* is the total number of tabulated *
+* levels of the iz element) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( EHYDRO = 1.3605697953179906 D-05 )
+ PARAMETER ( AMELEC = GEVMEV * AMELCT )
+ PARAMETER ( SIGTHO = 6.6524615280813428 D-01 )
+* PARAMETER ( TWOPIP = TWOTWO * PIPIPI )
+* This is 4 sqrt(2)
+ PARAMETER ( TWO3O2 = 5.656854249492380 D+00 )
+* PARAMETER ( PHCONS = TWO3O2 * SIGTHO * FSCTO4 )
+ PARAMETER ( PHCONS = 1.0671336148164197D-08 )
+ PARAMETER ( PHCON2 = 64.D+00 * SIGTHO / FSCTO3 )
+* PARAMETER ( PHCON2 = XXXXXXXXXXXXXXX )
+* This is 2 x pi x exp (-4)
+ PARAMETER ( PHEDG0 = 0.1150805531573017 D+00 )
+* This is 3 / ( 8 x sqrt (2) )
+ PARAMETER ( SAUCST = 0.2651650429449553 D+00 )
+*
+ COMMON / FLUOXR / ZPHOTO (920) , AZPHOT (306) , BZPHOT (306),
+ & ZIEDGE (1329) , EIEDGE (306) , HALLCR (100),
+ & BRRLXL (4,3,100), BRRKXL (8,100), FLYLDK (100),
+ & FLYLDL (3,100) , SGPHPA (920) ,
+ & KTOXTR (8) , LTOXTR (4,3) ,
+ & NFLNDX (3,0:100), ISHELL (0:20) , NSHELL (0:5),
+ & IDMIN (100)
+ COMMON / CHFLUO / CHKXLN (8), CHLXLN (4,3)
+ CHARACTER*8 CHKXLN, CHLXLN
+
--- /dev/null
+*$ CREATE FLUXES.ADD
+*COPY FLUXES
+*
+*=== Fluxes ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Fluxes version for FLUKA9x: it is now almost useless since all *
+* fluxesm... scoring does not work inside FLUKA9x and has been *
+* removed *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* Lfluw3 = if Lfluw3.eq.true fluxes are multiplied by the Fluscw *
+* function when scored *
+* Lfluwd = if Lfluwd.eq.true a call is generated to the user sub- *
+* routine fldscp when scoring distributed along the track *
+* fluxes for possible position changes. This is done befo-*
+* re any user requested rotation *
+* Lbnflx = if Lbnflx.eq.true fluxes at boundaries have to be *
+* scored or by Iflux.gt.2 or by boundary crossing *
+* estimators both usual or user defined *
+* (A. Ferrari 1-July-89) *
+* Lbxflx = if Lbxflx.eq.true fluxes at boundaries have to be *
+* scored by boundary crossing *
+* estimators both usual or user defined *
+* (A. Ferrari 1-July-89) *
+* Ltrflx = if Ltrflx.eq.true track length has to be *
+* scored or by user defined tracklength or by usual *
+* estimators (A. Ferrari 17-May-90) *
+* Lclflx = if Lclflx.eq.true collision density has to be *
+* scored or by user defined or by usual *
+* estimators (A. Ferrari 17-May-90) *
+* Lfluxs = if Lfluxs.eq.true fluxes at boundaries or tracklength *
+* or collision density have to be scored *
+* (A. Ferrari 17-May-90) *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LFLUW3, LFLUWD, LBNFLX, LBXFLX, LTRFLX, LCLFLX, LFLUXS
+ COMMON / FLUXES / LFLUW3, LFLUWD, LBNFLX, LBXFLX, LTRFLX, LCLFLX,
+ & LFLUXS
+
--- /dev/null
+*$ CREATE FRBKCM.ADD
+*COPY FRBKCM
+*
+*=== frbkcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* FeRmi BreaKup CoMmon: *
+* *
+* Created on 10 february 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 17-aug-00 by Alfredo Ferrari *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!! !!!! *
+* !!!! Energy, momentum and mass units of the Fermi !!!! *
+* !!!! break-up algorithm are MeV, MeV/c, and MeV/c^2 !!!! *
+* !!!! respectively !!!! *
+* !!!! !!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* Lfrmbk = Logical flag for activating the Fermi Break-Up *
+* algorithm *
+* Amufbk = Atomic/Nuclear mass unit for the Fermi breakup *
+* algorithm (it must be consistent with Lncmss *
+* and the recorded mas excesses) *
+* Lncmss = Logical flag for nuclear (.true.) or atomic *
+* masses *
+* Eexfbk (j) = excitation energy (MeV) of the jth particle *
+* stable state *
+* Gamfbk (j) = width (MeV) of the jth particle stable state *
+* (Gamma tau = hbar) *
+* Amfrbk (j) = total atomic/nuclear mass of the jth particle *
+* stable state *
+* Exmxfb = Maximum excess mass to be used to build the *
+* break up channels *
+* Nbufbk = The above restriction is used only if the total*
+* estimated number of break up channels is larger*
+* than Nbufbk *
+* R0frbk = R0 for the interaction volume *
+* R0cfbk = R0 for the Coulomb potential among fragments *
+* C1cfbk = C1 for the Coulomb potential among fragments *
+* C2cfbk = C2 for the Coulomb potential among fragments *
+* Ifrbkn (j) = neutron number of the jth particle stable state*
+* Ifrbkz (j) = atomic number of the jth particle stable state*
+* Ifbksp (j) = spin (in hbar/2 unit) of the jth particle *
+* stable state *
+* Ifbkpr (j) = parity of the jth particle stable state *
+* Ifbkst (j) = stability index of the jth particle stable *
+* state *
+* Ipsind (in,iz,1) = starting index of the particle stable states *
+* with N=in and Z=iz *
+* Ipsind (in,iz,2) = last index of the particle stable states with *
+* N=in and Z=iz *
+* Jpsind (ia) = last index of the particle stable states with *
+* A=ia *
+* Exfrbk (i) = total mass excess of the ith break-up *
+* Sdmfbk (i) = (global) spin, degeneracy and mass factor *
+* of the ith break-up *
+* Coufbk (i) = (global) Coulomb energy of the ith break-up *
+* Cenfbk (i) = (global) centrifugal barrier of the ith break *
+* -up (to be multiplied by l(l+1) ) *
+* Ifbcha (1,i) = N of the ith break up combination *
+* Ifbcha (2,i) = Z of the ith break up combination *
+* Ifbcha (3,i) = first particle to be emitted *
+* Ifbcha (4,i) = second particle to be emitted (if negative it *
+* is a combination of particles of index=| |) *
+* Ifbcha (5,i) = (global) multiplicity of the ith break-up *
+* Ifbcha (6,i) = Minimum, (2)Jmin, and Maximum, (2)Jmax, angu- *
+* lar momentum (2)J (in hbar/2 units) (for L=0 *
+* orbital momentum) of the ith break-up, encoded *
+* as: (2)Jmin + 1000 x (2)Jmax *
+* Ifbcha (7,i) = Multiplicity of angular momentum J encoded as: *
+* m(Jmin) IB^0 + m(Jmin+1) IB^1 + .... *
+* .... + m(Jmax-1) IB^(Jmax-Jmin-1) *
+* + m(Jmax) IB^(Jmax-Jmin) *
+* J total multiplicity = (2J+1) x m(J) *
+* where the base IB is given by the parameter *
+* IBFRBK, if Jmax-Jmin > Jpwfbx an underflow *
+* would result, therefore the remaining part is *
+* endcoded into: *
+* Ifbcha (8,i) = Multiplicity of angular momentum J, 2nd part *
+* .... + m(Jmax-1) IB^(Jmax-Jmin-Jpwfbx-2) *
+* + m(Jmax) IB^(Jmax-Jmin-Jpwfbx-1) *
+* The allowed maximum number of different J *
+* values (Jmax-Jmin+1) is so 2*(Jpwfbx+1) *
+* Ifbcha (9,i) = Parity/(-1)^L (L orbital momentum) of the ith *
+* break-up *
+* Ifbind (in,iz,1) = starting index of the break up combinations *
+* with N=in and Z=iz *
+* Ifbind (in,iz,2) = last index of the break up combinations with *
+* N=in and Z=iz *
+* Jfbind (ia) = last index of the break up combinations with *
+* A=ia *
+* Iposst = total number of possible particle stable states*
+* Iposfb = total number of possible break up combinations *
+* Ifbstf = flag for level of inclusion of stable levels *
+* Ifbstf = i0 + i1 x 100 *
+* Ifbpsf = flag for parity-spin effects: *
+* -1 : no account *
+* 0 : L=0 fully accounted for, channels with L>=1 *
+* suppressed by FRBKLS^L (in practice they are *
+* retained only if no L=0 channel is available)*
+* 0 < L': reasonable centrifugal barrier account up *
+* to orbital momentum L=L', as above for L>L' *
+* Frbkls = suppression factor for L>Lmax to be cosidered *
+* for orbital momentum barriers *
+* Ifbfrb = (possible) forbidden "particle stable" state *
+* *
+*----------------------------------------------------------------------*
+*
+* Maximum number of fragments to be emitted:
+ PARAMETER ( MXFFBK = 6 )
+ PARAMETER ( MXZFBK = 10 )
+ PARAMETER ( MXNFBK = 12 )
+ PARAMETER ( MXAFBK = 16 )
+ PARAMETER ( NXZFBK = MXZFBK + MXFFBK / 3 )
+ PARAMETER ( NXNFBK = MXNFBK + MXFFBK / 3 )
+ PARAMETER ( NXAFBK = MXAFBK + 1 )
+ PARAMETER ( MXPSST = 400 )
+ PARAMETER ( MXPSFB = 41000 )
+* Base for J multiplicity encoding:
+ PARAMETER ( IBFRBK = 73 )
+* Maximum Ibfrbk exponent to avoid overflow of I*4(roughly at 2.1x10^9)
+* it must be (Ibfrbk-1) + (Ibfrbk-1)*Ibfrbk + (Ibfrbk-1)*Ibfrbk^2 + ...
+* ... + (Ibfrbk-1)*Ibfrbk^Jpwfbx < 2100000000,
+* --> Ibfrbk^(Jpwfbx+1) < 2100000000
+ PARAMETER ( JPWFBX = 4 )
+ LOGICAL LFRMBK, LNCMSS
+ COMMON / FRBKCM / AMUFBK, EEXFBK (MXPSST), AMFRBK (MXPSST),
+ & GAMFBK (MXPSST), EXFRBK (MXPSFB), SDMFBK (MXPSFB),
+ & COUFBK (MXPSFB), CENFBK (MXPSFB), EXMXFB, R0FRBK,
+ & R0CFBK, C1CFBK, C2CFBK, FRBKLS,
+ & IFRBKN (MXPSST), IFRBKZ (MXPSST),
+ & IFBKSP (MXPSST), IFBKPR (MXPSST), IFBKST (MXPSST),
+ & IPSIND (0:MXNFBK,0:MXZFBK,2), JPSIND (0:NXAFBK),
+ & IFBIND (0:NXNFBK,0:NXZFBK,2), JFBIND (0:NXAFBK),
+ & IFBCHA (9,MXPSFB), IPOSST, IPOSFB, IFBSTF, IFBPSF,
+ & IFBFRB, NBUFBK, LFRMBK, LNCMSS
+
--- /dev/null
+*$ CREATE FRTLCM.ADD
+*COPY FRTLCM
+*
+*=== Frtlcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* FeRmi motion high momentum TaiL CoMmon: *
+* *
+* Created on 18 january 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 18-jan-97 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+* k_fermi (fm^-1) for infinite symmetric nuclear matter
+* with rho0=0.1678 fm^-3 ( k_f=(3/2 pi^2 rho0)^1/3 )
+ PARAMETER ( AKFRM0 = 1.35487770196973D+00 )
+ PARAMETER ( A100LW = 0.859 D+00 * AKFRM0 * AKFRM0 * AKFRM0 )
+ PARAMETER ( A100LG = 0.432 D+00 * AKFRM0 * AKFRM0 * AKFRM0 )
+ PARAMETER ( B100LW = 0.043 D+00 * AKFRM0 * AKFRM0 )
+* Sqrt (b100lw):
+ PARAMETER ( SQB1LW = 0.207364413533277D+00 * AKFRM0 )
+ PARAMETER ( B100LG = 0.97 D+00 * AKFRM0 * AKFRM0 )
+* Sqrt (b100lg):
+ PARAMETER ( SQB1LG = 0.984885780179610D+00 * AKFRM0 )
+ PARAMETER ( C100LW =-0.839 D+00 * AKFRM0 * AKFRM0 * AKFRM0 )
+ PARAMETER ( C100LG = 0.0313 D+00 * AKFRM0 * AKFRM0 * AKFRM0 )
+ PARAMETER ( D100LW = 0.12 D+00 * AKFRM0 * AKFRM0 )
+* Sqrt (d100lw):
+ PARAMETER ( SQD1LW = 0.346410161513775D+00 * AKFRM0 )
+ PARAMETER ( D100LG = 0.22 D+00 * AKFRM0 * AKFRM0 )
+* Sqrt (d100lg):
+ PARAMETER ( SQD1LG = 0.469041575982343D+00 * AKFRM0 )
+
--- /dev/null
+*$ CREATE FXTMX.ADD
+*COPY FXTMX
+*----------------------------------------------------------------------*
+* *
+* Common Fxtmx *
+* Common Fxtmx is used for the fractional fixed step option *
+* Any change in common Fxtmx must be done also in the module Media *
+* of Egsadd!!!!!!!!!!!!!!!! *
+* Mxxmde = maximum number of media in Emf *
+* Estepe = maximum fractional energy loss allowed for the gi- *
+* ven medium *
+* Lpemdt = flag for printing dE/dx and Tmxs tabulations *
+* Ltmin = logical array to flag whether or not has the step *
+* to be larger or the equal than the minimum allowed *
+* by Moliere's theory, regardless of the energy loss: *
+* default is .true. *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LTMIN, LFXTMX, LPEMDT
+ COMMON /FXTMX/ ESTEPE (MXXMDE), ISTPE (MXXMDE), LTMIN (MXXMDE),
+ & LPEMDT (MXXMDE), LFXTMX
+
--- /dev/null
+*$ CREATE GAMRED.ADD
+*COPY GAMRED
+*
+*=== gamred ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* This is the old GAMRED common of Hadrin, extracted and put *
+* into an include file *
+* *
+* Created on 17 may 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 17-may-95 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* AMGA *
+* DECAY *
+* HADRIN *
+* HADRIV *
+* TCHOIC *
+* THREPD *
+* TWOPAD *
+* TWOPAR *
+* XLAMB *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / GAMRED / REDU, AMO, AMM (15)
+
--- /dev/null
+*$ CREATE GDRDCM.ADD
+*COPY GDRDCM
+*
+*=== gdrdcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* *
+* Created on 16 august 2000 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 23-sep-00 by Alfredo Ferrari *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* Egdrbn = energy bin width in data table *
+* Egdrth(is) = threshold energy for isotope is *
+* Ngdrpn(is) = number of table points for isotope is *
+* Igdrpn(is) = pointer to the first table point for isotope is *
+* Lgdrld = logical flag for using the old GDR routine *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LGDRLD
+ PARAMETER ( EGDRBN = 0.2D+00 )
+ COMMON / GDRDCM / EGDRTH (NSTBIS), NGDRPN (NSTBIS),
+ & IGDRPN (NSTBIS), LGDRLD
+
--- /dev/null
+*$ CREATE GENTHR.ADD
+*COPY GENTHR
+*
+*=== genthr ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* hadronic interaction GENerator THResholds *
+* *
+* Created on 20 april 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 21-sep-00 by Alfredo Ferrari *
+* *
+* dpjhdt = DPmJet HaDron interaction Threshold (kin. en.) *
+* dpjiot = DPmJet IOn interaction Threshold (kin. en./n) *
+* peanct = PEAnut NuCleon interaction Threshold (kin. en.) *
+* peapit = PEAnut PIon interaction Threshold (kin. en.) *
+* peakat = PEAnut KAon interaction Threshold (kin. en.) *
+* peakbt = PEAnut KaonBar interaction Threshold (kin. en.) *
+* peaant = PEAnut Anti-Nucleon inter. Threshold (kin. en.) *
+* peahyt = PEAnut HYperon interaction Threshold (kin. en.) *
+* peaaht = PEAnut Anti-Hyperon inter. Threshold (kin. en.) *
+* pldnct = Peanut (oLD version) NuCleon interaction Thresh. *
+* phaswt = switching momentum from h-A resonance model *
+* to the h-A DPM model for those particles supported*
+* by the resonance model *
+* phasmr = smearing +/-DeltaP for switching from the h-A *
+* resonance model to the h-A DPM model for those *
+* particles supported by the resonance model *
+* phnsmr = smearing +/-DeltaP for switching from the h-N *
+* resonance model to the h-N DPM model for those *
+* particles supported by the resonance model *
+* pthrsh = momentum threshold for switching from the reso- *
+* nance to the DPM model for h-h interactions *
+* pthdff = momentum threshold for diffractive events *
+* ijnucr = flags for particles supported by the resonance *
+* model *
+* lhasmr = flag for smearing the transition between the *
+* h-A resonance model and the h-A DPM model *
+* lhnsmr = flag for smearing the transition between the *
+* h-N resonance model and the h-N DPM model *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / GENTHR / PEANCT, PEAPIT, PEAKAT, PEAKBT, PEAANT, PEAHYT,
+ & PEAAHT, PLDNCT, PHASWT, PHASMR, PHNSMR, DPJHDT,
+ & DPJIOT, PTHRSH (NALLWP), PTHDFF (NALLWP),
+ & IJNUCR (NALLWP), LHASMR, LHNSMR
+ LOGICAL LHASMR, LHNSMR
+
--- /dev/null
+*$ CREATE GEOSEL.ADD
+*COPY GEOSEL
+*
+*=== geosel ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version from Alfredo Ferrari: *
+* *
+* Created on 27 april 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 27-apr-98 by Alfredo Ferrari *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /geosel/, /geslch/ used to remember the geometry *
+* geocod = literal descriptions of the geometries *
+* igeo = number of the geometry type used (useless now) *
+* ipri = >=1 print out the calls to geofar, skipping the first*
+* ipri lines *
+* linegm = number of lines already printed *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER * 8 GEOCOD
+*
+ COMMON / GEOSEL / IGEO, IPRI, LINEGM
+ COMMON / GESLCH / GEOCOD (10)
+
--- /dev/null
+*$ CREATE H1PWXS.ADD
+*COPY H1PWXS
+*
+*=== H1pwxs ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* H-1 Point-Wise XSec common: *
+* *
+* Created on 27 may 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 02-jun-97 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Ekei1h (i) = initial kinetic energy (GeV) of the i_th *
+* tabulation range *
+* Elni1h (i) = natural logarithm of the initial kinetic *
+* energy (GeV) of the i_th tabulation range *
+* Dlni1h (i) = constant difference in the natural logarithm *
+* of the initial kinetic energy (GeV) of the *
+* i_th tabulation range *
+* Seln1h (j) = natural logarithm of the n 1-H elastic cross *
+* section at the j_th energy point *
+* Sabn1h (j) = natural logarithm of the n 1-H absorption *
+* cross section at the j_th energy point *
+* Clg21h (k,l) = l_th Legendre coefficient for the n 1-H *
+* elastic scattering angular distribution *
+* at the k_th energy point of the 2nd tabulation*
+* range *
+* Clg31h (k,l) = l_th Legendre coefficient for the n 1-H *
+* elastic scattering angular distribution *
+* at the k_th energy point of the 3rd tabulation*
+* range *
+* Npoi1h (i) = number of energy points of the i_th tabulation*
+* range *
+* Nlgi1h (i) = number of Legendre coeff. of the i_th tabula- *
+* tion range *
+* Nene1h = number of tabulation energy ranges *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / H1PWXS / EKEI1H (3) , ELNI1H (3) , DLNI1H (3) ,
+ & SELN1H (230) , SABN1H (230), CLG21H (101,6),
+ & CLG31H (30,14), NPOI1H (3) , NLGI1H (3) ,
+ & NENE1H
+
--- /dev/null
+*$ CREATE HADFLG.ADD
+*COPY HADFLG
+*
+*=== hadflg ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 13 september 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-sep-00 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* Blkdt4 *
+* Eventv *
+* Ferhav *
+* Hadriv *
+* Hdncin *
+* Hhflev *
+* Hncnev *
+* Nucdcy *
+* Nuncln *
+* Phycrd *
+* Rchanv *
+* Twopar *
+* *
+* Lnwhdr = flag for using the (still on development)*
+* new Hadriv *
+* Ielflg = Flag to control the elastic channel *
+* in Hadriv: *
+* -1: elastic channel reduced according *
+* to a rough Pauli blocking factor *
+* 0: elastic channel fully accounted for *
+* +1: elastic channel suppressed *
+* Icxflg = Flag to control the charge exchange *
+* channel in Hadriv: *
+* -1: ch. ex. channel reduced according *
+* to a rough Pauli blocking factor *
+* 0: ch. ex. channel fully accounted for *
+* +1: ch. ex. channel suppressed *
+* Istflg = Flag to control the strangeness exchange *
+* channel in Hadriv: *
+* -1: st. ex. channel reduced according *
+* to a rough Pauli blocking factor *
+* 0: st. ex. channel fully accounted for *
+* +1: st. ex. channel suppressed *
+* Ianflg = Flag to control the annhiliation channel *
+* in Hadriv: *
+* -1: annih. channel only one accounted *
+* for (!!! note please !!!) *
+* 0: annih. channel fully accounted for *
+* +1: annih. channel suppressed *
+* Innure(1,1,k) = Projectile index for the Hadriv reaction *
+* k (first entrance channel) *
+* Innure(2,1,k) = Target index for the Hadriv reaction *
+* k (first entrance channel) *
+* Innure(1,2,k) = Projectile index for the Hadriv reaction *
+* k (second entrance channel, if any) *
+* Innure(2,2,k) = Target index for the Hadriv reaction *
+* k (second entrance channel, if any) *
+* It holds: *
+* Nure (Innure(1,j,k),(Innure(2,j,k)/8+1)) = k *
+* Areso1/2 = mass of the 1st/2nd resonance produced *
+* in Hadriv *
+* Greso1/2 = width of the 1st/2nd resonance produced *
+* in Hadriv *
+* Ereso1/2 = energy of the 1st/2nd resonance produced *
+* in Hadriv *
+* Preso1/2 = momen. of the 1st/2nd resonance produced *
+* in Hadriv *
+* Px,y,zres1/2 = mom. comp. of the 1st/2nd resonance pro- *
+* duced in Hadrin *
+* Jreso1/2 = index of the 1st/2nd resonance produced *
+* in Hadriv *
+* Kreso1/2(m) = pointer (inside ...j arrays) of 1st decay*
+* particles originating from the 1st/2nd *
+* resonance produced in Hadriv *
+* Kreso.. = k1 + 1000 * k2 + 1000000 * k3 *
+* Nreso1/2 = number of final particles originating *
+* from the 1st/2nd resonance produced in *
+* Hadriv *
+* Aresoj(i) = mass of the i_th intermediate resonance*
+* produced in Hadriv *
+* Gresoj(i) = width of the i_th intermediate resonance*
+* produced in Hadriv *
+* Eresoj(i) = energy of the i_th intermediate resonance*
+* produced in Hadriv *
+* Presoj(i) = momen. of the i_th intermediate resonance*
+* produced in Hadriv *
+* Px,y,zresj(i) = mom. comp. of the i_th intermediate reso-*
+* nance produced in Hadrin *
+* Jresoj(i) = index of the i_th intermediate resonance *
+* produced in Hadriv *
+* Kresoj(i) = pointer (inside ...j arrays) of the decay*
+* particles originating from the i_th int- *
+* ermediate resonance produced in Hadriv *
+* Kresoj = k1 + 1000 * k2 + 1000000 * k3 *
+* Qqreso = Q^2=-t of the resonance creation process *
+* in Hadriv (projectile and resonance 1) *
+* Uureso = u of the resonance creation process in *
+* Hadriv (target and resonance 1) *
+* Rhresp = local proton nuclear density (fm^-3) *
+* Rhresn = local neutron nuclear density (fm^-3) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXRSDC = 25 )
+ PARAMETER ( PPAMXB = 0.6 D+00 )
+ PARAMETER ( PAUMXB = 2.D+00 * 0.8 D+00 )
+ PARAMETER ( PPAMXM = 0.6 D+00 )
+ PARAMETER ( PAUMXM = 2.D+00 * 0.4 D+00 )
+*
+ COMMON / HADFLG / QQRESO, UURESO, RHRESP, RHRESN,
+ & ARESOJ (MXRSDC), GRESOJ (MXRSDC), ERESOJ (MXRSDC),
+ & PRESOJ (MXRSDC), PXRESJ (MXRSDC), PYRESJ (MXRSDC),
+ & PZRESJ (MXRSDC), JRESOJ (MXRSDC), KDCRSJ (MXRSDC),
+ & IELFLG, ICXFLG, ISTFLG, IANFLG, IOLDHD, LNWHDR,
+ & INNURE (2,2,16), IKCHXG (16),
+ & NRESO1, NRESO2
+ LOGICAL LNWHDR
+ EQUIVALENCE ( ARESO1, ARESOJ (1) ), ( ARESO2, ARESOJ (2) )
+ EQUIVALENCE ( GRESO1, GRESOJ (1) ), ( GRESO2, GRESOJ (2) )
+ EQUIVALENCE ( ERESO1, ERESOJ (1) ), ( ERESO2, ERESOJ (2) )
+ EQUIVALENCE ( PRESO1, PRESOJ (1) ), ( PRESO2, PRESOJ (2) )
+ EQUIVALENCE ( PXRES1, PXRESJ (1) ), ( PXRES2, PXRESJ (2) )
+ EQUIVALENCE ( PYRES1, PYRESJ (1) ), ( PYRES2, PYRESJ (2) )
+ EQUIVALENCE ( PZRES1, PZRESJ (1) ), ( PZRES2, PZRESJ (2) )
+ EQUIVALENCE ( KRESO1, KDCRSJ (1) ), ( KRESO2, KDCRSJ (2) )
+ EQUIVALENCE ( JRESO1, JRESOJ (1) ), ( JRESO2, JRESOJ (2) )
+
--- /dev/null
+*$ CREATE HADPAR.ADD
+*COPY HADPAR
+*
+*=== Hadpar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of Hadpar: *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-dec-97 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Pxh(i) = X-component of the momentum of the i_th produced *
+* particle *
+* Pyh(i) = Y-component of the momentum of the i_th produced *
+* particle *
+* Pzh(i) = Z-component of the momentum of the i_th produced *
+* particle *
+* Heph(i) = Total energy of the i_th produced particle *
+* Amh(i) = Mass of the i_th produced particle *
+* Ichh(i) = Charge of the i_th produced particle *
+* Ibarh(i) = Baryon number of the i_th produced particle *
+* Nreh(i) = Identity (part scheme) of the i_th produced particle *
+* Ichnh(3,i) = Array containing additional informations about prod- *
+* uction verteces, ranking etc *
+* Infoh(i) = chain # of the i_th produced particle *
+* Anh(i) = Literal name of the i_th produced particle *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANH
+ COMMON / HADPAR / PXH (MXPDPM), PYH (MXPDPM), PZH (MXPDPM),
+ & HEPH (MXPDPM), AMH (MXPDPM), ICHH (MXPDPM),
+ & IBARH (MXPDPM), NREH (MXPDPM), INFOH (MXPDPM),
+ & ICHNH (3,MXPDPM)
+ COMMON / CHHDPR / ANH (MXPDPM)
+
--- /dev/null
+*$ CREATE HAMCIN.ADD
+*COPY HAMCIN
+*
+*=== Hamcin ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file Hamcin *
+* *
+* PDG particle id's corresponding to the FLUKA internal numbering *
+* scheme *
+* *
+* Created on 07 july 1995 by Johannes Ranft *
+* *
+* *
+* Introduced into FLUKA on 12-jan-96 by Alfredo Ferrari *
+* Infn - Milan *
+* *
+* Last change on 23-aug-00 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / HAMCIN / KHMCIN (MXMCIN)
--- /dev/null
+*$ CREATE HBMP96.ADD
+*COPY HBMP96
+*
+*=== Hbmp96 ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 24 january 2001 by Giuseppe Battistoni *
+* Infn - Milan *
+* *
+* Last change on 24-jan-01 by Giuseppe Battistoni *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / HBMP96 / DGSM(49,92)
+ REAL * 4 DGSM
--- /dev/null
+*$ CREATE HDSLCM.ADD
+*COPY HDSLCM
+*
+*=== Hdslcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* HaDron SeLection CoMmon: *
+* *
+* Created on 21 october 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 25-mar-98 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXIDSL = 10 )
+ PARAMETER ( MXHDSL = 2 )
+*
+ COMMON / HDSLCM / AIDSEL (MXIDSL,MXHDSL), ATDSEL (MXIDSL,MXHDSL),
+ & PXDSEL (MXIDSL,MXHDSL), PYDSEL (MXIDSL,MXHDSL),
+ & PZDSEL (MXIDSL,MXHDSL), PIDSEL (MXIDSL,MXHDSL),
+ & PXSDSL (MXIDSL,MXHDSL), PYSDSL (MXIDSL,MXHDSL),
+ & FIDSEL (MXIDSL,MXHDSL), RIDSEL (MXHDSL) ,
+ & PSDSLX , PSDSLY ,
+ & KIDSEL (MXIDSL,MXHDSL), NIDSEL (MXHDSL) ,
+ & IBDSEL (MXHDSL) , NQDSEL (MXHDSL) ,
+ & JIDSEL (MXHDSL) , MIDSEL
+
--- /dev/null
+*$ CREATE HIGFIS.ADD
+*COPY HIGFIS
+*
+*=== higfis ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* HIGh energy FISsion common: *
+* *
+* Created on 9 april 1993 by Alfredo Ferrari & Paola Sala *
+* INFN - Milan *
+* Last change on 26-jul-97 by Alfredo Ferrari, INFN - Milan *
+* *
+* Fisinh = logical flag for HE fission *
+* Lfrgmn = logical flag for fragmentation *
+* Lagoes = logical flag for controlling the Agoes correction *
+* in the high energy fission module *
+* Afis(i)= ith fragment mass number just after fission *
+* Zfis(i)= ith fragment atomic number just after fission *
+* Ufis(i)= ith fragment excitation energy (MeV) just after *
+* fission *
+* Ekfis(i)= ith fragment kinetic(MeV) energy just after fission*
+* Amfis(i)= ith fragment atomic mass (MeV) just after fission *
+* Ppfis(i)= ith fragment momentum (MeV/c) just after fission *
+* Atfis(i)= ith fragment mass number after evaporation *
+* Ztfis(i)= ith fragment atomic number after evaporation *
+* Utfis(i)= ith fragment excitation energy (MeV) after evapora-*
+* tion *
+* Recfis(i)= ith fragment kinetic(MeV) energy after evaporation *
+* Atmfis(i)= ith fragment atomic mass (MeV) after evaporation *
+* Pptfis(i)= ith fragment momentum (MeV/c) after evaporation *
+* Bhyfis(k,i)= (Nuclear) binding energy of the k_th bound hyperon *
+* for the ith fission /fragmentation remnant (MeV) *
+* Ebfiss = fission barrier (MeV) *
+* Amdiff = Fission fragment kinetic energy (MeV) *
+* Apr0 = Mass number of the (first) fissioning nucleus *
+* Zpr0 = Atomic number of the (first) fissioning nucleus *
+* Uu0 = Excitation energy (MeV) of the (first) fissioning *
+* nucleus *
+* Erec0 = Recoil kinetic energy (MeV) of the (first) fissio- *
+* ning nucleus *
+* Npartf(j,i)= Number of evaporated particle of type j after the *
+* evaporation of the ith fragment *
+* Hevfis(i)= Evaporated "heavies" kinetic energy (MeV) after the*
+* evaporation of the ith fragment *
+* Istfis(i) = Particle stable state index for the ith fission/ *
+* fragmentation remnant *
+* Ismfis(i) = Isomeric state index for the ith fission/fragmen- *
+* tation remnant *
+* Ihyfis(i) = Number of (possible) bound hyperons for the ith *
+* fission/fragmentation remnant *
+* Khyfis(k,i) = Id of the k_th bound hyperon for the ith fission *
+* /fragmentation remnant *
+* Nfiss = Number of fission/fragmentation fragments in the *
+* stack *
+* *
+*----------------------------------------------------------------------*
+*
+* Maximum Z for which fission is allowed: original value
+* PARAMETER ( IZFSMX = 66 )
+* New value with new Fprob settings:
+ PARAMETER ( IZFSMX = 61 )
+ LOGICAL FISINH, LFRGMN, LAGOES
+ COMMON / HIGFIS / AFIS (10), ZFIS (10), UFIS (10), EKFIS (10),
+ & AMFIS (10), PPFIS (10), COSLFF(3,0:10),
+ & ATFIS (10), ZTFIS (10), UTFIS (10), RECFIS (10),
+ & AMTFIS(10), PPTFIS(10), BHYFIS (IHYPMX,10),
+ & EBFISS, AMDIFF, APR0, ZPR0, EREC0, UU0,
+ & HEVFIS (0:10),
+ & ISTFIS(10), ISMFIS(10), IHYFIS(10),
+ & KHYFIS(IHYPMX,10), NPARTF (0:6,0:10),
+ & NFISS, FISINH, LFRGMN, LAGOES
+ DIMENSION COSLF0 (3)
+ EQUIVALENCE ( COSLF0 (1), COSLFF (1,0) )
+
--- /dev/null
+*$ CREATE ICATHR.ADD
+*COPY ICATHR
+*
+*=== Icathr ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* ICArus THResholds and miscellaneous: *
+* *
+* Created on 1 february 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 13-apr-01 by Alfredo Ferrari *
+* *
+* Dvicwp(i) = drift velocity for the i_th wire plane *
+* Mricwp(i) = region into which the i_th wire plane must be *
+* "confined" *
+* Kficwp(i) = extra flag for the i_th wire plane *
+* *
+*----------------------------------------------------------------------*
+*
+* Drift velocity: 1.5 mm / us
+ PARAMETER ( VDRIFT = 0.15 D+06 )
+* Drift axis = +y (drift is along +y)
+ PARAMETER ( KDRIFT = 2 )
+* Maximum number of Icarus wire planes:
+ PARAMETER ( MXICWP = 24 )
+*
+ COMMON / ICATHR / DELTTH, BREMTH, ENTRTH, DVICWP (MXICWP),
+ & NUSICA, MTWIRE, LUNZBI, LUNZBO, LICPRN, LICMEM,
+ & LZBROU, LJTINP, LNOECL, MNOEFA, MNOEFB, MNOEFM,
+ & MRICWP (MXICWP), KFICWP (MXICWP)
+ LOGICAL LICPRN, LICMEM, LZBROU, LJTINP, LNOECL
+
--- /dev/null
+*$ CREATE ICVXCM.ADD
+*COPY ICVXCM
+*
+*=== Icvxcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* ICarus VerteX CoMmon: *
+* *
+* Created on 02 february 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 04-jul-99 by Alfredo Ferrari *
+* *
+* Nicvtx = number of currently recorded verteces *
+* Kicvtx(i) = pointer to the i_th vertex information *
+* Kvxbgn = starting location (I*4) for verteces information *
+* in blank common *
+* Kvxlst = last location (I*4) for verteces information *
+* in blank common *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXICVX = 1000 )
+*
+ INTEGER NICVTX, KICVTX, KVXBGN, KVXLST
+ COMMON / ICVXCM / NICVTX, KICVTX (MXICVX), KVXBGN, KVXLST
+
--- /dev/null
+*$ CREATE INPDAT.ADD
+*COPY INPDAT
+*
+*=== inpdat ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: inpdat copy created 29/3/90 by A. Ferrari*
+* *
+* changes: last change on 14-oct-00 by Alfredo Ferrari, INFN Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* IFRBMJ = Fragmentation flag: Ifr0 + Ifr1 x 10 + Ifr2 x 100 *
+* + Ifr3 x 1000 + Ifr4 x 1000 *
+* + Ifr5 x 100000 + Ifr6 x 1000000 *
+* + Ifr7 x 10000000 *
+* Ifr0 = 0: no resampling of hadron id for possible mass *
+* dependent terms in the fragmentation function*
+* (but of course resampling of z for the same *
+* id) no term [1-m^2/sz]^2 included *
+* = 1: resampling of hadron id for possible mass *
+* dependent terms in the fragmentation function*
+* no term [1-m^2/sz]^2 included *
+* = 2: term [1-m^2/s]^2 with no z dependence inclu- *
+* ded and rest like for Ifr0 = 1 *
+* = 3: term [1-m^2/sz]^2 with z dependence inclu- *
+* ded and the rest like Ifr0 = 2 *
+* Ifr1 = 0: resampling of hadron id for possible mass *
+* dependent terms in the fragmentation function*
+* performed inside Energi *
+* >= 1: resampling of hadron id for possible mass *
+* dependent terms in the fragmentation function*
+* performed after returning to Bamjev for pos- *
+* sible, more complex, resampling schemes *
+* Ifr2 = 0: z fractions are to be intended as energy fra-*
+* ctions *
+* = 1: z fractions are to be intended as momentum *
+* fractions *
+* = 2: z fractions are to be intended as energy + *
+* momentum fractions, but for a (possible) *
+* z-dependent mass threshold factor where they *
+* are intended as energy fractions *
+* = 3: z fractions are to be intended as energy + *
+* momentum fractions including a (possible) *
+* z-dependent mass threshold factor *
+* = 4: z fractions are to be intended as energy + *
+* momentum fractions for the whole dijet light *
+* cone variables *
+* Ifr3 = 0: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used integrated over p_t^2 when sel- *
+* ecting particles from multiplets and their z *
+* fractions *
+* = 1: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t=m when sel- *
+* ecting particles from multiplets and their z *
+* fractions *
+* = 2: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution using the*
+* smallest mass hadron. *
+* = 3: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution and res- *
+* caled according to the masses/max. energies *
+* of the possibly produced hadrons. Rescaling *
+* is done within the physical maximum energy *
+* for all particles *
+* = 4: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution and res- *
+* caled according to the masses/max. energies *
+* of the possibly produced hadrons. Rescaling *
+* is done taking the same maximum transverse *
+* kinetic energy (the one of the minimal mass *
+* hadron) for all particles *
+* = 5: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution and res- *
+* caled according to the masses/max. energies *
+* of the possibly produced hadrons. Rescaling *
+* is done taking the same maximum transverse *
+* momentum (the one of the minimal mass hadron *
+* ) for all particles *
+* = 6: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution and res- *
+* caled according to the masses/max. energies *
+* of the possibly produced hadrons as in 3. *
+* When finally applied it must be rescaled for *
+* the different maximum energies in the two *
+* cases *
+* = 7: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution and res- *
+* caled according to the masses/max. energies *
+* of the possibly produced hadrons as in 4. *
+* When finally applied it must be rescaled for *
+* the different maximum energies in the two *
+* cases *
+* = 8: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution and res- *
+* caled according to the masses/max. energies *
+* of the possibly produced hadrons as in 5. *
+* When finally applied it must be rescaled for *
+* the different maximum energies in the two *
+* cases *
+* = 9: the mass dependent term 1/z exp(-b m_t^2/z) *
+* must be used evaluated at m_t with p_t pre- *
+* selected from a proper distribution using *
+* the smallest mass hadron. When finally app- *
+* lied it must be rescaled for the different *
+* maximum energies in the two cases *
+* Ifr4 = 0: 1-z fractions are to be intended as excluding*
+* mass energy ( using (1-z)/(1-z_min) ) *
+* = 1: z fractions are to be intended as including *
+* mass energy *
+* Ifr5 = 0: standard Bamjet way of treating before the *
+* LL=0/LL=1 jets *
+* = 1: swap randomly 50% which one of the LL=0/LL=1 *
+* jets has to be hadronized as first one *
+* = 2: swap randomly 50% which one of the LL=0/LL=1 *
+* jets has to be hadronized at the first step *
+* and then swap at each step, according to the *
+* scheme (ie 0 the first one): 01010101... *
+* = 3: swap randomly 50% which one of the LL=0/LL=1 *
+* jets has to be hadronized at the first step *
+* and then swap at each odd step, according to *
+* the scheme (ie 0 the first one): 0110011... *
+* = 4: swap randomly 50% which one of the LL=0/LL=1 *
+* jets has to be hadronized at each step *
+* = 5: swap randomly 50% which one of the LL=0/LL=1 *
+* jets has to be hadronized at the first step *
+* and then decide randomly the one for the next*
+* step with probability proportional to the *
+* residual energies of each jet *
+* = 6: swap randomly 50% which one of the LL=0/LL=1 *
+* jets has to be hadronized at the first step *
+* and then decide randomly the one for the next*
+* step with probability proportional to the *
+* residual (long.) momenta of each jet *
+* = 7: like 5 but with the 2nd step swapped anyway *
+* = 8: like 6 but with the 2nd step swapped anyway *
+* Ifr6 = 0: standard Bamjet way of treating chain cut *
+* through Rx/Rxmnm *
+* = 1: treat chain cut through invariant masses *
+* allowing for crossover of the two jets *
+* = 2: treat chain cut through invariant masses *
+* allowing for crossover of the two jets but *
+* with limitations to the available energy of *
+* the jet under consideration *
+* Ifr7 = 0: standard Lctsqs way of considering p_t as *
+* given in the residual cms *
+* = 1: treat p_t as sampled in the transverse chain *
+* cms and not in the residual overall cms, but *
+* for final junction particles *
+* = 2: treat p_t as sampled in the transverse chain *
+* cms and not in the residual overall cms, *
+* for final junction particles too (*** not *
+* operational and not true ***) *
+* = 3: treat p_t as R3bamj correlated with the resi-*
+* dual one, in the transverse chain cms (for *
+* Ifr6 > 0), or in the chain system, assuming *
+* it a the sum of R3 x p_t_resid and a (1-R3) *
+* x p_t_smpld with a properly selected angle *
+* between the two vectors but for final junct- *
+* ion particles *
+* = 4: like 3, with a special angular correlation *
+* for final junction particles to try to do the*
+* R3 correlation as much as possible. The p_t *
+* of final junction particles is anyway sampled*
+* in the overall residual cms *
+* cms and not in the residual overall cms, *
+* for final junction particles too *
+* = 5: treat p_t as the opposite of the last samp- *
+* led one, in the transverse chain cms (for *
+* Ifr6 > 0), or in the chain system, assuming *
+* it a the sum of -p_t_prev and a (1-R3) *
+* x p_t_smpld with a properly selected angle *
+* between the two vectors but for final junct- *
+* ion particles *
+* = 6: like 5, with a special angular correlation *
+* for final junction particles to try to do the*
+* R3 correlation as much as possible. The p_t *
+* of final junction particles is anyway sampled*
+* in the overall residual cms *
+* cms and not in the residual overall cms, *
+* for final junction particles too *
+* *
+* IVLBMJ = Valence quark fragmentation flag: Ivl + ... *
+* Ivl = 0: no account for valence/non-valence quarks *
+* when applying the chain end fragmentation *
+* parameters (A1VBBJ, A1VMBJ, AVBBMJ, AVMBMJ, *
+* BVBBMJ, BVMBMJ, A1OBBJ, A1OMBJ, AOBBMJ, *
+* AOMBMJ, BOBBMJ, BOMBMJ) *
+* = 1: chain end fragmentation parameters (A1VBBJ, *
+* A1VMBJ, AVBBMJ, AVMBMJ, BVBBMJ, BVMBMJ, *
+* A1OBBJ, A1OMBJ, AOBBMJ, AOMBMJ, BOBBMJ, *
+* BOMBMJ), applied to valence quarks only *
+* IQQBMJ = Flag for fragmentation parameters for verteces with *
+* qq-aqaq excited from the sea: Iqq *
+* Iqq = 0: fragmentation parameters for (anti)ba- *
+* ryons used for q-qq + aqaq (anti)ba- *
+* ryon production (default ones, even if *
+* the original (anti)quark is a (valence) *
+* chain end one) *
+* = 1: fragmentation parameters for (valence) *
+* mesons used for q-qq + aqaq (anti)ba- *
+* ryon production (those for (valence) *
+* chain ends if the original (anti)quark *
+* is a (valence) chain end one) *
+* = 2: fragmentation parameters for possibly *
+* (valence) (anti)baryons used for q-qq *
+* + aqaq (anti)baryon production (those *
+* for (valence) chain ends if the original*
+* (anti)quark is a (valence) chain end *
+* one) *
+* = 3: like 1, but 50% randomly wrt 0 *
+* = 4: like 2, but 50% randomly wrt 0 *
+* A1VBBJ = A1 parameter in the fragmentation function for a(n) *
+* (anti)baryon vertex originating from an initial *
+* (anti)diquark chain end (possibly restricted to *
+* valence (anti)diquarks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* This parameter applies to aq-q chains *
+* A1VMBJ = A1 parameter in the fragmentation function for a *
+* meson vertex originating from an initial (anti)quark *
+* chain end (possibly restricted to valence (anti)qua- *
+* rks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* This parameter applies to aq-q chains *
+* A1OBBJ = A1 parameter in the fragmentation function for a(n) *
+* (anti)baryon vertex originating from an initial *
+* (anti)diquark chain end (possibly restricted to *
+* valence (anti)diquarks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* This parameter applies to (a)q-(a)q(a)q and aqaq-qq *
+* chains *
+* A1OMBJ = A1 parameter in the fragmentation function for a *
+* meson vertex originating from an initial (anti)quark *
+* chain end (possibly restricted to valence (anti)qua- *
+* rks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* This parameter applies to (a)q-(a)q(a)q and aqaq-qq *
+* chains *
+* A1BBMJ = A1 parameter in the fragmentation function for a(n) *
+* (anti)baryon vertex ( P(z) = 1-A1 + (n+1)A1 (1-z)^n )*
+* A1MBMJ = A1 parameter in the fragmentation function for a *
+* meson vertex ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* AMEBAM = AME parameter, it is the probability for creating a *
+* qqbar couple during the chain hadronization, rather *
+* than a (qq)(qbarqbar) one *
+* AVBBMJ = n parameter in the fragmentation function for a(n) *
+* (anti)baryon vertex originating from an initial *
+* (anti)diquark chain end (possibly restricted to *
+* valence (anti)diquarks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* A value >= 1000 is taken as a flag and forces to call*
+* a user defined routine *
+* This parameter applies to aq-q chains *
+* AVMBMJ = n parameter in the fragmentation function for a *
+* meson vertex originating from an initial (anti)quark *
+* chain end (possibly restricted to valence (anti)quar-*
+* ks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* A value >= 1000 is taken as a flag and forces to call*
+* a user defined routine *
+* This parameter applies to aq-q chains *
+* AOBBMJ = n parameter in the fragmentation function for a(n) *
+* (anti)baryon vertex originating from an initial *
+* (anti)diquark chain end (possibly restricted to *
+* valence (anti)diquarks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* A value >= 1000 is taken as a flag and forces to call*
+* a user defined routine *
+* This parameter applies to (a)q-(a)q(a)q and aqaq-qq *
+* chains *
+* AOMBMJ = n parameter in the fragmentation function for a *
+* meson vertex originating from an initial (anti)quark *
+* chain end (possibly restricted to valence (anti)quar-*
+* ks according to Ivl) *
+* ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* A value >= 1000 is taken as a flag and forces to call*
+* a user defined routine *
+* This parameter applies to (a)q-(a)q(a)q and aqaq-qq *
+* chains *
+* ANBBMJ = n parameter in the fragmentation function for a(n) *
+* (anti)baryon vertex ( P(z) = 1-A1 + (n+1)A1 (1-z)^n )*
+* A value >= 1000 is taken as a flag and forces to call*
+* a user defined routine *
+* ANMBMJ = n parameter in the fragmentation function for a *
+* meson vertex ( P(z) = 1-A1 + (n+1)A1 (1-z)^n ) *
+* A value >= 1000 is taken as a flag and forces to call*
+* a user defined routine *
+* BVBBMJ = b parameter in the mass cutoff fragmentation function*
+* factor for a(n) (anti)baryon vertex originating from *
+* an original (anti)diquark chain end (possibly restr- *
+* icted to valence (anti)diquarks according to Ivl) *
+* ( X(z) = exp ( - b m_t^2 / z ) / z ) *
+* This parameter applies to aq-q chains *
+* BVMBMJ = b parameter in the mass cutoff fragmentation function*
+* factor for a meson vertex originating from an *
+* original (anti)quark chain end (possibly restricted *
+* to valence (anti)quarks according to Ivl) *
+* ( X(z) = exp ( - b m_t^2 / z ) / z ) *
+* This parameter applies to aq-q chains *
+* BOBBMJ = b parameter in the mass cutoff fragmentation function*
+* factor for a(n) (anti)baryon vertex originating from *
+* an original (anti)diquark chain end (possibly restr- *
+* icted to valence (anti)diquarks according to Ivl) *
+* ( X(z) = exp ( - b m_t^2 / z ) / z ) *
+* This parameter applies to (a)q-(a)q(a)q and aqaq-qq *
+* chains *
+* BOMBMJ = b parameter in the mass cutoff fragmentation function*
+* factor for a meson vertex originating from an *
+* original (anti)quark chain end (possibly restricted *
+* to valence (anti)quarks according to Ivl) *
+* ( X(z) = exp ( - b m_t^2 / z ) / z ) *
+* This parameter applies to (a)q-(a)q(a)q and aqaq-qq *
+* chains *
+* BZBBMJ = b parameter in the mass cutoff fragmentation function*
+* factor for a(n) (anti)baryon vertex *
+* ( X(z) = exp ( - b m_t^2 / z ) / z ) *
+* BZMBMJ = b parameter in the mass cutoff fragmentation function*
+* factor for a meson vertex *
+* ( X(z) = exp ( - b m_t^2 / z ) / z ) *
+* EPCBMJ = eta parameter in the popcorn cutoff fragmentation *
+* function factor for a popcorn meson *
+* ( Y(z) = exp ( - eta m_meson ) ) *
+* DM0BMJ = extra energy for a diquark to be applied to the naive*
+* quark mass sum for M_0 and/or the minimum energy to *
+* be left after hadronizing the current hadron if the *
+* quark mass options are selected *
+* FM0BMJ = FM_0 multiplicative factor for the minimum energy to *
+* be left after hadronizing the current hadron *
+* SM0BMJ = SM_0 sigma (fraction) for randomizing the minimum en-*
+* ergy to be left after hadronizing the current hadron *
+* RM0BMJ = RM_0 maximum reduction of the minimum energy to be *
+* left after hadronizing the current hadron to be used *
+* during hadron selection *
+* BM0BMJ = Smearing parameter for M_0, it give the (approximate)*
+* fractional sigma for M_0 around the nominal M_00 *
+* value using a log-normal distribution *
+* exp [- BM0^2/2 ln^2(M_0/M_00)] *
+* P (M_0) = ---------------------------------- *
+* M_0 Sqrt[2 pi / BM0^2] *
+* EM0BMJ = Smearing parameter for the transition to reduced *
+* thresholds inside Abbrch. The transition is full for *
+* original/current (depending on option) jet energy *
+* Em0bmj below the nominal corresponding meson/baryon *
+* (depending on option) mass and null a Em0bmj above *
+* TM0BMJ = "Typical" transverse kinetic energy to be used for *
+* jets unequal energy sharing, for special "a priori" *
+* popcorn and for minimal residual energies during *
+* hadronization *
+* UR0BMJ = u quark mass reduction for low original/current *
+* (depending on option) jet energy *
+* DR0BMJ = d quark mass reduction for low original/current *
+* (depending on option) jet energy *
+* SR0BMJ = s quark mass reduction for low original/current *
+* (depending on option) jet energy *
+* IM0BMJ = Flag for the management of the mass cut-off inside *
+* Abbrch and Bamjev: Im0bmj = Im0 + Jm0 x 10 *
+* + Km0 x 100 + Lm0 x 1000 *
+* + Mm0 x 10000 + Nn0 x 100000 *
+* + Ic0 x 1000000 *
+* + Jc0 x 10000000 *
+* + Is0 x 100000000 *
+* Im0 = 0, M_0 generated according to the initial *
+* jet energy *
+* = 1, M_0 generated according to the current *
+* jet energy *
+* = 2, M_0 generated according to the current *
+* jet quark masses *
+* = 3, M_0 generated according to the current *
+* jet quark masses and corrected according to *
+* M_0 = M_0 / [ 1 + (M_0/(E_jet+M_0))^2 ] *
+* = 4, M_0 generated according to the current *
+* jet quark masses and corrected for low *
+* initial jet energies going down to *
+* m_u(d)(s) = m_u(d)(s)_ori / u(d)(s)r0 *
+* = 5, M_0 generated according to the current *
+* jet quark masses and corrected for low *
+* current jet energies going down to *
+* m_u(d)(s) = m_u(d)(s)_ori / u(d)(s)r0 *
+* = 6, like 4 but with a diquark possibly taken *
+* into account when generating the check *
+* energy for reducing quark masses *
+* = 7, like 5 but with a diquark possibly taken *
+* into account when generating the check *
+* energy for reducing quark masses *
+* Jm0 = 0, exponential prob. form for generating *
+* M_cut and P_cut (see B1,B2, etc) *
+* = 1, gaussian prob. form for generating *
+* M_cut and P_cut (see B1,B2, etc) *
+* = 2, gaussian prob. form for generating *
+* M_cut and P_cut (see B1,B2, etc) *
+* = 3, gaussian prob. form for generating *
+* M_cut and P_cut (see B1,B2, etc) *
+* = 4, gaussian prob. form for generating *
+* M_cut and P_cut (see B1,B2, etc) *
+* = 5, gaussian prob. for generating M_cut, *
+* log-normal prob. form for generating E_k_cut*
+* /P_cut (see B1,B2, etc) *
+* = 6, gaussian prob. for generating M_cut, *
+* log-normal prob. form for generating E_k_cut*
+* /P_cut (see B1,B2, etc) *
+* = 7, delta function for generating M_cut *
+* log-normal prob. form for generating E_k_cut*
+* /P_cut (see B1,B2, etc) *
+* = 8, delta function for generating M_cut *
+* log-normal prob. form for generating E_k_cut*
+* /P_cut (see B1,B2, etc) *
+* = 9, delta function for generating M_cut *
+* gaussian prob. for generating P_x,y_cur *
+* with variance 1/B1 for B1 > 0 or RX/B1 for *
+* B1<0, the same for P_z_cut with B2 *
+* Km0 = 0, no minimal energy must be left after cre-*
+* ation of the current hadron *
+* = 1, FM_0 x M_0 minimal energy to be left *
+* after creation of the current hadron *
+* = 2, minimal energy to be left after creation *
+* of the current hadron corresponding to the *
+* masses of the residual quarks times FM_0 *
+* = 4,5,6,7 minimal energy to be left after cre-*
+* ation of the current hadron corresponding to*
+* the masses of the residual quarks corrected *
+* as for Im0=4,5,6,7 times FM_0 *
+* Lm0 = 0, the (anti)diquark extra energy is added *
+* anyway when quark mass based minimal resi- *
+* dual cut-offs are used *
+* = 1, the (anti)diquark extra energy is added *
+* only if the current residual (anti)quarks *
+* of other jet are consistent with a hadron *
+* residual *
+* = 2, the (anti)diquark extra energy is added *
+* only if the current residual (anti)quarks *
+* of other jet are consistent with a hadron *
+* residual, the other jet (anti)quark masses *
+* are accounted for (never reduced also for *
+* Km0=4-7) and the other jet current residual *
+* energy is considered *
+* = 3, the (anti)diquark extra energy is added *
+* only if the current residual (anti)quarks *
+* of other jet are consistent with a hadron *
+* residual, the other jet (anti)quark masses *
+* are accounted for (possibly reduced for *
+* Km0=4-7) and the other jet current residual *
+* energy is considered *
+* Mm0 = 0, no extra energy added to the Abbrch one *
+* for selecting a vertex with qq-aqaq from *
+* the sea *
+* = 1, a diquark (DM0) extra energy and a u/d *
+* mass (possibly) reduced according to Im0 *
+* added to the Abbrch one for selecting a *
+* vertex with qq-aqaq from the sea *
+* = 2, no diquark production allowed close to a *
+* baryon vertex *
+* = 3, as 1 and 2 together *
+* Nm0 = 0, no forced production from one (randomly) *
+* of the two jets *
+* = 1, forced particle production from one *
+* (randomly) of the two jets in case in the *
+* previous attempt both were immediately *
+* cut-offed *
+* Ic0 = 0, normal RX check *
+* = 1, normal RX check corrected for Sqrt(s) *
+* as: Rx_eff = Rx x [Sqrt(s) - E_min_oth] *
+* / [Rx + Rx_oth - E_min_oth] *
+* where E_min_oth is the quark mass of the *
+* other jet residual plus (possibly) the *
+* diquark extra, plus EM0 *
+* = 2, RX check corrected for Sqrt(s) almost ex-*
+* actly making the split of the available *
+* invariant mass between M_0 of the current*
+* jet computed according to Im0 recipes and*
+* M_min_oth, where M_min_oth is the quark *
+* mass of the other jet residual plus (pos-*
+* sibly) the diquark extra *
+* = 9, Sqrt(s) check inside Abbrch *
+* Jc0 = 0, residual energy/Sqrt(s) used inside *
+* FLAVOR for flavour selection *
+* = 1, residual energy/Sqrt(s) approximately *
+* corrected for residual quarks masses used*
+* inside FLAVOR for flavour selection *
+* = 2, residual energy/Sqrt(s) fully corrected *
+* for residual quarks masses, diquark extra*
+* factors, etc, used inside FLAVOR for *
+* flavour selection *
+* Is0 = 0, no B1,B2 rescaling *
+* = 1, B1, B2 rescaled according to the chain *
+* energy *
+* PVCBMJ = PVC parameter: X.xxxx.... + Y.yyyy x 10^5 *
+* Pvcpr1 = Y.yyyy (note 4 decimal digits only) *
+* Pvcpr2 = X.xxxx.... *
+* Pvcpr1 = probability of avoiding the resampling of *
+* the whole chain when the remaining energy *
+* is no longer enough to create the current *
+* hadron, via resampling of the current hadron*
+* vertex, flavor and id *
+* Pvcpr2 = probability of avoiding the resampling of *
+* the whole chain when the remaining energy *
+* is no longer enough to create the current *
+* hadron, via a call to verein directly (if *
+* both jets have been hadronized) or going to *
+* the 2nd one (a la Abbrch) *
+*
+* B1BAMJ = B1 parameter used when generating the energy cut-off *
+* for chain hadronization *
+* B2BAMJ = B2 parameter used when generating the energy cut-off *
+* for chain hadronization *
+* C1BAMJ = C1 parameter used when generating the energy cut-off *
+* for chain hadronization *
+* C2BAMJ = C2 parameter used when generating the energy cut-off *
+* for chain hadronization *
+* B1SBMJ = B1 scaling parameter (GeV) *
+* B2SBMJ = B2 scaling parameter (GeV) *
+* B1DBMJ = B1 "derivative" *
+* B2DBMJ = B2 "derivative" *
+* D12BMJ = D12 parameter used when generating the energy cut-off*
+* for chain hadronization *
+* The cut-off is generated according to: *
+* B1_eff = B1 + C1 / ( E_curr_chain / |D12| ) *
+* B2_eff = B2 + C2 / ( E_curr_chain / |D12| ) *
+* where: *
+* E_curr_chain = E_oth + R_x, for D12 > 0 *
+* E_curr_chain = R_x, for D12 < 0 *
+* (R_x = current residual jet energy) *
+* (E_o = current residual other jet energy, it *
+* could well be stiil the total other jet *
+* energy) *
+* M_cut = M_0 + M_rndm *
+* ( P(M_rndm) = B1_eff exp [-B1_eff M_rndm] *
+* for Jm0 = 0, or *
+* 2 exp [-B1_eff^2/2 M_rndm^2] *
+* P(M_rndm) = ---------------------------------- *
+* Sqrt[2 pi / B1_eff^2] *
+* M_rndm >=0, for Jm0 = 1, or *
+* 2 exp [-B1_eff^2/2 M_rndm^2] *
+* P(M_rndm) = ---------------------------------- *
+* Sqrt[2 pi / B1_eff^2] *
+* M_rndm >=0, for Jm0 = 2, or *
+* 2 exp{-B1_eff^2/2[M_rndm/(R_x-M_0)]^2}*
+* P(M_rndm) = ---------------------------------- *
+* Sqrt{2 pi [(R_x-M_0)/B1_eff]^2} *
+* R_x = current residual jet energy *
+* M_rndm >=0, for Jm0 = 3, or *
+* 2 exp{-B1_eff^2/2[M_rndm/(R_x-M_0)]^2}*
+* P(M_rndm) = ---------------------------------- *
+* Sqrt{2 pi [(R_x-M_0)/B1_eff]^2} *
+* R_x = current residual jet energy *
+* M_rndm >=0, for Jm0 = 4, or *
+* 2 exp [-B1_eff^2/2 M_rndm^2] *
+* P(M_rndm) = ---------------------------------- *
+* Sqrt[2 pi / B1_eff^2] *
+* M_rndm >=0, for Jm0 = 5, or *
+* 2 exp [-B1_eff^2/2 M_rndm^2] *
+* P(M_rndm) = ---------------------------------- *
+* Sqrt[2 pi / B1_eff^2] *
+* M_rndm >=0, for Jm0 = 6, or *
+* P (M_cut) = delta (M_cut-M_0) *
+* for Jm0 = 7, or *
+* P (M_cut) = delta (M_cut-M_0) *
+* for Jm0 = 8, or *
+* P (M_cut) = delta (M_cut-M_0) *
+* for Jm0 = 9 ) *
+* E_cut0 = M_0 + E_k_rndm *
+* ( P(E_k_rndm) = B2_eff exp [-B2_eff E_k_rndm] *
+* for Jm0 = 0, or *
+* 2 exp [-B2_eff^2/2 E_k_rndm^2] *
+* P(E_k_rndm) = ---------------------------------- *
+* Sqrt[2 pi / B2_eff^2] *
+* E_k_rndm >=0, for Jm0 = 1, or *
+* 2 exp{-B2_eff^2/2[E_k_rndm/(R_x-M_0]^2}*
+* P(E_k_rndm) = ---------------------------------- *
+* Sqrt{2 pi [(R_x-M_0)/B2_eff]^2} *
+* R_x = current residual jet energy *
+* E_k_rndm >=0, for Jm0 = 2, or *
+* 2 exp [-B2_eff^2/2 E_k_rndm^2] *
+* P(E_k_rndm) = ---------------------------------- *
+* Sqrt[2 pi / B2_eff^2] *
+* E_k_rndm >=0, for Jm0 = 3, or *
+* 2 exp{-B2_eff^2/2[E_k_rndm/(R_x-M_0]^2}*
+* P(E_k_rndm) = ---------------------------------- *
+* Sqrt{2 pi [(R_x-M_0)/B2_eff]^2} *
+* R_x = current residual jet energy *
+* E_k_rndm >=0, for Jm0 = 4, or *
+* exp [- ln^2(E_k_rndm B2_eff)/2] *
+* P(E_k_rndm) = ---------------------------------- *
+* E_k_rndm Sqrt[2 pi] *
+* for Jm0 = 5, or *
+* exp [-B2_eff^2/2 ln^2(E_k_rndm/E_0)] *
+* P(E_k_rndm) = ---------------------------------- *
+* E_k_rndm Sqrt[2 pi / B2_eff^2] *
+* E_0 = R_x / B2_eff *
+* for Jm0 = 6, or *
+* exp [-B1_eff^2/2 ln^2(E_k_rndm/E_0)] *
+* P(E_k_rndm) = ---------------------------------- *
+* E_k_rndm Sqrt[2 pi / B1_eff^2] *
+* E_0 = R_x / B2_eff *
+* for Jm0 = 7, or *
+* exp [-B1_eff^2/2 ln^2(E_k_rndm B2_eff)]*
+* P(E_k_rndm) = ---------------------------------- *
+* E_k_rndm Sqrt[2 pi / B1_eff^2] *
+* for Jm0 = 8 ) *
+* P_cut = Sqrt [E_k_rndm (E_k_rndm + 2 M_0)] *
+* E_cut = Sqrt [ M_cut^2 + P_cut^2 ] *
+* B3BAMJ = B3 [GeV/c]^-1 slope parameter in the p_t generation *
+* function, it is usedin generating the slope parameter*
+* C3BAMJ = C3 reduction parameter for the p_t slope used when *
+* giving chains intrinsic p_t before hadronization *
+* D3BAMJ = D3 (GeV) scale parameter for the p_t generation fun- *
+* ction, it is used in generating the slope parameter *
+* The slope parameter is generated according to: *
+* D3 > 0: *
+* B3 * Log10(D3) *
+* B_slope = ------------------------------------ *
+* Log10 [1+(E_chain/D3)^2] + Log10 (D3) *
+* *
+* / initial chain energy (Islflg=0) *
+* E_chain: *
+* \ current chain energy (Islflg=1) *
+* *
+* D3 < 0: *
+* B_slope = B3 - D3 * Log(E_chain) *
+* *
+* / initial chain energy (Islflg=0) *
+* E_chain: *
+* \ current chain energy (Islflg=1) *
+* *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!!! Please note that it would be more consistent !!!!! *
+* !!!!! with the concept of independent chain whose !!!!! *
+* !!!!! hadronization depends only on current energy !!!!! *
+* !!!!! and flavor ends, to make B_slope dependent !!!!! *
+* !!!!! on the current jet residual energy rather !!!!! *
+* !!!!! than on the initial chain energy !!!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* *
+* E3BAMJ = E3 parameter in the p_t distribution generation *
+* for Jptflg=2,3, E3>=0: *
+* E3 [GeV/c]^-2 quadratic parameter in the p_t genera- *
+* tion function, it controls a (possible) p_t^2 term *
+* for Jptflg=4: *
+* E3 = F_mul x 10000.0 + Prob_tail *
+* Prob_tail (0=<Prob_tail< 1) is the probability *
+* for selecting p_t from the the high p_t tail *
+* which is gaussian (see the Jptflg explaination) *
+* with sigma_tail = sigma _pt x F_mul *
+* for Jptflg=2,3 E3=<0: *
+* E3 = F_mul x 10000.0 + Prob_tail *
+* Prob_tail (0=<Prob_tail< 1) is the probability *
+* for selecting p_t from the the high p_t tail *
+* which uses B3 = B3 x F_mul. See Ptintr for *
+* details *
+* F3BAMJ = F3 parameter in the p_t distribution generation: it *
+* modifies the default B3 (intended for mesons) into *
+* F3 x B3 for (anti)baryons *
+* Q3BAMJ = Q3 parameter in the p_t distribution generation: it *
+* modifies the default (F3 x )B3 (intended for produced*
+* particles) into Q3 x (F3 x )B3 for those hadrons *
+* carrying one or more of the original chain *
+* (anti)quarks, according to the Icrrpt and Kcrrpt flags*
+* See below for the modifications due to T3. *
+* T3BAMJ = T3 parameter in the p_t distribution generation: if *
+* different from zero, it modifies the Q3 parameter as *
+* Q3_eff = Q3 x [n_tot_quark/(n_tot_quark-n_ori_quark)]^T3 *
+* P3BAMJ = P3 parameter in the p_t distribution generation: if *
+* different from zero, it modifies the Q3 (and P3) pa- *
+* rameters for popcorn mesons as: *
+* Q3_eff = Q3 x [(n_tot_quark+P3)/(n_tot_quark-n_ori_quark+P3)]^T3 *
+* R3BAMJ = R3 parameter in the p_t distribution generation: if *
+* different from zero, together with S3 it sets the *
+* correlation for the sqrt(s) calculations between the *
+* newly created p_t and a possible previous p_t *
+* S3BAMJ = S3 parameter in the p_t distribution generation: if *
+* different from zero, together with R3 it sets the *
+* correlation for the sqrt(s) calculations between the *
+* newly created p_t and a possible previous p_t *
+* IPTBMJ = IPT flag in the p_t generation function, it controls *
+* the p_t option: *
+* IPT = Jptsgn x ( Jptflg + 10 x Kptflg *
+* + 100 x Lptflg + 1000 x Mptflg *
+* + 10000 x Nptflg *
+* + 100000 x Islflg ) *
+* Jptflg is controlling the p_t generating distribution*
+* Jptflg = 1: old bamjet sampling *
+* Jptflg = 2: exponential in transverse energy *
+* P(E_t)dE_t = A exp[-B_slope E_t - E3 p_t^2] dE_t *
+* Jptflg = 3: invariant cross section exponential *
+* in transverse energy, which transl- *
+* ates into: *
+* A exp[-B_slope E_t - E3 p_t^2] *
+* P(E_t)dp_t^2 = ------------------------------- dp_t^2 *
+* Sqrt [ E^2 - E_t^2 ] *
+* Jptflg = 4: p_t generated at parton level assu- *
+* ming a gaussian distribution for each*
+* (parton) p_t component which transl- *
+* ates into (for partons): *
+* P(p_t)dp_t^2 = A exp[-B_part^2 p_t^2/2] dp_t^2 *
+* B_part = 1/sigma_pt_part *
+* and for hadrons (two partons involved) *
+* P(p_t)dp_t^2 = A exp[-B_slope^2 p_t^2/2] dp_t^2 *
+* B_slope = 1/sigma_pt_hadr = B_part/Sqrt(2) *
+* Kptflg controls the mass used when generating the *
+* intrinsic p_t of chains (meaningful only for *
+* Jptsgn = 1, please note that for some of the Jptflg *
+* values Kptflg is irrelevant): *
+* Kptflg = 0: chains treated like massless objects *
+* Kptflg = 1: largest chain mass used *
+* Kptflg = 2: largest mass among the hadrons *
+* corresponding to the 1 particle state*
+* of the chains *
+* Kptflg = 3: smallest chain mass used *
+* Kptflg = 4: smallest mass among the hadrons *
+* corresponding to the 1 particle state*
+* of the chains *
+* Kptflg = 5: largest mass among the hadrons *
+* corresponding to the minimal mass 1 *
+* particle state of the chains *
+* Kptflg = 6: smallest chain mass used, unless it *
+* is smaller than the (constrained) *
+* mass of the other chain *
+* Lptflg controls whether the chain intrinsic p_t has *
+* to be generated according to the individual p_t's of *
+* the constituents or not: *
+* Lptflg = 0: no chain p_t generation according to *
+* individual p_t's of constituents *
+* = 1: chain p_t generation according to *
+* individual p_t's of constituents *
+* Mptflg controls how the chain intrinsic p_t has to *
+* be treated when sampled in the backward emisphere: *
+* Mptflg = 0: p_t accepted regardless whether it is*
+* forward or backward (and implicitly *
+* used always as forward) *
+* = 1: p_t accepted only if it is forward *
+* = 2: p_t accepted both if forward or *
+* bacward and the forward chain becomes*
+* the backward (and viceversa) and the *
+* chain products are inverted in dire- *
+* ction too: *
+* Example for a baryon-baryon collision: *
+* qq q *
+* <----- --> \ *
+* | *
+* <--- x ---> | Starting "longitudinal" situation before *
+* q qq | p_t application *
+* <- ----> / *
+* *
+* qq q *
+* <- --> \ *
+* | *
+* <- x -> | Final situation (note the q/qq of the *
+* q qq | projectile are still forward, and those *
+* <--- -> / of the target are still backward) *
+* = 3: p_t accepted both if forward or *
+* bacward and the forward chain becomes*
+* the backward (and viceversa) and the *
+* chain products are inverted in dire- *
+* ction randomly (50% probability) *
+* Nptflg controls how the Lorentz transformation due *
+* to the chain intrinsic p_t is performed: *
+* Nptflg = 0: "parallel" transformation (untilted *
+* chain axis) *
+* = 1: "rotated" transformation (tilted *
+* chain axis) *
+* = 2: mixed "parallel" and "rotated" acco- *
+* rding to chain end intrinsic p_t *
+* Note: Nptflg > 0 is incompatible with most *
+* Ioqrpt, Joqrpt etc options which *
+* assume a "parallel" transformation *
+* Islflg = 0: rescale B3 according to the initial *
+* chain energy *
+* = 1: rescale B3 according to the current *
+* chain energy *
+* Jptsgn < 0: old way of selecting the mass *
+* I3BAMJ = I3 parameter in the p_t generation function, it *
+* controls the matching of the right and left jet p_ts *
+* during chain hadronization *
+* I3 = Iptreo + Icrrpt x 10 + Ioqrpt x 100 *
+* + Joqrpt x 1000 + Kcrrpt x 10000 *
+* + Jfjnpt x 100000 + Koqrpt x 1000000 *
+* Iptreo controls the p_t "re-orientation" procedure *
+* before "gluing" together the right and left jets: *
+* Iptreo = 0: no reorientation *
+* Iptreo = 1: simple reorientation with two batches*
+* Iptreo = 2: random reorientation with 2/4/8 *
+* batches *
+* Iptreo = 3: reorientation with 2/4/8 batches *
+* with coupling of the batches such as *
+* to minimize the global p_t *
+* Iptreo = 4: like 1 but with no random swapping *
+* of the particles *
+* Iptreo = 5: like 2 but with no random swapping *
+* of the particles *
+* Iptreo = 6: like 3 but with no random swapping *
+* of the particles *
+* Icrrpt controls whether or not p_t of two consecutive*
+* particles produced in the same jet during the hadro- *
+* dization procedure are correlated ot not (if so they *
+* are thought as the sum of the p_t left by the pre- *
+* vious remnant plus the p_t of the new parton and the *
+* (anti)parton left for the next stage will carry the *
+* opposite p_t) *
+* Icrrpt = 0: no correlation *
+* Icrrpt = 1: full correlation *
+* Icrrpt = 2: full correlation with end chain *
+* hadrons sampled with a B3 x Q3 *
+* parameter in order to account *
+* roughly for the intrinsic p_t of *
+* the chains *
+* Icrrpt = 3: full correlation with end chain *
+* hadrons sampled with a B3 x Q3 *
+* parameter and zero mass in order *
+* to account roughly for the intrinsic *
+* p_t of the chains *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!! In case Sqrt(s) calculations with jet !!! *
+* !!! crossover are selected (Ifr6>=1) with !!! *
+* !!! "a priori" transverse momentum selec- !!! *
+* !!! tion, the meaning of Icrrpt is diffe- !!! *
+* !!! rent (the azimuthal angle is created !!! *
+* !!! "a priori" too) and explained below: !!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* Icrrpt = 0: no correlation *
+* Icrrpt = 1: reorientation of the produced hadron *
+* and the minimal mass remnant such to *
+* minimize the sum of the squared p_t *
+* of both after the transverse boost *
+* to the global chain cms *
+* Icrrpt = 3: reorientation of the produced hadron *
+* and the minimal mass remnant such to *
+* minimize the difference of (vector) *
+* p_t of the two objects after the *
+* transverse boost to the global chain *
+* cms *
+* Note: for final junction hadrons Jfjnpt takes the*
+* precedence over Icrrpt *
+* *
+* Kcrrpt controls possible p_t slope increase factors *
+* for particles carrying the original chain quarks *
+* when transverse momentum is computed "a priori". *
+* Please note that if Kcrrpt is non zero it overrides *
+* Icrrpt for this specific aspect *
+* Kcrrpt = 0: no slope increase *
+* Kcrrpt = 1: slope increase (Q3) for ALL *
+* particles carrying original quarks *
+* Kcrrpt = 2: slope increase (Q3) for the *
+* particles carrying original quarks *
+* but those coming (or following) from *
+* popcorn *
+* Kcrrpt = 3: slope increase (Q3) for the *
+* particles carrying original quarks *
+* but those coming from the final *
+* two-jet junction *
+* Kcrrpt = 4: slope increase (Q3) for the *
+* particles carrying original quarks *
+* but those coming from the final *
+* two-jet junction unless they are the *
+* first of the jet *
+* Kcrrpt = 5: like 2 and 3 together *
+* Kcrrpt = 6: like 2 and 4 together *
+* Ioqrpt controls whether or not an azimuthal reorien- *
+* tation of the p_t of produced hadrons must be perfor-*
+* med such that the p_t of hadrons carrying one or more*
+* of the (anti)quarks belonging to the original chain *
+* ends is reoriented in a special way wrt the global *
+* chain p_t, in case these hadrons are a subset of the *
+* total hadrons produced *
+* Ioqrpt = 0: no reorientation *
+* Ioqrpt = 1: reorientation of all hadrons such to *
+* minimize the total (vector) p_t of *
+* the hadrons with "original" quarks *
+* after the transverse boost due to the*
+* chain intrinsic p_t *
+* Ioqrpt = 2: reorientation of all hadrons such to *
+* minimize the difference of total *
+* (vector) p_t of the hadrons with *
+* "original" quarks and the intrinsic *
+* chain p_t after the transverse boost *
+* due to the chain intrinsic p_t *
+* Ioqrpt = 3: reorientation of all hadrons such to *
+* minimize the difference of (vector) *
+* p_t of two (random) batches of the *
+* hadrons with "original" quarks *
+* after the transverse boost due to the*
+* chain intrinsic p_t *
+* Joqrpt controls whether or not the p_t of hadrons *
+* carrying one or more of the (anti)quarks belonging *
+* to the original chain ends must be reoriented in a *
+* special way wrt the global chain p_t, in case these *
+* hadrons include all produced hadrons *
+* Joqrpt = 0: no reorientation *
+* Joqrpt = 1: reorientation of the hadrons such to *
+* minimize the sum of the squared p_t *
+* of hadrons after the transverse boost*
+* due to the chain intrinsic p_t *
+* Joqrpt = 3: reorientation of the hadrons such to *
+* minimize the difference of (vector) *
+* p_t of two (random) batches of the *
+* hadrons after the transverse boost *
+* due to the chain intrinsic p_t *
+* Jfjrpt controls whether or not an azimuthal reorien- *
+* tation of the p_t of the 2 final junction hadrons *
+* must be performed such that the p_t of these hadrons *
+* is reoriented in a special way in their own cms *
+* system *
+* Jfjnpt = 0: no reorientation *
+* Jfjnpt = 1: reorientation of the hadrons such to *
+* minimize the sum of the squared p_t *
+* of hadrons after the transverse boost*
+* to the global chain cms *
+* Jfjnpt = 3: reorientation of the hadrons such to *
+* minimize the difference of (vector) *
+* p_t of the two hadrons after the *
+* transverse boost to the global chain *
+* cms *
+* Koqrpt controls the way the p_t reduction for hadrons*
+* carrying original quarks is applied for "a priori" *
+* p_t sampling: *
+* Koqrpt = 0: reduction applied to the p_t parame- *
+* ter before sampling *
+* = 1: reduction applied to the sampled *
+* p_t *
+* BETBBJ = BET [GeV]^-1 parameter for quark selection for a(n) *
+* (anti)baryon vertex *
+* BETMBJ = BET [GeV]^-1 parameter for quark selection for a *
+* meson vertex *
+* BETMCH = BET [GeV]^-1 parameter for quark selection for charm *
+* meson production *
+* BETBCH = BET [GeV]^-1 parameter for quark selection for charm *
+* (anti)baryon production *
+* BETMBT = BET [GeV]^-1 parameter for quark selection for *
+* bottom meson production *
+* BETBBT = BET [GeV]^-1 parameter for quark selection for *
+* bottom (anti)baryon production *
+* BETMTP = BET [GeV]^-1 parameter for quark selection for top *
+* meson production *
+* BETBTP = BET [GeV]^-1 parameter for quark selection for top *
+* (anti)baryon production *
+* /E_chain *
+* P(q) = C | 2 E exp[-BET E] dE *
+* /m_q *
+* UQMBMJ = u quark mass (used for flavor selection only) *
+* *
+* DQMBMJ = d quark mass (used for flavor selection only) *
+* *
+* SQMBMJ = s quark mass (used for flavor selection only) *
+* *
+* CQMBMJ = c quark mass (used for flavor selection only) *
+* *
+* BQMBMJ = b quark mass (used for flavor selection only) *
+* *
+* TQMBMJ = t quark mass (used for flavor selection only) *
+* *
+* DIQBMJ = diquark extra mass (used for flavor selection only) *
+* *
+* QRKMSS(1)= u quark mass (used for particle production thresh- *
+* olds only) *
+* QRKMSS(2)= d quark mass (used for particle production thresh- *
+* olds only) *
+* QRKMSS(3)= s quark mass (used for particle production thresh- *
+* olds only) *
+* QRKMSS(4)= c quark mass (used for particle production thresh- *
+* olds only) *
+* QRKMSS(5)= b quark mass (used for particle production thresh- *
+* olds only) *
+* QRKMSS(6)= t quark mass (used for particle production thresh- *
+* olds only) *
+* UUUBMJ = correction to the (anti)diquark extra mass in case *
+* of uuu/ddd (anti)baryons *
+* SUUBMJ = correction to the (anti)diquark extra mass in case *
+* of suu/sdd/sud (anti)hyperons *
+* SSUBMJ = correction to the (anti)diquark extra mass in case *
+* of ssu/ssd (anti)hyperons *
+* SSSBMJ = correction to the (anti)diquark extra mass in case *
+* of sss (anti)hyperons *
+* IE0BMJ = IE0 parameter (energy sharing between the left and *
+* right jets of a chain): Ie0 + Je0 x 10 + Ke0 x 100 *
+* Ie0 = 0: equal energy sharing regardless of the *
+* chain ends *
+* Ie0 = 1: energy sharing according to pseudo- *
+* scalar meson/baryon octet masses *
+* Ie0 = 2: energy sharing according to vector me- *
+* son/baryon decuplet masses *
+* For unequal sharing, given M_right and M_left accor- *
+* ding to IE0: *
+* M_right + 1/2 [E_chain-M_right-M_left], for *
+* E_chain > M_right+M_left *
+* E_right = < E_chain *
+* M_right --------------- for E_chain=< M_right+M_left *
+* M_right + M_left *
+* Je0 = 0: momentum assumed for massless partons *
+* taken as the lowest of the jet energies *
+* calculated according to Ie0) *
+* Je0 = 1: momentum according to pseudoscalar *
+* meson/baryon octet masses *
+* Je0 = 2: momentum according to vector meson/ *
+* baryon decuplet masses *
+* Ke0 =..: not used *
+* ASBAMJ = AS parameter: *
+* Prob [pseudoscalar-meson] *
+* AS = ------------------------------------------- *
+* Prob[pseudoscalar-meson]+Prob[vector-meson] *
+* B8BAMJ = B8 parameter: *
+* Prob [(a)baryon-octet] *
+* B8 = --------------------------------------------- *
+* Prob[(a)baryon-octet]+Prob[(a)baryon-decuplet] *
+* P1BAMJ = P1 parameter: *
+* Prob [(a)baryon-I=0] *
+* P1 = --------------------------------------------- *
+* Prob[(a)baryon-I=0]+Prob[(a)baryon-I=1] *
+* P2BAMJ = P2 parameter: *
+* Prob [meson-I=0] *
+* P2 = --------------------------------------------- *
+* Prob[meson-I=0]+Prob[meson-I=1] *
+* ESTBMJ = EST parameter: *
+* Prob [eta*] *
+* EST = --------------------------------------------- *
+* Prob[eta*]+Prob[eta] *
+* IKMBMJ = IKM parameter, it controls the selection of the mini-*
+* mum mass hadron in case of missing energy for that *
+* one selected according to B8 and AS *
+* Ikm <10: Ikm trials are allowed when putting *
+* together the right and left jets in *
+* order to select hadron(s0 in such a way *
+* to comply with the available energy *
+* Ikm>=10: check anyway the possibility of select- *
+* ing the minimum mass hadron(s) when *
+* putting together the right and left *
+* jets (Verein routine) *
+* Ikm>=20: check anyway the possibility of select- *
+* ing the minimum mass hadron when *
+* hadronizing one of the jet in Bamjev *
+* the remaining energy is < M_selected *
+* DIQBMJ = diquark (extra) mass factor (used for flavor selec- *
+* tion only *
+* POPBMJ = POP parameter used to determine the Popcorn probabi- *
+* lity *
+* POLWBJ = POLW parameter used to control the Popcorn probabi- *
+* lity al low chain energies *
+* POPEBJ = POPE [GeV] energy scale parameter setting the scale *
+* for the low energy behaviour of the Popcorn parameter*
+* q-aq chains: *
+* Prob(popcorn) = 1 - POP *
+* (a)q-(a)q(a)q chains: *
+* Max [0,E_chain-POPE] *
+* Prob(popcorn) = 1-POLW - [POP-POLW] ------------------- *
+* E_chain *
+* (a)q(a)q-(a)q(a)q chains: *
+* Max [0,E_chain-2 POPE]*
+* Prob(popcorn) = 1-POLW - [POP-POLW] ------------------- *
+* E_chain *
+* POPSBJ = like Popbmj, but for s quarks, the use of Polwbj and *
+* Popebj is the same *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* !!!!! Please note that it would be more consistent !!!!! *
+* !!!!! with the concept of independent chain whose !!!!! *
+* !!!!! hadronization depends only on current energy !!!!! *
+* !!!!! and flavor ends, to make P(Popcorn) depend- !!!!! *
+* !!!!! ent on the current jet residual energy rath- !!!!! *
+* !!!!! er than on the initial chain energy !!!!! *
+* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *
+* IPPBMJ = IPP parameter controlling the behaviour at very low *
+* energies of dijet chains and other popcorn related *
+* business. For q-qq,aq-aqaq, Ipp controls a sort of *
+* "a priori" popcorn, for the others it is a sort of *
+* random swap. *
+* Ippbmj = Ipp + Jpp x 10 + Kpp x 100 + Lpp x 1000 *
+* + Mpp x 10000 + Npp x 100000 *
+* + Ipc x 1000000 *
+* Ipp = 0: no change *
+* = odd : Popcorn change according to pseudo- *
+* scalar meson/baryon octet masses *
+* = even: Popcorn change according to vector *
+* meson/baryon decuplet masses *
+* = 1,2 : Popcorn/swap applied to (a)q-(a)q(a)q*
+* only *
+* = 3,4 : Popcorn/swap applied to (a)q-(a)q(a)q*
+* and q-aq only *
+* = 5,6 : Popcorn/swap applied to (a)q-(a)q(a)q*
+* and aqaq-qq only *
+* = 7,8 : Popcorn/swap applied to (a)q-(a)q(a)q*
+* q-aq and aqaq-qq *
+* Jpp = 0: fragmentation parameters for mesons *
+* used for popcorn meson production *
+* (those for non (valence) chain end *
+* mesons) *
+* = 1: fragmentation parameters for (anti)bar- *
+* yons used for popcorn meson production *
+* (those for (valence) chain ends (anti-) *
+* baryons if the original (anti)diquark is*
+* a (valence) chain end one) *
+* = 2: fragmentation parameters for chain end *
+* (valence) mesons used for popcorn meson *
+* production (those for (valence) chain *
+* ends if the original (anti)diquark is a *
+* (valence) chain end one) *
+* = 3: like 1, but 50% randomly wrt 0 *
+* = 4: like 2, but 50% randomly wrt 0 *
+* Kpp = 0: no change to the popcorn probability *
+* = 1: the popcorn probability is zeroed if the*
+* cut-off energy coming from Abbrch, when *
+* increased for 2 m_u/m_d masses is larger*
+* than the available energy. The quark *
+* masses are (possibly) reduced according *
+* to the Im0 option. The available energy *
+* is taking or not into account the other *
+* jet quark masses and energy according *
+* to Lm0flg *
+* = 2: the popcorn probability is checked *
+* against a carefully computed threshold *
+* including also the other jet energy *
+* and quarks. Meaningful mainly for *
+* Ifr6 = 1. *
+* Lpp = 0: when making "a priori" popcorn (see *
+* below) the (new) diquark is going in *
+* the opposite direction wrt the old one *
+* = 1: when making "a priori" popcorn (see *
+* below) the (new) diquark is going in *
+* the opposite direction wrt the old one *
+* for 50% of the cases *
+* = 2: when making "a priori" popcorn (see *
+* below) the (new) diquark is going in *
+* the opposite direction wrt the old one *
+* for m_q1/(m_q1+m_q3) of the cases *
+* Mpp = 0: no change to the popcorn probability *
+* = 1: the popcorn probability is used inside *
+* Abbrch to select a reduced threshold *
+* according to popcorn chance in case the *
+* option with quark masses is used *
+* = 2: like the previous one but with unit *
+* probability for the first particle, that*
+* is if no hadronization is possible but *
+* for popcorn, popcorn is always selected *
+* Npp = 0: no change to the popcorn probability *
+* = 1: if popcorn is selected and eta_popcorn *
+* (Epcbmj) is not null, the probability of*
+* selecting a xxbar different from uubar/ *
+* ddbar is weighted by: *
+* exp[-eta_pop(m_qx-m_qu)] *
+* where q is the current (anti)quark used *
+* to form the meson *
+* = 2: during popcorn selection, if the current*
+* (anti)quark q possibly used to form the *
+* meson is not a u(bar)/d(bar), the pop- *
+* corn selection for this (anti)quark is *
+* weighted by exp[-eta_pop(m_uq-m_uu)] *
+* = 3: as 2 and 3 together *
+* Ipc = 0: if eta_popcorn is not null it is applied*
+* to all popcorn verteces, including those*
+* originating from valence (anti)diquarks *
+* = 1: eta_popcorn not applied (set =0) to *
+* popcorn verteces originating from va- *
+* lence (anti)diquark *
+* = 2: eta_popcorn not applied (set =0) to *
+* popcorn verteces originating from va- *
+* lence (anti)diquark, and popcorn prob- *
+* ability for these verteces rescaled *
+* times exp[eta_pop m_pi] *
+* = 3: like 1 but eta_popcorn still applied to *
+* popcorn verteces originating from va- *
+* lence (anti)diquark for charm only *
+* = 4: like 2 but eta_popcorn still applied to *
+* popcorn verteces originating from va- *
+* lence (anti)diquark for charm only *
+* Suppose the current popcorn probability (for q-qq, *
+* aq-aqaq) or swap probability (for the other dijets, *
+* assumed 1/2 anyway) as resulting from the previous *
+* parameters is 1-POC, then: *
+* given M_right and M_left according to IPP: *
+* 1-POC for E_chain=< M_right+M_left+2 Eextr*
+* Prob(q-swap)= < (E_chain-M_right-M_left)/2Eextr *
+* [1-POC] for E_chain=< M_right+M_left+2 Eextr*
+* / Tm0 , for Tm0 > 0 *
+* Eextr= *
+* \ m_pi, for Tm0 =<0 *
+* then with Prob(q-swap) the (a)q is swapped randomly *
+* and direction reversed, *
+* so, for a q1-q2q3 chain we change from: *
+* <--- q2 *
+* <--- q3 *
+* q1 ---> *
+* to (and symmetric with 3 swapped): *
+* <--- q2 *
+* q3 ---> *
+* q1 ---> *
+* which swap is a "a-priori" popcorn, the probability *
+* for popcorn is then changed into [1-POC]-Prob(q-swap)*
+* While for a q-aq chain: *
+* <--- aq *
+* q ---> *
+* to: *
+* <--- q *
+* aq ---> *
+* PSSBMJ = PSS probability for creating a ssbar couple from the *
+* projectile hadron or a target nucleon with respect *
+* to P(uubar)=P(ddbar)=1 for very large energies *
+* DSSBMJ = DSS mass scale [GeV/c^2] for modifying PSS at low *
+* energies *
+* PSS_eff = PSS 2/pi Atan [(E_qqbar-M_phi)/DSS] *
+* PCCBMJ = PCC probability for creating a ccbar couple from the *
+* projectile hadron or a target nucleon with respect *
+* to P(uubar)=P(ddbar)=1 for very large energies *
+* DCCBMJ = DCC mass scale [GeV/c^2] for modifying PCC at low *
+* energies *
+* PCC_eff = PCC 2/pi Atan [(E_qqbar-M_J/psi)/DCC] *
+* ISUBMJ = ISU flag for controlling flavor creation *
+* Isu = 1: only u(bar) quarks permitted in the *
+* chain hadronization process *
+* Isu = 2: u(bar)/d(bar) quarks permitted in the *
+* chain hadronization process *
+* Isu = 3: u(bar)/d(bar)/s(bar) permitted in the *
+* chain hadronization process *
+* Isu = 4: u(bar)/d(bar)/s(bar)/c(bar) permitted *
+* in the chain hadronization process *
+* Isu = 5: u(bar)/d(bar)/s(bar)/c(bar)/b(bar) *
+* permitted in the chain hadronization *
+* process *
+* Isu = 6: u(bar)/d(bar)/s(bar)/c(bar)/b(bar)/ *
+* t(bar) permitted in the chain hadroni- *
+* zation process *
+* IUDBMJ = IUD parameter controlling isospin modifications to *
+* flavor selection *
+* Iudbmj = Iud + Jud x 10 *
+* Iud = 0: no change *
+* = 1: isospin changes applied both to meson *
+* and (anti)baryon verteces (but for *
+* baryon ones they are not fully correct) *
+* = 2: isospin changes applied to meson ver- *
+* teces only *
+* Jud = 0: popcorn treated like a normal meson *
+* vertex *
+* = 1: no isospin change applied to popcorn *
+* verteces *
+* = 2: isospin applied to popcorn verteces *
+* considering the original (anti)diquark *
+* (then depending on Iud it makes some- *
+* thing or not) *
+* = 3:(hopefully) full treatment of isospin for*
+* popcorn verteces *
+* ITCHBJ = flag for t-dependent chain intrinsic p_t *
+* ICHBMJ = flag for s-dependent charm selection probability *
+* Bet(m/b)ch(s) = Bet(m/b)c_0 - Betpch *
+* x log10 (s_chain/1 GeV) *
+* BETPCH = see above *
+* CH3BMJ = multiplicative factor for B3 for charmed had./quarks *
+* B0CHBJ = the slope for the t-dependent chain intrinsic p_t *
+* is given by B0 + B'log(s^2/M^2_ch1/M^2_ch2) *
+* where B0 and B' are given by B0CHBJ and BPCHBJ *
+* BPCHBJ = see above *
+* C0CHBJ = the curvature for the t-dependent chain intrinsic p_t*
+* is given by C0 + C'log(s^2/M^2_ch1/M^2_ch2) *
+* where C0 and C' are given by C0CHBJ and CPCHBJ *
+* CPCHBJ = see above *
+* *
+*----------------------------------------------------------------------*
+*
+* Probability of having a I=1 u(bar)d(bar) diquark when originating
+* from a p(bar)/n(bar):
+ PARAMETER ( PRNUD1 = ONETHI )
+* Probability of having a I=0 u(bar)d(bar) diquark when originating
+* from a p(bar)/n(bar):
+ PARAMETER ( PRNUD0 = ONEONE - PRNUD1 )
+* Probability of having a I=1 generic u(bar)d(bar) diquark
+ PARAMETER ( PRBUD1 = HLFHLF )
+* Probability of having a I=0 generic u(bar)d(bar) diquark
+ PARAMETER ( PRBUD0 = ONEONE - PRBUD1 )
+*
+ COMMON /INPDAT/ A1VBBJ, A1VMBJ, A1OBBJ, A1OMBJ, A1BBMJ, A1MBMJ,
+ & AMEBAM, AVBBMJ, AVMBMJ, AOBBMJ, AOMBMJ, ANBBMJ,
+ & ANMBMJ, BVBBMJ, BVMBMJ, BOBBMJ, BOMBMJ, BZBBMJ,
+ & BZMBMJ, EPCBMJ, B1BAMJ, B2BAMJ, C1BAMJ, C2BAMJ,
+ & D12BMJ, B1SBMJ, B2SBMJ, B1DBMJ, B2DBMJ, B3BAMJ,
+ & C3BAMJ, D3BAMJ, E3BAMJ, F3BAMJ, Q3BAMJ, T3BAMJ,
+ & P3BAMJ, R3BAMJ, S3BAMJ, BETMBJ, BETBBJ, BETMCH,
+ & BETBCH, BETMBT, BETBBT, BETMTP, BETBTP, ASBAMJ,
+ & B8BAMJ, P1BAMJ, P2BAMJ, ESTBMJ, DIQBMJ, POPBMJ,
+ & POLWBJ, POPEBJ, POPSBJ, PSSBMJ, DSSBMJ, PCCBMJ,
+ & DCCBMJ, PVCBMJ, UQMBMJ, DQMBMJ, CQMBMJ, SQMBMJ,
+ & BQMBMJ, TQMBMJ, QRKMSS (0:6), DM0BMJ, FM0BMJ,
+ & RM0BMJ, SM0BMJ, BM0BMJ, EM0BMJ, TM0BMJ, UR0BMJ,
+ & DR0BMJ, SR0BMJ, UUUBMJ, SUUBMJ, SSUBMJ, SSSBMJ,
+ & B0CHBJ, BPCHBJ, C0CHBJ, CPCHBJ, CH3BMJ, BETPCH,
+ & IMPS (6,6), IMVE (6,6), IB08 (6,21),
+ & IB10 (6,21), IA08 (6,21), IA10 (6,21),
+ & LTBAMJ, LEBAMJ, ISUBAM, IPTBMJ, I3BAMJ, IE0BMJ,
+ & IUDBMJ, IKMBMJ, IPPBMJ, IFRBMJ, IM0BMJ, IVLBMJ,
+ & IQQBMJ, ITCHBJ, ICHBMJ
+
--- /dev/null
+*$ CREATE IOUNIT.ADD
+*COPY IOUNIT
+* *
+*=== iounit ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Iounit: included in any routine *
+* *
+* Created on 01 june 1990 by Alfredo Ferrari, INFN -Milan *
+* *
+* Last change on 20-jan-99 by Alfredo Ferrari *
+* *
+* lunin = standard input unit *
+* lunout = standard output unit *
+* lunerr = standard error unit *
+* lunber = input file for bertini nuclear data *
+* lunech = echo file for pegs dat *
+* lunflu = input file for photoelectric edges and X-ray fluo- *
+* rescence data *
+* lungeo = scratch file for combinatorial geometry *
+* lunpmf = input file for pegs material data *
+* lunran = output file for the final random number seed *
+* lunxsc = input file for low energy neutron cross sections *
+* lundet = output file for the detect option *
+* lunray = output file for ray-tracing options *
+* lunrdb = unit number for reading (extra) auxiliary external *
+* files to be closed just after reading *
+* lunrd2 = unit number for reading (extra) auxiliary external *
+* files to be closed just after reading *
+* lunscr = unit number to be used for temporary scratch files *
+* lunpgo = output file for plotgeom *
+* lunpgs = store (formatted/unformatted) file for plotgeom *
+* *
+*----------------------------------------------------------------------*
+* *
+ PARAMETER ( LUNIN = 5 )
+* Start_VAX_seq
+* PARAMETER ( LUNOUT = 6 )
+* End_VAX_seq
+* Start_IBM_seq
+* PARAMETER ( LUNOUT = 6 )
+* End_IBM_seq
+* Start_UNIX_seq
+ PARAMETER ( LUNOUT = 11 )
+* End_UNIX_seq
+ PARAMETER ( LUNERR = 15 )
+ PARAMETER ( LUNBER = 14 )
+ PARAMETER ( LUNECH = 8 )
+ PARAMETER ( LUNFLU = 13 )
+ PARAMETER ( LUNGEO = 16 )
+ PARAMETER ( LUNPMF = 12 )
+ PARAMETER ( LUNRAN = 2 )
+ PARAMETER ( LUNXSC = 9 )
+ PARAMETER ( LUNDET = 17 )
+ PARAMETER ( LUNRAY = 10 )
+ PARAMETER ( LUNRDB = 1 )
+ PARAMETER ( LUNRD2 = 18 )
+ PARAMETER ( LUNPGO = 7 )
+ PARAMETER ( LUNPGS = 4 )
+ PARAMETER ( LUNSCR = 3 )
+
--- /dev/null
+*$ CREATE ISOTOP.ADD
+*COPY ISOTOP
+*
+*=== isotop ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* *
+* Created on 23 september 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 17-dec-96 by Alfredo Ferrari *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* Isondx = Initial and final indexes in the abuiso and isomnm *
+* for a given atomic number *
+* Isomnm = Mass numbers of the isotopes *
+* Abuiso = Natural abundances of the isotopes *
+* Astlin(1,iz) = "average" A of the stability line versus the *
+* atomic number Z *
+* Astlin(2,iz) = Dispersion of A of the stability line versus *
+* the atomic number Z *
+* Zstlin(1,ia) = "average" Z of the stability line versus the *
+* mass number A *
+* Zstlin(2,ia) = Dispersion of Z of the stability line versus *
+* the mass number A *
+* Amssst(iz) = Atomic weight of iz_th element according to *
+* the tabulated mass tables *
+* Waps (ia,iz) = Atomic excess mass (MeV), for mass number Ia *
+* and atomic number given by Z = Z_start+Iz-1, *
+* where Z_start is stored into Inwaps (ia) *
+* T12nuc(ia,iz) = Half-life (s) for mass number Ia and Z like *
+* for Waps *
+* Brdecy(ia,iz) = Branching ratio for the first decay channel, *
+* for mass number Ia and Z like for Waps *
+* Jspnuc(ia,iz) = Spin (hbar/2 units) for mass number Ia and Z *
+* like for Waps *
+* Jptnuc(ia,iz) = Parity for mass number Ia and Z like for Waps *
+* Idcnuc(k,ia,iz) = k_th (k=1,2) decay channel for mass number Ia *
+* and Z like for Waps *
+* Wapism (ism) = Atomic excess mass (MeV) of the ism_th isomer *
+* T12ism (ism) = Half-life (s) of the ism_th isomer *
+* Wapism (ism) = Atomic excess mass of the ism_th isomer *
+* Bdcism (ism) = Branching ratio for the first decay channel *
+* of the ism_th isomer *
+* Jspism (ism) = Spin (hbar/2 units) of the ism_th isomer *
+* Jptism (ism) = Parity (hbar/2 units) of the ism_th isomer *
+* Idcism(k,ism) = k_th (k=1,2) decay channel for the ism_th *
+* isomer *
+* Inwism (ia) = (Cumulative) number of isomers with mass *
+* number =< Ia *
+* IdcydA (j) = Delta-A for the j_th type decay channel *
+* IdcydZ (j) = Delta-Z for the j_th type decay channel *
+* *
+* Decay channel index: *
+* *
+* -1: Unknown *
+* 0: Stable *
+* 1: IT Internal Transition *
+* 2: A Alpha *
+* 3: N Neutron emission *
+* 4: P Proton emission *
+* 5: 2P Proton + Proton emission *
+* 6: 12C 12-C emission *
+* 7: 14C 14-C emission *
+* 8: B+ Beta+ *
+* 9: EC Electron Capture *
+* 10: ECP Electron Capture + Proton *
+* 11: ECA Electron Capture + Alpha *
+* 12: EC2P Electron Capture + Proton + Proton *
+* 13: EC2A Electron Capture + Alpha + Alpha *
+* 14: ECF Electron Capture + Fission *
+* 15: B- Beta- *
+* 16: B-N Beta- + Neutron *
+* 17: B-A Beta- + Alpha *
+* 18: B-2N Beta- + Neutron + Neutron *
+* 19: B-NA Beta- + Neutron + Alpha *
+* 20: B-2A Beta- + Alpha + Alpha *
+* 21: B-B- Beta- + Beta- *
+* 22: SF Spontaneous Fission *
+* *
+*----------------------------------------------------------------------*
+*
+* PARAMETER ( NAMSMX = 250 )
+* PARAMETER ( NZGVAX = 10 )
+*
+ PARAMETER ( NAMSMX = 270 )
+ PARAMETER ( NZGVAX = 16 )
+* Maximum number of isomers:
+ PARAMETER ( NISMMX = 591 )
+* Maximum number of types of decay channels:
+ PARAMETER ( NDCYMX = 22 )
+ COMMON / ISOTOP / WAPS (NAMSMX,NZGVAX), T12NUC (NAMSMX,NZGVAX),
+ & BRDECY (NAMSMX,NZGVAX), WAPISM (NISMMX),
+ & T12ISM (NISMMX), BRDISM (NISMMX),
+ & ABUISO (NSTBIS), ASTLIN (2,100), ZSTLIN (2,260),
+ & AMSSST (100) , ISOMNM (NSTBIS), ISONDX (2,100),
+ & JSPNUC (NAMSMX,NZGVAX), JPTNUC (NAMSMX,NZGVAX),
+ & IDCNUC (2,NAMSMX,NZGVAX), INWAPS (NAMSMX),
+ & JSPISM (NISMMX), JPTISM (NISMMX),
+ & IDCISM (2,NISMMX), IZWISM (NISMMX),
+ & INWISM (0:NAMSMX), IDCYDZ (NDCYMX),
+ & IDCYDA (NDCYMX)
+ COMMON / CHISTP / CHDECY (NDCYMX)
+ CHARACTER CHDECY*5
+
--- /dev/null
+*$ CREATE KAXSCM.ADD
+*COPY KASXCM
+*
+*=== Kaxscm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 12 january 2000 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 16-sep-00 by Alfredo Ferrari *
+* *
+* Xskpnc (i,k,n) = xsec for K+ N (mb), i is the momentum index, *
+* k the reaction index (1=el.,2=ine.), n the *
+* nucleon index (1=p,2=n) *
+* Xskmnc (i,k,n) = xsec for K- N (mb), i is the momentum index, *
+* k the reaction index (1=el.,2=ine.), n the *
+* nucleon index (1=p,2=n) *
+* Xsklnc (j,k,n) = xsec for KlongN (mb), j is the momentum index,*
+* k the reaction index (1=el.,2=ine.,3=reg.), *
+* n the nucleon index (1=p,2=n) *
+* Pkpmnc (i) = momenta (GeV/c) for K+/- N xsecs *
+* Pklonc (j) = momenta (GeV/c) for Klong N xsecs *
+* Pkpmax (l) = momenta (GeV/c) for K+/- A xsecs *
+* Pkloax (l) = momenta (GeV/c) for Klong A xsecs *
+* Akaxsc (m) = atomic weights for K's A xsecs *
+* A23kxs (m) = (atomic weights)^2/3 for K's A xsecs *
+* Xskpla (l,k,m) = xsec for K+ A (mb), l is the momentum index, *
+* k the reaction index (1=el.,2=ine.), m the *
+* target nucleus index *
+* Xskmia (l,k,m) = xsec for K- A (mb), l is the momentum index, *
+* k the reaction index (1=el.,2=ine.), m the *
+* target nucleus index *
+* Xskloa (l,k,m) = xsec for KlongA (mb), l is the momentum index,*
+* k the reaction index (1=el.,2=ine.,3=reg.), *
+* m the target nucleus index *
+* *
+* *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / KAXSCM / XSKPNC (6,2,2), XSKMNC (6,2,2), XSKLNC (7,3,2),
+ & PKPMNC (6), PKLONC (7), PKPMAX (10),
+ & PKLOAX (11), AKAXSC (7), A23KXS (7),
+ & XSKPLA (10,2,7), XSKMIA (10,2,7),
+ & XSKLOA (11,3,7)
+
--- /dev/null
+*$ CREATE LABCOS.ADD
+*COPY LABCOS
+* *
+*=== labcos ===========================================================*
+* *
+ COMMON /LABCOS/ COSLBP(3),COSLBR(3)
+
--- /dev/null
+*$ CREATE LANDAU.ADD
+*COPY LANDAU
+*
+*=== landau ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: landau (version for Fluka95 on) *
+* *
+* Created on 12 december 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 24-apr-97 by Alfredo Ferrari INFN-Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of variable(s) *
+* *
+* Landfl (m) = logical flag for restricted Landau fluctua- *
+* tions for the m_th Fluka medium for hadrons *
+* and muons *
+* Landhl (m) = logical flag for restricted Landau fluctua- *
+* tions for the m_th Fluka medium for EM par- *
+* ticles *
+* Ilvlfl = Cumulant level for restricted Landau fluct- *
+* uations for the m_th Fluka medium for hadr- *
+* ons and muons *
+* Ilvlhl = Cumulant level for restricted Landau fluct- *
+* uations for the m_th Fluka medium for EM *
+* particles *
+* Nerflk = Ermilova max term for restricted Landau fl- *
+* uctuations for the m_th Fluka medium for *
+* hadrons and muons *
+* Nerhlp = Ermilova max term for restricted Landau fl- *
+* uctuations for the m_th Fluka medium for EM *
+* particles *
+* Nkdgfl = K-edge max term for restricted Landau fl- *
+* uctuations for the m_th Fluka medium for *
+* hadrons and muons *
+* Nkdghl = K-edge max term for restricted Landau fl- *
+* uctuations for the m_th Fluka medium for EM *
+* particles *
+* *
+*----------------------------------------------------------------------*
+*
+* Fix to 7% the maximum energy loss in a (single) Landau/Vavilov step
+ PARAMETER ( ESTLAN = 0.07D+00 )
+ LOGICAL LANDFL, LANHLP, LANDA
+ COMMON / LANDAU / LANDFL (MXXMDF), LANHLP (MXXMDF), LANDA ,
+ & ILVLFL, ILVLHL, NERFLK, NERHLP, NKDGFL, NKDGHL
+
--- /dev/null
+*$ CREATE LBRCTR.ADD
+*COPY LBRCTR
+*
+*=== lbrctr ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* from/to LaBoratory to/from ReaCtion frame TRansformation *
+* *
+* Created on 18 february 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 29-dec-92 by Alfredo Ferrari *
+* *
+* Rrlfij = Rij rotation matrix for going from the reaction *
+* to the lab frame *
+* Rlrfij = R'ij rotation matrix for going from the lab to the *
+* reaction frame, of course R'ij=R-1ij *
+* U,V,Wangmo = direction cosines of the angular momentum in the *
+* lab frame (0,0,1 in the reaction frame) *
+* (uangmo=sinthaxcospha,vangmo=sinthaxsinpha,wangmo=costha)*
+* Rgiven = r of the given point *
+* Phigvn = phi of the given point *
+* Pgiven = momentum module at the given point *
+* Pphgvn = phi component of the momentum at the given point *
+* Pprgvn = r component of the momentum at the given point *
+* Phpgvn = phi of the momentum at the given point *
+* Egiven = Energy at the given point *
+* Vgiven = Potential at the given point *
+* Bgiven = impact parameter at the given point *
+* Cosgvn = cos (phigvn) *
+* Singvn = sin (phigvn) *
+* Cspgvn = cos (pphgvn) *
+* Snpgvn = sin (pphgvn) *
+* Angmom = angular momentum modulus *
+* Ppat00 = initial projectile momentum *
+* Epat00 = initial projectile total energy *
+* Biat00 = impact parameter at oo *
+* Phia00 = initial position angle *
+* Phpa00 = initial momentum angle *
+* Csph00 = cos (phpa00) *
+* Snph00 = sin (phpa00) *
+* Note that: *
+* cos (phia00) = cos (phpa00-pi) = - cos (phpa00) = - csph00 *
+* sin (phia00) = sin (phpa00-pi) = - sin (phpa00) = - snph00 *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( COUCST = COUGFM )
+ PARAMETER ( RPLABC = PLABRC )
+*
+ COMMON / LBRCTR / RRLF11, RRLF12, RRLF13, RRLF21, RRLF22, RRLF23,
+ & RRLF31, RRLF32, RRLF33, UANGMO, VANGMO, WANGMO,
+ & SINTA2, SINTHA, SINPHA, COSPHA, PGIVEN, PHPGVN,
+ & EGIVEN, VGIVEN, RGIVEN, BGIVEN, PHIGVN, PPAT00,
+ & PHPA00, EPAT00, BIAT00, PHIA00, COULPT, ANGMOM,
+ & PPHGVN, PPRGVN, PPHA00, PPRA00, COSGVN, SINGVN,
+ & CSPGVN, SNPGVN, CSPH00, SNPH00
+ EQUIVALENCE ( RLRF11, RRLF11 )
+ EQUIVALENCE ( RLRF12, RRLF21 )
+ EQUIVALENCE ( RLRF13, RRLF31 )
+ EQUIVALENCE ( RLRF21, RRLF12 )
+ EQUIVALENCE ( RLRF22, RRLF22 )
+ EQUIVALENCE ( RLRF23, RRLF32 )
+ EQUIVALENCE ( RLRF31, RRLF13 )
+ EQUIVALENCE ( RLRF32, RRLF23 )
+ EQUIVALENCE ( RLRF33, RRLF33 )
+ EQUIVALENCE ( COSTHA, WANGMO )
+
--- /dev/null
+*$ CREATE LI6PWX.ADD
+*COPY LI6PWX
+*
+*=== Li6pwx ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Li-6 Point-Wise Xsec common: *
+* *
+* Created on 27 may 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 26-mar-99 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Ekei1h (i) = initial kinetic energy (GeV) of the i_th *
+* tabulation range *
+* Elni1h (i) = natural logarithm of the initial kinetic *
+* energy (GeV) of the i_th tabulation range *
+* Dlni1h (i) = constant difference in the natural logarithm *
+* of the initial kinetic energy (GeV) of the *
+* i_th tabulation range *
+* Seln1h (j) = natural logarithm of the n 1-H elastic cross *
+* section at the j_th energy point *
+* Sabn1h (j) = natural logarithm of the n 1-H absorption *
+* cross section at the j_th energy point *
+* Clg21h (k,l) = l_th Legendre coefficient for the n 1-H *
+* elastic scattering angular distribution *
+* at the k_th energy point of the 2nd tabulation*
+* range *
+* Clg31h (k,l) = l_th Legendre coefficient for the n 1-H *
+* elastic scattering angular distribution *
+* at the k_th energy point of the 3rd tabulation*
+* range *
+* Npoi1h (i) = number of energy points of the i_th tabulation*
+* range *
+* Nlgi1h (i) = number of Legendre coeff. of the i_th tabula- *
+* tion range *
+* Nene1h = number of tabulation energy ranges *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / LI6PWX / EKE6LI (2) , ELN6LI (2) , DLN6LI (2) ,
+ & STT6LI (201) , STR6LI (201) , SPR6LI (201) ,
+ & SEL6LI (201) , SAB6LI (201) , CLE6LI (101,6),
+ & CLT6LI (101,6), BLI671 , ELI6NP ,
+ & NPO6LI (2) , NLG6LI (2) , NEN6LI
+
--- /dev/null
+*$ CREATE LNPWCG.ADD
+*COPY LNPWCG
+*
+*=== Lnpwcg ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Low energy Neutron Point-Wise Capture Gammas: *
+* *
+* Created on 27 may 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 12-apr-01 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Qpwsgc(i) = capture Q (virtual level) for the i_th point- *
+* wise capture gamma data set *
+* Expwgc(i) = maximum neutron energy up to which the i_th *
+* pointwise capture gamma data set can be used *
+* Kbgpwg(i) = starting location in the special common (0 *
+* address) for the i_th pointwise capture gamma *
+* data set *
+* Iazpwg(i) = isomer code for the i_th pointwise capture *
+* gamma data set *
+* Idpwgc(i) = index for a possible direct transition for the*
+* pointwise capture gamma data set *
+* Nmpwgc = number of defined pointwise cross section *
+* data sets *
+* Klpwgc = last used element in the Gwgcst array *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXPWGC = 1000 )
+*
+ COMMON / LNPWCG / GWGCST (MXPWGC), QPWSGC (MXXMDF),
+ & EXPWGC (MXXMDF), KBGPWG (MXXMDF), IAZPWG (MXXMDF),
+ & IDPWGC (MXXMDF), NMPWGC, KLPWGC
--- /dev/null
+*$ CREATE LOCSIG.ADD
+*COPY LOCSIG
+*
+*=== locsig ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Memory addresses for low energy neutron cross sections: *
+* *
+* ALL THE ADDRESSES ARE FOR INDEX OF ZERO !!!!!!!!!!!!!!!!!!! *
+* *
+* Istart = starting location for the total cross-section *
+* vector for the first medium (absolute address!!) *
+* *
+* Iscang = starting location for the array of the primary *
+* scattering angle matrix (absolute address!!) *
+* *
+* Ifspog = starting location of the primary downscatter *
+* probability matrix (absolute address!!) *
+* *
+* Ings = starting location of the indices for starting *
+* location of the downscatter vector for each *
+* group of primary particles (absolute address!!) *
+* *
+* Innn = starting location for the array of the number of *
+* downscatter groups for each primary group *
+* (absolute address!!) *
+* *
+* Iprbng = starting location of the primary scattering *
+* angle probability matrix (absolute address!!) *
+* *
+* Ifngp = starting location for the primary-secondary *
+* transfer probability matrix (absolute address!!) *
+* *
+* Isporg = size of storage needed for each medium *
+* *
+* Inabog = starting location for the non-absorption vector *
+* for the first medium (absolute address!!) *
+* *
+* Igabog = starting location for the gamma-ray production *
+* vector for the first medium (absolute address!!) *
+* *
+* Nsct = number of discrete angles *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON/LOCSIG/ISTART,ISCCOG,INABOG,IGABOG,IFPORG,IFNGP,IFSPOG,
+ 1 IDSGOG,IPRBNG,IPRBGG,ISCANG,ISCAGG,ISPORG,ISPORT,INPBUF,
+ 2 ISIGOG,INFPOG,IABSOG,ITOTSG,NGP,NDS,NGG,NDSG,INGP,INDS,
+ 3 NMED,NELEM,NMIX,NCOEF,NSCT,NTS,NTG,NDSNGP,NDSNGG,IADJ,
+ 4 NME,LOC,INGS,INSG,I1,I0, KKK,IXTAPE,IDEL,ITEML,ITEMG,IRSG,
+ 5 IRDSG,ISTR,IPRIN,IFMU,IMOM,IDTF,ISTAT,IPUN
+ 6 ,NUS,NGN,IHT,INUS,INUSN,INGN,INGNP,INNN,IGGG
+
--- /dev/null
+*$ CREATE LOWNEU.ADD
+*COPY LOWNEU
+*
+*=== lowneu ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created by Alfredo Ferrari on 6 july 1990 *
+* *
+* Last change on 27-may-97 by Alfredo Ferrari, INFN - Milan *
+* *
+* Lowneu: contains data for the low energy neutron transport *
+* *
+* Included in the following routines: *
+* *
+* Bdnopt *
+* Blnset *
+* Deflts *
+* Epilog *
+* Eveneu *
+* Fluka *
+* Kasneu *
+* Lowres *
+* Lowset *
+* Nsigta *
+* Prolog *
+* Usrbdx *
+* Usrtrk *
+* Usrcll *
+* Xsprnt *
+* Xsread *
+* Zeroin *
+* *
+* Description of the variables: *
+* *
+* Igrthn = number of thermal neutron groups, the groups from *
+* Nmgp - Igrthn + 1 up to Nmgp are considered to be *
+* thermal ones. After initialization it is transfor-*
+* med into the absolute group index of the first *
+* thermal group, that is, Nmgp - Igrthn + 1 *
+* Tmrtln (im) = Temperature ratio with respect to the nominal one *
+* for FLUKA medium im *
+* Tmnmln (im) = Nominal temperature for FLUKA medium im *
+* Igtmrt (im) = First (thermal) group where to apply Tmrtln (must *
+* be such that it is not larger than Nmgp to be *
+* meaningful) for FLUKA medium im. After initializa-*
+* tion it is transformed in absolute group number *
+* Vllnth (ig,im) = Velocity (cm/s) for ig_th thermal group for im_th *
+* FLUKA medium (im=0 means reference 293 K) *
+* This is the average over dN_Maxwell/dv which over *
+* [0,oo) gives v_0 x 2 / sqrt(pi), where v_0 is gi- *
+* ven by: v_0 = sqrt(2KT/m) x c_light *
+* Enlnth (ig,im) = Kinetic energy (GeV) for ig_th thermal group for *
+* the reference 293 K temperature. *
+* This is the average over dN_Maxwell/dE which over *
+* [0,oo) gives 3/2 KT, where the average on the flux*
+* is given by KT *
+* Ablnth (ig,im) = Absorption (and gamma generation) modifying factor*
+* for ig_th thermal group for im_th FLUKA medium *
+* Stlnth (ig,im) = Total cross section modifying factor for ig_th *
+* thermal group for im_th FLUKA medium *
+* Icnmed(mm) = Continuos energy index for the mm_th Morse *
+* medium (if any, =<0 means no information) *
+* Klnrnc(mm) = starting location (0 index) in blank common of *
+* residual nuclei informations for the mm_th Morse *
+* medium (if any, <0 means no information) *
+* Ipwsgc(mm) = index of a (possible) pointwise capture gamma data*
+* set for the mm_th Morse medium (if any, =0 means *
+* no information) *
+* Fnadef = default non-analogue absorption factor to be *
+* applied to neutron groups from nmgp-ngnaof to nmgp*
+* Ngnaof = see above *
+* Lpwxsc = flag for using pointwise cross sections and/or *
+* explicit (n,gamma) generation when available *
+* Lnfcrt = flag for neutron fission criticality problems. It *
+* simply forces the number of fission neutrons to *
+* be 1 with a proper weight *
+* *
+*----------------------------------------------------------------------*
+* Minimum energy for (possible) point-wise treatments:
+ PARAMETER ( ENCNMN = 0.00001 D+00 )
+* Maximum number of thermal neutron groups:
+ PARAMETER ( MXGTHN = 15 )
+* Maximum neutron group number:
+ PARAMETER ( MXGLWN = 200 )
+* Maximum neutron weight profiles:
+ PARAMETER ( MXSHPP = 5 )
+*
+ LOGICAL LCOMPN, LIMPRN, LBIASN, LDOWNN, LRECPR, LLOWWW, LLOWET,
+ & LPWXSC, LNFCRT
+ CHARACTER*10 TITLOW
+ COMMON / LOWNEU / ATOLOW (MXXMDF), WSHPLN (MXGLWN,MXSHPP), EXTWWL,
+ & SHPIMP (MXGLWN), EXTETL (MXGLWN), WWAMFL,
+ & VLLNTH (MXGTHN,0:MXXMDF), ENLNTH (MXGTHN),
+ & ABLNTH (MXGTHN,MXXMDF), STLNTH (MXGTHN,MXXMDF),
+ & TMRTLN (MXXMDF), FNADEF,
+ & TMNMLN (MXXMDF), ICHCPT (MXXMDF),
+ & IGTMRT (MXXMDF), NEUMED (MXXMDF),
+ & ID1MED (MXXMDF), ID2MED (MXXMDF),
+ & ID3MED (MXXMDF), MGTMED (MXXMDF),
+ & LCOMPN (MXXMDF), LRECPR (MXXMDF),
+ & ICNMED (MXXMDF), KLNRNC (MXXMDF),
+ & IPWSGC (MXXMDF), KPRLOW, NMGP, NMTG , IGRTHN,
+ & LIMPRN, LBIASN, LDOWNN, LLOWWW, LLOWET, ICLMED,
+ & IKRBGN, INABGN, IDWBGN, IETBGN, I0XSEC, IDXSEC,
+ & ISENAV, ISVELN, ISPNAV, IWWLWB, IWWLWT, IPXBGN,
+ & NPXSEC, NGNAOF, LPWXSC, LNFCRT
+ COMMON / CHLWNT / TITLOW (MXXMDF)
+
--- /dev/null
+*$ CREATE LTCLCM.ADD
+*COPY LTCLCM
+*
+*=== ltclcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* LaTtice CeLl CoMmon: *
+* *
+* Created on 09 december 1993 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-dec-93 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / LTCLCM / MLATTC, NEWLAT, MLATLD, MLATM1, MLTSEN, MLTSM1
+
--- /dev/null
+*$ CREATE LWNPWX.ADD
+*COPY LWNPWX
+*
+*=== Lwnpwx ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* LoW energy Neutron Point-Wise Xsec common: *
+* *
+* Created on 27 may 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 22-jan-01 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Kscpwx(j,i) = id. of the jth particle produced in the i_th *
+* reaction channel (gammas not included!) *
+* Kbgpwx(i) = starting location in blank common (i*4, 0 *
+* address) for the i_th pointwise cross section *
+* data set *
+* Kelpwx(i) = starting location in blank common (i*4, 0 *
+* address) for the elastic scattering data of *
+* the i_th pointwise cross section data set *
+* Iazpwx(i) = isomer code for the i_th pointwise cross *
+* section data set *
+* Ktmpwx(i) = temperature (K) for the i_th pointwise cross *
+* section data set *
+* Nrcpwx(i) = number of reactions for the i_th pointwise *
+* cross section data set *
+* Nellcf(i) = number of Legendre coefficients for the i_th *
+* pointwise cross section data set *
+* Nelsen(i) = number of energy points for elastic scattering*
+* angular distributions for the i_th pointwise *
+* cross section data set *
+* Nnglev(i) = number of energy levels (ground state is taken*
+* as level #Nrclev) to be considered for radia- *
+* tive capture for the i_th pointwise cross *
+* section data set *
+* Kngpwx(i) = starting location in blank common (i*4, 0 *
+* address) for the radiative capture data of *
+* the i_th pointwise cross section data set *
+* The data consist of Nnglev(i) energy levels *
+* (ground state included) followed by a matrix *
+* M(k,j), k=1,Nnglev(i), j=1,Nnglev(i)+1 *
+* containing the probabilities for going from *
+* level m=j-1 (m=0 -> virtual capture level) to *
+* level k *
+* Ninlev(i) = number of energy levels to be considered for *
+* inelastic scattering for the i_th pointwise *
+* cross section data set *
+* Kinpwx(i) = starting location in blank common (i*4, 0 *
+* address) for the inelastic scattering data of *
+* the i_th pointwise cross section data set *
+* The data consist of Ninlev(i) energy levels *
+* Ninlen(i) = number of energy points for inelastic scatter-*
+* ing for the i_th pointwise cross section data *
+* set *
+* Nmpwxs = number of defined pointwise cross section *
+* data sets *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXRPWX = 76 )
+ PARAMETER ( KPWXTT = 1 )
+ PARAMETER ( KPWXEL = 2 )
+ PARAMETER ( KPWXIN = 3 )
+ PARAMETER ( KPWXFS = 5 )
+ PARAMETER ( KPWXCP = 6 )
+ PARAMETER ( KPWX1S = 7 )
+ PARAMETER ( KPWXCO = 47 )
+*
+ COMMON / LWNPWX / KSCPWX (4,MXRPWX),
+ & KBGPWX (MXXMDF), KELPWX (MXXMDF),
+ & IAZPWX (MXXMDF), KTMPWX (MXXMDF), NRCPWX (MXXMDF),
+ & NELLCF (MXXMDF), NELSEN (MXXMDF), NNGLEV (MXXMDF),
+ & KNGPWX (MXXMDF), NINLEV (MXXMDF), KINPWX (MXXMDF),
+ & NINLEN (MXXMDF), NMPWXS
+ COMMON / LCHPWX / CHRPWX (MXRPWX)
+ CHARACTER*8 CHRPWX
+
+
+
--- /dev/null
+*$ CREATE MAGPAR.ADD
+*COPY MAGPAR
+* *
+*----------------------------------------------------------------------*
+* include file: magpar copy created 26/11/86 by p*
+* *
+* Last change on 16-jan-92 by Alfredo Ferrari *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /magpar/ contains information about the magnetic/electric fields *
+* bifcom = strength of the homogenous magnetic field (tesla) *
+* btxcom = direction cosines *
+* btycom = = *
+* btzcom = = *
+* elfcom = strength of the homogenous electric field *
+* (kV/cm=MV/m) *
+* etxcom = direction cosines *
+* etycom = = *
+* etzcom = = *
+* delfld = maximum tolerable error of the boundary iteration *
+* both for electric/magnetic transport (cm) *
+* anglmg = biggest angle that particle is allowed to travel *
+* in the magnetic field (deg) *
+* dstpmg = guarantees that step is not forced to be too small. *
+* (if suggested angle is too big, magnetic only) *
+* rkrfra = max. fraction of a 2 pi angle allowed for a single *
+* Runge-Kutta step in magnetic field *
+* dmgfrk = maximum step length with magnetic field if Runge- *
+* -Kutta integration is selected, used only in zones of*
+* zero local field *
+* delfrk = maximum step length with electric field for Runge- *
+* -Kutta integration *
+* denelf = energy gained or lost in the electric field *
+* Lfmgel = flag for first time initialization *
+* Lrkuti = flag for selecting Runge-Kutta integration for an *
+* inhomogeneous magnetic field and no electric field *
+* Runge-Kutta is always selected if an electric field *
+* is present. *
+* Direct constant radius tracking is always selected *
+* only an homogeneous magnetic field is present *
+* Lmgmap = flag for inhomogeneous magnetic field *
+* Lelmap = flag for inhomogeneous electric field *
+* magnon(j) = true if region j has a magnetic field *
+* lelfon(j) = true if region j has an electric field *
+* *
+* Mxxrgn = maximum number of regions *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL MAGNON, LELFON, LFMGEL, LRKUTI, LMGFLD, LELFLD, LMGMAP,
+ & LELMAP, LRKUTT
+ COMMON / MAGPAR / BIFCOM, ELFCOM, BTXCOM, BTYCOM, BTZCOM, ETXCOM,
+ & ETYCOM, ETZCOM, DELFLD, ANGLMG, DSTPMG, RKRFRA,
+ & DMGFRK, DELFRK, DEL000, ONMCTH, ANGLRK, ONMCRK,
+ & DMINMN, DENELF, LFMGEL, LRKUTI, LMGFLD, LELFLD,
+ & LMGMAP, LELMAP, LRKUTT, MAGNON (MXXRGN),
+ & LELFON (MXXRGN)
+
--- /dev/null
+*$ CREATE MAPA.ADD
+*COPY MAPA
+*
+*=== Mapa =============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: mapa copy *
+* *
+* !!! Change also mapa2 if you touch this file !!! *
+* *
+* Version for Fluka91/.../99: *
+* *
+* Last change on 14-may-99 by Alfredo Ferrari, INFN-Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* /mapa/ contains the parameters describing the target materials *
+* *
+* Matnam = matnam(i)=name of the material number i *
+* Medium = medium(nreg)=material number of the region nreg *
+* Amss = material atomic weight *
+* Amssem = "effective" material atomic weight for the parametri-*
+* zed EM cascade *
+* Aocmbm = atomic densities in barn**-1 cm**-1 *
+* (Atoms Over Cm times Barn for Materials) *
+* Ztar = material atomic number *
+* Ztarem = "effective" material atomic number for the parametri-*
+* zed EM cascade *
+* Rho = densities of the materials *
+* Zlin = inelastic scattering lengths of the materials *
+* for beam particles at the average beam energy in cm *
+* Zlel = elastic scattering lengths of the materials for *
+* beam particles at average beam energy in cm *
+* Zlrad = radiation lengths of the materials in cm *
+* Zul = inelastic scattering lengths of the materials *
+* for neutrons at threshold energy in cm *
+* Mulflg = flags for multiple scattering options *
+* Icomp = 0 if the material is not a compound *
+* Mssnum = mass number of the target nucleus, if =< 0 it means *
+* that it is in the natural isotopic composition *
+* Msindx = index for tabulations for the given isotope of the *
+* target nucleus (meaningful only for mssnum > 0) *
+* that it is in the natural isotopic composition *
+* Nregs = total number of the regions *
+* Nmat = total number of the materials *
+* Mtbsnm = medium for which inelastic interaction biasing must *
+* be done *
+* *
+* Mxxrgn = maximum number of regions *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 MATNAM
+ COMMON / MAPA / AOCMBM(MXXMDF), AMSS (MXXMDF), AMSSEM(MXXMDF),
+ & RHO (MXXMDF), ZTAR (MXXMDF), ZTAREM(MXXMDF),
+ & ZLIN (MXXMDF), ZLEL (MXXMDF), ZLRAD (MXXMDF),
+ & ZUL (MXXMDF), MEDIUM(MXXRGN), MULFLG(MXXMDF),
+ & ICOMP (MXXMDF), MSSNUM(MXXMDF), MSINDX(MXXMDF),
+ & NREGS, NMAT, MTBSNM
+ COMMON / CHMAPA / MATNAM(MXXMDF)
+
--- /dev/null
+*$ CREATE MAPA2.ADD
+*COPY MAPA2
+*
+*=== Mapa2 ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: mapa2 copy *
+* *
+* !!! Change also mapa if you touch this file !!! *
+* *
+* Version for Fluka91/.../99: *
+* *
+* Last change on 14-may-99 by Alfredo Ferrari, INFN-Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* *
+* /mapa/ contains the parameters describing the target materials *
+* *
+* Matnam = matnam(i)=name of the material number i *
+* Medium = medium(nreg)=material number of the region nreg *
+* Amss = material atomic weight *
+* Amssem = "effective" material atomic weight for the parametri-*
+* zed EM cascade *
+* Aocmbm = atomic densities in barn**-1 cm**-1 *
+* (Atoms Over Cm times Barn for Materials) *
+* Ztar = material atomic number *
+* Ztarem = "effective" material atomic number for the parametri-*
+* zed EM cascade *
+* Rrho = densities of the materials *
+* Zlin = inelastic scattering lengths of the materials *
+* for beam particles at the average beam energy in cm *
+* Zlel = elastic scattering lengths of the materials for *
+* beam particles at average beam energy in cm *
+* Zlrad = radiation lengths of the materials in cm *
+* Zul = inelastic scattering lengths of the materials *
+* for neutrons at threshold energy in cm *
+* Mulflg = flags for multiple scattering options *
+* Icomp = 0 if the material is not a compound *
+* Mssnum = mass number of the target nucleus, if =< 0 it means *
+* that it is in the natural isotopic composition *
+* Msindx = index for tabulations for the given isotope of the *
+* target nucleus (meaningful only for mssnum > 0) *
+* that it is in the natural isotopic composition *
+* Nregs = total number of the regions *
+* Nmat = total number of the materials *
+* Mtbsnm = medium for which inelastic interaction biasing must *
+* be done *
+* *
+* Mxxrgn = maximum number of regions *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 MATNAM
+ COMMON / MAPA / AOCMBM(MXXMDF), AMSS (MXXMDF), AMSSEM(MXXMDF),
+ & RRHO (MXXMDF), ZTAR (MXXMDF), ZTAREM(MXXMDF),
+ & ZLIN (MXXMDF), ZLEL (MXXMDF), ZLRAD (MXXMDF),
+ & ZUL (MXXMDF), MEDIUM(MXXRGN), MULFLG(MXXMDF),
+ & ICOMP (MXXMDF), MSSNUM(MXXMDF), MSINDX(MXXMDF),
+ & NREGS, NMAT, MTBSNM
+ COMMON / CHMAPA / MATNAM(MXXMDF)
+
--- /dev/null
+*$ CREATE MCSHLP.ADD
+*COPY MCSHLP
+*
+*=== mcshlp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file Multiple Coulomb Scattering HeLP: *
+* *
+* Created on 26 october 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 15-nov-95 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LSMPAN, LSTMN , LPLC , LACLDA
+ COMMON / MCSHLP / UOLD , VOLD , WOLD , SINT02, SINTH0, COSPH0,
+ & SINPH0, COSTHE, SINTHE, COSPHI, SINPHI, COSETA,
+ & SINETA, UPRIME, VPRIME, UIPRIM, VIPRIM, LSMPAN,
+ & LSTMN , LPLC , LACLDA
+
--- /dev/null
+*$ CREATE MEDIA.ADD
+*COPY MEDIA
+*
+*=== media ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Last change on 24-apr-97 by Alfredo Ferrari, INFN-Milan *
+* *
+* Commons Fxtmx, Media and Mediac for EMF *
+* Common Fxtmx is used for the fractional fixed step option *
+* Any change in common Fxtmx must be done also in the module Fxtmx *
+* of Egsadd!!!!!!!!!!!!!!!! *
+* Mxxmde = maximum number of media in Emf *
+* Estepe = maximum fractional energy loss allowed for the gi- *
+* ven medium *
+* Ltmin = logical array to flag whether or not has the step *
+* to be larger or equal than the minimum allowed *
+* by Moliere's theory, regardless of the energy loss: *
+* default is .true. *
+* *
+*----------------------------------------------------------------------*
+*
+* Fix to 7% the maximum energy loss in a (single) Landau/Vavilov step
+ PARAMETER ( ESTLEM = 0.07D+00 )
+ LOGICAL LTMIN, LFXTMX, LPEMDT, LXFLUO, LEMFLA
+ COMMON /FXTMX/ ESTEPE (MXXMDE), ISTPE (MXXMDE), LTMIN (MXXMDE),
+ & LPEMDT (MXXMDE), LFXTMX
+ COMMON /MEDIA/ RLC (MXXMDE), RLDU (MXXMDE), RHO (MXXMDE),
+ & AIPEMF (MXXMDE), D0DEMF (MXXMDE),
+ & MSGE (MXXMDE), MGE (MXXMDE), MSEKE (MXXMDE),
+ & MEKE (MXXMDE), MLEKE (MXXMDE), MCMFP (MXXMDE),
+ & MRANGE (MXXMDE), IRAYLM (MXXMDE), LXFLUO (MXXMDE),
+ & IEKEDG (MXXMDE), LEMFLA (MXXMDE), NMED , ILVLEM ,
+ & NEREMF, NKDGEM
+ COMMON /MEDIAC/ MEDIA(24,MXXMDE)
+ CHARACTER*4 MEDIA
+
--- /dev/null
+*$ CREATE METLSP.ADD
+*COPY METLSP
+*
+*=== Metlsp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of Metlsp: *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-dec-97 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Cxs(i) = X-cosine of the i_th produced particle *
+* Cys(i) = Y-cosine of the i_th produced particle *
+* Czs(i) = Z-cosine of the i_th produced particle *
+* Els(i) = Total energy of the i_th produced particle *
+* Pls(i) = Momentum of the i_th produced particle *
+* Ams(i) = Mass of the i_th produced particle *
+* Its(i) = Identity (part scheme) of the i_th produced particle *
+* Ichns(3,i) = Array containing additional information about pro- *
+* duction verteces, ranking etc *
+* Is = Number of produced particles *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / METLSP / CXS (MXPDPM), CYS (MXPDPM), CZS (MXPDPM),
+ & ELS (MXPDPM), PLS (MXPDPM), AMS (MXPDPM),
+ & ITS (MXPDPM), ICHNS (3,MXPDPM), IS
+
--- /dev/null
+*$ CREATE MGDDCM.ADD
+*COPY MGDDCM
+*
+*=== mgddcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* MGDraw Dump CoMmon: *
+* *
+* Last change on 06-jul-00 by Alfredo Ferrari, INFN - Milan *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* iodraw = logical unit for the output of the trajectory/energy*
+* deposition dump *
+* lddraw = logical flag for the trajectory/continuos energy *
+* deposition dumping *
+* ledraw = logical flag for the "on spot" energy deposition *
+* dumping *
+* lsdraw = logical flag for source particle dumping *
+* ludraw = logical flag for calling the dumping routine for *
+* user events *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LDDRAW, LEDRAW, LSDRAW, LUDRAW
+ CHARACTER CFDRAW*10
+ COMMON / MGDDCM / IODRAW, LDDRAW, LEDRAW, LSDRAW, LUDRAW
+ COMMON / CHMGDD / CFDRAW
+
--- /dev/null
+*$ CREATE MISC.ADD
+*COPY MISC
+*----------------------------------------------------------------------*
+* *
+* Common Misc for EMF *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /MISC/ RHOR(MXXRGN), DUNIT, EMREJE, EMSAMP, EMSNGL, KMPI,
+ & KMPO, NOSCAT, MED(MXXRGN), IRAYLR(MXXRGN), NRGEMF,
+ & NOLLDA
+
--- /dev/null
+*$ CREATE MULBOU.ADD
+*COPY MULBOU
+*
+*=== mulbou ==========================================================*
+*
+*---------------------------------------------------------------------*
+* *
+* Module MULBOU: *
+* *
+* Last change A. Ferrari 21-jan-1999 *
+* Created on 26-05-1991 by A. Ferrari, Infn-Milan *
+* *
+* Included in: *
+* BDNOPT *
+* COMFAR *
+* COMMTR *
+* ELECTR *
+* EMFGEO *
+* EMFLNK *
+* EMFSCO *
+* GEOFAR *
+* GEOMTR *
+* G1 *
+* KASHEA *
+* KASKAD *
+* KASNEU *
+* KASRAY *
+* LBXRFL *
+* MAGEAS *
+* MAGMOV *
+* MAGNEW *
+* MOVE *
+* PHOTON *
+* *
+*---------------------------------------------------------------------*
+*
+ LOGICAL LLDA , LAGAIN, LSTNEW, LARTEF, LNORML, LSENSE, LMGNOR,
+ & LSNSCT, LPLGNL, LNWGHS, LMAGEA
+ COMMON / MULBOU / XOLD , YOLD , ZOLD , XMIDDL, YMIDDL, ZMIDDL,
+ & UMIDDL, VMIDDL, WMIDDL, PSTEP1, PSTEP2,
+ & UOLD , VOLD , WOLD , UMAG , VMAG , WMAG ,
+ & UNORML, VNORML, WNORML, USENSE, VSENSE, WSENSE,
+ & XNORML, YNORML, ZNORML, TSENSE, DDSENS, DSMALL,
+ & TSLTTC (0:2000),
+ & MULTTC (0:2000), NSSENS, NULTTC, IPLGNL,
+ & LLDA , LAGAIN, LSTNEW, LARTEF, LNORML, LSENSE,
+ & LMGNOR, LSNSCT, LPLGNL, LNWGHS, LMAGEA
+
--- /dev/null
+*$ CREATE MULHD.ADD
+*COPY MULHD
+*
+*=== mulhd ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common mulhd for the new multiple scattering in Fluka *
+* created by A. Ferrari & P. Sala on 23-oct-1989 *
+* *
+* Last change on 18-jun-97 by Alfredo Ferrari, INFN-Milan *
+* included in: *
+* bdnopt *
+* epilog *
+* flukam *
+* hmulrt *
+* kaskad *
+* mulhad *
+* mulmix *
+* stepop *
+* *
+* Mxxmdf = maximum number of media *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXXPT1 = 1 )
+* PARAMETER ( TIMESS = 3.00D+00 )
+ PARAMETER ( TIMESS = 2.00D+00 )
+* Tmsrlx: times "relaxed" if the nuclear finite size correction must
+* not be taken into account
+* PARAMETER ( TMSRLX = 2.00D+00 )
+ PARAMETER ( TMSRLX = 1.50D+00 )
+* PARAMETER ( EPSINS = 0.10D+00 )
+ PARAMETER ( EPSINS = 0.15D+00 )
+* Epsrlx: epsins "relaxed" if the nuclear finite size correction must
+* not be taken into account
+* PARAMETER ( EPSRLX = 0.15D+00 )
+ PARAMETER ( EPSRLX = 0.50D+00 )
+* Sqepsn = sqrt (epsins)
+* PARAMETER ( SQEPSN = 0.3162277660168379 D+00 )
+ PARAMETER ( SQEPSN = 0.3872983346207417 D+00 )
+* Sqepsr = sqrt (epsrlx)
+* PARAMETER ( SQEPSR = 0.3872983346207417 D+00 )
+ PARAMETER ( SQEPSR = 0.7071067811865475 D+00 )
+ PARAMETER ( PARNSI = 1.732050807568877 D+00 * SQEPSN )
+ PARAMETER ( PRNSR0 = 1.732050807568877 D+00 * SQEPSR )
+* PARAMETER ( R0NCMS = 1.12 D+00 )
+ PARAMETER ( R0NCMS = 1.20 D+00 )
+ LOGICAL LTOPT, LSRCRH, LNSCRH, LHFANO, LMLRGH
+*
+ COMMON / MULHD / BLCC ( MXXMDF ), BLCCRA ( MXXMDF ),
+ & FANOLC ( MXXMDF ), ZDFANO ( MXXMDF ),
+ & XCC ( MXXMDF ), ZTILDE ( MXXMDF, 0:MXXPT1 ),
+ & ALPZTL ( MXXMDF, 0:MXXPT1 ), RLDU ( MXXMDF ),
+ & ALPZT2 ( MXXMDF, 0:MXXPT1 ), TEFF0 ( MXXMDF ),
+ & XR0 ( MXXMDF ), ECUTM ( MXXMDF, -6:NALLWP,2),
+ & ESTEPF ( MXXMDF ), HTHNSZ ( MXXMDF, -6:NALLWP ),
+ & AE1O3 ( MXXMDF ), PARNSR ( MXXMDF ),
+ & HEESLI ( MXXMDF ), THMSPR, THMSSC, HMSAMP,
+ & HMREJE, HMSNGL,
+ & LSRCRH ( MXXMDF ), LNSCRH ( MXXMDF ),
+ & LTOPT ( MXXMDF ), LHFANO ( MXXMDF ),
+ & NFSCAT, NFLLDA, LMLRGH, MULPRI, MULSEC
+
--- /dev/null
+*$ CREATE MULTS.ADD
+*COPY MULTS
+*
+*=== Mults ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common Mults for EMF *
+* Mxxmde = maximum number of media in Emf *
+* (Alpfsc = alpha, fine structure constant = 1/137) *
+* Ztilde = "effective" Zeta for the spin relativistic correc- *
+* tion *
+* Alpztl = Alpfsc * Ztilde *
+* Alpzt2 = Alpztl **2
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LSRCRE, LNSCRE, LMLRGE
+ COMMON /MULTS/ ZTILDE (MXXMDE), ALPZTL (MXXMDE), ALPZT2 (MXXMDE),
+ & AE1O3E (MXXMDE), B0G21 , B1G21 , G210(7), G211(7),
+ & G212(7), B0G22 , B1G22 , G220(8), G221(8), G222(8),
+ & B0G31, B1G31 , G310(11), G311(11), G312(11), B0G32,
+ & B1G32, G320(25), G321(25), G322(25), B0BGB , B1BGB,
+ & BGB0(8), BGB1(8), BGB2(8), FUDEMF (MXXMDE),
+ & LSRCRE (MXXMDE), LNSCRE (MXXMDE), LMLRGE (-1:1),
+ & NG21, NG22, NG31, NG32, NBGB
+
--- /dev/null
+*$ CREATE NCDNVP.ADD
+*COPY NCDNVP
+*
+*=== ncdnvp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Used only by PReequilibrium INitialization routines *
+* *
+* Created on 22 june 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 02-oct-95 by Alfredo Ferrari *
+* *
+* Rhapsf (i,l) = a (skin) parameter for the density distribution, *
+* or s-shell armonic oscillator constant (a_s) for *
+* nuclei using shell model density distributions *
+* already including (possible) folding distributions*
+* Rhcpsf (i,l) = c (R1/2) parameter for the density distribution, *
+* or p-shell armonic oscillator constant (a_p) for *
+* nuclei using shell model density distributions *
+* already including (possible) folding distributions*
+* Rh0psf (i,l) = Rh0 (central density) parameter for the density *
+* distribution, or p-shell armonic oscillator *
+* constant (a_p) for nuclei using shell model dens- *
+* ity distributions NOT including (possible) fold- *
+* ing distributions *
+* Rhcesf (i,l) = Rhocen, central density for the p/n density *
+* distribution *
+* Rhrdsf (i,l) = radius at which the i,l density distribution drops*
+* at Rhfrsf (i,l) times the central value *
+* Rrmssf (i,l) = r-rms (<r^2>) parameter for the density distri- *
+* bution *
+* Rreqsf (i,l) = equivalent sharp sphere radius for the density *
+* distributions *
+* ( i = 1 : proton, i = 2 : neutron *
+* l = 1 charge (matter) proton (neutron) distribu- *
+* tion, integral = Z (N) *
+* l = 2 point/centre proton or neutron distribu- *
+* tion, folded with folrms, integral = Z (N) *
+* l = 3 point/centre proton or neutron distribu- *
+* tion, folded with folrms, integral = Z (N) *
+* l = 4 point/centre proton or neutron distribu- *
+* tion, folded with folrms, integral = Z (N) *
+* l = 5 point/centre proton (neutron) distribution, *
+* integral = Z (N) *
+* l = 6 proton (neutron) distribution, folded for *
+* pion potential, integral = Z (N) ) *
+* Sshlnc (i) = Number of nucleons of type i in the s shell (for *
+* shell model like calculations, i = 1 : proton, *
+* i = 2 : neutron ) *
+* Pshlnc (i) = Number of nucleons of type i in the p shell (for *
+* shell model like calculations, i = 1 : proton, *
+* i = 2 : neutron ) *
+* Vpapsf (i,k) = a (skin) parameter for the potential distribution *
+* or s-shell armonic oscillator constant (a_s) for *
+* nuclei using shell model density like potential *
+* distributions already including (possible) fold- *
+* ing distributions *
+* Vpcpsf (i,k) = c (R1/2) parameter for the potential distribution *
+* or p-shell armonic oscillator constant (a_p) for *
+* nuclei using shell model density like potential *
+* distributions already including (possible) fold- *
+* ing distributions *
+* Vp0psf (i,k) = Vp0 (central potential) parameter for the poten- *
+* tial distribution distribution, or p-shell armo- *
+* nic oscillator constant (a_p) for nuclei using *
+* shell model density distributions NOT including *
+* (possible) folding distributions *
+* Vpdpsf (i,k) = Vp (central potential) depth for the potential *
+* distribution *
+* Vpedsf (i,k) = Vp "edge" depth at the nucleus p/n radius *
+* Vprdsf (i,k) = Radius defining the potential "edge" *
+* Rcvpsf (i,k) = correlation r_0 for saturation correction for po- *
+* tential distributions *
+* Vpbpsf (i,k) = b (skin-like) parameter for the potential distri- *
+* bution *
+* Vrmssf (i,k) = r-rms (<r^2>) parameter for the potential distri- *
+* bution *
+* Vreqsf (i,k) = sharp radius parameter for the potential distri- *
+* bution *
+* Pcvpsf (k) = density exponent for saturation correction for po-*
+* tential distributions *
+* Vpexsf (k) = volume integral of the contact like (Pauli) part *
+* of the exchange interaction *
+* Akvppp = relative strength of pp(nn) interaction *
+* Akvppn = relative strength of pn(np) interaction *
+* Bkvppp = relative strength of pp(nn) exchange interaction *
+* Bkvppn = relative strength of pn(np) exchange interaction *
+* Vbarnn (k) = volume integral of the NN interaction (GeV x fm^3)*
+* Jnrhvp = present nucleon index (1=proton, 2=neutron) *
+* Jbouvp = present bound or unbound nucleon index (1=bound, *
+* 2=unbound) *
+* Jrhodn = present density index 1-6 *
+* Jrhofl = density index (1-6) to be (un)folded *
+* Lshmdu = flag for shell model like density calculations *
+* *
+*----------------------------------------------------------------------*
+*
+* R_0 for the equivalent sharp sphere radius for the proton density
+* (or charge) distribution
+ PARAMETER ( R0PRCH = 1.128 D+00 )
+* R_0 fundamental one according to Myers
+ PARAMETER ( R0DRPM = 1.18 D+00 )
+* Various parameters of the Droplet model *
+ PARAMETER ( CKDRPM = 240. D+00 )
+ PARAMETER ( CJDRPM = 36.8 D+00 )
+ PARAMETER ( CLDRPM = 100. D+00 )
+ PARAMETER ( CMDRPM = 0. D+00 )
+ PARAMETER ( CQDRPM = 17. D+00 )
+ PARAMETER ( CA1DRP = 15.96 D+00 )
+ PARAMETER ( CA2DRP = 20.69 D+00 )
+ PARAMETER ( CA3DRP = 0. D+00 )
+ PARAMETER ( CC1DRP = THRTHR / FIVFIV * COUGFM / R0DRPM * GEVMEV )
+ PARAMETER ( CC2DRP = CC1DRP / 336.D+00 * ( ONEONE / CJDRPM
+ & + 18.D+00 / CKDRPM ) )
+ PARAMETER ( HC3DRP = CC1DRP * HLFHLF * FIVFIV / R0DRPM / R0DRPM )
+* ( 3 / 2 pi )^2/3
+ PARAMETER ( HC4DRP = 0.610887057710857 D+00 )
+ PARAMETER ( CC4DRP = FIVFIV / FOUFOU * HC4DRP * CC1DRP )
+ PARAMETER ( CC5DRP = CC1DRP * CC1DRP / CQDRPM / 64.D+00 )
+ PARAMETER ( R3TOVL = FOUFOU * PIPIPI / THRTHR )
+ PARAMETER ( R0SSHM = HLFHLF / PIPIPI / ERFA00 )
+ PARAMETER ( R0PSHM = ONETHI / PIPIPI / ERFA00 )
+ LOGICAL LSHMDU, LUNFRU
+ COMMON / NCDNVP / RHCPSF (2,8), RHAPSF (2,8), RH0PSF (2,8),
+ & RHCESF (2,8), RHRDSF (2,8), RHFRSF (2,8),
+ & RRMSSF (2,8), RREQSF (2,8), VPCPSF (2,2),
+ & VPAPSF (2,2), VP0PSF (2,2), VPDPSF (2,2),
+ & VPEDSF (2,2), VPRDSF (2,2), VRMSSF (2,2),
+ & VREQSF (2,2), VPBPSF (2,2), RCVPSF (2,2),
+ & PCVPSF (2) , VBARNN (2) , VPEXSF (2),
+ & SSHLNC (2) , PSHLNC (2) , AKVPPP, AKVPPN,
+ & BKVPPP, BKVPPN,
+ & JRHDNF (2) , JNRHVP, JBOUVP, JRHODN, JRHOFL,
+ & LSHMDU, LUNFRU
+
--- /dev/null
+*$ CREATE NCSFTA.ADD
+*COPY NCSFTA
+*
+*=== ncsfta ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NuClear Symmetrized Fermi/woods-saxon density and potential *
+* tabulations Addresses *
+* *
+* kasftb(i) = starting address in blank common for the *
+* tabulations for the ith isotope: the isotope *
+* numeration is the one of the corresponding po- *
+* sition in the arrays of common Isotop for all *
+* materials with natural elemental composition, *
+* it is the number of stable isotopes (Nstbis) *
+* plus the material number for materials with a *
+* fixed isotope set *
+* This is for 0 address, real*4 alignment *
+* The layout is as following: *
+* (given k0=kasftb(i)) *
+* ibtar =nstor(k0+1) *
+* ichtar=nstor(k0+2) *
+* mrsfbn=nstor(k0+3) *
+* mvsfbn=nstor(k0+4) *
+* mcsfbn=nstor(k0+5) *
+* mrsfbn=nstor(k0+6) *
+* isfaut=nstor(k0+7) *
+* isfrat=nstor(k0+8) *
+* isfrpt=nstor(k0+9) *
+* isfrnt=nstor(k0+10) *
+* nsfrht=nstor(k0+11) *
+* isfrit=nstor(k0+12) *
+* isfvpt=nstor(k0+13) *
+* isfcot=nstor(k0+14) *
+* isfpft=nstor(k0+15) *
+* isflvt=nstor(k0+16) *
+* isfrlt=nstor(k0+17) *
+* isflpt=nstor(k0+18) *
+* isflpt=nstor(k0+19) *
+* ivcomx=nstor(k0+20) *
+* lexpif(1)=lbstor(k0+21) *
+* lexpif(2)=lbstor(k0+22) *
+* lexpkf(1)=lbstor(k0+23) *
+* lexpkf(2)=lbstor(k0+24) *
+* lexpln(1)=lbstor(k0+25) *
+* lexpln(2)=lbstor(k0+26) *
+* lrhfl1=lbstor(k0+27) *
+* lrhfl2=lbstor(k0+28) *
+* lrhfl3=lbstor(k0+29) *
+* lpnrho=lbstor(k0+30) *
+* lshmdl=lbstor(k0+31) *
+* lflvsl=lbstor(k0+32) *
+* lrlvsl=lbstor(k0+33) *
+* leqsbs=lbstor(k0+34) *
+* radiu0=gmstor(isfaut+1) *
+* radiu1=gmstor(isfaut+2) *
+* radtot=gmstor(isfaut+3) *
+* Energy dep. pot.: vpsqmx(1)=gmstor(isfaut+4) *
+* vpsqmx(2)=gmstor(isfaut+5) *
+* Energy indep. pot.: vparvp(1)=gmstor(isfaut+4) *
+* vparvp(2)=gmstor(isfaut+5) *
+* cparvp(1)=gmstor(isfaut+6) *
+* cparvp(2)=gmstor(isfaut+7) *
+* aparvp(1)=gmstor(isfaut+8) *
+* aparvp(2)=gmstor(isfaut+9) *
+* ravpsf(1)=gmstor(isfaut+10) *
+* ravpsf(2)=gmstor(isfaut+11) *
+* bnvpsf(1)=gmstor(isfaut+12) *
+* bnvpsf(2)=gmstor(isfaut+13) *
+* Energy dep. pot.: spauni(1)=gmstor(isfaut+15) *
+* spauni(2)=gmstor(isfaut+14) *
+* evsfmx(1)=gmstor(isfaut+16) *
+* evsfmx(2)=gmstor(isfaut+17) *
+* vpemax(1)=gmstor(isfaut+18) *
+* vpemax(2)=gmstor(isfaut+19) *
+* Energy indep. pot.: v0cesf(1)=gmstor(isfaut+14) *
+* v0cesf(2)=gmstor(isfaut+15) *
+* evsfmx(1)=gmstor(isfaut+16) *
+* evsfmx(2)=gmstor(isfaut+17) *
+* pvsfmx(1)=gmstor(isfaut+18) *
+* pvsfmx(2)=gmstor(isfaut+19) *
+* Energy dep. pot.: vcoumx=gmstor(isfaut+20) *
+* v0ccou=gmstor(isfaut+21) *
+* vpedge(1)=gmstor(isfaut+22) *
+* vpedge(2)=gmstor(isfaut+23) *
+* Energy indep. pot.: ravcou=gmstor(isfaut+20) *
+* vcoumx=gmstor(isfaut+21) *
+* v0ccou=gmstor(isfaut+22) *
+* zvpcou=gmstor(isfaut+23) *
+* eaprad(1)=gmstor(isfaut+24) *
+* eaprad(2)=gmstor(isfaut+25) *
+* ecprad(1)=gmstor(isfaut+26) *
+* ecprad(2)=gmstor(isfaut+27) *
+* frmano(1)=gmstor(isfaut+28) *
+* frmano(2)=gmstor(isfaut+29) *
+* efrano=gmstor(isfaut+30) *
+* e0fran=gmstor(isfaut+31) *
+* etmrad(1)=gmstor(isfaut+32) *
+* etmrad(2)=gmstor(isfaut+33) *
+* tmedge(1)=gmstor(isfaut+34) *
+* tmedge(2)=gmstor(isfaut+35) *
+* tmedge(1)=gmstor(isfaut+34) *
+* tmedge(2)=gmstor(isfaut+35) *
+* vpmxrd(1)=gmstor(isfaut+36) *
+* vpmxrd(2)=gmstor(isfaut+37) *
+* vqmxrd(1)=gmstor(isfaut+38) *
+* vqmxrd(2)=gmstor(isfaut+39) *
+* evrdmx(1)=gmstor(isfaut+40) *
+* evrdmx(2)=gmstor(isfaut+41) *
+* v0cesf(1)=gmstor(isfaut+42) *
+* v0cesf(2)=gmstor(isfaut+43) *
+* aparsf=gmstor(isfaut+44) *
+* cparsf=gmstor(isfaut+45) *
+* rhoave=gmstor(isfaut+46) *
+* pfrave=gmstor(isfaut+47) *
+* ekfave=gmstor(isfaut+48) *
+* zbourd=gmstor(isfaut+49) *
+* mrsfbn = number of rho intervals for tabulations *
+* mvsfbn = number of Vnuc intervals for tabulations *
+* mcsfbn = number of Vcoul intervals for tabulations *
+* isfaut = starting location in blank common (0 address, *
+* double precision alignment) of auxiliary vari- *
+* able tabulations *
+* lations for the current target isotope *
+* isfrat = starting location in blank common (0 address, *
+* double precision alignment) of the radius tabu- *
+* lations for the current target isotope *
+* Note: *
+* equivalence (gmstor(isfrat+0:mcsfbn),radsft(0:mcsfbn)) *
+* isfrpt = starting location in blank common (0 address, *
+* double precision alignment) of the proton den- *
+* sity tabulations for the current target isotope:*
+* isfrnt = starting location in blank common (0 address, *
+* double precision alignment) of the neutron rho *
+* tabulations for the current target isotope: *
+* there are up to 6 density distribution extending*
+* also out of the nominal radius: *
+* rhosft(i,1,n) = usual density distribution *
+* rhosft(i,2,n) = 1 folded with rmspro *
+* rhosft(i,3,n) = 1 folded with 1.5 rmspro *
+* rhosft(i,4,n) = 1 folded with 2 rmspro *
+* rhosft(i,5,n) = nucleon centre density distr. *
+* rhosft(i,6,n) = to be used for pion potential *
+* Note: *
+* equivalence (gmstor(isfrpt+1:mvsfbn),rhosft(1:mvsfbn,1,1))*
+* equivalence (gmstor(isfrpt+mvsfbn:2*mvsfbn),rhosft(1:mvsfbn,2,1))*
+* equivalence (gmstor(isfrnt+1:mvsfbn),rhosft(1:mvsfbn,1,2))*
+* equivalence (gmstor(isfrnt+mvsfbn:2*mvsfbn),rhosft(1:mvsfbn,2,2))*
+* ..... *
+* nsfrht = number of rho tabulations (from 2 up to 6) *
+* 1 and "5" are always present *
+* isfrit = starting location in blank common (0 address, *
+* double precision alignment) of the cumulative *
+* density tabulations for the current target iso- *
+* tope *
+* Note: *
+* equivalence (gmstor(isfrit+0:mrsfbn),rhisft(0:mrsfbn)) *
+* isfvpt = starting location in blank common (0 address, *
+* double precision alignment) of the nuclear po- *
+* tential tabulations for the current target iso- *
+* tope, for protons and neutrons *
+* Note: *
+* equivalence (gmstor(isfvpt+1:mvsfbn),vposft(1:mvsfbn,1))*
+* equivalence (gmstor(isfvpt+mvsfbn+1:mvsfbn),vposft(1:mvsfbn,2))*
+* isfcot = starting location in blank common (0 address, *
+* double precision alignment) of the Coulomb po- *
+* tential tabulations for the current target iso- *
+* tope *
+* Note: *
+* equivalence (gmstor(isfcot+1:mcsfbn),vcosft(1:mcsfbn)) *
+* isfpft = starting location in blank common (0 address, *
+* double precision alignment) of the Fermi momen- *
+* tum tabulations for the current target isotope *
+* Note: *
+* inpair = ( ibtar - ichtar + 1 ) / 2, paired levels *
+* izpair = ( ichtar + 1 ) / 2, paired levels *
+* inpair = ibtar - ichtar, unpaired levels *
+* izpair = ichtar, unpaired levels *
+* equivalence (gmstor(isfpft+1:mrsfbn),pfrsft(1:mrsfbn,1))*
+* equivalence (gmstor(isfpft+mrsfbn+1:mrsfbn),pfrsft(1:mrsfbn,2))*
+* isflvt = starting location in blank common (0 address, *
+* double precision alignment) of the nuclear le- *
+* vel tabulations for the current target isotope *
+* Note: *
+* equivalence (gmstor(isflvt+1:izpair),ennclv(1:izpair,1))*
+* equivalence (gmstor(isflvt+izpair+1:inpair),ennclv(1:inpair,2))*
+* isfrlt = starting location in blank common (0 address, *
+* double precision alignment) of the max radius *
+* for a a given nuclear level tabulations for the *
+* current target isotope *
+* Note: *
+* equivalence (gmstor(isfrlt+1:izpair),ranclv(1:izpair,1))*
+* equivalence (gmstor(isfrlt+izpair+1:inpair),ranclv(1:inpair,2))*
+* isflpt = starting location in blank common (0 address, *
+* double precision alignment) of the rho and rho^2*
+* laplacian tabulations for the current target *
+* isotope *
+* equivalence (gmstor(isflpt+1:mvsfbn),rlpsft(1:mvsfbn,1)) *
+* equivalence (gmstor(isflpt+mvsfbn:2*mvsfbn),rlpsft(1:mvsfbn,2))*
+* isfvet = starting location in blank common (0 address, *
+* double precision alignment) of the E=oo nuclear *
+* potential tabulations for the current target *
+* isotope, for protons and neutrons *
+* Note: *
+* equivalence (gmstor(isfvet+1:mvsfbn),vpesft(1:mvsfbn,1))*
+* isfrpp = starting location in blank common (0 address, *
+* double precision alignment) of the proton rho *
+* for pion potential tabulations for the current *
+* target isotope, it is chosen at run time accor- *
+* ding to Lrhfl3 *
+* isfrnp = starting location in blank common (0 address, *
+* double precision alignment) of the neutron rho *
+* for pion potential tabulations for the current *
+* target isotope, it is chosen at run time accor- *
+* ding to Lrhfl3 *
+* isfrpc = starting location in blank common (0 address, *
+* double precision alignment) of the p centre rho *
+* for pion potential tabulations for the current *
+* target isotope, it is set at run time *
+* isfrnc = starting location in blank common (0 address, *
+* double precision alignment) of the n centre rho *
+* for pion potential tabulations for the current *
+* target isotope, it is set at run time *
+* equivalence (gmstor(isfvet+mvsfbn+1:mvsfbn),vpesft(1:mvsfbn,2))*
+* icriso = number of the current isotope (see kasftb ex- *
+* plaination) *
+* isfpon = location in blank common of the dummy proton/ *
+* neutron arrays *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NRSFBN = 12 )
+ PARAMETER ( NVSFBN = NRSFBN + 8 )
+ PARAMETER ( NCSFBN = NVSFBN + 5 )
+ PARAMETER ( MXTAIS = NSTBIS + MXXMDF )
+ COMMON / NCSFTA / KASFTB (MXTAIS), MRSFBN, MVSFBN, MCSFBN, ISFAUT,
+ & ISFRAT , ISFRPT, ISFRNT, NSFRHT, ISFRIT, ISFVPT,
+ & ISFCOT , ISFPFT, ISFLVT, ISFRLT, ISFLPT, ISFVET,
+ & ISFRPP , ISFRNP, ISFRPC, ISFRNC, ICRISO, ISFPON
+
--- /dev/null
+*$ CREATE NDNICM.ADD
+*COPY NDNICM
+*
+*=== ndnicm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Nucleon Decay and Neutrino Interaction CoMmon: *
+* *
+* Created on 12 january 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 05-oct-98 by Alfredo Ferrari *
+* *
+* Ndnitr = target nucleon id. or decaying nucleon id *
+* Nuproj = (anti)neutrino projectile *
+* (-)1=(anti)nue *
+* (-)2=(anti)numu *
+* (-)3=(anti)nutau *
+* 0=nucleon decay *
+* Nuclid = neutrino interaction kind *
+* -1 = tape or external generator *
+* 0 = as set otherwise (Nuinfo) *
+* > 0 = Iqe + Ires x 10 + Idis x 100 *
+* Iqe: *
+* 0 = no QE NC and CC *
+* 1 = QE NC *
+* 2 = QE CC *
+* 3 = QE NC and CC *
+* Ires: *
+* 0 = no RES NC and CC *
+* 1 = RES NC *
+* 2 = RES CC *
+* 3 = RES NC and CC *
+* Idis: *
+* 0 = no DIS NC and CC *
+* 1 = DIS NC *
+* 2 = DIS CC *
+* 3 = DIS NC and CC *
+* Ncdcsc = nucleon decay secondary number or neutrino *
+* interaction from tape secondary number *
+* Kncdcs(i) = nucleon decay / neutrino interaction secondary *
+* id. (Part numbering) *
+* Etndni(i) = total energy of i_th secondary (i>=1), *
+* total energy of primary neutrino (i=0) *
+* Pxndni(i) = x momentum of i_th secondary (i>=1), *
+* x momentum of primary neutrino (i=0) *
+* Pyndni(i) = y momentum of i_th secondary (i>=1), *
+* y momentum of primary neutrino (i=0) *
+* Pzndni(i) = z momentum of i_th secondary (i>=1), *
+* z momentum of primary neutrino (i=0) *
+* Po0lpt,Pollpt(j) = Polarization 4-vector for the outcoming lepton *
+* in the frame where the incident neutrino is along *
+* the positive z axis *
+* Polprl = Polarization component along the particle direc- *
+* tion in the final frame *
+* Nnitdc = number of decay products for a (possible) prere- *
+* corded tau decay *
+* Knitdc(i) = tau decay products id. (Part numbering) *
+* Etnitd(i) = total energy in the particle cms (particle flying *
+* along +z) of j_th decay product of a possible *
+* prerecorded tau decay *
+* Pxnitd(i) = x momentum in the particle cms (particle flying *
+* along +z) of j_th decay product of a possible *
+* prerecorded tau decay *
+* Pynitd(i) = y momentum in the particle cms (particle flying *
+* along +z) of j_th decay product of a possible *
+* prerecorded tau decay *
+* Pznitd(i) = z momentum in the particle cms (particle flying *
+* along +z) of j_th decay product of a possible *
+* prerecorded tau decay *
+* Lnitdc = flag for a (possible) prerecorded tau decay *
+* Lnditp = flag for a (possible) tape recorded or external *
+* event generator *
+* Lndixg = flag for a (possible) external event generator *
+* (Lnditp=.true. ,Lndixg=.false. -> tape event, *
+* Lnditp=.true. ,Lndixg=.true. -> ext. generator, *
+* Lnditp=.false.,Lndixg=.false. -> int. generator) *
+* Jntpcl = event selected for the current collision from a *
+* possibile neutrino interaction tape *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXNDNI =100 )
+ PARAMETER ( MXNITD = 10 )
+*
+ LOGICAL LNITDC, LNDITP, LNDIXG
+ COMMON / NDNICM / ETNDNI (0:MXNDNI), PXNDNI (0:MXNDNI),
+ & PYNDNI (0:MXNDNI), PZNDNI (0:MXNDNI),
+ & ETNITD (MXNITD), PXNITD (MXNITD),
+ & PYNITD (MXNITD), PZNITD (MXNITD),
+ & POLLPT (3), PO0LPT, POLPRL,
+ & NDNITR, NUPROJ, NUCLID, NCDCSC, NNITDC,
+ & KNCDCS (MXNDNI), KNITDC (MXNITD),
+ & LNITDC, LNDITP, LNDIXG, JNTPCL
+
--- /dev/null
+*$ CREATE NIKNCM.ADD
+*COPY NIKNCM
+*
+*=== Nikncm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Neutrino Interaction KiNematics CoMmon: *
+* *
+* Created on 03 july 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 18-jan-99 by Alfredo Ferrari *
+* *
+* Icnikn = 1: charged current, 0: neutral current *
+* Idnikn = 1: Quasi-Elastic, 2: Resonance production, 3: DIS *
+* Isnikn =-1: Neutrino projectile, 1: Antineutrino projectile *
+* Itnikn = 2 x T_z of the target nucleon *
+* Ipnikn = Projectile neutrino id (Paprop numeration) *
+* Kpnikn = Projectile neutrino id (Part numeration) *
+* Ktnikn = Target nucleon id (Part numeration) *
+* Klnikn = Outgoing lepton/neutrino id (Part numeration) *
+* Kbnikn = Outgoing baryon id (Part numeration) *
+* Axlmss = axial mass *
+* Vctmss = vector mass *
+* Ampnik = Projectile neutrino mass (it should be zero) *
+* Amtnik = Target nucleon mass *
+* Amlnik = Outgoing lepton/neutrino mass *
+* Ambnik = Outgoing baryon mass *
+* Eneink = Lab. energy of the incoming neutrino *
+* Umnikn = sqrt (s): center-of-mass energy *
+* Umnksq = s : center-of-mass energy squared *
+* Pcmink = cms momentum of the incoming neutrino/target nucleon *
+* Pcmonk = cms momentum of the outgoing lepton-neutrino/baryon *
+* Ecmlnk = cms energy of the outgoing lepton-neutrino *
+* Q2mnnk = Q^2_min *
+* Q2mxnk = Q^2_max *
+* Q2nikn = actual Q^2 *
+* W2mnnk = W^2_min *
+* W2mxnk = W^2_max *
+* W2nikn = actual W^2 *
+* Omcsnk = 1 - cos theta_cms *
+* Cxplnk = X-cosine of the polarization vector in the outgoing *
+* lepton rest frame or in the lab frame for an outgoing *
+* neutrino *
+* Cyplnk = Y-cosine of the polarization vector in the outgoing *
+* lepton rest frame or in the lab frame for an outgoing *
+* neutrino *
+* Czplnk = Z-cosine of the polarization vector in the outgoing *
+* lepton rest frame or in the lab frame for an outgoing *
+* neutrino *
+* *
+*----------------------------------------------------------------------*
+*
+* FA (0) ******!!!! Controversial sign .
+* Keep minus from Lewellyn-Smith, Cavanna, MACRO PhD, massive nu.
+* somehow linked to the sign of the "B" term
+ PARAMETER ( FAFFQE =-1.262 D+00 )
+* Axial mass ( from bubble chamber aver. (Cavanna, MACRO PhD )
+ PARAMETER ( AXLMRF = 1.03 D+00 )
+* PARAMETER ( AXLMRF = 0.73 D+00 )
+* Vector mass
+ PARAMETER ( VCTMRF = 0.84 D+00 )
+* PARAMETER ( VCTMRF = 0.73 D+00 )
+* anomalous mu_p - mu_n in nuclear magneton
+ PARAMETER ( CSIAPN = PRMGNM - ANMGNM - ONEONE )
+ PARAMETER ( CSTHCB = 0.9737D+00 )
+* From Lew.-Sm = G^2 * Cos(theta_Cabibbo)^2 / 8 / pi )
+ PARAMETER ( CSTNIK = GFOHB3 * GFOHB3 * CSTHCB * CSTHCB * PLABRC
+ & * PLABRC * TENTEN / EIGEIG / PIPIPI )
+*
+ COMMON / NIKNCM / AXLMSS, VCTMSS, AMPNIK, AMTNIK, AMLNIK, AMBNIK,
+ & ENEINK, UMNIKN, UMNKSQ, PCMINK, PCMONK, ECMLNK,
+ & Q2MNNK, Q2MXNK, Q2NIKN, W2MNNK, W2MXNK, W2NIKN,
+ & OMCSNK, XMTIKN, KPNIKN, KTNIKN, KLNIKN, KBNIKN,
+ & ICNIKN, IDNIKN, ISNIKN, ITNIKN, IPNIKN
+
--- /dev/null
+*$ CREATE NNXINM.ADD
+*COPY NNXINM
+*
+*=== nnxinm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Nucleon-Nucleon elastic Xsec IN Medium: *
+* *
+* Created on 16 september 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 16-sep-94 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BIMSEL *
+* NUCNUC *
+* NWISEL *
+* PREPRE *
+* SIGFER *
+* *
+* Description of the variables (nnxinm): *
+* *
+* Fnnxim (i) = Modification factor for N-N in medium*
+* elastic scattering for the current *
+* (nucleon) projectile: i=1, for target *
+* proton, i=2 for target neutron *
+* Innimf = flag for the cascade part for N-N in *
+* medium effects for elastic scattering*
+* Nnnimf = flag for the preeq. part for N-N in *
+* medium effects for elastic scattering*
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( RH0INM = 0.18 D+00 )
+ PARAMETER ( ALINM0 = HLFHLF )
+ PARAMETER ( EALINM = 0.260D+00 )
+ PARAMETER ( DEAINM = 0.010D+00 )
+ PARAMETER ( EBLINM = 0.055D+00 )
+ PARAMETER ( DEBINM = 0.005D+00 )
+ PARAMETER ( EMLINM = EALINM + TENTEN * DEAINM )
+ COMMON / NNXINM / FNNXIM (2), INNIMF, NNNIMF
+
--- /dev/null
+*$ CREATE NUCDAT.ADD
+*COPY NUCDAT
+* *
+*=== nucdat ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Include file Nucdat *
+* *
+* Created on 20 april 1990 by Alfredo Ferrari *
+* INFN Milan *
+* *
+* Last change on 08-nov-96 *
+* *
+* Included in the following routines: *
+* *
+* COREVT *
+* CORRIN *
+* DISTNU *
+* DRES *
+* EVDEEX *
+* EVENTV *
+* EVEVAP *
+* FEREVV *
+* FERHAV *
+* FEFCAV *
+* FEKFAV *
+* FPFCAV *
+* FPFRAV *
+* FVCOUL *
+* FVPESF *
+* FVPOSF *
+* FRBKIN *
+* INCINI *
+* NUCEVV *
+* NUCRIV *
+* PEANUT *
+* RAKEKV *
+* RBKEKV *
+* WSTOAP *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( AMUAMU = AMUGEV )
+* PARAMETER ( AMPROT = 0.9382796 D+00 )
+ PARAMETER ( AMPROT = AMPRTN )
+* PARAMETER ( AMNEUT = 0.9395731 D+00 )
+ PARAMETER ( AMNEUT = AMNTRN )
+ PARAMETER ( AMELEC = AMELCT )
+ PARAMETER ( R0NUCL = 1.12 D+00 )
+ PARAMETER ( RCCOUL = 1.7 D+00 )
+ PARAMETER ( COULPR = COUGFM )
+ PARAMETER ( AMHYDR = AMPRTN + AMELCT )
+ PARAMETER ( AMHTON = AMHYDR - AMNTRN )
+ PARAMETER ( AMNTOU = AMNTRN - AMUC12 )
+ PARAMETER ( AMUCSQ = AMUC12 * AMUC12 )
+ PARAMETER ( EBNDAV = HLFHLF * (AMPRTN + AMNTRN) - AMUC12 )
+* Gammin : threshold for deexcitation gammas production, set to 1 keV
+* (this means that up to 1 keV of energy unbalancing can occur
+* during an event)
+ PARAMETER ( GAMMIN = 1.0D-06 )
+ PARAMETER ( GAMNSQ = 2.0D+00 * GAMMIN * GAMMIN )
+* Tvepsi : "epsilon" for excitation energy, set to gammin / 100
+ PARAMETER ( TVEPSI = GAMMIN / 100.D+00 )
+*
+ COMMON /NUCDAT/ AV0WEL, APFRMX, AEFRMX, AEFRMA,
+ & RDSNUC, V0WELL (2), PFRMMX (2), EFRMMX (2),
+ & EFRMAV (2), AMNUCL (2), AMNUSQ (2), EBNDNG (2),
+ & VEFFNU (2), ESLOPE (2), PKMNNU (2), EKMNNU (2),
+ & PKMXNU (2), EKMXNU (2), EKMNAV (2), EKINAV (2),
+ & EXMNAV (2), EKUPNU (2), EXMNNU (2), EXUPNU (2),
+ & ERCLAV (2), ESWELL (2), FINCUP (2), AMRCAV ,
+ & AMRCSQ , ATO1O3 , ZTO1O3 , FRMRFC ,
+ & ELBNDE (0:100)
+
--- /dev/null
+*$ CREATE NUCGEO.ADD
+*COPY NUCGEO
+*
+*=== nucgeo ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NUClear GEOmetry common: *
+* *
+* Created on 20 july 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 05-apr-01 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* AHYVPI *
+* ANCVPI *
+* BDPREE *
+* BERTTP *
+* BIMCAL *
+* BIMSEL *
+* BIMSTR *
+* COUINI *
+* COUSET *
+* CRCNFG *
+* DEFLTS *
+* DELTAR *
+* DEUSTR *
+* EVENTV *
+* FEFCAV *
+* FEKFAV *
+* FINAPV *
+* FINCPV *
+* FINCRD *
+* FINRMS *
+* FINRSF *
+* FINRWS *
+* FINSPA *
+* FINSPE *
+* FINVPE *
+* FINVPO *
+* FPFCAV *
+* FPFRAV *
+* FRDPFT *
+* FRHAVE *
+* FRHINC *
+* FRHOWS *
+* FRMSWS *
+* FRRHNC *
+* FRRHWS *
+* FTMRAD *
+* FTTMRD *
+* FVCOUL *
+* FVPESF *
+* FVPOSF *
+* FVVESF *
+* FVVPSF *
+* FRHONC *
+* FVQESF *
+* FVQPSF *
+* HDNCIN *
+* HYPVPI *
+* KAONUC *
+* KAOVPI *
+* KBANUC *
+* KBAVPI *
+* KBSNUC *
+* KHYNUC *
+* LSPMSS *
+* MUMRAT *
+* MUOABS *
+* NIZLNW *
+* NCLVIN *
+* NCLVST *
+* NUCNUC *
+* NUCVPI *
+* NWISEL *
+* PEANUT *
+* PFNCLV *
+* PFCSCR *
+* PIABTH *
+* PIOABS *
+* PIONUC *
+* PIOVPI *
+* PMPRAB *
+* PREPRE *
+* RCFSET *
+* RNCCRR *
+* RSTSEL *
+* RTAUFR *
+* SBCOMP *
+* SETITB *
+* SETIPW *
+* SIGFER *
+* UMFNST *
+* UMOFIN *
+* WSTOAP *
+* VPOAHY *
+* VPOANC *
+* VPOBRS *
+* VPOHYP *
+* VPOKAO *
+* VPOKBA *
+* VPONUC *
+* VPOPIO *
+* *
+* Description of the variables (NUCGEO): *
+* *
+* Radtot = total radius of the nucleus *
+* Radiu0 = radius of the nucleus constant *
+* density core *
+* Radiu1 = radius at the nucleus skin depth *
+* end *
+* Rad1o2 = half density radius of the nucleus *
+* Skindp = Skin depth of the nucleus ( where *
+* density decreases linearly with the *
+* radius from rhocen to rhoskn, *
+* Radiu1 = Radiu0 + Skindp and *
+* Rad1o2 = Radiu0 + 1/(2 Omalhl) *
+* x Skindp ) *
+* Rhoskn = Rhocen * Alphal *
+* Halodp = Halo depth of the nucleus ( where *
+* density decreases linearly with the *
+* radius from rhoskn to 0, *
+* Radtot = Radiu0 + Skindp + Halodp *
+* Alphal = fraction of the central density the *
+* transition from skin to halo occurs *
+* at *
+* Omalhl = 1 - Alphal *
+* Radskn = Radius at which the density would be *
+* zero if the skin depth behaviour is *
+* continued (Radskn = Radiu0 + Skindp *
+* / Omalhl) *
+* Skneff = "effective" skin depth corresponding *
+* to Radskn, Skneff = Skindp / Omalhl *
+* Radpro = equivalent radius of the projectile *
+* Bimptr = "true" impact parameter of the proj- *
+* ectile (referred to the centre of *
+* the projectile) *
+* Rimptr = "true" radius of the interaction *
+* point (referred to the centre of *
+* the projectile) *
+* X,Y,Zimptr = "true" position of the interaction *
+* point (referred to the centre of *
+* the projectile) *
+* Rhocen = central density of the nucleus *
+* Rhocor = density at the transition point from *
+* core to skin *
+* Rhoskn = density at the transition point from *
+* skin to halo, Rhoskn = Alphal Rhocen *
+* Rhoipp = proton density at the position *
+* of the 1st target nucleon *
+* Rhoinp = neutron density at the position *
+* of the 1st target nucleon *
+* Rhoimp = density of the nucleus at the posi- *
+* tion of the 1st target nucleon *
+* Rhoip2 = proton density at the position *
+* of the 2nd target nucleon *
+* Rhoin2 = neutron density at the position *
+* of the 2nd target nucleon *
+* Rhoim2 = density of the nucleus at the posi- *
+* tion of the 2nd target nucleon *
+* Rhoip3 = proton density at the position *
+* of the 3rd target nucleon *
+* Rhoin3 = neutron density at the position *
+* of the 3rd target nucleon *
+* Rhoim3 = density of the nucleus at the posi- *
+* tion of the 3rd target nucleon *
+* Rhoncj(i,j) = proton(i=1) and neutron(i=2) density *
+* of the nucleus at the position of *
+* the jth target nucleon *
+* Rhoimj(j) = (total) density of the nucleus at *
+* the position of the jth target nuc- *
+* leon *
+* Rhoipt = proton density at the position *
+* of the projectile *
+* Rhoint = neutron density at the position *
+* of the projectile *
+* Rhoimt = density of the nucleus at the posi- *
+* tion of the projectile *
+* Pfr,Ekfcen = Maximum Fermi momentum/energy in the *
+* central core *
+* Pfr,Ekfpro = Maximum Fermi momentum/energy at the *
+* true interaction point for the proj- *
+* ectile (they are computed as for nu- *
+* cleons without any reduction factor) *
+* Pfr,Ekfimp = Maximum Fermi momentum/energy at the *
+* "effective" interaction point for *
+* the 1st target nucleon *
+* Pfr,Ekfim2 = Maximum Fermi momentum/energy at the *
+* "effective" interaction point for *
+* the 2nd target nucleon *
+* Pfr,Ekfim3 = Maximum Fermi momentum/energy at the *
+* "effective" interaction point for *
+* the 3rd target nucleon *
+* Pfr,Ekfimj(j) = Maximum Fermi momentum/energy at the *
+* "effective" interaction point for *
+* the jth target nucleon *
+* Pfr,Ekfbim = Maximum Fermi momentum/energy at *
+* r = " effective" impact parameter *
+* (Bimpct) for the nucleon with the *
+* deepest well *
+* Vprwll = well depth for the present projectile*
+* at the "true" interaction point *
+* Bimpct = "effective" impact parameter of the *
+* projectile (referred to the centre *
+* of the target nucleon) *
+* Rimpct = "effective" radius of the interac- *
+* tion point (referred to the centre *
+* of the 1st target nucleon) *
+* X,Y,Zimpct = "effective" position of the interac- *
+* tion point (referred to the centre *
+* of the 1st target nucleon) *
+* Rimpc2 = "effective" radius of the interac- *
+* tion point (referred to the centre *
+* of the 2nd target nucleon) *
+* X,Y,Zimpc2 = "effective" position of the interac- *
+* tion point (referred to the centre *
+* of the 2nd target nucleon) *
+* Rimpc3 = "effective" radius of the interac- *
+* tion point (referred to the centre *
+* of the 3rd target nucleon) *
+* X,Y,Zimpc3 = "effective" position of the interac- *
+* tion point (referred to the centre *
+* of the 3rd target nucleon) *
+* Rimpcj(j) = "effective" radius of the interac- *
+* tion point (referred to the centre *
+* of the jth target nucleon) *
+* X,Y,Zimpcj(j) = "effective" position of the interac- *
+* tion point (referred to the centre *
+* of the jth target nucleon) *
+* Ekferm = actual Fermi energy of the 1st tar- *
+* get nucleon *
+* Ekfext = part of actual Fermi energy of the *
+* 1st target nucleon due to (random) *
+* extra contributions *
+* Pnfrmi = actual Fermi momentum of the 1st tar-*
+* get nucleon *
+* Px,y,zferm = actual Fermi momentum components of *
+* the 1st target nucleon *
+* Ekfer2 = actual Fermi energy of the 2nd tar- *
+* get nucleon *
+* Ekfex2 = part of actual Fermi energy of the *
+* 2nd target nucleon due to (random) *
+* extra contributions *
+* Pnfrm2 = actual Fermi momentum of the 2nd tar-*
+* get nucleon *
+* Px,y,zfer2 = actual Fermi momentum components of *
+* the 2nd target nucleon *
+* Ekfer3 = actual Fermi energy of the 3rd tar- *
+* get nucleon *
+* Ekfex3 = part of actual Fermi energy of the *
+* 3rd target nucleon due to (random) *
+* extra contributions *
+* Pnfrm3 = actual Fermi momentum of the 3rd tar-*
+* get nucleon *
+* Px,y,zfer3 = actual Fermi momentum components of *
+* the 3rd target nucleon *
+* Ekferj(j) = actual Fermi energy of the jth tar-*
+* get nucleon *
+* Pnfrmj(j) = actual Fermi momentum of the jth tar-*
+* get nucleon *
+* Px,y,zferm(j) = actual Fermi momentum components of *
+* the jth target nucleon *
+* Px,y,zfevt = total Fermi momentum for the present *
+* interaction *
+* Ekewll = actual kinetic energy of the projec- *
+* tile including nuclear potential *
+* Pprwll = actual momentum of the projectile *
+* Px,y,zproj = actual momentum components of the *
+* projectile *
+* Wllred = reduction factor to be applied to *
+* the Ipwell well to get the proper *
+* well for the projectile *
+* Amothr = total mass of particles other than *
+* nucleons still going around in the *
+* nucleus *
+* Ekothr = total kinetic energy with respect to *
+* the "standard" free level of parti- *
+* cles other than nucleons still going *
+* around in the nucleus *
+* Amcrea = total created/annihilated mass in in-*
+* elastic interactions (positive for *
+* creation, say Mprod > Mproj + Mtarg) *
+* Ekncln = total kinetic energy with respect to *
+* the "standard" free level of nucleons*
+* still going around in the nucleus *
+* Clmbbr = Coulomb barrier for the present pro- *
+* jectile *
+* Rdclmb = radius corresponding to the Coulomb *
+* barrier at which Coulomb effects are *
+* supposed to be overcome by the nuc- *
+* lear potential: *
+* Rdclmb = Clmbbr / (zZe^2) *
+* Bfclmb = correction factor for the impact pa- *
+* rameter, for boo such that the actual*
+* b =< Rdclmb: *
+* Bfclmb = sqrt ( 1 - Clmbbr/Ekproj ) *
+* Bfceff = actual correction factor for the imp-*
+* act parameter, b = boo / Bfceff *
+* for boo =< Rdclmb x Bfclmb: *
+* Bfceff = Bfclmb *
+* for boo > Rdclmb x Bfclmb: *
+* Bfceff = 1 / ( x + sqrt (1+x^2) ) *
+* x = Clmbbr x Rdclmb / (2 Ekproj boo)*
+* Vcoucn = Coulomb potential at center (>0) *
+* Fpnblc,Dpnblc = meaningful only if Lpnrho=.true.: *
+* the ratio of the Myers b_lepto para- *
+* meter for neutrons with respect to *
+* protons is given by: *
+* b_neu / b_pro = Fpnblc + Dpnblc x ( R_n - R_p ) / R_p *
+* Hcrfrm(i) = Whenever a Fermi momentum is selected*
+* it is not changed until the particle *
+* travelled a distance (x=pro,neu): *
+* Hcrfrm(1) + Hcrfrm(2) *
+* x [Rho_loc_x / Rho_cen_x]^Hcrfrm(3) *
+* Hcrfrm(i) = Particle formation zones/hard cores *
+* are reduced for n-body absorption *
+* by a distance: *
+* Sqrt(n-1) x {Hcrabs(1) + Hcrabs(2) *
+* x [Rho_loc / Rho_cen]^Hcrabs(3)} *
+* Rdttnc(i) = The same as Radtot but specialized *
+* for protons and neutrons in the case *
+* the p/n density distributions are *
+* different *
+* Agepri = "age" (fm/c) of current particle *
+* Akprin = mass of the projectile *
+* Ethrnd = random smearing of the reinteraction *
+* threshold for explicit interactions *
+* Ipwell = index of the target nucleon well to *
+* be used in computing the one for the *
+* projectile *
+* ( 1 = proton, 2 = neutron ) *
+* Itncmx = index of the target nucleon with *
+* largest Fermi momentum *
+* ( 1 = proton, 2 = neutron ) *
+* Kprin = particle index of the projectile *
+* Ntargt = number of target nucleons (3 at max) *
+* Knucim = particle index of the target nucleon *
+* ( 1 = proton, 8 = neutron ) *
+* Knuci2 = particle index of the 2nd target *
+* nucleon for absorption on a couple *
+* of nucleons *
+* Knuci3 = particle index of the 3rd target *
+* nucleon for absorption on a triplet *
+* of nucleons *
+* Knucij(j) = particle index of the jth target *
+* nucleon *
+* Isfcol = bin number of the present collision *
+* point (projectile) *
+* Isftar = bin number of the present collision *
+* point (target nucleon) *
+* Isfta2 = bin number of the present collision *
+* point (2nd target nucleon) *
+* Isfta3 = bin number of the present collision *
+* point (3rd target nucleon) *
+* Isftaj(j) = bin number of the present collision *
+* point (jth target nucleon) *
+* Npothr = number of particles other than nuc- *
+* leons still going around in the nuc- *
+* leus *
+* Icothr = total charge of particles other than *
+* nucleons still going around in the *
+* nucleus *
+* Ibothr = baryon number of particles other than*
+* nucleons still going around in the *
+* nucleus *
+* Npumfn = number of emitted particles which *
+* must still be treated for recoil *
+* Iabcou = counter for multibody absorption *
+* events (+1 for each extra nucleon) *
+* Iadflg = flag for angular distribution options*
+* in preequilibrium *
+* Itaucm = flag for "coherence" length (tautau) *
+* options in preequilibrium *
+* Igsflg = flag for g (single particle level *
+* density parameter option) in preequi-*
+* librium *
+* Igsflg = i0 + i1 * 10 *
+* i0 is the flag for the single parti- *
+* cle level density approach *
+* i1 > 0: nucleon independent g parame-*
+* ters *
+* i1 = 0: nucleon dependent g parame- *
+* ters *
+* Ialflg = flag for a (level density parameter *
+* option) in preequilibrium *
+* Icbflg = flag for centriphugal barrier for *
+* preequilibrium (-1 -> no barrier, *
+* 0 -> naive barrier, 1 less naive *
+* barrier) *
+* Iftflg = flag specifying the option for forma-*
+* tion time competition: meaningful *
+* only for Lftcmp=.true. *
+* Iftflg = isign x ( i0 + 100 x i1 *
+* + 10000 x i2 ) *
+* isign =0,+1: formation time competition app- *
+* lied to all interactions *
+* -1: formation zone competition applied*
+* to primary interactions only *
+* (in order to get isign =-1, i0,i1,i2 *
+* all 0 set =-1000000) *
+* i0 = 0: no account for nucleon correlation*
+* distance and antisymmetrization *
+* effects *
+* = 1: interactions within nucleon corre-*
+* lation distance or antisymmetriza-*
+* tion distance are not allowed *
+* = 2: interactions within nucleon corre-*
+* lation distance are not allowed, *
+* no account for antisymmetrization *
+* effects *
+* = 3: interactions within antisymmetri- *
+* zation distance are not allowed, *
+* no account for nucleon correla- *
+* tions *
+* i1 = 0: formation time competition among *
+* all kind of interactions *
+* = 1: formation time competition only *
+* among different kind of inter- *
+* actions (ie elastic vs inelastic) *
+* ch.exc. like elastic *
+* Irdflg = flag specifying the option for max. *
+* nuclear radii calculations inside *
+* Wstoap: *
+* Irdflg = I0 + 100 x I1 *
+* I0 = flag for rho radii *
+* I1 = flag for mass radii *
+* Fftflg = factor for the option for formation *
+* time competition: meaningful only *
+* for Lftcmp=.true. *
+* Lpreeq = logical flag for the new preequili- *
+* brium *
+* Lnphtc = logical flag for the new coherence *
+* length, hard core and Pauli correla- *
+* tion implementation into prepre *
+* Lpnrho = logical flag for switching on the *
+* calculation with separate densities *
+* for p and n *
+* Lnwrad = logical flag for computing nuclear *
+* radii according to a fraction in mass*
+* and not in density *
+* Lftcmp = logical flag for allowing formation *
+* time competition between interactions*
+* Lftcac = logical flag for activated formation *
+* time competition *
+* *
+* Description of the variables (NUCPWI): *
+* *
+* Almbar = Reduced De Broglie wavelength *
+* Bimmax = maximum impact parameter (at oo from *
+* the nucleus) *
+* Siggeo = Geometrical cross section summed *
+* over all partial waves (assuming *
+* opacity=1 for any l) *
+* Siggeo = pi ( Almbar(lmax+1) )^2 *
+* Lllmax = highest partial wave, it corresponds *
+* to: Almbar Lllmax >= Bimmax, where *
+* the >= means that the smallest *
+* integer >= Bimmax / Almbar is used *
+* Lllact = partial wave index of the present *
+* interaction *
+* *
+* Description of the variables (NUCGII): *
+* *
+* Holexp(j) = hole depth for explicit INC interac- *
+* tions for the jth hit nucleon *
+* Nncexi(i) = number of interacting (target) nuc- *
+* leons for the ith explicit INC in- *
+* teraction *
+* Ncexpi(k,i) = identity of kth nucleon participating*
+* to the ith explicit INC interaction *
+* X,Y,Zexpin(k,i) = position of kth nucleon participating*
+* to the ith explicit INC interaction *
+* Ncexpi(k,i) = identity of kth nucleon participating*
+* to the ith explicit INC interaction *
+* Nuscin = number of explicit INC interactions *
+* Ndeust = number of deuteron stripping inter. *
+* Irsrei = flag for various resonance reinterac-*
+* tions options *
+* = 0 standard decay length possibly mo- *
+* dified by ftfrdc *
+* = 1 two resonance interaction with for-*
+* mation time according to q^2 *
+* = 2 two resonance interaction with for-*
+* mation time according to q^2 for sta-*
+* ble products and to standard decay *
+* length for real resonances *
+* Labrst = flag for absorption at rest or s-wave*
+* two body absorption for pions *
+* Lelstc = flag for elastic scattering *
+* Linels = flag for inelastic scattering *
+* Lchexc = flag for charge exchange *
+* Labsrp = flag for resonant two body pion *
+* absorption *
+* Labsth = flag for three body absorption *
+* Lncdcy = flag for nucleon decay *
+* Lnusct = flag for neutrino scattering *
+* Lprabs = flag for current proj. absorption *
+* Ldeust = flag for deuteron stripping *
+* Lrsdcy = flag for resonance decay *
+* Lpntrg = flag for proton/neutron targets *
+* Lrsrei = flag for resonance explicit reinter- *
+* actions (true <-> activated) *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( PI = PIPIPI )
+ PARAMETER ( PISQ = PIPISQ )
+* This is log(11)/(4log(3)), it is ok for alphal = 0.1, bethal = 0.01 )
+ PARAMETER ( SKTOHL = 0.5456645846610345D+00 )
+* This is log(99/19)/(4log(3)), it is ok for alphal = 0.05,
+* bethal = 0.01 )
+* PARAMETER ( SKTOHL = 0.3756286198494407D+00 )
+* This is log(99/4)/(4log(3)), it is ok for alphal = 0.2,
+* bethal = 0.01 )
+* PARAMETER ( SKTOHL = 0.7301997078753058D+00 )
+* This is log(99/4)/(4log(3)), it is ok for alphal = 0.02,
+* bethal = 0.001 )
+* PARAMETER ( SKTOHL = 0.7301997078753058D+00 )
+ PARAMETER ( RZNUCL = 1.12 D+00 )
+ PARAMETER ( RMSPRO = 0.8 D+00 )
+ PARAMETER ( R0PROT = RMSPRO / SQRT12 )
+ PARAMETER ( ARHPRO = 1.D+00 / 8.D+00 / PI / R0PROT / R0PROT
+ & / R0PROT )
+ PARAMETER ( RLLE04 = RZNUCL )
+ PARAMETER ( RLLE16 = RZNUCL )
+ PARAMETER ( RLGT16 = RZNUCL )
+ PARAMETER ( RCLE04 = 0.75D+00 / PI / RLLE04 / RLLE04 / RLLE04 )
+ PARAMETER ( RCLE16 = 0.75D+00 / PI / RLLE16 / RLLE16 / RLLE16 )
+ PARAMETER ( RCGT16 = 0.75D+00 / PI / RLGT16 / RLGT16 / RLGT16 )
+ PARAMETER ( SKLE04 = 1.4D+00 )
+ PARAMETER ( SKLE16 = 1.9D+00 )
+ PARAMETER ( SKGT16 = 2.4D+00 )
+ PARAMETER ( HLLE04 = SKTOHL * SKLE04 )
+ PARAMETER ( HLLE16 = SKTOHL * SKLE16 )
+ PARAMETER ( HLGT16 = SKTOHL * SKGT16 )
+ PARAMETER ( ALPHA0 = 0.1D+00 )
+*2 PARAMETER ( ALPHA0 = 0.05D+00 )
+*0 PARAMETER ( ALPHA0 = 0.2D+00 )
+*3 PARAMETER ( ALPHA0 = 0.02D+00 )
+*4 PARAMETER ( ALPHA0 = 0.25D+00 )
+ PARAMETER ( OMALH0 = 1.D+00 - ALPHA0 )
+ PARAMETER ( GAMSK0 = 0.9D+00 )
+*0 PARAMETER ( GAMSK0 = 0.8D+00 )
+*2 PARAMETER ( GAMSK0 = 0.9D+00 )
+*3 PARAMETER ( GAMSK0 = 0.9D+00 )
+*4 PARAMETER ( GAMSK0 = 0.75D+00 )
+ PARAMETER ( OMGAS0 = 1.D+00 - GAMSK0 )
+ PARAMETER ( POTME0 = 0.6666666666666667D+00 )
+ PARAMETER ( POTBA0 = 1.D+00 )
+* This parameter is the Panofsky ratio
+ PARAMETER ( PNFRAT = 1.533D+00 )
+* This parameter set the branching ratio for radiative pi- capture
+* at rest in complex nuclei (it is a bit larger than the experimental
+* one to compensate for Pauli blocking etc etc ). This value is
+* for A=oo
+ PARAMETER ( RADPIM = 0.035D+00 )
+ PARAMETER ( RDPMHL = 14.D+00 )
+* Probability for pi- absorption to have a second proton in the couple
+* of nucleons ( the first one must be a proton )
+ PARAMETER ( APMRST = 4.D+00 / 44.D+00 )
+* Probability for pi- absorption to have a second proton in the couple
+* of nucleons ( the first one must be a proton )
+ PARAMETER ( APMPRO = 1.D+00 / 6.D+00 )
+* Probability for pi+ absorption to have a proton in the couple
+* of nucleons ( the first one must be a neutron )
+ PARAMETER ( APPPRO = 5.D+00 / 6.D+00 )
+* Probability for pi0 absorption to have a p in the couple
+* as first particle
+ PARAMETER ( AP0PFS = 0.5D+00 )
+* Probability for pi0 absorption to have a p in the couple
+* as second particle for a p first particle
+ PARAMETER ( AP0PFP = 1.D+00 / 3.D+00 )
+* Probability for pi0 absorption to have a p in the couple
+* as second particle for a n first particle
+ PARAMETER ( AP0NFP = 2.D+00 / 3.D+00 )
+* This parameter is the width of a square well like Pauli correlation
+* function with F'(X) = 1/2, X < Xpauco, F'(X) = 1, X > Xpauco, and
+* such that (Xb >> X_pauli), where F(X) is the actual function:
+* /Xb /Xb
+* | dX F(X) = | dX F'(X) = Xb - 1/2 * X_pauli
+* /0 /0
+ PARAMETER ( XPAUCO = 1.88495407241652 D+00 )
+* Maximum number of explicit collisions:
+ PARAMETER ( MXSCIN = 260 )
+*
+ LOGICAL LABRST, LELSTC, LINELS, LCHEXC, LSTEXC, LABSRP, LABSTH,
+ & LNCDCY, LNUSCT, LPREEQ, LNPHTC, LNWRAD, LPNRHO, LFTCMP,
+ & LFTCAC, LPRABS, LDEUST, LRSDCY, LPNTRG, LRSREI
+* NUClear Geometry Input data
+ COMMON / NUCGID / RHOTAB (2:260), RHATAB (2:260), ALPTAB (2:260),
+ & RADTAB (2:260), SKITAB (2:260), HALTAB (2:260),
+ & SK3TAB (2:260), SK4TAB (2:260), HABTAB (2:260),
+ & CWSTAB (2:260), EKATAB (2:260), PFATAB (2:260),
+ & PFRTAB (2:260)
+* NUClear GEOmetry
+ COMMON / NUCGEO / RADTOT, RADIU1, RADIU0, RAD1O2, SKINDP, HALODP,
+ & ALPHAL, OMALHL, RADSKN, SKNEFF, CPARWS, RADPRO,
+ & RADCOR, RADCO2, RADMAX, BIMPTR, RIMPTR, XIMPTR,
+ & YIMPTR, ZIMPTR, RHOIMT, EKFPRO, PFRPRO, RHOCEN,
+ & RHOCOR, RHOSKN, EKFCEN (2), PFRCEN (2), EKFBIM,
+ & PFRBIM, VPRWLL, BIMPCT, XBIMPC, YBIMPC, ZBIMPC,
+ & CXIMPC, CYIMPC, CZIMPC, SQRIMP,
+ & RHOIMJ (MXHTTR), EKFIMJ (MXHTTR),
+ & PFRIMJ (MXHTTR), RIMPCJ (MXHTTR),
+ & XIMPCJ (MXHTTR), YIMPCJ (MXHTTR),
+ & ZIMPCJ (MXHTTR), EKFERJ (MXHTTR),
+ & EKFEXJ (MXHTTR), PNFRMJ (MXHTTR),
+ & PXFERJ (MXHTTR), PYFERJ (MXHTTR),
+ & PZFERJ (MXHTTR), SIGMAP, SIGMAN, SIGMAA,
+ & RHORED, R0TRAJ, R1TRAJ, SBUSED, SBTOT , SBRES ,
+ & RHOAVE, EKFAVE, PFRAVE, AVEBIN, ACOLL , ZCOLL ,
+ & RADSIG, OPACTY, EKECON, PNUCCO, EKEWLL, PPRWLL,
+ & PXPROJ, PYPROJ, PZPROJ, RHOMEM, EKFMEM, BIMMEM,
+ & WLLRED, VPRBIM, POTINC, POTOUT, EEXMIN, VCOUCN
+ COMMON / NUCGE2 / RDTTNC (2), RHONCJ (2,MXHTTR),
+ & RHONCT (2), AMOTHR, EKOTHR, AMCREA, EKNCLN,
+ & EEXDEL, EEXANY, CLMBBR, RDCLMB, BFCLMB, BFCEFF,
+ & BNPROJ, BNDNUC, DEBRLM, SK4PAR, UBIMPC, VBIMPC,
+ & WBIMPC, BNDPOT, SIGMAT, SIGABP, SIGABN, WLLRES,
+ & POTBAR, POTMES, AGEPRI, OPNOPA, ETHRND, AKPRIN,
+ & BNENRG (3), DEFNUC (2), SIGMPR (6), SIGMNU (6),
+ & SIGSXP (4), SIGSXN (4), SIGPAB (3), SIGNAB (3),
+ & HHLP (2), FORTOT (2), FPNBLC, DPNBLC, FFTFLG,
+ & HCRFRM (3), HCRABS (3), PXFEVT, PYFEVT, PZFEVT,
+ & IFTFLG, IPWELL, ITNCMX, IEVPRE, KPRIN , ISFCOL,
+ & NTARGT, KNUCIJ (MXHTTR), ISFTAJ (MXHTTR),
+ & NPOTHR, ICOTHR, IBOTHR, NPUMFN, ISTNCL, ITAUCM,
+ & IABCOU, IADFLG, IGSFLG, IALFLG, ICBFLG, IRDFLG,
+ & LPREEQ, LNPHTC, LPNRHO, LNWRAD, LFTCMP, LFTCAC
+* NUClear Partial Waves Informations
+ COMMON / NUCPWI / ALMBAR, BIMMAX, SIGGEO, LLLMAX, LLLACT
+* NUClear Geometry Interaction Informations
+ COMMON / NUCGII / HOLEXP (2*MXSCIN), XEXPIN (3,0:MXSCIN),
+ & YEXPIN (3,0:MXSCIN), ZEXPIN (3,0:MXSCIN),
+ & AGEXIN (0:MXSCIN), RHOEXP (2), EKFEXP, EHLFIX,
+ & NHLEXP, NHLFIX, IPRTYP, NNCEXI (0:MXSCIN),
+ & NCEXPI (3,0:MXSCIN), ISEXIN (3,0:MXSCIN),
+ & ISCTYP (0:MXSCIN), NUSCIN, NEXPEM, NDEUST,
+ & IRSREI, ININDX, LABRST, LELSTC, LINELS, LCHEXC,
+ & LSTEXC, LABSRP, LABSTH, LNCDCY, LNUSCT, LPRABS,
+ & LDEUST, LRSDCY, LPNTRG, LRSREI
+ DIMENSION AWSTAB (2:260), SIGMAB (3), RHONCP (2), RHONC2 (2),
+ & RHONC3 (2)
+ EQUIVALENCE ( DEFPRO, DEFNUC (1) )
+ EQUIVALENCE ( DEFNEU, DEFNUC (2) )
+* First target nucleon equivalences:
+ EQUIVALENCE ( RHONCP (1), RHONCJ (1,1) )
+ EQUIVALENCE ( RHOIPP, RHONCJ (1,1) )
+ EQUIVALENCE ( RHOINP, RHONCJ (2,1) )
+ EQUIVALENCE ( RHOIMP, RHOIMJ (1) )
+ EQUIVALENCE ( EKFIMP, EKFIMJ (1) )
+ EQUIVALENCE ( PFRIMP, PFRIMJ (1) )
+ EQUIVALENCE ( RIMPCT, RIMPCJ (1) )
+ EQUIVALENCE ( XIMPCT, XIMPCJ (1) )
+ EQUIVALENCE ( YIMPCT, YIMPCJ (1) )
+ EQUIVALENCE ( ZIMPCT, ZIMPCJ (1) )
+ EQUIVALENCE ( EKFERM, EKFERJ (1) )
+ EQUIVALENCE ( EKFEXT, EKFEXJ (1) )
+ EQUIVALENCE ( PNFRMI, PNFRMJ (1) )
+ EQUIVALENCE ( PXFERM, PXFERJ (1) )
+ EQUIVALENCE ( PYFERM, PYFERJ (1) )
+ EQUIVALENCE ( PZFERM, PZFERJ (1) )
+ EQUIVALENCE ( ISFTAR, ISFTAJ (1) )
+ EQUIVALENCE ( KNUCIM, KNUCIJ (1) )
+* Second target nucleon equivalences:
+ EQUIVALENCE ( RHONC2 (1), RHONCJ (1,2) )
+ EQUIVALENCE ( RHOIP2, RHONCJ (1,2) )
+ EQUIVALENCE ( RHOIN2, RHONCJ (2,2) )
+ EQUIVALENCE ( RHOIM2, RHOIMJ (2) )
+ EQUIVALENCE ( EKFIM2, EKFIMJ (2) )
+ EQUIVALENCE ( PFRIM2, PFRIMJ (2) )
+ EQUIVALENCE ( RIMPC2, RIMPCJ (2) )
+ EQUIVALENCE ( XIMPC2, XIMPCJ (2) )
+ EQUIVALENCE ( YIMPC2, YIMPCJ (2) )
+ EQUIVALENCE ( ZIMPC2, ZIMPCJ (2) )
+ EQUIVALENCE ( EKFER2, EKFERJ (2) )
+ EQUIVALENCE ( EKFEX2, EKFEXJ (2) )
+ EQUIVALENCE ( PNFRM2, PNFRMJ (2) )
+ EQUIVALENCE ( PXFER2, PXFERJ (2) )
+ EQUIVALENCE ( PYFER2, PYFERJ (2) )
+ EQUIVALENCE ( PZFER2, PZFERJ (2) )
+ EQUIVALENCE ( ISFTA2, ISFTAJ (2) )
+ EQUIVALENCE ( KNUCI2, KNUCIJ (2) )
+* Third target nucleon equivalences:
+ EQUIVALENCE ( RHONC3 (1), RHONCJ (1,3) )
+ EQUIVALENCE ( RHOIP3, RHONCJ (1,3) )
+ EQUIVALENCE ( RHOIN3, RHONCJ (2,3) )
+ EQUIVALENCE ( RHOIM3, RHOIMJ (3) )
+ EQUIVALENCE ( EKFIM3, EKFIMJ (3) )
+ EQUIVALENCE ( PFRIM3, PFRIMJ (3) )
+ EQUIVALENCE ( RIMPC3, RIMPCJ (3) )
+ EQUIVALENCE ( XIMPC3, XIMPCJ (3) )
+ EQUIVALENCE ( YIMPC3, YIMPCJ (3) )
+ EQUIVALENCE ( ZIMPC3, ZIMPCJ (3) )
+ EQUIVALENCE ( EKFER3, EKFERJ (3) )
+ EQUIVALENCE ( EKFEX3, EKFEXJ (3) )
+ EQUIVALENCE ( PNFRM3, PNFRMJ (3) )
+ EQUIVALENCE ( PXFER3, PXFERJ (3) )
+ EQUIVALENCE ( PYFER3, PYFERJ (3) )
+ EQUIVALENCE ( PZFER3, PZFERJ (3) )
+ EQUIVALENCE ( ISFTA3, ISFTAJ (3) )
+ EQUIVALENCE ( KNUCI3, KNUCIJ (3) )
+* Projectile equivalences:
+ EQUIVALENCE ( RHOIPT, RHONCT (1) )
+ EQUIVALENCE ( RHOINT, RHONCT (2) )
+ EQUIVALENCE ( OMALHL, SK3PAR )
+ EQUIVALENCE ( ALPHAL, HABPAR )
+ EQUIVALENCE ( ALPTAB (2), AWSTAB (2) )
+ EQUIVALENCE ( SIGMPE, SIGMPR (1) )
+ EQUIVALENCE ( SIGMPC, SIGMPR (2) )
+ EQUIVALENCE ( SIGMPI, SIGMPR (3) )
+ EQUIVALENCE ( SIGMPA, SIGMPR (4) )
+ EQUIVALENCE ( SIGMPS, SIGMPR (5) )
+ EQUIVALENCE ( SIGMPH, SIGMPR (6) )
+ EQUIVALENCE ( SIGMNE, SIGMNU (1) )
+ EQUIVALENCE ( SIGMNC, SIGMNU (2) )
+ EQUIVALENCE ( SIGMNI, SIGMNU (3) )
+ EQUIVALENCE ( SIGMNA, SIGMNU (4) )
+ EQUIVALENCE ( SIGMNS, SIGMNU (5) )
+ EQUIVALENCE ( SIGMNH, SIGMNU (6) )
+ EQUIVALENCE ( SIGMA2, SIGPAB (1) )
+ EQUIVALENCE ( SIGMA3, SIGPAB (2) )
+ EQUIVALENCE ( SIGMAS, SIGPAB (3) )
+ EQUIVALENCE ( SIGPAB (1), SIGMAB (1) )
+
+
--- /dev/null
+*$ CREATE NUCLEV.ADD
+*COPY NUCLEV
+*
+*=== nuclev ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NUClear LEVel common: *
+* *
+* Created on 10 january 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 20-oct-96 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BERTTP *
+* BIMSEL *
+* NCLVIN *
+* NCLVGT *
+* NCLVST *
+* NUCNUC *
+* NWISEL *
+* PEANUT *
+* PFNCLV *
+* PIOABS *
+* *
+* Description of the variables (nuclev): *
+* *
+* paenuc(k,i) = pairing energies (GeV), for i=1 pro- *
+* ton pairing energy for Z=k, for i=2 *
+* neutron pairing energy for N=k *
+* shenuc(k,i) = shell energies (GeV), for i=1 pro- *
+* ton shell energy for Z=k, for i=2 *
+* neutron shell energy for N=k *
+* defrmi(i) = level spacing at the Fermi level ac- *
+* cording to a Fermi gas *
+* defmag(i) = extra energy needed to overcome the *
+* gap between the closed shell and the *
+* next level for nuclei with magic *
+* numbers of protons or neutrons *
+* ennclv(k,i) = level energy computed from the well *
+* bottom at nucleus centre (for poten- *
+* tial not dependent on energy) or from*
+* the Fermi level (for energy dependent*
+* potential) *
+* ranclv(k,i) = maximum possible radius for the kth *
+* level *
+* cumrad(k,i) = sum for j=1,k of 1 /Rj where Ri is *
+* the maximum radius at which can be *
+* found the jth nucleon of type i *
+* (i=1 proton, i=2 neutron) *
+* ruspro = maximum radius at which protons can *
+* still be found *
+* rusneu = maximum radius at which neutrons can *
+* still be found *
+* juspro = index for flagging that the jth *
+* proton has been already used if *
+* = inuclv *
+* jusneu = index for flagging that the jth *
+* neutron has been already used if *
+* = inuclv *
+* ntapro = number of protons in the target *
+* ntaneu = number of neutrons in the target *
+* navpro = number of available proton levels in *
+* the target *
+* navneu = number of available neutron levels *
+* in the target *
+* nlspro = number of protons in the last level *
+* nlsneu = number of neutrons in the last level *
+* ncopro = number of protons in the core *
+* nconeu = number of neutrons in the core *
+* nskpro = number of protons in the skin *
+* nskneu = number of neutrons in the skin *
+* nhapro = number of protons in the halo *
+* nhaneu = number of neutrons in the halo *
+* nuspro = number of "used" protons *
+* nusneu = number of "used" neutrons *
+* nacpro = number of still not "used" protons *
+* nacneu = number of still not "used" neutrons *
+* jmxpro = index of the highest energy avai- *
+* lable proton *
+* jmxneu = index of the highest energy avai- *
+* lable neutron *
+* nprnuc = number of presently used nucleons *
+* (max 3) *
+* iprnuc = type of the presently considered *
+* nucleon *
+* jprnuc = index of the presently considered *
+* nucleon *
+* magnum = magic numbers *
+* magpro = last (possibly not filled) proton *
+* shell *
+* magneu = last (possibly not filled) neutron *
+* shell *
+* mgspro(k) = status of the kth proton shell: *
+* -2 not filled but paired *
+* -1 not filled and unpaired *
+* 0 filled (paired of course) *
+* +1 originally filled but now unpai- *
+* red *
+* mgsneu(k) = status of the kth neutron shell *
+* mgsspr(k) = (cumulative) number of protons in *
+* the kth proton subshell *
+* mgssne(k) = (cumulative) number of neutrons in *
+* the kth neutron subshell *
+* nmnsbs(k) = minimum number of nucleons of ith *
+* kind to group together subshell *
+* levels (if < Fermi spacing is used) *
+* Immaterial for Lflvsl = .true. *
+* inuclv = index of the present event *
+* lclvsl = flag for radius-dependent (local) *
+* energy selection *
+* lflvsl = flag for Fermi-like spaced level se- *
+* lection rather than shell model like *
+* lrlvsl = flag for rho like level maximum rad- *
+* ius selection *
+* leqsbl = flag indicating equal levels for *
+* each subshell: *
+* leqsbl=.not.lflvsl.and.not.lrlvsl *
+* *
+*----------------------------------------------------------------------*
+*
+* NUClear LEVel
+ LOGICAL LCLVSL, LFLVSL, LRLVSL, LEQSBL
+ COMMON / NUCLEV / PAENUC (200,2), SHENUC (200,2), DEFRMI (2),
+ & DEFMAG (2), ENNCLV (160,2), RANCLV (160,2),
+ & CUMRAD (0:160,2), RUSNUC (2),
+ & ENPLVL (114), ENNLVL(164), JUSNUC (160,2),
+ & NTANUC (2), NAVNUC (2), NLSNUC (2), NCONUC (2),
+ & NSKNUC (2), NHANUC (2), NUSNUC (2), NACNUC (2),
+ & JMXNUC (2), MAGNUM (8), MAGNUC (2), NSBSHL (2),
+ & NMNSBS (2), IPRNUC (MXHTTR), JPRNUC (MXHTTR),
+ & MGSNUC (8,2), MGSSNC (25,2), NPRNUC, INUCLV,
+ & LCLVSL, LFLVSL, LRLVSL, LEQSBL
+ DIMENSION JUSPRO (160), JUSNEU (160), MGSPRO (8), MGSNEU (8),
+ & MGSSPR (19) , MGSSNE (25)
+ EQUIVALENCE ( RUSNUC (1), RUSPRO )
+ EQUIVALENCE ( RUSNUC (2), RUSNEU )
+ EQUIVALENCE ( JUSNUC (1,1), JUSPRO (1) )
+ EQUIVALENCE ( JUSNUC (1,2), JUSNEU (1) )
+ EQUIVALENCE ( MGSNUC (1,1), MGSPRO (1) )
+ EQUIVALENCE ( MGSNUC (1,2), MGSNEU (1) )
+ EQUIVALENCE ( MGSSNC (1,1), MGSSPR (1) )
+ EQUIVALENCE ( MGSSNC (1,2), MGSSNE (1) )
+ EQUIVALENCE ( NTANUC (1), NTAPRO )
+ EQUIVALENCE ( NTANUC (2), NTANEU )
+ EQUIVALENCE ( NAVNUC (1), NAVPRO )
+ EQUIVALENCE ( NAVNUC (2), NAVNEU )
+ EQUIVALENCE ( NLSNUC (1), NLSPRO )
+ EQUIVALENCE ( NLSNUC (2), NLSNEU )
+ EQUIVALENCE ( NCONUC (1), NCOPRO )
+ EQUIVALENCE ( NCONUC (2), NCONEU )
+ EQUIVALENCE ( NSKNUC (1), NSKPRO )
+ EQUIVALENCE ( NSKNUC (2), NSKNEU )
+ EQUIVALENCE ( NHANUC (1), NHAPRO )
+ EQUIVALENCE ( NHANUC (2), NHANEU )
+ EQUIVALENCE ( NUSNUC (1), NUSPRO )
+ EQUIVALENCE ( NUSNUC (2), NUSNEU )
+ EQUIVALENCE ( NACNUC (1), NACPRO )
+ EQUIVALENCE ( NACNUC (2), NACNEU )
+ EQUIVALENCE ( JMXNUC (1), JMXPRO )
+ EQUIVALENCE ( JMXNUC (2), JMXNEU )
+ EQUIVALENCE ( MAGNUC (1), MAGPRO )
+ EQUIVALENCE ( MAGNUC (2), MAGNEU )
+
--- /dev/null
+*$ CREATE NUCPAR.ADD
+*COPY NUCPAR
+*
+*=== Nucpar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* New version of Nucpar: *
+* *
+* Created on 20-january-1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 20-dec-97 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: not updated *
+* *
+* distnu *
+* eventv *
+* evxtes *
+* nucevv *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Pxnu(i) = X-component of the momentum of the i_th produced *
+* particle *
+* Pynu(i) = Y-component of the momentum of the i_th produced *
+* particle *
+* Pznu(i) = Z-component of the momentum of the i_th produced *
+* particle *
+* Hepnu(i) = Total energy of the i_th produced particle *
+* Amnu(i) = Mass of the i_th produced particle *
+* Ichnu(i) = Charge of the i_th produced particle *
+* Ibarnu(i) = Baryon number of the i_th produced particle *
+* Nrenu(i) = Identity (part scheme) of the i_th produced particle *
+* Infonu(i) = chain # of the i_th produced particle *
+* Ichnnu(3,i) = Several informations about production vertex, rank- *
+* ing, decay generation etc. *
+* Annu(i) = Literal name of the i_th produced particle *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANNU
+ COMMON / NUCPAR / PXNU (MXPDPM), PYNU (MXPDPM), PZNU (MXPDPM),
+ & HEPNU (MXPDPM), AMNU (MXPDPM), ICHNU (MXPDPM),
+ & IBARNU(MXPDPM), NRENU (MXPDPM), INFONU(MXPDPM),
+ & ICHNNU(3,MXPDPM)
+ COMMON / CHNCPR / ANNU (MXPDPM)
+
--- /dev/null
+*$ CREATE NUCPOT.ADD
+*COPY NUCPOT
+*
+*=== nucpot ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NUClear POTential informations: *
+* *
+* Created on 29-march-1993 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 03-mar-97 by Alfredo Ferrari, INFN-Milan *
+* *
+* Iflgnp = nuclear potential flag: *
+* (Kflgnp = nuclear potential flag for unbound nucleons:) *
+* 100: ordinary constant Fermi potential for both *
+* target and projectile nucleons + binding *
+* energy going down as given by bnddst and *
+* bndams *
+* 110: as above but with well depth given by the *
+* shell model energy level sequence times *
+* 41 / A^1/3 MeV *
+* 200: SWS constant potential+binding for nuc+Coul *
+* for both target and projectile nucleons, with*
+* central depth fitted at the Fermi one, bind. *
+* energy going down as given by bnddst and *
+* bndams *
+* ("Tallahassee" one) *
+* 210: as above but with well depth given by the *
+* shell model energy level sequence times *
+* 41 / A^1/3 MeV *
+* ================================================================ *
+* 300: SWS energy dependent nuclear potential for *
+* both target and projectile nucleons *
+* Subcases: *
+* c1a=311: with given Vpemax, Vpsqmx and "natural" *
+* shell model energy spacing, central well *
+* depth given by Ekfermi(0) *
+* c1b=312: as above but with Vpemax given and spacing *
+* given by the potential itself, central well *
+* depth given by Ekfermi(0) *
+* c2a=321: with Vpemax, Vpsqmx and central well *
+* depth given according to the optical pot., *
+* and "natural" shell model energy spacing *
+* c2b=322: with Vpemax, Vpsqmx given and spacing *
+* given by the potential itself, central well *
+* depth given according to the optical pot. *
+* c3a=331: as above but with given unity of spacing *
+* ("natural" shell model spacing), central well*
+* depth given by Ekfermi(0), Vpemax computed *
+* according to the unity of spacing *
+* c3b=332: as above but with given Vpemax, central well *
+* depth given by Ekfermi(0), unity of spacing *
+* computed according to Vpemax *
+* c4a=333: as above but with given Vpemax, Vpsqmx, *
+* central well computed according to the level *
+* sequence and the "natural" unity of spacing *
+* ================================================================ *
+* 400: energy dependent, local Fermi level fitted *
+* energy dependent (--> "a la Chen") potential *
+* for projectile and bound nucleons *
+* Subcases: *
+* d1a=411: as above but with Vpemax given and "natural" *
+* shell model energy spacing, both central *
+* depth well and radial behaviour given by *
+* Ekfermi(r) *
+* d1b=412: as above but with Vpemax given and spacing *
+* given by the potential itself, both central *
+* depth well and radial behaviour given by *
+* Ekfermi(r) *
+* d2a=421: as above but with Vpemax and central well *
+* depth given according to the optical pot., *
+* and "natural" shell model energy spacing, and*
+* radial behaviour according to Ekfermi(r) *
+* d2b=422: as above but with Vpemax given and spacing *
+* given by the potential itself, central well *
+* depth given according to the optical pot. and*
+* radial behaviour according to Ekfermi(r) *
+* d3a=431: as above but with given unity of spacing *
+* ("natural" shell model spacing), central well*
+* depth and radial behaviour according to *
+* Ekfermi(r), Vpemax computed according to the *
+* unity of spacing *
+* d3b=432: as above but with given Vpemax, central well *
+* depth and radial behaviour according to *
+* Ekfermi(r), unity of spacing computed accor- *
+* ding to Vpemax *
+* d4a=433: as above but with given Vpemax, Vpsqmx, *
+* central well according to the level sequence *
+* and the "natural" unity of spacing, *
+* radial behaviour according to Ekfermi(r) *
+* ================================================================ *
+* 500: energy dependent, "our" WS for the potential *
+* shape not including the binding energy, with *
+* central depth fitted to the central Fermi *
+* level, (--> "a la Chen") potential *
+* for projectile and bound nucleons *
+* Subcases: *
+* e1a=511: as above but with Vpemax given and "natural" *
+* shell model energy spacing, central well *
+* depth given by Ekfermi(0) *
+* e1b=512: as above but with Vpemax given and spacing *
+* given by the potential itself, central well *
+* depth given by Ekfermi(0) *
+* e2a=521: as above but with Vpemax and central well *
+* depth given according to the optical pot., *
+* and "natural" shell model energy spacing *
+* e2b=522: as above but with Vpemax given and spacing *
+* given by the potential itself, central well *
+* depth given according to the optical pot. *
+* e3a=531: as above but with given unity of spacing *
+* ("natural" shell model spacing), central well*
+* depth given by Ekfermi(0), Vpemax computed *
+* according to the unity of spacing *
+* e3b=532: as above but with given Vpemax, central well *
+* depth given by Ekfermi(0), unity of spacing *
+* computed according to Vpemax *
+* e4a=533: as above but with given Vpemax, Vpsqmx, *
+* central well computed according to the level *
+* sequence and the "natural" unity of spacing *
+* ================================================================ *
+* 600: energy dependent, SWS like potential, with *
+* "saturation" like central part fitted to *
+* nuclear plus Coulomb at the centre and at *
+* the nuclear radius, for projectile and bound *
+* nucleons *
+* Subcases: *
+* f1a=611: as above but with Vpemax given and "natural" *
+* shell model energy spacing, central depth *
+* well given by Ekfermi(0)+bndng+Vcoul *
+* f1b=612: as above but with Vpemax given and spacing *
+* given by the potential itself, central depth *
+* well given by Ekfermi(0)+bndng+Vcoul *
+* f2a=621: as above but with Vpemax and central well *
+* depth given according to the optical pot., *
+* and "natural" shell model energy spacing *
+* f2b=622: as above but with Vpemax given and spacing *
+* given by the potential itself, central well *
+* depth given according to the optical pot. *
+* f3a=631: as above but with given unity of spacing *
+* ("natural" shell model spacing), central well*
+* depth given by Ekfermi(0), Vpemax computed *
+* according to the unity of spacing *
+* f3b=632: as above but with given Vpemax, central well *
+* depth according to Ekfermi(0)+bndng+Vcoul, *
+* unity of spacing computed according to Vpemax*
+* f4a=633: as above but with given Vpemax, Vpsqmx, *
+* central well according to the level sequence *
+* and the "natural" unity of spacing *
+* ================================================================ *
+* 700: energy dependent, self-consistent folding *
+* of rho's with NN and pn interaction rms *
+* for the potential radial behaviour *
+* energy dependent (--> "a la Chen") potential *
+* for projectile and bound nucleons *
+* Subcases: *
+* g1a=711: as above but with Vpemax given and "natural" *
+* shell model energy spacing, central depth *
+* well given by Ekfermi(0) *
+* g1b=712: as above but with Vpemax given and spacing *
+* given by the potential itself, central depth *
+* well given by Ekfermi(0) *
+* g2a=721: as above but with Vpemax and central well *
+* depth given according to the optical pot., *
+* and "natural" shell model energy spacing *
+* g2b=722: as above but with Vpemax given and spacing *
+* given by the potential itself, central well *
+* depth given according to the optical pot. *
+* g3a=731: as above but with given unity of spacing *
+* ("natural" shell model spacing), central well*
+* depth according to Ekfermi(0), Vpemax com- *
+* puted according to the unity of spacing *
+* g3b=732: as above but with given Vpemax, central well *
+* depth according to Ekfermi(0), unity of spa- *
+* cing computed according to Vpemax *
+* g4a=733: as above but with given Vpemax, Vpsqmx, *
+* central well according to the level sequence *
+* and the "natural" unity of spacing *
+* ================================================================ *
+* Vptbpr = total projectile potential according to the *
+* "true" binding energy (Bndpot) for the *
+* various radial bins *
+* Rdbnmd = Radial bin median point *
+* Vpemax = energy scaling variable of the potential *
+* Vpsqmx = energy scaling variable of the quadratic *
+* term of the potential *
+* Spauni = spacing unit of the level sequence *
+* Spa2nd = 2nd parameter for spacing unit of the level *
+* sequence *
+* Spapwr = exponent for the 2nd parameter for spacing *
+* unit of the level sequence *
+* Vpmxrd = energy scaling variable of the potential for *
+* unbound nucleons *
+* Vpsqmx = energy scaling variable of the quadratic *
+* term of the potential for unbound nucleons *
+* Spunrd = spacing unit of the level sequence for un- *
+* bound nucleons *
+* Spu2nd = 2nd parameter for spacing unit of the level *
+* sequence for unbound nucleons *
+* Spupwr = exponent for the 2nd parameter for spacing *
+* unit of the level sequence for unbound nucl. *
+* Vpedge = Vnuc (r=Rnuc,E=-Bnvpsf) *
+* x [ Vpemax+Vcoul(Rnuc)-Ekcopo ] *
+* / [ Vpemax+Vcoul(Rnuc)+Bnvpsf ] *
+* *
+* Efabun = energy "above" (usually it is below..) the *
+* Fermi level for the considered target *
+* nucleon(s) *
+* Ekcopo = oo energy with respect to the potential zero *
+* energy level=Min(Vpemax,Ekecon-Bndnuc+Bnvpsf)*
+* =Min(Vpemax,Eknnuc-Bndpot+Bnvpsf)*
+* Vprnuc = Vnuc (r=Rnuc,E=Ekcopo)=Vpedge *
+* x [ Vpemax+Vcoul(Rnuc)-Ekcopo ] *
+* / [ Vpemax+Vcoul(Rnuc)+Bnvpsf ] *
+* Frmano = maximum amplitude of the Fermi anomaly *
+* Efrano = energy scale of the Fermi anomaly *
+* E0fran = energy offset of the Fermi anomaly *
+* X0fran = offset of the Fermi anomaly *
+* Franmx = maximum value of the Fermi anomaly shaping *
+* Eaprad = energy scale for the aparvp energy dependence*
+* Ecprad = energy scale for the cparvp energy dependence*
+* Etmrad = energy scale for hte rad. term dep. term *
+* Veprad = V_0 term for the potential shape at oo energy*
+* Ravprd = potent. radius for the pot. at oo energy *
+* Tmedge = rad. dep. red. term at nucleus boundary *
+* Folrms = folding rms radii used to build the rho tab. *
+* Rcrsat(l) = (computed) radial parameter for saturation *
+* for 600-like potential calculations *
+* ( l=1 bound nucleons, l=2 unbound nucleons) *
+* Rcrpow(l) = given exponent for the density dependent sa- *
+* turating component 600-like potential calcu- *
+* lations *
+* ( l=1 bound nucleons, l=2 unbound nucleons) *
+* Effrms = effective rms for the present projectile *
+* Radeff = effective nuclear radius for the present *
+* projectile *
+* Rhoeff(k) = effective nuclear density tabulations for the*
+* present projectile ( k=1 protons, *
+* k=2 neutrons ) *
+* Ppreff = projectile momentum in the potential tabula- *
+* tions *
+* Rmseff = projectile spreading RMS in the potential ta-*
+* bulations *
+* Mesfbn = index of the last bin for which the effective*
+* density is not zero *
+* Iflgft = formation time flag (see the corresponding *
+* coding, translation put into Jflgft(i,1) ) *
+* Iflgnc = nucleon correlation flag (see the correspon- *
+* ding coding) *
+* Nflgft = formation time flag (see the corresponding *
+* coding, translation put into Jflgft(i,1) ) *
+* for the preeq. part *
+* Nflgnc = nucleon correlation flag (see the correspon- *
+* ding coding) for the preeq. part *
+* Ieptrd = flag for radial dependence of the energy de- *
+* pendence of the potential for bound nuc- *
+* leons (1,2) (see routine vecdrd) *
+* Keptrd = flag for radial dependence of the energy de- *
+* pendence of the potential for unbound nuc- *
+* leons (1,2) (see routine vecdrd) *
+* Ivpsws = applicable only for 3.. options: flag for *
+* computing the SWS potential parameters for *
+* bound nucleons (1,2). *
+* It is applicable also to 6.. options, just *
+* to request density folding with an effective *
+* nucleon-nucleon interaction, if so only = 0 *
+* or > 0 matters. *
+* 1 = take the input parameters *
+* 2 = fold the proton rms *
+* 3 = match the binding energy at the neutron *
+* /proton radius (folded or centre depending*
+* on Lrhfl1) *
+* Kvpsws = applicable only for 3.. options: flag for *
+* computing the SWS potential parameters for *
+* unbound nucleons (1,2). *
+* It is applicable also to 6.. options, just *
+* to request density folding with an effective *
+* nucleon-nucleon interaction, if so only = 0 *
+* or > 0 matters. *
+* 1 = take the input parameters *
+* 2 = fold the proton rms *
+* 3 = match the binding energy at the neutron *
+* /proton radius (folded or centre depending*
+* on Lrhfl2) *
+* Lrhfl1 = flag for target nucleon rho folding *
+* Lrhfl2 = flag for projectile rho folding *
+* Lrhfl3 = flag for pion potential rho folding *
+* Lrhfla = flag for interaction radius rho folding in *
+* absorption events *
+* Laprad = flag to have cparvp/aparvp energy dependent *
+* Listrm = logical flag for modifying the "natural" *
+* Fermi energy for protons and neutrons with an*
+* isospin dependent term *
+* Lncptf = flag for (bound) nucleon potential folding *
+* with the target nucleon rms *
+* Lfpshf = flag for considering a charge-exchange reac- *
+* tion the p-n(n-p) scattering when *
+* cos(theta)<0 *
+* Ifpshf = flag for the different options when consi- *
+* dering a charge-exchange reaction the p-n *
+* (n-p) scattering when cos(theta)<0 *
+* Lptbar = flag for considering a barrier penetration *
+* factor for nucleons *
+* Lexpif = flag for an energy-dependent exponential pot.*
+* for target nucleons *
+* Lexpkf = flag for an energy-dependent exponential pot.*
+* for projectile nucleons *
+* Lexpln = flag for an energy-dependent exponential pot.*
+* for projectile nucleons and a linear depen- *
+* dent one for target nucleons *
+* If an exponential potential is chosen, *
+* V = V0 + V1 x exp ( - f (E-E_f) / V1 ) *
+* then Vpemax/Vpmxrd become V1 / f, and Vpsqmx/Vqmxrd V0/(V1+V0) *
+* For an exp/lin potential for bound nucleons: *
+* V = V0 + V1 - f (E-E_f) *
+* Lpreen = flag for using the potential energy depen- *
+* dence in the preequilibrium part too *
+* Lshmdl = flag for using the shell model density distr.*
+* for A =< 16 *
+* Lsrmss = flag for computing sigmas using the invariant*
+* mass of the produced state intermediate *
+* resonance, instead of computing it according *
+* to the entrance particle cms energy, inclu- *
+* ding potentials *
+* Linvar = logical flag for selecting direction invaria-*
+* nce in n-n collisions after applying the en- *
+* ergy dependent potential or the more sophi- *
+* sticated algorithm(s) *
+* Iinvar = flag for selecting which of the more sophi- *
+* cated algorithms has to be used in n-n colli-*
+* sions in n-n collisions after applying the *
+* energy dependent potential *
+* Linvan = like Linvar but for antinucleons-n *
+* Iinvan = like Iinvar but for antinucleons-n *
+* Linvpi = like Linvar but for pions-n *
+* Iinvpi = like Iinvar but for pions-n *
+* Linvka = like Linvar but for kaons-n *
+* Iinvka = like Iinvar but for kaons-n *
+* Linvhy = like Linvar but for hyperons-n *
+* Iinvhy = like Iinvar but for hyperons-n *
+* Linvah = like Linvar but for antihyperons-n *
+* Iinvah = like Iinvar but for antihyperons-n *
+* Lncedp = flag to control how to apply the energy de- *
+* pendent potential after a nucleon-nucleon *
+* elastic or a 2 or 3 nucleon absorption event *
+* See the interaction routines for details *
+* Lanedp = flag to control how to apply the energy de- *
+* pendent potential after a antinucleon-nucleon*
+* event. *
+* See the interaction routines for details *
+* Lpiedp = flag to control how to apply the energy de- *
+* pendent potential after a pion-nucleon event *
+* See the interaction routines for details *
+* Lkaedp = flag to control how to apply the energy de- *
+* pendent potential after a kaon-nucleon event *
+* See the interaction routines for details *
+* Lhyedp = flag to control how to apply the energy de- *
+* pendent potential after a hyperon-nucleon *
+* event. *
+* See the interaction routines for details *
+* Lahedp = flag to control how to apply the energy de- *
+* pendent potential after a antihyperon-nucleon*
+* event *
+* See the interaction routines for details *
+* Linedp = flag to control how to apply the energy de- *
+* pendent potential after an inelastic event *
+* See the interaction routines for details *
+* Lsacou = flag to control how to apply the energy de- *
+* pendent potential after an inelastic event *
+* If .true. Coulomb potential is adjusted on a *
+* standalone basis using charge conservation *
+* while nuclear potential is adjusted in the *
+* usual way *
+* Lnptun = flag to control whether to unfold or not the *
+* nucleon rms from the density distribution *
+* when computing the unbound nucleon nuclear *
+* potential according to Ekfermi(r) *
+* Liblob = flag for excluding potential effects in the *
+* volume connected with interaction "blobs" *
+* (hard core zone and formation time zone) *
+* Lrhblb = flag for using a density dependent excluding *
+* potential effect volume connected with hard *
+* core zone. It has no meaning for *
+* Liblob=.false. *
+* Frblob = multiplicative factor to be applied to hard *
+* core correl. dist. for computing the blob *
+* Ftblob = multiplicative factor to be applied to for- *
+* mation time dist. for computing the blob *
+* Labvpr = flag for removing (.true.) or not the proje- *
+* ctile potential energy in absorption events *
+* Funfrm = dummy factor for uncertainty related (extra) *
+* Fermi motion (average) *
+* Lunfrm = flag for uncertainty related (extra) Fermi *
+* motion (average) *
+* Funrnf = sigma factor for uncertainty related (extra) *
+* random run time Fermi motion (1 sigma in fm) *
+* Runrnf = radial expansion factor for uncertainty rel- *
+* ated (extra) random run time Fermi motion *
+* (particles are allowed to exist up to Runrnf *
+* beyond the energetically allowed radius ) *
+* Lunrnf = flag for uncertainty related (extra) random *
+* run time Fermi motion *
+* Fftail = dummy factor for Fermi motion high momentum *
+* tails *
+* Lftail = flag for Fermi motion high momentum tails *
+* Lbnzm1 = flag for using Z-1 rather than Z for bound *
+* nucleons when computing Coulomb effects *
+* *
+*----------------------------------------------------------------------*
+*
+* Maximum number of trials during interaction radius rho unfolding
+* for absorption events:
+ PARAMETER ( NRHFLA = 3 )
+* Method of interaction radius rho unfolding for absorption events:
+ PARAMETER ( IRHFLA = 1 )
+* Interaction radius for rho unfolding for absorption events:
+ PARAMETER ( DRHFLA = PLABRC / 0.1396D+00 / SQRT12 )
+*
+ LOGICAL LISTRM, LAPRAD, LRHFL1, LRHFL2, LRHFL3, LRHFLA, LNCPTF,
+ & LFPSHF, LPTBAR, LEXPIF, LEXPKF, LEXPLN, LPREEN, LSHMDL,
+ & LSRMSS, LINVAR, LINVAN, LINVPI, LINVKA, LINVHY, LINVAH,
+ & LNCEDP, LANEDP, LPIEDP, LKAEDP, LHYEDP, LAHEDP, LINEDP,
+ & LNPTUN, LIBLOB, LABVPR, LRHBLB, LUNFRM, LBNZM1, LSACOU,
+ & LUNRNF, LFTAIL
+ COMMON / NUCPOT / RHOEFF(100,2), PPREFF (100), RMSEFF (100),
+ & VPTBPR (0:50), RDBNMD (0:50), EFABUN (MXHTTR),
+ & VPEMAX (2), VPSQMX (2), SPAUNI (2), SPA2ND (2),
+ & SPAPWR (2), VPEDGE (2), FRMANO (2), EAPRAD (2),
+ & ECPRAD (2), VEPRAD (2), ETMRAD (2), RAVPRD (2),
+ & TMEDGE (2), VPMXRD (2), VQMXRD (2), SPUNRD (2),
+ & SPU2ND (2), SPUPWR (2), PVRDMX (2), EVRDMX (2),
+ & FOLRMS (4), RCRSAT (2), RCRPOW (2), BNDDST,
+ & BNDAMS, VPRNUC, BNDDFF, BNDFCO, EKCOPO, EFRANO,
+ & E0FRAN, X0FRAN, FRANMX, EFFRMS, RADEFF, FRBLOB,
+ & FTBLOB, FUNFRM, FUNRNF, FFTAIL, RUNRNF
+ COMMON / INCPOT / NFLGNC, MESFBN, IFLGFT, IFLGNC, NFLGFT,
+ & IFPSHF, IINVAR, IINVAN, IINVPI, IINVKA, IINVHY,
+ & IINVAH, JFLGFT (4,2), IFLGNP (2), KFLGNP (2),
+ & IEPTRD (2), KEPTRD (2), IVPSWS (2), KVPSWS (2),
+ & LISTRM (2), LAPRAD (2), LPTBAR (2), LEXPIF (2),
+ & LEXPKF (2), LEXPLN (2), LRHFL1, LRHFL2, LRHFL3,
+ & LRHFLA, LNCPTF, LFPSHF, LPREEN, LSHMDL, LSRMSS,
+ & LINVAR, LINVAN, LINVPI, LINVKA, LINVHY, LINVAH,
+ & LNCEDP, LANEDP, LPIEDP, LKAEDP, LHYEDP, LAHEDP,
+ & LINEDP, LNPTUN, LIBLOB, LABVPR, LRHBLB, LUNFRM,
+ & LBNZM1, LSACOU, LUNRNF, LFTAIL
+
--- /dev/null
+*$ CREATE NUCSFT.ADD
+*COPY NUCSFT
+*
+*=== nucsft ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NUClear Symmetrized Fermi/woods-saxon density and potential *
+* tabulations *
+* *
+* Last change on 20-jun-94 by Alfredo Ferrari, INFN-Milan *
+* *
+* Vparvp, cparvp, aparvp (bparvp auxiliary parameter *
+* for Cparvp calculations): *
+* *
+* V0 (r) = Vparvp * sinh (cparvp/aparvp) *
+* / ( cosh (cparvp/aparvp) + cosh (r/aparvp) ) *
+* expvca = exp ( -cparvp / aparvp ) *
+* expvra = exp ( rcursf / aparvp ) *
+* bnvpsf = "average" binding energy used when generating *
+* the potential tabulations *
+* v0cesf = well depth at r=0 for the "average" potential *
+* evsfmx = Max. Fermi energy for the ip nucleon potential *
+* evsfmx = |v0cesf| - bnvpsf *
+* pvsfmx = Max. Fermi momentum for proton/neutron *
+* pfsksf = Fermi momentum for proton/neutron computed at *
+* radiu1 defined ad the (mrsfbn-5)th bin limit *
+* vcoumx = maximum height of the Coulomb barrier *
+* (for Z=Zvpcou), modified during tracking to *
+* get the real barrier *
+* vcousv = maximum height of the Coulomb barrier *
+* (for Z=Zvpcou) *
+* v0ccou = Coulomb potential at R=Radtot *
+* zvpcou = Z for which the barrier has been computed *
+* zbourd = Z reduction factor to be used for bound nucleons*
+* when computing Coulomb effects *
+* ravpsf = radius at which the "average" nuclear potential *
+* stops *
+* ravcou = radius at which the Coulomb potential stops *
+* ravpot = radius at which the nuclear potential stops *
+* dradsf = radial increment used from radiu0 up to radtot *
+* dravsf = radial increment used from radtot up to ravpot *
+* ivsfmn = index of the innermost potential shell which *
+* can be reached by the current particle accord- *
+* ing to its angular momentum *
+* ivsfmx = index of the outermost potential shell which *
+* can be reached by the current particle accord- *
+* ing to its energy and angular momentum *
+* ivcomx = bin index of the maximum height of the Coulomb *
+* barrier *
+* isfint = current tabulation index *
+* ibsfmn = index of the radial bin of the the minimum *
+* approach point *
+* ibsfmx = index of the radial bin of the the maximum *
+* approach point *
+* *
+* The actual potential is given by (Preeqmvax version with no *
+* energy dependence of the potential): *
+* for r < radtot (note V_nuc < 0): *
+* neutral particles : *
+* V_true(r) = V_nuc(r,ip) + bnvpsf (ip) - bn_true (ip) *
+* charged particles : *
+* V_true(r) = V_nuc(r,ip) + bnvpsf (ip) - bn_true (ip) *
+* + Zproj * V_coul(r) *
+* for ravpsf > r > radtot (note V_nuc < 0): *
+* V_true(r) = V_nuc(r,ip) / bnvpsf (ip) x bn_true (ip) *
+* + Znow / Zvpcou x Zproj x V_coul(r) *
+* for r > ravpsf : *
+* V_true(r) = Znow / Zvpcou x Zproj x V_coul(r) *
+* Please note that Ekfcen(ip)=Evsfmx(ip), for ip=1,2 *
+* For the actual potential with the Preeqmvax version with the *
+* energy dependence of the potential, see the relevant routines *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / NUCSFT / VPARVP (2), CPARVP (2), APARVP (2), BPARVP (2),
+ & EXPVCA (2), EXPVRA (2), RAVPSF (2), BNVPSF (2),
+ & V0CESF (2), EVSFMX (2), VSFHLP (2), PVSFMX (2),
+ & PFSKSF (2), RAVCOU, RAVPOT, VCOUMX, V0CCOU,
+ & ZVPCOU, ZBOURD, VPSFA0, VPSFA1, VPSFAE, DRADSF,
+ & DRAVSF, VCOUSV,
+ & IVSFMN, IVSFMX, IVCOMX, ISFINT, IBSFMN, IBSFMX
+
--- /dev/null
+*$ CREATE NUCSFX.ADD
+*COPY NUCSFX
+*
+*=== nucsfx ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NUClear Symmetrized Fermi/woods-saXon *
+* *
+* rh0sfx, cparsf, aparsf: *
+* *
+* rho (r) = rh0sfx * sinh (cparfx/aparfx) *
+* / ( cosh (cparfx/aparfx) + cosh (r/aparfx) ) *
+* *
+* radsfx(i) = max ( 0, asfhlf x (nsfxbf+i) + cparsf ) *
+* rhosfx(i) = rho (radsfx(i)) *
+* rhpsfx(i) = d rho / dr |radsfx(i) *
+* / radsfx(i) *
+* rhisfx(i) = | 4 pi r^2 rho dr *
+* / radsfx (i-1) *
+* exisfx(i) = exp ((radsfx(i)-cparsf)/asfhlf) = *
+* exp((nsfxbf+i)/2) *
+* asfhlf = aparsf / 2 *
+* expcoa = exp ( -cparsf / aparsf ) *
+* exproa = exp ( rcursf / aparsf ) *
+* x,y,zcursf= current position *
+* u,v,wcursf= current direction *
+* ecursf = current (total) energy *
+* pcursf = current momentum *
+* vpcrsf = current potential *
+* rcursf = current radius *
+* lingng = logical flag to signal if the current particle *
+* is approaching the nucleus centre *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NINSFX = +21 )
+ PARAMETER ( NSFXBF = -11 )
+ LOGICAL LINGNG
+ COMMON / NUCSFX / RHOSFX (0:NINSFX), RHPSFX (0:NINSFX),
+ & RADSFX (0:NINSFX), RHISFX (NINSFX),
+ & EXISFX (0:NINSFX), RH0SFX, CPARSF, APARSF,
+ & ASFHLF, EXPROA, XCURSF, YCURSF, ZCURSF, UCURSF,
+ & VCURSF, WCURSF, ECURSF, PCURSF, VPCRSF, RCURSF,
+ & RHOCUR, RPCRSF, R13CUR, ISFX , LINGNG
+ EQUIVALENCE ( EXPCOA, EXISFX (0) )
+
--- /dev/null
+*$ CREATE NUCSTF.ADD
+*COPY NUCSTF
+*
+*=== nucstf ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NUClear STatement Functions: *
+* *
+* Created on 14 january 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 04-feb-92 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* FPFRNC *
+* FRADNC *
+* FRHINC *
+* FRHONC *
+* SBCOMP *
+* *
+*----------------------------------------------------------------------*
+*
+* NUClear STatement Functions: nucleus with a costant core and
+* linearly decreasing skin and halo
+* rho (r):
+* Statement functions:
+ RHCORE (R) = RHOCEN
+ RHSKIN (R) = RHOCEN * ( RADSKN - R ) / SKNEFF
+ RHHALO (R) = RHOSKN * ( RADTOT - R ) / HALODP
+* other
+* RHCORE (R) = RHOCEN
+* Skin with a linear and a cubic term:
+* RHSKIN (R) = RHOCEN * ( ( RADSKN - R ) / SKNEFF + SK3PAR * ( R
+* & - CPARWS )**3 )
+* Skin with a linear, a cubic and a quartic term:
+* RHSKIN (R) = RHOCEN * ( ( RADSKN - R ) / SKNEFF
+* & + ( R - CPARWS )**3 * ( SK3PAR + SK4PAR
+* & * ( R - CPARWS ) ) )
+* RHHALO (R) = RHOCEN * HABPAR * ( RADTOT - R )**1.5D+00
+* / r 2
+* | 4 pi r' rho (r') dr':
+* / 0
+* Statement functions:
+ RICORE (R) = 4.D+00 * PI / 3.D+00 * RHOCEN * R**3
+ RISKIN (R) = RICORE (RADIU0) + 4.D+00 * PI / 3.D+00 * RHOCEN
+ & * ( RADSKN / SKNEFF * ( R**3 - RADIU0**3 )
+ & - 0.75D+00 * ( R**4 - RADIU0**4 ) / SKNEFF )
+ RIHALO (R) = RISKIN (RADIU1) + 4.D+00 * PI / 3.D+00 * RHOSKN
+ & * ( RADTOT / HALODP * ( R**3 - RADIU1**3 )
+ & - 0.75D+00 * ( R**4 - RADIU1**4 ) / HALODP )
+* Other:
+* RICORE (R) = 4.D+00 * PI / 3.D+00 * RHOCEN * R**3
+* Skin with a linear and a cubic term:
+* RISKIN (R) = RICORE (RADIU0) + 4.D+00 * PI / 3.D+00 * RHOCEN
+* & * ( ( RADSKN / SKNEFF - CPARWS**3 * SK3PAR )
+* & * ( R**3 - RADIU0**3 ) - 0.75D+00 * ( 1.D+00 / SKNEFF
+* & - 3.D+00 * SK3PAR * CPARWS**2 ) * ( R**4 - RADIU0**4 )
+* & - 1.8D+00 * SK3PAR * CPARWS * ( R**5 - RADIU0**5 )
+* & + 0.5D+00 * SK3PAR * ( R**6 - RADIU0**6 ) )
+* Skin with a linear, a cubic and a quartic term:
+* RISKIN (R) = RICORE (RADIU0) + 4.D+00 * PI / 3.D+00 * RHOCEN
+* & * ( ( RADSKN / SKNEFF - CPARWS**3 * ( SK3PAR - CPARWS
+* & * SK4PAR ) ) * ( R**3 - RADIU0**3 ) - 0.75D+00
+* & * ( 1.D+00 / SKNEFF - CPARWS**2 * ( 3.D+00 * SK3PAR
+* & - 4.D+00 * SK4PAR * CPARWS ) ) * ( R**4 - RADIU0**4 )
+* & - 1.8D+00 * CPARWS * ( SK3PAR - 2.D+00 * SK4PAR
+* & * CPARWS ) * ( R**5 - RADIU0**5 )
+* & - ( 2.D+00 * SK4PAR * CPARWS - 0.5D+00 * SK3PAR )
+* & * ( R**6 - RADIU0**6 ) + 3.D+00 / 7.D+00 * SK4PAR
+* & * ( R**7 - RADIU0**7 ) )
+* RIHALO (R) = RISKIN (RADIU1) + 8.D+00 * PI * RHOCEN
+* & * HABPAR * ( ( 0.2D+00 * RADTOT**2 - 2.D+00 / 7.D+00
+* & * RADTOT * HALODP + HALODP**2 / 9.D+00 )
+* & * ( SQRT (HALODP) )**5 - ( 0.2D+00 * RADTOT**2
+* & - 2.D+00 / 7.D+00 * RADTOT * ( RADTOT - R )
+* & + ( RADTOT - R )**2 / 9.D+00 )
+* & * ( RADTOT - R )**2.5D+00 )
+* r (rho):
+* Statement functions:
+ RACORE (RHO) = RADIU0
+ RASKIN (RHO) = RADSKN - SKNEFF * RHO / RHOCEN
+ RAHALO (RHO) = RADTOT - HALODP * RHO / RHOSKN
+* p_f (rho,i), i=1 proton, 2 neutron:
+* Statement functions:
+ PFCORE (RHO,I) = PFRCEN (I)
+ PFSKIN (RHO,I) = PFRCEN (I) * (RHO/RHOCEN)**0.3333333333333333D+00
+ PFHALO (RHO,I) = PFRCEN (I) * (RHO/RHOCEN)**0.3333333333333333D+00
+* end NUClear STatement Functions
+
--- /dev/null
+*$ CREATE NUINFO.ADD
+*COPY NUINFO
+*
+*=== Nuinfo ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NeUtrino interaction INFOrmations common: *
+* *
+* Created on 05 july 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-jul-99 by Alfredo Ferrari *
+* *
+* Global run parameters: *
+* *
+* Lqelcc = logical flag for performing QE CC interactions *
+* Lqelnc = logical flag for performing QE NC interactions *
+* Lrescc = logical flag for performing RES CC interactions *
+* Lresnc = logical flag for performing RES NC interactions *
+* Ldiscc = logical flag for performing DIS CC interactions *
+* Ldisnc = logical flag for performing DIS NC interactions *
+* Lchacc = logical flag for performing CHARM CC interactions *
+* Lchanc = logical flag for performing CHARM NC interactions *
+* Lfrnui = flag for forced neutrino interactions *
+* Lnuxqe = flag for QE interactions through NUX *
+* Sfrnui = safety factor for neutrino forced scatterings *
+* Fcnusc = multiplication factor for neutrino scatterings *
+* Sfnunc = safety factor during tracking for neutrino *
+* nucleon scattering *
+* Efnunc = (maximum) Fermi energy to be used for Xsec calc- *
+* ulations for neutrino nucleon scattering *
+* Pfnunc = (maximum) Fermi momentum to be used for Xsec calc- *
+* ulations for neutrino nucleon scattering *
+* *
+* Run time variables: *
+* *
+* Stnusc = (nuclear) sigma for the current material *
+* (10^-11 mb) *
+* Sgrtcc (i) = run time cross section (10^-11 mb) for CC on i-type*
+* target nucleon (1=proton,2=neutron) *
+* Sgrtnc (i) = run time cross section (10^-11 mb) for NC on i-type*
+* target nucleon (1=proton,2=neutron) *
+* Sgqecc (i) = cross section (10^-11 mb) for QE CC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgqenc (i) = cross section (10^-11 mb) for QE NC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgrscc (i) = cross section (10^-11 mb) for RES CC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgrsnc (i) = cross section (10^-11 mb) for RES NC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgdscc (i) = cross section (10^-11 mb) for DIS CC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgdsnc (i) = cross section (10^-11 mb) for DIS NC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgchcc (i) = cross section (10^-11 mb) for CHARM CC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* Sgchnc (i) = cross section (10^-11 mb) for CHARM NC for i-type *
+* target nucleon (1=proton,2=neutron) *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LQELCC, LQELNC, LRESCC, LRESNC, LDISCC, LDISNC, LCHACC,
+ & LCHANC, LFRNUI, LNUXQE
+*
+ COMMON / NUINFO / SFRNUI, FCNUSC, SFNUNC, EFNUNC, PFNUNC, STNUSC,
+ & SGRTCC (2), SGRTNC (2), SGQECC (2), SGQENC (2),
+ & SGRSCC (2), SGRSNC (2), SGDSCC (2), SGDSNC (2),
+ & SGCHCC (2), SGCHNC (2),
+ & LQELCC, LQELNC, LRESCC, LRESNC, LDISCC, LDISNC,
+ & LCHACC, LCHANC, LFRNUI, LNUXQE
+
--- /dev/null
+*$ CREATE NUXSAR.ADD
+*COPY NUXSAR
+*
+*=== Nuxsar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* NeUtrino X-Secs on ARgon: *
+* *
+* Created on 27 may 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-jul-99 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXNUEB = 130 )
+ CHARACTER NUNAME*8
+*
+ COMMON / NUXSAR / XSCCQE (MXNUEB,6), ENCCQE (MXNUEB,6),
+ & XSNCQE (MXNUEB,2), ENNCQE (MXNUEB,2),
+ & XSCCRS (MXNUEB,2,6), ENCCRS (MXNUEB,2,6),
+ & XSNCRS (MXNUEB,2,2), ENNCRS (MXNUEB,2,2),
+ & XSCCDS (MXNUEB,2,6), ENCCDS (MXNUEB,2,6),
+ & XSNCDS (MXNUEB,2,2), ENNCDS (MXNUEB,2,2),
+ & XSCCCH (MXNUEB,2,6), ENCCCH (MXNUEB,2,6),
+ & XSNCCH (MXNUEB,2,2), ENNCCH (MXNUEB,2,2),
+ & NECCQE (6) , NENCQE (2) , NECCRS (2,6),
+ & NENCRS (2,2), NECCDS (2,6), NENCDS (2,2),
+ & NECCCH (2,6), NENCCH (2,2)
+ COMMON / CHNXAR / NUNAME (6)
+
--- /dev/null
+*$ CREATE NUXSNC.ADD
+*COPY NUXSNC
+*
+*=== Nuxsnc ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* NeUtrino X-Secs on NuCleons: *
+* *
+* Created on 27 may 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-jul-99 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXEBNU = 160 )
+ LOGICAL LFRSDS
+*
+ COMMON / NUXSNC / XSRSCC (0:MXEBNU,2,6), XSRSNC (0:MXEBNU,2,2),
+ & XSDSCC (0:MXEBNU,2,6), XSDSNC (0:MXEBNU,2,2),
+ & XSCHCC (0:MXEBNU,2,6), XSCHNC (0:MXEBNU,2,2),
+ & E0RSCC (2,6), A0RSCC (2,6), DARSCC (2,6),
+ & E0RSNC (2,2), A0RSNC (2,2), DARSNC (2,2),
+ & E0DSCC (2,6), A0DSCC (2,6), DADSCC (2,6),
+ & E0DSNC (2,2), A0DSNC (2,2), DADSNC (2,2),
+ & E0CHCC (2,6), A0CHCC (2,6), DACHCC (2,6),
+ & E0CHNC (2,2), A0CHNC (2,2), DACHNC (2,2),
+ & MERSCC (2,6), MERSNC (2,2), MEDSCC (2,6),
+ & MEDSNC (2,2), MECHCC (2,6), MECHNC (2,2),
+ & NERSCC (2,6), NERSNC (2,2), NEDSCC (2,6),
+ & NEDSNC (2,2), NECHCC (2,6), NECHNC (2,2),
+ & LFRSDS
+
--- /dev/null
+*$ CREATE OPPHCM.ADD
+*COPY OPPHCM
+*
+*=== Opphcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* OPtical PHoton CoMmon: *
+* *
+* Created on 19 september 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 11-jan-99 by Alfredo Ferrari *
+* *
+* Opphpr (ip,im) = ip_th optical property parameter of the im_th *
+* material (non metal) *
+* ip = *
+* 1: refraction index *
+* 2: absorption coeff. (cm^-1) *
+* 3: diffusion coeff. (cm^-1) *
+* 4: refraction index 1st derivative *
+* 5: absorption 1st derivative *
+* 6: diffusion 1st derivative *
+* 7: refraction index 2nd derivative *
+* 8: absorption 2nd derivative *
+* 9: diffusion 2nd derivative *
+* 10: refraction index 3rd derivative *
+* 11: absorption 3rd derivative *
+* 12: diffusion 3rd derivative *
+* metal: *
+* ip = *
+* 1: refraction index (not used) *
+* 2: absorption coeff. (cm^-1) (not used) *
+* 3: 1 - reflectivity index *
+* 7: 1 - reflectivity index 1st derivative *
+* 9: 1 - reflectivity index 2nd derivative *
+* 12: 1 - reflectivity index 3rd derivative *
+* Emncer (im) = minimum energy for Cerenkov photon production *
+* for im_th medium *
+* Emxcer (im) = maximum energy for Cerenkov photon production *
+* for im_th medium *
+* Rmxcer (im) = maximum refractive index in the energy range *
+* of interest for Cerenkov photon production *
+* for im_th medium *
+* Emntrd (im) = minimum energy for transition radiation photon*
+* production for im_th medium *
+* Emxtrd (im) = maximum energy for transition radiation photon*
+* production for im_th medium *
+* Wvmnop (im) = minimum wavelength for opt. photon transport *
+* for im_th medium (default: 250 nm) *
+* Wvcnop (im) = central wavelength for opt. photon transport *
+* for im_th medium (default: 589 nm, Na D) *
+* Wvmxop (im) = maximum wavelength for opt. photon transport *
+* for im_th medium (default: 600 nm) *
+* Ommnop (im) = minimum 2pi x freq. for opt. photon transport *
+* for im_th medium *
+* Omcnop (im) = central 2pi x freq. for opt. photon transport *
+* for im_th medium *
+* Ommxop (im) = maximum 2pi x freq. for opt. photon transport *
+* for im_th medium *
+* Wvmnsn = minimum wavelength for opt. photon sensitivity*
+* (default: 25 nm) *
+* Wvcnsn = central wavelength for opt. photon sensitivity*
+* (default: 589 nm, Na D) *
+* Wvmxsn = maximum wavelength for opt. photon sensitivity*
+* for im_th medium (default: 6000 nm) *
+* Ommnsn = minimum 2pi x freq. for opt. photon sensiti- *
+* vity *
+* Omcnsn = central 2pi x freq. for opt. photon sensiti- *
+* vity *
+* Ommxsn = maximum 2pi x freq. for opt. photon sensiti- *
+* vity *
+* Opsnmx = maximum of optical photon sensitivity *
+* Rghnss (ib) = Roughness parameter for ib_th material-to-ma- *
+* terial boundary ib_th *
+* M1rghn (ib) = 1st material of ib_th material-to-material *
+* boundary *
+* M2rghn (ib) = 2nd material of ib_th material-to-material *
+* boundary *
+* Lopprp (im) = logical flag for optical properties of im_th *
+* material *
+* Lopmtl (im) = logical flag whether the im_th optical mate- *
+* rial is a metal or not *
+* Lwvopp (im) = logical flag whether optical properties of *
+* im_th material are expressed as a function of *
+* wavelength (true) or 2pi x frequency (false). *
+* By default it is true. *
+* Lwvops = logical flag whether optical photon sensiti- *
+* vities are expressed as a function of wave- *
+* length (true) or 2pi x frequency (false). *
+* By default it is true. *
+* Lcrnkv (im) = logical flag for Cerenkov photon production *
+* for im_th material *
+* Ltrrad (im) = logical flag for transition radiation photon *
+* production for im_th material *
+* Nxoppb = number of material boundaries for which the *
+* roughness has been defined *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXOPSN = 4 )
+ PARAMETER ( MXOPPR = 12 )
+ PARAMETER ( MXOPPB = 20 )
+ PARAMETER ( WVMNTR = 250.D-07 )
+ PARAMETER ( WVCNTR = 589.D-07 )
+ PARAMETER ( WVMXTR = 600.D-07 )
+ LOGICAL LOPPRP, LOPMTL, LWVOPP, LCRNKV, LTRRAD, LWVOPS
+ COMMON / OPPHCM / WVMNSN, WVCNSN, WVMXSN, OMMNSN, OMCNSN, OMMXSN,
+ & OPSNMX, OPSNPR (MXOPSN),OPPHPR (MXOPPR,MXXMDF),
+ & EMNCER (MXXMDF), EMXCER (MXXMDF), RMXCER (MXXMDF),
+ & EMNTRD (MXXMDF), EMXTRD (MXXMDF), WVMNOP (MXXMDF),
+ & WVMXOP (MXXMDF), WVCNOP (MXXMDF), OMMNOP (MXXMDF),
+ & OMMXOP (MXXMDF), OMCNOP (MXXMDF), RGHNSS (MXOPPB),
+ & M1RGHN (MXOPPB), M2RGHN (MXOPPB), LOPPRP (MXXMDF),
+ & LOPMTL (MXXMDF), LWVOPP (MXXMDF), LCRNKV (MXXMDF),
+ & LTRRAD (MXXMDF), LWVOPS, NXOPPB
+
--- /dev/null
+*$ CREATE OPPHST.ADD
+*COPY OPPHST
+*
+*=== Opphst ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* OPtical PHoton STack: *
+* *
+* Created on 19 september 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 13-oct-98 by Alfredo Ferrari *
+* *
+* wtopph = weight of the photon *
+* poptph = laboratory momentum of the photon in GeV/c *
+* xoptph = x-coordinate of the photon *
+* yoptph = y-coordinate of the photon *
+* zoptph = z-coordinate of the photon *
+* txopph = direction cosine of the photon *
+* with respect to x-axis *
+* tyopph = direction cosine of the photon *
+* with respect to y-axis *
+* tzopph = direction cosine of the photon *
+* with respect to z-axis *
+* txpopp = direction cosine of the photon polarization *
+* typopp = direction cosine of the photon polarization *
+* tzpopp = direction cosine of the photon polarization *
+* donear = distance to the nearest boundary *
+* agopph = age of the photon (seconds) *
+* loopph = generation of the photon *
+* louopp = user flag *
+* nregop = number of the region of the photon *
+* nlatop = number of the lattice cell of the photon *
+* tpropp = kinetic energy of parent particle of the photon *
+* apropp = age of the parent particle of the photon (seconds) *
+* ipropp = id (paprop) of the parent particle of the photon *
+* lpropp = generation of the parent particle of the photon *
+* npropp = # of the primary track which generated the photon *
+* (not used for the moment) *
+* lstopp = stack pointer *
+* lmxopp = highest value of the stack pointer encountered *
+* in the run *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / OPPHST / WTOPPH (MOSTCK), POPTPH (MOSTCK),
+ & XOPTPH (MOSTCK), YOPTPH (MOSTCK), ZOPTPH (MOSTCK),
+ & TXOPPH (MOSTCK), TYOPPH (MOSTCK), TZOPPH (MOSTCK),
+ & TXPOPP (MOSTCK), TYPOPP (MOSTCK), TZPOPP (MOSTCK),
+ & DONEAR (MOSTCK), AGOPPH (MOSTCK), TPROPP (MOSTCK),
+ & APROPP (MOSTCK), SPAROK (MKBMX1,MOSTCK),
+ & ISPORK (MKBMX2,MOSTCK), LOOPPH (MOSTCK),
+ & LOUOPP (MOSTCK), NREGOP (MOSTCK), NLATOP (MOSTCK),
+ & IPROPP (MOSTCK), LPROPP (MOSTCK), NPROPP (MOSTCK),
+ & LSTOPP, LMXOPP
+
--- /dev/null
+*$ CREATE PAPROP.ADD
+*COPY PAPROP
+*
+*=== paprop ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: paprop copy *
+* *
+* !!!! N E W V E R S I O N !!!! *
+* *
+* Created on 07 may 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 03-jul-97 by Alfredo Ferrari *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /paprop/ contains particle properties *
+* btype = literal name of the particle *
+* am = particle mass in GeV *
+* ichrge = electric charge of the particle *
+* ibarch = baryonic charge of the particle *
+* iscore = explanations for the scored distribution *
+* genpar = names of the generalized particles *
+* ijdisc = list of the particle types to be discarded *
+* thalf = half life of the particle in sec *
+* biasdc = decay biasing factors *
+* biasin = inelastic interaction biasing factors *
+* lhadro = flag for hadrons *
+* jspinp = particle spin (in units of 1/2) *
+* iparty = particle parity (when defined) *
+* iparid = flag used to identify particle types *
+* lbsdcy = logical flag for biased decay: if .true. the biasing *
+* factor is used as an upper limit to the decay length *
+* lprbsd = logical flag for biased decay: if .true. the biasing *
+* factor is applied only to primaries *
+* lprbsi = logical flag for inelastic interaction biasing: if *
+* .true. the biasing factor is applied only to prima- *
+* ries *
+* lsclwf = logical flag for low energy neutron fission scoring *
+* lscnbl = logical flag for neutron balance scoring *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LHADRO, LBSDCY, LPRBSD, LPRBSI, LSCLWF, LSCNBL
+ CHARACTER*8 BTYPE,GENPAR
+ COMMON / PAPROP / AM (-6:NALLWP), AMDISC (-6:NALLWP),
+ & THALF (-6:NALLWP), BIASDC (-6:NALLWP),
+ & BIASIN (-6:NALLWP), ICHRGE (-6:NALLWP),
+ & IBARCH (-6:NALLWP), IJDISC (-6:NALLWP),
+ & JSPINP (-6:NALLWP), IPARTY (-6:NALLWP),
+ & IPARID (-6:NALLWP),
+ & LHADRO (-6:NALLWP), LBSDCY (-6:NALLWP),
+ & ISCORE ( 10), LPRBSD, LPRBSI, LSCLWF, LSCNBL
+ COMMON / CHPPRP / BTYPE (-6:NALLWP), GENPAR (30)
+
--- /dev/null
+*$ CREATE PAREVT.ADD
+*COPY PAREVT
+* *
+*=== parevt ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* Created on 28-3-90 by A. Ferrari, INFN - Milan *
+* *
+* Last change on 24-aug-00 by Alfredo Ferrari *
+* *
+* included in: *
+* *
+* flukam *
+* bdnopt *
+* berttp *
+* bimsel *
+* bselsc *
+* clbmjt *
+* corevt *
+* corrin *
+* deflts *
+* difevv *
+* difpro *
+* difevv *
+* difpro *
+* distnu *
+* epilog *
+* evdeex *
+* eventv *
+* evevap *
+* evxtes *
+* evvini *
+* ferevv *
+* ferhav *
+* frmbrk *
+* frbkjp *
+* ferevv *
+* ferhav *
+* frmbrk *
+* frbkjp *
+* geta *
+* hdncin *
+* kaonuc *
+* kaskad *
+* kasneu *
+* incini *
+* muoabs *
+* muprab *
+* nucdcy *
+* nucnuc *
+* nucevv *
+* nwisel *
+* peanut *
+* phnsch *
+* phncev *
+* phnvev *
+* piabth *
+* pioabs *
+* pionuc *
+* pmprab *
+* prepre *
+* prolog *
+* rakekv *
+* rcfset *
+* rsncli *
+* rstsel *
+* umofin *
+* usrsrn *
+* *
+* frdiff = fraction of the total number of events which are *
+* diffractive ones (obsolete, no longer used) *
+* fsprd0 = asymptotic reduction factor for cascade particle *
+* energy slope parameter *
+* fshpfn = modifying factor for bamjet momentum sharing jet *
+* function *
+* rn1gsc = correlation factor between shower and grey part- *
+* ticle multiplicities *
+* rn2gsc = correlation factor between shower and grey part- *
+* ticle multiplicities *
+* dpower = power exponent used in the binomial distributions *
+* for grey particles *
+* lpower = flag to signal if dpower is different from the *
+* default option (dpower=2) *
+* ldiffr = flag for particles undergoing diffractive events *
+* linctv = flag to switch on/off cascade nucleons and exci- *
+* tation energy (it is important for testing the *
+* generator *
+* levprt = flag for nuclear evaporation *
+* ldeexg = flag for nuclear deexcitation gammas *
+* lgdhpr = flag for geometry dependent calculations in the *
+* preequilibrium part *
+* lpreex = flag for explicit treatment of the first inte- *
+* ctions in the preequilibrium part *
+* lhlfix = flag for "freezing" the hole depth of the holes *
+* produced in the explicitly treated interactions *
+* in the preequilibrium part *
+* lprfix = flag for "freezing" the already sampled particle *
+* exciton energy in the preequilibrium part *
+* lparwv = flag to apply the Heisenberg principle according *
+* to the reduced DeBroglie wavelength in the calcu- *
+* lation of the impact parameter and in computing *
+* the particle position after interactions *
+* ilvmod = flag to select the level density option (T=0) *
+* jlvmod = 2nd flag to select the level density option (T=oo)*
+* llvmod = logical flag for using Cook's modified pairing *
+* energies *
+* lsngch = logical flag for allowing single chain events *
+* lschdf = logical flag for allowing single chain events *
+* in diffractive interactions *
+* lhadri = logical flag for indicating whether the resonance *
+* model was used or not for primary interactions *
+* lnucri = logical flag for indicating whether the Nucriv *
+* model was used or not for the current interaction *
+* lpeanu = logical flag for indicating whether the Peanut *
+* model was used or not for the current interaction *
+* lphdrc = logical flag for indicating whether a photonuc- *
+* lear interaction is a "direct" one or not *
+* latmss = logical flag for indicating whether to use ato- *
+* mic masses during evaporation *
+* lismrs = logical flag for indicating whether isomer calcu- *
+* lations are possible *
+* loldev = logical flag for indicating for using the old *
+* evaporation model rather than the new one *
+* *
+*----------------------------------------------------------------------*
+*
+*
+* 30% of events, randomly choosen, are diffractive events!!
+* Now 20% (J. Ranft & A. Ferrari, 25-3-90)
+* Actually it is no longer used!!
+ PARAMETER ( FRDIFF = 0.2D+00 )
+ PARAMETER ( ETHSEA = 1.0D+00 )
+*
+ LOGICAL LDIFFR, LINCTV, LEVPRT, LHEAVY, LDEEXG, LGDHPR, LPREEX,
+ & LHLFIX, LPRFIX, LPARWV, LPOWER, LSNGCH, LLVMOD, LSCHDF,
+ & LHADRI, LNUCRI, LPEANU, LPHDRC, LATMSS, LISMRS, LOLDEV,
+ & LCHDCY
+ COMMON / PAREVT / DPOWER, FSPRD0, FSHPFN, RN1GSC, RN2GSC,
+ & LDIFFR (NALLWP),LPOWER, LINCTV, LEVPRT, LHEAVY,
+ & LDEEXG, LGDHPR, LPREEX, LHLFIX, LPRFIX, LPARWV,
+ & ILVMOD, JLVMOD, LLVMOD, LSNGCH, LSCHDF, LHADRI,
+ & LNUCRI, LPEANU, LPHDRC, LATMSS, LISMRS, LOLDEV,
+ & LCHDCY
+
--- /dev/null
+*$ CREATE PARNUC.ADD
+*COPY PARNUC
+*
+*=== parnuc ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 2 august 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-sep-00 by Alfredo Ferrari *
+* *
+* included in : *
+* *
+* Bdpree *
+* Bimsel *
+* Couset *
+* Muoabs *
+* Nucdcy *
+* Nucnuc *
+* Nwisel *
+* Peanut *
+* Phdset *
+* Phdwll *
+* Pioabs *
+* Pionuc *
+* Pmprab *
+* Pncset *
+* Pncset *
+* Prepre *
+* Sbcomp *
+* Umofin *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( PIGRK = PIPIPI )
+ PARAMETER ( ALEVEL = 8.D-03 )
+* Standard parameter for central density: it is exactly r0nucl of
+* Parevt
+ PARAMETER ( RCNUCL = 1.12D+00 )
+* "Naive" r0 for sigmas
+ PARAMETER ( R0SIG = 1.3D+00 )
+* r0 for sigmas according to Kikuchi & Kawai
+ PARAMETER ( R0SIGK = 1.5D+00 )
+* r0 for Coulomb barrier according to Kikuchi & Kawai
+ PARAMETER ( RCOULB = 1.5D+00 )
+* Parameter for Coulomb barrier according to Hermes (Evap-5)
+ PARAMETER ( COULBH = 0.88235D-03 )
+* Central density in nuclei
+ PARAMETER ( RHONU0 = 0.75D+00 / PIGRK / RCNUCL / RCNUCL / RCNUCL )
+* For Taufor, Aefrav & Rhonuc the combinations 1 and 3 are ok. If the
+* Hannes expression for Taufor is used we must use Taufor from
+* combination 3 and Aefrav and Rhonuc from combination 1
+* Combination 3:
+*3 PARAMETER ( TAUFO0 = 3.0D+00 )
+* Combination 1:
+* PARAMETER ( TAUFO0 = 5.0 D+00 )
+ PARAMETER ( TAUFO0 = 10.0D+00 )
+* Thresholds for explicit interactions:
+* Primary projectile:
+ PARAMETER ( EKEEXP = 0.03D+00 )
+* Secondary nucleons:
+ PARAMETER ( EKREXP = 0.05D+00 )
+* Just for Pauli checks:
+ PARAMETER ( EKEMNM = 0.01D+00 )
+*
+ PARAMETER ( NCPMX = 350 )
+ PARAMETER ( NRSMX = 10 )
+ PARAMETER ( NDCMX = 5 )
+ LOGICAL LATAUF
+ COMMON / PARNUC / EKORI , PXORI , PYORI , PZORI , PTORI , TAUFOR,
+ & TFRABS, TFRDCY, TEXTAU, TEXQEL, TEXNUT, FRPMBY,
+ & ENNUC (NCPMX), PNUCL (NCPMX), EKFNUC (NCPMX),
+ & XSTNUC (NCPMX), YSTNUC (NCPMX), ZSTNUC (NCPMX),
+ & PXNUCL (NCPMX), PYNUCL (NCPMX), PZNUCL (NCPMX),
+ & RSTNUC (NCPMX), FREEPA (NCPMX), CRRPAN (NCPMX),
+ & CRRPAP (NCPMX), BSTNUC (NCPMX), AGENUC (NCPMX),
+ & TAUFPA (NCPMX), RHNUCL(NCPMX,2),
+ & AMSSRS (NRSMX), GAMMRS (NRSMX),
+ & ENRSDC (NDCMX,NRSMX), PXRSDC (NDCMX,NRSMX),
+ & PYRSDC (NDCMX,NRSMX), PZRSDC (NDCMX,NRSMX),
+ & BNDGAV, DEFMIN, FTFRDC,
+ & KPNUCL (NCPMX), KRFNUC (NCPMX), ILINUC (NCPMX),
+ & INUCTS (NCPMX), ISFNUC (NCPMX), LATAUF (NCPMX),
+ & KRSNCE (NCPMX), KRSDCY (NDCMX,NRSMX), KPORI ,
+ & IBORI , IBNUCL, NPNUC , NNUCTS
+
+
--- /dev/null
+*$ CREATE PART.ADD
+*COPY PART
+*
+*=== part =============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: part copy Revised on 20-08-96 by A. Ferrari *
+* *
+* Last change on 14-oct-00 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: *
+* *
+* W A R N I N G !!!! check also part2 and part3 for any change!!! *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Am = particle mass (GeV/c^2) *
+* Ga = particle width (GeV) *
+* Tau = particle mean life (s) *
+* Amdisc = "effective" particle mass for energy balance (GeV) *
+* Zmnabs = lower width (adimensional unit) to be used during *
+* particle decay to assure that at least one decay *
+* channel is physically open *
+* Atnmna = atan (Zmnabs) *
+* Ich = particle electric charge *
+* Ibar = particle baryon number *
+* Isosym = index of the isospin reversed (T_z --> -T_z) *
+* particle (if any, if 0 no such particle is available*
+* in the part listing) *
+* Ichcon = index of the charge conjugated (antiparticle) *
+* particle (if any, if 0 no such particle is available*
+* in the part listing) *
+* K1 = index of first decay channel *
+* K2 = index of last decay channel *
+* Kptoip = conversion from part to paprop numbering *
+* Iptokp = conversion from paprop to part numbering *
+* Kptoia = conversion from part to abltis numbering *
+* Iatokp = conversion from abltis to part numbering *
+* Idcflg = decay flag *
+* Iptype = particle type *
+* -1: heavy fragments *
+* 0: unknown particle or lepton *
+* 1: nucleon *
+* 2: antinucleon *
+* 3: pion *
+* 4: K+/K0 *
+* -4: Kshrt/Klong *
+* 5: K-/K0bar *
+* 6: Lamda/Sigma (strangeness -1 hyperon) *
+* 7: Xsi (strangeness -2 hyperon) *
+* 8: Omega (strangeness -3 hyperon) *
+* 9: ALamda/ASigma (strangeness +1 antihyperon) *
+* 10: AXsi (strangeness +2 antihyperon) *
+* 11: AOmega (strangeness +3 antihyperon) *
+* 12: D+/D0 *
+* 13: D-/D0bar *
+* 14: D_s+/D_s- *
+* 15: Lambda_c+ *
+* 16: Xsi_c+/Xsi_c0 *
+* 17: Xsi'_c+/Xsi'_c0 *
+* 18: Omega_c *
+* 19: ALambda_c+ *
+* 20: AXsi_c-/AXsi_c0 *
+* 21: AXsi'_c-/AXsi'_c0 *
+* 22: AOmega_c *
+* Aname = particle literal name *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANAME
+ COMMON / PART / AM (-6:IDMAXP), GA (-6:IDMAXP),
+ & TAU (-6:IDMAXP), AMDISC (-6:IDMAXP),
+ & ZMNABS (-6:IDMAXP), ATNMNA (-6:IDMAXP),
+ & ICH (-6:IDMAXP), IBAR (-6:IDMAXP),
+ & ISOSYM (-6:IDMAXP), ICHCON (-6:IDMAXP),
+ & K1 (-6:IDMAXP), K2 (-6:IDMAXP),
+ & KPTOIP (-6:IDMAXP), IPTOKP (-6:NALLWP),
+ & KPTOIA (-6:IDMAXP), IATOKP (-6:MXPABL),
+ & IDCFLG (-6:NALLWP), IPTYPE (-6:NALLWP)
+ COMMON / CHPART / ANAME (-6:IDMAXP)
+
--- /dev/null
+*$ CREATE PART2.ADD
+*COPY PART2
+*
+*=== part2 ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: part2 copy Revised on 20-08-96 by A. Ferrari *
+* *
+* Last change on 14-oct-00 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: *
+* *
+* W A R N I N G !!!! check also part and part3 for any change!!! *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Aam = particle mass (GeV/c^2) *
+* Ga = particle width (GeV) *
+* Tau = particle mean life (s) *
+* Aamdsc = "effective" particle mass for energy balance (GeV) *
+* Zmnabs = lower width (adimensional unit) to be used during *
+* particle decay to assure that at least one decay *
+* channel is physically open *
+* Atnmna = atan (Zmnabs) *
+* Iich = particle electric charge *
+* Iibar = particle baryon number *
+* Isosym = index of the isospin reversed (T_z --> -T_z) *
+* particle (if any, if 0 no such particle is available*
+* in the part listing) *
+* Ichcon = index of the charge conjugated (antiparticle) *
+* particle (if any, if 0 no such particle is available*
+* in the part listing) *
+* K1 = index of first decay channel *
+* K2 = index of last decay channel *
+* Kptoip = conversion from part to paprop numbering *
+* Iptokp = conversion from paprop to part numbering *
+* Kptoia = conversion from part to abltis numbering *
+* Iatokp = conversion from abltis to part numbering *
+* Idcflg = decay flag *
+* Iptype = particle type *
+* -1: heavy fragments *
+* 0: unknown particle or lepton *
+* 1: nucleon *
+* 2: antinucleon *
+* 3: pion *
+* 4: K+/K0 *
+* -4: Kshrt/Klong *
+* 5: K-/K0bar *
+* 6: Lamda/Sigma (strangeness -1 hyperon) *
+* 7: Xsi (strangeness -2 hyperon) *
+* 8: Omega (strangeness -3 hyperon) *
+* 9: ALamda/ASigma (strangeness +1 antihyperon) *
+* 10: AXsi (strangeness +2 antihyperon) *
+* 11: AOmega (strangeness +3 antihyperon) *
+* 12: D+/D0 *
+* 13: D-/D0bar *
+* 14: D_s+/D_s- *
+* 15: Lambda_c+ *
+* 16: Xsi_c+/Xsi_c0 *
+* 17: Xsi'_c+/Xsi'_c0 *
+* 18: Omega_c *
+* 19: ALambda_c+ *
+* 20: AXsi_c-/AXsi_c0 *
+* 21: AXsi'_c-/AXsi'_c0 *
+* 22: AOmega_c *
+* Aname = particle literal name *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANAME
+ COMMON / PART / AAM (-6:IDMAXP), GA (-6:IDMAXP),
+ & TAU (-6:IDMAXP), AAMDSC (-6:IDMAXP),
+ & ZMNABS (-6:IDMAXP), ATNMNA (-6:IDMAXP),
+ & IICH (-6:IDMAXP), IIBAR (-6:IDMAXP),
+ & ISOSYM (-6:IDMAXP), ICHCON (-6:IDMAXP),
+ & K1 (-6:IDMAXP), K2 (-6:IDMAXP),
+ & KPTOIP (-6:IDMAXP), IPTOKP (-6:NALLWP),
+ & KPTOIA (-6:IDMAXP), IATOKP (-6:MXPABL),
+ & IDCFLG (-6:NALLWP), IPTYPE (-6:NALLWP)
+ COMMON / CHPART / ANAME (-6:IDMAXP)
+
--- /dev/null
+*$ CREATE PART3.ADD
+*COPY PART3
+*
+*=== part3 ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: part3 copy Revised on 20-08-96 by A. Ferrari *
+* *
+* Last change on 14-oct-00 by Alfredo Ferrari *
+* *
+* Included in the following subroutines or functions: *
+* *
+* W A R N I N G !!!! check also part and part2 for any change!!! *
+* *
+* Description of the common block(s) and variable(s) *
+* *
+* Amc = particle mass (GeV/c^2) *
+* Gac = particle width (GeV) *
+* Tauc = particle mean life (s) *
+* Amdcsc = "effective" particle mass for energy balance (GeV) *
+* Zmnabs = lower width (adimensional unit) to be used during *
+* particle decay to assure that at least one decay *
+* channel is physically open *
+* Atnmna = atan (Zmnabs) *
+* Ichc = particle electric charge *
+* Ibarc = particle baryon number *
+* Isosym = index of the isospin reversed (T_z --> -T_z) *
+* particle (if any, if 0 no such particle is available*
+* in the part listing) *
+* Ichcon = index of the charge conjugated (antiparticle) *
+* particle (if any, if 0 no such particle is available*
+* in the part listing) *
+* K1c = index of first decay channel *
+* K2c = index of last decay channel *
+* Kptoip = conversion from part to paprop numbering *
+* Iptokp = conversion from paprop to part numbering *
+* Kptoia = conversion from part to abltis numbering *
+* Iatokp = conversion from abltis to part numbering *
+* Idcflg = decay flag *
+* Iptype = particle type *
+* -1: heavy fragments *
+* 0: unknown particle or lepton *
+* 1: nucleon *
+* 2: antinucleon *
+* 3: pion *
+* 4: K+/K0 *
+* -4: Kshrt/Klong *
+* 5: K-/K0bar *
+* 6: Lamda/Sigma (strangeness -1 hyperon) *
+* 7: Xsi (strangeness -2 hyperon) *
+* 8: Omega (strangeness -3 hyperon) *
+* 9: ALamda/ASigma (strangeness +1 antihyperon) *
+* 10: AXsi (strangeness +2 antihyperon) *
+* 11: AOmega (strangeness +3 antihyperon) *
+* 12: D+/D0 *
+* 13: D-/D0bar *
+* 14: D_s+/D_s- *
+* 15: Lambda_c+ *
+* 16: Xsi_c+/Xsi_c0 *
+* 17: Xsi'_c+/Xsi'_c0 *
+* 18: Omega_c *
+* 19: ALambda_c+ *
+* 20: AXsi_c-/AXsi_c0 *
+* 21: AXsi'_c-/AXsi'_c0 *
+* 22: AOmega_c *
+* Aname = particle literal name *
+* *
+*----------------------------------------------------------------------*
+*
+ CHARACTER*8 ANAMC
+ COMMON / PART / AMC (-6:IDMAXP), GAC (-6:IDMAXP),
+ & TAUC (-6:IDMAXP), AMCDSC (-6:IDMAXP),
+ & ZMNABS (-6:IDMAXP), ATNMNA (-6:IDMAXP),
+ & ICHC (-6:IDMAXP), IBARC (-6:IDMAXP),
+ & ISOSYM (-6:IDMAXP), ICHCON (-6:IDMAXP),
+ & K1C (-6:IDMAXP), K2C (-6:IDMAXP),
+ & KPTOIP (-6:IDMAXP), IPTOKP (-6:NALLWP),
+ & KPTOIA (-6:IDMAXP), IATOKP (-6:MXPABL),
+ & IDCFLG (-6:NALLWP), IPTYPE (-6:NALLWP)
+ COMMON / CHPART / ANAMC (-6:IDMAXP)
+
--- /dev/null
+*$ CREATE PATHCM.ADD
+*COPY PATHCM
+*----------------------------------------------------------------------*
+* *
+* Common Pathcm for EGS4 *
+* *
+*----------------------------------------------------------------------*
+ COMMON /PATHCM/ B0PTH, B1PTH, PTH0(6), PTH1(6), PTH2(6), NPTH
+
--- /dev/null
+*$ CREATE PHNCCM.ADD
+*COPY PHNCCM
+*
+*=== phnccm ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* PHotoNuClear interaction CoMmon: *
+* *
+* Created on 02 january 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 31-jan-94 by Alfredo Ferrari *
+* *
+* Rhphnc (i) = density used for photonuclear cross section tabula- *
+* tions *
+* Wquade = weight to be applied to the quasi-deuteron cross *
+* section *
+* Wgdrtt = weight to be applied to the GDR cross section *
+* Wgdelt = weight to be applied to the delta cross section *
+* Wgamhg = weight to be applied to the high-energy cross sec- *
+* tion *
+* Squade = quasi-deuteron cross section *
+* Sgdrtt = GDR cross section *
+* Sgdelt = delta cross section *
+* Sgamhg = high-energy cross section *
+* Ifphnc (i) = flag for photonuclear interactions for ith material *
+* Jphflg = flag for the kind of interaction selected: *
+* 1) Quasideuteron *
+* 2) GDR *
+* 3) Delta *
+* 4) High energy *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( PHNCSF = 1.25D+00 )
+ COMMON / PHNCCM / RHPHNC (MXXMDF), WQUADE, WGDRTT, WGDELT, WGAMHG,
+ & SQUADE, SGDRTT, SGDELT, SGAMHG, IFPHNC (MXXMDF),
+ & JPHFLG
+
--- /dev/null
+*$ CREATE PHOINP.ADD
+*CREATE PHOINP
+*
+*=== Phoinp ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Common PHOINP for EMF (it supersedes the old Photin from EGS4) *
+* *
+* Created on 19 april 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-apr-97 by Alfredo Ferrari *
+* *
+* IGMFP0, IGMFP1 etc are the starting locations for 0 address *
+* in blank common of the GMFP0 etc arrays *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /PHOINP/ EBINDA (MXXMDE), GE0 (MXXMDE), GE1 (MXXMDE),
+ & RCO0 (MXXMDE), RCO1 (MXXMDE), NGR (MXXMDE),
+ & IGMFP0 (MXXMDE), IGMFP1 (MXXMDE),
+ & IGBR10 (MXXMDE), IGBR11 (MXXMDE),
+ & IGBR20 (MXXMDE), IGBR21 (MXXMDE),
+ & IRSCT0 (MXXMDE), IRSCT1 (MXXMDE),
+ & ICOHE0 (MXXMDE), ICOHE1 (MXXMDE)
+
+
--- /dev/null
+*$ CREATE PHOTEL.ADD
+*COPY PHOTEL
+*
+*=== photel ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file photel: *
+* created on 24-october-1990 by A. Ferrari & P. Sala *
+* INFN - Milan *
+* *
+* Included in the following routines: *
+* *
+* Photo (new version) *
+* Phoflu (version with fluorescence of photo) *
+* Bdphfl (block data for photoelectrons and *
+* fluorescence data) *
+* Variable: *
+* Umuphe (i,j) = tabulated emission cosines of emitted *
+* photoelectrons at given cumulative pro-*
+* bability ( prob = j / nphumu ) and at *
+* given electron beta**2 ( beta2 = *
+* (i-1) x dphbt2 ), computed according *
+* to the relativistic theory of F. Von *
+* Sauter *
+* *
+* Dumphe (i,j) = tabulated derivatives of the inverse *
+* function computed at umuphe *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( PHB2MX = 9.800000000000000D-01 )
+ PARAMETER ( DPHBT2 = 7.000000000000000D-02 )
+ PARAMETER ( BETA00 = 2.645751311064591D-01 )
+ PARAMETER ( NPHUMU = 30 )
+ PARAMETER ( NPHBET = 15 )
+*
+ COMMON / PHOTEL / UMUPHE ( 0:NPHUMU, NPHBET ),
+ & DUMPHE ( 0:NPHUMU, NPHBET )
+
--- /dev/null
+*$ CREATE PMRNCM.ADD
+*COPY PMRNCM
+*
+*=== Pmrncm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* PoMeRoN exchange related CoMmon: *
+* *
+* Created on 15-september-1997 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 24-mar-98 by Alfredo Ferrari, INFN-Milan *
+* *
+* B0popp = asymptotic (amplitude) B_slope for pp(bar) elastic *
+* scattering, *
+* B_slope = 2 B0popp + 2 aprdff ln [ s / s_0 ] *
+* *
+* Aprpom = alpha' of Pomeron trajectory *
+* a(t) = 1 + eps + a't *
+* *
+* Epspom = epsilon of Pomeron trajectory (0 for a critical *
+* pomeron, >0 for a supercritical one) *
+* *
+* Lmclsn = Flag for performing multiple soft collisions *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LMCLSN
+*
+ COMMON / PMRNCM / B0POPP, APRPOM, EPSPOM, LMCLSN
+
--- /dev/null
+*$ CREATE POTART.ADD
+*COPY POTART
+*
+*=== potart ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 25 february 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 25-feb-94 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LRLBAR, LPOART, LTRART, LBRPEN
+ COMMON / POTART / EPXART (20), VPXART (20), ANMXAR (20), ANGACT,
+ & ANGASQ, RDVVPO, FBRPEN, IFLGPN, ISFPEN (2,20),
+ & NSFPEN, ISFART (2,20), NSFART, LRLBAR, LPOART,
+ & LTRART, LBRPEN
+
--- /dev/null
+*$ CREATE PRECMM.ADD
+*COPY PRECMM
+******** Common for Peanut:
+ LOGICAL LUPPEA, LUSPEA, LUEPEA, LTAPEA
+ REAL XXXPEA, YYYPEA, QQ2PEA, WW2PEA, XR1PEA, XR2PEA, XR3PEA,
+ & PPPPEA
+ INTEGER ICOPEA, ICUPEA, ITRPEA, NOUPEA, NEVPEA, MEVPEA, MSCPEA,
+ & NOKPEA
+ PARAMETER ( MEVPEA = 10 )
+ PARAMETER ( MSCPEA =300 )
+ COMMON / PRECMM / XXXPEA (0:MEVPEA), YYYPEA (0:MEVPEA),
+ & QQ2PEA (0:MEVPEA), WW2PEA (0:MEVPEA),
+ & XR1PEA (MSCPEA,0:MEVPEA),
+ & XR2PEA (MSCPEA,0:MEVPEA),
+ & XR3PEA (MSCPEA,0:MEVPEA),
+ & PPPPEA (MSCPEA,0:MEVPEA),
+ & ICOPEA (MSCPEA,0:MEVPEA), LUSPEA (0:MEVPEA),
+ & ICUPEA (0:MEVPEA), ITRPEA (0:MEVPEA),
+ & NOUPEA (0:MEVPEA), LUEPEA (0:MEVPEA),
+ & LTAPEA (0:MEVPEA), NEVPEA, LUPPEA, NOKPEA
+********
+
--- /dev/null
+*$ CREATE QDEBUG.ADD
+*COPY QDEBUG
+*----------------------------------------------------------------------*
+* *
+* Common Qdebug for EGS4 *
+* *
+*----------------------------------------------------------------------*
+ COMMON /QDEBUG/ QDEBUG
+ LOGICAL QDEBUG
+
--- /dev/null
+*$ CREATE QQUARK.ADD
+*COPY QQUARK
+*
+*=== qquark ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 6 february 1991 by Alfredo Ferrari *
+* INFN - Milan *
+* *
+* Last change on 6 february 1996 by Alfredo Ferrari *
+* *
+* Included in the following routines : *
+* *
+* COREVT *
+* CORRIN *
+* HADEVV *
+* HADEVT *
+* NUCEVV *
+* NUCEVT *
+* *
+* Quark content of particles: *
+* index quark el. charge bar. charge isospin isospin3 *
+* 1 = u 2/3 1/3 1/2 1/2 *
+* -1 = ubar -2/3 -1/3 1/2 -1/2 *
+* 2 = d -1/3 1/3 1/2 -1/2 *
+* -2 = dbar 1/3 -1/3 1/2 1/2 *
+* 3 = s -1/3 1/3 0 0 *
+* -3 = sbar 1/3 -1/3 0 0 *
+* 4 = c 2/3 1/3 0 0 *
+* -4 = cbar -2/3 -1/3 0 0 *
+* 5 = b -1/3 1/3 0 0 *
+* -5 = bbar 1/3 -1/3 0 0 *
+* 6 = t 2/3 1/3 0 0 *
+* -6 = tbar -2/3 -1/3 0 0 *
+* *
+* 7 = used for nucleon decay *
+* *
+* Mquark = particle quark composition (Paprop numbering) *
+* Iqechr = electric charge ( in 1/3 unit ) *
+* Iqbchr = baryonic charge ( in 1/3 unit ) *
+* Iqichr = isospin ( in 1/2 unit ), z component *
+* Iqschr = strangeness *
+* Iqcchr = charm *
+* Iquchr = beauty *
+* Iqtchr = ...... *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / QQUARK / IQECHR (-6:7), IQBCHR (-6:7), IQICHR (-6:7),
+ & IQSCHR (-6:7), IQCCHR (-6:7), IQUCHR (-6:7),
+ & IQTCHR (-6:7), MQUARK (3,NALLWP)
+
--- /dev/null
+*$ CREATE RANDOM.ADD
+*COPY RANDOM
+*----------------------------------------------------------------------*
+* *
+* Common Random for EGS4 *
+* *
+*----------------------------------------------------------------------*
+ COMMON /RANDOM/ IXX
+ INTEGER IX(2)
+ REAL*8 DRN
+ EQUIVALENCE( IX(1), DRN )
+ DATA IX(1)/Z46000000/
+
--- /dev/null
+*$ CREATE RDCYCM.ADD
+*COPY RDCYCM
+*
+*=== Rdcycm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Radioactive DeCaY CoMmon: *
+* *
+* Created on 15-september-1993 by Alfredo Ferrari & Paola Sala *
+* INFN - MIlan *
+* *
+* Last change on 16-sep-99 by Alfredo Ferrari, CERN *
+* *
+* Sirrdt (i) = starting time of the i_th irradiation period *
+* Tirrdt (i) = length (s) of the i_th irradiation period *
+* Birrdt (i) = relative intensity of the i_th irradiation *
+* period, please note that *
+* Sum_1=1,Nirrdt Birrdt=1 *
+* Tirdcy (j) = j_th decay time at which scoring is requested *
+* Werdcy (j) = relative weight of the present particle at the *
+* j_th decay time *
+* Dlrdcy = delay (s) wrt the nominal beam "0" time for *
+* production of the current particle (i.e. for *
+* the decay products of the daughter of another *
+* decay) *
+* Nirrdt = number of irradiation preiods *
+* Ntrdcy = number of decay times for which scoring is re- *
+* quested *
+* Ldordc = global Fluka flag for performing radioactive *
+* decays *
+* Lrddcy = flag for the current particle being produced *
+* in a radioactive decay *
+* Lardcy = flag for "analogue" radioactive decays *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXIRRD = 100 )
+ PARAMETER ( MXTRDC = 100 )
+ LOGICAL LRDDCY, LDORDC, LARDCY
+ COMMON / RDCYCM / SIRRDT (MXIRRD), TIRRDT (MXIRRD),
+ & BIRRDT (MXIRRD), TIRDCY (MXTRDC),
+ & WERDCY (MXTRDC), DLRDCY, NIRRDT, NTRDCY, LDORDC,
+ & LRDDCY, LARDCY
+
--- /dev/null
+*$ CREATE REAC.ADD
+*COPY REAC
+*
+*=== reac =============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 10 december 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-dec-91 by Alfredo Ferrari *
+* *
+* This is the original common reac of Hadrin *
+* *
+* Included in the following routines: *
+* *
+* CALUMV *
+* DATESH *
+* HADRIV *
+* RCHANV *
+* BLKDT3 *
+* HADRIN *
+* IEFUN *
+* SIGINT *
+* CALUMO *
+* RCHANW *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /REAC/ UMO ( 296), PLABF ( 296), SIIN ( 296),
+ + WK (5184), NRK (2,268), NURE (30,2)
+
--- /dev/null
+*$ CREATE REDVER.ADD
+*COPY REDVER
+*
+*=== redver ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 10 december 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-dec-91 by Alfredo Ferrari *
+* *
+* This is the original common redver of Hadrin *
+* *
+* Included in the following routines: *
+* *
+* CALUMV *
+* DATESH *
+* HADRIV *
+* RCHANV *
+* BLKDT4 *
+* HADRIN *
+* IEFUN *
+* SIGINT *
+* CALUMO *
+* RCHANW *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / REDVER / THRESH (268), IRII (17) , IKII (17) , IEII (17)
+
--- /dev/null
+*$ CREATE RESNUC.ADD
+*COPY RESNUC
+* *
+*=== resnuc ==========================================================*
+* *
+*---------------------------------------------------------------------*
+* *
+* Include file Resnuc *
+* *
+* Created on 20 april 1990 by Alfredo Ferrari *
+* INFN Milan *
+* *
+* Last change on 09-nov-99 by Alfredo Ferrari, INFN - Milan *
+* *
+* Included in the following routines: *
+* *
+* BDNOPT *
+* BIMSEL *
+* BSELSC *
+* COREVT *
+* CORRIN *
+* DISTNU *
+* EVDEEX *
+* EVENTV *
+* EVEVAP *
+* EVXTES *
+* FEREVV *
+* FERHAV *
+* FKBIRK *
+* FVCOUL *
+* HDNCIN *
+* KAONUC *
+* KASKAD *
+* KASHEA *
+* KASNEU *
+* LOWRES *
+* MUOABS *
+* MUPRAB *
+* NUCDCY *
+* NUCEVV *
+* NUCNUC *
+* NUCREL *
+* NUCRIV *
+* PEANUT *
+* PHNCEV *
+* PHNVEV *
+* PIABTH *
+* PIOABS *
+* PIONUC *
+* PMPRAB *
+* PPHCHO *
+* PREPRE *
+* RAKEKV *
+* RSTSEL *
+* UMFNST *
+* UMOFIN *
+* USRSRN *
+* WSTOAP *
+* VPOKAO *
+* VPOPIO *
+* *
+* Description of variables (incomplete): *
+* *
+* Icres = residual nucleus atomic number *
+* Ibres = residual nucleus mass number *
+* Istres = residual nucleus stable level index *
+* Ismres = residual nucleus isomeric state index *
+* Ihyres = residual nucleus hyperon number *
+* Amnres = residual nucleus nuclear mass *
+* Ammres = residual nucleus atomic mass *
+* Eres = residual nucleus total energy *
+* Ekres = residual nucleus kinetic energy *
+* Px,y,zres = residual nucleus momentum components *
+* Ptres2 = residual nucleus squared momentum *
+* Angres = residual nucleus angular momentum (GeV/c fm) *
+* Anx,y,zres = residual nucleus angular momentum components *
+* Khyres(jp) = id of the jp_th hyperon in the residual nucleus *
+* Bhyres(jp) = (nuclear) binding energy of the jp_th hyperon *
+* in the residual nucleus *
+* *
+* *
+* *
+*---------------------------------------------------------------------*
+*
+ LOGICAL LRNFSS, LFRAGM
+ COMMON /RESNUC/ AMNTAR, AMMTAR, AMNZM1, AMMZM1, AMNNM1, AMMNM1,
+ & ANOW, ZNOW, ANCOLL, ZNCOLL, AMMLFT, AMNLFT,
+ & ERES, EKRES, AMNRES, AMMRES, PTRES, PXRES,
+ & PYRES, PZRES, PTRES2, ANGRES, ANXRES, ANYRES,
+ & ANZRES, BHYRES (IHYPMX),
+ & KTARP, KTARN, IGREYP, IGREYN, IPDPM0, IPDPM1,
+ & IPREEH, IPRDEU, IPRTRI, IPR3HE, IPR4HE, ICRES,
+ & IBRES, ISTRES, ISMRES, IHYRES, IEVAPL, IEVAPH,
+ & IEVPHO, IEVNEU, IEVPRO, IEVDEU, IEVTRI, IEV3HE,
+ & IEV4HE, IDEEXG, IBTAR, ICHTAR, IBLEFT, ICLEFT,
+ & IOTHER, KHYRES (IHYPMX), LRNFSS, LFRAGM
+
--- /dev/null
+*$ CREATE RHOHAR.ADD
+*COPY RHOHAR
+*
+*=== rhohar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 03 august 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 03-aug-94 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+* Statement function:
+ RHOHAR (ISF,ITN) = RHOEFF (ISF,1) + RHOEFF (ISF,2)
+* RHOHAR (ISF,ITN) = RHOEFF (ISF,ITN)
+
--- /dev/null
+*$ CREATE RRCOUN.ADD
+*COPY RRCOUN
+*
+*=== Rrcoun ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Last change on 17-jun-97 by Alfredo Ferrari *
+* Module RRCOUN: *
+* Russian Roulette counters, A. Fasso' 1987 *
+* Modified by A. Ferrari to introduce importance biassing *
+* *
+* Lmducl = Logical flag for MeDium dependent User CaLl *
+* *
+*----------------------------------------------------------------------*
+*
+* Maximum importance splitting factor:
+ PARAMETER ( IMSPMX = 5 )
+* Minimum importance RR killing factor (in priciple for symmetry
+* back and forth it should 1/imspmx, but it is not mandatory):
+ PARAMETER ( RRIMMN = 0.2D+00 )
+ LOGICAL LIMPRH, LIMPRT, LIMPPR, LIMPRU, LEXPTR, LEXPTH, LRROUL,
+ & LIMPCO, LMDUCL
+ COMMON / RRCOUN / WEIKIL, EKIL , WEISUR, ESUR , WEINOR, ENOR ,
+ & WEIWEI, EWEI , REDUCT, EXTIMP(-6:NALLWP),
+ & EXTEXT(-6:NALLWP), JETBGN, IRRBGN, ICHBGN,
+ & ICEBGN, ICNBGN, LRROUL, LIMPRH, LIMPRT, LEXPTH,
+ & LEXPTR, LIMPCO, LIMPPR, LIMPRU, LMDUCL (MXXMDF)
+
--- /dev/null
+*$ CREATE RTDFCM.ADD
+*COPY RTDFCM
+*
+*=== rtdfcm ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* RoTation DeFinition CoMmon: *
+* *
+* Created on 12 february 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 13-feb-97 by Alfredo Ferrari *
+* *
+* Rtmtrx(i,j,k) = R_ij rotation matrix for the k_th transfor- *
+* mation *
+* Rimtrx(i,j,k) = R^-1_ij rotation matrix for the k_th transfor- *
+* mation *
+* Rtofst(i,k) = Traslation vector (i=1,2,3->x,y,z) for the k_th *
+* transformation *
+* Thertn (k) = Polar angle (degrees) for the k_th transfor- *
+* mation *
+* Phirtn (k) = Azimuthal angle (degrees) for the k_th transfor- *
+* mation *
+* Jaxrtn (k) = Axis used to define the angles for the k_th *
+* transformation *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXRTNS = 25 )
+ COMMON / RTDFCM / RTMTRX (3,3,MXRTNS), RIMTRX (3,3,MXRTNS),
+ & RTOFST (3,MXRTNS), THERTN (MXRTNS),
+ & PHIRTN (MXRTNS), JAXRTN (MXRTNS)
+
--- /dev/null
+*$ CREATE RTFLGS.ADD
+*COPY RTFLGS
+*
+*=== Rtflgs ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: Run Time FLaGS: *
+* *
+* Created on 28 may 1999 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 28-may-99 by Alfredo Ferrari *
+* *
+* Lrtcml = run time flag for the cumlalnt dE/dx algorithm *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LRTCML
+*
+ COMMON / RTFLGS / LRTCML
+
--- /dev/null
+*$ CREATE RTGMMV.ADD
+*COPY RTGMMV
+*
+*=== Rtgmmv ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Run-Time GeoMetry MoVements: *
+* *
+* Created on 26 may 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 26-may-98 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / RTGMMV / XRTGMV, YRTGMV, ZRTGMV
+
--- /dev/null
+*$ CREATE SBUSFL.ADD
+*COPY SBUSFL
+*
+*=== sbusfl ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 28 january 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 28-jan-92 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* SBCOMP *
+* BREFRA *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / SBUSFL / R0HLA , R0HLB , R0SKA , R0SKB , R0CEA , R0CEB ,
+ & R1CEA , R1CEB , R1SKA , R1SKB , R1HLA , R1HLB ,
+ & SQRH0A, SQRH0B, SQRS0A, SQRS0B, SQRC0A, SQRC0B,
+ & SQRC1A, SQRC1B, SQRS1A, SQRS1B, SQRH1A, SQRH1B
+
--- /dev/null
+*$ CREATE SCEXFL.ADD
+*COPY SCEXFL
+*
+*=== Scexfl ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* SCoring EXtra FLags *
+* *
+* New version of the old comsec by Alfredo Ferrari, INFN - Milan *
+* *
+* Created on 04 january 1994 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 13-apr-01 by Alfredo Ferrari, INFN - Milan *
+* *
+* The comsco array is now dinamically allocated into the blank *
+* common, Icmbgn is the (0 address) beginning of Comsco(nregs,4) *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LDENO2, LDENO3, LDENOD
+ COMMON / COMSEC / LDENO2, LDENO3, LDENOD, ICMBGN
--- /dev/null
+*$ CREATE SCOHLP.ADD
+*COPY SCOHLP
+*
+*=== scohlp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 05 august 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 29-oct-94 by Alfredo Ferrari *
+* *
+* Energy/Star binnings/scorings (Comscw): *
+* ISCRNG = 1 --> Energy density binning *
+* ISCRNG = 2 --> Star density binning *
+* ISCRNG = 3 --> Residual nuclei scoring *
+* JSCRNG = # of the binning *
+* Flux like binnings/estimators (Fluscw): *
+* ISCRNG = 1 --> Boundary crossing estimator *
+* ISCRNG = 2 --> Track length binning *
+* ISCRNG = 3 --> Track length estimator *
+* ISCRNG = 4 --> Collision density estimator *
+* ISCRNG = 5 --> Yield estimator *
+* JSCRNG = # of the binning/estimator *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LSCZER
+ COMMON / SCOHLP / ISCRNG, JSCRNG, LSCZER
+
--- /dev/null
+*$ CREATE SFELIN.ADD
+*COPY SFELIN
+*
+*=== Sfelin ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Statement Functions for Common ELeINp for EMF *
+* *
+* Created on 19 april 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-apr-97 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ ESIG0 (J,I) = GMSTOR ( IESIG0 (I) + J )
+ ESIG1 (J,I) = GMSTOR ( IESIG1 (I) + J )
+ PSIG0 (J,I) = GMSTOR ( IPSIG0 (I) + J )
+ PSIG1 (J,I) = GMSTOR ( IPSIG1 (I) + J )
+ EDEDX0 (J,I) = GMSTOR ( IEDDX0 (I) + J )
+ EDEDX1 (J,I) = GMSTOR ( IEDDX1 (I) + J )
+ PDEDX0 (J,I) = GMSTOR ( IPDDX0 (I) + J )
+ PDEDX1 (J,I) = GMSTOR ( IPDDX1 (I) + J )
+ EBR10 (J,I) = GMSTOR ( IEBR10 (I) + J )
+ EBR11 (J,I) = GMSTOR ( IEBR11 (I) + J )
+ PBR10 (J,I) = GMSTOR ( IPBR10 (I) + J )
+ PBR11 (J,I) = GMSTOR ( IPBR11 (I) + J )
+ PBR20 (J,I) = GMSTOR ( IPBR20 (I) + J )
+ PBR21 (J,I) = GMSTOR ( IPBR21 (I) + J )
+ TMXS0 (J,I) = GMSTOR ( ITXSE0 (I) + J )
+ TMXS1 (J,I) = GMSTOR ( ITXSE1 (I) + J )
+ TMXSP0 (J,I) = GMSTOR ( ITXSP0 (I) + J )
+ TMXSP1 (J,I) = GMSTOR ( ITXSP1 (I) + J )
+
--- /dev/null
+*$ CREATE SFPHIN.ADD
+*COPY SFPHIN
+*
+*=== Sfphin ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Statement Functions for Common PHoINp for EMF *
+* *
+* Created on 19 april 1997 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-apr-97 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ GMFP0 (J,I) = GMSTOR ( IGMFP0 (I) + J )
+ GMFP1 (J,I) = GMSTOR ( IGMFP1 (I) + J )
+ GBR10 (J,I) = GMSTOR ( IGBR10 (I) + J )
+ GBR11 (J,I) = GMSTOR ( IGBR11 (I) + J )
+ GBR20 (J,I) = GMSTOR ( IGBR20 (I) + J )
+ GBR21 (J,I) = GMSTOR ( IGBR21 (I) + J )
+ RSCT0 (J,I) = GMSTOR ( IRSCT0 (I) + J )
+ RSCT1 (J,I) = GMSTOR ( IRSCT1 (I) + J )
+ COHE0 (J,I) = GMSTOR ( ICOHE0 (I) + J )
+ COHE1 (J,I) = GMSTOR ( ICOHE1 (I) + J )
+
+
--- /dev/null
+*$ CREATE SGTBCM.ADD
+*COPY SGTBCM
+*
+*=== sgtbcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Include file: sgtbcm *
+* *
+* Created on 26 august 1991 by Alfredo Ferrari *
+* INFN - Milan *
+* *
+* Last change on 15-mar-99 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BLKDT1 *
+* KASKAD *
+* KASHEA *
+* PHNCVR *
+* SGTELS *
+* SGTINL *
+* SGTTOT *
+* SIGTAB *
+* *
+*----------------------------------------------------------------------*
+*
+* Minimum energy ratio for which cross section are computed
+* (that is the minimum energy down which the cross sections presently
+* used are reliable)
+ PARAMETER ( EKRTMN = 0.6000000000000000000D+00 )
+* Sqr1p5 = sqrt ( 1 / ekrtmn )
+ PARAMETER ( SQR1P5 = 1.2909944487358056284D+00 )
+* Alg1p5 = log ( 1 / ekrtmn )
+ PARAMETER ( ALG1P5 = 0.5108256237659906832D+00 )
+* Minimum energy ratio before computing again cross sections
+* (roughly geometric mean between 1 and ekrtmn )
+ PARAMETER ( EKRTEF = 0.7750000000000000000D+00 )
+ PARAMETER ( EKSIG0 = 1.104746407608999714039030918809046D-03 )
+* PARAMETER ( EKSIG0 = 6.14229867868362340504446476139873D-03 )
+ PARAMETER ( EKSIG1 = 50.0000000000000000000000000000000D-03 )
+ PARAMETER ( EKSIG2 = 641.959232274432000000000000000000D-03 )
+ PARAMETER ( EKSIG3 = 11677.1704101562500000000000000000D-03 )
+ PARAMETER ( ELKEG0 =-6.80813946572698539519330850737315D+00 )
+* PARAMETER ( ELKEG0 =-5.09255622924913791440217028831937D+00 )
+ PARAMETER ( ELKEG1 =-2.99573227355399099343522357614254D+00 )
+ PARAMETER ( ELKEG2 =-4.43230478438626226471171223979336D-01 )
+ PARAMETER ( ELKEG3 = 2.45763568864610059849066495004851D+00 )
+ PARAMETER ( SIGRT0 = 1.1000000000000000000D+00 )
+ PARAMETER ( SIGRT1 = 1.2000000000000000000D+00 )
+ PARAMETER ( SIGRT2 = 1.2500000000000000000D+00 )
+ PARAMETER ( SIGRT3 = 1.4000000000000000000D+00 )
+ PARAMETER ( ASGRT0 = 9.531017980432486004395212328076517D-02 )
+ PARAMETER ( ASGRT1 = 0.182321556793954626211718025154515D+00 )
+ PARAMETER ( ASGRT2 = 0.223143551314209755766295090309834D+00 )
+ PARAMETER ( ASGRT3 = 0.336472236621212930504593410216992D+00 )
+ PARAMETER ( NPSIG0 = 40 )
+* PARAMETER ( NPSIG0 = 22 )
+ PARAMETER ( NPSIG1 = 14 )
+ PARAMETER ( NPSIG2 = 13 )
+ PARAMETER ( MPSIGT = 35 )
+ PARAMETER ( MPSIGE = 33 )
+ PARAMETER ( MPSIGI = 38 )
+ PARAMETER ( MPSIGB = 13 )
+ PARAMETER ( MPSIGH = 4 )
+*
+ LOGICAL LKSHRT, LK0BAR, LKAON0, LKAOSL, LEXDCY
+ COMMON / SGTBCM / EKSIG4, ELKE0, ELKE1, ESSGTB, DESGTB,
+ & KTSIGT (MPSIGT,MXXMDF), KESIGT (MPSIGE,MXXMDF),
+ & KISIGT (MPSIGI,MXXMDF), KBSIGT (MPSIGB,MXXMDF),
+ & KPSIGT (MPSIGB,MXXMDF), IJSIGT (-6:NALLWP),
+ & IJSIGE (-6:NALLWP), IJSIGI (-6:NALLWP),
+ & IJSIGB (-6:NALLWP), NPSIG3, IESGTB, NPSGMN,
+ & NPSGMX, LKSHRT, LK0BAR, LKAON0, LKAOSL, LEXDCY
+
--- /dev/null
+*$ CREATE SLHDCM.ADD
+*COPY SLHDCM
+*
+*=== Slhdcm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* SLopes for HaDrin (CoMmon): *
+* *
+* Created on 01 february 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 19-sep-00 by Alfredo Ferrari *
+* *
+* Smashd is the old SM (Masses for the slope B(M) in GeV) *
+* Bbmhad is the old BBM (Slope for a mesonic system) *
+* Bbbhad is the old BBB (Slope for a baryonic system) *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / SLHDCM / SMASHD (25), BBMHAD (25), BBBHAD (25)
--- /dev/null
+*$ CREATE SLNUCM.ADD
+*COPY SLNUCM
+*
+*=== slnucm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* SoLar ( and supernova) NeUtrino CoMmon: *
+* *
+* Created on 29 february 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 03-feb-01 by Alfredo Ferrari *
+* *
+* *
+* Slnasg(j,i) = absorption cross section for jth level and ith *
+* energy *
+* Qugtfr = reaction Q for absorption on 40-Ar (40-Ar -> 40-K) *
+* Spsngt(i) = differential spectrum x cross section for solar *
+* for Gamow-Teller vue absorption on 40-Ar *
+* Cusngt(i) = cumulative spectrum x cross section for solar neu- *
+* trino for Gamow-Teller vue absorption on 40-Ar *
+* Sngtcn = total interaction rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* Ppcogt = pp interaction rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* B8cogt = 8-B interaction rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* Hepcog = hep interaction rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* Be71cg = 7-Be (1st) inter. rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* Be72cg = 7-Be (2nd) inter. rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* Pepcog = pep interaction rate per year per kTon x f(40-Ar)*
+* for Gamow-Teller vue absorption on 40-Ar *
+* Spsnfr(i) = differential spectrum x cross section for solar *
+* for Fermi vue absorption on 40-Ar *
+* Cusnfr(i) = cumulative spectrum x cross section for solar neu- *
+* trino for Fermi vue absorption on 40-Ar *
+* Snfrcn = total interaction rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* Ppcofr = pp interaction rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* B8cofr = 8-B interaction rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* Hepcof = hep interaction rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* Be71cf = 7-Be (1st) inter. rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* Be72cf = 7-Be (2nd) inter. rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* Pepcof = pep interaction rate per year per kTon x f(40-Ar)*
+* for Fermi vue absorption on 40-Ar *
+* Spsntt(i) = differential spectrum x cross section for solar *
+* neutrino nue-electron elastic interactions *
+* Cusntt(i) = cumulative spectrum x cross section for solar neu- *
+* trino nue-electron elastic interactions *
+* Snttcn = total interaction rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Ppcont = pp interaction rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* B8cont = 8-B interaction rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Hepcon = hep interaction rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Be71cn = 7-Be (1st) inter. rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Be72cn = 7-Be (2nd) inter. rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Pepcon = pep interaction rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Spsnot(i) = differential spectrum x cross section for oscilla- *
+* ted numu-electron elastic interactions *
+* Cusnot(i) = cumulative spectrum x cross section for oscillated *
+* numu-electron elastic interactions *
+* Snotcn = total interaction rate per year per kTon x <Z/A> *
+* for elastic vue-electron interactions *
+* Ppocon = pp interaction rate per year per kTon x <Z/A> *
+* for elastic oscillated vumu-electron interactions *
+* B8ocon = 8-B interaction rate per year per kTon x <Z/A> *
+* for elastic oscillated vumu-electron interactions *
+* Hepocn = hep interaction rate per year per kTon x <Z/A> *
+* for elastic oscillated vumu-electron interactions *
+* Be71oc = 7-Be (1st) inter. rate per year per kTon x <Z/A> *
+* for elastic oscillated vumu-electron interactions *
+* Be72oc = 7-Be (2nd) inter. rate per year per kTon x <Z/A> *
+* for elastic oscillated vumu-electron interactions *
+* Pepocn = pep interaction rate per year per kTon x <Z/A> *
+* for elastic oscillated vumu-electron interactions *
+* Tesnmn = secondary electron minimum kinetic energy (GeV) *
+* Elv40a(k) = kth energy level of 40-K (produced by vue absorp- *
+* tion on 40-Ar) *
+* Inuosc = oscillation option flag *
+* Ior40a(j) = index of the jth level accessible for vue absorp- *
+* tion on 40-Ar (levels are of 40-K) in the 40-K *
+* level scheme (see also Elv40a) *
+* *
+*----------------------------------------------------------------------*
+*
+* Number of 40-Ar levels for which absorption cross section data are
+* given:
+ PARAMETER ( NFGTAR = 21 )
+* Number of (neutrino) energy bins for Gamow-Teller and Fermi
+* absorption cross sections
+ PARAMETER ( NFGTEN = 200 )
+* Index of the Fermi transition for 40-Ar
+ PARAMETER ( IFR40A = 8 )
+* Initial (0 index) energy for Gamow-Teller and Fermi
+* absorption cross sections
+ PARAMETER ( E0FRGT = ZERZER )
+* Energy step for Gamow-Teller and Fermi
+* absorption cross sections
+ PARAMETER ( DEFRGT = 0.0001 D+00 )
+* Recorded levels of 40-K (produced by vue absoprtion on 40-Ar)
+ PARAMETER ( NLV40A = 40 )
+* Maximum number of branching to other levels of 40-K (produced
+* by vue absoprtion on 40-Ar)
+ PARAMETER ( NBR40A = 10 )
+* Number of energy bins for elastic neutrino scattering
+ PARAMETER ( NFSNTT = 1880 )
+* Energy step for elastic neutrino scattering
+ PARAMETER ( DEFLSN = 0.00001 D+00 )
+* Energy of 1st 7-Be neutrino line
+ PARAMETER ( ENBE71 = 0.000384D+00 )
+* Energy of 2nd 7-Be neutrino line
+ PARAMETER ( ENBE72 = 0.000862D+00 )
+* Energy of pep neutrino line
+ PARAMETER ( ENLPEP = 0.001442D+00 )
+*
+ COMMON / SLNUCM / SLNASG (NFGTAR,NFGTEN), BRT40A (NBR40A,NLV40A),
+ & SPSNGT (0:NFGTEN), CUSNGT (0:NFGTEN), SNGTCN,
+ & PPCOGT, B8COGT, HEPCOG, BE71CG, BE72CG, PEPCOG,
+ & SPSNFR (0:NFGTEN), CUSNFR (0:NFGTEN), SNFRCN,
+ & PPCOFR, B8COFR, HEPCOF, BE71CF, BE72CF, PEPCOF,
+ & SPSNTT (0:NFSNTT), CUSNTT (0:NFSNTT), SNTTCN,
+ & PPCONT, B8CONT, HEPCON, BE71CN, BE72CN, PEPCON,
+ & SPSNOT (0:NFSNTT), CUSNOT (0:NFSNTT), SNOTCN,
+ & PPOCON, B8OCON, HEPOCN, BE71OC, BE72OC, PEPOCN,
+ & ELV40A (NLV40A), QUGTFR, TESNMN, INUOSC,
+ & IBG40A (NBR40A,NLV40A), IOR40A (NFGTAR)
+
--- /dev/null
+*$ CREATE SNNUCM.ADD
+*COPY SNNUCM
+*
+*=== snnucm ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* SuperNova NeUtrino CoMmon: *
+* *
+* Created on 29 february 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 21-feb-01 by Alfredo Ferrari *
+* *
+* *
+* Tmpsnn(i) = temperature (MeV) of the emission spectrum for the *
+* i_th neutrino specie *
+* Alpsnn(i) = alpha term of the emission spectrum for the *
+* i_th neutrino specie *
+* Fnrsnn(i) = normalization factor for the emission spectrum for *
+* the i_th neutrino specie *
+* Ftsnnu(i) = total flux (at 10 kpc) for the emission spectrum *
+* for the i_th neutrino specie *
+* Rtsnnu(i) = total rate (ev/kTon at 10 kpc) for the i_th *
+* neutrino specie *
+* Resnnu(i) = electron elastic rate (ev/kTon at 10 kpc) for *
+* the i_th neutrino specie *
+* Rgsnnu(i) = Gamow-Teller rate (ev/kTon at 10 kpc) for the i_th *
+* neutrino specie *
+* Rfsnnu(i) = Fermi rate (ev/kTon at 10 kpc) for the i_th *
+* neutrino specie *
+* Weisnn(i) = weight of the emission spectrum for the i_th *
+* neutrino specie *
+* *
+*----------------------------------------------------------------------*
+*
+* Number of energy bins for elastic supernova neutrino scattering
+ PARAMETER ( NSNESC = 3000 )
+* Number of energy bins for Gamow-Teller and Fermi supernova neutrino
+* absorptions
+ PARAMETER ( NSNGTF = 1200 )
+* Energy step for elastic supernova neutrino scattering
+ PARAMETER ( DESNES = 0.00002D+00 )
+* Energy step for Gamow-Teller and Fermi supernova neutrino
+* absorptions
+ PARAMETER ( DESNGF = 0.00005D+00 )
+ COMMON / SNNUCM / TMPSNN (6), ALPSNN (6), FNRSNN (6), FTSNNU (6),
+ & RTSNNU (6), RESNNU (6), RGSNNU (6), RFSNNU (6),
+ & WEISNN (6),
+ & SPESSN (0:NSNESC,6), CUESSN (0:NSNESC,6),
+ & SPGTSN (0:NSNGTF,6), CUGTSN (0:NSNGTF,6),
+ & SPFRSN (0:NSNGTF,2), CUFRSN (0:NSNGTF,2)
+
+
--- /dev/null
+*$ CREATE SOUEVT.ADD
+*COPY SOUEVT
+*
+*=== Souevt ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* SOUrce EVenT: *
+* *
+* Created on 14 november 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 16-mar-98 by Alfredo Ferrari *
+* *
+* X,Y,Zsoevt(i) = position of the i_th source particle *
+* TX,Y,Zsoev(i) = direction of the i_th source particle *
+* Wtsoev(i) = weight of the i_th source particle *
+* Pmsoev(i) = momentum of the i_th source particle *
+* Tksoev(i) = kin. energy of the i_th source particle *
+* Agsoev(i) = age of the i_th source particle *
+* Aksoev(i) = Kaon ampl. of the i_th source particle *
+* Ussoev(j,i) = user var. of the i_th source particle *
+* Ijsoev(i) = identity of the i_th source particle *
+* Nrsoev(i) = region of the i_th source particle *
+* Nlsoev(i) = lattice of the i_th source particle *
+* Losoev(i) = user flag of the i_th source particle *
+* Iusoev(j,i) = user flags of the i_th source particle *
+* Npsoev = number of the source particles *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXSOEV = 100 )
+ COMMON / SOUEVT / XSOEVT (MXSOEV), YSOEVT (MXSOEV),
+ & ZSOEVT (MXSOEV), TXSOEV (MXSOEV),
+ & TYSOEV (MXSOEV), TZSOEV (MXSOEV),
+ & TXPSOV (MXSOEV), TYPSOV (MXSOEV),
+ & TZPSOV (MXSOEV), WTSOEV (MXSOEV),
+ & PMSOEV (MXSOEV), TKSOEV (MXSOEV),
+ & AGSOEV (MXSOEV), AKSOEV (MXSOEV),
+ & USSOEV (MKBMX1,MXSOEV),
+ & IJSOEV (MXSOEV), NRSOEV (MXSOEV),
+ & NLSOEV (MXSOEV), LOSOEV (MXSOEV),
+ & IUSOEV (MKBMX2,MXSOEV), NPSOEV
+
--- /dev/null
+*$ CREATE SPCSMP.ADD
+*COPY SPCSMP
+*
+*=== spcsmp ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* SPeCtrum SaMPling: *
+* *
+* Created on 29 may 1996 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 05-feb-99 by Alfredo Ferrari *
+* *
+* Description of variables: *
+* *
+* Xspcsm(it) = cross section used for spectrum sampling on indi- *
+* vidual nucleons (1=p,2=n) *
+* Lspcsm = logical flag indicating whether spectrum sampling *
+* is activated *
+* Lspcrs = logical flag indicating that spectrum re-sampling *
+* is requested *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LSPCSM, LSPCRS
+*
+ COMMON / SPCSMP / XSPCSM (2), LSPCSM, LSPCRS
+
--- /dev/null
+*$ CREATE SPEEDE.ADD
+*COPY SPEEDE
+*
+*=== speede ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 07 november 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 07-nov-90 by Alfredo Ferrari *
+* *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NBNSPD = 150 )
+ PARAMETER ( EMNSPD = 1.0 D-04 )
+ PARAMETER ( EMXSPD = 5.0 D+00 )
+* This is the natural logarithm of the previos one less something
+* PARAMETER ( ELMXSP = 1.609437912434100 D+00 )
+ PARAMETER ( ELMXSP = 1.609437912434100 D+00 - 10.D+00 * ANGLGB )
+*
+ COMMON / SPEEDE / SPEED1 (0:NBNSPD), SPEED0 (0:NBNSPD),
+ & ESPEE1, ESPEE0
+
--- /dev/null
+*$ CREATE SPLIT.ADD
+*COPY SPLIT
+*
+*=== split ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Created on 10 december 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 17-may-95 by Alfredo Ferrari *
+* *
+* Actual common name changed from SPLIT to SPLTCM on 22-jan-01 *
+* to get around a bug in the Linux compiler/linker *
+* *
+* This is the original common split of Hadrin *
+* *
+* Included in the following routines: *
+* *
+* CALUMV *
+* DATESH *
+* HADRIV *
+* RCHANV *
+* BLKDT3 *
+* HADDEN *
+* CALUMO *
+* RCHANW *
+* *
+*----------------------------------------------------------------------*
+*
+* There should be some safety in this dimension, it was originally
+* 460 = K2 (94) + 153 = 307 + 153:
+ PARAMETER ( IDMXSP = IDMXDC / 2 + 170 )
+ COMMON / SPLTCM / WT (-6:IDMXSP), NZK (-6:IDMXSP,3)
+ COMMON / NAMSDC / ANAME (-6:MXPABL), ZKNAME (-6:IDMXSP)
+ CHARACTER*8 ANAME, ZKNAME
+
--- /dev/null
+*$ CREATE STACK.ADD
+*COPY STACK
+*
+*=== stack ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* include file: stack copy created 26/11/86 by p*
+* *
+* changes: last change on 16-sep-1999 by Alfredo Ferrari *
+* INFN, Milan *
+* *
+* included in the following subroutines or functions: not updated *
+* *
+* AEMSHH *
+* BEAMDV *
+* BEAMEM *
+* BEAMSO *
+* DELTHR *
+* DPLSTK *
+* EPILOG *
+* FEEDER *
+* FLNWST *
+* FLUKAM *
+* GEOFAR *
+* GEOMTR *
+* KASHEA *
+* KASKAD *
+* KASNEU *
+* KASRAY *
+* MGDRAW *
+* PPHNEV *
+* SOEVSV *
+* SOURCE *
+* STCKAD *
+* STUPRF *
+* ZEROIN *
+* *
+* description of the common block(s) and variable(s) *
+* *
+* /stack/ stack for the primaries *
+* wt = weight of the particle *
+* pmom = laboratory momentum of the particle in GeV/c *
+* tke = laboratory kinetic energy of the particle in GeV *
+* xa = x-coordinate of the particle *
+* ya = y-coordinate of the particle *
+* za = z-coordinate of the particle *
+* tx = direction cosine of the particle *
+* with respect to x-axis *
+* ty = direction cosine of the particle *
+* with respect to y-axis *
+* tz = direction cosine of the particle *
+* with respect to z-axis *
+* txpol = direction cosine of the particle polarization *
+* typol = direction cosine of the particle polarization *
+* tzpol = direction cosine of the particle polarization *
+* txnor = direction cosine of a (possible) surface normal *
+* tynor = direction cosine of a (possible) surface normal *
+* tznor = direction cosine of a (possible) surface normal *
+* dfnear = distance to the nearest boundary *
+* agestk = age of the particle (seconds) *
+* aknshr = Kshort component of K0/K0bar *
+* raddly = delay (s) in production wrt the nominal primary "0" *
+* time for particle produced in radioactive decays *
+* (i.e. those coming from decays of daughter isotopes) *
+* sparek = spare real variables available for K.W.Burn *
+* ispark = spare integer variables available for K.W.Burn *
+* ilo = type of the particle (see btype in /paprop/) *
+* igroup = energy group for low energy neutrons *
+* lo = generation of the particle *
+* louse = user flag *
+* nreg = number of the region of the particle *
+* nlattc = number of the lattice cell of the particle *
+* nhspnt = pointer to the history object (Geant4 geometry) *
+* nevent = number of the event which created the particle *
+* numpar = particle number *
+* lraddc = flag for particles generated in radioactive decyas *
+* nparma = biggest particle number encountered *
+* mstack = size of the stack *
+* lstmax = highest value of the stack pointer encountered *
+* in the run *
+* lstack = stack pointer *
+* lstaol = stack pointer of the last processed particle *
+* igroun = energy group number of the last processed particle *
+* if it is a low energy neutron *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /STACK/
+ & XA (0:MFSTCK), YA (0:MFSTCK), ZA (0:MFSTCK),
+ & TX (0:MFSTCK), TY (0:MFSTCK), TZ (0:MFSTCK),
+ & TXPOL (0:MFSTCK), TYPOL (0:MFSTCK), TZPOL (0:MFSTCK),
+ & TXNOR (0:MFSTCK), TYNOR (0:MFSTCK), TZNOR (0:MFSTCK),
+ & WT (0:MFSTCK), PMOM (0:MFSTCK), TKE (0:MFSTCK),
+ & DFNEAR (0:MFSTCK), AGESTK (0:MFSTCK), AKNSHR (0:MFSTCK),
+ & RADDLY (0:MFSTCK), SPAREK (MKBMX1,0:MFSTCK),
+ & ISPARK (MKBMX2,0:MFSTCK), ILO (0:MFSTCK),
+ & IGROUP (0:MFSTCK), LO (0:MFSTCK), LOUSE (0:MFSTCK),
+ & NREG (0:MFSTCK), NLATTC (0:MFSTCK), NHSPNT (0:MFSTCK),
+ & NEVENT (0:MFSTCK), NUMPAR (0:MFSTCK), LRADDC (0:MFSTCK),
+ & NPARMA, MSTACK, LSTMAX, LSTACK, LSTAOL, IGROUN
+ LOGICAL LRADDC
+
--- /dev/null
+*$ CREATE STARS.ADD
+*COPY STARS
+*
+*=== stars ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* STARS common for FLUKA: *
+* *
+* Version for FLUKA90/99/... of the original one of FLUKA86 *
+* *
+* *
+* Created on 15 may 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 07-oct-99 by Alfredo Ferrari *
+* *
+* *
+* description of the common variable(s): *
+* *
+* Ntstar = total number of stars generated (modulo 1000000000) *
+* Neulow = total number of low energy neutron interactions *
+* (modulo 1000000000) *
+* Numdec = total number of decays (modulo 1000000000) *
+* Mtstar = total number of stars generated / 100000000 *
+* Meulow = total number of low energy neutron interactions *
+* / 1000000000 *
+* Mumdec = total number of decays (modulo 1000000000) *
+* Wstars = total weight of the stars generated *
+* Wneulw = total weight of the low energy neutron interactions *
+* Westar = weight of the stars generated by *
+* different particle types *
+* Westop = total weight of the particles stopped *
+* Wstop = weight of particles of different types stopped *
+* Weisec = total weight of the secondaries created *
+* Weifis = total weight of high energy fissions *
+* Weipri = total weight of the primaries handled *
+* Edi = deposited energy *
+* Edi(1) = by ionisation *
+* Edi(2) = by pi-zeros and/or EM cascade *
+* Edi(3) = by nuclear excitation (or nuclear recoil *
+* and heavies if the evaporation module is *
+* activated) *
+* Edi(4) = by stopped particles *
+* Edi(5) = energy leaving the system *
+* Edi(6) = energy carried by discarded particles *
+* Edi(7) = by residual excitation energy (only if the *
+* evaporation module is activated) *
+* Edi(8) = by low energy neutrons (kerma due to low *
+* energy neutrons transport is in effect) *
+* Edi(9) = energy carried by time killed particles *
+* Edi(10)= energy wasted for nuclear binding energy *
+* effects for E > 50 MeV *
+* Edi(11)= energy wasted for nuclear binding energy *
+* effects for low energy neutrons *
+* Wdec = weight of the particles decayed *
+* Wdau = weight of the decay-products *
+* Wtkll = weight of the time-killed particles *
+* Wtdec = total weight of the particles decayed *
+* Wtdau = total weight of the decay products *
+* Wttkll = total weight of the time killed particles *
+* Wlwnsc = weight of the low energy neutrons interaction secon- *
+* daries *
+* Wdecct = weight of the particles decayed for which a c tau *
+* scoring is done *
+* Deccts = decay c tau scoring *
+*----------------------------------------------------------------------*
+*
+ COMMON / STARS /
+ & WESTAR (-6:NALLWP), WSTOP (-6:NALLWP),
+ & WDAU (-6:NALLWP), WTKLL (-6:NALLWP),
+ & WDEC (-6:NALLWP), WEIFIS (-6:NALLWP),
+ & DECCTS (-6:NALLWP), WDECCT (-6:NALLWP),
+ & WEISEC (-6:NALLWP+12), WLWNSC (4), EDI (11),
+ & WNEULW, WESTOP, WSTARS, WEIPRI, WTDEC , WTDAU ,
+ & WTTKLL, NUMDEC, NTSTAR, NEULOW, MUMDEC, MTSTAR,
+ & MEULOW
+
--- /dev/null
+*$ CREATE STCKA.ADD
+*COPY STCKA
+
+*----------------------------------------------------------------------*
+* *
+* Stcka: included in *
+* STCKAD *
+* KASKAD *
+* FEEDER *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER (MAXUST=MFSTCK)
+ COMMON /STCKA/ UST(0:MAXUST), LUST(0:MAXUST)
+
--- /dev/null
+*$ CREATE STEPSZ.ADD
+*COPY STEPSZ
+*
+*=== stepsz ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common stepsz for setting the minimum and maximum step sizes on a *
+* a region by region basis: very useful for vacuum re- *
+* gions with magnetic filed and for saving time ( and *
+* accuracy ) with the new plc and lca algorithm in *
+* Emf and Fluka *
+* *
+* W A R N I N G !!!!! At the moment implemented only for *
+* electron and positron transport in Emf and for charged *
+* particles transport in Fluka with the new multiple scat- *
+* tering module!!!!!! *
+* *
+* created by A. Ferrari & P. Sala on 14-jan-1990 *
+* *
+* included in: *
+* bdnopt *
+* fluka (main) *
+* prolog *
+* electr (new version) *
+* *
+* Stepmn = minimum step size (cm) *
+* Stepmx = maximum step size (cm) *
+* Mxxrgn = maximum number of regions *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / STEPSZ / STEPMN ( MXXRGN ), STEPMX ( MXXRGN )
+
--- /dev/null
+*$ CREATE THR.ADD
+*COPY THR
+*
+*=== thr ==============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* THReshold (for FLUKA) common: *
+* *
+* Version for FLUKA92/.../99 of the original one of FLUKA86 *
+* *
+* *
+* Created on 15 may 1990 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 18-may-00 by Alfredo Ferrari *
+* *
+* *
+* description of the variable(s) *
+* *
+* ethr = threshold kinetic energy in GeV for particle prod. *
+* ethrin = threshold kinetic energy in GeV for inelastic inter. *
+* ethrel = threshold kinetic energy in GeV for elastic inter. *
+* ethr = threshold kinetic energy in GeV for particle prod. *
+* fluthr = threshold kinetic energy in GeV for flux scoring *
+* ethstr = threshold kinetic energy in GeV for star scoring *
+* ethrij = threshold kinetic energy in GeV for each kind of *
+* particle *
+* pthrij = threshold momentum in GeV/c for each kind of *
+* particle *
+* pthneu = neutron momentum at the kinetic energy threshold *
+* khvtrn = max. index for full heavy particle transport *
+* llownt = .true. if low energy neutron production and transport*
+* has to be activated *
+* llmncp = .true. if low energy neutron production and transport*
+* with MCNP has to be activated, .false. for default *
+* multigroup transport *
+* lhvtrn = flag for full heavy particle transport *
+* liontr = flag for full transport of ions heavier than alphas *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LLOWNT, LLMCNP, LHVTRN, LIONTR
+ COMMON / THR / ETHR , ETHRIN, ETHREL, FLUTHR, ETHSTR,
+ & ETHRIJ (-6:NALLWP), PTHRIJ (-6:NALLWP), PTHNEU,
+ & KHVTRN, LLOWNT, LLMCNP, LHVTRN, LIONTR
+
--- /dev/null
+*$ CREATE THRESH.ADD
+*COPY THRESH
+*
+*=== Thresh ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Last change on 15-may-99 by Alfredo Ferrari *
+* *
+* Common Thresh for EMF *
+* Mxxmde = Maximum number of media in Emf *
+* Ecutm = Minimum energy to perform Moliere's scattering *
+* Ethnsz = Minimum energy to apply the nuclear size correction *
+* to the Moliere's scattering Moliere's scattering *
+* Please note that the following arrays use the Fluka material index *
+* rather than the EMF one *
+* Upcmpt = Minimum photon energy to perform Compton scattering *
+* Upphel = Minimum photon energy to perform photoelectric *
+* Uppair = Minimum photon energy to perform pair production *
+* Uprlgh = Minimum photon energy to perform Rayleigh scattering *
+* Upphnc = Minimum photon energy to perform photonucl. interac. *
+* Uebrms = Minimum e+/e- energy to perform bremsstrahlung *
+* Uebhml = Minimum e+/e- energy to perform Bhabha/Moller *
+* Ueannh = Minimum e+ energy to perform annihilation *
+* Uephnc = Minimum e+/e- energy to perform photonucl. interac. *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / THRESH / RMT2 , RMSQ , ESCD2 ,
+ & AP (MXXMDE), AE (MXXMDE),
+ & UP (MXXMDE), UE (MXXMDE),
+ & TE (MXXMDE), THMOLL (MXXMDE),
+ & ECUTM (MXXMDE), ETHNSZ (MXXMDE),
+ & UPCMPT (MXXMDF), UPPHEL (MXXMDF),
+ & UPPAIR (MXXMDF), UPRLGH (MXXMDF),
+ & UPPHNC (MXXMDF), UEBRMS (MXXMDF),
+ & UEBHML (MXXMDF), UEANNH (MXXMDF),
+ & UEPHNC (MXXMDF)
+
--- /dev/null
+*$ CREATE TMPNUC.ADD
+*COPY TMPNUC
+*
+*=== tmpnuc ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* TeMPorary storage for NUClear interaction secondaries: *
+* *
+* Created on 25 june 1995 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 08-sep-00 by Alfredo Ferrari *
+* *
+* This is just a mirror copy of parnuc common, to temporarily save *
+* secondaries coming out from interactions while waiting for *
+* formation time checks *
+* *
+* Nsavin = number of the stored interaction (=nuscin) *
+* Icycsv = Icycl *
+* Nholsv = Nhole *
+* Iabcsv = Iabcou *
+* Ininsv = Inindx *
+* Nhlxsv = Nhlexp *
+* Rhexsv = Rhoexp *
+* Hlexsv = Holexp *
+* Ekexsv = Ekfexp *
+* Amcrsv = Amcrea *
+* Rhmesv = Rhomem *
+* Ekmesv = Ekfmem *
+* Bimesv = Bimmem *
+* Llacsv = Lllact *
+* Nprnsv = Nprnuc *
+* Iprnsv = Iprnuc *
+* Jprnsv = Jprnuc *
+* Nlvlsv = Nlevel *
+* Nmshsv = Nmshll *
+* Rdscsv = Radscb *
+* *
+* Agtrgt = "age" for materialization of the currently *
+* saved interaction *
+* Crrftp = proton correlation variable for the currently*
+* saved interaction *
+* Crrftn = neutron correlation variable for the currently*
+* saved interaction *
+* Pafrft = hard core radius for the currently saved *
+* interaction *
+* Rhexft = Rhoexi for hard core radius for the currently *
+* saved interaction *
+* Rhcmft = Rhocmp for hard core radius for the currently *
+* saved interaction *
+* Rhmnft = Rhomin for hard core radius for the currently *
+* saved interaction *
+* *
+*----------------------------------------------------------------------*
+*
+ LOGICAL LATATM
+ PARAMETER ( NCTMX = 25 )
+ COMMON / TMPNUC / ENCTM (NCTMX), PNCTM (NCTMX), EKFNTM (NCTMX),
+ & XSTNTM (NCTMX), YSTNTM (NCTMX), ZSTNTM (NCTMX),
+ & PXNCTM (NCTMX), PYNCTM (NCTMX), PZNCTM (NCTMX),
+ & RSTNTM (NCTMX), FRPNTM (NCTMX), CRNNTM (NCTMX),
+ & CRPNTM (NCTMX), BSTNTM (NCTMX), AGNCTM (NCTMX),
+ & TFPNTM (NCTMX), RHNCTM(NCTMX,2), RHEXSV (2),
+ & RDSCSV (3), HLEXSV, EKEXSV, AMCRSV, RHMESV,
+ & EKMESV, BIMESV, AGTRGT, CRRFTP, CRRFTN, PAFRFT,
+ & RHCMFT, RHEXFT, RHMNFT,
+ & KPNCTM (NCTMX), KRFNTM (NCTMX), ILINTM (NCTMX),
+ & INTNTM (NCTMX), ISFNTM (NCTMX), LATATM (NCTMX),
+ & KRSNTM (NCTMX), NPNTM , NSAVIN, ICYCSV, NHOLSV,
+ & IABCSV, NHLXSV, LLACSV, NPRNSV, NLVLSV, ININSV,
+ & JPRNSV (3), IPRNSV (3), NMSHSV (3)
+ COMMON / TMPLEV / RADSCB (3), NMSHLL (3), NLEVEL
+
--- /dev/null
+*$ CREATE TRACKR.ADD
+*COPY TRACKR
+* *
+*=== trackr ===========================================================*
+* *
+*----------------------------------------------------------------------*
+* *
+* TRACKs Recording by Alfredo Ferrari, INFN - Milan *
+* *
+* last change 31 january 2001 by Alfredo Ferrari *
+* *
+* included in : *
+* electr *
+* emfsco *
+* kaskad (new version) *
+* kashea *
+* kasneu *
+* geoden (new version) *
+* mageas *
+* magmov *
+* magnew *
+* move *
+* photon *
+* usrsco *
+* *
+* Ntrack = number of track segments *
+* Mtrack = number of energy deposition events along the track *
+* 0 < i < Ntrack *
+* Xtrack = end x-point of the ith track segment *
+* Ytrack = end y-point of the ith track segment *
+* Ztrack = end z-point of the ith track segment *
+* 1 < i < Ntrack *
+* Ttrack = length of the ith track segment *
+* 1 < j < Mtrack *
+* Dtrack = energy deposition of the jth deposition event *
+* *
+* Jtrack = identity number of the particle *
+* Etrack = total energy of the particle *
+* Ptrack = momentum of the particle (not always defined, if *
+* < 0 must be obtained from Etrack) *
+* Cx,y,ztrck = direction cosines of the current particle *
+* Cx,y,ztrpl = polarization cosines of the current particle *
+* Wtrack = weight of the particle *
+* Wscrng = scoring weight: it can differ from Wtrack if some *
+* biasing techniques are used (for example inelastic *
+* interaction length biasing) *
+* Ctrack = total curved path *
+* Zfftrk = <Z_eff> of the particle *
+* Zfrttk = actual Z_eff of the particle *
+* Atrack = age of the particle *
+* Akshrt = Kshrt amplitude for K0/K0bar *
+* Aklong = Klong amplitude for K0/K0bar *
+* Wninou = neutron algebraic balance of interactions (both *
+* for "high" energy particles and "low" energy *
+* neutrons) *
+* Spausr = user defined spare variables for the current *
+* particle *
+* Sttrck = macroscopic total cross section for low energy *
+* neutron collisions *
+* Satrck = macroscopic absorption cross section for low energy*
+* neutron collisions (it can be negative for Pnab>1) *
+* Ktrack = if > 0 neutron group of the particle (neutron) *
+* *
+* Ntrack > 0, Mtrack > 0 : energy loss distributed along the *
+* track *
+* Ntrack > 0, Mtrack = 0 : no energy loss along the track *
+* Ntrack = 0, Mtrack = 0 : local energy deposition (the *
+* value and the point are not re- *
+* corded in Trackr) *
+* Mmtrck = flag recording the material index for low energy *
+* neutron collisions *
+* Lt1trk = initial lattice cell of the current track *
+* (or lattice cell for a point energy deposition) *
+* Lt2trk = final lattice cell of the current track *
+* Ihspnt = current geometry history pointer (not set if -1) *
+* Ltrack = flag recording the generation number *
+* Llouse = user defined flag for the current particle *
+* Ispusr = user defined spare flags for the current particle *
+* Lfsssc = logical flag for inelastic interactions ending with*
+* fission (used also for low energy neutrons) *
+* *
+*----------------------------------------------------------------------*
+* *
+ PARAMETER ( MXTRCK = 2500 )
+ LOGICAL LFSSSC
+ COMMON / TRACKR / XTRACK ( 0:MXTRCK ), YTRACK ( 0:MXTRCK ),
+ & ZTRACK ( 0:MXTRCK ), TTRACK ( MXTRCK ),
+ & DTRACK ( MXTRCK ), ETRACK, PTRACK, CXTRCK,
+ & CYTRCK, CZTRCK, WTRACK, CXTRPL, CYTRPL, CZTRPL,
+ & ZFFTRK, ZFRTTK, ATRACK, CTRACK, AKSHRT, AKLONG,
+ & WSCRNG, WNINOU, SPAUSR(MKBMX1), STTRCK, SATRCK,
+ & NTRACK, MTRACK, JTRACK, KTRACK, MMTRCK, LT1TRK,
+ & LT2TRK, IHSPNT, LTRACK, LLOUSE, ISPUSR(MKBMX2),
+ & LFSSSC
+ EQUIVALENCE ( SPAUSE, SPAUSR (1) )
+ EQUIVALENCE ( ISPUSE, ISPUSR (1) )
+
--- /dev/null
+*$ CREATE UNRTSF.ADD
+*COPY UNRTSF
+*
+*=== Unrtsf ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* UNdo RoTation Statement Functions: *
+* *
+* Created on 31 january 1998 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 31-mar-98 by Alfredo Ferrari *
+* *
+* Rotate ux,y,z to the frame where the original z *
+* axis has components (csph0 x snth0, snph0 x snth0, csth0) *
+* *
+*----------------------------------------------------------------------*
+*
+ UNDOXR ( UX, UY, UZ, SNPH0, CSPH0, SNTH0, CSTH0 ) =
+ & UX * CSPH0 * CSTH0 - UY * SNPH0 + UZ * CSPH0 * SNTH0
+ UNDOYR ( UX, UY, UZ, SNPH0, CSPH0, SNTH0, CSTH0 ) =
+ & UX * SNPH0 * CSTH0 + UY * CSPH0 + UZ * SNPH0 * SNTH0
+ UNDOZR ( UX, UY, UZ, SNPH0, CSPH0, SNTH0, CSTH0 ) =
+ & - UX * SNTH0 + UZ * CSTH0
+
--- /dev/null
+*$ CREATE UPHIIN.ADD
+*COPY UPHIIN
+*----------------------------------------------------------------------*
+* *
+* Common Uphiin for EGS4 *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /UPHIIN/ SINC0, SINC1, SIN0(1002), SIN1(1002)
+
--- /dev/null
+*$ CREATE UPHIOT.ADD
+*COPY UPHIOT
+*----------------------------------------------------------------------*
+* *
+* Common Uphiot for EGS4 *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /UPHIOT/ THETA, SINTHE,COSTHE,SINPHI, COSPHI,PI,TWOPI,PI5D2
+
--- /dev/null
+*$ CREATE USEFUL.ADD
+*COPY USEFUL
+*----------------------------------------------------------------------*
+* *
+* Common Useful for EMF *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON /USEFUL/ RM, MEDIUM, MEDOLD, IBLOBE
+
--- /dev/null
+*$ CREATE USER.ADD
+*COPY USER
+*
+*=== user =============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common User for EMF *
+* *
+* Last change: A. Ferrari 3-24-94 *
+* *
+* Lemagn = flag for magnetic field (set by Emfgeo) *
+* *
+* Xemf = x-coordinate of the end point in the magnetic field *
+* Yemf = y-coordinate of the end point in the magnetic field *
+* Zemf = z-coordinate of the end point in the magnetic field *
+* *
+* Uemf = u-cosine of the end point in the magnetic field *
+* Vemf = v-cosine of the end point in the magnetic field *
+* Wemf = w-cosine of the end point in the magnetic field *
+* *
+* dedxem = current de/dx for electrons/positrons *
+* demelf = energy loss/gain in EM fields *
+* *
+* Intrck = flag for tracking initialization: it must be set to *
+* zero every time the trajectory direction has changed *
+* from the previous call to Emfgeo *
+* *
+*----------------------------------------------------------------------*
+*
+ COMMON / USER / XEMF , YEMF , ZEMF , UEMF , VEMF , WEMF ,
+ & DEDXEM, DEMELF, LEMAGN, INTRCK
+ LOGICAL LEMAGN
+
--- /dev/null
+*$ CREATE USPLC.ADD
+*COPY USPLC
+*
+*=== usplc ============================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Common Usplc for the new plc and lca correction in Emf and Fluka *
+* created by A. Ferrari & P. Sala on 23-oct-1989 *
+* *
+* Last change on 05 september 1997 by Alfredo Ferrari *
+* *
+* included in: *
+* bdmuls *
+* electr (new version) *
+* emsnsc *
+* fixtmx (new version) *
+* fluka *
+* hmsnsc *
+* mulemf *
+* mulhad *
+* omegae *
+* stepop *
+* tmxmol *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( NBUCIN = 300 )
+ PARAMETER ( PISQRD = 9.8696044010893585D+00 )
+ PARAMETER ( AP0782 = 7.8152099123863686D-02 )
+ PARAMETER ( AP158 = 0.1583818043657366D+00 )
+*
+*----------------------------------------------------------------------*
+* The following number should be e, but it was slightly increased *
+* to be sure to get blc > 1 in the scattering routine *
+*----------------------------------------------------------------------*
+*
+* PARAMETER ( A2P72 = 2.718281828459045 D+00 )
+ PARAMETER ( A2P72 = 2.720000000000000 D+00 )
+ PARAMETER ( A1P49 = 1.487919357153952 D+00 )
+ PARAMETER ( A3P18 = 3.181183579549088 D+00 )
+ PARAMETER ( A1P79 = 1.787977237735012 D+00 )
+ PARAMETER ( A4P27 = 4.266960033369870 D+00 )
+ PARAMETER ( A1P67 = 1.672042454693153 D+00 )
+ PARAMETER ( A1P56 = 1.557182904603876 D+00 )
+ PARAMETER ( A3P71 = 3.70518458839024 D+00 )
+ PARAMETER ( A3P57 = 3.56952768907613 D+00 )
+ PARAMETER ( A7P70 = 7.69852999760397 D+00 )
+ PARAMETER ( A11P2 = 11.2277672735772 D+00 )
+ PARAMETER ( A3P32 = 3.32238673227802 D+00 )
+ PARAMETER ( A3P81 = 3.81210471399911 D+00 )
+*
+ PARAMETER ( B4P52 = A3P18 - A7P70 )
+ PARAMETER ( B6P96 = A4P27 - A11P2 )
+ PARAMETER ( A2P22 = A3P71 - A1P49 )
+ PARAMETER ( A1P78 = A3P57 - A1P79 )
+ PARAMETER ( A1P65 = A3P32 - A1P67 )
+ PARAMETER ( A2P25 = A3P81 - A1P56 )
+*
+ PARAMETER ( BUC1P5 = 1.5D+00 )
+ PARAMETER ( OME1P5 = 2.987792713558710D+00 )
+ PARAMETER ( BLC1P5 = 1.094534891891836D+00 )
+ PARAMETER ( BUC2P0 = 2.0D+00 )
+ PARAMETER ( OME2P0 = 3.694528049465325D+00 )
+ PARAMETER ( BLC2P0 = 1.306852819440055D+00 )
+ PARAMETER ( BUC3P0 = 3.0D+00 )
+ PARAMETER ( OME3P0 = 6.695178974395889D+00 )
+ PARAMETER ( BLC3P0 = 1.901387711331890D+00 )
+ PARAMETER ( BUC4P0 = 4.0D+00 )
+ PARAMETER ( OME4P0 = 13.64953750828606D+00 )
+ PARAMETER ( BLC4P0 = 2.613705638880109D+00 )
+ PARAMETER ( BUC5P0 = 5.0D+00 )
+ PARAMETER ( OME5P0 = 29.68263182051532D+00 )
+ PARAMETER ( BLC5P0 = 3.390562087565900D+00 )
+* The following 4 parameters are used for the approximation of the
+* correction to the Moliere single scattering cross section
+ PARAMETER ( NCORIN = 50 )
+ PARAMETER ( DBETAC = 2.000000000000000D-02 )
+ PARAMETER ( BETG35 = 9.583148474999099D-01 )
+ PARAMETER ( BE2G35 = 9.183673469387755D-01 )
+*
+*----------------------------------------------------------------------*
+* *
+* Now the parameters defining the minimum and maximum step conditions *
+* *
+* Atmin is the minimum omega0 allowed for using the Moliere's *
+* theory: at the moment it is set to A2p72 for the egsN(ew) *
+* version and to Ome1p5 for the egsX version *
+* Btmin is the upper case B corresponding to omega0 = Atmin: at *
+* the moment it is set = 1 for the egsN(ew) version and to *
+* Buc1p5 for the egsX version *
+* Atmax is the maximum allowed value for the chi-sub-c**2 * B, at *
+* the moment it is set to 1 ( Bethe criterion ) for the *
+* egsN(ew) version and to 1.8 for the egsX version. *
+* Atmnm is the minimum "meaningful" omega0, it is used only in *
+* egsX and is set to Ome3p0 *
+* Btmnm is the upper case B corresponding to omega0 = Atmnm, it is *
+* used only in egsX and is set to Buc3p0 *
+* Atmxa is the maximum "acceptable" value for the chi-sub-c**2 * B,*
+* it is used only in egsX and at the moment it is set to 1 *
+* Thmx0 is the reduced angle besides which the distribution can be *
+* considered = to the single scattering one, for B = 1. It *
+* set to 5 *
+* Thmxh is 8 ( Thmx0**2 - 2 ) *
+* Ldomrn logical flag for randomly distributed domega sampling *
+* Leocrr logical flag for correlated randomly distributed eta and *
+* domega sampling *
+* Laclrg logical flag for using a modified expression for large *
+* a_c's *
+* Mesnsc number of allowed single scatterings for e+/e- *
+* Mhsnsc number of allowed single scatterings for hadrons *
+* and muons *
+* Lesnsc logical flag for single scattering for e+/e- *
+* Lhsnsc logical flag for single scattering for hadrons *
+* and muons *
+* Leplgn logical flag for the "polygonal" approach for e+/e- *
+* Lhplgn logical flag for the "polygonal" approach for hadrons *
+* and muons *
+* *
+*----------------------------------------------------------------------*
+*
+* PARAMETER ( ATMIN = A2P72 )
+ PARAMETER ( ATMIN = OME1P5 )
+* PARAMETER ( BTMIN = 1.D+00 )
+ PARAMETER ( BTMIN = BUC1P5 )
+* PARAMETER ( ATMAX = 1.D+00 )
+ PARAMETER ( ATMAX = 1.8D+0 )
+ PARAMETER ( ATMNM = OME3P0 )
+ PARAMETER ( BTMNM = BUC3P0 )
+ PARAMETER ( ATMXA = 1.D+00 )
+ PARAMETER ( THMX0 = 5.D+00 )
+ PARAMETER ( THMXH = 8.D+00 * ( THMX0 * THMX0 - 2.D+00 ) )
+ PARAMETER ( TMSDFL = 20.D+00 * OME5P0 / ATMNM )
+*
+ PARAMETER ( DLTBLC = -0.4319456220014430D+00 )
+ LOGICAL LESNSC, LESNTH, LHSNSC, LHSNTH, LEXMCS, LHXMCS, LEPLGN,
+ & LHPLGN, LDOMRN, LEOCRR, LACLRG
+*
+ COMMON / USPLC / BUCINT ( 0:NBUCIN ), SINDOM ( 0:NBUCIN ),
+ & TAU1NT ( 0:NBUCIN ), TAU2NT ( 0:NBUCIN ),
+ & TAU3NT ( 0:NBUCIN ), P0UINT ( 0:NBUCIN ),
+ & P1UINT ( 0:NBUCIN ), P2UINT ( 0:NBUCIN ),
+ & ETRNCR ( 0:NCORIN ), DBLC, DBLCI, BLCMAX,
+ & OMEMNM, TMSOPT, ATMNE , BTMNE , ATMXE , ATMNH ,
+ & BTMNH , ATMXH , JFC0RH, JP1CFL, JP2CFL, JP22CF,
+ & IOPSNS, LDOMRN, LEOCRR, LACLRG, LESNSC, LESNTH,
+ & MESNSC, LHSNSC, LHSNTH, MHSNSC, LEXMCS, LHXMCS,
+ & LEPLGN, LHPLGN
+
--- /dev/null
+*$ CREATE USRBDX.ADD
+*COPY USRBDX
+*
+*=== usrbdx ==========================================================*
+*
+*---------------------------------------------------------------------*
+* Module USRBDX: *
+* A. Ferrari : user defined boundary crossing scoring *
+* Last change A. Ferrari 16-may-1990 *
+* *
+* *
+* Up to MXUSBX user defined bdrx are allowed *
+* lusbdx = logical flag, .true. if at least 1 user defined *
+* bdrx is used *
+* nusrbx = number of user defined bdrx used *
+* itusbx = type of binning: 1 = linear energy, linear angle*
+* 2 = linear energy, logarithmic angle, -1 = loga-*
+* rithmic energy, linear angle, -2 = logarithmic *
+* energy, logarithmic angle *
+* idusbx = distribution to be scored: the usual values are *
+* allowed *
+* nr1usx = first region *
+* nr2usx = second region *
+* ausbdx = area (cm**2) of the detector *
+* lwusbx = one way if false, two ways if true *
+* lfusbx = current if false, fluence if true *
+* llnusx = no low energy neutron scoring if false, yes if *
+* true *
+* titusx = bdrx name *
+* ipusbx = logical unit to print the results on: formatted *
+* if > 0, unformatted if < 0 *
+* igmusx = maximum low energy neutron group to be scored *
+* kbusbx = initial location in blank common of the consi- *
+* dered bdrx (real*8 address) *
+* I T I S F O R A D D R E S S OF 1 !!!!! *
+* nebxbn = number of energy intervals *
+* nabxbn = number of angular intervals *
+* ebxlow/ebxhgh = minimum and maximum energies *
+* abxlow/abxhgh = minimum and maximum angle (steradian) *
+* debxbn = energy bin width *
+* dabxbn = angular (steradian) bin width *
+* *
+*---------------------------------------------------------------------*
+*
+ PARAMETER ( MXUSBX = 1100 )
+ LOGICAL LUSBDX, LFUSBX, LWUSBX, LLNUSX
+ CHARACTER*10 TITUSX
+ COMMON /USRBX/ EBXLOW(MXUSBX), EBXHGH(MXUSBX), ABXLOW(MXUSBX),
+ & ABXHGH(MXUSBX), DEBXBN(MXUSBX), DABXBN(MXUSBX),
+ & AUSBDX(MXUSBX),
+ & NEBXBN(MXUSBX), NABXBN(MXUSBX), NR1USX(MXUSBX),
+ & NR2USX(MXUSBX), ITUSBX(MXUSBX), IDUSBX(MXUSBX),
+ & KBUSBX(MXUSBX), IPUSBX(MXUSBX), IGMUSX(MXUSBX),
+ & LFUSBX(MXUSBX), LWUSBX(MXUSBX), LLNUSX(MXUSBX),
+ & NUSRBX, LUSBDX
+ COMMON /USXCH/ TITUSX(MXUSBX)
+
--- /dev/null
+*$ CREATE USRBIN.ADD
+*COPY USRBIN
+*
+*=== usrbin ==========================================================*
+*
+*---------------------------------------------------------------------*
+* Module USRBIN: *
+* A. Ferrari & A. Fasso': user defined binnings *
+* *
+* Last change A. Ferrari 12-mar-2000 *
+* *
+* *
+* Up to MXUSBN user defined binnings are allowed *
+* lusbin = logical flag, .true. if at least 1 user defined *
+* binning is used *
+* lusevt = logical flag, .true. if at least 1 user defined *
+* binning event by event is used *
+* lustkb = logical flag, .true. if at least 1 user defined *
+* track-length binning is used. Track length bin- *
+* ning are recognized as binnings where accurate *
+* deposition along the track is requested but *
+* for generalized particles other than 208/211 *
+* nusrbn = number of user defined binnings used *
+* itusbn = type of binning: 0 = cartesian, .ne. 0 = RZ *
+* idusbn = distribution to be scored: the usual values are *
+* allowed. *
+* titusb = binning name *
+* ipusbn = logical unit to print the results on: formatted *
+* if > 0, unformatted if < 0 *
+* kbusbn = initial location in blank common of the consi- *
+* dered binning (for index 1, real*8 address for *
+* lsngbn = .false., real*4 address for lsngbn *
+* = .true.) *
+* nxbin = number of x (r for RZ) intervals *
+* nybin = number of y (1 for RZ) intervals *
+* nzbin = number of z intervals *
+* xlow/high = minimum and maximum x (r for R-Phi-Z) *
+* ylow/high = minimum and maximum y (phi for R-Phi-Z) *
+* zlow/high = minimum and maximum z *
+* dxusbn = x (r) bin width *
+* dyusbn = y bin width *
+* dzusbn = z bin width *
+* tcusbn = time cut-off (seconds) for this binning *
+* bkusbn = 1st Birk's law parameter for this binning *
+* (meaningful only for energy scoring) *
+* b2usbn = 2nd Birk's law parameter for this binning *
+* (meaningful only for energy scoring) *
+* xaxusb = x-axis offset for R-Z binning (not possible for *
+* R-Phi-Z), just for back-compatibility, now it *
+* should be done through rototraslations *
+* yaxusb = y-axis offset for R-Z binning (not possible for *
+* R-Phi-Z), just for back-compatibility, now it *
+* should be done through rototraslations *
+* levtbn = logical flag for binning to be printed at the *
+* end of each event only *
+* lntzer = logical flag for printing only non zero cells *
+* ltrkbn = logical flag for flagging track-length binnings *
+* lsngbn = logical flag for single precision storing of *
+* data *
+* lrmabn = logical flag for reduced memory allocation of *
+* data *
+* narmbn = number of allocated cells for reduced memory *
+* allocation binnings *
+* nusdbn = number of used cells for reduced memory alloca- *
+* tion binnings *
+* kausbn = initial location in blank common of cell indeces*
+* for a reduced memory allocation binning (for *
+* index 1, integer*4 address) *
+* krtnbn = flag of a possible pre-defined rotation (if >0) *
+* to be applied to the binnings before scoring *
+* *
+*---------------------------------------------------------------------*
+*
+ PARAMETER ( MXUSBN = 100 )
+ LOGICAL LUSBIN, LEVTBN, LNTZER, LUSEVT, LUSTKB, LTRKBN, LSNGBN,
+ & LRMABN
+ CHARACTER*10 TITUSB
+ COMMON /USRBN/ XLOW (MXUSBN), XHIGH (MXUSBN), YLOW (MXUSBN),
+ & YHIGH (MXUSBN), ZLOW (MXUSBN), ZHIGH (MXUSBN),
+ & DXUSBN(MXUSBN), DYUSBN(MXUSBN), DZUSBN(MXUSBN),
+ & TCUSBN(MXUSBN), BKUSBN(MXUSBN), B2USBN(MXUSBN),
+ & XAXUSB(MXUSBN), YAXUSB(MXUSBN),
+ & NXBIN (MXUSBN), NYBIN (MXUSBN), NZBIN (MXUSBN),
+ & ITUSBN(MXUSBN), IDUSBN(MXUSBN), KBUSBN(MXUSBN),
+ & KAUSBN(MXUSBN), IPUSBN(MXUSBN), KRTNBN(MXUSBN),
+ & NARMBN(MXUSBN), NUSDBN(MXUSBN), LEVTBN(MXUSBN),
+ & LNTZER(MXUSBN), LSNGBN(MXUSBN), LTRKBN(MXUSBN),
+ & LRMABN(MXUSBN), NUSRBN, LUSBIN, LUSEVT, LUSTKB
+ COMMON /USRCH/ TITUSB(MXUSBN)
+
--- /dev/null
+*$ CREATE USRSNC.ADD
+*COPY USRSNC
+*
+*=== usrsnc ==========================================================*
+*
+*---------------------------------------------------------------------*
+* Module usrsnc: *
+* A. Ferrari : user defined residual nuclei scoring *
+* estimators *
+* Last change A. Ferrari 22-jul-1994 *
+* *
+* *
+* Up to MXRSNC user defined track or coll are allowed *
+* lursnc = logical flag, .true. if at least 1 user defined *
+* residual nuclei scoring is activated *
+* nursnc = number of residual nuclei scoring *
+* izrhgh = maximum Z of the scoring (minimum Z: 1) *
+* imrhgh = maximum M=N-Z-NMZ_min of the scoring *
+* (minimum M: 1), please note: *
+* N-Z = M + NMZ_min, N = M + Z + NMZ_min *
+* itursn = type of binning: 1 = spallation products, *
+* 2 = low energy neutrons products, *
+* 3 = all products *
+* nrursn = region *
+* vursnc = volume (cm**3) of the detector *
+* tiursn = scoring name *
+* ipursn = logical unit to print the results on: formatted *
+* if > 0, unformatted if < 0 *
+* kbursn = initial location in blank common of the consi- *
+* dered residual nuclei scoring (real*8 address) *
+* I T I S F O R A D D R E S S OF 0 !!!!! *
+* *
+*---------------------------------------------------------------------*
+*
+ PARAMETER ( MXRSNC = 400 )
+ PARAMETER ( NMZMIN = -5 )
+ LOGICAL LURSNC
+ CHARACTER*10 TIURSN
+ COMMON /USRSNC/ VURSNC(MXRSNC), IZRHGH(MXRSNC), IMRHGH(MXRSNC),
+ & NRURSN(MXRSNC), ITURSN(MXRSNC), KBURSN(MXRSNC),
+ & IPURSN(MXRSNC), NURSNC, LURSNC
+ COMMON /USRSCH/ TIURSN(MXRSNC)
+
--- /dev/null
+*$ CREATE USRTRC.ADD
+*COPY USRTRC
+*
+*=== usrtrc ==========================================================*
+*
+*---------------------------------------------------------------------*
+* Module usrtrc: *
+* A. Ferrari : user defined track-length & collision density *
+* estimators *
+* Last change A. Ferrari 16-jan-1991 *
+* *
+* *
+* Up to MXUSTC user defined track or coll are allowed *
+* lusrtc = logical flag, .true. if at least 1 user defined *
+* track or coll is used *
+* lustrk = logical flag, .true. if at least 1 user defined *
+* track is used *
+* luscll = logical flag, .true. if at least 1 user defined *
+* coll is used *
+* nusrtc = number of user defined track & coll used *
+* nustrk = number of user defined track used *
+* nuscll = number of user defined coll used *
+* iustrk = list of track-length estimators *
+* iuscll = list of collision density track estimators *
+* 2 = linear energy, coll, -1 = logarithmic ener- *
+* gy, track, -2 = logarithmic energy, coll *
+* itustc = type of binning: 1 = linear energy, track *
+* 2 = linear energy, coll, -1 = logarithmic ener- *
+* gy, track, -2 = logarithmic energy, coll *
+* idustc = distribution to be scored: the usual values are *
+* allowed *
+* nrustc = region *
+* vusrtc = volume (cm**3) of the detector *
+* llnutc = no low energy neutron scoring if false, yes if *
+* true *
+* titutc = track or coll name *
+* ipustc = logical unit to print the results on: formatted *
+* if > 0, unformatted if < 0 *
+* igmutc = maximum low energy neutron group to be scored *
+* kbustc = initial location in blank common of the consi- *
+* dered track or coll (real*8 address) *
+* I T I S F O R A D D R E S S OF 1 !!!!! *
+* netcbn = number of energy intervals *
+* etclow/etchgh = minimum and maximum energies *
+* detcbn = energy bin width *
+* *
+*---------------------------------------------------------------------*
+*
+ PARAMETER ( MXUSTC = 400 )
+ LOGICAL LUSRTC, LUSTRK, LUSCLL, LLNUTC
+ CHARACTER*10 TITUTC
+ COMMON /USRTC/ ETCLOW(MXUSTC), ETCHGH(MXUSTC), DETCBN(MXUSTC),
+ & VUSRTC(MXUSTC),
+ & IUSTRK(MXUSTC), IUSCLL(MXUSTC), NETCBN(MXUSTC),
+ & NRUSTC(MXUSTC), ITUSTC(MXUSTC), IDUSTC(MXUSTC),
+ & KBUSTC(MXUSTC), IPUSTC(MXUSTC), IGMUTC(MXUSTC),
+ & LLNUTC(MXUSTC), NUSRTC, NUSTRK, NUSCLL, LUSRTC,
+ & LUSTRK, LUSCLL
+ COMMON /USTCH/ TITUTC(MXUSTC)
+
--- /dev/null
+*$ CREATE USRYLD.ADD
+*COPY USRYLD
+*
+*=== usryld ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Module usryld: *
+* *
+* A. Ferrari : user defined particle yield scoring *
+* *
+* Last change A. Ferrari 14-nov-1996 *
+* *
+* *
+* Up to MXUSYL user defined track or coll are allowed *
+* lusryl = logical flag, .true. if at least 1 user defined *
+* yield estimator is used *
+* lscuyl = logical flag, .true. if at least 1 user defined *
+* yield estimator for secondaries coming out from *
+* hadronic inelastic interactions (nr1=-1, nr2=-2) *
+* is used *
+* nusryl = number of user defined yeld estimators *
+* itusyl = type of binning: itusyl = ie + ia*100 *
+* |ie| = 1 : kinetic energy binning *
+* |ie| = 2 : total momentum binning *
+* |ie| = 3 : lab. rapidity binning *
+* |ie| = 4 : cms rapidity binning *
+* |ie| = 5 : lab. pseudorap. binning *
+* |ie| = 6 : cms pseudorap. binning *
+* |ie| = 7 : lab. x binning *
+* |ie| = 8 : cms Feynmann x binning *
+* |ie| = 9 : transverse mom. binning *
+* |ie| =10 : transverse mass binning *
+* |ie| =11 : lab. long. mom. binning *
+* |ie| =12 : cms long. mom. binning *
+* |ie| =13 : total energy binning *
+* |ie| =14 : lab. angle binning *
+* |ie| =15 : cms angle binning *
+* |ie| =16 : p_t squared binning *
+* |ie| =17 : lab. angle binning *
+* with 1/2pi sin(theta) weight *
+* |ie| =18 : p_t binning *
+* with 1/(2pi p_t) weight *
+* |ie| =19 : frac. lab mom. binning *
+* |ie| =20 : trans. kin. en. binning *
+* |ie| =21 : excitation en. binning *
+* ie > 0 --> linear, ie < 0 --> logarithmic *
+* ia has the same meaning but for the 2nd variable *
+* ixusyl = cross section kind, ixa + ixm * 100 *
+* ixa = 1 : plain d2 sigma / d x1 d x2 where x1,x2 *
+* are the first and second variables *
+* ixa = 2 : invariant cross section E d3 sigma/dp3 *
+* ixa = 3 : plain d2 N / d x1 d x2 where x1,x2 are *
+* the first and second variables *
+* ixa = 4 : d2 (x2 N) / d x1 d x2 where x1,x2 are *
+* the first and second variables *
+* ixa = 5 : d2 (x1 N) / d x1 d x2 where x1,x2 are *
+* the first and second variables *
+* ixa = 6 : d2 N / d x1 d x2 cos(theta) where x1,x2*
+* are the first and second variables, *
+* and theta is the angle with the normal *
+* to the crossed surface *
+* ixm = material number for cross section *
+* calculation *
+* idusyl = distribution to be scored: the usual values are *
+* allowed *
+* nr1uyl = 1st region (from...) *
+* nr2uyl = 2nd region (to ...) *
+* usnryl = normalization factor (itusyl dependent) *
+* sgusyl = normalization cross section (itusyl dependent) *
+* llnuyl = no low energy neutron scoring if false, yes if *
+* true *
+* tituyl = yield estimator name *
+* ipusyl = logical unit to print the results on: formatted *
+* if > 0, unformatted if < 0 *
+* igmuyl = maximum low energy neutron group to be scored *
+* kbusyl = initial location in blank common of the consi- *
+* dered yield estimator (real*8 address) *
+* I T I S F O R A D D R E S S OF 1 !!!!! *
+* neylbn = number of energy or other quantity intervals *
+* eyllow/eylhgh = minimum and maximum energies (or other) *
+* ayllow/aylhgh = minimum and maximum angles (or other) *
+* deylbn = energy (or other) bin width *
+* pusryl = momentum of projectile to be used to define *
+* (possible) Lorentz transformations, Feynmann X *
+* etc. *
+* ijusyl = projectile identity *
+* jtusyl = target identity *
+* u,v,wusryl = laboratory projectile direction *
+* u,v,wcmuyl = cms projectile direction *
+* etx,ety,etzuyl = eta for Lorentz transformation *
+* gamuyl = gamma for Lorentz transformation *
+* sqsuyl = cms energy for Lorentz transformation *
+* iausyl,ieusyl = ausiliary arrays where itusyl is decoded *
+* *
+*----------------------------------------------------------------------*
+*
+ PARAMETER ( MXUSYL = 1000 )
+ LOGICAL LUSRYL, LLNUYL, LSCUYL
+ CHARACTER*10 TITUYL
+ COMMON /USRYL/ EYLLOW(MXUSYL), EYLHGH(MXUSYL), DEYLBN(MXUSYL),
+ & USNRYL(MXUSYL), SGUSYL(MXUSYL), AYLLOW(MXUSYL),
+ & AYLHGH(MXUSYL), PUSRYL, UUSRYL, VUSRYL, WUSRYL,
+ & ETXUYL, ETYUYL, ETZUYL, GAMUYL, SQSUYL, UCMUYL,
+ & VCMUYL, WCMUYL, IJUSYL, JTUSYL,
+ & NEYLBN(MXUSYL), NR1UYL(MXUSYL), NR2UYL(MXUSYL),
+ & IXUSYL(MXUSYL), ITUSYL(MXUSYL), IDUSYL(MXUSYL),
+ & KBUSYL(MXUSYL), IPUSYL(MXUSYL), IGMUYL(MXUSYL),
+ & IEUSYL(MXUSYL), IAUSYL(MXUSYL), LLNUYL(MXUSYL),
+ & NUSRYL, LUSRYL, LSCUYL
+ COMMON /USYCH/ TITUYL(MXUSYL)
+
--- /dev/null
+*$ CREATE WWINDW.ADD
+*COPY WWINDW
+*
+*=== wwindw ===========================================================*
+*
+*
+*----------------------------------------------------------------------*
+* *
+* region dependent Weight WINDoW parameters: *
+* *
+* Created on 02 march 1992 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 10-jul-92 by Alfredo Ferrari *
+* *
+* Included in: *
+* *
+* BDNOPT *
+* BLNSET *
+* ELECTR *
+* FLUKA *
+* KASKAD *
+* KASNEU *
+* PHOTON *
+* PROLOG *
+* ZEROIN *
+* *
+* Description of the variables: *
+* *
+* Ethww1(j) = kinetic energy threshold for particle j *
+* *
+* Ethww2(j) = kinetic energy threshold for particle j below *
+* which the asymptotic value of the weight *
+* window is assumed *
+* *
+* Wwexwd(j) = Initial extra width of the the weight window *
+* at Ethww1, if Ethww1 > Ethww2 *
+* *
+* Extwwn(j) = Multiplication factor for particle j for the *
+* weight window: bot and top levels are multi- *
+* plied by this factor *
+* *
+* Iwlbgn = starting location in blank common for the *
+* lower limits of region dependent weight windows*
+* (it is for 0 index, real numeration, that is *
+* R*(4xKalgnm) numeration ) *
+* *
+* Iwhbgn = starting location in blank common for the *
+* upper limits of region dependent weight windows*
+* (it is for 0 index, real numeration, that is *
+* R*(4xKalgnm) numeration ) *
+* *
+* Iwmbgn = starting location in blank common for the mul- *
+* tiplicative factor of region dependent weight *
+* windows *
+* (it is for 0 index, real numeration, that is *
+* R*(4xKalgnm) numeration ) *
+* *
+* Lwwndw = logical flag for setting on weight windows *
+* *
+* Lwwprm = logical flag for setting on weight windows *
+* for primary particles *
+* *
+* Note: if the weight window for region i is given by [RR,SP], *
+* with multiplicative threshold factor FM, a particle *
+* j with energy ekin and weight W will undergo: *
+* - no RR and no splitting if Eke >= FM * Ethww1 (j) *
+* - RR with survival probability given by W / FR, if *
+* W < FR = RR + RR * ( 1 / Wwexwd (j) - 1 ) *
+* x ( Ekin / FM - Ethww2 (j) ) / *
+* ( Ethww1 (j) - Ethww2 (j) ), *
+* for FM * Ethww1 (j) > Ekin > FM * Ethww2 (j) *
+* Note that FR < RR *
+* - Splitting if *
+* W > FS = SP + SP * ( Wwexwd (j) - 1 ) *
+* x ( Ekin / FM - Ethww2 (j) ) / *
+* ( Ethww1 (j) - Ethww2 (j) ), *
+* for FM * Ethww1 (j) > Ekin > FM * Ethww2 (j) *
+* Note that FS < SP *
+* - RR with survival probability given by W / RR *
+* for W < RR, Ekin < FM * Ethww2 (j) *
+* - Splitting for W > SP, Ekin < FM * Ethww2 (j) *
+* *
+*----------------------------------------------------------------------*
+*
+* Maximum number of consecutive splitting operations:
+ PARAMETER ( MXWWSP = 3 )
+* Multiplicative threshold to allow for consecutive splitting
+* operations:
+ PARAMETER ( WWSPMX = 50.D+00 )
+ LOGICAL LWWNDW, LWWPRM
+ COMMON / WWINDW / ETHWW1 (-6:NALLWP), ETHWW2 (-6:NALLWP),
+ & WWEXWD (-6:NALLWP), EXTWWN (-6:NALLWP),
+ & IWLBGN, IWHBGN, IWMBGN, LWWNDW, LWWPRM
+
--- /dev/null
+*$ CREATE XSEPAR.ADD
+*COPY XSEPAR
+*
+*=== xsepar ===========================================================*
+*
+*----------------------------------------------------------------------*
+* *
+* Xsec Parameters for neutrons and protons: *
+* *
+* Created on 20 september 1991 by Alfredo Ferrari & Paola Sala *
+* Infn - Milan *
+* *
+* Last change on 03-jul-96 by Alfredo Ferrari *
+* *
+* Included in the following routines: *
+* *
+* BERRTP *
+* XSENEU *
+* XSEPRO *
+* XSINEU *
+* XSIPRO *
+* PREPRE *
+* *
+*----------------------------------------------------------------------*
+*
+* Deuteron atomic weight:
+ PARAMETER ( ATMDEU = ( AMDEUT + AMELCT - 13.6D-09 ) / AMUGEV )
+ COMMON / XSEPAR / AANXSE (100), BBNXSE (100), CCNXSE (100),
+ & DDNXSE (100), EENXSE (100), ZZNXSE (100),
+ & EMNXSE (100), XMNXSE (100),
+ & AAPXSE (100), BBPXSE (100), CCPXSE (100),
+ & DDPXSE (100), EEPXSE (100), FFPXSE (100),
+ & ZZPXSE (100), EMPXSE (100), XMPXSE (100)
+
--- /dev/null
+**********************************************************************
+* Pb - Pb , sqrt(s)=14TeV*Z/A (LHC)
+*
+* Format: A10,6E10.0,A8
+* (except for the section enclosed by "PHOINPUT" and "ENDINPUT"
+* which is format-free)
+* lines starting with "*" are comment lines
+**********************************************************************
+*
+* projectile / target
+* -------------------
+PROJPAR 197.0 79.0
+TARPAR 197.0 79.0
+*
+* energy of interaction
+* ---------------------
+* CMENERGY 5546.0
+BEAM -100.0 -100.0 100.0 0.0
+CENTRAL -1. 0.0 3.0
+*
+* PHOJET-specific input
+* ---------------------
+* The following lines control the event-generation with PHOJET for
+* individual photon/nucleon-nucleon collisions.
+* For details see the PHOJET-manual available at
+* http://lepton.bartol.udel.edu/~eng/phojet.html
+* Any options explained in the PHOJET-manual can be used in between
+* the "PHOINPUT" and "ENDINPUT" cards.
+PHOINPUT
+PROCESS 1 0 1 1 1 1 1 1
+ENDINPUT
+*
+* Output
+* ------
+* some default output (particle multiplicities etc.)
+HISTOGRAM 101.0 102.0
+*
+* Start of event generation
+* -------------------------
+START 100.0 0.0
+STOP
+*...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
--- /dev/null
+**********************************************************************
+* Ca - Ca , sqrt(s)=14TeV*Z/A (LHC)
+*
+* Format: A10,6E10.0,A8
+* (except for the section enclosed by "PHOINPUT" and "ENDINPUT"
+* which is format-free)
+* lines starting with "*" are comment lines
+**********************************************************************
+*
+* projectile / target
+* -------------------
+PROJPAR 40.0 20.0
+TARPAR 40.0 20.0
+*
+* energy of interaction
+* ---------------------
+* CMENERGY 7000.0
+BEAM -7000.0 -7000.0 100.0 0.0
+*
+* PHOJET-specific input
+* ---------------------
+* The following lines control the event-generation with PHOJET for
+* individual photon/nucleon-nucleon collisions.
+* For details see the PHOJET-manual available at
+* http://lepton.bartol.udel.edu/~eng/phojet.html
+* Any options explained in the PHOJET-manual can be used in between
+* the "PHOINPUT" and "ENDINPUT" cards.
+PHOINPUT
+PROCESS 1 0 1 1 1 1 1 1
+ENDINPUT
+*
+* Output
+* ------
+* some default output (particle multiplicities etc.)
+HISTOGRAM 101.0 102.0
+*
+* Start of event generation
+* -------------------------
+START 20000.0 0.0
+STOP
+*...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
--- /dev/null
+**********************************************************************
+* Pb - Pb , sqrt(s)=14TeV*Z/A (LHC)
+*
+* Format: A10,6E10.0,A8
+* (except for the section enclosed by "PHOINPUT" and "ENDINPUT"
+* which is format-free)
+* lines starting with "*" are comment lines
+**********************************************************************
+*
+* projectile / target
+* -------------------
+PROJPAR 208.0 82.0
+TARPAR 208.0 82.0
+*
+* energy of interaction
+* ---------------------
+CMENERGY 5500.
+BEAM 2750.0 2750.0 200.0 0.0
+*CENTRAL -1. 0.0 3.0
+* PHOJET-specific input
+* ---------------------
+* The following lines control the event-generation with PHOJET for
+* individual photon/nucleon-nucleon collisions.
+* For details see the PHOJET-manual available at
+* http://lepton.bartol.udel.edu/~eng/phojet.html
+* Any options explained in the PHOJET-manual can be used in between
+* the "PHOINPUT" and "ENDINPUT" cards.
+PHOINPUT
+PROCESS 1 0 1 1 1 1 1 1
+ENDINPUT
+*
+* Output
+* ------
+* some default output (particle multiplicities etc.)
+*HISTOGRAM 101.0 102.0
+*
+* Start of event generation
+* -------------------------
+START 1.0 3.0
+STOP
+*...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
--- /dev/null
+**********************************************************************
+* Example for a DTUNUC input file.
+* Uncomment the input-cards according to your requirements.
+*
+* Format: A10,6E10.0,A8
+* (except for the section enclosed by "PHOINPUT" and "ENDINPUT"
+* which is format-free)
+* lines starting with "*" are comment lines
+**********************************************************************
+*
+* projectile / target
+* -------------------
+PROJPAR PROTON
+TARPAR 12.0 6.0
+*
+* energy of interaction
+* ---------------------
+ENERGY 920.0
+*
+* PHOJET-specific input
+* ---------------------
+* The following lines control the event-generation with PHOJET for
+* individual photon/nucleon-nucleon collisions.
+* For details see the PHOJET-manual available at
+* http://lepton.bartol.udel.edu/~eng/phojet.html
+* Any options explained in the PHOJET-manual can be used in between
+* the "PHOINPUT" and "ENDINPUT" cards.
+PHOINPUT
+PROCESS 1 0 1 1 1 1 1 1
+ENDINPUT
+*
+* Output
+* ------
+* some default output (particle multiplicities etc.)
+HISTOGRAM 101.0 102.0
+*
+* Start of event generation
+* -------------------------
+START 50000.0 0.0
+STOP
+*...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
--- /dev/null
+**********************************************************************
+* Example for a DTUNUC input file.
+* Uncomment the input-cards according to your requirements.
+*
+* Format: A10,6E10.0,A8
+* (except for the section enclosed by "PHOINPUT" and "ENDINPUT"
+* which is format-free)
+* lines starting with "*" are comment lines
+**********************************************************************
+*
+* projectile / target
+* -------------------
+PROJPAR PROTON
+TARPAR 184.0 74.0
+*
+* energy of interaction
+* ---------------------
+ENERGY 920.0
+*
+* PHOJET-specific input
+* ---------------------
+* The following lines control the event-generation with PHOJET for
+* individual photon/nucleon-nucleon collisions.
+* For details see the PHOJET-manual available at
+* http://lepton.bartol.udel.edu/~eng/phojet.html
+* Any options explained in the PHOJET-manual can be used in between
+* the "PHOINPUT" and "ENDINPUT" cards.
+PHOINPUT
+PROCESS 1 0 1 1 1 1 1 1
+ENDINPUT
+*
+* Output
+* ------
+* some default output (particle multiplicities etc.)
+HISTOGRAM 101.0 102.0
+*
+* Start of event generation
+* -------------------------
+START 10000.0 0.0
+STOP
+*...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
--- /dev/null
+**********************************************************************
+* p - p , sqrt(s)=14TeV (LHC)
+*
+* Format: A10,6E10.0,A8
+* (except for the section enclosed by "PHOINPUT" and "ENDINPUT"
+* which is format-free)
+* lines starting with "*" are comment lines
+**********************************************************************
+*
+* projectile / target
+* -------------------
+PROJPAR PROTON
+TARPAR PROTON
+*
+* energy of interaction
+* ---------------------
+* CMENERGY 14000.0
+BEAM 7000.0 7000.0 200.0 0.0
+*
+* PHOJET-specific input
+* ---------------------
+* The following lines control the event-generation with PHOJET for
+* individual photon/nucleon-nucleon collisions.
+* For details see the PHOJET-manual available at
+* http://lepton.bartol.udel.edu/~eng/phojet.html
+* Any options explained in the PHOJET-manual can be used in between
+* the "PHOINPUT" and "ENDINPUT" cards.
+PHOINPUT
+PROCESS 1 0 1 1 1 1 1 1
+ENDINPUT
+*
+* Output
+* ------
+* some default output (particle multiplicities etc.)
+HISTOGRAM 101.0 102.0
+*
+* Start of event generation
+* -------------------------
+START 10000.0 0.0
+STOP
+*...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
--- /dev/null
+FSRCS:= \
+dpmjet3.0-4.f \
+phojet1.12-35c.f \
+pythia6115.f \
+user3.0-4.f
+
+EINCLUDE:=$(ALICE_ROOT)/DPMJET/flukapro
+SHLIB += -L $(ALICE_ROOT)/DPMJET -lflukahp
+PACKFFLAGS:= -fno-second-underscore -malign-double
--- /dev/null
+C***********************************************************************
+C
+C
+C
+C PHOJET version 1.12
+C -------------------
+C
+C
+C ($Revision$, $Date$)
+C
+C
+C Authors: Ralph Engel
+C (eng@lepton.bartol.udel.edu)
+C
+C Johannes Ranft
+C (johannes.ranft@cern.ch)
+C
+C Stefan Roesler
+C (sroesler@SLAC.Stanford.EDU)
+C
+C
+C For the latest version and documentation check
+C http://lepton.bartol.udel.edu/~eng/phojet.html
+C
+C
+C Bug reports, questions, complaints are welcome
+C (please send a mail to eng@lepton.bartol.udel).
+C
+C
+C Note that the code is available with several interfaces to
+C Lund fragmentation programs (JETSET7.x, 1.x and a double
+C precision JETSET version). This file is the code with
+C
+
+C interface to PYTHIA 6.1 (or higher)
+
+C for usage in DPMJET 3.x (Lund common block dimensions increased)
+
+C
+C***********************************************************************
+C
+C
+C List of subroutines and functions
+C ---------------------------------
+C
+C
+C main event simulation routines
+C
+C PHO_EVENT
+C PHO_PARTON
+C PHO_POSPOM
+C
+C PHO_STDPAR
+C PHO_POMSCA
+C
+C
+C user steering interface
+C
+C PHO_SETMDL
+C PHO_PRESEL
+C
+C
+C experimental setup / photon flux calculation
+C
+C PHO_FIXLAB
+C PHO_FIXCOL
+C PHO_GPHERA
+C PHO_GGEPEM
+C PHO_WGEPEM
+C PHO_GGBLSR
+C PHO_GGBEAM
+C PHO_GGHIOF
+C PHO_GGHIOG
+C PHO_GGFLCL
+C PHO_GGFLCR
+C PHO_GGFAUX
+C PHO_GGFNUC
+C PHO_GHHIOF
+C PHO_GHHIAS
+C
+C
+C initialization
+C
+C PHO_INIT
+C PHO_DATINI
+C PHO_PARDAT
+C PHO_MCINI
+C
+C PHO_EVEINI
+C
+C PHO_HARINI
+C PHO_FRAINI
+C
+C PHO_FITPAR
+C
+C
+C cross section calculation
+C
+C PHO_CSINT
+C
+C PHO_XSECT
+C PHO_BORNCS
+C PHO_HARXTO
+C
+C PHO_DSIGDT
+C
+C PHO_TRIREG
+C PHO_LOOREG
+C PHO_TRXPOM
+C
+C PHO_EIKON
+C PHO_CHAN2A
+C
+C PHO_SCALES
+C
+C
+C multiple interaction structure
+C
+C PHO_IMPAMP
+C PHO_PRBDIS
+C PHO_SAMPRO
+C PHO_SAMPRB
+C
+C
+C hadron / photon remnant treatment, soft x selection
+C
+C PHO_HARREM
+C PHO_PARREM
+C
+C PHO_HADSP2
+C PHO_HADSP3
+C PHO_SOFTXX
+C PHO_SELSXR
+C PHO_SELSX2
+C PHO_SELSXS
+C PHO_SELSXI
+C
+C PHO_VALFLA
+C PHO_REGFLA
+C PHO_SEAFLA
+C PHO_FLAUX
+C PHO_BETAF
+C IPHO_DIQU
+C
+C
+C primordial kt and soft parton pt
+C
+C PHO_PRIMKT
+C PHO_PARTPT
+C PHO_SOFTPT
+C PHO_SELPT
+C
+C PHO_CONN0
+C PHO_CONN1
+C
+C
+C simulation of hard scattering, initial state radiation
+C
+C PHO_HARCOL
+C PHO_SELCOL
+C PHO_HARCOR
+C
+C PHO_HARDIR
+C PHO_HARX12
+C PHO_HARDX1
+C PHO_HARKIN
+C PHO_HARWGH
+C PHO_HARSCA
+C PHO_HARFAC
+C PHO_HARWGX
+C PHO_HARWGI
+C PHO_HARINT
+C PHO_HARMCI
+C
+C PHO_HARXR3
+C PHO_HARXR2
+C PHO_HARXD2
+C PHO_HARXPT
+C PHO_HARISR
+C PHO_HARZSP
+C
+C PHO_PTCUT
+C PHO_ALPHAE
+C PHO_ALPHAS
+C
+C
+C diffraction dissociation
+C
+C PHO_DIFDIS
+C PHO_DIFPRO
+C PHO_DIFPAR
+C PHO_QELAST
+C PHO_CDIFF
+C PHO_DFWRAP
+C
+C PHO_SAMASS
+C PHO_DSIGDM
+C PHO_DFMASS
+C
+C PHO_SDECAY
+C PHO_SDECY2
+C PHO_SDECY3
+C
+C PHO_DIFSLP
+C PHO_DIFKIN
+C PHO_VECRES
+C PHO_DIFRES
+C
+C PHO_REGPAR
+C
+C PHO_PECMS
+C PHO_SETPAR
+C
+C
+C fragmentation, treatment of low-mass strings
+C
+C PHO_STRING
+C PHO_STRFRA
+C
+C PHO_ID2STR
+C PHO_MCHECK
+C PHO_POMCOR
+C PHO_MASCOR
+C PHO_PARCOR
+C
+C PHO_GLU2QU
+C PHO_GLUSPL
+C
+C PHO_DQMASS
+C PHO_BAMASS
+C PHO_MEMASS
+C
+C
+C particle code tables, particle numbering conversion
+C
+C PHO_PNAME
+C PHO_PMASS
+C IPHO_CHR3
+C IPHO_BAR3
+C
+C IPHO_ANTI
+C
+C IPHO_PDG2ID
+C IPHO_ID2PDG
+C IPHO_LU2PDG
+C IPHO_PDG2LU
+C
+C IPHO_CNV1
+C PHO_HACODE
+C
+C
+C
+C Lorentz transformations, rotations and mass adjustment
+C
+C PHO_ALTRA
+C PHO_LTRANS
+C PHO_TRANS
+C PHO_TRANI
+C
+C PHO_MKSLTR
+C PHO_GETLTR
+C
+C PHO_LTRHEP
+C
+C PHO_MSHELL
+C PHO_MASSAD
+C
+C
+C program debugging and internal cross-checks
+C
+C PHO_PREVNT
+C PHO_PRSTRG
+C PHO_CHECK
+C
+C PHO_TRACE
+C
+C PHO_REJSTA
+C
+C PHO_ABORT
+C
+C
+C cross section fitting
+C
+C PHO_FITMAI
+C PHO_FITINP
+C PHO_FITDAT
+C PHO_FITOUT
+C PHO_FITAMP
+C PHO_FITTST
+C PHO_FITMSQ
+C PHO_FITVD1
+C PHO_FITCN1
+C PHO_FITINI
+C
+C
+C cross section parametrizations
+C
+C PHO_HADCSL
+C PHO_ALLM97
+C PHO_CSDIFF
+C
+
+C
+C random numbers
+C
+
+C DPMJET random number generator DT_RNDM used
+
+C
+C PHO_SFECFE
+C PHO_RNDBET
+C PHO_RNDGAM
+C
+C
+C auxiliary routines / numerical methods
+C
+C PHO_GAUSET
+C PHO_GAUDAT
+C
+C pho_samp1d
+C
+C PHO_DZEROX
+C PHO_EXPINT
+C PHO_BESSJ0
+C PHO_BESSI0
+C pho_ExpBessI0
+C PHO_BESSI1
+C PHO_BESSK0
+C PHO_BESSK1
+C
+C PHO_XLAM
+C
+C PHO_SWAPD
+C PHO_SWAPI
+C
+C
+C parton density parametrization management / interface
+C
+C PHO_PDF
+C
+C PHO_SETPDF
+C PHO_GETPDF
+C PHO_ACTPDF
+C
+C PHO_QPMPDF
+C
+C PHO_PDFTST
+C
+C
+C parton density parametrizations from other authors
+C
+C PHO_DOR98LO
+C PHO_DOR98SC
+C PHO_DOR94LO
+C PHO_DOR94HO
+C PHO_DOR94DI
+C PHO_DOR92LO
+C PHO_DOR92HO
+C PHO_DORPLO
+C PHO_DORPHO
+C PHO_DORGLO
+C PHO_DORGHO
+C PHO_DORGH0
+C PHO_DOR94FV
+C PHO_DOR94FW
+C PHO_DOR94FS
+C PHO_DOR92FV
+C PHO_DOR92FW
+C PHO_DOR92FS
+C PHO_DORFVP
+C PHO_DORFGP
+C PHO_DORFQP
+C PHO_DORGF
+C PHO_DORGFS
+C PHO_grsf1
+C PHO_grsf2
+C
+C PHO_CKMTPA
+C PHO_CKMTPD
+C PHO_CKMTPO
+C PHO_CKMTFV
+C
+C PHO_DBFINT
+C
+C PHO_SASGAM
+C PHO_SASVMD
+C PHO_SASANO
+C PHO_SASBEH
+C PHO_SASDIR
+C
+C PHO_PHGAL
+C PHVAL
+C
+C
+C***********************************************************************
+
+CDECK ID>, PHO_INIT
+**sr temporarily changed
+C SUBROUTINE PHO_INIT(LINP,LOUT,IREJ)
+ SUBROUTINE PHO_INIT(LINP,IREJ)
+**
+C***********************************************************************
+C
+C main subroutine to configure and manage PHOJET calculations
+C
+C input: LINP input unit to read from
+C -1 to skip reading of input file
+C LOUT output unit to write to
+C
+C output: IREJ 0 success
+C 1 failure
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C cut probability distribution
+ INTEGER IEETA1,IIMAX,KKMAX
+ PARAMETER( IEETA1=20, IIMAX=20, KKMAX=20 )
+ INTEGER IEEMAX,IMAX,KMAX
+ REAL PROB
+ DOUBLE PRECISION EPTAB
+ COMMON /POPROB/ PROB(4,IEETA1,0:IIMAX,0:KKMAX),EPTAB(4,IEETA1),
+ & IEEMAX,IMAX,KMAX
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+
+ INTEGER MSTU,MSTJ
+ DOUBLE PRECISION PARU,PARJ
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ INTEGER KCHG
+ DOUBLE PRECISION PMAS,PARF,VCKM
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+
+ INTEGER MDCY,MDME,KFDP
+ DOUBLE PRECISION BRAT
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+
+ INTEGER PYCOMP
+
+ DIMENSION ITMP(0:11)
+ CHARACTER*10 CNAME
+ CHARACTER*70 NUMBER,FILENA
+
+ 14 FORMAT(A10,A69)
+ 15 FORMAT(A12)
+
+C define input/output units
+ IF(LINP.GE.0) THEN
+ LI = LINP
+ ELSE
+ LI = 5
+ ENDIF
+**sr temporarily changed
+C LO = LOUT
+ LO = 6
+**
+
+ IREJ = 0
+
+ WRITE(LO,*)
+ WRITE(LO,*) ' ==================================================='
+ WRITE(LO,*) ' '
+ WRITE(LO,*) ' ---- PHOJET version 1.12 ---- '
+ WRITE(LO,*) ' '
+ WRITE(LO,*) ' ==================================================='
+ WRITE(LO,*) ' Authors: Ralph Engel (Bartol Res. Inst.)'
+ WRITE(LO,*) ' Johannes Ranft (Siegen Univ.)'
+ WRITE(LO,*) ' Stefan Roesler (SLAC)'
+ WRITE(LO,*) ' ---------------------------------------------------'
+ WRITE(LO,*) ' Manual, updates, and further information:'
+ WRITE(LO,*) ' http://lepton.bartol.udel.edu/~eng/phojet.html'
+ WRITE(LO,*) ' ---------------------------------------------------'
+ WRITE(LO,*) ' please send suggestions / bug reports etc. to:'
+ WRITE(LO,*) ' eng@lepton.bartol.udel.edu'
+ WRITE(LO,*) ' ==================================================='
+ WRITE(LO,*) ' $Date$'
+ WRITE(LO,*) ' $Revision$'
+
+ WRITE(LO,*) ' (code version with interface to PYTHIA 6.x)'
+
+ WRITE(LO,*) ' (code version for usage in DPMJET 3.x)'
+
+ WRITE(LO,*) ' ==================================================='
+ WRITE(LO,*)
+
+C standard initializations
+ CALL PHO_DATINI
+ CALL PHO_PARDAT
+ DUM = PHO_PMASS(0,-1)
+
+C initialize standard PDFs
+C proton
+ CALL PHO_SETPDF(2212,IDUM,5,6,0,0,-1)
+ CALL PHO_SETPDF(-2212,IDUM,5,6,0,0,-1)
+C neutron
+ CALL PHO_SETPDF(2112,IDUM,5,6,0,0,-1)
+ CALL PHO_SETPDF(-2112,IDUM,5,6,0,0,-1)
+C photon
+ CALL PHO_SETPDF(22,IDUM,5,3,0,0,-1)
+C pomeron
+ CALL PHO_SETPDF(990,IDUM,4,0,0,0,-1)
+C pions
+ CALL PHO_SETPDF(211,IDUM,5,2,0,0,-1)
+ CALL PHO_SETPDF(-211,IDUM,5,2,0,0,-1)
+ CALL PHO_SETPDF(111,IDUM,5,2,0,0,-1)
+C kaons
+ CALL PHO_SETPDF(321,IDUM,5,2,0,0,-1)
+ CALL PHO_SETPDF(-321,IDUM,5,2,0,0,-1)
+ CALL PHO_SETPDF(130,IDUM,5,2,0,0,-1)
+ CALL PHO_SETPDF(310,IDUM,5,2,0,0,-1)
+
+C nothing to be done
+ IF(LINP.LT.0) RETURN
+
+C main loop to read input cards
+ 1200 CONTINUE
+ READ(LINP,14,END=1300) CNAME,NUMBER
+ IF(CNAME.EQ.'ENDINPUT ') THEN
+ GOTO 1300
+ ELSE IF(CNAME.EQ.'STOP ') THEN
+ WRITE(LO,*) 'STOP'
+ STOP
+ ELSE IF(CNAME.EQ.'COMMENT ') THEN
+ WRITE(LO,'(1X,A10,A69)') 'COMMENT ',NUMBER
+ ELSE IF(CNAME(1:1).EQ.'*') THEN
+ WRITE(LO,'(1X,A10,A69)') CNAME,NUMBER
+ ELSE IF(CNAME.EQ.'PTCUT ') THEN
+ READ(NUMBER,*) PARMDL(36),PARMDL(37),PARMDL(38),PARMDL(39)
+ WRITE(LO,*) 'PTCUT ',PARMDL(36),PARMDL(37),
+ & PARMDL(38),PARMDL(39)
+ ELSE IF(CNAME.EQ.'PROCESS ') THEN
+ READ(NUMBER,*) (IPRON(KK,1),KK=1,8)
+ WRITE(LO,*) 'PROCESS ',(IPRON(KK,1),KK=1,8)
+ ELSE IF(CNAME.EQ.'DIFF-PROC ') THEN
+ READ(NUMBER,*) (ITMP(KK),KK=0,11)
+ WRITE(LO,*) 'DIFF-PROC ',(ITMP(KK),KK=0,8)
+ DO 112 KK=1,8
+ IPRON(KK,ITMP(0)) = ITMP(KK)
+ 112 CONTINUE
+ ELSE IF(CNAME.EQ.'SUBPROCESS') THEN
+ READ(NUMBER,*) IMPRO,IP,ION
+ WRITE(LO,*) 'SUBPROCESS',IMPRO,IP,ION
+ MH_pro_on(IMPRO,IP) = ION
+ ELSE IF(CNAME.EQ.'PARTICLE1 ') THEN
+ READ(NUMBER,*) IDPDG,PVIR
+ IHFLS(1) = 1
+ XPSUB = 1.D0
+ CALL PHO_SETPAR(1,IDPDG,0,PVIR)
+ WRITE(LO,*) 'PARTICLE1 ',IDPDG,PVIR
+ ELSE IF(CNAME.EQ.'PARTICLE2 ') THEN
+ READ(NUMBER,*) IDPDG,PVIR
+ IHFLS(2) = 1
+ XTSUB = 1.D0
+ CALL PHO_SETPAR(2,IDPDG,0,PVIR)
+ WRITE(LO,*) 'PARTICLE2 ',IDPDG,PVIR
+ ELSE IF(CNAME.EQ.'REMNANT1 ') THEN
+ READ(NUMBER,*) IDPDG,IFL1,IFL2,IVAL,XSUB
+ IHFLS(1) = IVAL
+ IHFLD(1,1) = IFL1
+ IHFLD(1,2) = IFL2
+ XPSUB = XSUB
+ PVIR = 0.D0
+ CALL PHO_SETPAR(1,IDPDG,-1,PVIR)
+ WRITE(LO,*) 'REMNANT1 ',IDPDG,IFL1,IFL2,IVAL,XSUB
+ ELSE IF(CNAME.EQ.'REMNANT2 ') THEN
+ READ(NUMBER,*) IDPDG,IFL1,IFL2,IVAL,XSUB
+ IHFLS(2) = IVAL
+ IHFLD(2,1) = IFL1
+ IHFLD(2,2) = IFL2
+ XTSUB = XSUB
+ PVIR = 0.D0
+ CALL PHO_SETPAR(2,IDPDG,-1,PVIR)
+ WRITE(LO,*) 'REMNANT2 ',IDPDG,IFL1,IFL2,IVAL,XSUB
+ ELSE IF(CNAME.EQ.'PDF ') THEN
+ READ(NUMBER,*) IDPDG,IPAR,ISET,IEXT
+ WRITE(LO,*) 'PDF ',IDPDG,IPAR,ISET,IEXT
+ CALL PHO_SETPDF(IDPDG,IDUM,IPAR,ISET,IEXT,0,-1)
+ ELSE IF(CNAME.EQ.'SETMODEL ') THEN
+ READ(NUMBER,*) I,IVAL
+ WRITE(LO,*) 'SETMODEL ',I,IVAL
+ CALL PHO_SETMDL(I,IVAL,1)
+ ELSE IF(CNAME.EQ.'SETPARAM ') THEN
+ READ(NUMBER,*) I,PARNEW
+ WRITE(LO,*) 'SETPARAM ',I,PARNEW
+ PARMDL(I) = PARNEW
+ ELSE IF(CNAME.EQ.'DEBUG ') THEN
+ READ(NUMBER,*) IDEBF,IDEBN,IDLEV
+ WRITE(LO,*) 'DEBUG ',IDEBF,IDEBN,IDLEV
+ CALL PHO_TRACE(IDEBF,IDEBN,IDLEV)
+ ELSE IF(CNAME.EQ.'TRACE ') THEN
+ READ(NUMBER,*) IDEBF,IDLEV
+ WRITE(LO,*) 'TRACE ',IDEBF,IDLEV
+ IDEB(IDEBF) = IDLEV
+ ELSE IF(CNAME.EQ.'SETICUT ') THEN
+ READ(NUMBER,*) I,ICUT
+ WRITE(LO,*) 'SETICUT ',I,ICUT
+ ISWCUT(I) = ICUT
+ ELSE IF(CNAME.EQ.'SETFCUT ') THEN
+ READ(NUMBER,*) I,PARNEW
+ WRITE(LO,*) 'SETFCUT ',I,PARNEW
+ HSWCUT(I) = PARNEW
+ ELSE IF(CNAME.EQ.'LUND-MSTU ') THEN
+ READ(NUMBER,*) I,IVAL
+ WRITE(LO,*) 'LUND-MSTU ',I,IVAL
+ MSTU(I) = IVAL
+ ELSE IF(CNAME.EQ.'LUND-MSTJ ') THEN
+ READ(NUMBER,*) I,IVAL
+ WRITE(LO,*) 'LUND-MSTJ ',I,IVAL
+ MSTJ(I) = IVAL
+ ELSE IF(CNAME.EQ.'LUND-PARJ ') THEN
+ READ(NUMBER,*) I,EE
+ WRITE(LO,*) 'LUND-PARJ ',I,EE
+ PARJ(I) = REAL(EE)
+ ELSE IF(CNAME.EQ.'LUND-PARU ') THEN
+ READ(NUMBER,*) I,EE
+ WRITE(LO,*) 'LUND-PARU ',I,EE
+ PARU(I) = REAL(EE)
+ ELSE IF(CNAME.EQ.'LUND-DECAY') THEN
+ READ(NUMBER,*) ID,ION
+ WRITE(LO,*) 'LUND-DECAY ',ID,ION
+
+ KC=PYCOMP(ID)
+
+ MDCY(KC,1) = ION
+ ELSE IF(CNAME.EQ.'PSOFTMIN ') THEN
+ READ(NUMBER,*) PSOMIN
+ WRITE(LO,*) 'PSOFTMIN ',PSOMIN
+ ELSE IF(CNAME.EQ.'INTPREC ') THEN
+ READ(NUMBER,*) NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ WRITE(LO,*) 'INTPREC ',NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+
+C PDF test utility
+ ELSE IF(CNAME.EQ.'PDFTEST ') THEN
+ READ(NUMBER,*) IDPDG,SCALE2,PVIRT2
+ PVIRT2 = ABS(PVIRT2)
+ WRITE(LO,*) 'PDFTEST ',IDPDG,' ',SCALE2,' ',PVIRT2
+ CALL PHO_PDFTST(IDPDG,SCALE2,PVIRT2)
+
+C mass cut on gamma-gamma or gamma-hadron system
+ ELSE IF(CNAME.EQ.'ECMS-CUT ') THEN
+ READ(NUMBER,*) ECMIN,ECMAX
+ WRITE(LO,*) 'ECMS-CUT ',ECMIN,ECMAX
+
+C beam lepton (anti-)tagging system
+ ELSE IF(CNAME.EQ.'TAG-METHOD') THEN
+ READ(NUMBER,*) ITAG1,ITAG2
+ WRITE(LO,*) 'TAG-METHOD',ITAG1,ITAG2
+ ELSE IF(CNAME.EQ.'E-TAG1 ') THEN
+ READ(NUMBER,*)
+ & EEMIN1,YMIN1,YMAX1,Q2MIN1,Q2MAX1,THMIN1,THMAX1
+ WRITE(LO,*) 'E-TAG1 ',EEMIN1,YMIN1,YMAX1,
+ & Q2MIN1,Q2MAX1,THMIN1,THMAX1
+ ELSE IF(CNAME.EQ.'E-TAG2 ') THEN
+ READ(NUMBER,*)
+ & EEMIN2,YMIN2,YMAX2,Q2MIN2,Q2MAX2,THMIN2,THMAX2
+ WRITE(LO,*) 'E-TAG2 ',EEMIN2,YMIN2,YMAX2,
+ & Q2MIN2,Q2MAX2,THMIN2,THMAX2
+
+C sampling of gamma-p events in ep (HERA)
+ ELSE IF( (CNAME.EQ.'WW-HERA ')
+ & .OR.(CNAME.EQ.'GP-HERA ')) THEN
+ READ(NUMBER,*) EE1,EE2,NEV
+ WRITE(LO,*) 'GP-HERA ',EE1,EE2,NEV
+ IF(YMAX2.LT.0.D0) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:ELECTRON TAGGER NOT SET'
+ ELSE
+ CALL PHO_GPHERA(NEV,EE1,EE2)
+ KEVENT = 0
+ ENDIF
+
+C sampling of gamma-gamma events in e+e- (LEP)
+ ELSE IF( (CNAME.EQ.'GG-EPEM ')
+ & .OR.(CNAME.EQ.'WW-EPEM ')) THEN
+ READ(NUMBER,*) EE1,EE2,NEV
+ WRITE(LO,*) 'GG-EPEM ',EE1,EE2,NEV
+ IF((YMAX1.LT.0.D0).OR.(YMAX2.LT.0.D0)) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:ELECTRON TAGGERS NOT SET'
+ ELSE
+ CALL PHO_GGEPEM(-1,EE1,EE2)
+ CALL PHO_GGEPEM(NEV,EE1,EE2)
+ CALL PHO_GGEPEM(-2,sig_tot,sig_gg)
+ KEVENT = 0
+ ENDIF
+
+C sampling of gamma-gamma in heavy-ion collisions
+ ELSE IF(CNAME.EQ.'GG-HION-F ') THEN
+ READ(NUMBER,*) EE,NA,NZ,NEV
+ WRITE(LO,*) 'GG-HION-F ',EE,NA,NZ,NEV
+ IF((YMAX1.LT.0.D0).OR.(YMAX2.LT.0.D0)) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:Y RANGE FOR PHOTONS NOT SET'
+ ELSE
+ CALL PHO_GGHIOF(NEV,EE,NA,NZ)
+ KEVENT = 0
+ ENDIF
+ ELSE IF(CNAME.EQ.'GG-HION-G ') THEN
+ READ(NUMBER,*) EE,NA,NZ,NEV
+ WRITE(LO,*) 'GG-HION-G ',EE,NA,NZ,NEV
+ IF((YMAX1.LT.0.D0).OR.(YMAX2.LT.0.D0)) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:Y RANGE FOR PHOTONS NOT SET'
+ ELSE
+ CALL PHO_GGHIOG(NEV,EE,NA,NZ)
+ KEVENT = 0
+ ENDIF
+
+C sampling of gamma-hadron events in heavy ion collisions
+ ELSE IF(CNAME.EQ.'GH-HION-F ') THEN
+ READ(NUMBER,*) EE,NA,NZ,NEV
+ WRITE(LO,*) 'GH-HION-F ',EE,NA,NZ,NEV
+ IF((YMAX1.LT.0.D0).OR.(YMAX2.LT.0.D0)) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:Y RANGE FOR PHOTONS NOT SET'
+ ELSE
+ CALL PHO_GHHIOF(NEV,EE,NA,NZ)
+ KEVENT = 0
+ ENDIF
+
+C sampling of hadron-gamma events in hadron - heavy ion collisions
+ ELSE IF(CNAME.EQ.'HG-HIAS-F ') THEN
+ READ(NUMBER,*) EP,EE,NA,NZ,NEV
+ WRITE(LO,*) 'HG-HIAS-F ',EP,EE,NA,NZ,NEV
+ IF(YMAX2.LT.0.D0) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:Y RANGE FOR PHOTONS NOT SET'
+ ELSE
+ CALL PHO_GHHIAS(NEV,EP,EE,NA,NZ)
+ KEVENT = 0
+ ENDIF
+
+C sampling of photoproduction events e+e-, backscattered laser
+ ELSE IF(CNAME.EQ.'BLASER ') THEN
+ READ(NUMBER,*) EE1,EE2,Pl_lam_1,Pl_lam_2,X_1,X_2,rho,A,NEV
+ WRITE(LO,*) 'BLASER ',EE1,EE2,
+ & Pl_lam_1,Pl_lam_2,X_1,X_2,rho,A,NEV
+ CALL PHO_GGBLSR(NEV,EE1,EE2,Pl_lam_1,Pl_lam_2,X_1,X_2,rho,A)
+ KEVENT = 0
+
+C sampling of photoproduction events beamstrahlung
+ ELSE IF(CNAME.EQ.'BEAMST ') THEN
+ READ(NUMBER,*) EE1,YPSI,SIGX,SIGY,SIGZ,AEB,NEV
+ WRITE(LO,*) 'BEAMST ',EE1,YPSI,SIGX,SIGY,SIGZ,AEB,NEV
+ IF(YMAX1.LT.0.D0) THEN
+ WRITE(LO,*) ' PHO_INIT:ERROR:ELECTRON TAGGER 1 NOT SET'
+ ELSE
+ CALL PHO_GGBEAM(NEV,EE1,YPSI,SIGX,SIGY,SIGZ,AEB)
+ KEVENT = 0
+ ENDIF
+
+C fixed-energy events in LAB system of particle 2
+ ELSE IF(CNAME.EQ.'EVENT-LAB ') THEN
+ READ(NUMBER,*) PLAB,NEV
+ WRITE(LO,*) 'EVENT-LAB ',PLAB,NEV
+ CALL PHO_FIXLAB(PLAB,NEV)
+ KEVENT = 0
+
+C fixed-energy events in CM system
+ ELSE IF(CNAME.EQ.'EVENT-CMS ') THEN
+ READ(NUMBER,*) ECM,NEV
+ WRITE(LO,*) 'EVENT-CMS ',ECM,NEV
+ PMASS1 = PHO_PMASS(IFPAB(1),0)-SQRT(PVIRT(1))
+ PMASS2 = PHO_PMASS(IFPAB(2),0)-SQRT(PVIRT(2))
+ CALL PHO_PECMS(1,PMASS1,PMASS2,ECM,PCM,EE)
+ E1 = EE
+ E2 = ECM-EE
+ THETA = 0.D0
+ PHI = 0.D0
+ CALL PHO_FIXCOL(E1,E2,THETA,PHI,NEV)
+ KEVENT = 0
+
+C fixed-energy events for collider setup with crossing angle
+ ELSE IF(CNAME.EQ.'EVENT-COLL') THEN
+ READ(NUMBER,*) E1,E2,THETA,PHI,NEV
+ WRITE(LO,*) 'EVENT-COLL',E1,E2,THETA,PHI,NEV
+ CALL PHO_FIXCOL(E1,E2,THETA,PHI,NEV)
+ KEVENT = 0
+
+C unknown data card
+ ELSE
+ WRITE(LO,*) 'PHO_INIT: unknown data card: ',CNAME,NUMBER
+ ENDIF
+
+ GOTO 1200
+ 1300 CONTINUE
+ WRITE(LO,*) ' RETURN'
+
+ END
+
+CDECK ID>, PHO_SETMDL
+ SUBROUTINE PHO_SETMDL(INDX,IVAL,IMODE)
+C**********************************************************************
+C
+C set model switches
+C
+C input: INDX model parameter number
+C (positive: ISWMDL, negative: IPAMDL)
+C IVAL new value
+C IMODE -1 print value of parameter INDX
+C 1 set new value
+C -2 print current settings
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+ IF(IMODE.EQ.-2) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A,/1X,A,/)') 'PHO_SETMDL: current settings',
+C & '----------------------------'
+ DO 100 I=1,48,3
+ IF(ISWMDL(I).EQ.-9999) GOTO 200
+ IF(ISWMDL(I+1).EQ.-9999) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(5X,I3,A1,A,I6)') I,':',MDLNA(I),ISWMDL(I)
+ GOTO 200
+ ELSE IF(ISWMDL(I+2).EQ.-9999) THEN
+C WRITE(LO,'(2(5X,I3,A1,A,I6))') I,':',MDLNA(I),ISWMDL(I),
+C & I+1,':',MDLNA(I+1),ISWMDL(I+1)
+ GOTO 200
+ ELSE
+C WRITE(LO,'(3(5X,I3,A1,A,I6))')
+C & (I+K,':',MDLNA(I+K),ISWMDL(I+K),K=0,2)
+ ENDIF
+ 100 CONTINUE
+ 200 CONTINUE
+ ELSE IF(IMODE.EQ.-1) THEN
+C WRITE(LO,'(1X,A,1X,A,I6)')
+C & 'PHO_SETMDL:',MDLNA(INDX),ISWMDL(INDX)
+ ELSE IF(IMODE.EQ.1) THEN
+ IF(INDX.GT.0) THEN
+ IF(ISWMDL(INDX).NE.IVAL) THEN
+ WRITE(LO,'(1X,A,I4,1X,A,2I6)')
+ & 'PHO_SETMDL:ISWMDL(OLD/NEW):',
+ & INDX,MDLNA(INDX),ISWMDL(INDX),IVAL
+ ISWMDL(INDX) = IVAL
+ ENDIF
+ ELSE IF(INDX.LT.0) THEN
+ IF(IPAMDL(-INDX).NE.IVAL) THEN
+ WRITE(LO,'(1X,A,I4,1X,2I6)') 'PHO_SETMDL:IPAMDL(OLD/NEW):',
+ & -INDX,IPAMDL(-INDX),IVAL
+ IPAMDL(-INDX) = IVAL
+ ENDIF
+ ENDIF
+ ELSE
+ WRITE(LO,'(/1X,A,I6)')
+ & 'PHO_SETMDL:ERROR: unsupported mode',IMODE
+ ENDIF
+ END
+
+CDECK ID>, PHO_DATINI
+ SUBROUTINE PHO_DATINI
+C*********************************************************************
+C
+C initialization of variables and switches
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C cut probability distribution
+ INTEGER IEETA1,IIMAX,KKMAX
+ PARAMETER( IEETA1=20, IIMAX=20, KKMAX=20 )
+ INTEGER IEEMAX,IMAX,KMAX
+ REAL PROB
+ DOUBLE PRECISION EPTAB
+ COMMON /POPROB/ PROB(4,IEETA1,0:IIMAX,0:KKMAX),EPTAB(4,IEETA1),
+ & IEEMAX,IMAX,KMAX
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C parameters of the "simple" Vector Dominance Model
+ DOUBLE PRECISION VMAS,GAMM,RMIN,RMAX,VMSL,VMFA
+ COMMON /POSVDM/ VMAS(4),GAMM(4),RMIN(4),RMAX(4),VMSL(4),VMFA(4)
+C parameters for DGLAP backward evolution in ISR
+ INTEGER NFSISR
+ DOUBLE PRECISION Q2MISR,PMISR,ZMISR,AL2ISR
+ COMMON /PODGL1/ Q2MISR(2),PMISR(2),ZMISR(2),AL2ISR(2),NFSISR
+C particles created by initial state evolution
+ INTEGER MXISR1,MXISR2
+ PARAMETER ( MXISR1 = 150, MXISR2 = 50 )
+ INTEGER IFLISR,IPOISR,IMXISR
+ DOUBLE PRECISION PHISR
+ COMMON /POPISR/ IFLISR(2,MXISR1),PHISR(2,4,MXISR1),
+ & IPOISR(2,2,MXISR2),IMXISR(2)
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C interpolation tables for hard cross section and MC selection weights
+ INTEGER Max_tab_E,Max_tab_Q2,Max_pro_tab
+ PARAMETER ( Max_tab_E = 20, Max_tab_Q2 = 10, Max_pro_tab = 16 )
+ INTEGER IH_Q2a_up,IH_Q2b_up,IH_Ecm_up
+ DOUBLE PRECISION Hfac_tab,HWgx_tab,HSig_tab,Hdpt_tab,
+ & HQ2a_tab,HQ2b_tab,HEcm_tab
+ COMMON /POHTAB/
+ & Hfac_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HWgx_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HSig_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & Hdpt_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HQ2a_tab(1:Max_tab_Q2,0:4),HQ2b_tab(1:Max_tab_Q2,0:4),
+ & HEcm_tab(1:Max_tab_E,0:4),
+ & IH_Q2a_up(0:4),IH_Q2b_up(0:4),IH_Ecm_up(0:4)
+
+C initialize /POCONS/
+ PI = ATAN(1.D0)*4.D0
+ PI2 = 2.D0*PI
+ PI4 = 2.D0*PI2
+C GeV**-2 --> millibarn (multiply by GEV2MB to get mb as units)
+ GEV2MB = 0.389365D0
+C precalculate quark charges
+ do i=1,6
+ Q_ch(i) = dble(2-3*mod(i,2))/3.D0
+ Q_ch(-i) = -Q_ch(i)
+
+ Q_ch2(i) = Q_ch(i)**2
+ Q_ch2(-i) = Q_ch2(i)
+
+ Q_ch4(i) = Q_ch2(i)**2
+ Q_ch4(-i) = Q_ch4(i)
+ enddo
+ Q_ch(0) = 0.D0
+ Q_ch2(0) = 0.D0
+ Q_ch4(0) = 0.D0
+
+C initialize /GLOCMS/
+ ECM = 50.D0
+ PMASS(1) = 0.D0
+ PVIRT(1) = 0.D0
+ PMASS(2) = 0.D0
+ PVIRT(2) = 0.D0
+ IFPAP(1) = 22
+ IFPAP(2) = 22
+C initialize /HADVAL/
+ IHFLD(1,1) = 0
+ IHFLD(1,2) = 0
+ IHFLD(2,1) = 0
+ IHFLD(2,2) = 0
+ IHFLS(1) = 1
+ IHFLS(2) = 1
+C initialize /MODELS/
+ ISWMDL(1) = 3
+ MDLNA(1) = 'AMPL MOD'
+ ISWMDL(2) = 1
+ MDLNA(2) = 'MIN-BIAS'
+ ISWMDL(3) = 1
+ MDLNA(3) = 'PTS DISH'
+ ISWMDL(4) = 1
+ MDLNA(4) = 'PTS DISP'
+ ISWMDL(5) = 2
+ MDLNA(5) = 'PTS ASSI'
+ ISWMDL(6) = 3
+ MDLNA(6) = 'HADRONIZ'
+ ISWMDL(7) = 2
+ MDLNA(7) = 'MASS COR'
+ ISWMDL(8) = 3
+ MDLNA(8) = 'PAR SHOW'
+ ISWMDL(9) = 0
+ MDLNA(9) = 'GLU SPLI'
+ ISWMDL(10) = 2
+ MDLNA(10) = 'VIRT PHO'
+ ISWMDL(11) = 0
+ MDLNA(11) = 'LARGE NC'
+ ISWMDL(12) = 0
+ MDLNA(12) = 'LIPA POM'
+ ISWMDL(13) = 1
+ MDLNA(13) = 'QELAS VM'
+ ISWMDL(14) = 2
+ MDLNA(14) = 'ENHA GRA'
+ ISWMDL(15) = 4
+ MDLNA(15) = 'MULT SCA'
+ ISWMDL(16) = 4
+ MDLNA(16) = 'MULT DIF'
+ ISWMDL(17) = 4
+ MDLNA(17) = 'MULT CDF'
+ ISWMDL(18) = 0
+ MDLNA(18) = 'BALAN PT'
+ ISWMDL(19) = 1
+ MDLNA(19) = 'POMV FLA'
+ ISWMDL(20) = 0
+ MDLNA(20) = 'SEA FLA'
+ ISWMDL(21) = 2
+ MDLNA(21) = 'SPIN DEC'
+ ISWMDL(22) = 1
+ MDLNA(22) = 'DIF.MASS'
+ ISWMDL(23) = 1
+ MDLNA(23) = 'DIFF RES'
+ ISWMDL(24) = 0
+ MDLNA(24) = 'PTS HPOM'
+ ISWMDL(25) = 0
+ MDLNA(25) = 'POM CORR'
+ ISWMDL(26) = 1
+ MDLNA(26) = 'OVERLAP '
+ ISWMDL(27) = 0
+ MDLNA(27) = 'MUL R/AN'
+ ISWMDL(28) = 1
+ MDLNA(28) = 'SUR PROB'
+ ISWMDL(29) = 1
+ MDLNA(29) = 'PRIMO KT'
+ ISWMDL(30) = 0
+ MDLNA(30) = 'DIFF. CS'
+ ISWMDL(31) = -9999
+C mass-independent sea flavour ratios (for low-mass strings)
+ PARMDL(1) = 0.425D0
+ PARMDL(2) = 0.425D0
+ PARMDL(3) = 0.15D0
+ PARMDL(4) = 0.D0
+ PARMDL(5) = 0.D0
+ PARMDL(6) = 0.D0
+C suppression by energy momentum conservation
+ PARMDL(8) = 9.D0
+ PARMDL(9) = 7.D0
+C VDM factors
+ PARMDL(10) = 0.866D0
+ PARMDL(11) = 0.288D0
+ PARMDL(12) = 0.288D0
+ PARMDL(13) = 0.288D0
+ PARMDL(14) = 0.866D0
+ PARMDL(15) = 0.288D0
+ PARMDL(16) = 0.288D0
+ PARMDL(17) = 0.288D0
+ PARMDL(18) = 0.D0
+C lower energy limit for initialization
+ PARMDL(19) = 5.D0
+C soft pt for hard scattering remnants
+ PARMDL(20) = 5.D0
+C low energy beta of soft pt distribution 1
+ PARMDL(21) = 4.5D0
+C high energy beta of soft pt distribution 1
+ PARMDL(22) = 3.0D0
+C low energy beta of soft pt distribution 0
+ PARMDL(23) = 2.5D0
+C high energy beta of soft pt distribution 0
+ PARMDL(24) = 0.4D0
+C effective quark mass in photon wave function
+ PARMDL(25) = 0.2D0
+C normalization of unevolved Pomeron PDFs
+ PARMDL(26) = 0.3D0
+C effective VDM parameters for Q**2 dependence of cross section
+ PARMDL(27) = 0.65D0
+ PARMDL(28) = 0.08D0
+ PARMDL(29) = 0.05D0
+ PARMDL(30) = 0.22D0
+ PARMDL(31) = 0.589824D0
+ PARMDL(32) = 0.609961D0
+ PARMDL(33) = 1.038361D0
+ PARMDL(34) = 1.96D0
+C Q**2 suppression of multiple interactions
+ PARMDL(35) = 0.59D0
+C pt cutoff defaults
+ PARMDL(36) = 2.5D0
+ PARMDL(37) = 2.5D0
+ PARMDL(38) = 2.5D0
+ PARMDL(39) = 2.5D0
+C enhancement factor for diffractive cross sections
+ PARMDL(40) = 1.D0
+ PARMDL(41) = 1.D0
+ PARMDL(42) = 1.D0
+C mass in soft pt distribution
+ PARMDL(43) = 0.D0
+C maximum of x allowed for leading particle
+ PARMDL(44) = 0.9D0
+C max. mass sampled in diffraction
+ PARMDL(45) = sqrt(0.4D0)
+C mass threshold in diffraction (2pi mass)
+ PARMDL(46) = 0.3D0
+C regularization of slope parameter in diffraction
+ PARMDL(47) = 4.D0
+C renormalized intercept for enhanced graphs
+ PARMDL(48) = 1.08D0
+C coherence constraint for diff. cross sections
+ PARMDL(49) = sqrt(0.05D0)
+C exponents of x distributions
+C baryon
+ PARMDL(50) = 1.5D0
+ PARMDL(51) = -0.5D0
+ PARMDL(52) = -0.99D0
+ PARMDL(53) = -0.99D0
+C meson (non-strangeness part)
+ PARMDL(54) = -0.5D0
+ PARMDL(55) = -0.5D0
+ PARMDL(56) = -0.99D0
+ PARMDL(57) = -0.99D0
+C meson (strangeness part)
+ PARMDL(58) = -0.2D0
+ PARMDL(59) = -0.2D0
+ PARMDL(60) = -0.99D0
+ PARMDL(61) = -0.99D0
+C particle remnant (no valence quarks)
+ PARMDL(62) = -0.5D0
+ PARMDL(63) = -0.5D0
+ PARMDL(64) = -0.99D0
+ PARMDL(65) = -0.99D0
+C ratio beetween triple-pomeron/reggeon couplings grrp/gppp
+ PARMDL(66) = 10.D0
+C ratio beetween triple-pomeron/reggeon couplings gppr/gppp
+ PARMDL(67) = 10.D0
+C min. abs(t) in diffraction
+ PARMDL(68) = 0.D0
+C max. abs(t) in diffraction
+ PARMDL(69) = 10.D0
+C min. mass for elastic pomerons in central diffraction
+ PARMDL(70) = 2.D0
+C min. mass of diffractive blob in central diffraction
+ PARMDL(71) = 2.D0
+C min. Feynman x cut in central diffraction
+ PARMDL(72) = 0.D0
+C direct pomeron coupling
+ PARMDL(74) = 0.D0
+C relative deviation allowed for energy-momentum conservation
+C energy-momentum relative deviation
+ PARMDL(75) = 0.01D0
+C transverse momentum deviation
+ PARMDL(76) = 0.01D0
+C couplings for unitarization in diffraction
+C non-unitarized pomeron coupling (sqrt(mb))
+ PARMDL(77) = 3.D0
+C rescaling factor for pomeron PDF
+ PARMDL(78) = 3.D0
+C coupling probabilities
+ PARMDL(79) = 1.D0
+ PARMDL(80) = 0.D0
+C scales to calculate alpha-s of matrix element
+ PARMDL(81) = 1.D0
+ PARMDL(82) = 1.D0
+ PARMDL(83) = 1.D0
+C scales to calculate alpha-s of initial state radiation
+ PARMDL(84) = 1.D0
+ PARMDL(85) = 1.D0
+ PARMDL(86) = 1.D0
+C scales to calculate alpha-s of final state radiation
+ PARMDL(87) = 1.D0
+ PARMDL(88) = 1.D0
+ PARMDL(89) = 1.D0
+C scales to calculate PDFs
+ PARMDL(90) = 1.D0
+ PARMDL(91) = 1.D0
+ PARMDL(92) = 1.D0
+C scale for ISR starting virtuality
+ PARMDL(93) = 1.D0
+C min. virtuality to generate time-like showers in ISR
+ PARMDL(94) = 2.D0
+C factor to scale the max. allowed time-like parton shower virtuality
+ PARMDL(95) = 4.D0
+C max. transverse momentum for primordial kt
+ PARMDL(100) = 2.D0
+C weight factors for pt-distribution
+ PARMDL(101) = 2.D0
+ PARMDL(102) = 2.D0
+ PARMDL(103) = 4.D0
+ PARMDL(104) = 2.D0
+ PARMDL(105) = 6.D0
+ PARMDL(106) = 4.D0
+C
+* PARMDL(110-125) reserved for hard scattering
+C currently chosen scales for hard scattering
+ DO 10 I=1,16
+ PARMDL(109+I) = 0.D0
+ 10 CONTINUE
+C virtuality cutoff in initial state evolution
+ PARMDL(126) = PARMDL(36)**2
+ PARMDL(127) = PARMDL(37)**2
+ PARMDL(128) = PARMDL(38)**2
+ PARMDL(129) = PARMDL(39)**2
+C virtuality cutoff for direct contribution to photon PDF
+ PARMDL(130) = 1.D30
+ PARMDL(131) = 1.D30
+ PARMDL(132) = 1.D30
+ PARMDL(133) = 1.D30
+C fraction of events without popcorn
+ PARMDL(134) = -1.D0
+C fraction of diquarks with spin 1 (relative to sum of spin 1 and 0)
+ PARMDL(135) = 0.5D0
+C soft color re-connection (fraction)
+C g g final state
+ PARMDL(140) = 1.D0/64.D0
+C g q final state
+ PARMDL(141) = 1.D0/24.D0
+C q q final state
+ PARMDL(142) = 1.D0/9.D0
+C effective scale in Drees-Godbole like suppresion in photon PDF
+ PARMDL(144) = 0.766D0**2
+C QCD scales (if PDF scales are not used, 4 active flavours)
+ PARMDL(145) = 0.2D0**2
+ PARMDL(146) = 0.2D0**2
+ PARMDL(147) = 0.2D0**2
+C threshold scales for variable flavour calculation (GeV**2)
+ PARMDL(148) = 1.5D0**2
+ PARMDL(149) = 4.5D0**2
+ PARMDL(150) = 175.D0**2
+C constituent quark masses
+ PARMDL(151) = 0.3D0
+ PARMDL(152) = 0.3D0
+ PARMDL(153) = 0.5D0
+ PARMDL(154) = 1.6D0
+ PARMDL(155) = 5.D0
+ PARMDL(156) = 174.D0
+C min. masses of valence quark
+ PARMDL(157) = 0.3D0
+C min. masses of valence diquark
+ PARMDL(158) = 0.8D0
+C min. mass of sea quark
+ PARMDL(159) = 0.D0
+C suppression of strange quarks as photon valences
+ PARMDL(160) = 0.2D0
+C min. masses for strings (used in PHO_SOFTXX)
+ PARMDL(161) = 1.D0
+ PARMDL(162) = 1.D0
+ PARMDL(163) = 1.D0
+ PARMDL(164) = 1.D0
+C min. momentum fraction for soft processes
+ PARMDL(165) = 0.3D0
+C min. phase space for x-sampling
+ PARMDL(166) = 0.135D0
+C Ross-Stodolsky exponent
+ PARMDL(170) = 4.2D0
+C cutoff on photon-pomeron invariant mass in hadron-hadron collisions
+ PARMDL(175) = 2.D0
+
+**sr
+* extra factor multiplying difference between Goulianos and PHOJET-
+* diff. cross sections
+ PARMDL(200) = 0.6D0
+**
+
+C complex amplitudes, eikonal functions
+ IPAMDL(1) = 0
+C allow for Reggeon cuts
+ IPAMDL(2) = 1
+C decay of hadron resonances in diffraction (0 iso, 1 trans, 2 long)
+ IPAMDL(3) = 0
+C polarization of photon resonances (0 none, 1 trans, 2 long)
+ IPAMDL(4) = 1
+C pt of valence partons
+ IPAMDL(5) = 1
+C pt of hard scattering remnant
+ IPAMDL(6) = 2
+C running cutoff for hard scattering
+ IPAMDL(7) = 1
+C intercept used for the calculation of enhanced graphs
+ IPAMDL(8) = 1
+C effective slope of hard scattering amplitde
+ IPAMDL(9) = 1
+C mass dependence of slope parameters
+ IPAMDL(10) = 0
+C lepton-photon vertex 1
+ IPAMDL(11) = 0
+C lepton-photon vertex 2
+ IPAMDL(12) = 0
+C call by DPMJET
+ IPAMDL(13) = 0
+C method to sample x distributions
+ IPAMDL(14) = 3
+C energy-momentum check
+ IPAMDL(15) = 1
+C phase space correction for DPMJET interface
+ IPAMDL(16) = 1
+C fragment strings from projectile/target/central diff. separately
+ IPAMDL(17) = 1
+C method to construct strings for hard interactions
+ IPAMDL(18) = 1
+C method to construct strings for soft sea (pomeron cuts)
+ IPAMDL(19) = 0
+C method to construct strings in pomeron interactions
+ IPAMDL(20) = 0
+C soft color re-connection
+ IPAMDL(21) = 0
+C resummation of triple- and loop-Pomeron
+ IPAMDL(24) = 1
+C resummation of X iterated triple-Pomeron
+ IPAMDL(25) = 1
+C dimension of interpolation table for weights in hard scattering
+ IPAMDL(30) = Max_tab_E
+C dimension of interpolation table for pomeron cut distribution
+ IPAMDL(31) = IEETA1
+C number of cut soft pomerons (restriction by field dimension)
+ IPAMDL(32) = IIMAX
+C number of cut hard pomerons (restriction by field dimension)
+ IPAMDL(33) = KKMAX
+C tau pair production in direct photon-photon collisions
+ IPAMDL(64) = 0
+C currently chosen scales for hard scattering
+C ATTENTION: IPAMDL(65-80) reserved for hard scattering!
+ DO 15 I=1,16
+ IPAMDL(64+I) = -99999
+ 15 CONTINUE
+C scales to calculate alpha-s of matrix element
+ IPAMDL(81) = 1
+ IPAMDL(82) = 1
+ IPAMDL(83) = 1
+C scales to calculate alpha-s of initial state radiation
+ IPAMDL(84) = 1
+ IPAMDL(85) = 1
+ IPAMDL(86) = 1
+C scales to calculate alpha-s of final state radiation
+ IPAMDL(87) = 1
+ IPAMDL(88) = 1
+ IPAMDL(89) = 1
+C scales to calculate PDFs
+ IPAMDL(90) = 1
+ IPAMDL(91) = 1
+ IPAMDL(92) = 1
+C where to get the parameter sets from
+ IPAMDL(99) = 1
+C program PHO_ABORT for fatal errors (simulation of division by zero)
+ IPAMDL(100) = 0
+C initial state parton showers for all / hardest interaction(s)
+ IPAMDL(101) = 1
+C final state parton showers for all / hardest interaction(s)
+ IPAMDL(102) = 1
+C initial virtuality for ISR generation
+ IPAMDL(109) = 1
+C qqbar-gamma coupling in initial state showers
+ IPAMDL(110) = 1
+C generation of time-like showers during ISR
+ IPAMDL(111) = 1
+C reweighting of multiple soft contributions for virtual photons
+ IPAMDL(114) = 1
+C reweighting / use photon virtuality in photon PDF calculations
+ IPAMDL(115) = 0
+C use full QPM model incl. interference terms (direct part in gam-gam)
+ IPAMDL(116) = 0
+C matching sigma_tot to F2 as given by parton density at high Q2
+ IPAMDL(117) = 1
+C use virtuality of target in F2 calculations (two-gamma only)
+ IPAMDL(118) = 1
+C calculation of alpha_em
+ IPAMDL(120) = 1
+C strict pt cutoff for gamma-gamma events
+ IPAMDL(121) = 0
+C photon virtuality sampled in photon flux approximations
+ IPAMDL(174) = 1
+C photon-pomeron: 0,1,2: both,left,right photon emission
+ IPAMDL(175) = 0
+C keep full history information in PHOJET-JETSET interface
+ IPAMDL(178) = 1
+C max. number of conservation law violations allowed in one run
+ IPAMDL(179) = 20
+C selection of soft X values
+C max. iteration number in PHO_SELSXS
+ IPAMDL(180) = 50
+C max. iteration number in PHO_SELSXR
+ IPAMDL(181) = 200
+C max. iteration number in PHO_SELSX2
+ IPAMDL(182) = 100
+C max. iteration number in PHO_SELSXI
+ IPAMDL(183) = 50
+
+C initialize /PROBAB/
+ IEEMAX = IEETA1
+ IMAX = IIMAX
+ KMAX = KKMAX
+
+ DO 20 I=1,30
+ PARMDL(300+I) = -100000.D0
+ 20 CONTINUE
+C initialize /POHDRN/
+ QMASS(1) = PARMDL(151)
+ QMASS(2) = PARMDL(152)
+ QMASS(3) = PARMDL(153)
+ QMASS(4) = PARMDL(154)
+ QMASS(5) = PARMDL(155)
+ QMASS(6) = PARMDL(156)
+ BET = 8.D0
+ PCOUDI = 0.D0
+ VALPRG(1) = 1.D0
+ VALPRG(2) = 1.D0
+C number of light flavours (quarks treated as massless)
+ NFS = 4
+C initialize /POCUT1/
+ PTCUT(1) = PARMDL(36)
+ PTCUT(2) = PARMDL(37)
+ PTCUT(3) = PARMDL(38)
+ PTCUT(4) = PARMDL(39)
+ PSOMIN = 0.D0
+ XSOMIN = 0.D0
+C initialize /POHAPA/
+ NFbeta = 4
+ NF = 4
+ BQCD(1) = PI4/(11.D0-(2.D0/3.D0)*3)
+ BQCD(2) = PI4/(11.D0-(2.D0/3.D0)*4)
+ BQCD(3) = PI4/(11.D0-(2.D0/3.D0)*5)
+ BQCD(4) = PI4/(11.D0-(2.D0/3.D0)*6)
+C initialize /POGAUP/
+ NGAUP1 = 12
+ NGAUP2 = 12
+ NGAUET = 16
+ NGAUIN = 12
+ NGAUSO = 96
+C initialize //
+ DO 30 I=1,100
+ IDEB(I) = 0
+ 30 CONTINUE
+C initialize /PROCES/
+ DO 35 I=1,11
+ IPRON(I,1) = 1
+ 35 CONTINUE
+
+C DPMJET default: no elastic scattering
+ IPRON(2,1) = 0
+
+ DO 36 K=2,4
+ DO 37 I=2,11
+ IPRON(I,K) = 0
+ 37 CONTINUE
+ IPRON(1,K) = 1
+ IPRON(8,K) = 1
+ 36 CONTINUE
+C initialize /POSVDM/
+ TWOPIM = 0.28D0
+ RMIN(1) = 0.285D0
+ RMIN(2) = 0.45D0
+ RMIN(3) = 1.D0
+ RMIN(4) = TWOPIM
+ VMAS(1) = 0.770D0
+ VMAS(2) = 0.787D0
+ VMAS(3) = 1.02D0
+ VMAS(4) = TWOPIM
+ GAMM(1) = 0.155D0
+ GAMM(2) = 0.01D0
+ GAMM(3) = 0.0045D0
+ GAMM(4) = 1.D0
+ RMAX(1) = VMAS(1)+TWOPIM
+ RMAX(2) = VMAS(2)+TWOPIM
+ RMAX(3) = VMAS(3)+TWOPIM
+ RMAX(4) = VMAS(1)+TWOPIM
+ VMSL(1) = 11.D0
+ VMSL(2) = 10.D0
+ VMSL(3) = 6.D0
+ VMSL(4) = 4.D0
+ VMFA(1) = 0.0033D0
+ VMFA(2) = 0.00036D0
+ VMFA(3) = 0.0002D0
+ VMFA(4) = 0.0002D0
+C initialize /PODGL1/
+ Q2MISR(1) = PARMDL(36)**2
+ Q2MISR(2) = PARMDL(36)**2
+ PMISR(1) = 1.D0
+ PMISR(2) = 1.D0
+ ZMISR(1) = 0.001D0
+ ZMISR(2) = 0.001D0
+ AL2ISR(1) = 0.046D0
+ AL2ISR(2) = 0.046D0
+ NFSISR = 4
+C initialize /POPISR/
+ DO 40 I=1,50
+ IPOISR(1,2,I) = 0
+ IPOISR(2,2,I) = 0
+ 40 CONTINUE
+C initialize /POHPRO/
+ PROC(0) = 'sum over processes'
+ PROC(1) = 'G +G --> G +G '
+ PROC(2) = 'Q +QB --> G +G '
+ PROC(3) = 'G +Q --> G +Q '
+ PROC(4) = 'G +G --> Q +QB '
+ PROC(5) = 'Q +QB --> Q +QB '
+ PROC(6) = 'Q +QB --> QP +QBP'
+ PROC(7) = 'Q +Q --> Q +Q '
+ PROC(8) = 'Q +QP --> Q +QP '
+ PROC(9) = 'resolved processes'
+ PROC(10) = 'gam+Q --> G +Q '
+ PROC(11) = 'gam+G --> Q +QB '
+ PROC(12) = 'Q +gam--> G +Q '
+ PROC(13) = 'G +gam--> Q +QB '
+ PROC(14) = 'gam+gam--> Q +QB '
+ PROC(15) = 'direct processes '
+ PROC(16) = 'gam+gam--> l+ +l- '
+
+C initialize /POHRCS/
+ do M=1,Max_pro_2
+ HWgx(M) = 0.D0
+ HSig(M) = 0.D0
+ Hdpt(M) = 0.D0
+ enddo
+ DO I=0,4
+ DO M=-1,Max_pro_2
+C switch all hard subprocesses on
+ MH_pro_on(M,I) = 1
+C reset all counters
+ MH_tried(M,I) = 0
+ MH_acc_1(M,I) = 0
+ MH_acc_2(M,I) = 0
+ ENDDO
+ MH_pro_on(16,I) = 0
+ ENDDO
+
+C initialize /POHTAB/
+ do I=0,4
+ IH_Ecm_up(I) = 0
+ IH_Q2a_up(I) = 0
+ IH_Q2b_up(I) = 0
+ HEcm_tab(1,I) = 0.D0
+ enddo
+ HEcm_last = 0.D0
+ IHa_last = 0.D0
+ IHb_last = 0.D0
+
+C initialize /POFSRC/
+ IGHEL(1) = -1
+ IGHEL(2) = -1
+C initialize /LEPCUT/
+ ECMIN = 5.D0
+ ECMAX = 1.D+30
+ EEMIN1 = 1.D0
+ EEMIN2 = 1.D0
+ YMAX1 = -1.D0
+ YMAX2 = -1.D0
+ THMIN1 = 0.D0
+ THMAX1 = PI
+ THMIN2 = 0.D0
+ THMAX2 = PI
+ ITAG1 = 1
+ ITAG2 = 1
+C initialize /POWGHT/
+ DO 70 I=1,20
+ HSWCUT(I) = 0.D0
+ ISWCUT(I) = 0
+ 70 CONTINUE
+ EVWGHT(1) = 1.D0
+ IVWGHT(1) = 0
+ SIGGEN(1) = 0.D0
+ SIGGEN(2) = 0.D0
+ SIGGEN(3) = 0.D0
+ SIGGEN(4) = 0.D0
+
+ END
+
+CDECK ID>, PHO_PARDAT
+ SUBROUTINE PHO_PARDAT
+C***********************************************************************
+C
+C particle data (based on 1996 PDG naming scheme and data tables)
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+C particle decay data
+ double precision wg_sec_list
+ integer idec_list,isec_list
+ COMMON /POPAR3/ wg_sec_list(500),idec_list(3,300),
+ & isec_list(3,500)
+
+C external functions
+
+ integer ipho_pdg2id
+ double precision pho_pmass
+
+C local variables for storing data tables
+
+ integer number,ich3,iba3,iq_linear,idec_linear,isec_linear,
+ & id_psm_linear,id_vem_linear,id_b8_linear,id_b10_linear
+
+ dimension number(300),ich3(300),iba3(300),iq_linear(900),
+ & idec_linear(900),isec_linear(900),id_psm_linear(36),
+ & id_vem_linear(36),id_b8_linear(216),id_b10_linear(216)
+
+ double precision xmass,gamma,wg_chan
+ dimension xmass(300),gamma(300),wg_chan(300)
+
+ character*12 name
+ dimension name(300)
+
+ integer i,i1,i2,ii,j,jj,k,l,ichan,i_tab_max,K8,K10,L8,L10
+ double precision AM1,AM2,AM2P,AM2V,AM82,AM102,AMM
+
+ integer itmp
+
+ DATA i_tab_max /260/
+
+ DATA (number(K),K= 1, 171) /
+ & 1, 2, 3, 4, 5, 6, 1103, 2101, 2103,
+ & 2203, 3101, 3103, 3201, 3203, 3303, 4101, 4103, 4201,
+ & 4203, 4301, 4303, 4403, 81, 82, 90, 91, 92,
+ & 110, 990, 21, 22, 24, 23, 11, 13, 15,
+ & 12, 14, 16, 211, 111, 221, 113, 213, 223,
+ & 331, 10221, 10111, 10211, 333, 10223, 10113, 10213, 20113,
+ & 20213, 225, 20223, 20221, 20111, 20211, 115, 215, 30223,
+ & 50223, 40113, 40213, 50221, 335, 60223, 227, 10115, 10215,
+ & 10333, 117, 217, 30113, 30213, 60221, 337, 20225, 229,
+ & 30225, 40225, 321, 311, 310, 130, 323, 313, 10313,
+ & 10323, 20313, 20323, 30313, 30323, 10311, 10321, 325, 315,
+ & 40313, 40323, 10315, 10325, 317, 327, 20315, 20325, 319,
+ & 329, 411, 421, 423, 413, 10423, 425, 415, 431,
+ & 433, 10433, 521, 511, 513, 523, 531, 441, 443,
+ & 10441, 10443, 445, 20443, 30443, 40443, 50443, 60443, 553,
+ & 551, 10553, 555, 20553, 10551, 70553, 10555, 30553, 40553,
+ & 50553, 60553, 2212, 2112, 12112, 12212, 1214, 2124, 22112,
+ & 22212, 32112, 32212, 2116, 2216, 12116, 12216, 21214, 22124,
+ & 42112, 42212, 31214, 32124, 1218, 2128, 1114, 2114, 2214/
+ DATA (number(K),K= 172, 260) /
+ & 2224, 31114, 32114, 32214, 32224, 1112, 1212, 2122, 2222,
+ & 11114, 12114, 12214, 12224, 1116, 1216, 2126, 2226, 21112,
+ & 21212, 22122, 22222, 21114, 22114, 22214, 22224, 11116, 11216,
+ & 12126, 12226, 1118, 2118, 2218, 2228, 3122, 13122, 3124,
+ & 23122, 33122, 13124, 43122, 53122, 3126, 13126, 23124, 3128,
+ & 23126, 3222, 3212, 3112, 3224, 3214, 3114, 13112, 13212,
+ & 13222, 13114, 13214, 13224, 23112, 23212, 23222, 3116, 3216,
+ & 3226, 13116, 13216, 13226, 23114, 23214, 23224, 3118, 3218,
+ & 3228, 3322, 3312, 3324, 3314, 13314, 13324, 3334, 4122,
+ & 14122, 4222, 4212, 4112, 4232, 4132, 4332, 5122/
+ DATA (name(K),K= 1, 76) /
+ &'d ','u ','s ','c ',
+ &'b ','t ','(dd)_1 ','(ud)_0 ',
+ &'(ud)_1 ','(uu)_1 ','(sd)_0 ','(sd)_1 ',
+ &'(su)_0 ','(su)_1 ','(ss)_1 ','(cd)_0 ',
+ &'(cd)_1 ','(cu)_0 ','(cu)_1 ','(cs)_0 ',
+ &'(cs)_1 ','(cc)_1 ','remnant 1 ','remnant 2 ',
+ &'string ','mod. string ','coll. string','reggeon ',
+ &'pomeron ','gluon ','gamma ','W ',
+ &'Z ','e ','mu ','tau ',
+ &'nu(e) ','nu(mu) ','nu(tau) ','pi ',
+ &'pi ','eta ','rho(770) ','rho(770) ',
+ &'ome(782) ','etap(958) ','f(0)(980) ','a(0)(980) ',
+ &'a(0)(980) ','phi(1020) ','h(1)(1170) ','b(1)(1235) ',
+ &'b(1)(1235) ','a(1)(1260) ','a(1)(1260) ','f(2)(1270) ',
+ &'f(1)(1285) ','eta(1295) ','pi(1300) ','pi(1300) ',
+ &'a(2)(1320) ','a(2)(1320) ','f(1)(1420) ','ome(1420) ',
+ &'rho(1450) ','rho(1450) ','f(0)(1500) ','f(2)p(1525) ',
+ &'ome(1600) ','ome(3)(1670)','pi(2)(1670) ','pi(2)(1670) ',
+ &'phi(1680) ','rho(3)(1690)','rho(3)(1690)','rho(1700) '/
+ DATA (name(K),K= 77, 152) /
+ &'rho(1700) ','f(J)(1710) ','phi(3)(1850)','f(2)(2010) ',
+ &'f(4)(2050) ','f(2)(2300) ','f(2)(2340) ','K ',
+ &'K ','K(S) ','K(L) ','K*(892) ',
+ &'K*(892) ','K(1)(1270) ','K(1)(1270) ','K(1)(1400) ',
+ &'K(1)(1400) ','K*(1410) ','K*(1410) ','K(0)*(1430) ',
+ &'K(0)*(1430) ','K(2)*(1430) ','K(2)*(1430) ','K*(1680) ',
+ &'K*(1680) ','K(2)(1770) ','K(2)(1770) ','K(3)*(1780) ',
+ &'K(3)*(1780) ','K(2)(1820) ','K(2)(1820) ','K(4)*(2045) ',
+ &'K(4)*(2045) ','D ','D ','D*(2007) ',
+ &'D*(2010) ','D(1)(2420) ','D(2)*(2460) ','D(2)*(2460) ',
+ &'D(s) ','D(s)* ','D(s1)(2536) ','B ',
+ &'B ','B* ','B* ','B(s) ',
+ &'eta(c)(1S) ','J/psi(1S) ','chi(c0)(1P) ','chi(c1)(1P) ',
+ &'chi(c2)(1P) ','psi(2S) ','psi(3770) ','psi(4040) ',
+ &'psi(4160) ','psi(4415) ','Ups(1S) ','chi(b0)(1P) ',
+ &'chi(b1)(1P) ','chi(b2)(1P) ','Ups(2S) ','chi(b0)(2P) ',
+ &'chi(b1)(2P) ','chi(b2)(2P) ','Ups(3S) ','Ups(4S) ',
+ &'Ups(10860) ','Ups(11020) ','p ','n ',
+ &'N(1440) ','N(1440) ','N(1520) ','N(1520) '/
+ DATA (name(K),K= 153, 228) /
+ &'N(1535) ','N(1535) ','N(1650) ','N(1650) ',
+ &'N(1675) ','N(1675) ','N(1680) ','N(1680) ',
+ &'N(1700) ','N(1700) ','N(1710) ','N(1710) ',
+ &'N(1720) ','N(1720) ','N(2190) ','N(2190) ',
+ &'Del(1232) ','Del(1232) ','Del(1232) ','Del(1232) ',
+ &'Del(1600) ','Del(1600) ','Del(1600) ','Del(1600) ',
+ &'Del(1620) ','Del(1620) ','Del(1620) ','Del(1620) ',
+ &'Del(1700) ','Del(1700) ','Del(1700) ','Del(1700) ',
+ &'Del(1905) ','Del(1905) ','Del(1905) ','Del(1905) ',
+ &'Del(1910) ','Del(1910) ','Del(1910) ','Del(1910) ',
+ &'Del(1920) ','Del(1920) ','Del(1920) ','Del(1920) ',
+ &'Del(1930) ','Del(1930) ','Del(1930) ','Del(1930) ',
+ &'Del(1950) ','Del(1950) ','Del(1950) ','Del(1950) ',
+ &'Lambda ','Lam(1405) ','Lam(1520) ','Lam(1600) ',
+ &'Lam(1670) ','Lam(1690) ','Lam(1800) ','Lam(1810) ',
+ &'Lam(1820) ','Lam(1830) ','Lam(1890) ','Lam(2100) ',
+ &'Lam(2110) ','Sigma ','Sigma ','Sigma ',
+ &'Sig(1385) ','Sig(1385) ','Sig(1385) ','Sig(1660) ',
+ &'Sig(1660) ','Sig(1660) ','Sig(1670) ','Sig(1670) '/
+ DATA (name(K),K= 229, 260) /
+ &'Sig(1670) ','Sig(1750) ','Sig(1750) ','Sig(1750) ',
+ &'Sig(1775) ','Sig(1775) ','Sig(1775) ','Sig(1915) ',
+ &'Sig(1915) ','Sig(1915) ','Sig(1940) ','Sig(1940) ',
+ &'Sig(1940) ','Sig(2030) ','Sig(2030) ','Sig(2030) ',
+ &'Xi ','Xi ','Xi(1530) ','Xi(1530) ',
+ &'Xi(1820) ','Xi(1820) ','Omega ','Lam(c) ',
+ &'Lam(c)(2593)','Sig(c)(2455)','Sig(c)(2455)','Sig(c)(2455)',
+ &'Xi(c) ','Xi(c) ','Ome(c) ','Lam(b) '/
+ DATA (ich3(K),K= 1, 260) /
+ &-1, 2,-1, 2,-1, 2,-2, 1, 1, 4,-2,-2, 1, 1,-2, 1, 1, 4, 4, 1, 1, 4,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,-3,-3,-3, 0, 0, 0, 3, 0, 0, 0, 3,
+ & 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3,
+ & 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3,
+ & 0, 0, 3, 0, 3, 0, 3, 0, 3, 3, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 3,
+ & 0, 0, 3, 0, 0, 3, 3, 3, 3, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 3,
+ & 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3,-3, 0, 3, 6,-3, 0, 3, 6,
+ &-3, 0, 3, 6,-3, 0, 3, 6,-3, 0, 3, 6,-3, 0, 3, 6,-3, 0, 3, 6,-3, 0,
+ & 3, 6,-3, 0, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,-3,
+ & 3, 0,-3,-3, 0, 3,-3, 0, 3,-3, 0, 3,-3, 0, 3,-3, 0, 3,-3, 0, 3,-3,
+ & 0, 3, 0,-3, 0,-3,-3, 0,-3, 3, 3, 6, 3, 0, 3, 0, 0, 0/
+ DATA (iba3(K),K= 1, 260) /
+ &1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,
+ &0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ &0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ &0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ &0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ &3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ &3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
+ &3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3/
+ DATA (iq_linear(K),K= 1, 418) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2,
+ & 1, 0, 2, 1, 0, 2, 2, 0, 3, 1, 0, 3, 1, 0, 3, 2, 0, 3, 2, 0, 3, 3,
+ & 0, 4, 1, 0, 4, 1, 0, 4, 2, 0, 4, 2, 0, 4, 3, 0, 4, 3, 0, 4, 4, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 2,-1, 0, 1,-1, 0, 2,-2, 0, 1,-1, 0, 2,-1, 0,
+ & 2,-2, 0, 3,-3, 0, 2,-2, 0, 1,-1, 0, 2,-1, 0, 3,-3, 0, 2,-2, 0, 1,
+ &-1, 0, 2,-1, 0, 1,-1, 0, 2, 1, 0, 2,-2, 0, 2,-2, 0, 2,-2, 0, 1,-1,
+ & 0, 2,-1, 0, 1,-1, 0, 2,-1, 0, 2,-2, 0, 2,-2, 0, 1,-1, 0, 2,-1, 0,
+ & 2,-2, 0, 3,-3, 0, 2,-2, 0, 2,-2, 0, 1,-1, 0, 2,-1, 0, 3,-3, 0, 1,
+ &-1, 0, 2,-1, 0, 1,-1, 0, 2,-1, 0, 2,-2, 0, 3,-3, 0, 2,-2, 0, 2,-2,
+ & 0, 2,-2, 0, 2,-2, 0, 2,-3, 0, 1,-3, 0, 1,-3, 0, 3,-1, 0, 2,-3, 0,
+ & 1,-3, 0, 1,-3, 0, 2,-3, 0, 1,-3, 0, 2,-3, 0, 1,-3, 0, 2,-3, 0, 1,
+ &-3, 0, 2,-3, 0, 2,-3, 0, 1,-3, 0, 1,-3, 0, 2,-3, 0, 1,-3, 0, 2,-3,
+ & 0, 1,-3, 0, 2,-3, 0, 1,-3, 0, 2,-3, 0, 1,-3, 0, 2,-3, 0, 4,-1, 0,
+ & 4,-2, 0, 4,-2, 0, 4,-1, 0, 4,-2, 0, 4,-2, 0, 4,-1, 0, 4,-3, 0, 4,
+ &-3, 0, 4,-3, 0, 2,-5, 0, 1,-5, 0, 1,-5, 0, 2,-5, 0, 3,-5, 0, 4,-4,
+ & 0, 4,-4, 0, 4,-4, 0, 4,-4, 0, 4,-4, 0, 4,-4, 0, 4,-4, 0, 4,-4, 0,
+ & 4,-4, 0, 4,-4, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 5/
+ DATA (iq_linear(K),K= 419, 780) /
+ &-5, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 5,-5, 0, 2, 2,
+ & 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1,
+ & 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2,
+ & 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1,
+ & 1, 2, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2,
+ & 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2,
+ & 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1,
+ & 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1,
+ & 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 2, 3, 1, 2, 3,
+ & 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1,
+ & 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 2, 2, 3, 2, 1, 3, 1, 1, 3,
+ & 3, 2, 2, 3, 2, 1, 3, 1, 1, 3, 1, 1, 3, 2, 1, 3, 2, 2, 3, 1, 1, 3,
+ & 2, 1, 3, 2, 2, 3, 1, 1, 3, 2, 1, 3, 2, 2, 3, 1, 1, 3, 2, 1, 3, 2,
+ & 2, 3, 1, 1, 3, 2, 1, 3, 2, 2, 3, 1, 1, 3, 2, 1, 3, 2, 2, 3, 1, 1,
+ & 3, 2, 1, 3, 2, 2, 2, 3, 3, 1, 3, 3, 2, 3, 3, 1, 3, 3, 3, 3, 1, 3,
+ & 3, 2, 3, 3, 3, 2, 1, 4, 4, 1, 2, 2, 2, 4, 2, 1, 2, 1, 1, 4, 3, 2,
+ & 2, 3, 1, 2, 3, 3, 4, 5, 1, 2/
+ DATA (xmass(K),K= 1, 114) /
+ &3.0000E-01,3.0000E-01,3.5000E-01,1.4500E+00,4.5000E+00,1.7400E+02,
+ &7.7133E-01,5.7933E-01,7.7133E-01,7.7133E-01,8.0473E-01,9.2953E-01,
+ &8.0473E-01,9.2953E-01,1.0936E+00,1.9691E+00,2.0081E+00,1.9691E+00,
+ &2.0081E+00,2.1543E+00,2.1797E+00,3.2753E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,8.0410E+01,9.1187E+01,5.1100E-04,1.0566E-01,1.7771E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,1.3957E-01,1.3498E-01,5.4730E-01,
+ &7.7000E-01,7.7000E-01,7.8194E-01,9.5778E-01,9.8000E-01,9.8340E-01,
+ &9.8340E-01,1.0194E+00,1.1700E+00,1.2295E+00,1.2295E+00,1.2300E+00,
+ &1.2300E+00,1.2750E+00,1.2819E+00,1.2970E+00,1.3000E+00,1.3000E+00,
+ &1.3181E+00,1.3181E+00,1.4262E+00,1.4190E+00,1.4650E+00,1.4650E+00,
+ &1.5000E+00,1.5250E+00,1.6490E+00,1.6670E+00,1.6700E+00,1.6700E+00,
+ &1.6800E+00,1.6910E+00,1.6910E+00,1.7000E+00,1.7000E+00,1.7120E+00,
+ &1.8540E+00,2.0100E+00,2.0440E+00,2.2970E+00,2.3400E+00,4.9368E-01,
+ &4.9767E-01,4.9767E-01,4.9767E-01,8.9166E-01,8.9610E-01,1.2720E+00,
+ &1.2720E+00,1.4020E+00,1.4020E+00,1.4140E+00,1.4140E+00,1.4290E+00,
+ &1.4290E+00,1.4256E+00,1.4324E+00,1.7170E+00,1.7170E+00,1.7730E+00,
+ &1.7730E+00,1.7760E+00,1.7760E+00,1.8160E+00,1.8160E+00,2.0450E+00,
+ &2.0450E+00,1.8693E+00,1.8646E+00,2.0067E+00,2.0100E+00,2.4222E+00/
+ DATA (xmass(K),K= 115, 228) /
+ &2.4589E+00,2.4590E+00,1.9685E+00,2.1124E+00,2.5353E+00,5.2789E+00,
+ &5.2792E+00,5.3249E+00,5.3249E+00,5.3693E+00,2.9798E+00,3.0969E+00,
+ &3.4173E+00,3.5105E+00,3.5562E+00,3.6860E+00,3.7699E+00,4.0400E+00,
+ &4.1590E+00,4.4150E+00,9.4604E+00,9.8598E+00,9.8919E+00,9.9132E+00,
+ &1.0023E+01,1.0232E+01,1.0255E+01,1.0268E+01,1.0355E+01,1.0580E+01,
+ &1.0865E+01,1.1019E+01,9.3827E-01,9.3957E-01,1.4400E+00,1.4400E+00,
+ &1.5200E+00,1.5200E+00,1.5350E+00,1.5350E+00,1.6500E+00,1.6500E+00,
+ &1.6750E+00,1.6750E+00,1.6800E+00,1.6800E+00,1.7000E+00,1.7000E+00,
+ &1.7100E+00,1.7100E+00,1.7200E+00,1.7200E+00,2.1900E+00,2.1900E+00,
+ &1.2320E+00,1.2320E+00,1.2320E+00,1.2320E+00,1.6000E+00,1.6000E+00,
+ &1.6000E+00,1.6000E+00,1.6200E+00,1.6200E+00,1.6200E+00,1.6200E+00,
+ &1.7000E+00,1.7000E+00,1.7000E+00,1.7000E+00,1.9050E+00,1.9050E+00,
+ &1.9050E+00,1.9050E+00,1.9100E+00,1.9100E+00,1.9100E+00,1.9100E+00,
+ &1.9200E+00,1.9200E+00,1.9200E+00,1.9200E+00,1.9300E+00,1.9300E+00,
+ &1.9300E+00,1.9300E+00,1.9500E+00,1.9500E+00,1.9500E+00,1.9500E+00,
+ &1.1157E+00,1.4070E+00,1.5195E+00,1.6000E+00,1.6700E+00,1.6900E+00,
+ &1.8000E+00,1.8100E+00,1.8200E+00,1.8300E+00,1.8900E+00,2.1000E+00,
+ &2.1100E+00,1.1894E+00,1.1926E+00,1.1974E+00,1.3828E+00,1.3837E+00,
+ &1.3872E+00,1.6600E+00,1.6600E+00,1.6600E+00,1.6700E+00,1.6700E+00/
+ DATA (xmass(K),K= 229, 260) /
+ &1.6700E+00,1.7500E+00,1.7500E+00,1.7500E+00,1.7750E+00,1.7750E+00,
+ &1.7750E+00,1.9150E+00,1.9150E+00,1.9150E+00,1.9400E+00,1.9400E+00,
+ &1.9400E+00,2.0300E+00,2.0300E+00,2.0300E+00,1.3149E+00,1.3213E+00,
+ &1.5318E+00,1.5350E+00,1.8230E+00,1.8230E+00,1.6724E+00,2.2849E+00,
+ &2.5939E+00,2.4528E+00,2.4536E+00,2.4522E+00,2.4656E+00,2.4703E+00,
+ &2.7040E+00,5.6240E+00/
+ DATA (gamma(K),K= 1, 114) /
+ &8.0000E-01,8.0000E-01,8.0000E-01,8.0000E-01,8.0000E-01,8.0000E-01,
+ &8.0000E-01,8.0000E-01,8.0000E-01,8.0000E-01,8.0000E-01,8.0000E-01,
+ &8.0000E-01,8.0000E-01,8.0000E-01,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,2.0600E+00,2.4900E+00,0.0000E+00,2.9959E-19,2.2700E-12,
+ &0.0000E+00,0.0000E+00,0.0000E+00,2.5284E-17,7.8000E-09,1.1800E-06,
+ &1.5070E-01,1.5070E-01,8.4100E-03,2.0300E-04,0.0000E+00,0.0000E+00,
+ &0.0000E+00,4.4300E-03,3.6000E-01,1.4200E-01,1.4200E-01,0.0000E+00,
+ &0.0000E+00,1.8550E-01,2.4000E-02,5.3000E-02,0.0000E+00,0.0000E+00,
+ &1.0700E-01,1.0700E-01,5.5000E-02,1.7000E-01,3.1000E-01,3.1000E-01,
+ &1.1200E-01,7.6000E-02,2.2000E-01,1.6800E-01,2.5800E-01,2.5800E-01,
+ &1.5000E-01,1.6000E-01,1.6000E-01,2.4000E-01,2.4000E-01,1.3300E-01,
+ &8.7000E-02,2.0000E-01,2.0800E-01,1.5000E-01,3.2000E-01,5.3140E-17,
+ &0.0000E+00,7.3730E-15,1.2730E-17,5.0800E-02,5.0500E-02,9.0000E-02,
+ &9.0000E-02,1.7400E-01,1.7400E-01,2.3200E-01,2.3200E-01,2.8700E-01,
+ &2.8700E-01,9.8500E-02,1.0900E-01,3.2000E-01,3.2000E-01,1.8600E-01,
+ &1.8600E-01,1.5900E-01,1.5900E-01,2.7600E-01,2.7600E-01,1.9800E-01,
+ &1.9800E-01,6.2300E-13,1.5860E-12,5.0000E-03,2.0000E-03,1.8900E-02/
+ DATA (gamma(K),K= 115, 228) /
+ &2.3000E-02,2.5000E-02,1.4100E-12,2.0000E-03,0.0000E+00,3.9900E-13,
+ &4.2200E-13,0.0000E+00,0.0000E+00,4.2700E-13,1.3200E-02,8.7000E-05,
+ &1.4000E-02,8.8000E-04,2.0000E-03,2.7700E-04,2.3600E-02,5.2000E-02,
+ &7.8000E-02,4.3000E-02,5.2500E-05,0.0000E+00,0.0000E+00,0.0000E+00,
+ &4.4000E-05,0.0000E+00,0.0000E+00,0.0000E+00,2.6300E-05,1.0000E-02,
+ &1.1000E-01,7.9000E-02,0.0000E+00,7.4240E-28,3.5000E-01,3.5000E-01,
+ &1.2000E-01,1.2000E-01,1.5000E-01,1.5000E-01,1.5000E-01,1.5000E-01,
+ &1.5000E-01,1.5000E-01,1.3000E-01,1.3000E-01,1.0000E-01,1.0000E-01,
+ &1.0000E-01,1.0000E-01,1.5000E-01,1.5000E-01,4.5000E-01,4.5000E-01,
+ &1.2000E-01,1.2000E-01,1.2000E-01,1.2000E-01,3.5000E-01,3.5000E-01,
+ &3.5000E-01,3.5000E-01,1.5000E-01,1.5000E-01,1.5000E-01,1.5000E-01,
+ &3.0000E-01,3.0000E-01,3.0000E-01,3.0000E-01,3.5000E-01,3.5000E-01,
+ &3.5000E-01,3.5000E-01,2.5000E-01,2.5000E-01,2.5000E-01,2.5000E-01,
+ &2.0000E-01,2.0000E-01,2.0000E-01,2.0000E-01,3.5000E-01,3.5000E-01,
+ &3.5000E-01,3.5000E-01,3.0000E-01,3.0000E-01,3.0000E-01,3.0000E-01,
+ &2.5010E-15,5.0000E-02,1.5600E-02,1.5000E-01,3.5000E-02,6.0000E-02,
+ &3.0000E-01,1.5000E-01,8.0000E-02,9.5000E-02,1.0000E-01,2.0000E-01,
+ &2.0000E-01,8.2400E-15,8.9000E-06,4.4500E-15,3.5800E-02,3.6000E-02,
+ &3.9400E-02,1.0000E-01,1.0000E-01,1.0000E-01,6.0000E-02,6.0000E-02/
+ DATA (gamma(K),K= 229, 260) /
+ &6.0000E-02,9.0000E-02,9.0000E-02,9.0000E-02,1.2000E-01,1.2000E-01,
+ &1.2000E-01,1.2000E-01,1.2000E-01,1.2000E-01,2.2000E-01,2.2000E-01,
+ &2.2000E-01,1.8000E-01,1.8000E-01,1.8000E-01,2.2700E-15,4.0200E-15,
+ &9.1000E-03,9.9000E-03,2.4000E-02,2.4000E-02,8.0100E-15,3.1900E-12,
+ &3.6000E-03,0.0000E+00,0.0000E+00,0.0000E+00,1.8600E-12,6.7000E-12,
+ &1.0200E-11,5.3100E-13/
+ DATA (idec_linear(K),K= 1, 304) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 3, 1, 1, 2, 2, 6, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 3, 7, 7, 3, 8, 9, 1, 10, 14, 1, 15,
+ & 16, 1, 17, 17, 1, 18, 20, 1, 21, 24, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 1, 25, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30, 32,
+ & 1, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 35, 37, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 1, 38, 39, 0, 0, 0, 0, 0,
+ & 0, 1, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 41, 46, 0, 0, 0, 3,
+ & 47, 48, 3, 49, 52, 1, 53, 54, 1, 55, 56, 1, 57, 58, 1, 59,
+ & 60, 0, 0, 0, 0, 0, 0, 1, 61, 68, 1, 69, 76, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA (idec_linear(K),K= 305, 608) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 2, 77, 78, 2, 79, 82, 1, 83, 84,
+ & 1, 85, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 88, 90, 1,
+ & 91, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 2, 93, 95, 1, 96, 98, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 1, 99,101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,102,102, 1,103,112, 1,
+ &113,122, 0, 0, 0, 0, 0, 0, 1,123,129, 1,130,136, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 1,137,144, 1,145,152, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 1,153,153, 1,154,155, 1,156,
+ &157, 1,158,158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,159,162, 1,
+ &163,169, 1,170,176, 1,177,180, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA (idec_linear(K),K= 609, 780) /
+ & 0, 0, 0, 0, 3,181,182, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,183,184, 3,185,
+ &185, 3,186,186, 1,187,189, 1,190,192, 1,193,194, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,195,203, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 1,204,216, 0, 0, 0, 3,217,217, 3,
+ &218,218, 1,219,220, 1,221,222, 0, 0, 0, 0, 0, 0, 2,223,
+ &225, 2,226,239, 0, 0, 0, 2,240,240, 2,241,241, 2,242,242,
+ & 2,243,246, 2,247,251, 2,252,255, 0, 0, 0/
+ DATA (isec_linear(K),K= 1, 152) /
+ & 11, 12, -12, 13, -14, 16, 11, -12,
+ & 16, -213, 16, 0, -211, 16, 0, -323,
+ & 16, 0, -13, 12, 0, 22, 22, 0,
+ & 22, -11, 11, 22, 22, 0, 111, 22,
+ & 22, 111, 111, 111, 211, -211, 111, 211,
+ & -211, 22, 211, -211, 0, 111, 111, 0,
+ & 211, 111, 0, 211, -211, 111, 211, -211,
+ & 0, 111, 22, 0, 221, 211, -211, 221,
+ & 111, 111, 211, -211, 22, 22, 22, 0,
+ & 321, -321, 0, 130, 310, 0, 113, 111,
+ & 0, 211, -211, 111, 221, 22, 0, 113,
+ & 111, 0, -213, 211, 0, 213, -211, 0,
+ & 211, -211, 0, 111, 111, 0, 113, 111,
+ & 0, -213, 211, 0, 213, -211, 0, 311,
+ & -313, 0, -311, 313, 0, 113, 211, -211,
+ & -13, 12, 0, 211, 111, 0, 211, 211,
+ & -211, 211, 111, 111, -13, 111, 12, -11,
+ & 111, 12, 211, -211, 0, 111, 111, 0,
+ & 111, 111, 111, 211, -211, 111, 211, 13/
+ DATA (isec_linear(K),K= 153, 304) /
+ & 12, 211, 11, 12, 321, 111, 0, 311,
+ & 211, 0, 311, 111, 0, 321, -211, 0,
+ & 311, 111, 0, 321, -211, 0, 321, 111,
+ & 0, 311, 211, 0, 311, 111, 0, 321,
+ & -211, 0, 313, 111, 0, 323, -211, 0,
+ & 311, 113, 0, 321, -213, 0, 311, 223,
+ & 0, 311, 221, 0, 321, 111, 0, 311,
+ & 211, 0, 323, 111, 0, 313, 211, 0,
+ & 321, 113, 0, 311, 213, 0, 321, 223,
+ & 0, 321, 221, 0, -321, 211, 211, -311,
+ & 211, 0, -321, 211, 0, -321, 211, 111,
+ & 311, 211, -211, 311, 111, 0, 421, 111,
+ & 0, 421, 22, 0, 421, 211, 0, 411,
+ & 111, 0, 411, 22, 0, 221, 211, 0,
+ & 321, -321, 321, 321, -311, 0, 431, 22,
+ & 0, 431, 22, 0, 111, 111, 0, 211,
+ & -211, 0, 22, 22, 0, -11, 11, 0,
+ & -13, 13, 0, 211, -211, 111, 443, 211,
+ & -211, 443, 111, 111, 443, 221, 0, 2212/
+ DATA (isec_linear(K),K= 305, 456) /
+ & 11, 12, 2112, 111, 0, 2212, -211, 0,
+ & 2112, 111, 111, 2112, 211, -211, 1114, 211,
+ & 0, 2114, 111, 0, 2214, -211, 0, 2112,
+ & 113, 0, 2212, -213, 0, 2112, 221, 0,
+ & 2212, 111, 0, 2112, 211, 0, 2212, 111,
+ & 111, 2212, 211, -211, 2224, -211, 0, 2214,
+ & 111, 0, 2114, 211, 0, 2212, 113, 0,
+ & 2112, 213, 0, 2212, 221, 0, 2212, -211,
+ & 0, 2112, 111, 0, 2214, -211, 0, 2114,
+ & 111, 0, 1114, 211, 0, 2212, -213, 0,
+ & 2112, 113, 0, 2212, 111, 0, 2112, 211,
+ & 0, 2224, -211, 0, 2214, 111, 0, 2114,
+ & 211, 0, 2212, 113, 0, 2112, 213, 0,
+ & 2212, -211, 0, 2112, 111, 0, 2212, -213,
+ & 0, 2112, 113, 0, 3122, 311, 0, 3212,
+ & 311, 0, 3112, 321, 0, 2112, 221, 0,
+ & 2212, 111, 0, 2112, 211, 0, 2212, 113,
+ & 0, 2112, 213, 0, 3122, 321, 0, 3222,
+ & 311, 0, 3212, 321, 0, 2212, 221, 0/
+ DATA (isec_linear(K),K= 457, 608) /
+ & 2112, -211, 0, 2212, -211, 0, 2112, 111,
+ & 0, 2212, 111, 0, 2112, 211, 0, 2212,
+ & 211, 0, 2112, -211, 0, 2114, -211, 0,
+ & 1114, 111, 0, 2112, -213, 0, 2212, -211,
+ & 0, 2112, 111, 0, 2214, -211, 0, 2114,
+ & 111, 0, 1114, 211, 0, 2212, -213, 0,
+ & 2112, 113, 0, 2212, 111, 0, 2112, 211,
+ & 0, 2224, -211, 0, 2214, 111, 0, 2114,
+ & 211, 0, 2212, 113, 0, 2112, 213, 0,
+ & 2212, 211, 0, 2224, 111, 0, 2214, 211,
+ & 0, 2212, 213, 0, 2212, -211, 0, 2112,
+ & 111, 0, 2212, 111, 0, 2112, 211, 0,
+ & 3122, 22, 0, 2112, -211, 0, 3122, 211,
+ & 0, 3212, 211, 0, 3222, 111, 0, 3122,
+ & 111, 0, 3222, -211, 0, 3112, 211, 0,
+ & 3122, -211, 0, 3212, -211, 0, 2112, -311,
+ & 0, 2212, -321, 0, 3222, -211, 0, 3212,
+ & 111, 0, 3112, 211, 0, 3122, 221, 0,
+ & 3224, -211, 0, 3114, 211, 0, 3214, 111/
+ DATA (isec_linear(K),K= 609, 760) /
+ & 0, 2112, -311, 0, 2212, -321, 0, 3122,
+ & 111, 0, 3122, 223, 0, 3122, 113, 0,
+ & 3222, -213, 0, 3112, 213, 0, 3212, 113,
+ & 0, 3122, 221, 0, 3212, 221, 0, 3222,
+ & -211, 0, 3112, 211, 0, 3212, 111, 0,
+ & 3122, 111, 0, 3122, -211, 0, 3322, 111,
+ & 0, 3312, 211, 0, 3322, -211, 0, 3312,
+ & 111, 0, 3322, -211, 0, 3312, 111, 0,
+ & 3122, -321, 0, 3222, 221, 0, 3222, 331,
+ & 0, 2212, -311, 0, 3322, 321, 0, 3224,
+ & 221, 0, 2214, 331, 0, 2224, -321, 0,
+ & 3122, 213, 0, 3212, 213, 0, 3222, 113,
+ & 0, 3222, 223, 0, 2212, -313, 0, 2214,
+ & -313, 0, 2224, -323, 0, 4122, 211, 0,
+ & 4122, 111, 0, 4122, -211, 0, 3222, -311,
+ & 0, 3322, 211, 0, 3222, -313, 0, 3322,
+ & 213, 0, 3212, -313, 0, 3222, -323, 0,
+ & 3322, 223, 0, 3312, 213, 0, 3214, -313,
+ & 0, 3322, -311, 0, 3322, 313, 0, 3334/
+ DATA (isec_linear(K),K= 761, 765) /
+ & 213, 0, 3334, 211, 0/
+ DATA (wg_chan(K),K= 1, 114) /
+ &1.0000E+00,2.8000E-01,2.8000E-01,3.5000E-01,7.0000E-02,2.0000E-02,
+ &1.0000E+00,9.9000E-01,1.0000E-02,3.8000E-01,3.0000E-02,3.0000E-01,
+ &2.4000E-01,5.0000E-02,1.0000E+00,0.0000E+00,1.0000E+00,8.8800E-01,
+ &2.5000E-02,8.7000E-02,4.8000E-01,2.4000E-01,2.6000E-01,2.0000E-02,
+ &4.9100E-01,3.4400E-01,1.2900E-01,2.4000E-02,1.2000E-02,4.0000E-01,
+ &3.0000E-01,3.0000E-01,6.0000E-01,4.0000E-01,4.0000E-01,3.0000E-01,
+ &3.0000E-01,5.0000E-01,5.0000E-01,1.0000E+00,6.4000E-01,2.1000E-01,
+ &6.0000E-02,2.0000E-02,3.0000E-02,4.0000E-02,6.9000E-01,3.1000E-01,
+ &2.1000E-01,1.2000E-01,2.7000E-01,4.0000E-01,3.3000E-01,6.7000E-01,
+ &3.3000E-01,6.7000E-01,3.3000E-01,6.7000E-01,3.3000E-01,6.7000E-01,
+ &1.9000E-01,3.8000E-01,9.0000E-02,2.0000E-01,3.0000E-02,4.0000E-02,
+ &5.0000E-02,2.0000E-02,1.9000E-01,3.8000E-01,9.0000E-02,2.0000E-01,
+ &3.0000E-02,4.0000E-02,5.0000E-02,2.0000E-02,7.0000E-01,3.0000E-01,
+ &1.0000E-01,5.0000E-01,1.6000E-01,2.4000E-01,5.5000E-01,4.5000E-01,
+ &6.8000E-01,3.0000E-01,2.0000E-02,3.0000E-01,4.0000E-01,3.0000E-01,
+ &9.0000E-01,1.0000E-01,4.9000E-01,4.9000E-01,2.0000E-02,1.0000E-01,
+ &1.0000E-01,8.0000E-01,6.0000E-01,3.0000E-01,1.0000E-01,1.0000E+00,
+ &1.5000E-01,3.5000E-01,7.0000E-02,1.8000E-01,1.1000E-01,6.0000E-02,
+ &3.0000E-02,1.0000E-02,3.0000E-02,1.0000E-02,1.5000E-01,3.5000E-01/
+ DATA (wg_chan(K),K= 115, 228) /
+ &7.0000E-02,1.8000E-01,1.1000E-01,6.0000E-02,3.0000E-02,1.0000E-02,
+ &3.0000E-02,1.0000E-02,3.7000E-01,1.8000E-01,4.0000E-02,8.0000E-02,
+ &1.3000E-01,1.3000E-01,7.0000E-02,1.8000E-01,3.7000E-01,1.3000E-01,
+ &8.0000E-02,4.0000E-02,7.0000E-02,1.3000E-01,1.3000E-01,7.0000E-02,
+ &4.7000E-01,2.3000E-01,5.0000E-02,1.0000E-02,2.0000E-02,2.0000E-02,
+ &7.0000E-02,1.3000E-01,2.3000E-01,4.7000E-01,5.0000E-02,2.0000E-02,
+ &1.0000E-02,2.0000E-02,1.0000E+00,3.3000E-01,6.7000E-01,6.7000E-01,
+ &3.3000E-01,1.0000E+00,2.5000E-01,1.8000E-01,2.7000E-01,3.0000E-01,
+ &8.0000E-02,1.7000E-01,2.4000E-01,3.0000E-02,1.8000E-01,1.0000E-01,
+ &2.0000E-01,1.7000E-01,8.0000E-02,1.8000E-01,3.0000E-02,2.4000E-01,
+ &2.0000E-01,1.0000E-01,2.5000E-01,2.7000E-01,1.8000E-01,3.0000E-01,
+ &6.4000E-01,3.6000E-01,5.2000E-01,4.8000E-01,1.0000E+00,1.0000E+00,
+ &8.8000E-01,6.0000E-02,6.0000E-02,8.8000E-01,6.0000E-02,6.0000E-02,
+ &8.8000E-01,1.2000E-01,1.9000E-01,1.9000E-01,1.6000E-01,1.6000E-01,
+ &1.7000E-01,3.0000E-02,3.0000E-02,3.0000E-02,4.0000E-02,1.0000E-01,
+ &1.0000E-01,2.0000E-01,1.2000E-01,1.0000E-01,4.0000E-02,4.0000E-02,
+ &5.0000E-02,7.5000E-02,7.5000E-02,3.0000E-02,3.0000E-02,4.0000E-02,
+ &1.0000E+00,1.0000E+00,3.3000E-01,6.7000E-01,6.7000E-01,3.3000E-01,
+ &2.5000E-01,2.5000E-01,5.0000E-01,2.0000E-02,3.0000E-02,7.0000E-02/
+ DATA (wg_chan(K),K= 229, 255) /
+ &2.0000E-02,2.0000E-02,4.0000E-02,1.3000E-01,7.0000E-02,6.0000E-02,
+ &6.0000E-02,2.0000E-01,1.4000E-01,4.0000E-02,1.0000E-01,1.0000E+00,
+ &1.0000E+00,1.0000E+00,2.5000E-01,3.0000E-02,3.0000E-01,4.2000E-01,
+ &2.2000E-01,3.5000E-01,1.9000E-01,1.6000E-01,8.0000E-02,3.7000E-01,
+ &2.0000E-01,3.6000E-01,7.0000E-02/
+ DATA (id_psm_linear(K),K= 1, 36) /
+ & 111, 211, -311, 411, 0, 0, -211, 111,
+ & -321, 421, 0, 0, 311, 321, 221, 431,
+ & 0, 0, -411, -421, -431, 441, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0/
+ DATA (id_vem_linear(K),K= 1, 36) /
+ & 113, 213, -313, 413, 0, 0, -213, 113,
+ & -323, 423, 0, 0, 313, 323, 333, 433,
+ & 0, 0, -413, -423, -433, 20443, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0/
+ DATA (id_b8_linear(K),K= 1, 171) /
+ & 1114, 2112, 3112, 4112, 0, 0, 2112, 2212, 3212,
+ & 4122, 0, 0, 3112, 3212, 3312, 4132, 0, 0,
+ & 4112, 4122, 4132, 4412, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 2112, 2212, 3212, 4122, 0, 0, 2212, 2224, 3222,
+ & 4222, 0, 0, 3212, 3222, 3322, 4232, 0, 0,
+ & 4122, 4222, 4232, 4422, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 3112, 3212, 3312, 4132, 0, 0, 3212, 3222, 3322,
+ & 4232, 0, 0, 3312, 3322, 3334, 4332, 0, 0,
+ & 4132, 4232, 4332, 4432, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 4112, 4122, 4132, 4412, 0, 0, 4122, 4222, 4232,
+ & 4422, 0, 0, 4132, 4232, 4332, 4432, 0, 0,
+ & 4412, 4422, 4432, 4444, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA (id_b8_linear(K),K= 172, 216) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA (id_b10_linear(K),K= 1, 171) /
+ & 1114, 2114, 3114, 4114, 0, 0, 2114, 2214, 3214,
+ & 4214, 0, 0, 3114, 3214, 3314, 4314, 0, 0,
+ & 4114, 4214, 4314, 4414, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 2114, 2214, 3214, 4214, 0, 0, 2214, 2224, 3224,
+ & 4224, 0, 0, 3214, 3224, 3324, 4324, 0, 0,
+ & 4214, 4224, 4324, 4424, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 3114, 3214, 3314, 4314, 0, 0, 3214, 3224, 3324,
+ & 4324, 0, 0, 3314, 3324, 3334, 4334, 0, 0,
+ & 4314, 4324, 4334, 4434, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 4114, 4214, 4314, 4414, 0, 0, 4214, 4224, 4324,
+ & 4424, 0, 0, 4314, 4324, 4334, 4434, 0, 0,
+ & 4414, 4424, 4434, 4444, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA (id_b10_linear(K),K= 172, 216) /
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ & 0, 0, 0, 0, 0, 0, 0, 0, 0/
+
+ ID_pdg_max = i_tab_max
+
+C copy from local to global variables
+ do i=1,i_tab_max
+ ID_pdg_list(i) = number(i)
+ name_list(i) = name(i)
+ xm_list(i) = xmass(i)
+ gam_list(i) = gamma(i)
+ ich3_list(i) = ich3(i)
+ iba3_list(i) = iba3(i)
+ do j=1,3
+ iq_list(j,i) = iq_linear(3*(i-1)+j)
+ idec_list(j,i) = idec_linear(3*(i-1)+j)
+ enddo
+ enddo
+
+C initialize hash table
+ call pho_cpcini(ID_pdg_max,ID_pdg_list,ID_list)
+
+ itmp = IDEB(71)
+ IDEB(71) = -1
+
+C quark index table for mesons
+ do i=1,6
+ do j=1,6
+ id_psm_list(i,j) = ipho_pdg2id(id_psm_linear(6*(j-1)+i))
+ id_vem_list(i,j) = ipho_pdg2id(id_vem_linear(6*(j-1)+i))
+ enddo
+ enddo
+
+C quark index table for baryons
+ do i=1,6
+ do j=1,6
+ do k=1,6
+ id_b8_list(i,j,k) =
+ & ipho_pdg2id(id_b8_linear(36*(k-1)+6*(j-1)+i))
+ id_b10_list(i,j,k) =
+ & ipho_pdg2id(id_b10_linear(36*(k-1)+6*(j-1)+i))
+ enddo
+ enddo
+ enddo
+
+ IDEB(71) = itmp
+
+C copy secondary particles
+C (translate PDG-ID to CPC and sort according to CPC)
+ ichan = 0
+ do i=1,i_tab_max
+ if(idec_list(1,i).ne.0) then
+ do j=idec_list(2,i),idec_list(3,i)
+ ichan = ichan+1
+ wg_sec_list(ichan) = wg_chan(j)
+ do k=1,3
+ if(isec_linear(3*(j-1)+k).ne.0) then
+ isec_list(k,ichan) = ipho_pdg2id(isec_linear(3*(j-1)+k))
+ else
+ isec_list(k,ichan) = 0
+ endif
+ enddo
+ enddo
+ endif
+ enddo
+
+C add two-pion background (low-mass photon dissociation)
+ i = ipho_pdg2id(92)
+ ichan = ichan+1
+ idec_list(1,i) = 1
+ idec_list(2,i) = ichan
+ idec_list(3,i) = ichan
+ wg_sec_list(ichan) = 1.D0
+ isec_list(1,ichan) = ipho_pdg2id(211)
+ isec_list(2,ichan) = ipho_pdg2id(-211)
+ isec_list(3,ichan) = 0
+
+C min. mass limits for strings: q-qbar
+ do i=1,6
+ do j=1,6
+ AM2P = 1000.D0
+ AM2V = 1000.D0
+ do k=1,3
+C pseudo-scalar mesons
+ i1 = iabs(id_psm_list(i,k))
+ if(i1.ne.0) then
+ AM1 = xm_list(i1)
+ else
+ AM1 = pho_pmass(i,3)+pho_pmass(k,3)
+ endif
+ i2 = iabs(id_psm_list(k,j))
+ if(i2.ne.0) then
+ AM2 = xm_list(i2)
+ else
+ AM2 = pho_pmass(k,3)+pho_pmass(j,3)
+ endif
+ AM2P = MIN(AM2P,AM1+AM2)
+C vector mesons
+ i1 = iabs(id_vem_list(i,k))
+ if(i1.ne.0) then
+ AM1 = xm_list(i1)
+ else
+ AM1 = pho_pmass(i,3)+pho_pmass(k,3)
+ endif
+ i2 = iabs(id_vem_list(k,j))
+ if(i2.ne.0) then
+ AM2 = xm_list(i2)
+ else
+ AM2 = pho_pmass(k,3)+pho_pmass(j,3)
+ endif
+ AM2V = MIN(AM2V,AM1+AM2)
+ enddo
+ xm_psm2_list(i,j) = AM2P
+ xm_vem2_list(i,j) = AM2V
+ enddo
+ enddo
+
+C min. mass limits for strings: qq-q
+ do i=1,6
+ do j=1,6
+ do k=1,6
+ AM82 = 1000.D0
+ AM102 = 1000.D0
+ do l=1,3
+C pseudo-scalar meson
+ i1 = iabs(id_psm_list(k,l))
+ if(i1.ne.0) then
+ AM1 = xm_list(i1)
+ else
+ AM1 = pho_pmass(i,3)+pho_pmass(k,3)
+ endif
+C vector meson
+ i2 = iabs(id_vem_list(k,l))
+ if(i2.ne.0) then
+ AM2 = xm_list(i2)
+ else
+ AM2 = pho_pmass(i,3)+pho_pmass(k,3)
+ endif
+C octet baryon
+ AMM = min(AM1,AM2)
+ K8 = id_b8_list(i,j,l)
+ if(K8.ne.0) then
+ AM1 = xm_list(K8)
+ else
+ AM1 = pho_pmass(i,3)+pho_pmass(j,3)+pho_pmass(l,3)
+ endif
+ AM82 = MIN(AM82, AM1 + AMM)
+C decuplet baryon
+ K10 = id_b10_list(i,j,l)
+ if(K10.ne.0) then
+ AM2 = xm_list(K10)
+ else
+ AM2 = pho_pmass(i,3)+pho_pmass(j,3)+pho_pmass(l,3)
+ endif
+ AM102 = MIN(AM102, AM2 + AMM)
+ enddo
+ xm_b82_list(i,j,k) = AM82
+ xm_b102_list(i,j,k) = AM102
+ enddo
+ enddo
+ enddo
+
+C min. mass limits for strings: qq-qbarqbar
+ do i=1,6
+ do j=1,6
+ do ii=1,6
+ do jj=1,6
+ AM82 = 1000.D0
+ AM102 = 1000.D0
+ do l=1,3
+C octet baryons
+ K8 = id_b8_list(i,j,l)
+ if(K8.ne.0) then
+ AM1 = xm_list(K8)
+ else
+ AM1 = pho_pmass(i,3)+pho_pmass(j,3)+pho_pmass(l,3)
+ endif
+ L8 = id_b8_list(ii,jj,l)
+ if(L8.ne.0) then
+ AM2 = xm_list(L8)
+ else
+ AM2 = pho_pmass(ii,3)+pho_pmass(jj,3)+pho_pmass(l,3)
+ endif
+ AM82 = MIN(AM82, AM1+AM2)
+C decuplet baryons
+ K10 = id_b10_list(i,j,l)
+ if(K10.ne.0) then
+ AM1 = xm_list(K10)
+ else
+ AM1 = pho_pmass(i,3)+pho_pmass(j,3)+pho_pmass(l,3)
+ endif
+ L10 = id_b10_list(ii,jj,l)
+ if(L10.ne.0) then
+ AM2 = xm_list(L10)
+ else
+ AM2 = pho_pmass(ii,3)+pho_pmass(jj,3)+pho_pmass(l,3)
+ endif
+ AM102 = MIN(AM102, AM1+AM2)
+ enddo
+ xm_bb82_list(i,j,ii,jj) = AM82
+ xm_bb102_list(i,j,ii,jj) = AM102
+ enddo
+ enddo
+ enddo
+ enddo
+
+ END
+
+CDECK ID>, PHO_PRESEL
+ SUBROUTINE PHO_PRESEL(MODE,IREJ)
+C**********************************************************************
+C
+C user specific function to pre-select events during generation
+C
+C input: MODE 5 electron and photon kinematics
+C 10 process and number of cut Pomerons
+C 15 partons without construction of strings
+C 20 partons assigned to strings
+C 25 after fragmentation, complete final state
+C
+C output: IREJ 0 event accepted
+C 50 event rejected
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ IREJ = 0
+
+* XBJ = GQ2(2)/(GGECM**2+GQ2(2))
+* IF(XBJ.LT.0.002D0) IREJ = 1
+
+ END
+
+CDECK ID>, PHO_FIXCOL
+ SUBROUTINE PHO_FIXCOL(E1,E2,THETA,PHI,NEV)
+C**********************************************************************
+C
+C interface to call PHOJET (fixed energy run) with
+C collider kinematics
+C
+C equivalen photon approximation to get photon flux
+C
+C input: NEV number of events to generate
+C THETA azimuthal angle (micro radians)
+C PHI beam crossing angle
+C (with respect to x, in degrees)
+C E1 energy of particle 1 (+z direction, GeV)
+C E2 energy of particle 2 (-z direction, GeV)
+C
+C note: particle types have to be specified before
+C with PHO_SETPAR
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(TWOPI=6.283185307D0,BOG=TWOPI/360.0D0)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION P1(4),P2(4)
+
+C remnant initialization (only needed for DPMJET)
+ ISAVP1 = IFPAP(1)
+ ISAVB1 = IFPAB(1)
+ IF(IFPAP(1).EQ.81) THEN
+ IFPAP(1) = IDEQP(1)
+ IFPAB(1) = IDEQB(1)
+ ENDIF
+ ISAVP2 = IFPAP(2)
+ ISAVB2 = IFPAB(2)
+ IF(IFPAP(2).EQ.82) THEN
+ IFPAP(2) = IDEQP(2)
+ IFPAB(2) = IDEQB(2)
+ ENDIF
+ PMASS1 = PHO_PMASS(IFPAB(1),0)-SQRT(PVIRT(1))
+ PMASS2 = PHO_PMASS(IFPAB(2),0)-SQRT(PVIRT(2))
+ PP1 = SQRT(E1**2-PMASS1**2)
+ PP2 = SQRT(E2**2-PMASS2**2)
+C beam crossing angle
+ TH = 1.D-6*THETA/2.D0
+ PH = PHI*BOG
+ P1(1) = PP1*SIN(TH)*COS(PH)
+ P1(2) = PP1*SIN(TH)*SIN(PH)
+ P1(3) = PP1*COS(TH)
+ P1(4) = E1
+ P2(1) = PP2*SIN(TH)*COS(PH)
+ P2(2) = PP2*SIN(TH)*SIN(PH)
+ P2(3) = -PP2*COS(TH)
+ P2(4) = E2
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ IFPAP(1) = ISAVP1
+ IFPAB(1) = ISAVB1
+ IFPAP(2) = ISAVP2
+ IFPAB(2) = ISAVB2
+ ITRY = 0
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C test of DPMJET interface (default is IPAMDL(13)=0)
+ if(IPAMDL(13).gt.0) then
+ MODE = IPAMDL(13)
+ IPAMDL(13) = 0
+ else
+ MODE = 1
+ endif
+C main generation loop
+ DO 50 I=1,NEV
+ 55 CONTINUE
+ ITRY = ITRY+1
+ CALL PHO_EVENT(MODE,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 55
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 50 CONTINUE
+
+ IF(NEV.GT.0) THEN
+ SIGMAX = SIGMAX*DBLE(NEV)/DBLE(ITRY)
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ & '=========================================================',
+ & ' ***** simulated cross section: ',SIGMAX,' mb *****',
+ & '========================================================='
+ CALL PHO_EVENT(-2,P1,P2,SIGCUR,IREJ)
+ CALL PHO_PHIST(-2,SIGMAX)
+ CALL PHO_LHIST(-2,SIGMAX)
+ ELSE
+ WRITE(LO,'(1X,A,I5)') 'POFCOL: no events simulated',NEV
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_FIXLAB
+ SUBROUTINE PHO_FIXLAB(PLAB,NEV)
+C**********************************************************************
+C
+C interface to call PHOJET (fixed energy run) with
+C LAB kinematics (second particle as target)
+C
+C equivalent photon approximation to get photon flux
+C
+C input: NEV number of events to generate
+C PLAB LAB momentum of particle 1
+C
+C note: particle types have to be specified before
+C with PHO_SETPAR
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION P1(4),P2(4)
+
+C remnant initialization (only needed for DPMJET)
+ SPCM = PLAB
+ ISAVP1 = IFPAP(1)
+ ISAVB1 = IFPAB(1)
+ IF(IFPAP(1).EQ.81) THEN
+ IFPAP(1) = IDEQP(1)
+ IFPAB(1) = IDEQB(1)
+ ENDIF
+ ISAVP2 = IFPAP(2)
+ ISAVB2 = IFPAB(2)
+ IF(IFPAP(2).EQ.82) THEN
+ IFPAP(2) = IDEQP(2)
+ IFPAB(2) = IDEQB(2)
+ ENDIF
+C get momenta in LAB system
+ PMASS1 = PHO_PMASS(IFPAB(1),0)**2-PVIRT(1)
+ PMASS2 = PHO_PMASS(IFPAB(2),0)**2-PVIRT(2)
+ IF(PMASS2.LT.0.1D0) THEN
+ WRITE(LO,'(/1X,2A,2I7)') 'PHO_FIXLAB:ERROR: ',
+ & 'no LAB system possible',IFPAB(1),IFPAB(2)
+ ELSE
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = PLAB
+ P1(4) = SQRT(PMASS1+PLAB**2)
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = 0.D0
+ P2(4) = SQRT(PMASS2)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ IFPAP(1) = ISAVP1
+ IFPAB(1) = ISAVB1
+ IFPAP(2) = ISAVP2
+ IFPAB(2) = ISAVB2
+ ITRY = 0
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C event generation loop
+ DO 40 I=1,NEV
+ 45 CONTINUE
+ ITRY = ITRY+1
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 45
+ CALL PHO_LHIST(1,HSWGHT(0))
+
+ CALL PHO_PHIST(10,HSWGHT(0))
+
+ 40 CONTINUE
+ IF(NEV.GT.0) THEN
+ SIGMAX = SIGMAX*DBLE(NEV)/DBLE(ITRY)
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ & '=========================================================',
+ & ' ***** simulated cross section: ',SIGMAX,' mb *****',
+ & '========================================================='
+ CALL PHO_EVENT(-2,P1,P2,SIGCUR,IREJ)
+ CALL PHO_PHIST(-2,SIGMAX)
+ CALL PHO_LHIST(-2,SIGMAX)
+ ELSE
+ WRITE(LO,'(1X,A,I5)')
+ & 'PHO_FIXLAB: no events simulated',NEV
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GPHERA
+ SUBROUTINE PHO_GPHERA(NEVENT,EE1,EE2)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) with
+C HERA kinematics, photon as particle 2
+C
+C equivalent photon approximation to get photon flux
+C
+C input: NEVENT number of events to generate
+C EE1 proton energy (LAB system)
+C EE2 electron energy (LAB system)
+C from /POFCUT/:
+C YMIN2 lower limit of Y
+C (energy fraction taken by photon from electron)
+C YMAX2 upper limit of Y
+C Q2MIN2 lower limit of photon virtuality
+C Q2MAX2 upper limit of photon virtuality
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-10,
+ & PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION P1(4),P2(4)
+
+ WRITE(LO,'(//1X,A,I10)') 'PHO_GPHERA: events to process',NEVENT
+C assign particle momenta according to HERA kinematics
+C proton data
+ PROM = PHO_PMASS(2212,1)
+ PROM2 = PROM**2
+ IDPSRC(1) = 0
+ IDBSRC(1) = 0
+C electron data
+ ELEM = 0.512D-03
+ ELEM2 = ELEM**2
+ AMSRC(2) = ELEM
+ IDPSRC(2) = 11
+ IDBSRC(2) = ipho_pdg2id(11)
+C
+ Q2MIN = Q2MIN2
+ Q2MAX = Q2MAX2
+C
+ XIMAX = LOG(YMAX2)
+ XIMIN = LOG(YMIN2)
+ XIDEL = XIMAX-XIMIN
+C
+ IF(Q2MIN.GT.ELEM2*YMIN2**2/(1.D0-YMIN2))
+ & WRITE(LO,'(/1X,A,1P2E11.4)')
+ & 'PHO_GPHERA: lower Q2 cutoff larger than kin. limit:',
+ & Q2MIN,ELEM2*YMIN2**2/(1.D0-YMIN2)
+C
+ Max_tab = 50
+ DELLY = LOG(YMAX2/YMIN2)/DBLE(Max_tab-1)
+ FLUXT = 0.D0
+ FLUXL = 0.D0
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,I5)')
+ & 'PHO_GPHERA: table of photon flux (trans/long)',Max_tab
+ DO 100 I=1,Max_tab
+ Y = EXP(XIMIN+DELLY*DBLE(I-1))
+ Q2LOW = MAX(Q2MIN,ELEM2*Y**2/(1.D0-Y))
+ FFT = ((1.D0+(1.D0-Y)**2)/Y*LOG(Q2MAX/Q2LOW)
+ & -2.D0*ELEM2*Y*(1.D0/Q2LOW-1.D0/Q2MAX))/(2.D0*PI*137.D0)
+ FFL = 2.D0*(1.D0-Y)/Y*LOG(Q2MAX/Q2LOW)/(2.D0*PI*137.D0)
+ FLUXT = FLUXT + Y*FFT
+ FLUXL = FLUXL + Y*FFL
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,1P3E14.4)') Y,FFT,FFL
+ 100 CONTINUE
+ FLUXT = FLUXT*DELLY
+ FLUXL = FLUXL*DELLY
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,1P2E12.4)')
+ & 'PHO_GPHERA: integrated flux (trans./long.):',FLUXT,FLUXL
+C
+ AY = 0.D0
+ AY2 = 0.D0
+ YY = YMIN2
+ Q2LOW = MAX(Q2MIN,ELEM2*YY**2/(1.D0-YY))
+ WGMAX = (1.D0+(1.D0-YY)**2)*LOG(Q2MAX/Q2LOW)
+ & -2.D0*ELEM2*YY*(1.D0/Q2LOW-1.D0/Q2MAX)*YY
+ IF(ISWMDL(10).GE.2) WGMAX = WGMAX+2.D0*(1.D0-YY)*LOG(Q2MAX/Q2LOW)
+C
+C initialization of PHOJET at upper energy limit
+C proton momentum
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = SQRT(EE1**2-PROM2+DEPS)
+ P1(4) = EE1
+C photon momentum
+ EGAM = YMAX2*EE2
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -EGAM
+ P2(4) = EGAM
+C sum of both photon polarizations
+ IGHEL(2) = -1
+C
+ CALL PHO_SETPAR(1,2212,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C
+C generation of events, flux calculation
+
+ ECMIN2 = ECMIN**2
+ ECMAX2 = ECMAX**2
+ AY = 0.D0
+ AY2 = 0.D0
+ Q22MIN = 1.D30
+ Q22AVE = 0.D0
+ Q22AV2 = 0.D0
+ Q22MAX = 0.D0
+ AN2MIN = 1.D30
+ AN2MAX = 0.D0
+ YY2MIN = 1.D30
+ YY2MAX = 0.D0
+ NITER = NEVENT
+ ITRY = 0
+ ITRW = 0
+ DO 200 I=1,NITER
+ 150 CONTINUE
+C sample y
+ ITRY = ITRY+1
+ 175 CONTINUE
+ ITRW = ITRW+1
+ YY = EXP(XIDEL*DT_RNDM(AY)+XIMIN)
+ IF(ISWMDL(10).GE.2) THEN
+ YEFF = 1.D0+(1.D0-YY)**2+2.D0*(1.D0-YY)
+ ELSE
+ YEFF = 1.D0+(1.D0-YY)**2
+ ENDIF
+ Q2LOW = MAX(Q2MIN,ELEM2*YY**2/(1.D0-YY))
+ Q2LOG = LOG(Q2MAX/Q2LOW)
+ WGH = YEFF*Q2LOG-2.D0*ELEM2*YY**2*(1.D0/Q2LOW-1.D0/Q2MAX)
+ IF(WGMAX.LT.WGH) THEN
+ WRITE(LO,'(1X,A,3E12.5)')
+ & 'PHO_GPHERA: inconsistent weight:',YY,WGMAX,WGH
+ ENDIF
+ IF(DT_RNDM(AY2)*WGMAX.GT.WGH) GOTO 175
+C sample Q2
+ IF(IPAMDL(174).EQ.1) THEN
+ 185 CONTINUE
+ Q2 = Q2LOW*EXP(Q2LOG*DT_RNDM(YY))
+ WEIGHT = (YEFF-2.D0*ELEM2*YY**2/Q2)/YEFF
+ IF(WEIGHT.LT.DT_RNDM(Q2)) GOTO 185
+ ELSE
+ Q2 = Q2LOW
+ ENDIF
+C
+
+C incoming electron
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -EE2
+ PINI(4,2) = EE2
+ PINI(5,2) = 0.D0
+C outgoing electron
+ YQ2 = SQRT((1.D0-YY)*Q2)
+ Q2E = Q2/(4.D0*EE2)
+ E1Y = EE2*(1.D0-YY)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,2) = YQ2*COF
+ PFIN(2,2) = YQ2*SIF
+ PFIN(3,2) = -E1Y+Q2E
+ PFIN(4,2) = E1Y+Q2E
+ PFIN(5,2) = 0.D0
+C set /POFSRC/
+ GYY(2) = YY
+ GQ2(2) = Q2
+C polar angle
+ PFTHE(2) = ACOS(PFIN(3,2)/PFIN(4,2))
+C electron tagger
+ IF(PFIN(4,2).GT.EEMIN2) THEN
+ IF((PFTHE(2).LT.THMIN2).OR.(PFTHE(2).GT.THMAX2)) GOTO 175
+ ENDIF
+C azimuthal angle
+ PFPHI(2) = ATAN2(COF,SIF)
+C photon momentum
+ P2(1) = -PFIN(1,2)
+ P2(2) = -PFIN(2,2)
+ P2(3) = PINI(3,2)-PFIN(3,2)
+ P2(4) = PINI(4,2)-PFIN(4,2)
+C proton momentum
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = SQRT(EE1**2-PROM2)
+ P1(4) = EE1
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF((GGECM.LT.ECMIN2).OR.(GGECM.GT.ECMAX2)) GOTO 175
+ GGECM = SQRT(GGECM)
+C
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = -SQRT(Q2)
+C photon helicity
+ IF(ISWMDL(10).GE.2) THEN
+ WGH = YEFF-2.D0*ELEM2*YY**2/Q2
+ WGHL = 2.D0*(1-YY)
+ IF(DT_RNDM(YY).GE.WGHL/WGH) THEN
+ IGHEL(2) = 1
+ ELSE
+ IGHEL(2) = 0
+ ENDIF
+ ELSE
+ IGHEL(2) = -1
+ ENDIF
+C user cuts
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+
+C statistics
+ AY = AY+YY
+ AY2 = AY2+YY*YY
+ YY2MIN = MIN(YY2MIN,YY)
+ YY2MAX = MAX(YY2MAX,YY)
+ Q22MIN = MIN(Q22MIN,Q2)
+ Q22MAX = MAX(Q22MAX,Q2)
+ Q22AVE = Q22AVE+Q2
+ Q22AV2 = Q22AV2+Q2*Q2
+ AN2MIN = MIN(AN2MIN,PFTHE(2))
+ AN2MAX = MAX(AN2MAX,PFTHE(2))
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+C
+ WGY = WGMAX*DBLE(ITRY)/DBLE(ITRW)/(137.D0*2.D0*PI)
+ WGY = WGY*LOG(YMAX2/YMIN2)
+ AY = AY/DBLE(NITER)
+ AY2 = AY2/DBLE(NITER)
+ DAY = SQRT((AY2-AY**2)/DBLE(NITER))
+ Q22AVE = Q22AVE/DBLE(NITER)
+ Q22AV2 = Q22AV2/DBLE(NITER)
+ Q22AV2 = SQRT((Q22AV2-Q22AVE**2)/DBLE(NITER))
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,3I10)')
+ & 'PHO_GPHERA:SUMMARY:NITER,ITRY,ITRW',NITER,ITRY,ITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y,DY ',AY,DAY
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON ',
+ & YY2MIN,YY2MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Q2,DQ2 ',
+ & Q22AVE,Q22AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Q2 RANGE PHOTON ',
+ & Q22MIN,Q22MAX
+ WRITE(LO,'(1X,A,1P4E12.4)') 'SAMPLED THETA RANGE ELECTRON ',
+ & AN2MIN,AN2MAX,PI-AN2MAX,PI-AN2MIN
+C
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_GPHERA:NO OUTPUT OF HISTOGRAMS',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GGEPEM
+ SUBROUTINE PHO_GGEPEM(NEVENT,EE1,EE2)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-gamma collisions on e+e- collider
+C
+C fully differential equivalent (improved) photon approximation
+C to get photon flux
+C
+C input: EE1 LAB system energy of electron/positron 1
+C EE2 LAB system energy of electron/positron 2
+C NEVENT >0 number of events to generate
+C -1 initialization
+C -2 final call (cross section calculation)
+C from /LEPCUT/:
+C YMIN1 lower limit of Y1
+C (energy fraction taken by photon from electron)
+C YMAX1 upper limit of Y1
+C Q2MIN1 lower limit of photon virtuality
+C Q2MAX1 upper limit of photon virtuality
+C THMIN1 lower limit of scattered electron
+C THMAX1 upper limit of scattered electron
+C YMIN2 lower limit of Y2
+C (energy fraction taken by photon from electron)
+C YMAX2 upper limit of Y2
+C Q2MIN2 lower limit of photon virtuality
+C Q2MAX2 upper limit of photon virtuality
+C THMIN2 lower limit of scattered electron
+C THMAX2 upper limit of scattered electron
+C
+C output: after final call with NEVENT=-2
+C EE1 e+ e- cross section (mb)
+C EE2 gamma-gamma cross section (mb)
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ DOUBLE PRECISION EE1,EE2
+ INTEGER NEVENT
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+C external functions
+ DOUBLE PRECISION DT_RNDM
+
+C local variables
+ DOUBLE PRECISION AN1MAX,AN1MIN,AN2MAX,AN2MIN,AY1,AY2,AYS1,AYS2,
+ & COF1,COF2,CPFTHE,DAY1,DAY2,DELLY,DITRY,DITRW,
+ & ECFRAC,ECMAX2,ECMIN2,EGAM,ELEM,ELEM2,FFL,FFT,FLUXL,FLUXT,
+ & FLXAPP,FLXQPM,GGECM2,P1,P2,PP,PT,PT2,Q21AV2,Q21AVE,Q21MAX,
+ & Q21MIN,Q22AV2,Q22AVE,Q22MAX,Q22MIN,Q2LOG1,Q2LOG2,Q2LOW1,
+ & Q2LOW2,Q2P1,Q2P2,SIF1,SIF2,SIGCUR,SIGMAX,THMAC1,
+ & THMAC2,THMIC1,THMIC2,WEIGHT,WG,WGFX,WGH,WGHAPP,WGHL,WGHQPM,
+ & WGMAX,WGY,X1DEL,X1MAX,X1MIN,X2DEL,X2MAX,X2MIN,Y1,Y2,YEFF1,YEFF2,
+ & YMI,YY1MAX,YY1MIN,YY2MAX,YY2MIN
+
+ INTEGER I,IHEAC1,IHEAC2,IHETRY,IREJ,ITRW_low,ITRW_high,ITRY_low,
+ & ITRY_high,K,Max_tab,NITER,ITG1,ITG2
+
+ DIMENSION P1(4),P2(4),IHETRY(4),IHEAC1(4),IHEAC2(4)
+ integer ipho_pdg2id
+
+C initialization of event generation
+
+ if(NEVENT.eq.-1) then
+
+ DO 10 I=1,4
+ IHETRY(I) = 0
+ IHEAC1(I) = 0
+ IHEAC2(I) = 0
+ 10 CONTINUE
+
+ WRITE(LO,'(//1X,A)') 'PHO_GGEPEM: initialization'
+
+C electron data
+ ELEM = 0.512D-03
+ ELEM2 = ELEM**2
+ AMSRC(1) = ELEM
+ AMSRC(2) = ELEM
+C lepton numbers
+ IDPSRC(1) = 11
+ IDPSRC(2) = -11
+ IDBSRC(1) = ipho_pdg2id(11)
+ IDBSRC(2) = ipho_pdg2id(-11)
+
+C check/update kinematic limitations
+
+ Ymi = min(Ymax1,1.D0-ELEM/EE1)
+ if(Ymi.lt.Ymax1) then
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGEPEM: Ymax1 decreased (old/new)',Ymax1,Ymi
+ Ymax1 = YMI
+ endif
+ Ymi = min(Ymax2,1.D0-ELEM/EE2)
+ if(Ymi.lt.Ymax2) then
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGEPEM: Ymax2 decreased (old/new)',Ymax2,Ymi
+ Ymax2 = YMI
+ endif
+
+ YMI = ECMIN**2/(4.D0*EE1*EE2*YMAX2)
+ IF(YMIN1.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGEPEM: Ymin1 increased (old/new)',YMIN1,YMI
+ YMIN1 = YMI
+ ELSE IF(YMIN1.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GGEPEM:','ECM-CUT corresponds to YMIN1 of',YMI,
+ & ' INSTEAD OF',YMIN1
+ ENDIF
+ YMI = ECMIN**2/(4.D0*EE1*EE2*YMAX1)
+ IF(YMIN2.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGEPEM: Ymin2 increased (old/new)',YMIN2,YMI
+ YMIN2 = YMI
+ ELSE IF(YMIN2.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GGEPEM:','ECM-CUT corresponds to YMIN2 of',YMI,
+ & ' INSTEAD OF',YMIN2
+ ENDIF
+
+C store COS of angular tagging range
+ THMIC1 = COS(MAX(0.D0,THMIN1))
+ THMAC1 = COS(MIN(THMAX1,PI))
+ THMIC2 = COS(MAX(0.D0,THMIN2))
+ THMAC2 = COS(MIN(THMAX2,PI))
+
+ X1MAX = LOG(YMAX1)
+ X1MIN = LOG(YMIN1)
+ X1DEL = X1MAX-X1MIN
+ X2MAX = LOG(YMAX2)
+ X2MIN = LOG(YMIN2)
+ X2DEL = X2MAX-X2MIN
+
+C debug: integrated photon flux
+
+ if(IDEB(30).ge.1) then
+ Max_tab = 50
+ FLUXT = 0.D0
+ FLUXL = 0.D0
+ DELLY = LOG(YMAX1/YMIN1)/DBLE(Max_tab-1)
+ IF(IDEB(30).GE.2) WRITE(LO,'(1X,2A,I5)') 'PHO_GGEPEM: ',
+ & 'table of photon flux (trans/long side 1)',Max_tab
+ do I=1,Max_tab
+ Y1 = EXP(X1MIN+DELLY*DBLE(I-1))
+ if((1.D0-Y1).gt.1.D-8) then
+ Q2LOW1 = MAX(Q2MIN1,ELEM2*Y1*Y1/(1.D0-Y1))
+ else
+ Q2low1 = 2.D0*Q2max1
+ endif
+ if(Q2low1.lt.Q2max1) then
+ FFT = ((1.D0+(1.D0-Y1)**2)/Y1*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*ELEM2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1))/(2.D0*PI*137.D0)
+ FFL = 2.D0*(1.D0-Y1)*LOG(Q2MAX1/Q2LOW1)/(2.D0*PI*137.D0)
+ else
+ FFT = 0.D0
+ FFL = 0.D0
+ endif
+ FLUXT = FLUXT + Y1*FFL
+ FLUXL = FLUXL + Y1*FFT
+ IF(IDEB(30).GE.2) WRITE(LO,'(5X,1P3E14.4)') Y1,FFT,FFL
+ enddo
+ FLUXT = FLUXT*DELLY
+ FLUXL = FLUXL*DELLY
+ WRITE(LO,'(1X,2A,1P2E12.4)') 'PHO_GGEPEM: ',
+ & 'integrated flux (trans/long side 1):',FLUXT,FLUXL
+ endif
+
+C maximum weight
+
+ Q2LOW1 = MAX(Q2MIN1,ELEM2*YMIN1**2/(1.D0-YMIN1))
+ Q2LOW2 = MAX(Q2MIN2,ELEM2*YMIN2**2/(1.D0-YMIN2))
+ Y1 = YMIN1
+ Y2 = YMIN2
+ IF(ISWMDL(10).GE.2) THEN
+C long. and transversely polarized photons
+ WGMAX = ((1.D0+(1.D0-Y1)**2+2.D0*(1.D0-Y1))*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*ELEM2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1)
+ & *((1.D0+(1.D0-Y2)**2+2.D0*(1.D0-Y2))*LOG(Q2MAX2/Q2LOW2)
+ & -2.D0*ELEM2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2)
+ ELSE
+C transversely polarized photons only
+ WGMAX = ((1.D0+(1.D0-Y1)**2)*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*ELEM2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1)
+ & *((1.D0+(1.D0-Y2)**2)*LOG(Q2MAX2/Q2LOW2)
+ & -2.D0*ELEM2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2)
+ ENDIF
+
+C initialize gamma-gamma event generator
+
+C photon 1
+ EGAM = YMAX1*EE1
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = SQRT(EGAM**2-Q2LOW1)
+ P1(4) = EGAM
+C photon 2
+ EGAM = YMAX2*EE2
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -SQRT(EGAM**2-Q2LOW2)
+ P2(4) = EGAM
+C sum of helicities
+ IGHEL(1) = -1
+ IGHEL(2) = -1
+
+C set min. energy for interpolation tables
+ parmdl(19) = min(parmdl(19),ecmin)
+
+C initialize event gneration
+ CALL PHO_SETPAR(1,22,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+
+C generation of events, flux calculation
+
+ ECMIN2 = ECMIN**2
+ ECMAX2 = ECMAX**2
+ ECFRAC = ECMIN2/(4.D0*EE1*EE2)
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ Q21MIN = 1.D30
+ Q22MIN = 1.D30
+ Q21MAX = 0.D0
+ Q22MAX = 0.D0
+ Q21AVE = 0.D0
+ Q22AVE = 0.D0
+ Q21AV2 = 0.D0
+ Q22AV2 = 0.D0
+ AN1MIN = 1.D30
+ AN2MIN = 1.D30
+ AN1MAX = 0.D0
+ AN2MAX = 0.D0
+ YY1MIN = 1.D30
+ YY2MIN = 1.D30
+ YY1MAX = 0.D0
+ YY2MAX = 0.D0
+ NITER = 0
+ ITRY_low = 0
+ ITRY_high = 0
+ ITRW_low = 0
+ ITRW_high = 0
+
+C generate NEVENT events (might be just 1 per call)
+
+ else if(NEVENT.gt.0) then
+
+ NITER = NITER+NEVENT
+
+ DO 200 I=1,NEVENT
+
+C sample y1, y2
+ 150 CONTINUE
+ ITRY_low = ITRY_low+1
+ if(ITRY_low.eq.1000000) then
+ ITRY_low = 0
+ ITRY_high = ITRY_high+1
+ endif
+
+ 175 CONTINUE
+ ITRW_low = ITRW_low+1
+ if(ITRW_low.eq.1000000) then
+ ITRW_low = 0
+ ITRW_high = ITRW_high+1
+ endif
+
+ Y1 = EXP(X1DEL*DT_RNDM(AY1)+X1MIN)
+ Y2 = EXP(X2DEL*DT_RNDM(AY2)+X2MIN)
+ IF(Y1*Y2.LT.ECFRAC) GOTO 175
+ IF(ISWMDL(10).GE.2) THEN
+ YEFF1 = 1.D0+(1.D0-Y1)**2+2.D0*(1.D0-Y1)
+ YEFF2 = 1.D0+(1.D0-Y2)**2+2.D0*(1.D0-Y2)
+ ELSE
+ YEFF1 = 1.D0+(1.D0-Y1)**2
+ YEFF2 = 1.D0+(1.D0-Y2)**2
+ ENDIF
+
+ Q2LOW1 = MAX(Q2MIN1,ELEM2*Y1**2/(1.D0-Y1))
+ Q2LOW2 = MAX(Q2MIN2,ELEM2*Y2**2/(1.D0-Y2))
+ Q2LOG1 = LOG(Q2MAX1/Q2LOW1)
+ Q2LOG2 = LOG(Q2MAX2/Q2LOW2)
+ WGH = (YEFF1*Q2LOG1
+ & -2.D0*ELEM2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1)
+ & *(YEFF2*Q2LOG2
+ & -2.D0*ELEM2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2)
+ IF(WGMAX.LT.WGH) THEN
+ WRITE(LO,'(1X,A,4E12.5)')
+ & 'PHO_GGEPEM: inconsistent weight:',Y1,Y2,WGMAX,WGH
+ ENDIF
+ IF(DT_RNDM(AYS1)*WGMAX.GT.WGH) GOTO 175
+
+C limit on Ecm_gg (app. cut, precise cut applied later)
+ GGECM2 = 4.D0*Y1*Y2*EE1*EE2
+ if(GGECM2.lt.ECMIN2) goto 175
+
+C sample Q2
+ IF(IPAMDL(174).EQ.1) THEN
+ 185 CONTINUE
+ Q2P1 = Q2LOW1*EXP(Q2LOG1*DT_RNDM(Y1))
+ WEIGHT = (YEFF1-2.D0*(1.D0-Y1)*Q2LOW1/Q2P1)/YEFF1
+ IF(WEIGHT.LT.DT_RNDM(Q2P1)) GOTO 185
+ ELSE
+ Q2P1 = Q2LOW1
+ ENDIF
+
+ IF(IPAMDL(174).EQ.1) THEN
+ 186 CONTINUE
+ Q2P2 = Q2LOW2*EXP(Q2LOG2*DT_RNDM(Y2))
+ WEIGHT = (YEFF2-2.D0*(1.D0-Y2)*Q2LOW2/Q2P2)/YEFF2
+ IF(WEIGHT.LT.DT_RNDM(Q2P2)) GOTO 186
+ ELSE
+ Q2P2 = Q2LOW2
+ ENDIF
+
+ GYY(1) = Y1
+ GQ2(1) = Q2P1
+ GYY(2) = Y2
+ GQ2(2) = Q2P2
+
+C incoming electron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = EE1*(1.D0-0.5D0*ELEM2/EE1**2)
+ PINI(4,1) = EE1
+ PINI(5,1) = ELEM
+C photon 1
+ PP = (2.D0*EE1**2*Y1+Q2P1)/(2.D0*PINI(3,1))
+ PT2 = (EE1**2*(Q2P1*(1.D0-Y1)-ELEM2*Y1**2)
+ & -0.25D0*Q2P1**2-Q2P1*ELEM2)/PINI(3,1)**2
+ IF(PT2.LT.0.D0) GOTO 175
+ PT = SQRT(PT2)
+ CALL PHO_SFECFE(SIF1,COF1)
+ P1(1) = COF1*PT
+ P1(2) = SIF1*PT
+ P1(3) = PP
+ P1(4) = EE1*Y1
+C outgoing electron 1
+ PFIN(1,1) = -P1(1)
+ PFIN(2,1) = -P1(2)
+ PFIN(3,1) = PINI(3,1)-P1(3)
+ PFIN(4,1) = PINI(4,1)-P1(4)
+ PFIN(5,1) = ELEM
+C incoming electron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -EE2*(1.D0-0.5D0*ELEM2/EE2**2)
+ PINI(4,2) = EE2
+ PINI(5,2) = 0.D0
+C photon 2
+ PP = (2.D0*EE2**2*Y2+Q2P2)/(2.D0*PINI(3,2))
+ PT2 = (EE2**2*(Q2P2*(1.D0-Y2)-ELEM2*Y2**2)
+ & -0.25D0*Q2P2**2-Q2P2*ELEM2)/PINI(3,2)**2
+ IF(PT2.LT.0.D0) GOTO 175
+ PT = SQRT(PT2)
+ CALL PHO_SFECFE(SIF2,COF2)
+ P2(1) = COF2*PT
+ P2(2) = SIF2*PT
+ P2(3) = PP
+ P2(4) = EE2*Y2
+C outgoing electron 2
+ PFIN(1,2) = -P2(1)
+ PFIN(2,2) = -P2(2)
+ PFIN(3,2) = PINI(3,2)-P2(3)
+ PFIN(4,2) = PINI(4,2)-P2(4)
+ PFIN(5,2) = ELEM
+
+C precise ECMS cut
+
+ GGECM2 = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF((GGECM2.LT.ECMIN2).OR.(GGECM2.GT.ECMAX2)) GOTO 175
+ GGECM = SQRT(GGECM2)
+
+C beam lepton detector acceptance
+
+C lepton tagger 1
+ CPFTHE = PFIN(3,1)/PFIN(4,1)
+ ITG1 = 0
+ IF(PFIN(4,1).GE.EEMIN1) THEN
+ IF((CPFTHE.LE.THMIC1).AND.(CPFTHE.GE.THMAC1)) ITG1 = 1
+ ENDIF
+
+C lepton tagger 2
+ CPFTHE = PFIN(3,2)/PFIN(4,2)
+ ITG2 = 0
+ IF(PFIN(4,2).GE.EEMIN2) THEN
+ IF((CPFTHE.LE.THMIC2).AND.(CPFTHE.GE.THMAC2)) ITG2 = 1
+ ENDIF
+
+C beam lepton taggers
+
+C anti-tag
+ IF((ITAG1.EQ.-1).AND.(ITG1.NE.0)) GOTO 175
+ IF((ITAG2.EQ.-1).AND.(ITG2.NE.0)) GOTO 175
+C tag
+ IF((ITAG1.EQ.1).AND.(ITG1.EQ.0)) GOTO 175
+ IF((ITAG2.EQ.1).AND.(ITG2.EQ.0)) GOTO 175
+C single-tag inclusive
+ IF((ITAG1.EQ.0).AND.(ITAG2.EQ.0).AND.(ITG1+ITG2.EQ.0))
+ & GOTO 175
+C single-tag/anti-tag
+ IF((ITAG1.EQ.2).AND.(ITAG2.EQ.2).AND.(ITG1+ITG2.NE.1))
+ & GOTO 175
+
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = -SQRT(Q2P1)
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = -SQRT(Q2P2)
+
+C photon helicities
+ IF(ISWMDL(10).GE.2) THEN
+ WGH = YEFF1-2.D0*ELEM2*Y1**2/Q2P1
+ WGHL = 2.D0*(1-Y1)
+ IF(DT_RNDM(Y1).GT.WGHL/WGH) THEN
+ IGHEL(1) = 1
+ ELSE
+ IGHEL(1) = 0
+ ENDIF
+ WGH = YEFF2-2.D0*ELEM2*Y2**2/Q2P2
+ WGHL = 2.D0*(1-Y2)
+ IF(DT_RNDM(Y2).GT.WGHL/WGH) THEN
+ IGHEL(2) = 1
+ ELSE
+ IGHEL(2) = 0
+ ENDIF
+ K = 2*IGHEL(1)+IGHEL(2)+1
+ IHETRY(K) = IHETRY(K)+1
+ ELSE
+ IGHEL(1) = -1
+ IGHEL(2) = -1
+ ENDIF
+
+C user cuts
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+
+ WGFX = 1.D0
+C reweight according to LO photon emission diagrams (Budnev et al.)
+ IF(IPAMDL(116).GE.1) THEN
+ CALL PHO_WGEPEM(FLXAPP,FLXQPM,0)
+ WGFX = FLXQPM/FLXAPP
+ if(WGFX.gt.1.D0) then
+ WRITE(LO,'(1x,a,/,5x,1p,5e11.4)')
+ & ' PHO_GGEPEM: flux weight > 1 (y1/2,Q21/2,W)',
+ & Y1,Y2,Q2P1,Q2P2,GGECM
+ endif
+ ENDIF
+
+C event generation
+* IVWGHT(1) = 1
+* EVWGHT(1) = MAX(WGFX,1.D0)
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+ IF(ISWMDL(10).GE.2) THEN
+ K = 2*IGHEL(1)+IGHEL(2)+1
+ IHEAC1(K) = IHEAC1(K)+1
+ ENDIF
+
+C reweight according to QPM model (e+e- collider only)
+ IF((KHDIR.GT.0).AND.
+ & (IPAMDL(116).GE.2).AND.(ISWMDL(10).GE.2)) THEN
+ CALL PHO_WGEPEM(WGHAPP,WGHQPM,1)
+ WG = WGHQPM/WGHAPP/MAX(1.D0,WGFX)
+ IF(DT_RNDM(WG).GT.WG) GOTO 150
+ ELSE IF(IPAMDL(116).GE.1) THEN
+ IF(DT_RNDM(WG).GT.WGFX) GOTO 150
+ ENDIF
+
+C polar angle
+ PFTHE(1) = ACOS(PFIN(3,1)/PFIN(4,1))
+ PFTHE(2) = ACOS(PFIN(3,2)/PFIN(4,2))
+C azimuthal angle
+ PFPHI(1) = ATAN2(COF1,SIF1)
+ PFPHI(2) = ATAN2(COF2,SIF2)
+
+C statistics
+ AY1 = AY1+Y1
+ AYS1 = AYS1+Y1*Y1
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+ Q21MIN = MIN(Q21MIN,Q2P1)
+ Q22MIN = MIN(Q22MIN,Q2P2)
+ Q21MAX = MAX(Q21MAX,Q2P1)
+ Q22MAX = MAX(Q22MAX,Q2P2)
+ AN1MIN = MIN(AN1MIN,PFTHE(1))
+ AN2MIN = MIN(AN2MIN,PFTHE(2))
+ AN1MAX = MAX(AN1MAX,PFTHE(1))
+ AN2MAX = MAX(AN2MAX,PFTHE(2))
+ YY1MIN = MIN(YY1MIN,Y1)
+ YY2MIN = MIN(YY2MIN,Y2)
+ YY1MAX = MAX(YY1MAX,Y1)
+ YY2MAX = MAX(YY2MAX,Y2)
+ Q21AVE = Q21AVE+Q2P1
+ Q22AVE = Q22AVE+Q2P2
+ Q21AV2 = Q21AV2+Q2P1*Q2P1
+ Q22AV2 = Q22AV2+Q2P2*Q2P2
+ IF(ISWMDL(10).GE.2) THEN
+ K = 2*IGHEL(1)+IGHEL(2)+1
+ IHEAC2(K) = IHEAC2(K)+1
+ ENDIF
+
+C external histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+
+C final cross section calculation and event generation summary
+
+ else if(NEVENT.eq.-2) then
+
+* EVWGHT(1) = 1.D0
+* IVWGHT(1) = 0
+ DITRY = dble(ITRY_high)*1.D+6+dble(ITRY_low)
+ DITRW = dble(ITRW_high)*1.D+6+dble(ITRW_low)
+ WGY = WGMAX*DITRY/DITRW/(137.D0*2.D0*PI)**2
+ WGY = WGY*LOG(YMAX1/YMIN1)*LOG(YMAX2/YMIN2)
+ AY1 = AY1/DBLE(NITER)
+ AYS1 = AYS1/DBLE(NITER)
+ DAY1 = SQRT((AYS1-AY1**2)/DBLE(NITER))
+ AY2 = AY2/DBLE(NITER)
+ AYS2 = AYS2/DBLE(NITER)
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(NITER))
+ Q21AVE = Q21AVE/DBLE(NITER)
+ Q21AV2 = Q21AV2/DBLE(NITER)
+ Q21AV2 = SQRT((Q21AV2-Q21AVE**2)/DBLE(NITER))
+ Q22AVE = Q22AVE/DBLE(NITER)
+ Q22AV2 = Q22AV2/DBLE(NITER)
+ Q22AV2 = SQRT((Q22AV2-Q22AVE**2)/DBLE(NITER))
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DITRY
+ EE1 = WEIGHT
+ EE2 = SIGMAX*DBLE(NITER)/DITRY
+
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ & '=========================================================',
+ & ' ***** simulated cross section: ',WEIGHT,' mb *****',
+ & '========================================================='
+ WRITE(LO,'(//1X,A,I10,1p,2e14.6)')
+ & 'PHO_GGEPEM:summary: NITER,ITRY,ITRW',NITER,DITRY,DITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'effective weight (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,1P2E12.4)') 'average Y1,DY1 ',
+ & AY1,DAY1
+ WRITE(LO,'(1X,A,1P2E12.4)') 'average Y2,DY2 ',
+ & AY2,DAY2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'sampled Y range photon 1 ',
+ & YY1MIN,YY1MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'sampled Y range photon 2 ',
+ & YY2MIN,YY2MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'average Q2,DQ2 photon 1 ',
+ & Q21AVE,Q21AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'sampled Q2 range photon 1 ',
+ & Q21MIN,Q21MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'average Q2,DQ2 photon 2 ',
+ & Q22AVE,Q22AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'sampled Q2 range photon 2 ',
+ & Q22MIN,Q22MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'sampled THETA range electron1',
+ & AN1MIN,AN1MAX
+ WRITE(LO,'(1X,A,1P4E12.4)') 'sampled THETA range electron2',
+ & AN2MIN,AN2MAX,PI-AN2MAX,PI-AN2MIN
+
+ IF(ISWMDL(10).GE.2) THEN
+ WRITE(LO,'(/1X,A,3(/1X,A,4I12))')
+ & 'Helicity decomposition: 0 0 0 1 1 0 1 1',
+ & 'tried: ',IHETRY,
+ & 'accepted (1): ',IHEAC1,
+ & 'accepted (2): ',IHEAC2
+ ENDIF
+
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)')
+ & 'PHO_GGEPEM: no output of histograms',NITER
+ ENDIF
+
+ endif
+
+ END
+
+CDECK ID>, PHO_WGEPEM
+ SUBROUTINE PHO_WGEPEM(WGHAPP,WGHQPM,IMODE)
+C**********************************************************************
+C
+C calculate cross section weights for
+C fully differential equivalent (improved) photon approximation
+C and/or
+C fully differential QPM model with exact one-photon exchange graphs
+C
+C (unpolarized lepton beams)
+C
+C input: IMODE 0 flux calculation only
+C 1 flux folded with QPM cross section
+C /POFSRC/ photon and electron momenta
+C /POPRCS/ process type
+C /POCKIN/ kinematics of hard scattering
+C
+C output: WGHAPP weight of event according to approximation
+C WGHQPM weight of event according to one-photon exchange
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ DOUBLE PRECISION WGHAPP,WGHQPM
+ INTEGER IMODE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DOUBLE PRECISION AA,ALPHA1,ALPHA2,BB,CC,CCAP,DD,FAC,HELFLX,
+ & P1,P1P2,P1Q2,P2,P2Q1,Q1KK,Q1Q2,Q2,Q2KK,QC2,RHO100,RHO1PP,
+ & RHO200,RHO2PP,RHOP08,RHOPM2,RR,SH,SIGQPM,SP,SS,SW0000,SW0P0M,
+ & SW0P0P,SW0PM0,SWP00P,SWP0M0,SWP0P0,SWPMPM,SWPP00,SWPPMM,SWPPPP,
+ & TH,TP,UH,W2,WGHEQ,WGHQQ,XCAP,XK1,XK2,XKAM,XKAP,
+ & XM2,XQ2,XTM1,XTM2,XTM3,YCAP
+ DOUBLE PRECISION PHO_ALPHAS,pho_alphae
+
+ INTEGER I,I1,I2,IDIR,IPFL1,IPFL2,IPOS,K
+
+ DIMENSION WGHEQ(2),XM2(2),P1(4),P2(4),XK1(4),XK2(4)
+ DIMENSION HELFLX(6),SIGQPM(6)
+
+ WGHAPP = 1.D0
+ WGHQPM = 0.D0
+
+C strict pt cutoff after putting partons on mass shell,
+C calculated in gamma-gamma CMS
+ if((Imode.eq.1).and.(ipamdl(121).gt.0)) then
+ if(PTfin.lt.PTwant) then
+ if(ipamdl(121).gt.1) return
+ if((ipamdl(121).eq.1).and.(MSPR.eq.14)) return
+ endif
+ endif
+
+C cross section of sampled event (approximate treatment)
+
+C photon flux
+ DO 50 K=1,2
+ XM2(K) = AMSRC(K)**2
+ IF(abs(IGHEL(K)).EQ.1) THEN
+ WGHEQ(K) = ((1.D0+(1.D0-GYY(K))**2)/GYY(K)
+ & -2.D0*XM2(K)*GYY(K)/GQ2(K))/(137.D0*2.D0*PI*GQ2(K))
+ ELSE
+ WGHEQ(K) = (1.D0-GYY(K))/GYY(K)/(137.D0*PI*GQ2(K))
+ ENDIF
+ 50 CONTINUE
+
+ W2 = GGECM*GGECM
+ IDIR = 0
+ WGHQQ = 1.D0
+
+C direct or single-resolved gam-gam interaction
+ IF((IMODE.GE.1).AND.
+ & (IPROCE.EQ.8).AND.(MSPR.GE.10)) THEN
+ IDIR = 1
+ WGHQQ = 0.D0
+C determine final state partons
+ DO 100 I=3,NHEP
+ IF(ISTHEP(I).EQ.25) GOTO 110
+ 100 CONTINUE
+ WRITE(LO,'(/1X,2A,I5)') 'PHO_WGEPEM:ERROR: ',
+ & 'inconsistent process information (MSPR)',MSPR
+ CALL PHO_ABORT
+ 110 CONTINUE
+ IPOS = I
+C final state flavors
+ IPFL1 = ABS(IDHEP(IPOS+3))
+ IPFL2 = ABS(IDHEP(IPOS+4))
+ SH = X1*X2*W2
+C calculate alpha-em
+ ALPHA1 = pho_alphae(QQAL)
+C calculate alpha-s
+ IF(MSPR.LT.14) THEN
+ ALPHA2 = PHO_ALPHAS(QQAL,3)
+ ENDIF
+C LO matrix element (8 pi s dsig/dt)
+* QC2 = 4.D0/9.D0 - DBLE(MOD(IPFL2,2))*3.D0/9.D0
+ QC2 = Q_ch2(IPFL2)
+ IF(IPFL2.EQ.0) THEN
+ WRITE(LO,'(1X,2A,/,5X,A,I12,I3,4I4)') 'PHO_WGEPEM:ERROR: ',
+ & 'invalid hard process - flavor combination',
+ & 'EVENT,MSPR,IA,IB,IC,ID:',KEVENT,MSPR,IA,IB,IC,ID
+ ENDIF
+ IF(MSPR.EQ.10) THEN
+ WGHQQ = -8.D0*PI/(3.D0*SH**2)*ALPHA1*QC2*ALPHA2*(U**2+1.D0)/U
+ & *8.D0*PI*SH
+ ELSE IF(MSPR.EQ.11) THEN
+ WGHQQ = PI/SH**2*ALPHA1*QC2*ALPHA2*(V**2+U**2)/(U*V)
+ & *8.D0*PI*SH
+ ELSE IF(MSPR.EQ.12) THEN
+ WGHQQ = -8.D0*PI/(3.D0*SH**2)*ALPHA1*QC2*ALPHA2*(V**2+1.D0)/V
+ & *8.D0*PI*SH
+ ELSE IF(MSPR.EQ.13) THEN
+ WGHQQ = PI/SH**2*ALPHA1*QC2*ALPHA2*(V**2+U**2)/(U*V)
+ & *8.D0*PI*SH
+ ELSE IF(MSPR.EQ.14) THEN
+ WGHQQ = 6.D0*PI/SH**2*(ALPHA1*QC2)**2*(V**2+U**2)/(U*V)
+ & *8.D0*PI*SH
+ ENDIF
+ ENDIF
+
+C fully differential cross section dsig/(dQ_^2 dQ_2^2 dy_1 dy_2 dphi)
+ WGHAPP = WGHEQ(1)*WGHEQ(2)*WGHQQ/(2.D0*PI)
+
+C full leading-order QPM prediction (Budnev et al.)
+
+C full two-gamma flux
+
+ P1Q2 = PINI(4,1)*PGAM(4,2)-PINI(1,1)*PGAM(1,2)
+ & -PINI(2,1)*PGAM(2,2)-PINI(3,1)*PGAM(3,2)
+ P2Q1 = PINI(4,2)*PGAM(4,1)-PINI(1,2)*PGAM(1,1)
+ & -PINI(2,2)*PGAM(2,1)-PINI(3,2)*PGAM(3,1)
+ Q1Q2 = PGAM(4,1)*PGAM(4,2)-PGAM(1,1)*PGAM(1,2)
+ & -PGAM(2,1)*PGAM(2,2)-PGAM(3,1)*PGAM(3,2)
+ P1P2 = PINI(4,1)*PINI(4,2)-PINI(1,1)*PINI(1,2)
+ & -PINI(2,1)*PINI(2,2)-PINI(3,1)*PINI(3,2)
+ DO 120 I=1,4
+ P1(I) = 2.D0*PINI(I,1)-PGAM(I,1)
+ P2(I) = 2.D0*PINI(I,2)-PGAM(I,2)
+ 120 CONTINUE
+ XTM1 = 2.D0*P1Q2-Q1Q2
+ XTM2 = 2.D0*P2Q1-Q1Q2
+ XTM3 = P1(4)*P2(4)-P1(1)*P2(1)-P1(2)*P2(2)-P1(3)*P2(3)
+ XCAP = Q1Q2**2-GQ2(1)*GQ2(2)
+ YCAP = P1P2**2-XM2(1)*XM2(2)
+ CCAP = -XTM3 + Q1Q2*XTM1*XTM2/XCAP
+
+ RHO1PP = (XTM1**2/XCAP+1.D0-4.D0*XM2(1)/GQ2(1))/2.D0
+ RHO2PP = (XTM2**2/XCAP+1.D0-4.D0*XM2(2)/GQ2(2))/2.D0
+ RHO100 = XTM1**2/XCAP-1.D0
+ RHO200 = XTM2**2/XCAP-1.D0
+ RHOPM2 = CCAP**2/(GQ2(1)*GQ2(2))-2.D0*(RHO1PP-1.D0)*(RHO2PP-1.D0)
+ RHOP08 = 4.D0*XTM1*XTM2*CCAP/XCAP/SQRT(GQ2(1)*GQ2(2))
+ SS = 2.D0*P1P2+XM2(1)+XM2(2)
+
+ HELFLX(1) = 4.D0*RHO1PP*RHO2PP
+ HELFLX(2) = RHOPM2
+ HELFLX(3) = 2.D0*RHO1PP*RHO200
+ HELFLX(4) = 2.D0*RHO100*RHO2PP
+ HELFLX(5) = RHO100*RHO200
+ HELFLX(6) = -RHOP08
+
+C only flux calculation
+
+ IF(IDIR.EQ.0) THEN
+ IF((IGHEL(1).EQ.1).AND.(IGHEL(2).EQ.1)) THEN
+ WEIGHT = HELFLX(1)
+ ELSE IF((IGHEL(1).EQ.1).AND.(IGHEL(2).EQ.0)) THEN
+ WEIGHT = HELFLX(3)
+ ELSE IF((IGHEL(1).EQ.0).AND.(IGHEL(2).EQ.1)) THEN
+ WEIGHT = HELFLX(4)
+ ELSE IF((IGHEL(1).EQ.0).AND.(IGHEL(2).EQ.0)) THEN
+ WEIGHT = HELFLX(5)
+ ELSE IF((IGHEL(1).EQ.-1).AND.(IGHEL(2).EQ.-1)) THEN
+ WEIGHT = HELFLX(1)
+ ELSE
+ WRITE(LO,'(/1X,A,2I3)')
+ & 'PHO_GGEPEM:ERROR: invalid photon helicities: ',IGHEL
+ WRITE(LO,'(1X,A,I12)')
+ & 'PHO_GGEPEM: event rejected (KEVENT)',KEVENT
+ WEIGHT = 0.D0
+ ENDIF
+
+C fully differential cross section dsig/(dQ_^2 dQ_2^2 dy_1 dy_2 dphi)
+ WGHQPM = WEIGHT/(137.D0**2*16.D0*PI**4*GQ2(1)*GQ2(2))
+ & *SQRT(XCAP/YCAP)*PI*SS/(2.D0*YCAP)*PINI(4,1)*PINI(4,2)
+
+ ELSE
+
+C flux folded with cross section
+C polarized, leading order gam gam --> q qbar cross sections
+
+ DO 125 I=1,6
+ SIGQPM(I) = 0.D0
+ 125 CONTINUE
+C momenta of produced parton pair
+ I1 = IPOS+3
+ I2 = IPOS+4
+ DO 150 K=1,4
+ XK1(K) = PHEP(K,I1)
+ XK2(K) = PHEP(K,I2)
+ 150 CONTINUE
+ XQ2 = PHEP(5,I2)**2
+
+ IF(MSPR.EQ.14) THEN
+C direct photon-photon interaction
+ XKAP = XQ2-(PGAM(4,1)-XK1(4))**2
+ & +(PGAM(1,1)-XK1(1))**2+(PGAM(2,1)-XK1(2))**2
+ & +(PGAM(3,1)-XK1(3))**2
+ XKAM = XQ2-(PGAM(4,1)-XK2(4))**2
+ & +(PGAM(1,1)-XK2(1))**2+(PGAM(2,1)-XK2(2))**2
+ & +(PGAM(3,1)-XK2(3))**2
+ CC = Q1Q2
+ AA = XKAP*XKAM-GQ2(1)*GQ2(2)
+ BB = CC**2-XKAP*XKAM
+ DD = CC**2-GQ2(1)*GQ2(2)
+ RR = -XQ2+W2*AA/(4.D0*DD)
+ Q1KK = Q1Q2-GQ2(1)
+ Q2KK = Q1Q2-GQ2(2)
+ FAC = 192.D0*(PI*ALPHA1*QC2/(XKAP*XKAM))**2/(4.D0*SQRT(XCAP))
+
+ ELSE
+C single-resolved photon-hadron interactions
+C Mandelstam variables
+ IF(MSPR.LE.11) THEN
+ TH = (PGAM(4,1)-XK1(4))**2-(PGAM(1,1)-XK1(1))**2
+ & -(PGAM(2,1)-XK1(2))**2-(PGAM(3,1)-XK1(3))**2
+ UH = (PGAM(4,1)-XK2(4))**2-(PGAM(1,1)-XK2(1))**2
+ & -(PGAM(2,1)-XK2(2))**2-(PGAM(3,1)-XK2(3))**2
+ ELSE
+ TH = (PGAM(4,2)-XK2(4))**2-(PGAM(1,2)-XK2(1))**2
+ & -(PGAM(2,2)-XK2(2))**2-(PGAM(3,2)-XK2(3))**2
+ UH = (PGAM(4,2)-XK1(4))**2-(PGAM(1,2)-XK1(1))**2
+ & -(PGAM(2,2)-XK1(2))**2-(PGAM(3,2)-XK1(3))**2
+ ENDIF
+ V = TH/SH
+ U = UH/SH
+ ENDIF
+
+ WEIGHT = 0.D0
+ IF((IGHEL(1).EQ.1).AND.(IGHEL(2).EQ.1)) THEN
+ IF((MSPR.EQ.10).OR.(MSPR.EQ.12)) THEN
+ IF(MSPR.EQ.10) THEN
+ Q2 = -GQ2(1)
+ SP = SH-XQ2
+ TP = UH-XQ2
+ ELSE
+ Q2 = -GQ2(2)
+ SP = SH-XQ2
+ TP = TH-XQ2
+ ENDIF
+ SIGQPM(1)= -32.D0*PI**2*4.D0/3.D0*ALPHA1*QC2*ALPHA2
+ & *(SP*TP*(2.D0*Q2**4-4.D0*Q2*SP**3-2.D0*Q2**3*(3*SP+TP)
+ & +SP**2*(SP**2+TP**2)+Q2**2*(7.D0*SP**2+2.D0*SP*TP+TP**2))
+ & -2.D0*(2.D0*SP**3*TP*(SP+TP)+Q2**3*(SP**2+6.D0*SP*TP+TP**2)
+ & -2.D0*Q2**2*SP*(SP**2+4.D0*SP*TP+3.D0*TP**2)+Q2*SP*
+ & (SP**3+SP**2*TP-SP*TP**2+TP**3))*XQ2 +
+ & 4.D0*(2.D0*Q2**2-SP**2)*(SP+TP)**2*XQ2**2)/
+ & (SP**2*TP**2*((Q2-SP)**2-4.D0*Q2*XQ2))
+ WEIGHT = HELFLX(1)*SIGQPM(1)/(2.D0*(SH+GQ2(1)+GQ2(2)))
+ ELSE IF((MSPR.EQ.11).OR.(MSPR.EQ.13)) THEN
+ IF(MSPR.EQ.11) THEN
+ Q2 = -GQ2(1)
+ ELSE
+ Q2 = -GQ2(2)
+ ENDIF
+ SP = SH
+ TP = UH
+ SIGQPM(1) = -32.D0*PI**2/2.D0*ALPHA1*QC2*ALPHA2
+ & *(-((Q2**2+SP**2)*TP*(Q2**3-SP**3-3.D0*SP**2*TP
+ & - 4.D0*SP*TP**2 - 2.D0*TP**3 - 3.D0*Q2**2*(SP + TP) + Q2*
+ & (3.D0*SP**2 + 6.D0*SP*TP + 4.D0*TP**2))) +
+ & (3.D0*Q2**5 - Q2**4*(11.D0*SP + 10.D0*TP) +
+ & 4.D0*Q2**3*(4.D0*SP**2 + 5.D0*SP*TP + 4.D0*TP**2)
+ & +Q2*SP**2*(5.D0*SP**2+4.D0*SP*TP+8.D0*TP**2)-4.D0*Q2**2
+ & *(3.D0*SP**3+3.D0*SP**2*TP+4.D0*SP*TP**2+2.D0*TP**3)-
+ & SP**2*(SP**3+2.D0*SP**2*TP+8.D0*SP*TP**2+8.D0*TP**3))*XQ2+
+ & (11.D0*Q2**4-10.D0*Q2**3*(3.D0*SP+2.D0*TP)-2.D0*Q2*SP**2
+ & *(7.D0*SP+2.D0*TP)+2.D0*Q2**2*(15.D0*SP**2+10.D0*SP*TP
+ & +6.D0*TP**2)+SP**2*(3.D0*SP**2+4.D0*SP*TP+12.D0*TP**2))
+ & *XQ2**2+8.D0*(Q2**3-SP**2*TP-Q2**2*(SP+TP))*XQ2**3+
+ & 2.D0*(Q2**2+SP**2)*XQ2**4)/((Q2-SP)**2*(-TP+XQ2)**2*
+ & (Q2-SP-TP+XQ2)**2)
+ WEIGHT = HELFLX(1)*SIGQPM(1)/(2.D0*(SH+GQ2(1)+GQ2(2)))
+ ELSE IF(MSPR.EQ.14) THEN
+ SWPMPM = 4.D0*CC**2*RR*(W2-2.D0*RR)
+ SWPPPP = SWPMPM +2.D0*(CC**2+BB)*(AA-4.D0*RR*CC)
+ SWPPMM = 8.D0*RR*CC*(XKAP*XKAM-RR*CC)
+ & -2.D0*XKAP*XKAM*AA
+ SIGQPM(1) = (SWPPPP+SWPMPM)/2.D0*FAC
+ SIGQPM(2) = SWPPMM*FAC
+ WEIGHT = HELFLX(1)*SIGQPM(1)
+ & +HELFLX(2)*SIGQPM(2)
+ ENDIF
+ ELSE IF((IGHEL(1).EQ.1).AND.(IGHEL(2).EQ.0)) THEN
+ IF(MSPR.EQ.12) THEN
+ Q2 = -GQ2(2)
+ SP = SH-XQ2
+ TP = TH-XQ2
+ SIGQPM(3) = 32.D0*PI**2*8.D0/3.D0*ALPHA1*QC2*ALPHA2
+ & *Q2*(-(SP**2*TP**2*(-Q2 + SP + TP)) +
+ & SP*TP*(2.D0*Q2**2 + 3.D0*SP**2 + 2.D0*SP*TP -
+ & TP**2 - 2.D0*Q2*(3*SP + TP))*XQ2 -
+ & 2.D0*(Q2*(SP**2 + 6.D0*SP*TP + TP**2) -
+ & 2.D0*SP*(SP**2 + 4.D0*SP*TP + 3.D0*TP**2))*
+ & XQ2**2 + 8.D0*(SP + TP)**2*XQ2**3)/
+ & (SP**2*TP**2*((Q2 - SP)**2 - 4.D0*Q2*XQ2))
+ WEIGHT = HELFLX(3)*SIGQPM(3)/(2.D0*(SH+GQ2(2)))
+ ELSE IF(MSPR.EQ.13) THEN
+ Q2 = -GQ2(2)
+ SP = SH
+ TP = TH
+ SIGQPM(3) = 32.D0*PI**2*2.D0*ALPHA1*QC2*ALPHA2
+ & *(-Q2*(SP*TP*(-Q2+SP+TP)+(Q2**2-Q2*SP-2*SP*TP)*XQ2 +
+ & SP*XQ2**2))/((Q2-SP)**2*(-TP+XQ2)*(Q2-SP-TP+XQ2))
+ WEIGHT = HELFLX(3)*SIGQPM(3)/(2.D0*(SH+GQ2(2)))
+ ELSE IF(MSPR.EQ.14) THEN
+ SWP0M0 = 4.D0*RR*GQ2(2)*(-CC**2*GQ2(1)*W2
+ & -XKAP*XKAM*Q1KK**2)/DD
+ SWP0P0 = - SWP0M0+2.D0*GQ2(2)*GQ2(1)**2*W2*BB/DD
+ SWPP00 = 2.D0*W2*BB*(AA-2.D0*CC*RR)
+ & *SQRT(GQ2(1)*GQ2(2))/DD
+ SWP00P = 4.D0*RR*(CC**2*(GQ2(1)*Q2KK+GQ2(2)*Q1KK)
+ & +XKAP*XKAM*Q1KK*Q2KK)*SQRT(GQ2(1)*GQ2(2))/DD
+ SW0PM0 = -SWP00P-2.D0*GQ2(1)*GQ2(2)*W2*BB
+ & *SQRT(GQ2(1)*GQ2(2))/DD
+ SIGQPM(3) = SWP0P0*FAC
+ SIGQPM(6) = (SWPP00+SW0PM0)/2.D0*FAC
+ WEIGHT = HELFLX(3)*SIGQPM(3)
+ & +HELFLX(6)*SIGQPM(6)/2.D0
+ ENDIF
+ ELSE IF((IGHEL(1).EQ.0).AND.(IGHEL(2).EQ.1)) THEN
+ IF(MSPR.EQ.10) THEN
+ Q2 = -GQ2(1)
+ SP = SH-XQ2
+ TP = UH-XQ2
+ SIGQPM(4) = 32.D0*PI**2*8.D0/3.D0*ALPHA1*QC2*ALPHA2
+ & *Q2*(-(SP**2*TP**2*(-Q2 + SP + TP)) +
+ & SP*TP*(2.D0*Q2**2 + 3.D0*SP**2 + 2.D0*SP*TP -
+ & TP**2 - 2.D0*Q2*(3*SP + TP))*XQ2 -
+ & 2.D0*(Q2*(SP**2 + 6.D0*SP*TP + TP**2) -
+ & 2.D0*SP*(SP**2 + 4.D0*SP*TP + 3.D0*TP**2))*
+ & XQ2**2 + 8.D0*(SP + TP)**2*XQ2**3)/
+ & (SP**2*TP**2*((Q2 - SP)**2 - 4.D0*Q2*XQ2))
+ WEIGHT = HELFLX(4)*SIGQPM(4)/(2.D0*(SH+GQ2(1)))
+ ELSE IF(MSPR.EQ.11) THEN
+ Q2 = -GQ2(1)
+ SP = SH
+ TP = TH
+ SIGQPM(4) = 32.D0*PI**2*2.D0*ALPHA1*QC2*ALPHA2
+ & *(-Q2*(SP*TP*(-Q2+SP+TP)+(Q2**2-Q2*SP-2*SP*TP)*XQ2 +
+ & SP*XQ2**2))/((Q2-SP)**2*(-TP+XQ2)*(Q2-SP-TP+XQ2))
+ WEIGHT = HELFLX(4)*SIGQPM(4)/(2.D0*(SH+GQ2(2)))
+ ELSE IF(MSPR.EQ.14) THEN
+ SW0P0M = 4.D0*RR*GQ2(1)*(-CC**2*GQ2(2)*W2
+ & -XKAP*XKAM*Q2KK**2)/DD
+ SW0P0P = - SW0P0M+2.D0*GQ2(1)*GQ2(2)**2*W2*BB/DD
+ SWPP00 = 2.D0*W2*BB*(AA-2.D0*CC*RR)
+ & *SQRT(GQ2(1)*GQ2(2))/DD
+ SWP00P = 4.D0*RR*(CC**2*(GQ2(1)*Q2KK+GQ2(2)*Q1KK)
+ & +XKAP*XKAM*Q1KK*Q2KK)*SQRT(GQ2(1)*GQ2(2))/DD
+ SW0PM0 = -SWP00P-2.D0*GQ2(1)*GQ2(2)*W2*BB
+ & *SQRT(GQ2(1)*GQ2(2))/DD
+ SIGQPM(4) = SW0P0P*FAC
+ SIGQPM(6) = (SWPP00+SW0PM0)/2.D0*FAC
+ WEIGHT = HELFLX(4)*SIGQPM(4)
+ & +HELFLX(6)*SIGQPM(6)/2.D0
+ ENDIF
+ ELSE IF((IGHEL(1).EQ.0).AND.(IGHEL(2).EQ.0)) THEN
+ IF(MSPR.EQ.14) THEN
+ SW0000 = 2.D0*GQ2(1)*GQ2(2)*W2*W2*AA*BB/DD**2
+ SIGQPM(5) = SW0000*FAC
+ WEIGHT = HELFLX(5)*SIGQPM(5)
+ ENDIF
+ ELSE
+ WRITE(LO,'(/1X,A,2I3)')
+ & 'PHO_GGEPEM:ERROR: invalid photon helicities: ',IGHEL
+ WRITE(LO,'(1X,A,I12)')
+ & 'PHO_GGEPEM: event rejected (KEVENT)',KEVENT
+ WEIGHT = 0.D0
+ ENDIF
+
+C fully differential cross section dsig/(dQ_^2 dQ_2^2 dy_1 dy_2 dphi)
+
+ WGHQPM = WEIGHT/(137.D0**2*16.D0*PI**4*GQ2(1)*GQ2(2))
+ & *SQRT(XCAP/YCAP)*PI*SS/(2.D0*YCAP)*PINI(4,1)*PINI(4,2)
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GGBLSR
+ SUBROUTINE PHO_GGBLSR(NEVENT,EE1,EE2,
+ & Pl_lam_1,Pl_lam_2,X_1,X_2,rho,A)
+C***********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-gamma collisions via laser backscattering
+C
+C input: EE1 lab. system energy of electron/positron 1
+C EE2 lab. system energy of electron/positron 2
+C NEVENT number of events to generate
+C Pl_lam_1/2 product of electron and photon pol.
+C X_1/2 standard X parameter
+C rho ratio of distance to conversion point and
+C transverse beam size
+C A ellipticity of electon beam
+C
+C (see Ginzburg & Kotkin hep-ph/9905462)
+C
+C from /LEPCUT/:
+C YMIN1 lower limit of Y1
+C (energy fraction taken by photon from electron)
+C YMAX1 upper limit of Y1
+C YMIN2 lower limit of Y2
+C (energy fraction taken by photon from electron)
+C YMAX2 upper limit of Y2
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ parameter (N_dim=100)
+ dimension X_inp_1(N_dim),F_inp_1(N_dim),F_int_1(N_dim),
+ & X_inp_2(N_dim),F_inp_2(N_dim),F_int_2(N_dim),
+ & Xgrid(96),Wgrid(96)
+
+ DIMENSION P1(4),P2(4)
+
+ Pi2 = 2.D0*Pi
+
+ WRITE(LO,'(//1X,A,I10)') 'PHO_GGBLSR: events to process',NEVENT
+
+ YMAX1 = MIN(X_1/(1.D0+X_1),YMAX1)
+ YMAX2 = MIN(X_2/(1.D0+X_2),YMAX2)
+ IF((YMIN1.GT.YMAX1).OR.(YMIN2.GT.YMAX2)) THEN
+ WRITE(LO,'(/1X,2A,2E12.4)') 'PHO_GGBLSR:ERROR: ',
+ & 'invalid Ymin1,Ymin2',YMIN1,YMIN2
+ RETURN
+ ENDIF
+ IDPSRC(1) = 0
+ IDBSRC(1) = 0
+ IDPSRC(2) = 0
+ IDBSRC(2) = 0
+
+C initialize sampling
+
+ Max_tab = 50
+ DELY1 = (YMAX1-YMIN1)/DBLE(Max_tab-1)
+ DELY2 = (YMAX2-YMIN2)/DBLE(Max_tab-1)
+
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,I5)')
+ & 'PHO_GGBLSR: table of photon flux ',Max_tab
+
+ DO 100 I=1,Max_tab
+
+ y1 = YMIN1+DELY1*DBLE(I-1)
+ r1 = y1/(X_1*(1.D0-y1))
+ X_inp_1(i) = y1
+ F_inp_1(i) = 1.D0/(1.D0-y1)-y1+(2.D0*r1-1.D0)**2
+ & -Pl_lam_1*X_1*r1*(2.D0*r1-1.D0)*(2.D0-y1)
+
+ y2 = YMIN2+DELY2*DBLE(I-1)
+ r2 = y2/(X_2*(1.D0-y2))
+ X_inp_2(i) = y2
+ F_inp_2(i) = 1.D0/(1.D0-y2)-y2+(2.D0*r2-1.D0)**2
+ & -Pl_lam_2*X_2*r2*(2.D0*r2-1.D0)*(2.D0-y2)
+
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,1p,2E13.4,5x,2E13.4)')
+ & y1,F_inp_1(i),y2,F_inp_2(i)
+
+ 100 CONTINUE
+
+ call pho_samp1d(-1,X_inp_1,F_inp_1,F_int_1,Max_tab,X_out_1)
+ call pho_samp1d(-1,X_inp_2,F_inp_2,F_int_2,Max_tab,X_out_2)
+
+C initialize event generator
+
+C photon 1
+ EGAM = YMAX1*EE1
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = EGAM
+ P1(4) = EGAM
+C photon 2
+ EGAM = YMAX2*EE2
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -EGAM
+ P2(4) = EGAM
+ CALL PHO_SETPAR(1,22,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+
+C generation of events
+
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ NITER = NEVENT
+ ITRY = 0
+ ITRW = 0
+ DO 200 I=1,NITER
+ 150 CONTINUE
+ ITRY = ITRY+1
+ 175 CONTINUE
+ ITRW = ITRW+1
+
+ call pho_samp1d(1,X_inp_1,F_inp_1,F_int_1,Max_tab,X_out_1)
+ call pho_samp1d(1,X_inp_2,F_inp_2,F_int_2,Max_tab,X_out_2)
+
+ g_1 = sqrt(max(0.D0,X_1/(X_out_1+1.D-6)-X_1-1.D0))
+ g_2 = sqrt(max(0.D0,X_2/(X_out_2+1.D-6)-X_2-1.D0))
+ if(abs(1.D0-A).lt.1.D-3) then
+ v = rho**2/4.D0*g_1*g_2
+ Wght = exp(-rho**2/8.D0*(g_1-g_2)**2)*pho_ExpBessI0(v)
+ else
+ Nint = 16
+ call pho_gauset(0.D0,Pi2,Nint,Xgrid,Wgrid)
+ A2 = A**2
+ fac = rho**2/(4.D0*(1.D0+A2))
+ Wght = 0.D0
+ do i1=1,Nint
+ phi_1 = Xgrid(i1)
+ do i2=1,Nint
+ phi_2 = Xgrid(i2)
+ Wght = Wght
+ & +exp(-fac*(A2*(g_1*cos(phi_1)+g_2*cos(phi_2))**2
+ & +(g_1*sin(phi_1)+g_2*sin(phi_2))**2))
+ & *Wgrid(i1)*Wgrid(i2)
+ enddo
+ enddo
+ Wght = Wght/Pi2**2
+ endif
+
+ IF(Wght.GT.1.D0) THEN
+ WRITE(LO,'(1X,A,5E11.4)')
+ & 'PHO_GGBLSR:WEIGHT ERROR:',Y1,Y2,Wght
+ ENDIF
+ IF(DT_RNDM(dum).GT.Wght) GOTO 175
+
+ Y1 = X_out_1
+ Y2 = X_out_2
+
+ Q2P1 = 0.D0
+ Q2P2 = 0.D0
+ GYY(1) = Y1
+ GQ2(1) = Q2P1
+ GYY(2) = Y2
+ GQ2(2) = Q2P2
+C incoming electron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = EE1
+ PINI(4,1) = EE1
+ PINI(5,1) = 0.D0
+C outgoing electron 1
+ YQ2 = SQRT((1.D0-Y1)*Q2P2)
+ Q2E = Q2P1/(4.D0*EE1)
+ E1Y = EE1*(1.D0-Y1)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,1) = YQ2*COF
+ PFIN(2,1) = YQ2*SIF
+ PFIN(3,1) = E1Y-Q2E
+ PFIN(4,1) = E1Y+Q2E
+ PFIN(5,1) = 0.D0
+C photon 1
+ P1(1) = -PFIN(1,1)
+ P1(2) = -PFIN(2,1)
+ P1(3) = PINI(3,1)-PFIN(3,1)
+ P1(4) = PINI(4,1)-PFIN(4,1)
+C incoming electron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -EE2
+ PINI(4,2) = EE2
+ PINI(5,2) = 0.D0
+C outgoing electron 2
+ YQ2 = SQRT((1.D0-Y2)*Q2P2)
+ Q2E = Q2P2/(4.D0*EE2)
+ E1Y = EE2*(1.D0-Y2)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,2) = YQ2*COF
+ PFIN(2,2) = YQ2*SIF
+ PFIN(3,2) = -E1Y+Q2E
+ PFIN(4,2) = E1Y+Q2E
+ PFIN(5,2) = 0.D0
+C photon 2
+ P2(1) = -PFIN(1,2)
+ P2(2) = -PFIN(2,2)
+ P2(3) = PINI(3,2)-PFIN(3,2)
+ P2(4) = PINI(4,2)-PFIN(4,2)
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF(GGECM.LT.0.1D0) GOTO 175
+ GGECM = SQRT(GGECM)
+ IF((GGECM.LT.ECMIN).OR.(GGECM.GT.ECMAX)) GOTO 175
+
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = 0.D0
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = 0.D0
+C photon helicities
+ IGHEL(1) = 1
+ IGHEL(2) = 1
+C cut given by user
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+
+C statistics
+ AY1 = AY1+Y1
+ AYS1 = AYS1+Y1*Y1
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+
+ WGY = DBLE(ITRY)/DBLE(ITRW)
+ AY1 = AY1/DBLE(NITER)
+ AYS1 = AYS1/DBLE(NITER)
+ DAY1 = SQRT((AYS1-AY1**2)/DBLE(NITER))
+ AY2 = AY2/DBLE(NITER)
+ AYS2 = AYS2/DBLE(NITER)
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(NITER))
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,3I10)')
+ & 'PHO_GGBLSR:SUMMARY:NITER,ITRY,ITRW',NITER,ITRY,ITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,2F10.5)') 'PHO_GGBLSR:AVERAGE Y1,DY1 ',AY1,DAY1
+ WRITE(LO,'(1X,A,2F10.5)') 'PHO_GGBLSR:AVERAGE Y2,DY2 ',AY2,DAY2
+
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_GGBLSR:NO OUTPUT OF HISTOGRAMS',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, pho_samp1d
+ SUBROUTINE pho_samp1d(Imode,X_inp,F_inp,F_int,N_dim,X_out)
+C***********************************************************************
+C
+C Monte Carlo sampling from arbitrary 1d distribution
+C (linear interpolation to improve reproduction of initial function)
+C
+C input: Imode -1 initialization
+C 1 sampling (after initialization)
+C X_inp(N_dim) array with x values
+C F_inp(N_dim) array with function values
+C F_int(N_dim) array with integral
+C
+C output: X_out sampled value (Imode=1)
+C
+C (R.E. 10/99)
+C
+C***********************************************************************
+ implicit none
+ save
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ integer Imode,N_dim
+ double precision X_inp,F_inp,F_int,X_out
+ dimension X_inp(N_dim),F_inp(N_dim),F_int(N_dim)
+
+C local variables
+ integer i
+ double precision dum,xi,a,b
+
+C external functions
+ double precision DT_RNDM
+ external DT_RNDM
+
+ if(Imode.eq.-1) then
+
+C initialization
+
+ F_int(1) = 0.D0
+ do i=2,N_dim
+ F_int(i) = F_int(i-1)
+ & +0.5D0*(F_inp(i)+F_inp(i-1))*(X_inp(i)-X_inp(i-1))
+ enddo
+
+ else if(Imode.eq.1) then
+
+C sample from previously calculated integral
+
+ xi = DT_RNDM(dum)*F_int(N_dim)
+
+ do i=2,N_dim
+ if(xi.lt.F_int(i)) then
+ a = (F_inp(i)-F_inp(i-1))/(X_inp(i)-X_inp(i-1))
+ b = F_inp(i)-a*X_inp(i)
+ xi = xi-F_int(i-1)+0.5D0*a*X_inp(i-1)**2+b*X_inp(i-1)
+ X_out = (sqrt(b**2+2.D0*a*xi)-b)/a
+ return
+ endif
+ enddo
+ X_out = X_inp(N_dim)
+
+ else
+
+C invalid option Imode
+
+ WRITE(LO,'(1x,a,i6)') 'PHO_SAMP1D: invalid option Imode: ',Imode
+ X_out = 0.D0
+
+ endif
+
+ END
+
+CDECK ID>, pho_ExpBessI0
+ DOUBLE PRECISION FUNCTION pho_ExpBessI0(X)
+C**********************************************************************
+C
+C Bessel Function I0 times exponential function from neg. arg.
+C (defined for pos. arguments only)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ AX = ABS(X)
+ IF (AX .LT. 3.75D0) THEN
+ Y = (X/3.75D0)**2
+ pho_ExpBessI0 =
+ & (1.0D0+Y*(3.5156229D0+Y*(3.0899424D0+Y*(1.2067492D0
+ & +Y*(0.2659732D0+Y*(0.360768D-1+Y*0.45813D-2))))))*EXP(-AX)
+ ELSE
+ Y = 3.75D0/AX
+ pho_ExpBessI0 =
+ & (1.D0/SQRT(AX))*(0.39894228D0+Y*(0.1328592D-1
+ & +Y*(0.225319D-2+Y*(-0.157565D-2+Y*(0.916281D-2
+ & +Y*(-0.2057706D-1+Y*(0.2635537D-1+Y*(-0.1647633D-1
+ & +Y*0.392377D-2))))))))
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GGBEAM
+ SUBROUTINE PHO_GGBEAM(NEVENT,EE,YPSI,SIGX,SIGY,SIGZ,AEB)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-gamma collisions via beamstrahlung
+C
+C input: EE LAB system energy of electron/positron
+C YPSI beamstrahlung parameter
+C SIGX,Y transverse bunch dimensions
+C SIGZ longitudinal bunch dimension
+C AEB number of electrons/positrons in a bunch
+C NEVENT number of events to generate
+C from /LEPCUT/:
+C YMIN1 lower limit of Y
+C (energy fraction taken by photon from electron)
+C YMAX1 upper cutoff for Y, necessary to avoid
+C underflows
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-20,
+ & PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ PARAMETER (Max_tab=100)
+ DIMENSION P1(4),P2(4),TABCU(0:Max_tab),TABYL(0:Max_tab)
+
+C
+ WRITE(LO,'(//1X,A,I10)') 'PHO_GGBEAM: events to process',NEVENT
+C electron data
+ RE = 2.818D-12
+ ELEM = 0.512D-03
+ IDPSRC(1) = 0
+ IDBSRC(1) = 0
+ IDPSRC(2) = 0
+ IDBSRC(2) = 0
+C table of flux function, log interpolation
+ IF(YPSI.LE.0.D0) THEN
+ YPSI = 5.D0*RE**2*EE*AEB*137.D0/(6.D0*SIGZ*(SIGX+SIGY)*ELEM)
+ ENDIF
+ WRITE(LO,'(/1X,A,E12.4)')
+ & 'PHO_GGBEAM: beamstrahlung parameter:',YPSI
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGBEAM: sigma-z,ne-bunch:',SIGZ,AEB
+ TT = 2.D0/3.D0
+ OT = 1.D0/3.D0
+C GAOT = DGAMMA(OT)
+ GAOT = 2.6789385347D0
+ AKAP = TT/YPSI
+ WW = 1.D0/(6.D0*SQRT(AKAP))
+ ANGAM = 5.D0*SIGZ*ELEM/(137.D0**2*2.D0*RE*EE)
+ & *YPSI/SQRT(1.D0+YPSI**TT)
+
+ YMIN = YMIN1
+ YMAX = MIN(YMAX1,0.9D0)
+ TABCU(0) = 0.D0
+ TABYL(0) = LOG(YMIN)
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ FLUX = 0.D0
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,I5)')
+ & 'PHO_GGBEAM: table of photon flux',Max_tab
+ DO 100 I=1,Max_tab
+ Y = EXP(TABYL(0)+DELLY*DBLE(I-1))
+ GG = 1.D0-0.5D0*(1-Y)**TT*(1.D0-Y+(1.D0+Y)*SQRT(1.D0+YPSI**TT))
+ FF = AKAP**OT/GAOT/Y**TT/(1.D0-Y)**OT*EXP(-AKAP*Y/(1.D0-Y))
+ & *((1.D0-WW)/GG*(1.D0-(1.D0-EXP(-ANGAM*GG))/(ANGAM*GG))
+ & +WW*(1.D0-(1.D0-EXP(-ANGAM))/ANGAM))
+ TABCU(I) = TABCU(I-1)+FF*Y
+ TABYL(I) = LOG(Y)
+ FLUX = FLUX+Y*FF
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,2E15.4)') Y,FF
+ 100 CONTINUE
+ FLUX = FLUX*DELLY
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,E12.4)')
+ & 'PHO_GGBEAM: integrated flux (one side):',FLUX
+
+ EE1 = EE
+ EE2 = EE
+C photon 1
+ EGAM = YMAX*EE
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = EGAM
+ P1(4) = EGAM
+C photon 2
+ EGAM = YMAX*EE
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -EGAM
+ P2(4) = EGAM
+ CALL PHO_SETPAR(1,22,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+
+C generation of events
+
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ NITER = NEVENT
+ ITRY = 0
+ ITRW = 0
+ DO 200 I=1,NITER
+ 150 CONTINUE
+ ITRY = ITRY+1
+ 175 CONTINUE
+ ITRW = ITRW+1
+ XI = DT_RNDM(AY1)*TABCU(Max_tab)
+ DO 110 K=1,Max_tab
+ IF(TABCU(K).GE.XI) THEN
+ Y1 = DELLY/(TABCU(K)-TABCU(K-1))*(XI-TABCU(K-1))+TABYL(K-1)
+ Y1 = EXP(Y1)
+ GOTO 120
+ ENDIF
+ 110 CONTINUE
+ Y1 = YMAX
+ 120 CONTINUE
+ XI = DT_RNDM(AY2)*TABCU(Max_tab)
+ DO 130 K=1,Max_tab
+ IF(TABCU(K).GE.XI) THEN
+ Y2 = DELLY/(TABCU(K)-TABCU(K-1))*(XI-TABCU(K-1))+TABYL(K-1)
+ Y2 = EXP(Y2)
+ GOTO 140
+ ENDIF
+ 130 CONTINUE
+ Y2 = YMAX
+ 140 CONTINUE
+
+ Q2P1 = 0.D0
+ Q2P2 = 0.D0
+ GYY(1) = Y1
+ GQ2(1) = Q2P1
+ GYY(2) = Y2
+ GQ2(2) = Q2P2
+C incoming electron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = EE1
+ PINI(4,1) = EE1
+ PINI(5,1) = 0.D0
+C outgoing electron 1
+ YQ2 = SQRT((1.D0-Y1)*Q2P2)
+ Q2E = Q2P1/(4.D0*EE1)
+ E1Y = EE1*(1.D0-Y1)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,1) = YQ2*COF
+ PFIN(2,1) = YQ2*SIF
+ PFIN(3,1) = E1Y-Q2E
+ PFIN(4,1) = E1Y+Q2E
+ PFIN(5,1) = 0.D0
+C photon 1
+ P1(1) = -PFIN(1,1)
+ P1(2) = -PFIN(2,1)
+ P1(3) = PINI(3,1)-PFIN(3,1)
+ P1(4) = PINI(4,1)-PFIN(4,1)
+C incoming electron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -EE2
+ PINI(4,2) = EE2
+ PINI(5,2) = 0.D0
+C outgoing electron 2
+ YQ2 = SQRT((1.D0-Y2)*Q2P2)
+ Q2E = Q2P2/(4.D0*EE2)
+ E1Y = EE2*(1.D0-Y2)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,2) = YQ2*COF
+ PFIN(2,2) = YQ2*SIF
+ PFIN(3,2) = -E1Y+Q2E
+ PFIN(4,2) = E1Y+Q2E
+ PFIN(5,2) = 0.D0
+C photon 2
+ P2(1) = -PFIN(1,2)
+ P2(2) = -PFIN(2,2)
+ P2(3) = PINI(3,2)-PFIN(3,2)
+ P2(4) = PINI(4,2)-PFIN(4,2)
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF(GGECM.LT.0.1D0) GOTO 175
+ GGECM = SQRT(GGECM)
+ IF((GGECM.LT.ECMIN).OR.(GGECM.GT.ECMAX)) GOTO 175
+C
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = 0.D0
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = 0.D0
+C photon helicities
+ IGHEL(1) = 1
+ IGHEL(2) = 1
+C cut given by user
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+ GGECML = LOG(GGECM)
+
+C statistics
+ AY1 = AY1+Y1
+ AYS1 = AYS1+Y1*Y1
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+C
+ WGY = FLUX**2*DBLE(ITRY)/DBLE(ITRW)
+ AY1 = AY1/DBLE(NITER)
+ AYS1 = AYS1/DBLE(NITER)
+ DAY1 = SQRT((AYS1-AY1**2)/DBLE(NITER))
+ AY2 = AY2/DBLE(NITER)
+ AYS2 = AYS2/DBLE(NITER)
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(NITER))
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,2I10)')
+ & 'PHO_GGBEAM:SUMMARY:NITER,ITRY',NITER,ITRY
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,2F10.5)') 'PHO_GGBEAM:AVERAGE Y1,DY1 ',AY1,DAY1
+ WRITE(LO,'(1X,A,2F10.5)') 'PHO_GGBEAM:AVERAGE Y2,DY2 ',AY2,DAY2
+C
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_GGBEAM:NO OUTPUT OF HISTOGRAMS',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GGHIOF
+ SUBROUTINE PHO_GGHIOF(NEVENT,EEN,NA,NZ)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-gamma collisions via heavy ions (form factor approach)
+C
+C input: EEN LAB system energy per nucleon
+C NA atomic number of ion/hadron
+C NZ charge number of ion/hadron
+C NEVENT number of events to generate
+C from /LEPCUT/:
+C YMIN1,2 lower limit of Y
+C (energy fraction taken by photon from hadron)
+C YMAX1,2 upper cutoff for Y, necessary to avoid
+C underflows
+C Q2MIN1,2 minimum Q**2 of photons (should be set to 0)
+C Q2MAX1,2 maximum Q**2 of photons (if necessary,
+C corrected according size of hadron)
+C
+C currently implemented approximation similar to:
+C E.Papageorgiu PhysLettB250(1990)155
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION P1(4),P2(4),BIMP(2,2)
+
+C
+ WRITE(LO,'(2(/1X,A))') 'PHO_GGHIOF:GAMMA-GAMMA EVENT GENERATION',
+ & '--------------------------------------'
+C hadron size and mass
+ FM2GEV = 5.07D0
+ HIMASS = DBLE(NA)*0.938D0
+ HIMA2 = HIMASS**2
+ HIRADI = 1.2D0*FM2GEV*DBLE(NA)**0.333
+ ALPHA = DBLE(NZ**2)/137.D0
+C correct Q2MAX1,2 according to hadron size
+ Q2MAXH = 2.D0/HIRADI**2
+ Q2MAX1 = MIN(Q2MAX1,Q2MAXH)
+ Q2MAX2 = MIN(Q2MAX2,Q2MAXH)
+ IF(Q2MAX1.LT.1.D-20) Q2MAX1 = Q2MAXH
+ IF(Q2MAX2.LT.1.D-20) Q2MAX2 = Q2MAXH
+C total hadron / heavy ion energy
+ EE = EEN*DBLE(NA)
+ GAMMA = EE/HIMASS
+C setup /POFSRC/
+ GAMSRC(1) = GAMMA
+ GAMSRC(2) = GAMMA
+ RADSRC(1) = HIRADI
+ RADSRC(2) = HIRADI
+ AMSRC(1) = HIMASS
+ AMSRC(1) = HIMASS
+C kinematic limitations
+ YMI = (ECMIN/(2.D0*EE))**2
+ IF(YMIN1.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGHIOF: ymin1 increased to (old/new)',YMIN1,YMI
+ YMIN1 = YMI
+ ELSE IF(YMIN1.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GGHIOF:','ECM-CUT CORRESPONDS TO YMIN1 OF',YMI,
+ & ' INSTEAD OF',YMIN1
+ ENDIF
+ IF(YMIN2.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGHIOF: ymin2 increased to (old/new)',YMIN2,YMI
+ YMIN2 = YMI
+ ELSE IF(YMIN2.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GGHIOF:','ECM-CUT CORRESPONDS TO YMIN2 OF',YMI,
+ & ' INSTEAD OF',YMIN2
+ ENDIF
+C kinematic limitation
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*YMIN1**2/(1.D0-YMIN1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*YMIN2**2/(1.D0-YMIN2))
+C debug output
+ WRITE(LO,'(/6X,A,2I4)') 'MASS NUMBER, CHARGE NUMBER ',NA,NZ
+ WRITE(LO,'(6X,A,E12.5)') 'HADRON MASS (GeV) ',HIMASS
+ WRITE(LO,'(6X,A,E12.5)') 'HADRON RADIUS (GeV**-1) ',HIRADI
+ WRITE(LO,'(6X,A,2E12.5)') 'Q**2 RANGE PHOTON 1 (GEV**2)',Q2LOW1,
+ & Q2MAX1
+ WRITE(LO,'(6X,A,2E12.5)') 'Q**2 RANGE PHOTON 2 (GEV**2)',Q2LOW2,
+ & Q2MAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 1 ',YMIN1,
+ & YMAX1
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 2 ',YMIN2,
+ & YMAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'SQRT(S) PER NUCLEON, TOTAL ',
+ & 2.D0*EEN,2.D0*EE
+ WRITE(LO,'(6X,A,I10)') 'EVENTS TO PROCESS ',NEVENT
+ IF(Q2LOW1.GE.Q2MAX1) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOF:ERROR:INCONSISTENT Q**2 RANGE 1',Q2LOW1,Q2MAX1
+ CALL PHO_ABORT
+ ENDIF
+ IF(Q2LOW2.GE.Q2MAX2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOF:ERROR:INCONSISTENT Q**2 RANGE 2',Q2LOW2,Q2MAX2
+ CALL PHO_ABORT
+ ENDIF
+C hadron numbers set to 0
+ IDPSRC(1) = 0
+ IDPSRC(2) = 0
+ IDBSRC(1) = 0
+ IDBSRC(2) = 0
+C
+ Max_tab = 100
+ YMAX = YMAX1
+ YMIN = YMIN1
+ XMAX = LOG(YMAX)
+ XMIN = LOG(YMIN)
+ XDEL = XMAX-XMIN
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ DO 100 I=1,Max_tab
+ Y1 = EXP(XMIN+DELLY*DBLE(I-1))
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*Y1*Y1/(1.D0-Y1))
+ IF(Q2LOW1.GE.Q2MAX1) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOF: ymax1 changed from/to',YMAX1,Y1
+ YMAX1 = MIN(Y1,YMAX1)
+ GOTO 101
+ ENDIF
+ 100 CONTINUE
+ 101 CONTINUE
+ YMAX = YMAX2
+ YMIN = YMIN2
+ XMAX = LOG(YMAX)
+ XMIN = LOG(YMIN)
+ XDEL = XMAX-XMIN
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ DO 102 I=1,Max_tab
+ Y1 = EXP(XMIN+DELLY*DBLE(I-1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y1*Y1/(1.D0-Y1))
+ IF(Q2LOW2.GE.Q2MAX2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOF: ymax2 changed from/to',YMAX2,Y1
+ YMAX2 = MIN(Y1,YMAX2)
+ GOTO 103
+ ENDIF
+ 102 CONTINUE
+ 103 CONTINUE
+ YMI = (ECMIN/(2.D0*EE))**2/YMAX2
+ IF(YMI.GT.YMIN1) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOF: ymin1 changed from/to',YMIN1,YMI
+ YMIN1 = YMI
+ ENDIF
+ YMI = (ECMIN/(2.D0*EE))**2/YMAX1
+ IF(YMI.GT.YMIN2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOF: ymin2 changed from/to',YMIN2,YMI
+ YMIN2 = YMI
+ ENDIF
+C
+ X1MAX = LOG(YMAX1)
+ X1MIN = LOG(YMIN1)
+ X1DEL = X1MAX-X1MIN
+ X2MAX = LOG(YMAX2)
+ X2MIN = LOG(YMIN2)
+ X2DEL = X2MAX-X2MIN
+ DELLY = LOG(YMAX1/YMIN1)/DBLE(Max_tab-1)
+ FLUX = 0.D0
+ IF(IDEB(30).GE.1) WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_GGHIOF: table of raw photon flux (side 1)',Max_tab
+ DO 105 I=1,Max_tab
+ Y1 = EXP(X1MIN+DELLY*DBLE(I-1))
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*Y1*Y1/(1.D0-Y1))
+ FF = ((1.D0+(1.D0-Y1)**2)/Y1*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*HIMA2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1))*ALPHA/(2.D0*PI)
+ FLUX = FLUX+Y1*FF
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,2E15.4)') Y1,FF
+ 105 CONTINUE
+ FLUX = FLUX*DELLY
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,E12.4)')
+ & 'PHO_GGHIOF: integrated flux (one side):',FLUX
+C
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*YMIN1**2/(1.D0-YMIN1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*YMIN2**2/(1.D0-YMIN2))
+ Y1 = YMIN1
+ Y2 = YMIN2
+ WGMAX = ((1.D0+(1.D0-Y1)**2)*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*HIMA2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1)
+ & *((1.D0+(1.D0-Y2)**2)*LOG(Q2MAX2/Q2LOW2)
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2)
+C
+C photon 1
+ EGAM = YMAX1*EE
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = EGAM
+ P1(4) = EGAM
+C photon 2
+ EGAM = YMAX2*EE
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -EGAM
+ P2(4) = EGAM
+ CALL PHO_SETPAR(1,22,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C
+C generation of events, flux calculation
+
+ ECFRAC = ECMIN**2/(4.D0*EE*EE)
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ Q21MIN = 1.D30
+ Q22MIN = 1.D30
+ Q21MAX = 0.D0
+ Q22MAX = 0.D0
+ Q21AVE = 0.D0
+ Q22AVE = 0.D0
+ Q21AV2 = 0.D0
+ Q22AV2 = 0.D0
+ YY1MIN = 1.D30
+ YY2MIN = 1.D30
+ YY1MAX = 0.D0
+ YY2MAX = 0.D0
+ NITER = NEVENT
+ ITRY = 0
+ ITRW = 0
+ DO 200 I=1,NITER
+C sample y1, y2
+ 150 CONTINUE
+ ITRY = ITRY+1
+ 175 CONTINUE
+ ITRW = ITRW+1
+ Y1 = EXP(X1DEL*DT_RNDM(AY1)+X1MIN)
+ Y2 = EXP(X2DEL*DT_RNDM(AY2)+X2MIN)
+ IF(Y1*Y2.LT.ECFRAC) GOTO 175
+C
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*Y1**2/(1.D0-Y1))
+ IF(Q2LOW1.GE.Q2MAX1) GOTO 175
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y2**2/(1.D0-Y2))
+ IF(Q2LOW2.GE.Q2MAX2) GOTO 175
+ Q2LOG1 = LOG(Q2MAX1/Q2LOW1)
+ Q2LOG2 = LOG(Q2MAX2/Q2LOW2)
+ WGH = ((1.D0+(1.D0-Y1)**2)*Q2LOG1
+ & -2.D0*HIMA2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1)
+ & *((1.D0+(1.D0-Y2)**2)*Q2LOG2
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2)
+ IF(WGMAX.LT.WGH) THEN
+ WRITE(LO,'(1X,A,4E12.5)')
+ & 'PHO_GGHIOF:WEIGHT ERROR:',Y1,Y2,WGMAX,WGH
+ ENDIF
+ IF(DT_RNDM(AYS1)*WGMAX.GT.WGH) GOTO 175
+C sample Q2
+ IF(IPAMDL(174).EQ.1) THEN
+ YEFF = 1.D0+(1.D0-Y1)**2
+ 185 CONTINUE
+ Q2P1 = Q2LOW1*EXP(Q2LOG1*DT_RNDM(Y1))
+ WEIGHT = (YEFF-2.D0*(1.D0-Y1)*Q2LOW1/Q2P1)/YEFF
+ IF(WEIGHT.LT.DT_RNDM(Q2P1)) GOTO 185
+ ELSE
+ Q2P1 = Q2LOW1
+ ENDIF
+ IF(IPAMDL(174).EQ.1) THEN
+ YEFF = 1.D0+(1.D0-Y2)**2
+ 186 CONTINUE
+ Q2P2 = Q2LOW2*EXP(Q2LOG2*DT_RNDM(Y2))
+ WEIGHT = (YEFF-2.D0*(1.D0-Y2)*Q2LOW2/Q2P2)/YEFF
+ IF(WEIGHT.LT.DT_RNDM(Q2P2)) GOTO 186
+ ELSE
+ Q2P2 = Q2LOW2
+ ENDIF
+C impact parameter
+ GAIMP(1) = 1.D0/SQRT(Q2P1)
+ GAIMP(2) = 1.D0/SQRT(Q2P2)
+C form factor (squared)
+ FF21 = 1.D0
+ IF(GAIMP(1).LT.HIRADI) FF21 = 0.D0
+ FF22 = 1.D0
+ IF(GAIMP(2).LT.HIRADI) FF22 = 0.D0
+ IF(DT_RNDM(Q2P1).GE.FF21*FF22) GOTO 175
+C do the hadrons overlap?
+ IF(ISWMDL(26).GT.0) THEN
+ DO 190 K=1,2
+ CALL PHO_SFECFE(SIF,COF)
+ BIMP(1,K) = SIF*GAIMP(K)
+ BIMP(2,K) = COF*GAIMP(K)
+ 190 CONTINUE
+ BBABS = SQRT((BIMP(1,1)-BIMP(1,2))**2
+ & +(BIMP(2,1)-BIMP(2,2))**2)
+ IF(BBABS.LT.HIRADI+HIRADI) GOTO 175
+ ENDIF
+C photon data
+ GYY(1) = Y1
+ GQ2(1) = Q2P1
+ GYY(2) = Y2
+ GQ2(2) = Q2P2
+C
+
+C incoming hadron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = EE
+ PINI(4,1) = EE
+ PINI(5,1) = 0.D0
+C outgoing hadron 1
+ YQ2 = SQRT((1.D0-Y1)*Q2P1)
+ Q2E = Q2P1/(4.D0*EE)
+ E1Y = EE*(1.D0-Y1)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,1) = YQ2*COF
+ PFIN(2,1) = YQ2*SIF
+ PFIN(3,1) = E1Y-Q2E
+ PFIN(4,1) = E1Y+Q2E
+ PFIN(5,1) = 0.D0
+ PFPHI(1) = ATAN2(COF,SIF)
+ PFTHE(1) = ACOS((E1Y-Q2E)/(Q2E+E1Y))
+C photon 1
+ P1(1) = -PFIN(1,1)
+ P1(2) = -PFIN(2,1)
+ P1(3) = PINI(3,1)-PFIN(3,1)
+ P1(4) = PINI(4,1)-PFIN(4,1)
+C incoming hadron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -EE
+ PINI(4,2) = EE
+ PINI(5,2) = 0.D0
+C outgoing hadron 2
+ YQ2 = SQRT((1.D0-Y2)*Q2P2)
+ Q2E = Q2P2/(4.D0*EE)
+ E1Y = EE*(1.D0-Y2)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,2) = YQ2*COF
+ PFIN(2,2) = YQ2*SIF
+ PFIN(3,2) = -E1Y+Q2E
+ PFIN(4,2) = E1Y+Q2E
+ PFIN(5,2) = 0.D0
+ PFPHI(2) = ATAN2(COF,SIF)
+ PFTHE(2) = ACOS((Q2E-E1Y)/(Q2E+E1Y))
+C photon 2
+ P2(1) = -PFIN(1,2)
+ P2(2) = -PFIN(2,2)
+ P2(3) = PINI(3,2)-PFIN(3,2)
+ P2(4) = PINI(4,2)-PFIN(4,2)
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF(GGECM.LT.0.1D0) GOTO 175
+ GGECM = SQRT(GGECM)
+ IF((GGECM.LT.ECMIN).OR.(GGECM.GT.ECMAX)) GOTO 175
+C
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = -SQRT(Q2P1)
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = -SQRT(Q2P2)
+C photon helicities
+ IGHEL(1) = 1
+ IGHEL(2) = 1
+C cut given by user
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+
+C statistics
+ AY1 = AY1+Y1
+ AYS1 = AYS1+Y1*Y1
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+ Q21MIN = MIN(Q21MIN,Q2P1)
+ Q22MIN = MIN(Q22MIN,Q2P2)
+ Q21MAX = MAX(Q21MAX,Q2P1)
+ Q22MAX = MAX(Q22MAX,Q2P2)
+ YY1MIN = MIN(YY1MIN,Y1)
+ YY2MIN = MIN(YY2MIN,Y2)
+ YY1MAX = MAX(YY1MAX,Y1)
+ YY2MAX = MAX(YY2MAX,Y2)
+ Q21AVE = Q21AVE+Q2P1
+ Q22AVE = Q22AVE+Q2P2
+ Q21AV2 = Q21AV2+Q2P1*Q2P1
+ Q22AV2 = Q22AV2+Q2P2*Q2P2
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+C
+ WGY = WGMAX*DBLE(ITRY)/DBLE(ITRW)*(ALPHA/(2.D0*PI))**2
+ WGY = WGY*LOG(YMAX1/YMIN1)*LOG(YMAX2/YMIN2)
+ AY1 = AY1/DBLE(NITER)
+ AYS1 = AYS1/DBLE(NITER)
+ DAY1 = SQRT((AYS1-AY1**2)/DBLE(NITER))
+ AY2 = AY2/DBLE(NITER)
+ AYS2 = AYS2/DBLE(NITER)
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(NITER))
+ Q21AVE = Q21AVE/DBLE(NITER)
+ Q21AV2 = Q21AV2/DBLE(NITER)
+ Q21AV2 = SQRT((Q21AV2-Q21AVE**2)/DBLE(NITER))
+ Q22AVE = Q22AVE/DBLE(NITER)
+ Q22AV2 = Q22AV2/DBLE(NITER)
+ Q22AV2 = SQRT((Q22AV2-Q22AVE**2)/DBLE(NITER))
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,3I10)')
+ & 'PHO_GGHIOF:SUMMARY:NITER,ITRY,ITRW',NITER,ITRY,ITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y1,DY1 ',
+ & AY1,DAY1
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y2,DY2 ',
+ & AY2,DAY2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 1 ',
+ & YY1MIN,YY1MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 2 ',
+ & YY2MIN,YY2MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Q2,DQ2 PHOTON 1 ',
+ & Q21AVE,Q21AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Q2 RANGE PHOTON 1 ',
+ & Q21MIN,Q21MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Q2,DQ2 PHOTON 2 ',
+ & Q22AVE,Q22AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Q2 RANGE PHOTON 2 ',
+ & Q22MIN,Q22MAX
+C
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_GGHIOF:NO OUTPUT OF HISTOGRAMS',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GGHIOG
+ SUBROUTINE PHO_GGHIOG(NEVENT,EEN,NA,NZ)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-gamma collisions via heavy ions (geometrical approach)
+C
+C
+C input: EEN LAB system energy per nucleon
+C NA atomic number of ion/hadron
+C NZ charge number of ion/hadron
+C NEVENT number of events to generate
+C from /LEPCUT/:
+C YMIN1,2 lower limit of Y
+C (energy fraction taken by photon from hadron)
+C YMAX1,2 upper cutoff for Y, necessary to avoid
+C underflows
+C
+C currently implemented approximation similar to:
+C
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-20,
+ & PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ PARAMETER (Max_tab=100)
+ DIMENSION P1(4),P2(4),TABCU(0:Max_tab),TABYL(0:Max_tab)
+
+C
+ WRITE(LO,'(2(/1X,A))') 'PHO_GGHIOG: gamma-gamma event generation',
+ & '---------------------------------------'
+C hadron size and mass
+ FM2GEV = 5.07D0
+ HIMASS = DBLE(NA)*0.938D0
+ HIMA2 = HIMASS**2
+ HIRADI = 1.2D0*FM2GEV*DBLE(NA)**0.333
+ ALPHA = DBLE(NZ**2)/137.D0
+C total hadron / heavy ion energy
+ EE = EEN*DBLE(NA)
+ GAMMA = EE/HIMASS
+C setup /POFSRC/
+ GAMSRC(1) = GAMMA
+ GAMSRC(2) = GAMMA
+ RADSRC(1) = HIRADI
+ RADSRC(2) = HIRADI
+ AMSRC(1) = HIMASS
+ AMSRC(1) = HIMASS
+C kinematic limitations
+ YMI = (ECMIN/(2.D0*EE))**2
+ IF(YMIN1.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGHIOG: ymin1 increased to (old/new)',YMIN1,YMI
+ YMIN1 = YMI
+ ELSE IF(YMIN1.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GGHIOG:','ECM-CUT CORRESPONDS TO YMIN1 OF',YMI,
+ & ' INSTEAD OF',YMIN1
+ ENDIF
+ IF(YMIN2.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GGHIOG: ymin2 increased to (old/new)',YMIN2,YMI
+ YMIN2 = YMI
+ ELSE IF(YMIN2.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GGHIOG:','ECM-CUT CORRESPONDS TO YMIN2 OF',YMI,
+ & ' INSTEAD OF',YMIN2
+ ENDIF
+C debug output
+ WRITE(LO,'(/6X,A,2I4)') 'MASS NUMBER, CHARGE NUMBER ',NA,NZ
+ WRITE(LO,'(6X,A,E12.5)') 'HADRON MASS (GeV) ',HIMASS
+ WRITE(LO,'(6X,A,E12.5)') 'HADRON RADIUS (GeV**-1) ',HIRADI
+ WRITE(LO,'(6X,A,E12.5)') 'LORENTZ GAMMA ',GAMMA
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 1 ',YMIN1,
+ & YMAX1
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 2 ',YMIN2,
+ & YMAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'SQRT(S) PER NUCLEON, TOTAL ',
+ & 2.D0*EEN,2.D0*EE
+ WRITE(LO,'(6X,A,I10)') 'EVENTS TO PROCESS ',NEVENT
+C hadron numbers set to 0
+ IDPSRC(1) = 0
+ IDBSRC(1) = 0
+ IDPSRC(2) = 0
+ IDBSRC(2) = 0
+C table of flux function, log interpolation
+ YMIN = YMIN1
+ YMAX = YMAX1
+ YMAX = MIN(YMAX,0.9999999D0)
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ TABYL(0) = LOG(YMIN)
+ FFMAX = 0.D0
+ DO 100 I=1,Max_tab
+ Y = EXP(TABYL(0)+DELLY*DBLE(I-1))
+ WG = EE*Y
+ XI = WG*HIRADI/GAMMA
+ FF = ALPHA*PHO_GGFLCL(XI)/Y
+ FFMAX = MAX(FF,FFMAX)
+ IF(FF.LT.1.D-10*FFMAX) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOG: ymax1 changed from/to',YMAX1,Y
+ YMAX1 = MIN(Y,YMAX1)
+ GOTO 101
+ ENDIF
+ 100 CONTINUE
+ 101 CONTINUE
+ YMIN = YMIN2
+ YMAX = YMAX2
+ YMAX = MIN(YMAX,0.9999999D0)
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ TABYL(0) = LOG(YMIN)
+ FFMAX = 0.D0
+ DO 102 I=1,Max_tab
+ Y = EXP(TABYL(0)+DELLY*DBLE(I-1))
+ WG = EE*Y
+ XI = WG*HIRADI/GAMMA
+ FF = ALPHA*PHO_GGFLCL(XI)/Y
+ FFMAX = MAX(FF,FFMAX)
+ IF(FF.LT.1.D-10*FFMAX) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOG: ymax2 changed from/to',YMAX2,Y
+ YMAX2 = MIN(Y,YMAX2)
+ GOTO 103
+ ENDIF
+ 102 CONTINUE
+ 103 CONTINUE
+ YMI = (ECMIN/(2.D0*EE))**2/YMAX2
+ IF(YMI.GT.YMIN1) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOG: ymin1 changed from/to',YMIN1,YMI
+ YMIN1 = YMI
+ ENDIF
+ YMAX1 = MIN(YMAX,YMAX1)
+ YMI = (ECMIN/(2.D0*EE))**2/YMAX1
+ IF(YMI.GT.YMIN2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GGHIOG: ymin2 changed from/to',YMIN2,YMI
+ YMIN2 = YMI
+ ENDIF
+C
+ YMIN = YMIN1
+ YMAX = YMAX1
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ TABCU(0) = 0.D0
+ TABYL(0) = LOG(YMIN)
+ FLUX = 0.D0
+ IF(IDEB(30).GE.1) WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_GGHIOG: table of raw photon flux (side 1)',Max_tab
+ DO 105 I=1,Max_tab
+ Y = EXP(TABYL(0)+DELLY*DBLE(I-1))
+ WG = EE*Y
+ XI = WG*HIRADI/GAMMA
+ FF = ALPHA*PHO_GGFLCL(XI)/Y
+ FFMAX = MAX(FF,FFMAX)
+ TABCU(I) = TABCU(I-1)+FF*Y
+ TABYL(I) = LOG(Y)
+ FLUX = FLUX+Y*FF
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,2E15.4)') Y,FF
+ 105 CONTINUE
+ FLUX = FLUX*DELLY
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,E12.4)')
+ & 'PHO_GGHIOG: integrated flux (one side):',FLUX
+C
+C initialization
+C photon 1
+ EGAM = YMAX*EE
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = EGAM
+ P1(4) = EGAM
+C photon 2
+ EGAM = YMAX*EE
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -EGAM
+ P2(4) = EGAM
+ CALL PHO_SETPAR(1,22,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C
+C generation of events
+
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ YY1MIN = 1.D30
+ YY2MIN = 1.D30
+ YY1MAX = 0.D0
+ YY2MAX = 0.D0
+ NITER = NEVENT
+ ITRY = 0
+ ITRW = 0
+ DO 200 I=1,NITER
+ 150 CONTINUE
+ ITRY = ITRY+1
+ 175 CONTINUE
+ ITRW = ITRW+1
+ XI = DT_RNDM(AY1)*TABCU(Max_tab)
+ DO 110 K=1,Max_tab
+ IF(TABCU(K).GE.XI) THEN
+ Y1 = DELLY/(TABCU(K)-TABCU(K-1))*(XI-TABCU(K-1))+TABYL(K-1)
+ Y1 = EXP(Y1)
+ GOTO 120
+ ENDIF
+ 110 CONTINUE
+ Y1 = YMAX1
+ 120 CONTINUE
+ XI = DT_RNDM(AY2)*TABCU(Max_tab)
+ DO 130 K=1,Max_tab
+ IF(TABCU(K).GE.XI) THEN
+ Y2 = DELLY/(TABCU(K)-TABCU(K-1))*(XI-TABCU(K-1))+TABYL(K-1)
+ Y2 = EXP(Y2)
+ GOTO 140
+ ENDIF
+ 130 CONTINUE
+ Y2 = YMAX2
+ 140 CONTINUE
+C setup kinematics
+
+ GYY(1) = Y1
+ GQ2(1) = 0.D0
+ GYY(2) = Y2
+ GQ2(2) = 0.D0
+C incoming electron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = EE
+ PINI(4,1) = EE
+ PINI(5,1) = 0.D0
+C outgoing electron 1
+ E1Y = EE*(1.D0-Y1)
+ PFIN(1,1) = 0.D0
+ PFIN(2,1) = 0.D0
+ PFIN(3,1) = E1Y
+ PFIN(4,1) = E1Y
+ PFIN(5,1) = 0.D0
+C photon 1
+ P1(1) = -PFIN(1,1)
+ P1(2) = -PFIN(2,1)
+ P1(3) = PINI(3,1)-PFIN(3,1)
+ P1(4) = PINI(4,1)-PFIN(4,1)
+C incoming electron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -EE
+ PINI(4,2) = EE
+ PINI(5,2) = 0.D0
+C outgoing electron 2
+ E1Y = EE*(1.D0-Y2)
+ PFIN(1,2) = 0.D0
+ PFIN(2,2) = 0.D0
+ PFIN(3,2) = -E1Y
+ PFIN(4,2) = E1Y
+ PFIN(5,2) = 0.D0
+C photon 2
+ P2(1) = -PFIN(1,2)
+ P2(2) = -PFIN(2,2)
+ P2(3) = PINI(3,2)-PFIN(3,2)
+ P2(4) = PINI(4,2)-PFIN(4,2)
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(3)+P2(3))**2
+ IF(GGECM.LT.0.1D0) GOTO 175
+ GGECM = SQRT(GGECM)
+ IF((GGECM.LT.ECMIN).OR.(GGECM.GT.ECMAX)) GOTO 175
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = 0.D0
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = 0.D0
+C impact parameter constraints
+ XI1 = P1(4)*HIRADI/GAMMA
+ XI2 = P2(4)*HIRADI/GAMMA
+ FLX = PHO_GGFLCL(XI1)*PHO_GGFLCL(XI2)
+ FCORR = PHO_GGFLCR(HIRADI)
+ WGX = (FLX-FCORR)/FLX
+ IF(DT_RNDM(Y2).GT.WGX) GOTO 175
+C photon helicities
+ IGHEL(1) = 1
+ IGHEL(2) = 1
+C cut given by user
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+
+C statistics
+ AY1 = AY1+Y1
+ AYS1 = AYS1+Y1*Y1
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+ YY1MIN = MIN(YY1MIN,Y1)
+ YY2MIN = MIN(YY2MIN,Y2)
+ YY1MAX = MAX(YY1MAX,Y1)
+ YY2MAX = MAX(YY2MAX,Y2)
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+C
+ WGY = FLUX**2*DBLE(ITRY)/DBLE(ITRW)
+ AY1 = AY1/DBLE(NITER)
+ AYS1 = AYS1/DBLE(NITER)
+ DAY1 = SQRT((AYS1-AY1**2)/DBLE(NITER))
+ AY2 = AY2/DBLE(NITER)
+ AYS2 = AYS2/DBLE(NITER)
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(NITER))
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,3I12)')
+ & 'PHO_GGHIOG:SUMMARY:NITER,ITRY,ITRW',NITER,ITRY,ITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y1,DY1 ',
+ & AY1,DAY1
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y2,DY2 ',
+ & AY2,DAY2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 1 ',
+ & YY1MIN,YY1MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 2 ',
+ & YY2MIN,YY2MAX
+
+C
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_GGHIOG:NO OUTPUT OF HISTOGRAMS',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GGFLCL
+ DOUBLE PRECISION FUNCTION PHO_GGFLCL(XI)
+C*********************************************************************
+C
+C semi-classical photon flux (geometrical model)
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PHO_GGFLCL = 2.D0/3.1415927D0*(XI*PHO_BESSK0(XI)*PHO_BESSK1(XI)
+ & -XI**2/2.D0*(PHO_BESSK1(XI)**2-PHO_BESSK0(XI)**2))
+
+ END
+
+CDECK ID>, PHO_GGFLCR
+ DOUBLE PRECISION FUNCTION PHO_GGFLCR(XI)
+C*********************************************************************
+C
+C semi-classical photon flux correction due to
+C overlap in impact parameter space (geometrical model)
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (PI = 3.14159265359D0, ACCUR = 1D-2)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+
+ DIMENSION XGAUSS(126),WGAUSS(126)
+
+ DATA XGAUSS(1)/ .57735026918962576D0/
+ DATA XGAUSS(2)/-.57735026918962576D0/
+ DATA WGAUSS(1)/ 1.00000000000000000D0/
+ DATA WGAUSS(2)/ 1.00000000000000000D0/
+
+ DATA XGAUSS(3)/ .33998104358485627D0/
+ DATA XGAUSS(4)/ .86113631159405258D0/
+ DATA XGAUSS(5)/-.33998104358485627D0/
+ DATA XGAUSS(6)/-.86113631159405258D0/
+ DATA WGAUSS(3)/ .65214515486254613D0/
+ DATA WGAUSS(4)/ .34785484513745385D0/
+ DATA WGAUSS(5)/ .65214515486254613D0/
+ DATA WGAUSS(6)/ .34785484513745385D0/
+
+ DATA XGAUSS(7)/ .18343464249564981D0/
+ DATA XGAUSS(8)/ .52553240991632899D0/
+ DATA XGAUSS(9)/ .79666647741362674D0/
+ DATA XGAUSS(10)/ .96028985649753623D0/
+ DATA XGAUSS(11)/-.18343464249564981D0/
+ DATA XGAUSS(12)/-.52553240991632899D0/
+ DATA XGAUSS(13)/-.79666647741362674D0/
+ DATA XGAUSS(14)/-.96028985649753623D0/
+ DATA WGAUSS(7)/ .36268378337836198D0/
+ DATA WGAUSS(8)/ .31370664587788727D0/
+ DATA WGAUSS(9)/ .22238103445337448D0/
+ DATA WGAUSS(10)/ .10122853629037627D0/
+ DATA WGAUSS(11)/ .36268378337836198D0/
+ DATA WGAUSS(12)/ .31370664587788727D0/
+ DATA WGAUSS(13)/ .22238103445337448D0/
+ DATA WGAUSS(14)/ .10122853629037627D0/
+
+ DATA XGAUSS(15)/ .0950125098376374402D0/
+ DATA XGAUSS(16)/ .281603550779258913D0/
+ DATA XGAUSS(17)/ .458016777657227386D0/
+ DATA XGAUSS(18)/ .617876244402643748D0/
+ DATA XGAUSS(19)/ .755404408355003034D0/
+ DATA XGAUSS(20)/ .865631202387831744D0/
+ DATA XGAUSS(21)/ .944575023073232576D0/
+ DATA XGAUSS(22)/ .989400934991649933D0/
+ DATA XGAUSS(23)/-.0950125098376374402D0/
+ DATA XGAUSS(24)/-.281603550779258913D0/
+ DATA XGAUSS(25)/-.458016777657227386D0/
+ DATA XGAUSS(26)/-.617876244402643748D0/
+ DATA XGAUSS(27)/-.755404408355003034D0/
+ DATA XGAUSS(28)/-.865631202387831744D0/
+ DATA XGAUSS(29)/-.944575023073232576D0/
+ DATA XGAUSS(30)/-.989400934991649933D0/
+ DATA WGAUSS(15)/ .189450610455068496D0/
+ DATA WGAUSS(16)/ .182603415044923589D0/
+ DATA WGAUSS(17)/ .169156519395002538D0/
+ DATA WGAUSS(18)/ .149595988816576732D0/
+ DATA WGAUSS(19)/ .124628971255533872D0/
+ DATA WGAUSS(20)/ .0951585116824927848D0/
+ DATA WGAUSS(21)/ .0622535239386478929D0/
+ DATA WGAUSS(22)/ .0271524594117540949D0/
+ DATA WGAUSS(23)/ .189450610455068496D0/
+ DATA WGAUSS(24)/ .182603415044923589D0/
+ DATA WGAUSS(25)/ .169156519395002538D0/
+ DATA WGAUSS(26)/ .149595988816576732D0/
+ DATA WGAUSS(27)/ .124628971255533872D0/
+ DATA WGAUSS(28)/ .0951585116824927848D0/
+ DATA WGAUSS(29)/ .0622535239386478929D0/
+ DATA WGAUSS(30)/ .0271524594117540949D0/
+
+ DATA XGAUSS(31)/ .0483076656877383162D0/
+ DATA XGAUSS(32)/ .144471961582796493D0/
+ DATA XGAUSS(33)/ .239287362252137075D0/
+ DATA XGAUSS(34)/ .331868602282127650D0/
+ DATA XGAUSS(35)/ .421351276130635345D0/
+ DATA XGAUSS(36)/ .506899908932229390D0/
+ DATA XGAUSS(37)/ .587715757240762329D0/
+ DATA XGAUSS(38)/ .663044266930215201D0/
+ DATA XGAUSS(39)/ .732182118740289680D0/
+ DATA XGAUSS(40)/ .794483795967942407D0/
+ DATA XGAUSS(41)/ .849367613732569970D0/
+ DATA XGAUSS(42)/ .896321155766052124D0/
+ DATA XGAUSS(43)/ .934906075937739689D0/
+ DATA XGAUSS(44)/ .964762255587506430D0/
+ DATA XGAUSS(45)/ .985611511545268335D0/
+ DATA XGAUSS(46)/ .997263861849481564D0/
+ DATA XGAUSS(47)/-.0483076656877383162D0/
+ DATA XGAUSS(48)/-.144471961582796493D0/
+ DATA XGAUSS(49)/-.239287362252137075D0/
+ DATA XGAUSS(50)/-.331868602282127650D0/
+ DATA XGAUSS(51)/-.421351276130635345D0/
+ DATA XGAUSS(52)/-.506899908932229390D0/
+ DATA XGAUSS(53)/-.587715757240762329D0/
+ DATA XGAUSS(54)/-.663044266930215201D0/
+ DATA XGAUSS(55)/-.732182118740289680D0/
+ DATA XGAUSS(56)/-.794483795967942407D0/
+ DATA XGAUSS(57)/-.849367613732569970D0/
+ DATA XGAUSS(58)/-.896321155766052124D0/
+ DATA XGAUSS(59)/-.934906075937739689D0/
+ DATA XGAUSS(60)/-.964762255587506430D0/
+ DATA XGAUSS(61)/-.985611511545268335D0/
+ DATA XGAUSS(62)/-.997263861849481564D0/
+ DATA WGAUSS(31)/ .0965400885147278006D0/
+ DATA WGAUSS(32)/ .0956387200792748594D0/
+ DATA WGAUSS(33)/ .0938443990808045654D0/
+ DATA WGAUSS(34)/ .0911738786957638847D0/
+ DATA WGAUSS(35)/ .0876520930044038111D0/
+ DATA WGAUSS(36)/ .0833119242269467552D0/
+ DATA WGAUSS(37)/ .0781938957870703065D0/
+ DATA WGAUSS(38)/ .0723457941088485062D0/
+ DATA WGAUSS(39)/ .0658222227763618468D0/
+ DATA WGAUSS(40)/ .0586840934785355471D0/
+ DATA WGAUSS(41)/ .0509980592623761762D0/
+ DATA WGAUSS(42)/ .0428358980222266807D0/
+ DATA WGAUSS(43)/ .0342738629130214331D0/
+ DATA WGAUSS(44)/ .0253920653092620595D0/
+ DATA WGAUSS(45)/ .0162743947309056706D0/
+ DATA WGAUSS(46)/ .00701861000947009660D0/
+ DATA WGAUSS(47)/ .0965400885147278006D0/
+ DATA WGAUSS(48)/ .0956387200792748594D0/
+ DATA WGAUSS(49)/ .0938443990808045654D0/
+ DATA WGAUSS(50)/ .0911738786957638847D0/
+ DATA WGAUSS(51)/ .0876520930044038111D0/
+ DATA WGAUSS(52)/ .0833119242269467552D0/
+ DATA WGAUSS(53)/ .0781938957870703065D0/
+ DATA WGAUSS(54)/ .0723457941088485062D0/
+ DATA WGAUSS(55)/ .0658222227763618468D0/
+ DATA WGAUSS(56)/ .0586840934785355471D0/
+ DATA WGAUSS(57)/ .0509980592623761762D0/
+ DATA WGAUSS(58)/ .0428358980222266807D0/
+ DATA WGAUSS(59)/ .0342738629130214331D0/
+ DATA WGAUSS(60)/ .0253920653092620595D0/
+ DATA WGAUSS(61)/ .0162743947309056706D0/
+ DATA WGAUSS(62)/ .00701861000947009660D0/
+
+ DATA XGAUSS(63)/ .02435029266342443250D0/
+ DATA XGAUSS(64)/ .0729931217877990394D0/
+ DATA XGAUSS(65)/ .121462819296120554D0/
+ DATA XGAUSS(66)/ .169644420423992818D0/
+ DATA XGAUSS(67)/ .217423643740007084D0/
+ DATA XGAUSS(68)/ .264687162208767416D0/
+ DATA XGAUSS(69)/ .311322871990210956D0/
+ DATA XGAUSS(70)/ .357220158337668116D0/
+ DATA XGAUSS(71)/ .402270157963991604D0/
+ DATA XGAUSS(72)/ .446366017253464088D0/
+ DATA XGAUSS(73)/ .489403145707052957D0/
+ DATA XGAUSS(74)/ .531279464019894546D0/
+ DATA XGAUSS(75)/ .571895646202634034D0/
+ DATA XGAUSS(76)/ .611155355172393250D0/
+ DATA XGAUSS(77)/ .648965471254657340D0/
+ DATA XGAUSS(78)/ .685236313054233243D0/
+ DATA XGAUSS(79)/ .719881850171610827D0/
+ DATA XGAUSS(80)/ .752819907260531897D0/
+ DATA XGAUSS(81)/ .783972358943341408D0/
+ DATA XGAUSS(82)/ .813265315122797560D0/
+ DATA XGAUSS(83)/ .840629296252580363D0/
+ DATA XGAUSS(84)/ .865999398154092820D0/
+ DATA XGAUSS(85)/ .889315445995114106D0/
+ DATA XGAUSS(86)/ .910522137078502806D0/
+ DATA XGAUSS(87)/ .929569172131939576D0/
+ DATA XGAUSS(88)/ .946411374858402816D0/
+ DATA XGAUSS(89)/ .961008799652053719D0/
+ DATA XGAUSS(90)/ .973326827789910964D0/
+ DATA XGAUSS(91)/ .983336253884625957D0/
+ DATA XGAUSS(92)/ .991013371476744321D0/
+ DATA XGAUSS(93)/ .996340116771955279D0/
+ DATA XGAUSS(94)/ .999305041735772139D0/
+ DATA XGAUSS(95)/-.02435029266342443250D0/
+ DATA XGAUSS(96)/-.0729931217877990394D0/
+ DATA XGAUSS(97)/-.121462819296120554D0/
+ DATA XGAUSS(98)/-.169644420423992818D0/
+ DATA XGAUSS(99)/-.217423643740007084D0/
+ DATA XGAUSS(100)/-.264687162208767416D0/
+ DATA XGAUSS(101)/-.311322871990210956D0/
+ DATA XGAUSS(102)/-.357220158337668116D0/
+ DATA XGAUSS(103)/-.402270157963991604D0/
+ DATA XGAUSS(104)/-.446366017253464088D0/
+ DATA XGAUSS(105)/-.489403145707052957D0/
+ DATA XGAUSS(106)/-.531279464019894546D0/
+ DATA XGAUSS(107)/-.571895646202634034D0/
+ DATA XGAUSS(108)/-.611155355172393250D0/
+ DATA XGAUSS(109)/-.648965471254657340D0/
+ DATA XGAUSS(110)/-.685236313054233243D0/
+ DATA XGAUSS(111)/-.719881850171610827D0/
+ DATA XGAUSS(112)/-.752819907260531897D0/
+ DATA XGAUSS(113)/-.783972358943341408D0/
+ DATA XGAUSS(114)/-.813265315122797560D0/
+ DATA XGAUSS(115)/-.840629296252580363D0/
+ DATA XGAUSS(116)/-.865999398154092820D0/
+ DATA XGAUSS(117)/-.889315445995114106D0/
+ DATA XGAUSS(118)/-.910522137078502806D0/
+ DATA XGAUSS(119)/-.929569172131939576D0/
+ DATA XGAUSS(120)/-.946411374858402816D0/
+ DATA XGAUSS(121)/-.961008799652053719D0/
+ DATA XGAUSS(122)/-.973326827789910964D0/
+ DATA XGAUSS(123)/-.983336253884625957D0/
+ DATA XGAUSS(124)/-.991013371476744321D0/
+ DATA XGAUSS(125)/-.996340116771955279D0/
+ DATA XGAUSS(126)/-.999305041735772139D0/
+ DATA WGAUSS(63)/ .0486909570091397204D0/
+ DATA WGAUSS(64)/ .0485754674415034269D0/
+ DATA WGAUSS(65)/ .0483447622348029572D0/
+ DATA WGAUSS(66)/ .0479993885964583077D0/
+ DATA WGAUSS(67)/ .0475401657148303087D0/
+ DATA WGAUSS(68)/ .0469681828162100173D0/
+ DATA WGAUSS(69)/ .0462847965813144172D0/
+ DATA WGAUSS(70)/ .0454916279274181445D0/
+ DATA WGAUSS(71)/ .0445905581637565631D0/
+ DATA WGAUSS(72)/ .0435837245293234534D0/
+ DATA WGAUSS(73)/ .0424735151236535890D0/
+ DATA WGAUSS(74)/ .0412625632426235286D0/
+ DATA WGAUSS(75)/ .0399537411327203414D0/
+ DATA WGAUSS(76)/ .0385501531786156291D0/
+ DATA WGAUSS(77)/ .0370551285402400460D0/
+ DATA WGAUSS(78)/ .0354722132568823838D0/
+ DATA WGAUSS(79)/ .0338051618371416094D0/
+ DATA WGAUSS(80)/ .0320579283548515535D0/
+ DATA WGAUSS(81)/ .0302346570724024789D0/
+ DATA WGAUSS(82)/ .0283396726142594832D0/
+ DATA WGAUSS(83)/ .0263774697150546587D0/
+ DATA WGAUSS(84)/ .0243527025687108733D0/
+ DATA WGAUSS(85)/ .0222701738083832542D0/
+ DATA WGAUSS(86)/ .0201348231535302094D0/
+ DATA WGAUSS(87)/ .0179517157756973431D0/
+ DATA WGAUSS(88)/ .0157260304760247193D0/
+ DATA WGAUSS(89)/ .0134630478967186426D0/
+ DATA WGAUSS(90)/ .0111681394601311288D0/
+ DATA WGAUSS(91)/ .00884675982636394772D0/
+ DATA WGAUSS(92)/ .00650445796897836286D0/
+ DATA WGAUSS(93)/ .00414703326056246764D0/
+ DATA WGAUSS(94)/ .00178328072169643295D0/
+ DATA WGAUSS(95)/ .0486909570091397204D0/
+ DATA WGAUSS(96)/ .0485754674415034269D0/
+ DATA WGAUSS(97)/ .0483447622348029572D0/
+ DATA WGAUSS(98)/ .0479993885964583077D0/
+ DATA WGAUSS(99)/ .0475401657148303087D0/
+ DATA WGAUSS(100)/ .0469681828162100173D0/
+ DATA WGAUSS(101)/ .0462847965813144172D0/
+ DATA WGAUSS(102)/ .0454916279274181445D0/
+ DATA WGAUSS(103)/ .0445905581637565631D0/
+ DATA WGAUSS(104)/ .0435837245293234534D0/
+ DATA WGAUSS(105)/ .0424735151236535890D0/
+ DATA WGAUSS(106)/ .0412625632426235286D0/
+ DATA WGAUSS(107)/ .0399537411327203414D0/
+ DATA WGAUSS(108)/ .0385501531786156291D0/
+ DATA WGAUSS(109)/ .0370551285402400460D0/
+ DATA WGAUSS(110)/ .0354722132568823838D0/
+ DATA WGAUSS(111)/ .0338051618371416094D0/
+ DATA WGAUSS(112)/ .0320579283548515535D0/
+ DATA WGAUSS(113)/ .0302346570724024789D0/
+ DATA WGAUSS(114)/ .0283396726142594832D0/
+ DATA WGAUSS(115)/ .0263774697150546587D0/
+ DATA WGAUSS(116)/ .0243527025687108733D0/
+ DATA WGAUSS(117)/ .0222701738083832542D0/
+ DATA WGAUSS(118)/ .0201348231535302094D0/
+ DATA WGAUSS(119)/ .0179517157756973431D0/
+ DATA WGAUSS(120)/ .0157260304760247193D0/
+ DATA WGAUSS(121)/ .0134630478967186426D0/
+ DATA WGAUSS(122)/ .0111681394601311288D0/
+ DATA WGAUSS(123)/ .00884675982636394772D0/
+ DATA WGAUSS(124)/ .00650445796897836286D0/
+ DATA WGAUSS(125)/ .00414703326056246764D0/
+ DATA WGAUSS(126)/ .00178328072169643295D0/
+
+C integrate first over b1
+C
+C Loop incrementing the boundary
+C
+ tmin = 0.D0
+ tmax = 0.25D0
+ Sum = 0.D0
+
+ 50 CONTINUE
+
+C
+C Loop for the Gauss integration
+C
+ XINT=0.D0
+ DO 100 N=1,6
+ XINT2 = XINT
+ XINT=0.D0
+ DO 200 I=2**N-1,2**(N+1)-2
+ t = (tmax-tmin)/2.D0*XGAUSS(I)+(tmax+tmin)/2.D0
+ b1 = RADSRC(1) * EXP (t)
+ XINT=XINT+WGAUSS(I) * PHO_GGFAUX(b1) * b1**2
+ 200 CONTINUE
+ XINT = (tmax-tmin)/2.D0*XINT
+ IF (ABS ((XINT2-XINT)/XINT) .LT. ACCUR) GOTO 300
+ 100 CONTINUE
+ WRITE(LO,*) ' (b1) GAUSS MAY BE INACCURATE'
+ 300 CONTINUE
+
+ Sum = Sum + XINT
+ IF (ABS (XINT2/Sum) .GT. ACCUR) THEN
+ tmin = tmax
+ tmax = tmax + 0.5D0
+ GOTO 50
+ ENDIF
+
+ PHO_GGFLCR = 4.D0*Pi * Sum
+
+ END
+
+CDECK ID>, PHO_GGFAUX
+ DOUBLE PRECISION FUNCTION PHO_GGFAUX(b1)
+C*********************************************************************
+C
+C auxiliary function for integration over b2,
+C semi-classical photon flux correction due to
+C overlap in impact parameter space (geometrical model)
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (PI = 3.14159265359D0, ACCUR = 1D-2)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+
+ DIMENSION XGAUSS(126),WGAUSS(126)
+
+ DATA XGAUSS(1)/ .57735026918962576D0/
+ DATA XGAUSS(2)/-.57735026918962576D0/
+ DATA WGAUSS(1)/ 1.00000000000000000D0/
+ DATA WGAUSS(2)/ 1.00000000000000000D0/
+
+ DATA XGAUSS(3)/ .33998104358485627D0/
+ DATA XGAUSS(4)/ .86113631159405258D0/
+ DATA XGAUSS(5)/-.33998104358485627D0/
+ DATA XGAUSS(6)/-.86113631159405258D0/
+ DATA WGAUSS(3)/ .65214515486254613D0/
+ DATA WGAUSS(4)/ .34785484513745385D0/
+ DATA WGAUSS(5)/ .65214515486254613D0/
+ DATA WGAUSS(6)/ .34785484513745385D0/
+
+ DATA XGAUSS(7)/ .18343464249564981D0/
+ DATA XGAUSS(8)/ .52553240991632899D0/
+ DATA XGAUSS(9)/ .79666647741362674D0/
+ DATA XGAUSS(10)/ .96028985649753623D0/
+ DATA XGAUSS(11)/-.18343464249564981D0/
+ DATA XGAUSS(12)/-.52553240991632899D0/
+ DATA XGAUSS(13)/-.79666647741362674D0/
+ DATA XGAUSS(14)/-.96028985649753623D0/
+ DATA WGAUSS(7)/ .36268378337836198D0/
+ DATA WGAUSS(8)/ .31370664587788727D0/
+ DATA WGAUSS(9)/ .22238103445337448D0/
+ DATA WGAUSS(10)/ .10122853629037627D0/
+ DATA WGAUSS(11)/ .36268378337836198D0/
+ DATA WGAUSS(12)/ .31370664587788727D0/
+ DATA WGAUSS(13)/ .22238103445337448D0/
+ DATA WGAUSS(14)/ .10122853629037627D0/
+
+ DATA XGAUSS(15)/ .0950125098376374402D0/
+ DATA XGAUSS(16)/ .281603550779258913D0/
+ DATA XGAUSS(17)/ .458016777657227386D0/
+ DATA XGAUSS(18)/ .617876244402643748D0/
+ DATA XGAUSS(19)/ .755404408355003034D0/
+ DATA XGAUSS(20)/ .865631202387831744D0/
+ DATA XGAUSS(21)/ .944575023073232576D0/
+ DATA XGAUSS(22)/ .989400934991649933D0/
+ DATA XGAUSS(23)/-.0950125098376374402D0/
+ DATA XGAUSS(24)/-.281603550779258913D0/
+ DATA XGAUSS(25)/-.458016777657227386D0/
+ DATA XGAUSS(26)/-.617876244402643748D0/
+ DATA XGAUSS(27)/-.755404408355003034D0/
+ DATA XGAUSS(28)/-.865631202387831744D0/
+ DATA XGAUSS(29)/-.944575023073232576D0/
+ DATA XGAUSS(30)/-.989400934991649933D0/
+ DATA WGAUSS(15)/ .189450610455068496D0/
+ DATA WGAUSS(16)/ .182603415044923589D0/
+ DATA WGAUSS(17)/ .169156519395002538D0/
+ DATA WGAUSS(18)/ .149595988816576732D0/
+ DATA WGAUSS(19)/ .124628971255533872D0/
+ DATA WGAUSS(20)/ .0951585116824927848D0/
+ DATA WGAUSS(21)/ .0622535239386478929D0/
+ DATA WGAUSS(22)/ .0271524594117540949D0/
+ DATA WGAUSS(23)/ .189450610455068496D0/
+ DATA WGAUSS(24)/ .182603415044923589D0/
+ DATA WGAUSS(25)/ .169156519395002538D0/
+ DATA WGAUSS(26)/ .149595988816576732D0/
+ DATA WGAUSS(27)/ .124628971255533872D0/
+ DATA WGAUSS(28)/ .0951585116824927848D0/
+ DATA WGAUSS(29)/ .0622535239386478929D0/
+ DATA WGAUSS(30)/ .0271524594117540949D0/
+
+ DATA XGAUSS(31)/ .0483076656877383162D0/
+ DATA XGAUSS(32)/ .144471961582796493D0/
+ DATA XGAUSS(33)/ .239287362252137075D0/
+ DATA XGAUSS(34)/ .331868602282127650D0/
+ DATA XGAUSS(35)/ .421351276130635345D0/
+ DATA XGAUSS(36)/ .506899908932229390D0/
+ DATA XGAUSS(37)/ .587715757240762329D0/
+ DATA XGAUSS(38)/ .663044266930215201D0/
+ DATA XGAUSS(39)/ .732182118740289680D0/
+ DATA XGAUSS(40)/ .794483795967942407D0/
+ DATA XGAUSS(41)/ .849367613732569970D0/
+ DATA XGAUSS(42)/ .896321155766052124D0/
+ DATA XGAUSS(43)/ .934906075937739689D0/
+ DATA XGAUSS(44)/ .964762255587506430D0/
+ DATA XGAUSS(45)/ .985611511545268335D0/
+ DATA XGAUSS(46)/ .997263861849481564D0/
+ DATA XGAUSS(47)/-.0483076656877383162D0/
+ DATA XGAUSS(48)/-.144471961582796493D0/
+ DATA XGAUSS(49)/-.239287362252137075D0/
+ DATA XGAUSS(50)/-.331868602282127650D0/
+ DATA XGAUSS(51)/-.421351276130635345D0/
+ DATA XGAUSS(52)/-.506899908932229390D0/
+ DATA XGAUSS(53)/-.587715757240762329D0/
+ DATA XGAUSS(54)/-.663044266930215201D0/
+ DATA XGAUSS(55)/-.732182118740289680D0/
+ DATA XGAUSS(56)/-.794483795967942407D0/
+ DATA XGAUSS(57)/-.849367613732569970D0/
+ DATA XGAUSS(58)/-.896321155766052124D0/
+ DATA XGAUSS(59)/-.934906075937739689D0/
+ DATA XGAUSS(60)/-.964762255587506430D0/
+ DATA XGAUSS(61)/-.985611511545268335D0/
+ DATA XGAUSS(62)/-.997263861849481564D0/
+ DATA WGAUSS(31)/ .0965400885147278006D0/
+ DATA WGAUSS(32)/ .0956387200792748594D0/
+ DATA WGAUSS(33)/ .0938443990808045654D0/
+ DATA WGAUSS(34)/ .0911738786957638847D0/
+ DATA WGAUSS(35)/ .0876520930044038111D0/
+ DATA WGAUSS(36)/ .0833119242269467552D0/
+ DATA WGAUSS(37)/ .0781938957870703065D0/
+ DATA WGAUSS(38)/ .0723457941088485062D0/
+ DATA WGAUSS(39)/ .0658222227763618468D0/
+ DATA WGAUSS(40)/ .0586840934785355471D0/
+ DATA WGAUSS(41)/ .0509980592623761762D0/
+ DATA WGAUSS(42)/ .0428358980222266807D0/
+ DATA WGAUSS(43)/ .0342738629130214331D0/
+ DATA WGAUSS(44)/ .0253920653092620595D0/
+ DATA WGAUSS(45)/ .0162743947309056706D0/
+ DATA WGAUSS(46)/ .00701861000947009660D0/
+ DATA WGAUSS(47)/ .0965400885147278006D0/
+ DATA WGAUSS(48)/ .0956387200792748594D0/
+ DATA WGAUSS(49)/ .0938443990808045654D0/
+ DATA WGAUSS(50)/ .0911738786957638847D0/
+ DATA WGAUSS(51)/ .0876520930044038111D0/
+ DATA WGAUSS(52)/ .0833119242269467552D0/
+ DATA WGAUSS(53)/ .0781938957870703065D0/
+ DATA WGAUSS(54)/ .0723457941088485062D0/
+ DATA WGAUSS(55)/ .0658222227763618468D0/
+ DATA WGAUSS(56)/ .0586840934785355471D0/
+ DATA WGAUSS(57)/ .0509980592623761762D0/
+ DATA WGAUSS(58)/ .0428358980222266807D0/
+ DATA WGAUSS(59)/ .0342738629130214331D0/
+ DATA WGAUSS(60)/ .0253920653092620595D0/
+ DATA WGAUSS(61)/ .0162743947309056706D0/
+ DATA WGAUSS(62)/ .00701861000947009660D0/
+
+ DATA XGAUSS(63)/ .02435029266342443250D0/
+ DATA XGAUSS(64)/ .0729931217877990394D0/
+ DATA XGAUSS(65)/ .121462819296120554D0/
+ DATA XGAUSS(66)/ .169644420423992818D0/
+ DATA XGAUSS(67)/ .217423643740007084D0/
+ DATA XGAUSS(68)/ .264687162208767416D0/
+ DATA XGAUSS(69)/ .311322871990210956D0/
+ DATA XGAUSS(70)/ .357220158337668116D0/
+ DATA XGAUSS(71)/ .402270157963991604D0/
+ DATA XGAUSS(72)/ .446366017253464088D0/
+ DATA XGAUSS(73)/ .489403145707052957D0/
+ DATA XGAUSS(74)/ .531279464019894546D0/
+ DATA XGAUSS(75)/ .571895646202634034D0/
+ DATA XGAUSS(76)/ .611155355172393250D0/
+ DATA XGAUSS(77)/ .648965471254657340D0/
+ DATA XGAUSS(78)/ .685236313054233243D0/
+ DATA XGAUSS(79)/ .719881850171610827D0/
+ DATA XGAUSS(80)/ .752819907260531897D0/
+ DATA XGAUSS(81)/ .783972358943341408D0/
+ DATA XGAUSS(82)/ .813265315122797560D0/
+ DATA XGAUSS(83)/ .840629296252580363D0/
+ DATA XGAUSS(84)/ .865999398154092820D0/
+ DATA XGAUSS(85)/ .889315445995114106D0/
+ DATA XGAUSS(86)/ .910522137078502806D0/
+ DATA XGAUSS(87)/ .929569172131939576D0/
+ DATA XGAUSS(88)/ .946411374858402816D0/
+ DATA XGAUSS(89)/ .961008799652053719D0/
+ DATA XGAUSS(90)/ .973326827789910964D0/
+ DATA XGAUSS(91)/ .983336253884625957D0/
+ DATA XGAUSS(92)/ .991013371476744321D0/
+ DATA XGAUSS(93)/ .996340116771955279D0/
+ DATA XGAUSS(94)/ .999305041735772139D0/
+ DATA XGAUSS(95)/-.02435029266342443250D0/
+ DATA XGAUSS(96)/-.0729931217877990394D0/
+ DATA XGAUSS(97)/-.121462819296120554D0/
+ DATA XGAUSS(98)/-.169644420423992818D0/
+ DATA XGAUSS(99)/-.217423643740007084D0/
+ DATA XGAUSS(100)/-.264687162208767416D0/
+ DATA XGAUSS(101)/-.311322871990210956D0/
+ DATA XGAUSS(102)/-.357220158337668116D0/
+ DATA XGAUSS(103)/-.402270157963991604D0/
+ DATA XGAUSS(104)/-.446366017253464088D0/
+ DATA XGAUSS(105)/-.489403145707052957D0/
+ DATA XGAUSS(106)/-.531279464019894546D0/
+ DATA XGAUSS(107)/-.571895646202634034D0/
+ DATA XGAUSS(108)/-.611155355172393250D0/
+ DATA XGAUSS(109)/-.648965471254657340D0/
+ DATA XGAUSS(110)/-.685236313054233243D0/
+ DATA XGAUSS(111)/-.719881850171610827D0/
+ DATA XGAUSS(112)/-.752819907260531897D0/
+ DATA XGAUSS(113)/-.783972358943341408D0/
+ DATA XGAUSS(114)/-.813265315122797560D0/
+ DATA XGAUSS(115)/-.840629296252580363D0/
+ DATA XGAUSS(116)/-.865999398154092820D0/
+ DATA XGAUSS(117)/-.889315445995114106D0/
+ DATA XGAUSS(118)/-.910522137078502806D0/
+ DATA XGAUSS(119)/-.929569172131939576D0/
+ DATA XGAUSS(120)/-.946411374858402816D0/
+ DATA XGAUSS(121)/-.961008799652053719D0/
+ DATA XGAUSS(122)/-.973326827789910964D0/
+ DATA XGAUSS(123)/-.983336253884625957D0/
+ DATA XGAUSS(124)/-.991013371476744321D0/
+ DATA XGAUSS(125)/-.996340116771955279D0/
+ DATA XGAUSS(126)/-.999305041735772139D0/
+ DATA WGAUSS(63)/ .0486909570091397204D0/
+ DATA WGAUSS(64)/ .0485754674415034269D0/
+ DATA WGAUSS(65)/ .0483447622348029572D0/
+ DATA WGAUSS(66)/ .0479993885964583077D0/
+ DATA WGAUSS(67)/ .0475401657148303087D0/
+ DATA WGAUSS(68)/ .0469681828162100173D0/
+ DATA WGAUSS(69)/ .0462847965813144172D0/
+ DATA WGAUSS(70)/ .0454916279274181445D0/
+ DATA WGAUSS(71)/ .0445905581637565631D0/
+ DATA WGAUSS(72)/ .0435837245293234534D0/
+ DATA WGAUSS(73)/ .0424735151236535890D0/
+ DATA WGAUSS(74)/ .0412625632426235286D0/
+ DATA WGAUSS(75)/ .0399537411327203414D0/
+ DATA WGAUSS(76)/ .0385501531786156291D0/
+ DATA WGAUSS(77)/ .0370551285402400460D0/
+ DATA WGAUSS(78)/ .0354722132568823838D0/
+ DATA WGAUSS(79)/ .0338051618371416094D0/
+ DATA WGAUSS(80)/ .0320579283548515535D0/
+ DATA WGAUSS(81)/ .0302346570724024789D0/
+ DATA WGAUSS(82)/ .0283396726142594832D0/
+ DATA WGAUSS(83)/ .0263774697150546587D0/
+ DATA WGAUSS(84)/ .0243527025687108733D0/
+ DATA WGAUSS(85)/ .0222701738083832542D0/
+ DATA WGAUSS(86)/ .0201348231535302094D0/
+ DATA WGAUSS(87)/ .0179517157756973431D0/
+ DATA WGAUSS(88)/ .0157260304760247193D0/
+ DATA WGAUSS(89)/ .0134630478967186426D0/
+ DATA WGAUSS(90)/ .0111681394601311288D0/
+ DATA WGAUSS(91)/ .00884675982636394772D0/
+ DATA WGAUSS(92)/ .00650445796897836286D0/
+ DATA WGAUSS(93)/ .00414703326056246764D0/
+ DATA WGAUSS(94)/ .00178328072169643295D0/
+ DATA WGAUSS(95)/ .0486909570091397204D0/
+ DATA WGAUSS(96)/ .0485754674415034269D0/
+ DATA WGAUSS(97)/ .0483447622348029572D0/
+ DATA WGAUSS(98)/ .0479993885964583077D0/
+ DATA WGAUSS(99)/ .0475401657148303087D0/
+ DATA WGAUSS(100)/ .0469681828162100173D0/
+ DATA WGAUSS(101)/ .0462847965813144172D0/
+ DATA WGAUSS(102)/ .0454916279274181445D0/
+ DATA WGAUSS(103)/ .0445905581637565631D0/
+ DATA WGAUSS(104)/ .0435837245293234534D0/
+ DATA WGAUSS(105)/ .0424735151236535890D0/
+ DATA WGAUSS(106)/ .0412625632426235286D0/
+ DATA WGAUSS(107)/ .0399537411327203414D0/
+ DATA WGAUSS(108)/ .0385501531786156291D0/
+ DATA WGAUSS(109)/ .0370551285402400460D0/
+ DATA WGAUSS(110)/ .0354722132568823838D0/
+ DATA WGAUSS(111)/ .0338051618371416094D0/
+ DATA WGAUSS(112)/ .0320579283548515535D0/
+ DATA WGAUSS(113)/ .0302346570724024789D0/
+ DATA WGAUSS(114)/ .0283396726142594832D0/
+ DATA WGAUSS(115)/ .0263774697150546587D0/
+ DATA WGAUSS(116)/ .0243527025687108733D0/
+ DATA WGAUSS(117)/ .0222701738083832542D0/
+ DATA WGAUSS(118)/ .0201348231535302094D0/
+ DATA WGAUSS(119)/ .0179517157756973431D0/
+ DATA WGAUSS(120)/ .0157260304760247193D0/
+ DATA WGAUSS(121)/ .0134630478967186426D0/
+ DATA WGAUSS(122)/ .0111681394601311288D0/
+ DATA WGAUSS(123)/ .00884675982636394772D0/
+ DATA WGAUSS(124)/ .00650445796897836286D0/
+ DATA WGAUSS(125)/ .00414703326056246764D0/
+ DATA WGAUSS(126)/ .00178328072169643295D0/
+C
+ W1 = PGAM(4,1)
+ W2 = PGAM(4,2)
+ bmin = b1 - 2.D0*RADSRC(1)
+ IF (RADSRC(1) .GT. bmin) THEN
+ bmin = RADSRC(1)
+ ENDIF
+ bmax = b1 + 2.D0 * RADSRC(1)
+
+ XINT = 0.D0
+ DO 100 N=1,6
+ XINT2 = XINT
+ XINT = 0.D0
+ DO 200 I=2**N-1,2**(N+1)-2
+ b2 = (bmax-bmin)/2.D0*XGAUSS(I)+(bmax+bmin)/2.D0
+ XINT3 = PHO_GGFNUC(W1,b1,GAMSRC(1))
+ & * PHO_GGFNUC(W2,b2,GAMSRC(2))
+ & * ACOS ((b1**2+b2**2-4.D0*RADSRC(1)**2)/(2.D0*b1*b2))
+ XINT = XINT +WGAUSS(I) * b2 * XINT3
+ 200 CONTINUE
+ XINT = (bmax-bmin)/2.D0*XINT
+ IF (ABS((XINT2 - XINT)/XINT) .LT. ACCUR) GOTO 300
+ 100 CONTINUE
+ WRITE(LO,*) ' (b2) GAUSS MAY BE INACCURATE'
+ 300 CONTINUE
+
+ PHO_GGFAUX = XINT
+
+ END
+
+CDECK ID>, PHO_GGFNUC
+ DOUBLE PRECISION FUNCTION PHO_GGFNUC(W,Rho,Gamma)
+C**********************************************************************
+C
+C differential photonnumber for a nucleus (geometrical model)
+C (without form factor)
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (PI = 3.14159265359D0)
+
+ WGamma = W/Gamma
+ Wphib = WGamma * PHO_BESSK1(WGamma*Rho)
+
+ PHO_GGFNUC = 1.D0/PI**2 * Wphib**2
+
+ END
+
+CDECK ID>, PHO_GHHIOF
+ SUBROUTINE PHO_GHHIOF(NEVENT,EEN,NA,NZ)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-hadron collisions in heavy ion collisions
+C (form factor approach)
+C
+C input: EEN LAB system energy per nucleon
+C NA atomic number of ion/hadron
+C NZ charge number of ion/hadron
+C NEVENT number of events to generate
+C from /LEPCUT/:
+C YMIN1,2 lower limit of Y
+C (energy fraction taken by photon from hadron)
+C YMAX1,2 upper cutoff for Y, necessary to avoid
+C underflows
+C Q2MIN1,2 minimum Q**2 of photons (should be set to 0)
+C Q2MAX1,2 maximum Q**2 of photons (if necessary,
+C corrected according size of hadron)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION P1(4),P2(4)
+ DIMENSION NITERS(2),ITRW(2)
+
+ WRITE(LO,'(2(/1X,A))')
+ & 'PHO_GHHIOF: gamma-hadron event generation',
+ & '-----------------------------------------'
+C hadron size and mass
+ FM2GEV = 5.07D0
+ HIMASS = DBLE(NA)*0.938D0
+ HIMA2 = HIMASS**2
+ HIRADI = 1.2D0*FM2GEV*DBLE(NA)**0.333
+ ALPHA = DBLE(NZ**2)/137.D0
+ AMP = 0.938D0
+ AMP2 = AMP**2
+C correct Q2MAX1,2 according to hadron size
+ Q2MAXH = 2.D0/HIRADI**2
+ Q2MAX1 = MIN(Q2MAX1,Q2MAXH)
+ Q2MAX2 = MIN(Q2MAX2,Q2MAXH)
+ IF(Q2MAX1.LT.1.D-20) Q2MAX1 = Q2MAXH
+ IF(Q2MAX2.LT.1.D-20) Q2MAX2 = Q2MAXH
+C total hadron / heavy ion energy
+ EE = EEN*DBLE(NA)
+ GAMMA = EE/HIMASS
+C setup /POFSRC/
+ GAMSRC(1) = GAMMA
+ GAMSRC(2) = GAMMA
+ RADSRC(1) = HIRADI
+ RADSRC(2) = HIRADI
+ AMSRC(1) = HIMASS
+ AMSRC(2) = HIMASS
+C check cuts on photon-hadron mass
+ IF((0.765D0+PARMDL(46)).GT.(PARMDL(45)*ECMIN)) THEN
+ YMI = ECMIN
+ ECMIN = PARMDL(46)/PARMDL(45)+0.1D0
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GHHIOF: ecmin corrected to (old/new)',YMI,ECMIN
+ ENDIF
+C check kinematic limitations
+ YMI = ECMIN**2/(4.D0*EE*EEN)
+ IF(YMIN1.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GHHIOF: ymin1 increased to (old/new)',YMIN1,YMI
+ YMIN1 = YMI
+ ELSE IF(YMIN1.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GHHIOF:','ECM-CUT CORRESPONDS TO YMIN1 OF',YMI,
+ & ' INSTEAD OF',YMIN1
+ ENDIF
+ IF(YMIN2.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GHHIOF: ymin2 increased to (old/new)',YMIN2,YMI
+ YMIN2 = YMI
+ ELSE IF(YMIN2.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GHHIOF:','ECM-CUT CORRESPONDS TO YMIN2 OF',YMI,
+ & ' INSTEAD OF',YMIN2
+ ENDIF
+C kinematic limitation
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*YMIN1**2/(1.D0-YMIN1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*YMIN2**2/(1.D0-YMIN2))
+C debug output
+ WRITE(LO,'(/6X,A,2I4)') 'MASS NUMBER, CHARGE NUMBER ',NA,NZ
+ WRITE(LO,'(6X,A,E12.5)') 'HADRON MASS (GeV) ',HIMASS
+ WRITE(LO,'(6X,A,E12.5)') 'HADRON RADIUS (GeV**-1) ',HIRADI
+ WRITE(LO,'(6X,A,2E12.5)') 'Q**2 RANGE PHOTON 1 (GEV**2)',Q2LOW1,
+ & Q2MAX1
+ WRITE(LO,'(6X,A,2E12.5)') 'Q**2 RANGE PHOTON 2 (GEV**2)',Q2LOW2,
+ & Q2MAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 1 ',YMIN1,
+ & YMAX1
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 2 ',YMIN2,
+ & YMAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'SQRT(S) PER NUCLEON, TOTAL ',
+ & 2.D0*EEN,2.D0*EE
+ WRITE(LO,'(6X,A,2E12.5)') 'INV.MASS PHOTON-HADRON ',ECMIN,
+ & ECMAX
+ WRITE(LO,'(6X,A,E12.5)') 'MIN. INV.MASS PHOTON-POMERON',
+ & PARMDL(175)
+ WRITE(LO,'(6X,A,I10)') 'EVENTS TO PROCESS ',NEVENT
+ IF(Q2LOW1.GE.Q2MAX1) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GHHIOF:ERROR:INCONSISTENT Q**2 RANGE 1',Q2LOW1,Q2MAX1
+ CALL PHO_ABORT
+ ENDIF
+ IF(Q2LOW2.GE.Q2MAX2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GHHIOF:ERROR:INCONSISTENT Q**2 RANGE 2',Q2LOW2,Q2MAX2
+ CALL PHO_ABORT
+ ENDIF
+C hadron numbers set to 0
+ IDPSRC(1) = 0
+ IDPSRC(2) = 0
+ IDBSRC(1) = 0
+ IDBSRC(2) = 0
+C
+ Max_tab = 100
+ YMAX = YMAX1
+ YMIN = YMIN1
+ XMAX = LOG(YMAX)
+ XMIN = LOG(YMIN)
+ XDEL = XMAX-XMIN
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ DO 100 I=1,Max_tab
+ Y1 = EXP(XMIN+DELLY*DBLE(I-1))
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*Y1*Y1/(1.D0-Y1))
+ IF(Q2LOW1.GE.Q2MAX1) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GHHIOF: ymax1 changed from/to',YMAX1,Y1
+ YMAX1 = MIN(Y1,YMAX1)
+ GOTO 101
+ ENDIF
+ 100 CONTINUE
+ 101 CONTINUE
+ YMAX = YMAX2
+ YMIN = YMIN2
+ XMAX = LOG(YMAX)
+ XMIN = LOG(YMIN)
+ XDEL = XMAX-XMIN
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ DO 102 I=1,Max_tab
+ Y1 = EXP(XMIN+DELLY*DBLE(I-1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y1*Y1/(1.D0-Y1))
+ IF(Q2LOW2.GE.Q2MAX2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GHHIOF: ymax2 changed from/to',YMAX2,Y1
+ YMAX2 = MIN(Y1,YMAX2)
+ GOTO 103
+ ENDIF
+ 102 CONTINUE
+ 103 CONTINUE
+C
+ X1MAX = LOG(YMAX1)
+ X1MIN = LOG(YMIN1)
+ X1DEL = X1MAX-X1MIN
+ X2MAX = LOG(YMAX2)
+ X2MIN = LOG(YMIN2)
+ X2DEL = X2MAX-X2MIN
+ DELLY = LOG(YMAX1/YMIN1)/DBLE(Max_tab-1)
+ FLUX = 0.D0
+ IF(IDEB(30).GE.1) WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_GHHIOF: table of raw photon flux (side 1)',Max_tab
+ DO 105 I=1,Max_tab
+ Y1 = EXP(X1MIN+DELLY*DBLE(I-1))
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*Y1*Y1/(1.D0-Y1))
+ FF = ((1.D0+(1.D0-Y1)**2)/Y1*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*HIMA2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1))*ALPHA/(2.D0*PI)
+ FLUX = FLUX+Y1*FF
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,2E15.4)') Y1,FF
+ 105 CONTINUE
+ FLUX = FLUX*DELLY
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,E12.4)')
+ & 'PHO_GHHIOF: integrated flux (one side):',FLUX
+C
+C photon
+ EGAM = MAX(YMAX1,YMAX2)*EE
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = EGAM
+ P1(4) = EGAM
+C hadron
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -SQRT(EEN**2-AMP2)
+ P2(4) = EEN
+ CALL PHO_SETPAR(1,22,0,0.D0)
+ CALL PHO_SETPAR(2,2212,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+C
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*YMIN1**2/(1.D0-YMIN1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*YMIN2**2/(1.D0-YMIN2))
+ Y1 = YMIN1
+ Y2 = YMIN2
+ WGMAX1 = (1.D0+(1.D0-Y1)**2)*LOG(Q2MAX1/Q2LOW1)
+ & -2.D0*HIMA2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1
+ WGMAX2 = (1.D0+(1.D0-Y2)**2)*LOG(Q2MAX2/Q2LOW2)
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2
+C
+ IF(IPAMDL(175).EQ.1) WGMAX2 = 0.D0
+ IF(IPAMDL(175).EQ.2) WGMAX1 = 0.D0
+C
+ FAC12 = WGMAX1*LOG(YMAX1/YMIN1)
+ & /(WGMAX1*LOG(YMAX1/YMIN1)+WGMAX2*LOG(YMAX2/YMIN2))
+C
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C
+C generation of events, flux calculation
+
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ Q21MIN = 1.D30
+ Q22MIN = 1.D30
+ Q21MAX = 0.D0
+ Q22MAX = 0.D0
+ Q21AVE = 0.D0
+ Q22AVE = 0.D0
+ Q21AV2 = 0.D0
+ Q22AV2 = 0.D0
+ YY1MIN = 1.D30
+ YY2MIN = 1.D30
+ YY1MAX = 0.D0
+ YY2MAX = 0.D0
+ NITER = NEVENT
+ NITERS(1) = 0
+ NITERS(2) = 0
+ ITRY = 0
+ ITRW(1) = 0
+ ITRW(2) = 0
+ DO 200 I=1,NITER
+C sample y1, y2
+ 150 CONTINUE
+ ITRY = ITRY+1
+ 175 CONTINUE
+C
+C select side of photon emission
+ IF(DT_RNDM(AY1).LT.FAC12) THEN
+ ITRW(1) = ITRW(1)+1
+C select Y1
+ Y1 = EXP(X1DEL*DT_RNDM(AY1)+X1MIN)
+ Q2LOW1 = MAX(Q2MIN1,HIMA2*Y1**2/(1.D0-Y1))
+ IF(Q2LOW1.GE.Q2MAX1) GOTO 175
+ Q2LOG1 = LOG(Q2MAX1/Q2LOW1)
+ WGH = (1.D0+(1.D0-Y1)**2)*Q2LOG1
+ & -2.D0*HIMA2*Y1*(1.D0/Q2LOW1-1.D0/Q2MAX1)*Y1
+ IF(WGMAX1.LT.WGH) WRITE(LO,'(1X,A,3E12.5)')
+ & 'PHO_GHHIOF:WEIGHT ERROR (1):',Y1,WGMAX1,WGH
+ IF(DT_RNDM(AYS1)*WGMAX1.GT.WGH) GOTO 175
+C sample Q2
+ IF(IPAMDL(174).EQ.1) THEN
+ YEFF = 1.D0+(1.D0-Y1)**2
+ 185 CONTINUE
+ Q2P1 = Q2LOW1*EXP(Q2LOG1*DT_RNDM(Y1))
+ WEIGHT = (YEFF-2.D0*(1.D0-Y1)*Q2LOW1/Q2P1)/YEFF
+ IF(WEIGHT.LT.DT_RNDM(Q2P1)) GOTO 185
+ ELSE
+ Q2P1 = Q2LOW1
+ ENDIF
+C impact parameter
+ GAIMP(1) = 1.D0/SQRT(Q2P1)
+C form factor (squared)
+ FF2 = 1.D0
+ IF(GAIMP(1).LT.2.D0*HIRADI) FF2 = 0.D0
+ IF(DT_RNDM(Q2P1).GE.FF2) GOTO 175
+C photon data
+ GYY(1) = Y1
+ GQ2(1) = Q2P1
+
+C
+C incoming hadron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = SQRT(EE**2-AMP2)
+ PINI(4,1) = EE
+ PINI(5,1) = AMP
+C outgoing hadron 1
+ YQ2 = SQRT((1.D0-Y1)*Q2P1)
+ Q2E = Q2P1/(4.D0*EE)
+ E1Y = EE*(1.D0-Y1)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,1) = YQ2*COF
+ PFIN(2,1) = YQ2*SIF
+ PFIN(3,1) = E1Y-Q2E
+ PFIN(4,1) = E1Y+Q2E
+ PFIN(5,1) = 0.D0
+ PFPHI(1) = ATAN2(COF,SIF)
+ PFTHE(1) = ACOS((E1Y-Q2E)/(Q2E+E1Y))
+C incoming hadron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -SQRT(EE**2-AMP2)
+ PINI(4,2) = EE
+ PINI(5,2) = AMP
+C scattering photon
+ P1(1) = -PFIN(1,1)
+ P1(2) = -PFIN(2,1)
+ P1(3) = PINI(3,1)-PFIN(3,1)
+ P1(4) = PINI(4,1)-PFIN(4,1)
+C scattering hadron
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -SQRT(EEN**2-AMP2)
+ P2(4) = EEN
+ ISIDE = 1
+C
+ ELSE
+C
+ ITRW(2) = ITRW(2)+1
+C select Y2
+ Y2 = EXP(X2DEL*DT_RNDM(AY2)+X2MIN)
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y2**2/(1.D0-Y2))
+ IF(Q2LOW2.GE.Q2MAX2) GOTO 175
+ Q2LOG2 = LOG(Q2MAX2/Q2LOW2)
+ WGH = (1.D0+(1.D0-Y2)**2)*Q2LOG2
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2
+ IF(WGMAX2.LT.WGH) WRITE(LO,'(1X,A,3E12.5)')
+ & 'PHO_GHHIOF:WEIGHT ERROR (2):',Y2,WGMAX2,WGH
+ IF(DT_RNDM(AYS1)*WGMAX2.GT.WGH) GOTO 175
+C sample Q2
+ IF(IPAMDL(174).EQ.1) THEN
+ YEFF = 1.D0+(1.D0-Y2)**2
+ 186 CONTINUE
+ Q2P2 = Q2LOW2*EXP(Q2LOG2*DT_RNDM(Y2))
+ WEIGHT = (YEFF-2.D0*(1.D0-Y2)*Q2LOW2/Q2P2)/YEFF
+ IF(WEIGHT.LT.DT_RNDM(Q2P2)) GOTO 186
+ ELSE
+ Q2P2 = Q2LOW2
+ ENDIF
+C impact parameter
+ GAIMP(2) = 1.D0/SQRT(Q2P2)
+C form factor (squared)
+ FF2 = 1.D0
+ IF(GAIMP(2).LT.2.D0*HIRADI) FF2 = 0.D0
+ IF(DT_RNDM(Q2P2).GE.FF2) GOTO 175
+C photon data
+ GYY(2) = Y2
+ GQ2(2) = Q2P2
+
+C
+C incoming hadron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = SQRT(EE**2-AMP2)
+ PINI(4,1) = EE
+ PINI(5,1) = AMP
+C incoming hadron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -SQRT(EE**2-AMP2)
+ PINI(4,2) = EE
+ PINI(5,2) = AMP
+C outgoing hadron 2
+ YQ2 = SQRT((1.D0-Y2)*Q2P2)
+ Q2E = Q2P2/(4.D0*EE)
+ E1Y = EE*(1.D0-Y2)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,2) = YQ2*COF
+ PFIN(2,2) = YQ2*SIF
+ PFIN(3,2) = -E1Y+Q2E
+ PFIN(4,2) = E1Y+Q2E
+ PFIN(5,2) = 0.D0
+ PFPHI(2) = ATAN2(COF,SIF)
+ PFTHE(2) = ACOS((Q2E-E1Y)/(Q2E+E1Y))
+C scattering hadron
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = SQRT(EEN**2-AMP2)
+ P2(4) = EEN
+C scattering photon
+ P1(1) = -PFIN(1,2)
+ P1(2) = -PFIN(2,2)
+ P1(3) = PINI(3,2)-PFIN(3,2)
+ P1(4) = PINI(4,2)-PFIN(4,2)
+ ISIDE = 2
+ ENDIF
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF(GGECM.LT.0.1D0) GOTO 175
+ GGECM = SQRT(GGECM)
+ IF((GGECM.LT.ECMIN).OR.(GGECM.GT.ECMAX)) GOTO 175
+C
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = -SQRT(Q2P1)
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = -SQRT(Q2P2)
+ CALL PHO_PRESEL(5,IREJ)
+C photon helicities
+ IGHEL(1) = 1
+ IGHEL(2) = 1
+C user cuts
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+C cut on diffractive mass
+ DO 250 K=1,NHEP
+ IF(ISTHEP(K).EQ.30) THEN
+ GHDIFF = PHEP(1,K)
+ IF(GHDIFF.GE.PARMDL(175)) THEN
+ GOTO 251
+ ELSE
+ GOTO 150
+ ENDIF
+ ENDIF
+ 250 CONTINUE
+ WRITE(LO,'(/,1X,A)')
+ & 'PHO_GHHIOF: no diffractive entry found'
+ CALL PHO_PREVNT(-1)
+ GOTO 150
+ 251 CONTINUE
+C remove quasi-elastically scattered hadron
+ DO 260 K=1,NHEP
+ IF((ISTHEP(K).EQ.1).AND.(IDHEP(K).EQ.2212)) THEN
+ XF = ABS(PHEP(3,K)/EEN)
+ IF(XF.LT.PARMDL(72)) GOTO 150
+* ISTHEP(K) = 2
+ GOTO 261
+ ENDIF
+ 260 CONTINUE
+ 261 CONTINUE
+C
+C statistics
+
+ NITERS(ISIDE) = NITERS(ISIDE)+1
+ IF(ISIDE.EQ.1) THEN
+
+ AY1 = AY1+Y1
+ AYS1 = AYS1+Y1*Y1
+ Q21AVE = Q21AVE+Q2P1
+ Q21AV2 = Q21AV2+Q2P1*Q2P1
+ Q21MIN = MIN(Q21MIN,Q2P1)
+ Q21MAX = MAX(Q21MAX,Q2P1)
+ YY1MIN = MIN(YY1MIN,Y1)
+ YY1MAX = MAX(YY1MAX,Y1)
+ ELSE
+
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+ Q22AVE = Q22AVE+Q2P2
+ Q22AV2 = Q22AV2+Q2P2*Q2P2
+ Q22MIN = MIN(Q22MIN,Q2P2)
+ Q22MAX = MAX(Q22MAX,Q2P2)
+ YY2MIN = MIN(YY2MIN,Y2)
+ YY2MAX = MAX(YY2MAX,Y2)
+ ENDIF
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+C
+ WGMAX = WGMAX1*LOG(YMAX1/YMIN1)*FAC12
+ WGY1 = WGMAX*DBLE(ITRY)/DBLE(MAX(ITRW(1),1))*ALPHA/(2.D0*PI)
+ WGMAX = WGMAX2*LOG(YMAX2/YMIN2)*(1.D0-FAC12)
+ WGY2 = WGMAX*DBLE(ITRY)/DBLE(MAX(ITRW(2),1))*ALPHA/(2.D0*PI)
+ AY1 = AY1/DBLE(MAX(NITERS(1),1))
+ AYS1 = AYS1/DBLE(MAX(NITERS(1),1))
+ DAY1 = SQRT((AYS1-AY1**2)/DBLE(MAX(NITERS(1),1)))
+ AY2 = AY2/DBLE(MAX(NITERS(2),1))
+ AYS2 = AYS2/DBLE(MAX(NITERS(2),1))
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(MAX(NITERS(2),1)))
+ Q21AVE = Q21AVE/DBLE(MAX(NITERS(1),1))
+ Q21AV2 = Q21AV2/DBLE(MAX(NITERS(1),1))
+ Q21AV2 = SQRT((Q21AV2-Q21AVE**2)/DBLE(MAX(NITERS(1),1)))
+ Q22AVE = Q22AVE/DBLE(MAX(NITERS(2),1))
+ Q22AV2 = Q22AV2/DBLE(MAX(NITERS(2),1))
+ Q22AV2 = SQRT((Q22AV2-Q22AVE**2)/DBLE(MAX(NITERS(2),1)))
+ WGMAX = WGMAX1*LOG(YMAX1/YMIN1)+WGMAX2*LOG(YMAX2/YMIN2)
+ WGY = WGMAX*DBLE(ITRY)/DBLE(ITRW(1)+ITRW(2))*ALPHA/(2.D0*PI)
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,/3X,6I12)')
+ & 'PHO_GHHIOF:SUMMARY: NITER, NITERS1/2, ITRY, ITRW1,2',
+ & NITER,NITERS,ITRY,ITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y1,DY1 ',
+ & AY1,DAY1
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y2,DY2 ',
+ & AY2,DAY2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 1 ',
+ & YY1MIN,YY1MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 2 ',
+ & YY2MIN,YY2MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Q2,DQ2 PHOTON 1 ',
+ & Q21AVE,Q21AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Q2 RANGE PHOTON 1 ',
+ & Q21MIN,Q21MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Q2,DQ2 PHOTON 2 ',
+ & Q22AVE,Q22AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Q2 RANGE PHOTON 2 ',
+ & Q22MIN,Q22MAX
+C
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_GHHIOF:NO OUTPUT OF HISTOGRAMS',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GHHIAS
+ SUBROUTINE PHO_GHHIAS(NEVENT,EEP,EEN,NA,NZ)
+C**********************************************************************
+C
+C interface to call PHOJET (variable energy run) for
+C gamma-hadron collisions in heavy ion - hadron
+C collisions (form factor approach)
+C
+C input: EEP LAB system energy of proton (GeV)
+C EEN LAB system energy per nucleon (GeV)
+C NA atomic number of ion/hadron
+C NZ charge number of ion/hadron
+C NEVENT number of events to generate
+C from /LEPCUT/:
+C YMIN2 lower limit of Y
+C (energy fraction taken by photon from hadron)
+C YMAX2 upper cutoff for Y, necessary to avoid
+C underflows
+C Q2MIN2 minimum Q**2 of photons (should be set to 0)
+C Q2MAX2 maximum Q**2 of photons (if necessary,
+C corrected according size of hadron)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( PI = 3.14159265359D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C photon flux kinematics and cuts
+ DOUBLE PRECISION ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2
+ INTEGER ITAG1,ITAG2
+ COMMON /POFCUT/ ECMIN,ECMAX,EEMIN1,EEMIN2,
+ & YMIN1,YMAX1,YMIN2,YMAX2,
+ & Q2MIN1,Q2MAX1,Q2MIN2,Q2MAX2,
+ & THMIN1,THMAX1,THMIN2,THMAX2,
+ & ITAG1,ITAG2
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION P1(4),P2(4)
+
+ WRITE(LO,'(2(/1X,A))')
+ & 'PHO_GHHIAS: hadron-gamma event generation',
+ & '-----------------------------------------'
+C hadron size and mass
+ FM2GEV = 5.07D0
+ HIMASS = DBLE(NA)*0.938D0
+ HIMA2 = HIMASS**2
+ HIRADI = 1.2D0*FM2GEV*DBLE(NA)**0.333
+ ALPHA = DBLE(NZ**2)/137.D0
+ AMP = 0.938D0
+ AMP2 = AMP**2
+C correct Q2MAX2 according to hadron size
+ Q2MAXH = 2.D0/HIRADI**2
+ Q2MAX2 = MIN(Q2MAX2,Q2MAXH)
+ IF(Q2MAX2.LT.1.D-20) Q2MAX2 = Q2MAXH
+C total hadron / heavy ion energy
+ EE = EEN*DBLE(NA)
+ GAMMA = EE/HIMASS
+C setup /POFSRC/
+ GAMSRC(2) = GAMMA
+ RADSRC(2) = HIRADI
+ AMSRC(2) = HIMASS
+C check kinematic limitations
+ YMI = ECMIN**2/(4.D0*EE*EEP)
+ IF(YMIN2.LT.YMI) THEN
+ WRITE(LO,'(/1X,A,2E12.5)')
+ & 'PHO_GHHIOF: ymin2 increased to (old/new)',YMIN2,YMI
+ YMIN2 = YMI
+ ELSE IF(YMIN2.GT.YMI) THEN
+ WRITE(LO,'(/1X,A,/1X,A,E12.5,A,E12.5)')
+ & 'PHO_GHHIOF:','ECM-CUT CORRESPONDS TO YMIN2 OF',YMI,
+ & ' INSTEAD OF',YMIN2
+ ENDIF
+C kinematic limitation
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*YMIN2**2/(1.D0-YMIN2))
+C debug output
+ WRITE(LO,'(/6X,A,2I4)') 'MASS NUMBER, CHARGE NUMBER ',NA,NZ
+ WRITE(LO,'(6X,A,E12.5)') 'HEAVY ION MASS (GeV) ',HIMASS
+ WRITE(LO,'(6X,A,E12.5)') 'HEAVY ION RADIUS (GeV**-1) ',HIRADI
+ WRITE(LO,'(6X,A,2E12.5)') 'Q**2 RANGE PHOTON 2 (GEV**2)',Q2LOW2,
+ & Q2MAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'Y RANGE PHOTON 2 ',YMIN2,
+ & YMAX2
+ WRITE(LO,'(6X,A,2E12.5)') 'SQRT(S) PER NUCLEON, TOTAL ',
+ & 2.D0*SQRT(EEN*EEP),2.D0*SQRT(EE*EEP)
+ WRITE(LO,'(6X,A,2E12.5)') 'INV.MASS HADRON-PHOTON ',ECMIN,
+ & ECMAX
+ WRITE(LO,'(6X,A,I10)') 'EVENTS TO PROCESS ',NEVENT
+ IF(Q2LOW2.GE.Q2MAX2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GHHIOF:ERROR:inconsistent Q**2 range 2',Q2LOW2,Q2MAX2
+ CALL PHO_ABORT
+ ENDIF
+C hadron numbers set to 0
+ IDPSRC(1) = 0
+ IDPSRC(2) = 0
+ IDBSRC(1) = 0
+ IDBSRC(2) = 0
+C
+ Max_tab = 100
+ YMAX = YMAX2
+ YMIN = YMIN2
+ XMAX = LOG(YMAX)
+ XMIN = LOG(YMIN)
+ XDEL = XMAX-XMIN
+ DELLY = LOG(YMAX/YMIN)/DBLE(Max_tab-1)
+ DO 102 I=1,Max_tab
+ Y1 = EXP(XMIN+DELLY*DBLE(I-1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y1*Y1/(1.D0-Y1))
+ IF(Q2LOW2.GE.Q2MAX2) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_GHHIOF: ymax2 changed from/to',YMAX2,Y1
+ YMAX2 = MIN(Y1,YMAX2)
+ GOTO 103
+ ENDIF
+ 102 CONTINUE
+ 103 CONTINUE
+C
+ X2MAX = LOG(YMAX2)
+ X2MIN = LOG(YMIN2)
+ X2DEL = X2MAX-X2MIN
+ DELLY = LOG(YMAX2/YMIN2)/DBLE(Max_tab-1)
+ FLUX = 0.D0
+ IF(IDEB(30).GE.1) WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_GHHIAS: table of raw photon flux (side 2)',Max_tab
+ DO 105 I=1,Max_tab
+ Y2 = EXP(X2MIN+DELLY*DBLE(I-1))
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y2*Y2/(1.D0-Y2))
+ FF = ((1.D0+(1.D0-Y2)**2)/Y2*LOG(Q2MAX2/Q2LOW2)
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2))*ALPHA/(2.D0*PI)
+ FLUX = FLUX+Y2*FF
+ IF(IDEB(30).GE.1) WRITE(LO,'(5X,2E15.4)') Y2,FF
+ 105 CONTINUE
+ FLUX = FLUX*DELLY
+ IF(IDEB(30).GE.1) WRITE(LO,'(1X,A,E12.4)')
+ & 'PHO_GHHIAS: integrated flux:',FLUX
+C
+C hadron
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = -SQRT(EEP**2-AMP2)
+ P1(4) = EEP
+C photon
+ EGAM = YMAX2*EE
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = EGAM
+ P2(4) = EGAM
+ CALL PHO_SETPAR(1,2212,0,0.D0)
+ CALL PHO_SETPAR(2,22,0,0.D0)
+ CALL PHO_EVENT(-1,P1,P2,SIGMAX,IREJ)
+C
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*YMIN2**2/(1.D0-YMIN2))
+ Y2 = YMIN2
+ WGMAX2 = (1.D0+(1.D0-Y2)**2)*LOG(Q2MAX2/Q2LOW2)
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2
+C
+ CALL PHO_PHIST(-1,SIGMAX)
+ CALL PHO_LHIST(-1,SIGMAX)
+C
+C generation of events, flux calculation
+
+ AY1 = 0.D0
+ AY2 = 0.D0
+ AYS1 = 0.D0
+ AYS2 = 0.D0
+ Q22MIN = 1.D30
+ Q22MAX = 0.D0
+ Q22AVE = 0.D0
+ Q22AV2 = 0.D0
+ YY2MIN = 1.D30
+ YY2MAX = 0.D0
+ NITER = NEVENT
+ NITERS = 0
+ ITRY = 0
+ ITRW = 0
+ DO 200 I=1,NITER
+C sample photon flux
+ 150 CONTINUE
+ ITRY = ITRY+1
+ 175 CONTINUE
+C
+ ITRW = ITRW+1
+C select Y2
+ Y2 = EXP(X2DEL*DT_RNDM(AY2)+X2MIN)
+ Q2LOW2 = MAX(Q2MIN2,HIMA2*Y2**2/(1.D0-Y2))
+ IF(Q2LOW2.GE.Q2MAX2) GOTO 175
+ Q2LOG2 = LOG(Q2MAX2/Q2LOW2)
+ WGH = (1.D0+(1.D0-Y2)**2)*Q2LOG2
+ & -2.D0*HIMA2*Y2*(1.D0/Q2LOW2-1.D0/Q2MAX2)*Y2
+ IF(WGMAX2.LT.WGH) WRITE(LO,'(1X,A,3E12.5)')
+ & 'PHO_GHHIOF:WEIGHT ERROR (2):',Y2,WGMAX2,WGH
+ IF(DT_RNDM(AYS1)*WGMAX2.GT.WGH) GOTO 175
+C sample Q2
+ IF(IPAMDL(174).EQ.1) THEN
+ YEFF = 1.D0+(1.D0-Y2)**2
+ 186 CONTINUE
+ Q2P2 = Q2LOW2*EXP(Q2LOG2*DT_RNDM(Y2))
+ WEIGHT = (YEFF-2.D0*(1.D0-Y2)*Q2LOW2/Q2P2)/YEFF
+ IF(WEIGHT.LT.DT_RNDM(Q2P2)) GOTO 186
+ ELSE
+ Q2P2 = Q2LOW2
+ ENDIF
+C impact parameter
+ GAIMP(2) = 1.D0/SQRT(Q2P2)
+C form factor (squared)
+ FF2 = 1.D0
+ IF(GAIMP(2).LT.2.D0*HIRADI) FF2 = 0.D0
+ IF(DT_RNDM(Q2P2).GE.FF2) GOTO 175
+C photon data
+ GYY(2) = Y2
+ GQ2(2) = Q2P2
+
+C
+C incoming hadron 1
+ PINI(1,1) = 0.D0
+ PINI(2,1) = 0.D0
+ PINI(3,1) = SQRT(EEP**2-AMP2)
+ PINI(4,1) = EEP
+ PINI(5,1) = AMP
+C incoming hadron 2
+ PINI(1,2) = 0.D0
+ PINI(2,2) = 0.D0
+ PINI(3,2) = -SQRT(EE**2-AMP2)
+ PINI(4,2) = EE
+ PINI(5,2) = AMP
+C outgoing hadron 2
+ YQ2 = SQRT((1.D0-Y2)*Q2P2)
+ Q2E = Q2P2/(4.D0*EE)
+ E1Y = EE*(1.D0-Y2)
+ CALL PHO_SFECFE(SIF,COF)
+ PFIN(1,2) = YQ2*COF
+ PFIN(2,2) = YQ2*SIF
+ PFIN(3,2) = -E1Y+Q2E
+ PFIN(4,2) = E1Y+Q2E
+ PFIN(5,2) = 0.D0
+ PFPHI(2) = ATAN2(COF,SIF)
+ PFTHE(2) = ACOS((Q2E-E1Y)/(Q2E+E1Y))
+C scattering hadron
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = SQRT(EEP**2-AMP2)
+ P1(4) = EEP
+ Q2P1 = AMP2
+C scattering photon
+ P2(1) = -PFIN(1,2)
+ P2(2) = -PFIN(2,2)
+ P2(3) = PINI(3,2)-PFIN(3,2)
+ P2(4) = PINI(4,2)-PFIN(4,2)
+ ISIDE = 2
+C
+C ECMS cut
+ GGECM = (P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2
+ IF(GGECM.LT.0.1D0) GOTO 175
+ GGECM = SQRT(GGECM)
+ IF((GGECM.LT.ECMIN).OR.(GGECM.GT.ECMAX)) GOTO 175
+C
+ PGAM(1,1) = P1(1)
+ PGAM(2,1) = P1(2)
+ PGAM(3,1) = P1(3)
+ PGAM(4,1) = P1(4)
+ PGAM(5,1) = AMP
+ PGAM(1,2) = P2(1)
+ PGAM(2,2) = P2(2)
+ PGAM(3,2) = P2(3)
+ PGAM(4,2) = P2(4)
+ PGAM(5,2) = -SQRT(Q2P2)
+C photon helicities
+ IGHEL(2) = 1
+C user cuts
+ CALL PHO_PRESEL(5,IREJ)
+ IF(IREJ.NE.0) GOTO 175
+C event generation
+ CALL PHO_EVENT(1,P1,P2,SIGCUR,IREJ)
+ IF(IREJ.NE.0) GOTO 150
+C cut on diffractive mass
+ DO 250 K=1,NHEP
+ IF(ISTHEP(K).EQ.30) THEN
+ GHDIFF = PHEP(1,K)
+ IF(GHDIFF.GE.PARMDL(175)) THEN
+ GOTO 251
+ ELSE
+ GOTO 150
+ ENDIF
+ ENDIF
+ 250 CONTINUE
+ WRITE(LO,'(/,1X,A)')
+ & 'PHO_GHHIOF: no diffractive entry found'
+ CALL PHO_PREVNT(-1)
+ GOTO 150
+ 251 CONTINUE
+C remove quasi-elastically scattered hadron
+ DO 260 K=1,NHEP
+ IF((ISTHEP(K).EQ.1).AND.(IDHEP(K).EQ.2212)) THEN
+ XF = ABS(PHEP(3,K)/EEN)
+ IF(XF.LT.PARMDL(72)) GOTO 150
+* ISTHEP(K) = 2
+ GOTO 261
+ ENDIF
+ 260 CONTINUE
+ 261 CONTINUE
+C
+C statistics
+
+ NITERS = NITERS+1
+
+ AY2 = AY2+Y2
+ AYS2 = AYS2+Y2*Y2
+ Q22AVE = Q22AVE+Q2P2
+ Q22AV2 = Q22AV2+Q2P2*Q2P2
+ Q22MIN = MIN(Q22MIN,Q2P2)
+ Q22MAX = MAX(Q22MAX,Q2P2)
+ YY2MIN = MIN(YY2MIN,Y2)
+ YY2MAX = MAX(YY2MAX,Y2)
+C histograms
+ CALL PHO_PHIST(1,HSWGHT(0))
+ CALL PHO_LHIST(1,HSWGHT(0))
+ 200 CONTINUE
+C
+ WGMAX = WGMAX2*LOG(YMAX2/YMIN2)
+ WGY2 = WGMAX*DBLE(ITRY)/DBLE(MAX(ITRW,1))*ALPHA/(2.D0*PI)
+ AY2 = AY2/DBLE(MAX(NITERS,1))
+ AYS2 = AYS2/DBLE(MAX(NITERS,1))
+ DAY2 = SQRT((AYS2-AY2**2)/DBLE(MAX(NITERS,1)))
+ Q22AVE = Q22AVE/DBLE(MAX(NITERS,1))
+ Q22AV2 = Q22AV2/DBLE(MAX(NITERS,1))
+ Q22AV2 = SQRT((Q22AV2-Q22AVE**2)/DBLE(MAX(NITERS,1)))
+ WGMAX = WGMAX2*LOG(YMAX2/YMIN2)
+ WGY = WGMAX*DBLE(ITRY)/DBLE(ITRW)*ALPHA/(2.D0*PI)
+ WEIGHT = WGY*SIGMAX*DBLE(NITER)/DBLE(ITRY)
+C output of statistics, histograms
+ WRITE(LO,'(//1X,A,/1X,A,1PE12.3,A,/1X,A)')
+ &'=========================================================',
+ &' ***** simulated cross section: ',WEIGHT,' mb *****',
+ &'========================================================='
+ WRITE(LO,'(//1X,A,/3X,4I12)')
+ & 'PHO_GHHIOF:SUMMARY: NITER, NITERS, ITRY, ITRW',
+ & NITER,NITERS,ITRY,ITRW
+ WRITE(LO,'(1X,A,1P2E12.4)') 'EFFECTIVE WEIGHT (FLUX,TOTAL)',
+ & WGY,WEIGHT
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Y2,DY2 ',
+ & AY2,DAY2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Y RANGE PHOTON 2 ',
+ & YY2MIN,YY2MAX
+ WRITE(LO,'(1X,A,1P2E12.4)') 'AVERAGE Q2,DQ2 PHOTON 2 ',
+ & Q22AVE,Q22AV2
+ WRITE(LO,'(1X,A,1P2E12.4)') 'SAMPLED Q2 RANGE PHOTON 2 ',
+ & Q22MIN,Q22MAX
+C
+ CALL PHO_EVENT(-2,P1,P2,WEIGHT,IREJ)
+ IF(NITER.GT.1) THEN
+ CALL PHO_PHIST(-2,WEIGHT)
+ CALL PHO_LHIST(-2,WEIGHT)
+ ELSE
+ WRITE(LO,'(1X,A,I4)')
+ & 'PHO_GHHIOF: no output of histograms',NITER
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_FITPAR
+ SUBROUTINE PHO_FITPAR(IOUTP)
+C**********************************************************************
+C
+C read input parameters according to PDFs
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEFA=-99999.D0,
+ & DEFB=-100000.D0,
+ & THOUS=1.D3)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+
+ DIMENSION INUM(3),IFPAS(2)
+ CHARACTER*8 CNAME8,PDFNA1,PDFNA2
+ CHARACTER*10 CNAM10
+
+ PARAMETER ( Max_tab = 22 )
+ DIMENSION XDPtab(27,Max_tab),IDPtab(8,Max_tab)
+ REAL XDPtab
+ INTEGER IDPtab
+
+C parameter set for 2212 (GRV94 LO) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 1),k=1,8) /
+ & 2212, 5, 6, 0, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 1),k=1,27) /
+ &1.1000E+00,2.5000E-01,6.3870E+00,6.3870E+00,1.1610E+00,1.1610E+00,
+ &4.5000E-01,9.0000E-01,1.0263E+01,1.0263E+01,1.1710E+00,1.1710E+00,
+ &1.5600E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &1.0000E+00,0.0000E+00,1.0000E+00,0.0000E+00,3.5000E+00,2.0000E+00,
+ &6.0000E-01,6.0000E-01,1.1000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 2212 (GRV94 LO) -2212 (GRV94 LO)
+ DATA (IDPtab(k, 2),k=1,8) /
+ & 2212, 5, 6, 0, -2212, 5, 6, 0 /
+ DATA (XDPtab(k, 2),k=1,27) /
+ &1.1000E+00,2.5000E-01,6.3870E+00,6.3870E+00,1.1610E+00,1.1610E+00,
+ &4.5000E-01,9.0000E-01,1.5174E+01,1.5174E+01,1.5400E+00,1.5400E+00,
+ &1.5600E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &1.0000E+00,0.0000E+00,1.0000E+00,0.0000E+00,3.5000E+00,2.0000E+00,
+ &6.0000E-01,6.0000E-01,1.1000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (GRV-G LO) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 3),k=1,8) /
+ & 22, 5, 3, 0, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 3),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.7450E+00,6.8270E+00,1.2250E+00,1.1360E+00,
+ &5.0000E-01,1.0000E+00,4.7210E+00,1.1740E+01,4.6200E-01,4.2800E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.3100E-03,8.0000E-05,1.0000E+00,0.0000E+00,3.2000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (GRV-G LO) 22 (GRV-G LO)
+ DATA (IDPtab(k, 4),k=1,8) /
+ & 22, 5, 3, 0, 22, 5, 3, 0 /
+ DATA (XDPtab(k, 4),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.7450E+00,2.7450E+00,1.2250E+00,1.2250E+00,
+ &5.0000E-01,1.0000E+00,4.7210E+00,4.7210E+00,4.6200E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.3100E-03,8.0000E-05,4.3100E-03,8.0000E-05,3.2000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (GRS-G LO) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 5),k=1,8) /
+ & 22, 5, 4, 4, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 5),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.7450E+00,6.8270E+00,1.2250E+00,1.1360E+00,
+ &5.0000E-01,1.0000E+00,4.7210E+00,1.1740E+01,4.6200E-01,4.2800E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.3100E-03,8.0000E-05,1.0000E+00,0.0000E+00,3.2000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (GRS-G LO) 22 (GRS-G LO)
+ DATA (IDPtab(k, 6),k=1,8) /
+ & 22, 5, 4, 4, 22, 5, 4, 4 /
+ DATA (XDPtab(k, 6),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.7450E+00,2.7450E+00,1.2250E+00,1.2250E+00,
+ &5.0000E-01,1.0000E+00,4.7210E+00,4.7210E+00,4.6200E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.3100E-03,8.0000E-05,4.3100E-03,8.0000E-05,3.2000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (SaS-1D ) 22 (SaS-1D )
+ DATA (IDPtab(k, 7),k=1,8) /
+ & 22, 1, 1, 4, 22, 1, 1, 4 /
+ DATA (XDPtab(k, 7),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.1170E+00,3.1170E+00,1.3450E+00,1.3450E+00,
+ &3.0200E-01,1.0000E+00,6.6050E+00,6.6050E+00,1.7500E-01,1.7500E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.0900E-03,9.0000E-05,4.0900E-03,9.0000E-05,3.2000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (SaS-1M ) 22 (SaS-1M )
+ DATA (IDPtab(k, 8),k=1,8) /
+ & 22, 1, 2, 4, 22, 1, 2, 4 /
+ DATA (XDPtab(k, 8),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.5540E+00,2.5540E+00,1.0910E+00,1.0910E+00,
+ &5.0000E-01,1.0000E+00,4.2580E+00,4.2580E+00,4.9000E-01,4.9000E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.5700E-03,1.0000E-04,4.5700E-03,1.0000E-04,3.2000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (SaS-2D ) 22 (SaS-2D )
+ DATA (IDPtab(k, 9),k=1,8) /
+ & 22, 1, 3, 4, 22, 1, 3, 4 /
+ DATA (XDPtab(k, 9),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.5330E+00,2.5330E+00,1.1340E+00,1.1340E+00,
+ &5.0100E-01,1.0000E+00,4.2300E+00,4.2300E+00,4.9300E-01,4.9300E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.5900E-03,1.0000E-04,4.5900E-03,1.0000E-04,3.2000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (SaS-2M ) 22 (SaS-2M )
+ DATA (IDPtab(k, 10),k=1,8) /
+ & 22, 1, 4, 4, 22, 1, 4, 4 /
+ DATA (XDPtab(k, 10),k=1,27) /
+ &1.0970E+00,2.5000E-01,2.8220E+00,2.8220E+00,1.0910E+00,1.0910E+00,
+ &4.9100E-01,1.0000E+00,4.6870E+00,4.6870E+00,4.5800E-01,4.5800E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.6600E-03,3.0000E-05,4.6600E-03,3.0000E-05,3.2000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (LAC ) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 11),k=1,8) /
+ & 22, 3, 1, 3, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 11),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.3050E+00,6.8270E+00,9.4500E-01,1.1360E+00,
+ &4.5000E-01,1.0000E+00,6.7120E+00,1.1740E+01,2.5800E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.3400E-03,2.4000E-04,1.0000E+00,0.0000E+00,2.0000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (PDFLIB2 ) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 12),k=1,8) /
+ & 22, 3, 1, 2, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 12),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.3050E+00,6.8270E+00,9.4500E-01,1.1360E+00,
+ &4.5000E-01,1.0000E+00,6.7120E+00,1.1740E+01,2.5800E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.3400E-03,2.4000E-04,1.0000E+00,0.0000E+00,2.0000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (LAC ) 22 (LAC )
+ DATA (IDPtab(k, 13),k=1,8) /
+ & 22, 3, 1, 3, 22, 3, 1, 3 /
+ DATA (XDPtab(k, 13),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.3050E+00,3.3050E+00,9.4500E-01,9.4500E-01,
+ &4.5000E-01,1.0000E+00,6.7120E+00,6.7120E+00,2.5800E-01,2.5800E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.3400E-03,2.4000E-04,3.3400E-03,2.4000E-04,2.0000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (PDFLIB2 ) 22 (PDFLIB2 )
+ DATA (IDPtab(k, 14),k=1,8) /
+ & 22, 3, 1, 2, 22, 3, 1, 2 /
+ DATA (XDPtab(k, 14),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.3050E+00,3.3050E+00,9.4500E-01,9.4500E-01,
+ &4.5000E-01,1.0000E+00,6.7120E+00,6.7120E+00,2.5800E-01,2.5800E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.3400E-03,2.4000E-04,3.3400E-03,2.4000E-04,2.0000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (LAC ) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 15),k=1,8) /
+ & 22, 3, 2, 3, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 15),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.1450E+00,6.8270E+00,1.0490E+00,1.1360E+00,
+ &4.5000E-01,1.0000E+00,6.3680E+00,1.1740E+01,1.4700E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.8700E-03,1.1000E-04,1.0000E+00,0.0000E+00,2.0000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (PDFLIB2 ) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 16),k=1,8) /
+ & 22, 3, 2, 2, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 16),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.1450E+00,6.8270E+00,1.0490E+00,1.1360E+00,
+ &4.5000E-01,1.0000E+00,6.3680E+00,1.1740E+01,1.4700E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.8700E-03,1.1000E-04,1.0000E+00,0.0000E+00,2.0000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (LAC ) 22 (LAC )
+ DATA (IDPtab(k, 17),k=1,8) /
+ & 22, 3, 2, 3, 22, 3, 2, 3 /
+ DATA (XDPtab(k, 17),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.1450E+00,3.1450E+00,1.0490E+00,1.0490E+00,
+ &4.5000E-01,1.0000E+00,6.3680E+00,6.3680E+00,1.4700E-01,1.4700E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.8700E-03,1.1000E-04,3.8700E-03,1.0000E-04,2.0000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (PDFLIB2 ) 22 (PDFLIB2 )
+ DATA (IDPtab(k, 18),k=1,8) /
+ & 22, 3, 2, 2, 22, 3, 2, 2 /
+ DATA (XDPtab(k, 18),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.1450E+00,3.1450E+00,1.0490E+00,1.0490E+00,
+ &4.5000E-01,1.0000E+00,6.3680E+00,6.3680E+00,1.4700E-01,1.4700E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &3.8700E-03,1.1000E-04,3.8700E-03,1.0000E-04,2.0000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (LAC ) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 19),k=1,8) /
+ & 22, 3, 3, 3, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 19),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.0510E+00,6.8270E+00,1.0500E+00,1.1360E+00,
+ &4.5000E-01,1.0000E+00,6.0060E+00,1.1740E+01,2.0500E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.0200E-03,1.0000E-04,1.0000E+00,0.0000E+00,2.0000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (PDFLIB2 ) 2212 (GRV94 LO)
+ DATA (IDPtab(k, 20),k=1,8) /
+ & 22, 3, 3, 2, 2212, 5, 6, 0 /
+ DATA (XDPtab(k, 20),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.0510E+00,6.8270E+00,1.0500E+00,1.1360E+00,
+ &4.5000E-01,1.0000E+00,6.0060E+00,1.1740E+01,2.0500E-01,4.6200E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.0200E-03,1.0000E-04,1.0000E+00,0.0000E+00,2.0000E+00,1.0000E+00,
+ &7.0000E-01,6.0000E-01,1.0000E+00,1.1000E+00,3.000E+00 /
+
+C parameter set for 22 (LAC ) 22 (LAC )
+ DATA (IDPtab(k, 21),k=1,8) /
+ & 22, 3, 3, 3, 22, 3, 3, 3 /
+ DATA (XDPtab(k, 21),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.0510E+00,3.0510E+00,1.0500E+00,1.0500E+00,
+ &4.5000E-01,1.0000E+00,6.0060E+00,6.0060E+00,2.0500E-01,2.0500E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.0200E-03,1.0000E-04,4.0200E-03,1.0000E-04,2.0000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+C parameter set for 22 (PDFLIB2 ) 22 (PDFLIB2 )
+ DATA (IDPtab(k, 22),k=1,8) /
+ & 22, 3, 3, 2, 22, 3, 3, 2 /
+ DATA (XDPtab(k, 22),k=1,27) /
+ &1.0970E+00,2.5000E-01,3.0510E+00,3.0510E+00,1.0500E+00,1.0500E+00,
+ &4.5000E-01,1.0000E+00,6.0060E+00,6.0060E+00,2.0500E-01,2.0500E-01,
+ &1.7000E-01,5.0000E-01,6.1200E-01,3.0000E-01,
+ &4.0200E-03,1.0000E-04,4.0200E-03,1.0000E-04,2.0000E+00,1.0000E+00,
+ &7.0000E-01,7.0000E-01,1.0000E+00,1.0000E+00,3.000E+00 /
+
+ DATA CNAME8 /' '/
+ DATA CNAM10 /' '/
+ DATA INIT / 0 /
+ DATA IFPAS / 0, 0 /
+
+ IF((INIT.EQ.1).AND.
+ & (IFPAP(1).EQ.IFPAS(1)).AND.(IFPAP(2).EQ.IFPAS(2))) GOTO 1300
+
+ INIT=1
+ IFPAS(1) = IFPAP(1)
+ IFPAS(2) = IFPAP(2)
+
+C parton distribution functions
+ CALL PHO_ACTPDF(IFPAP(1),1)
+ CALL PHO_GETPDF(1,PDFNA1,ALAM2,Q2MIN,Q2MAX,XMIN,XMAX)
+ CALL PHO_ACTPDF(IFPAP(2),2)
+ CALL PHO_GETPDF(2,PDFNA2,ALAM2,Q2MIN,Q2MAX,XMIN,XMAX)
+C initialize alpha_s calculation
+ DUMMY = PHO_ALPHAS(0.D0,-4)
+
+ IF(IDEB(54).GE.0) THEN
+ WRITE(LO,'(/1X,A,I7,2X,A,3I7)') 'PHO_FITPAR: looking for PDF',
+ & IFPAP(1),PDFNA1,IGRP(1),ISET(1),IEXT(1)
+ WRITE(LO,'(1X,A,I7,2X,A,3I7)') 'PHO_FITPAR: looking for PDF',
+ & IFPAP(2),PDFNA2,IGRP(2),ISET(2),IEXT(2)
+ ENDIF
+
+ IFOUND = 0
+
+C load parameter set from internal tables
+ I1 = 1
+ I2 = 2
+ 110 CONTINUE
+
+ DO I=1,Max_tab
+ IF((IFPAP(I1).EQ.IDPtab(1,I))
+ & .AND.(IGRP(I1).EQ.IDPtab(2,I))
+ & .AND.(ISET(I1).EQ.IDPtab(3,I))
+ & .AND.(IEXT(I1).EQ.IDPtab(4,I))) THEN
+ IF((IFPAP(I2).EQ.IDPtab(5,I))
+ & .AND.(IGRP(I2).EQ.IDPtab(6,I))
+ & .AND.(ISET(I2).EQ.IDPtab(7,I))
+ & .AND.(IEXT(I2).EQ.IDPtab(8,I))) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A)')
+C & 'PHO_FITPAR: parameter set found in internal table'
+ ALPOM = XDPtab(1,I)
+ ALPOMP = XDPtab(2,I)
+ GP(I1) = XDPtab(3,I)
+ GP(I2) = XDPtab(4,I)
+ B0POM(I1) = XDPtab(5,I)
+ B0POM(I2) = XDPtab(6,I)
+ ALREG = XDPtab(7,I)
+ ALREGP = XDPtab(8,I)
+ GR(I1) = XDPtab(9,I)
+ GR(I2) = XDPtab(10,I)
+ B0REG(I1) = XDPtab(11,I)
+ B0REG(I2) = XDPtab(12,I)
+ GPPP = XDPtab(13,I)
+ B0PPP = XDPtab(14,I)
+ GPPR = XDPtab(15,I)
+ B0PPR = XDPtab(16,I)
+ VDMFAC(2*I1-1) = XDPtab(17,I)
+ VDMFAC(2*I1) = XDPtab(18,I)
+ VDMFAC(2*I2-1) = XDPtab(19,I)
+ VDMFAC(2*I2) = XDPtab(20,I)
+ B0HAR = XDPtab(21,I)
+ AKFAC = XDPtab(22,I)
+ PHISUP(I1) = XDPtab(23,I)
+ PHISUP(I2) = XDPtab(24,I)
+ RMASS(I1) = XDPtab(25,I)
+ RMASS(I2) = XDPtab(26,I)
+ VAR = XDPtab(27,I)
+ IFOUND = 1
+ GOTO 1200
+ ENDIF
+ ENDIF
+ ENDDO
+
+ IF(I1.EQ.1) THEN
+ I1 = 2
+ I2 = 1
+ GOTO 110
+ ELSE
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A)')
+C & 'PHO_FITPAR: parameter set not found in internal table'
+ ENDIF
+
+ 1200 CONTINUE
+
+C get parameters of soft cross sections from fitpar.dat
+ IF(IPAMDL(99).GT.IFOUND) THEN
+
+ WRITE(LO,'(/1X,A)')
+ & 'PHO_FITPAR: loading parameter set from file fitpar.dat'
+ OPEN(12,FILE='fitpar.dat',ERR=1010,STATUS='OLD')
+
+ 100 CONTINUE
+ READ(12,'(A8)',ERR=1020,END=1010) CNAME8
+ IF(CNAME8.EQ.'STOP') GOTO 1010
+ IF(CNAME8.EQ.'NEXTDATA') THEN
+ READ(12,'(I8,2X,A8,3I6)',ERR=1020,END=1010)
+ & IDPA1,CNAME8,INUM
+ IF((IDPA1.EQ.IFPAP(1)).AND.(CNAME8.EQ.PDFNA1)
+ & .AND.(INUM(1).EQ.IGRP(1)).AND.(INUM(2).EQ.ISET(1))) THEN
+ READ(12,'(I8,2X,A8,3I6)',ERR=1020,END=1010)
+ & IDPA2,CNAME8,INUM
+ IF((IDPA2.EQ.IFPAP(2)).AND.(CNAME8.EQ.PDFNA2).AND.
+ & (INUM(1).EQ.IGRP(2)).AND.(INUM(2).EQ.ISET(2))) THEN
+ WRITE(LO,'(/1X,A)') 'PHO_FITPAR: parameter set found'
+ READ(12,*) ALPOM,ALPOMP,GP,B0POM
+ READ(12,*) ALREG,ALREGP,GR,B0REG
+ READ(12,*) GPPP,B0PPP,GPPR,B0PPR
+ READ(12,*) VDMFAC(1),VDMFAC(2),VDMFAC(3),VDMFAC(4)
+ READ(12,*) B0HAR
+ READ(12,*) AKFAC
+ READ(12,*) PHISUP
+ READ(12,*) RMASS,VAR
+ IFOUND = 1
+ GOTO 1100
+ ENDIF
+ ENDIF
+ ENDIF
+ GOTO 100
+
+ 1020 CONTINUE
+ WRITE(LO,'(/A)') ' PHO_FITPAR: cannot read file fitpar.dat'
+ WRITE(LO,'(A,A10,A8)') ' last data card: ',CNAM10,CNAME8
+ 1010 CONTINUE
+ WRITE(LO,'(/A)')
+ & ' PHO_FITPAR: cannot find parameter set in file fitpar.dat'
+
+ 1100 CONTINUE
+ CLOSE(12)
+
+ ENDIF
+
+C nothing found
+ IF(IFOUND.EQ.0) THEN
+ WRITE(LO,'(/A)') ' PHO_FITPAR: could not find parameter set'
+ WRITE(LO,'(3(10X,A,/))')
+ & '(copy fitpar.dat into the working directory and/or',
+ & ' request the missing parameter set via e-mail from',
+ & ' eng@lepton.bartol.udel.edu)'
+ STOP
+ ENDIF
+
+ 1300 CONTINUE
+
+C overwrite parameters with user settings
+ IF(PARMDL(301).GT.DEFA) THEN
+ ALPOM = PARMDL(301)
+ PARMDL(301) = DEFB
+ ENDIF
+ IF(PARMDL(302).GT.DEFA) THEN
+ ALPOMP = PARMDL(302)
+ PARMDL(302) = DEFB
+ ENDIF
+ IF(PARMDL(303).GT.DEFA) THEN
+ GP(1) = PARMDL(303)
+ PARMDL(303) = DEFB
+ ENDIF
+ IF(PARMDL(304).GT.DEFA) THEN
+ GP(2) = PARMDL(304)
+ PARMDL(304) = DEFB
+ ENDIF
+ IF(PARMDL(305).GT.DEFA) THEN
+ B0POM(1) = PARMDL(305)
+ PARMDL(305) = DEFB
+ ENDIF
+ IF(PARMDL(306).GT.DEFA) THEN
+ B0POM(2) = PARMDL(306)
+ PARMDL(306) = DEFB
+ ENDIF
+ IF(PARMDL(307).GT.DEFA) THEN
+ ALREG = PARMDL(307)
+ PARMDL(307) = DEFB
+ ENDIF
+ IF(PARMDL(308).GT.DEFA) THEN
+ ALREGP = PARMDL(308)
+ PARMDL(308) = DEFB
+ ENDIF
+ IF(PARMDL(309).GT.DEFA) THEN
+ GR(1) = PARMDL(309)
+ PARMDL(309) = DEFB
+ ENDIF
+ IF(PARMDL(310).GT.DEFA) THEN
+ GR(2) = PARMDL(310)
+ PARMDL(310) = DEFB
+ ENDIF
+ IF(PARMDL(311).GT.DEFA) THEN
+ B0REG(1) = PARMDL(311)
+ PARMDL(311) = DEFB
+ ENDIF
+ IF(PARMDL(312).GT.DEFA) THEN
+ B0REG(2) = PARMDL(312)
+ PARMDL(312) = DEFB
+ ENDIF
+ IF(PARMDL(313).GT.DEFA) THEN
+ GPPP = PARMDL(313)
+ PARMDL(313) = DEFB
+ ENDIF
+ IF(PARMDL(314).GT.DEFA) THEN
+ B0PPP = PARMDL(314)
+ PARMDL(314)= DEFB
+ ENDIF
+ IF(PARMDL(315).GT.DEFA) THEN
+ VDMFAC(1) = PARMDL(315)
+ PARMDL(315)= DEFB
+ ENDIF
+ IF(PARMDL(316).GT.DEFA) THEN
+ VDMFAC(2) = PARMDL(316)
+ PARMDL(316)= DEFB
+ ENDIF
+ IF(PARMDL(317).GT.DEFA) THEN
+ VDMFAC(3) = PARMDL(317)
+ PARMDL(317)= DEFB
+ ENDIF
+ IF(PARMDL(318).GT.DEFA) THEN
+ VDMFAC(4) = PARMDL(318)
+ PARMDL(318)= DEFB
+ ENDIF
+ IF(PARMDL(319).GT.DEFA) THEN
+ B0HAR = PARMDL(319)
+ PARMDL(319)= DEFB
+ ENDIF
+ IF(PARMDL(320).GT.DEFA) THEN
+ AKFAC = PARMDL(320)
+ PARMDL(320)= DEFB
+ ENDIF
+ IF(PARMDL(321).GT.DEFA) THEN
+ PHISUP(1) = PARMDL(321)
+ PARMDL(321)= DEFB
+ ENDIF
+ IF(PARMDL(322).GT.DEFA) THEN
+ PHISUP(2) = PARMDL(322)
+ PARMDL(322)= DEFB
+ ENDIF
+ IF(PARMDL(323).GT.DEFA) THEN
+ RMASS(1) = PARMDL(323)
+ PARMDL(323)= DEFB
+ ENDIF
+ IF(PARMDL(324).GT.DEFA) THEN
+ RMASS(2) = PARMDL(324)
+ PARMDL(324)= DEFB
+ ENDIF
+ IF(PARMDL(325).GT.DEFA) THEN
+ VAR = PARMDL(325)
+ PARMDL(325)= DEFB
+ ENDIF
+ IF(PARMDL(327).GT.DEFA) THEN
+ GPPR = PARMDL(327)
+ PARMDL(327)= DEFB
+ ENDIF
+ IF(PARMDL(328).GT.DEFA) THEN
+ B0PPR = PARMDL(328)
+ PARMDL(328)= DEFB
+ ENDIF
+
+ VDMQ2F(1) = VDMFAC(1)
+ VDMQ2F(2) = VDMFAC(2)
+ VDMQ2F(3) = VDMFAC(3)
+ VDMQ2F(4) = VDMFAC(4)
+
+C output of parameter set
+C *** Commented by Chiara
+C IF((IDEB(54).GE.5).OR.(IOUTP.GT.0)) THEN
+C WRITE(LO,'(/,A,/,A)') ' PHO_FITPAR: parameter set',
+C & ' -------------------------'
+C WRITE(LO,'(2(A,F7.3),2(A,2F9.3))')
+C & ' ALPOM:',ALPOM,' ALPOMP:',ALPOMP,' GP:',GP,' B0POM:',
+C & B0POM
+C WRITE(LO,'(2(A,F7.3),2(A,2F9.3))')
+C & ' ALREG:',ALREG,' ALREGP:',ALREGP,' GR:',GR,' B0REG:',
+C & B0REG
+C WRITE(LO,'(4(A,F7.3))')
+C & ' GPPP :',GPPP,' B0PPP:',B0PPP,' GPPR :',GPPR,' B0PPR:',B0PPR
+C WRITE(LO,'(A,4F10.5)') ' VDMFAC:',VDMFAC
+C WRITE(LO,'(A,4F10.5)') ' VDMQ2F:',VDMQ2F
+C WRITE(LO,'(A,F8.3)') ' B0HAR:',B0HAR
+C WRITE(LO,'(A,F8.3)') ' AKFAC:',AKFAC
+C WRITE(LO,'(A,2F8.3)') ' PHISUP:',PHISUP
+C WRITE(LO,'(A,3F8.3)') ' RMASS:',RMASS,VAR
+C ENDIF
+
+ CALL PHO_HARINI(1,IFPAP(1),IFPAP(2),PVIRT(1),PVIRT(2),6,IOUTP-1)
+
+ END
+
+CDECK ID>, PHO_BORNCS
+ SUBROUTINE PHO_BORNCS(IP,IFHARD,XM1,XM2,XM3,XM4)
+C*********************************************************************
+C
+C calculation of Born graph cross sections and slopes
+C
+C input: IP particle combination
+C IFHARD -1 calculate hard Born graph cross section
+C 0 take hard Born graph cross section
+C from interpolation table if available
+C 1 assume that correct hard cross
+C sections are already stored in /POSBRN/
+C XM1,XM2,XM3,XM4 masses of external lines
+C /GLOCMS/ energy and PT cut-off
+C /POPREG/ soft and hard parameters
+C /POSBRN/ input cross sections
+C /POZBRN/ scaled input values
+C IFHARD 0 calculate hard input cross sections
+C 1 assume hard input cross sections exist
+C
+C output: ZPOM scaled pomeron cross section
+C ZIGR scaled reggeon cross section
+C ZIGHR scaled hard resolved cross section
+C ZIGHD scaled hard direct cross section
+C ZIGT1 scaled triple-Pomeron cross section
+C ZIGT2 scaled triple-Pomeron cross section
+C ZIGL scaled loop-Pomeron cross section
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(ITWO=2,
+ & ITHREE=3,
+ & IFOUR=4,
+ & IFIVE=5,
+ & FIVE=5.D0,
+ & THOUS=1.D3,
+ & EPS=0.01D0,
+ & DEPS=1.D-30)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C interpolation tables for hard cross section and MC selection weights
+ INTEGER Max_tab_E,Max_tab_Q2,Max_pro_tab
+ PARAMETER ( Max_tab_E = 20, Max_tab_Q2 = 10, Max_pro_tab = 16 )
+ INTEGER IH_Q2a_up,IH_Q2b_up,IH_Ecm_up
+ DOUBLE PRECISION Hfac_tab,HWgx_tab,HSig_tab,Hdpt_tab,
+ & HQ2a_tab,HQ2b_tab,HEcm_tab
+ COMMON /POHTAB/
+ & Hfac_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HWgx_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HSig_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & Hdpt_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HQ2a_tab(1:Max_tab_Q2,0:4),HQ2b_tab(1:Max_tab_Q2,0:4),
+ & HEcm_tab(1:Max_tab_E,0:4),
+ & IH_Q2a_up(0:4),IH_Q2b_up(0:4),IH_Ecm_up(0:4)
+C Born graph cross sections and slopes
+ INTEGER Max_pro_3
+ PARAMETER ( Max_pro_3 = 16 )
+ COMPLEX*16 SIGP,SIGR,SIGHD,SIGHR,SIGT1,SIGT2,SIGL,SIGDP,
+ & SIGD1,SIGD2,DSIGH
+ COMMON /POSBRN/ SIGP,SIGR,SIGHD,SIGHR,SIGT1(2),SIGT2(2),SIGL,
+ & SIGDP(4),SIGD1(2),SIGD2(2),DSIGH(0:Max_pro_3)
+C scaled cross sections and slopes
+ COMPLEX*16 ZIGP,ZIGR,ZIGHD,ZIGHR,ZIGT1,ZIGT2,ZIGL,ZIGDP,
+ & ZIGD1,ZIGD2,
+ & BPOM,BREG,BHAR,BHAD,BTR1,BTR2,BLOO,BDP,BD1,BD2
+ COMMON /POZBRN/ ZIGP,ZIGR,ZIGHD,ZIGHR,ZIGT1(2),ZIGT2(2),ZIGL,
+ & ZIGDP(4),ZIGD1(2),ZIGD2(2),
+ & BPOM,BREG,BHAR,BHAD,BTR1(2),BTR2(2),BLOO,BDP(4),
+ & BD1(2),BD2(2)
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C data needed for soft-pt calculation
+ DOUBLE PRECISION SIGS,DSIGHP,SIGH,FS,FH,BETAS,AAS,PTCON
+ COMMON /POINT3/ SIGS,DSIGHP,SIGH,FS,FH,BETAS(3),AAS,PTCON
+
+ COMPLEX*16 CZERO,BP4,BR4,BHR4,BHD4,BT14,BT24,BD4,SP,SR,SS,
+ & BPOM1,BPOM2,BREG1,BREG2,B0HARD
+ DIMENSION SCB1(4),SCB2(4),SCG1(4),SCG2(4)
+ DIMENSION BT14(2),BT24(2),BD4(4)
+ DIMENSION DSPT(0:Max_pro_2)
+
+ DATA XMPOM / 0.766D0 /
+ DATA CZERO /(0.D0,0.D0)/
+
+ CDABS(SS) = ABS(SS)
+ DCMPLX(X,Y) = CMPLX(X,Y)
+
+C debug output
+ IF(IDEB(48).GE.10) WRITE(LO,'(/1X,A,I3,4E12.3,I3)')
+ & 'PHO_BORNCS: IP,M1..M4,IFHARD',IP,XM1,XM2,XM3,XM4,IFHARD
+C scales
+ CALL PHO_SCALES(XM1,XM2,XM3,XM4,SCALE1,SCALE2,SCALB1,SCALB2)
+C
+C calculate hard input cross sections (output in mb)
+ IF(IFHARD.NE.1) THEN
+ IF((IFHARD.EQ.0).AND.(HEcm_tab(1,IP).GT.1.D0)) THEN
+C double-log interpolation
+ CALL PHO_HARINT(IP,ECMP,0.D0,0.D0,0,Max_pro_2,3,4,1)
+ DO 60 M=0,Max_pro_2
+ DSIGH(M) = HSig(M)
+ DSPT(M) = Hdpt(M)
+ 60 CONTINUE
+ ELSE
+C new calculation
+ CALL PHO_HARINT(IP,ECMP,0.D0,0.D0,0,-2,0,0,1)
+ CALL PHO_HARXTO(ECMP,PTCUT(IP),PTCUT(IP),DSIGH,DSPT)
+ ENDIF
+C
+C save values to calculate soft pt distribution
+ IF(IP.EQ.1) THEN
+ VDMQ2F(1) = VDMFAC(1)
+ VDMQ2F(2) = VDMFAC(2)
+ VDMQ2F(3) = VDMFAC(3)
+ VDMQ2F(4) = VDMFAC(4)
+ ELSE IF(IP.EQ.2) THEN
+ VDMQ2F(1) = VDMFAC(1)
+ VDMQ2F(2) = VDMFAC(2)
+ VDMQ2F(3) = 1.D0
+ VDMQ2F(4) = 0.D0
+ ELSE IF(IP.EQ.3) THEN
+ VDMQ2F(1) = VDMFAC(3)
+ VDMQ2F(2) = VDMFAC(4)
+ VDMQ2F(3) = 1.D0
+ VDMQ2F(4) = 0.D0
+ ELSE
+ VDMQ2F(1) = 1.D0
+ VDMQ2F(2) = 0.D0
+ VDMQ2F(3) = 1.D0
+ VDMQ2F(4) = 0.D0
+ ENDIF
+C VDM factors
+ AMPFAC(1) = SQRT(VDMQ2F(1)*VDMQ2F(3))
+ AMPFAC(2) = SQRT(VDMQ2F(2)*VDMQ2F(3))
+ AMPFAC(3) = SQRT(VDMQ2F(1)*VDMQ2F(4))
+ AMPFAC(4) = SQRT(VDMQ2F(2)*VDMQ2F(4))
+ ELAFAC(1) = VDMQ2F(1)*VDMQ2F(3)+VDMQ2F(2)*VDMQ2F(3)
+ & +VDMQ2F(1)*VDMQ2F(4)+VDMQ2F(2)*VDMQ2F(4)
+ ELAFAC(2) = 2.D0*(AMPFAC(1)*AMPFAC(2)+AMPFAC(3)*AMPFAC(4))
+ ELAFAC(3) = 2.D0*(AMPFAC(1)*AMPFAC(3)+AMPFAC(2)*AMPFAC(4))
+ ELAFAC(4) = 4.D0*AMPFAC(1)*AMPFAC(4)
+ VFAC = ELAFAC(1)+PHISUP(1)*PHISUP(2)*ELAFAC(4)
+ & +PHISUP(1)*ELAFAC(2)+PHISUP(2)*ELAFAC(3)
+ DSIGHP = DSPT(9)/VFAC
+ SIGH = DSIGH(9)/VFAC
+C extract real part
+ IF(IPAMDL(1).EQ.0) THEN
+ DO 50 I=0,Max_pro_2
+ DSIGH(I)=DCMPLX(DREAL(DSIGH(I)),0.D0)
+ 50 CONTINUE
+ ENDIF
+C write out results
+ IF(IDEB(48).GE.15) THEN
+ WRITE(LO,'(/1X,A,1P,2E11.3)')
+ & 'PHO_BORNCS: QCD-PM cross sections (mb)',ECMP,PTCUT(IP)
+ DO 200 I=0,Max_pro_2
+ WRITE(LO,'(10X,A,2E14.4)') PROC(I),DSIGH(I)
+ 200 CONTINUE
+ ENDIF
+ ENDIF
+
+C DPMJET interface: subtract anomalous part
+ IF((IP.EQ.1).AND.(IPAMDL(13).GT.0))
+ & DSIGH(9) = DSIGH(9)-DCMPLX(DT_SANO(ECMP),0.D0)
+
+ SCALE = CDABS(DSIGH(15))
+ IF(SCALE.LT.DEPS) THEN
+ SIGHD=CZERO
+ ELSE
+ SIGHD=DSIGH(15)
+ ENDIF
+ SCALE = CDABS(DSIGH(9))
+ IF(SCALE.LT.DEPS) THEN
+ SIGHR=CZERO
+ ELSE
+ SIGHR=DSIGH(9)*SCALE1*SCALE2/VFAC
+ ENDIF
+
+C calculate soft input cross sections (output in mb)
+ SS=DCMPLX(ECMP**2-PMASSP(1)**2-PMASSP(2)**2+0.01D0,0.D0)
+ IF(IPAMDL(1).EQ.1) THEN
+C pomeron signature
+ SP=SS*DCMPLX(0.D0,-1.D0)
+C reggeon signature
+ SR=SS*DCMPLX(0.D0,1.D0)
+ ELSE
+ SP=SS
+ SR=SS
+ ENDIF
+C coupling constants (mb**1/2)
+C particle dependent slopes (GeV**-2)
+ IF(IP.EQ.1) THEN
+ GP1 = GP(1)
+ GP2 = GP(2)
+ GR1 = GR(1)
+ GR2 = GR(2)
+ B0POM1 = B0POM(1)
+ B0POM2 = B0POM(2)
+ B0REG1 = B0REG(1)
+ B0REG2 = B0REG(2)
+ B0HARD = B0HAR
+ RMASS1 = RMASS(1)
+ RMASS2 = RMASS(2)
+ ELSE IF(IP.EQ.2) THEN
+ GP1 = GP(1)
+ GP2 = PARMDL(77)
+ GR1 = GR(1)
+ GR2 = PARMDL(77)*GPPR/GPPP
+ B0POM1 = B0POM(1)
+ B0POM2 = B0PPP
+ B0REG1 = B0REG(1)
+ B0REG2 = B0PPR
+ B0HARD = B0POM1+B0POM2
+ RMASS1 = RMASS(1)
+ RMASS2 = XMPOM
+ ELSE IF(IP.EQ.3) THEN
+ GP1 = GP(2)
+ GP2 = PARMDL(77)
+ GR1 = GR(2)
+ GR2 = PARMDL(77)*GPPR/GPPP
+ B0POM1 = B0POM(2)
+ B0POM2 = B0PPP
+ B0REG1 = B0REG(2)
+ B0REG2 = B0PPR
+ B0HARD = B0POM1+B0POM2
+ RMASS1 = RMASS(2)
+ RMASS2 = XMPOM
+ ELSE IF(IP.EQ.4) THEN
+ GP1 = PARMDL(77)
+ GP2 = GP1
+ GR1 = PARMDL(77)*GPPR/GPPP
+ GR2 = GR1
+ B0POM1 = B0PPP
+ B0POM2 = B0PPP
+ B0REG1 = B0PPR
+ B0REG2 = B0PPR
+ B0HARD = B0POM1+B0POM2
+ RMASS1 = XMPOM
+ RMASS2 = XMPOM
+ ELSE
+ WRITE(LO,'(/1X,A,I7)') 'PHO_BORNCS:ERROR:invalid IP',IP
+ CALL PHO_ABORT
+ ENDIF
+ GP1 = GP1*SCALE1
+ GP2 = GP2*SCALE2
+ GR1 = GR1*SCALE1
+ GR2 = GR2*SCALE2
+C input slope parameters (GeV**-2)
+ BPOM1 = B0POM1*SCALB1
+ BPOM2 = B0POM2*SCALB2
+ BREG1 = B0REG1*SCALB1
+ BREG2 = B0REG2*SCALB2
+C effective slopes
+ XMR2 = (2.D0*MIN(XM1,XM3)*MIN(XM2,XM4))**2
+ SCALE = SS*XMR2/((XM1**2+XM3**2)*(XM2**2+XM4**2))+2.D0
+ BPOM = BPOM1 + BPOM2 + ALPOMP*LOG(SCALE)
+ BREG = BREG1 + BREG2 + ALREGP*LOG(SCALE)
+ IF(IPAMDL(9).EQ.0) THEN
+ BHAR = B0HARD
+ BHAD = B0HARD
+ ELSE IF(IPAMDL(9).EQ.1) THEN
+ BHAR = B0HARD*(SCALB1+SCALB2)/2.D0
+ BHAD = BHAR
+ ELSE IF(IPAMDL(9).EQ.2) THEN
+ BHAR = BPOM1+BPOM2
+ BHAD = BHAR
+ ELSE
+ BHAR = BPOM
+ BHAD = BPOM
+ ENDIF
+C input cross section pomeron
+ SIGP=GP1*GP2*EXP((ALPOM-1.D0)*LOG(SP))
+ SIGR=GR1*GR2*EXP((ALREG-1.D0)*LOG(SR))
+C save value to calculate soft pt distribution
+ SIGS = (SIGR+SIGP)/(SCALE1*SCALE2)
+
+C higher order graphs
+ VIRT1 = PVIRTP(1)
+ VIRT2 = PVIRTP(2)
+C bare/renormalized intercept for enhanced graphs
+ IF(IPAMDL(8).EQ.0) THEN
+ DELTAP = ALPOM-1.D0
+ ELSE
+ DELTAP = PARMDL(48)-1.D0
+ ENDIF
+ SD = ECMP**2
+ BP1 = 2.D0*BPOM1
+ BP2 = 2.D0*BPOM2
+C input cross section high-mass double diffraction
+ CALL PHO_LOOREG(SD,GP1,BP1,GP2,BP2,
+ & DELTAP,ALPOMP,GPPP,B0PPP,VIRT1,VIRT2,SIGTR,BTR)
+ SIGL = DCMPLX(SIGTR,0.D0)
+ BLOO = DCMPLX(BTR,0.D0)
+C
+C input cross section high mass diffraction particle 1
+C first possibility
+ CALL PHO_SCALES(XM1,XM2,XM3,PMASSP(2),
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(XM1,PMASSP(2),XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ SCALB1 = (SCB1(1)+SCB1(2))/2.D0
+ SCALB2 = (SCB2(1)+SCB2(2))/2.D0
+ BP1 = 2.D0*BPOM1*SCALB1
+ BP2 = 2.D0*BPOM2*SCALB2
+C input cross section high mass diffraction
+ CALL PHO_TRIREG(SD,GP1,BP1,GP2,BP2,
+ & DELTAP,ALPOMP,GPPP,B0PPP,VIRT1,SIGTR,BTR)
+ SIGT1(1) = SCG1(1)*SCG2(1)*SCG2(2)*DCMPLX(SIGTR,0.D0)
+ BTR1(1) = DCMPLX(BTR,0.D0)
+C second possibility: high-low mass double diffraction
+ CALL PHO_SCALES(XM1,XM2,XM3,RMASS2,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(XM1,RMASS2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ SCALB1 = (SCB1(1)+SCB1(2))/2.D0
+ SCALB2 = (SCB2(1)+SCB2(2))/2.D0
+ BP1 = 2.D0*BPOM1*SCALB1
+ BP2 = 2.D0*BPOM2*SCALB2
+C input cross section high mass diffraction
+ CALL PHO_TRIREG(SD,GP1,BP1,GP2,BP2,
+ & DELTAP,ALPOMP,GPPP,B0PPP,VIRT1,SIGTR,BTR)
+ SIGT1(2) = SCG1(1)*SCG2(1)*SCG2(2)*DCMPLX(SIGTR,0.D0)
+ BTR1(2) = DCMPLX(BTR,0.D0)
+C
+C input cross section high mass diffraction particle 2
+C first possibility
+ CALL PHO_SCALES(XM1,XM2,PMASSP(1),XM4,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(PMASSP(1),XM2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ SCALB1 = (SCB1(1)+SCB1(2))/2.D0
+ SCALB2 = (SCB2(1)+SCB2(2))/2.D0
+ BP1 = 2.D0*BPOM1*SCALB1
+ BP2 = 2.D0*BPOM2*SCALB2
+C input cross section high mass diffraction
+ CALL PHO_TRIREG(SD,GP2,BP2,GP1,BP1,
+ & DELTAP,ALPOMP,GPPP,B0PPP,VIRT2,SIGTR,BTR)
+ SIGT2(1) = SCG1(1)*SCG1(2)*SCG2(1)*DCMPLX(SIGTR,0.D0)
+ BTR2(1) = DCMPLX(BTR,0.D0)
+C second possibility: high-low mass double diffraction
+ CALL PHO_SCALES(XM1,XM2,RMASS1,XM4,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(RMASS1,XM2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ SCALB1 = (SCB1(1)+SCB1(2))/2.D0
+ SCALB2 = (SCB2(1)+SCB2(2))/2.D0
+ BP1 = 2.D0*BPOM1*SCALB1
+ BP2 = 2.D0*BPOM2*SCALB2
+C input cross section high mass diffraction
+ CALL PHO_TRIREG(SD,GP2,BP2,GP1,BP1,
+ & DELTAP,ALPOMP,GPPP,B0PPP,VIRT2,SIGTR,BTR)
+ SIGT2(2) = SCG1(1)*SCG1(2)*SCG2(1)*DCMPLX(SIGTR,0.D0)
+ BTR2(2) = DCMPLX(BTR,0.D0)
+C
+C input cross section for loop-pomeron
+C first possibility
+ CALL PHO_SCALES(XM1,XM2,PMASSP(1),XM4,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(PMASSP(1),XM2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ CALL PHO_SCALES(XM1,XM2,XM3,PMASSP(2),
+ & SCG1(3),SCG2(3),SCB1(3),SCB2(3))
+ CALL PHO_SCALES(XM1,PMASSP(2),XM3,XM4,
+ & SCG1(4),SCG2(4),SCB1(4),SCB2(4))
+ SCALB1 = (SCB1(1)+SCB1(2)+SCB1(3)+SCB1(4))/4.D0
+ SCALB2 = (SCB2(1)+SCB2(2)+SCB2(3)+SCB2(4))/4.D0
+ BP1 = BPOM1*SCALB1
+ BP2 = BPOM2*SCALB2
+ CALL PHO_TRXPOM(SD,GP2,BP2,GP1,BP1,DELTAP,ALPOMP,GPPP,B0PPP,
+ & SIGTX,BTX)
+ SIGDP(1) = SCG1(1)*SCG1(2)*SCG2(3)*SCG2(4)*DCMPLX(SIGTX,0.D0)
+ BDP(1) = DCMPLX(BTX,0.D0)
+C second possibility
+ CALL PHO_SCALES(XM1,XM2,RMASS1,XM4,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(RMASS1,XM2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ CALL PHO_SCALES(XM1,XM2,XM3,PMASSP(2),
+ & SCG1(3),SCG2(3),SCB1(3),SCB2(3))
+ CALL PHO_SCALES(XM1,PMASSP(2),XM3,XM4,
+ & SCG1(4),SCG2(4),SCB1(4),SCB2(4))
+ SCALB1 = (SCB1(1)+SCB1(2)+SCB1(3)+SCB1(4))/4.D0
+ SCALB2 = (SCB2(1)+SCB2(2)+SCB2(3)+SCB2(4))/4.D0
+ BP1 = BPOM1*SCALB1
+ BP2 = BPOM2*SCALB2
+ CALL PHO_TRXPOM(SD,GP2,BP2,GP1,BP1,DELTAP,ALPOMP,GPPP,B0PPP,
+ & SIGTX,BTX)
+ SIGDP(2) = SCG1(1)*SCG1(2)*SCG2(3)*SCG2(4)*DCMPLX(SIGTX,0.D0)
+ BDP(2) = DCMPLX(BTX,0.D0)
+C third possibility
+ CALL PHO_SCALES(XM1,XM2,PMASSP(1),XM4,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(PMASSP(1),XM2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ CALL PHO_SCALES(XM1,XM2,XM3,RMASS2,
+ & SCG1(3),SCG2(3),SCB1(3),SCB2(3))
+ CALL PHO_SCALES(XM1,RMASS2,XM3,XM4,
+ & SCG1(4),SCG2(4),SCB1(4),SCB2(4))
+ SCALB1 = (SCB1(1)+SCB1(2)+SCB1(3)+SCB1(4))/4.D0
+ SCALB2 = (SCB2(1)+SCB2(2)+SCB2(3)+SCB2(4))/4.D0
+ BP1 = BPOM1*SCALB1
+ BP2 = BPOM2*SCALB2
+ CALL PHO_TRXPOM(SD,GP2,BP2,GP1,BP1,DELTAP,ALPOMP,GPPP,B0PPP,
+ & SIGTX,BTX)
+ SIGDP(3) = SCG1(1)*SCG1(2)*SCG2(3)*SCG2(4)*DCMPLX(SIGTX,0.D0)
+ BDP(3) = DCMPLX(BTX,0.D0)
+C fourth possibility
+ CALL PHO_SCALES(XM1,XM2,RMASS1,XM4,
+ & SCG1(1),SCG2(1),SCB1(1),SCB2(1))
+ CALL PHO_SCALES(RMASS1,XM2,XM3,XM4,
+ & SCG1(2),SCG2(2),SCB1(2),SCB2(2))
+ CALL PHO_SCALES(XM1,XM2,XM3,RMASS2,
+ & SCG1(3),SCG2(3),SCB1(3),SCB2(3))
+ CALL PHO_SCALES(XM1,RMASS2,XM3,XM4,
+ & SCG1(4),SCG2(4),SCB1(4),SCB2(4))
+ SCALB1 = (SCB1(1)+SCB1(2)+SCB1(3)+SCB1(4))/4.D0
+ SCALB2 = (SCB2(1)+SCB2(2)+SCB2(3)+SCB2(4))/4.D0
+ BP1 = BPOM1*SCALB1
+ BP2 = BPOM2*SCALB2
+ CALL PHO_TRXPOM(SD,GP2,BP2,GP1,BP1,DELTAP,ALPOMP,GPPP,B0PPP,
+ & SIGTX,BTX)
+ SIGDP(4) = SCG1(1)*SCG1(2)*SCG2(3)*SCG2(4)*DCMPLX(SIGTX,0.D0)
+ BDP(4) = DCMPLX(BTX,0.D0)
+C
+C input cross section for YY-iterated triple-pomeron
+C .....
+C
+C write out input cross sections
+ IF(IDEB(48).GE.5) THEN
+ WRITE(LO,'(2(/1X,A))')
+ & 'Born graph input cross sections and slopes',
+ & '------------------------------------------'
+ WRITE(LO,'(1X,A,3E12.3)') 'energy ',ECMP,PVIRTP
+ WRITE(LO,'(1X,A,4E12.3)') 'external masses 1,2,3,4 ',
+ & XM1,XM2,XM3,XM4
+ WRITE(LO,'(A)') ' input cross sections (millibarn):'
+ WRITE(LO,'(A,2E12.3)') ' SIGR ',SIGR
+ WRITE(LO,'(A,2E12.3)') ' (soft) SIGP ',SIGP
+ WRITE(LO,'(A,2E12.3)') ' (hard) SIGHR ',SIGHR
+ WRITE(LO,'(A,2E12.3)') ' SIGHD ',SIGHD
+ WRITE(LO,'(A,4E12.3)') ' SIGT1 ',SIGT1
+ WRITE(LO,'(A,4E12.3)') ' SIGT2 ',SIGT2
+ WRITE(LO,'(A,2E12.3)') ' SIGL ',SIGL
+ WRITE(LO,'(A,4E12.3)') ' SIGDP(1-2) ',SIGDP(1),SIGDP(2)
+ WRITE(LO,'(A,4E12.3)') ' SIGDP(3-4) ',SIGDP(3),SIGDP(4)
+ WRITE(LO,'(A)') ' input slopes (GeV**-2)'
+ WRITE(LO,'(A,2E12.3)') ' BREG ',BREG
+ WRITE(LO,'(A,2E12.3)') ' BREG1 ',BREG1
+ WRITE(LO,'(A,2E12.3)') ' BREG2 ',BREG2
+ WRITE(LO,'(A,2E12.3)') ' BPOM ',BPOM
+ WRITE(LO,'(A,2E12.3)') ' BPOM1 ',BPOM1
+ WRITE(LO,'(A,2E12.3)') ' BPOM2 ',BPOM2
+ WRITE(LO,'(A,2E12.3)') ' BHAR ',BHAR
+ WRITE(LO,'(A,2E12.3)') ' BHAD ',BHAD
+ WRITE(LO,'(A,E12.3)') ' B0PPP ',B0PPP
+ WRITE(LO,'(A,4E12.3)') ' BTR1 ',BTR1
+ WRITE(LO,'(A,4E12.3)') ' BTR2 ',BTR2
+ WRITE(LO,'(A,2E12.3)') ' BLOO ',BLOO
+ WRITE(LO,'(A,4E12.3)') ' BDP(1-2) ',BDP(1),BDP(2)
+ WRITE(LO,'(A,4E12.3)') ' BDP(3-4) ',BDP(3),BDP(4)
+ ENDIF
+C
+ BPOM = BPOM*GEV2MB
+ BREG = BREG*GEV2MB
+ BHAR = BHAR*GEV2MB
+ BHAD = BHAD*GEV2MB
+ BTR1(1) = BTR1(1)*GEV2MB
+ BTR1(2) = BTR1(2)*GEV2MB
+ BTR2(1) = BTR2(1)*GEV2MB
+ BTR2(2) = BTR2(2)*GEV2MB
+ BLOO = BLOO*GEV2MB
+C
+ BP4 =BPOM*4.D0
+ BR4 =BREG*4.D0
+ BHR4=BHAR*4.D0
+ BHD4=BHAD*4.D0
+ BT14(1)=BTR1(1)*4.D0
+ BT14(2)=BTR1(2)*4.D0
+ BT24(1)=BTR2(1)*4.D0
+ BT24(2)=BTR2(2)*4.D0
+ BL4 =BLOO*4.D0
+C
+ ZIGP = SIGP/(PI2*BP4)
+ ZIGR = SIGR/(PI2*BR4)
+ ZIGHR = SIGHR/(PI2*BHR4)
+ ZIGHD = SIGHD/(PI2*BHD4)
+ ZIGT1(1) = SIGT1(1)/(PI2*BT14(1))
+ ZIGT1(2) = SIGT1(2)/(PI2*BT14(2))
+ ZIGT2(1) = SIGT2(1)/(PI2*BT24(1))
+ ZIGT2(2) = SIGT2(2)/(PI2*BT24(2))
+ ZIGL = SIGL/(PI2*BL4)
+ DO 20 I=1,4
+ BDP(I) = BDP(I)*GEV2MB
+ BD4(I) = BDP(I)*4.D0
+ ZIGDP(I) = SIGDP(I)/(PI2*BD4(I))
+ 20 CONTINUE
+C
+ IF(IDEB(48).GE.10) THEN
+ WRITE(LO,'(A)') ' normalized input values:'
+ WRITE(LO,'(A,2E12.3)') ' ZIGR ',ZIGR
+ WRITE(LO,'(A,2E12.3)') ' BREG ',BREG
+ WRITE(LO,'(A,2E12.3)') ' ZIGP ',ZIGP
+ WRITE(LO,'(A,2E12.3)') ' BPOM ',BPOM
+ WRITE(LO,'(A,2E12.3)') ' ZIGHR ',ZIGHR
+ WRITE(LO,'(A,2E12.3)') ' BHAR ',BHAR
+ WRITE(LO,'(A,2E12.3)') ' ZIGHD ',ZIGHD
+ WRITE(LO,'(A,2E12.3)') ' BHAD ',BHAD
+ WRITE(LO,'(A,4E12.3)') ' ZIGT1 ',ZIGT1
+ WRITE(LO,'(A,4E12.3)') ' ZIGT2 ',ZIGT2
+ WRITE(LO,'(A,2E12.3)') ' ZIGL ',ZIGL
+ WRITE(LO,'(A,4E12.3)') ' ZIGDP(1-2) ',ZIGDP(1),ZIGDP(2)
+ WRITE(LO,'(A,4E12.3)') ' ZIGDP(3-4) ',ZIGDP(3),ZIGDP(4)
+ ENDIF
+ END
+
+CDECK ID>, PHO_SCALES
+ SUBROUTINE PHO_SCALES(XM1,XM2,XM3,XM4,SCG1,SCG2,SCB1,SCB2)
+C**********************************************************************
+C
+C calculation of scale factors
+C (mass dependent couplings and slopes)
+C
+C input: XM1..XM4 external masses
+C
+C output: SCG1,SCG2 scales of coupling constants
+C SCB1,SCB2 scales of coupling slope parameter
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-3 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C scale factors for couplings
+ ECMMIN = 2.D0
+* ECMTP = 6.D0
+ ECMTP = 1.D0
+ IF(ABS(XM1-XM3).GT.EPS) THEN
+ IF(ECMP.LT.ECMTP) THEN
+ SCG1 = PHISUP(1)*LOG(ECMP**2/ECMMIN)/LOG(ECMTP**2/ECMMIN)
+ ELSE
+ SCG1 = PHISUP(1)
+ ENDIF
+ ELSE
+ SCG1 = 1.D0
+ ENDIF
+ IF(ABS(XM2-XM4).GT.EPS) THEN
+ IF(ECMP.LT.ECMTP) THEN
+ SCG2 = PHISUP(2)*LOG(ECMP**2/ECMMIN)/LOG(ECMTP**2/ECMMIN)
+ ELSE
+ SCG2 = PHISUP(2)
+ ENDIF
+ ELSE
+ SCG2 = 1.D0
+ ENDIF
+C
+C scale factors for slope parameters
+ IF((ISWMDL(1).LT.2).OR.(IPAMDL(10).EQ.1)) THEN
+ SCB1 = 1.D0
+ SCB2 = 1.D0
+ ELSE IF(ISWMDL(1).EQ.2) THEN
+C rational
+ SCB1 = 2.D0*PMASSP(1)**2/(XM1**2+XM3**2)
+ SCB2 = 2.D0*PMASSP(2)**2/(XM2**2+XM4**2)
+ ELSE IF(ISWMDL(1).GE.3) THEN
+C symmetric gaussian
+ SCB1 = VAR*(XM1-XM3)**2
+ IF(SCB1.LT.25.D0) THEN
+ SCB1 = EXP(-SCB1)
+ ELSE
+ SCB1 = 0.D0
+ ENDIF
+ SCB2 = VAR*(XM2-XM4)**2
+ IF(SCB2.LT.25.D0) THEN
+ SCB2 = EXP(-SCB2)
+ ELSE
+ SCB2 = 0.D0
+ ENDIF
+ ELSE
+ WRITE(LO,'(/,1X,A,I4)') 'PHO_SCALES:ERROR:invalid ISWMDL(1)',
+ & ISWMDL(1)
+ CALL PHO_ABORT
+ ENDIF
+C debug output
+ IF(IDEB(65).GE.10) THEN
+ WRITE(LO,'(1X,A,4E11.3)') 'PHO_SCALES: M1..M4 ',
+ & XM1,XM2,XM3,XM4
+ WRITE(LO,'(5X,A,4E11.3)') 'SCB1,SCB2,SCG1,SCG2',
+ & SCB1,SCB2,SCG1,SCG2
+ ENDIF
+ END
+
+CDECK ID>, PHO_EIKON
+ SUBROUTINE PHO_EIKON(IP,IFHARD,B)
+C*********************************************************************
+C
+C calculation of unitarized amplitudes
+C
+C input: IP particle combination
+C IFHARD -1 ignore previously calculated Born
+C cross sections
+C 0 calculate hard Born cross sections or
+C take them from interpolation table
+C (if available)
+C 1 take hard cross sections from /POSBRN/
+C B impact parameter (mb**(1/2))
+C /POSBRN/ input cross sections
+C /GLOCMS/ cm energy
+C /POPREG/ soft and hard parameters
+C
+C output: /POINT4/
+C AMPEL purely elastic amplitude
+C AMPVM quasi-elastically vectormeson prod.
+C AMLMSD(2) amplitudes of low mass sing. diffr.
+C AMHMSD(2) amplitudes of high mass sing. diffr.
+C AMLMDD amplitude of low mass double diffr.
+C AMHMDD amplitude of high mass double diffr.
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(ITWO=2,
+ & ITHREE=3,
+ & IFOUR=4,
+ & IFIVE=5,
+ & ISIX=6,
+ & FIVE=5.D0,
+ & THOUS=1.D3,
+ & EXPMAX=70.D0,
+ & DEPS=1.D-20)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C complex Born graph amplitudes used for unitarization
+ COMPLEX*16 AMPEL,AMPVM,AMPSOF,AMPHAR,AMLMSD,AMHMSD,AMLMDD,
+ & AMHMDD,AMPDP
+ COMMON /POINT4/ AMPEL,AMPVM(4,4),AMPSOF,AMPHAR,AMLMSD(2),
+ & AMHMSD(2),AMLMDD,AMHMDD,AMPDP(4)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C Born graph cross sections and slopes
+ INTEGER Max_pro_3
+ PARAMETER ( Max_pro_3 = 16 )
+ COMPLEX*16 SIGP,SIGR,SIGHD,SIGHR,SIGT1,SIGT2,SIGL,SIGDP,
+ & SIGD1,SIGD2,DSIGH
+ COMMON /POSBRN/ SIGP,SIGR,SIGHD,SIGHR,SIGT1(2),SIGT2(2),SIGL,
+ & SIGDP(4),SIGD1(2),SIGD2(2),DSIGH(0:Max_pro_3)
+C scaled cross sections and slopes
+ COMPLEX*16 ZIGP,ZIGR,ZIGHD,ZIGHR,ZIGT1,ZIGT2,ZIGL,ZIGDP,
+ & ZIGD1,ZIGD2,
+ & BPOM,BREG,BHAR,BHAD,BTR1,BTR2,BLOO,BDP,BD1,BD2
+ COMMON /POZBRN/ ZIGP,ZIGR,ZIGHD,ZIGHR,ZIGT1(2),ZIGT2(2),ZIGL,
+ & ZIGDP(4),ZIGD1(2),ZIGD2(2),
+ & BPOM,BREG,BHAR,BHAD,BTR1(2),BTR2(2),BLOO,BDP(4),
+ & BD1(2),BD2(2)
+C Born graph cross sections after applying diffraction model
+ DOUBLE PRECISION SBOPOM,SBOREG,SBOHAR,SBOHAD,SBOTR1,SBOTR2,
+ & SBOLPO,SBODPO
+ COMMON /POINT1/ SBOPOM(0:4),SBOREG(0:4),SBOHAR(0:4),SBOHAD(0:4),
+ & SBOTR1(0:4,2),SBOTR2(0:4,2),SBOLPO(0:4),
+ & SBODPO(0:4,4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C unitarized amplitudes for different diffraction channels
+ DOUBLE PRECISION ZXP,BXP,ZXR,BXR,ZXH,BXH,ZXD,BXD,
+ & ZXT1A,BXT1A,ZXT1B,BXT1B,ZXT2A,BXT2A,ZXT2B,BXT2B,
+ & ZXDPE,BXDPE,ZXDPA,BXDPA,ZXDPB,BXDPB,ZXDPD,BXDPD,
+ & ZXL,BXL
+ COMMON /POINT5/ ZXP(4,4),BXP(4,4),ZXR(4,4),BXR(4,4),
+ & ZXH(4,4),BXH(4,4),ZXD(4,4),BXD(4,4),
+ & ZXT1A(4,4),BXT1A(4,4),ZXT1B(4,4),BXT1B(4,4),
+ & ZXT2A(4,4),BXT2A(4,4),ZXT2B(4,4),BXT2B(4,4),
+ & ZXDPE(4,4),BXDPE(4,4),ZXDPA(4,4),BXDPA(4,4),
+ & ZXDPB(4,4),BXDPB(4,4),ZXDPD(4,4),BXDPD(4,4),
+ & ZXL(4,4),BXL(4,4)
+
+ COMPLEX*16 CZERO,CONE,B24,AUXP,AUXR,AUXH,AUXD,AUXT1,AUXT2,
+ & AUXL,AMPR,AMPO,AMPP,AMPQ
+
+ DIMENSION PVOLD(2)
+
+ DATA ELAST / 0.D0 /
+ DATA IPOLD / -1 /
+ DATA PVOLD / -1.D0, -1.D0 /
+ DATA XMPOM / 0.766D0 /
+ DATA XMVDM / 0.766D0 /
+
+ DCMPLX(X,Y) = CMPLX(X,Y)
+
+C calculation of scaled cross sections and slopes
+
+C test for redundant calculation
+ IF((ECM.NE.ELAST).OR.(IFHARD.EQ.-1).OR.(PVIRT(1).NE.PVOLD(1))
+ & .OR.(PVIRT(2).NE.PVOLD(2)).OR.(IP.NE.IPOLD)) THEN
+C effective particle masses, VDM assumption
+ XMASS1 = PMASS(1)
+ XMASS2 = PMASS(2)
+ RMASS1 = RMASS(1)
+ RMASS2 = RMASS(2)
+ IF(IFPAP(1).EQ.22) THEN
+ XMASS1 = XMVDM
+ ELSE IF(IFPAP(1).EQ.990) THEN
+ XMASS1 = XMPOM
+ ENDIF
+ IF(IFPAP(2).EQ.22) THEN
+ XMASS2 = XMVDM
+ ELSE IF(IFPAP(2).EQ.990) THEN
+ XMASS2 = XMPOM
+ ENDIF
+C different particle combinations
+ IF(IP.EQ.3) THEN
+ XMASS1 = XMASS2
+ RMASS1 = RMASS2
+ ELSE IF(IP.EQ.4) THEN
+ XMASS1 = XMPOM
+ RMASS1 = XMASS1
+ ENDIF
+ IF(IP.GT.1) THEN
+ XMASS2 = XMPOM
+ RMASS2 = XMASS2
+ ENDIF
+C update pomeron CM system
+ PMASSP(1) = XMASS1
+ PMASSP(2) = XMASS2
+ ECMP = ECM
+
+ CZERO = DCMPLX(0.D0,0.D0)
+ CONE = DCMPLX(1.D0,0.D0)
+ ELAST = ECM
+ PVOLD(1) = PVIRT(1)
+ PVOLD(2) = PVIRT(2)
+ IPOLD = IP
+
+C purely elastic scattering
+ CALL PHO_BORNCS(IP,IFHARD,XMASS1,XMASS2,XMASS1,XMASS2)
+ ZXP(1,1) = ZIGP
+ BXP(1,1) = BPOM
+ ZXR(1,1) = ZIGR
+ BXR(1,1) = BREG
+ ZXH(1,1) = ZIGHR
+ BXH(1,1) = BHAR
+ ZXD(1,1) = ZIGHD
+ BXD(1,1) = BHAD
+ ZXT1A(1,1) = ZIGT1(1)
+ BXT1A(1,1) = BTR1(1)
+ ZXT1B(1,1) = ZIGT1(2)
+ BXT1B(1,1) = BTR1(2)
+ ZXT2A(1,1) = ZIGT2(1)
+ BXT2A(1,1) = BTR2(1)
+ ZXT2B(1,1) = ZIGT2(2)
+ BXT2B(1,1) = BTR2(2)
+ ZXL(1,1) = ZIGL
+ BXL(1,1) = BLOO
+ ZXDPE(1,1) = ZIGDP(1)
+ BXDPE(1,1) = BDP(1)
+ ZXDPA(1,1) = ZIGDP(2)
+ BXDPA(1,1) = BDP(2)
+ ZXDPB(1,1) = ZIGDP(3)
+ BXDPB(1,1) = BDP(3)
+ ZXDPD(1,1) = ZIGDP(4)
+ BXDPD(1,1) = BDP(4)
+ SBOPOM(1) = SIGP
+ SBOREG(1) = SIGR
+ SBOHAR(1) = SIGHR
+ SBOHAD(1) = SIGHD
+ SBOTR1(1,1) = SIGT1(1)
+ SBOTR1(1,2) = SIGT1(2)
+ SBOTR2(1,1) = SIGT2(1)
+ SBOTR2(1,2) = SIGT2(2)
+ SBOLPO(1) = SIGL
+ SBODPO(1,1) = SIGDP(1)
+ SBODPO(1,2) = SIGDP(2)
+ SBODPO(1,3) = SIGDP(3)
+ SBODPO(1,4) = SIGDP(4)
+
+C low mass single diffractive scattering 1
+ CALL PHO_BORNCS(IP,1,XMASS1,XMASS2,RMASS1,XMASS2)
+ ZXP(1,2) = ZIGP
+ BXP(1,2) = BPOM
+ ZXR(1,2) = ZIGR
+ BXR(1,2) = BREG
+ ZXH(1,2) = ZIGHR
+ BXH(1,2) = BHAR
+ ZXD(1,2) = ZIGHD
+ BXD(1,2) = BHAD
+ ZXT1A(1,2) = ZIGT1(1)
+ BXT1A(1,2) = BTR1(1)
+ ZXT1B(1,2) = ZIGT1(2)
+ BXT1B(1,2) = BTR1(2)
+ ZXT2A(1,2) = ZIGT2(1)
+ BXT2A(1,2) = BTR2(1)
+ ZXT2B(1,2) = ZIGT2(2)
+ BXT2B(1,2) = BTR2(2)
+ ZXL(1,2) = ZIGL
+ BXL(1,2) = BLOO
+ ZXDPE(1,2) = ZIGDP(1)
+ BXDPE(1,2) = BDP(1)
+ ZXDPA(1,2) = ZIGDP(2)
+ BXDPA(1,2) = BDP(2)
+ ZXDPB(1,2) = ZIGDP(3)
+ BXDPB(1,2) = BDP(3)
+ ZXDPD(1,2) = ZIGDP(4)
+ BXDPD(1,2) = BDP(4)
+ SBOPOM(2) = SIGP
+ SBOREG(2) = SIGR
+ SBOHAR(2) = SIGHR
+ SBOHAD(2) = 0.D0
+ SBOTR1(2,1) = SIGT1(1)
+ SBOTR1(2,2) = SIGT1(2)
+ SBOTR2(2,1) = SIGT2(1)
+ SBOTR2(2,2) = SIGT2(2)
+ SBOLPO(2) = SIGL
+ SBODPO(2,1) = SIGDP(1)
+ SBODPO(2,2) = SIGDP(2)
+ SBODPO(2,3) = SIGDP(3)
+ SBODPO(2,4) = SIGDP(4)
+
+C low mass single diffractive scattering 2
+ CALL PHO_BORNCS(IP,1,XMASS1,XMASS2,XMASS1,RMASS2)
+ ZXP(1,3) = ZIGP
+ BXP(1,3) = BPOM
+ ZXR(1,3) = ZIGR
+ BXR(1,3) = BREG
+ ZXH(1,3) = ZIGHR
+ BXH(1,3) = BHAR
+ ZXD(1,3) = ZIGHD
+ BXD(1,3) = BHAD
+ ZXT1A(1,3) = ZIGT1(1)
+ BXT1A(1,3) = BTR1(1)
+ ZXT1B(1,3) = ZIGT1(2)
+ BXT1B(1,3) = BTR1(2)
+ ZXT2A(1,3) = ZIGT2(1)
+ BXT2A(1,3) = BTR2(1)
+ ZXT2B(1,3) = ZIGT2(2)
+ BXT2B(1,3) = BTR2(2)
+ ZXL(1,3) = ZIGL
+ BXL(1,3) = BLOO
+ ZXDPE(1,3) = ZIGDP(1)
+ BXDPE(1,3) = BDP(1)
+ ZXDPA(1,3) = ZIGDP(2)
+ BXDPA(1,3) = BDP(2)
+ ZXDPB(1,3) = ZIGDP(3)
+ BXDPB(1,3) = BDP(3)
+ ZXDPD(1,3) = ZIGDP(4)
+ BXDPD(1,3) = BDP(4)
+ SBOPOM(3) = SIGP
+ SBOREG(3) = SIGR
+ SBOHAR(3) = SIGHR
+ SBOHAD(3) = 0.D0
+ SBOTR1(3,1) = SIGT1(1)
+ SBOTR1(3,2) = SIGT1(2)
+ SBOTR2(3,1) = SIGT2(1)
+ SBOTR2(3,2) = SIGT2(2)
+ SBOLPO(3) = SIGL
+ SBODPO(3,1) = SIGDP(1)
+ SBODPO(3,2) = SIGDP(2)
+ SBODPO(3,3) = SIGDP(3)
+ SBODPO(3,4) = SIGDP(4)
+
+C low mass double diffractive scattering
+ CALL PHO_BORNCS(IP,1,XMASS1,XMASS2,RMASS1,RMASS2)
+ ZXP(1,4) = ZIGP
+ BXP(1,4) = BPOM
+ ZXR(1,4) = ZIGR
+ BXR(1,4) = BREG
+ ZXH(1,4) = ZIGHR
+ BXH(1,4) = BHAR
+ ZXD(1,4) = ZIGHD
+ BXD(1,4) = BHAD
+ ZXT1A(1,4) = ZIGT1(1)
+ BXT1A(1,4) = BTR1(1)
+ ZXT1B(1,4) = ZIGT1(2)
+ BXT1B(1,4) = BTR1(2)
+ ZXT2A(1,4) = ZIGT2(1)
+ BXT2A(1,4) = BTR2(1)
+ ZXT2B(1,4) = ZIGT2(2)
+ BXT2B(1,4) = BTR2(2)
+ ZXL(1,4) = ZIGL
+ BXL(1,4) = BLOO
+ ZXDPE(1,4) = ZIGDP(1)
+ BXDPE(1,4) = BDP(1)
+ ZXDPA(1,4) = ZIGDP(2)
+ BXDPA(1,4) = BDP(2)
+ ZXDPB(1,4) = ZIGDP(3)
+ BXDPB(1,4) = BDP(3)
+ ZXDPD(1,4) = ZIGDP(4)
+ BXDPD(1,4) = BDP(4)
+ SBOPOM(4) = SIGP
+ SBOREG(4) = SIGR
+ SBOHAR(4) = SIGHR
+ SBOHAD(4) = 0.D0
+ SBOTR1(4,1) = SIGT1(1)
+ SBOTR1(4,2) = SIGT1(2)
+ SBOTR2(4,1) = SIGT2(1)
+ SBOTR2(4,2) = SIGT2(2)
+ SBOLPO(4) = SIGL
+ SBODPO(4,1) = SIGDP(1)
+ SBODPO(4,2) = SIGDP(2)
+ SBODPO(4,3) = SIGDP(3)
+ SBODPO(4,4) = SIGDP(4)
+
+C calculate Born graph cross sections
+ SBOPOM(0) = 0.D0
+ SBOREG(0) = 0.D0
+ SBOHAR(0) = 0.D0
+ SBOHAD(0) = 0.D0
+ SBOTR1(0,1) = 0.D0
+ SBOTR1(0,2) = 0.D0
+ SBOTR2(0,1) = 0.D0
+ SBOTR2(0,2) = 0.D0
+ SBOLPO(0) = 0.D0
+ SBODPO(0,1) = 0.D0
+ SBODPO(0,2) = 0.D0
+ SBODPO(0,3) = 0.D0
+ SBODPO(0,4) = 0.D0
+ DO 150 I=1,4
+ SBOPOM(0) = SBOPOM(0) + ELAFAC(I)*SBOPOM(I)
+ SBOREG(0) = SBOREG(0) + ELAFAC(I)*SBOREG(I)
+ SBOHAR(0) = SBOHAR(0) + ELAFAC(I)*SBOHAR(I)
+ SBOHAD(0) = SBOHAD(0) + ELAFAC(I)*SBOHAD(I)
+ SBOTR1(0,1) = SBOTR1(0,1) + ELAFAC(I)*SBOTR1(I,1)
+ SBOTR1(0,2) = SBOTR1(0,2) + ELAFAC(I)*SBOTR1(I,2)
+ SBOTR2(0,1) = SBOTR2(0,1) + ELAFAC(I)*SBOTR2(I,1)
+ SBOTR2(0,2) = SBOTR2(0,2) + ELAFAC(I)*SBOTR2(I,2)
+ SBOLPO(0) = SBOLPO(0) + ELAFAC(I)*SBOLPO(I)
+ SBODPO(0,1) = SBODPO(0,1) + ELAFAC(I)*SBODPO(I,1)
+ SBODPO(0,2) = SBODPO(0,2) + ELAFAC(I)*SBODPO(I,2)
+ SBODPO(0,3) = SBODPO(0,3) + ELAFAC(I)*SBODPO(I,3)
+ SBODPO(0,4) = SBODPO(0,4) + ELAFAC(I)*SBODPO(I,4)
+ 150 CONTINUE
+
+ SIGPOM = SBOPOM(0)
+ SIGREG = SBOREG(0)
+ SIGTR1(1) = SBOTR1(0,1)
+ SIGTR1(2) = SBOTR1(0,2)
+ SIGTR2(1) = SBOTR2(0,1)
+ SIGTR2(2) = SBOTR2(0,2)
+ SIGLOO = SBOLPO(0)
+ SIGDPO(1) = SBODPO(0,1)
+ SIGDPO(2) = SBODPO(0,2)
+ SIGDPO(3) = SBODPO(0,3)
+ SIGDPO(4) = SBODPO(0,4)
+ SIGHAR = SBOHAR(0)
+ SIGDIR = SBOHAD(0)
+ ENDIF
+
+ B24=DCMPLX(B**2,0.D0)/4.D0
+
+ AMPEL = CZERO
+ AMPR = CZERO
+ AMPO = CZERO
+ AMPP = CZERO
+ AMPQ = CZERO
+ AMLMSD(1) = CZERO
+ AMLMSD(2) = CZERO
+ AMHMSD(1) = CZERO
+ AMHMSD(2) = CZERO
+ AMLMDD = CZERO
+ AMHMDD = CZERO
+
+C different models
+
+ IF(ISWMDL(1).LT.3) THEN
+C pomeron
+ AUXP = ZXP(1,1)*EXP(-B24/BXP(1,1))
+C reggeon
+ AUXR = ZXR(1,1)*EXP(-B24/BXR(1,1))
+C hard resolved processes
+ AUXH = ZXH(1,1)*EXP(-B24/BXH(1,1))
+C hard direct processes
+ AUXD = ZXD(1,1)*EXP(-B24/BXD(1,1))
+C triple-Pomeron: baryon high mass diffraction
+ AUXT1 = ZXT1A(1,1)*EXP(-B24/BXT1A(1,1))
+ & + ZXT1B(1,1)*EXP(-B24/BXT1B(1,1))
+C triple-Pomeron: photon/meson high mass diffraction
+ AUXT2 = ZXT2A(1,1)*EXP(-B24/BXT2A(1,1))
+ & + ZXT2B(1,1)*EXP(-B24/BXT2B(1,1))
+C loop-Pomeron
+ AUXL = ZXL(1,1)*EXP(-B24/BXL(1,1))
+ ENDIF
+
+ IF(ISWMDL(1).EQ.0) THEN
+ AMPEL = 0.5D0*((VDMQ2F(1)+VDMQ2F(2)+VDMQ2F(3)+VDMQ2F(4))
+ & *(CONE-EXP(-AUXR-AUXP-AUXH+AUXT1+AUXT2+AUXL))
+ & +(CONE-(VDMQ2F(1)-VDMQ2F(2)-VDMQ2F(3)-VDMQ2F(4)))*AUXD
+ & )
+ AMPR = 0.5D0*SQRT(VDMQ2F(1))*(CONE-EXP(-AUXR-AUXP-AUXH
+ & +AUXT1+AUXT2+AUXL))
+ AMPO = 0.5D0*SQRT(VDMQ2F(2))*(CONE-EXP(-AUXR-AUXP-AUXH
+ & +AUXT1+AUXT2+AUXL))
+ AMPP = 0.5D0*SQRT(VDMQ2F(3))*(CONE-EXP(-AUXR-AUXP-AUXH
+ & +AUXT1+AUXT2+AUXL))
+ AMPQ = 0.5D0*SQRT(VDMQ2F(4))*(CONE-EXP(-AUXR-AUXP-AUXH
+ & +AUXT1+AUXT2+AUXL))
+
+ ELSE IF(ISWMDL(1).EQ.1) THEN
+ AMPR = 0.5D0*SQRT(VDMQ2F(1))*
+ & ( CONE-EXP(-AUXR-AUXP-AUXH*VDMQ2F(1)) )
+ AMPO = 0.5D0*SQRT(VDMQ2F(2))*
+ & ( CONE-EXP(-3.D0*AUXR-AUXP-AUXH*VDMQ2F(2)) )
+ AMPP = 0.5D0*SQRT(VDMQ2F(3))*
+ & ( CONE-EXP(-AUXP-AUXH*VDMQ2F(3)) )
+ AMPQ = 0.5D0*SQRT(VDMQ2F(4))*
+ & ( CONE-EXP(-AUXR-AUXP-AUXH*VDMQ2F(4)) )
+ AMPEL = SQRT(VDMQ2F(1))*AMPR
+ & + SQRT(VDMQ2F(2))*AMPO
+ & + SQRT(VDMQ2F(3))*AMPP
+ & + SQRT(VDMQ2F(4))*AMPQ
+ & + AUXD/2.D0
+
+C simple analytic two channel model (version A)
+ ELSE IF(ISWMDL(1).EQ.3) THEN
+ CALL PHO_CHAN2A(B)
+
+ ELSE
+ WRITE(LO,'(1X,A,I2)')
+ & 'EIKON: ERROR: unsupported model ISWMDL(1) ',ISWMDL(1)
+ STOP
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_DSIGDT
+ SUBROUTINE PHO_DSIGDT(EE,XTA,NFILL)
+C*********************************************************************
+C
+C calculation of unitarized amplitude
+C and differential cross section
+C
+C input: EE cm energy (GeV)
+C XTA(1,*) t values (GeV**2)
+C NFILL entries in t table
+C
+C output: XTA(2,*) DSIG/DT g p --> g h/V (mub/GeV**2)
+C XTA(3,*) DSIG/DT g p --> rho0 h/V
+C XTA(4,*) DSIG/DT g p --> omega0 h/V
+C XTA(5,*) DSIG/DT g p --> phi h/V
+C XTA(6,*) DSIG/DT g p --> pi+ pi- h/V (continuum)
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(ITWO=2,
+ & ITHREE=3,
+ & THOUS=1.D3,
+ & DEPS=1.D-20)
+
+ DIMENSION XTA(6,NFILL)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C complex Born graph amplitudes used for unitarization
+ COMPLEX*16 AMPEL,AMPVM,AMPSOF,AMPHAR,AMLMSD,AMHMSD,AMLMDD,
+ & AMHMDD,AMPDP
+ COMMON /POINT4/ AMPEL,AMPVM(4,4),AMPSOF,AMPHAR,AMLMSD(2),
+ & AMHMSD(2),AMLMDD,AMHMDD,AMPDP(4)
+
+ COMPLEX*16 XT,AMP,CZERO
+ DIMENSION AMP(5),XPNT(96),WGHT(96),XT(5,100)
+ CHARACTER*12 FNA
+
+ CDABS(AMPEL) = ABS(AMPEL)
+ DCMPLX(X,Y) = CMPLX(X,Y)
+
+ CZERO=DCMPLX(0.D0,0.D0)
+
+ ETMP = ECM
+ ECM = EE
+
+ IF(NFILL.GT.100) THEN
+ WRITE(LO,'(1X,A,I4)')
+ & 'PHO_DSIGDT:ERROR: too many entries in table',NFILL
+ STOP
+ ENDIF
+C
+ DO 100 K=1,NFILL
+ DO 150 L=1,5
+ XT(L,K)=CZERO
+ 150 CONTINUE
+ 100 CONTINUE
+C
+C impact parameter integration
+C BMAX=12.D0*SQRT(MAX(BPOM,BREG))
+ BMAX=10.D0
+ CALL PHO_GAUSET(0.D0,BMAX,NGAUSO,XPNT,WGHT)
+ IAMP = 5
+ IF((IFPAP(1).EQ.22).AND.(IFPAP(2).NE.22)) THEN
+ I1 = 1
+ I2 = 0
+ ELSE IF((IFPAP(1).NE.22).AND.(IFPAP(2).EQ.22)) THEN
+ I1 = 0
+ I2 = 1
+ ELSE IF((IFPAP(1).EQ.22).AND.(IFPAP(2).EQ.22)) THEN
+ I1 = 1
+ I2 = 1
+ ELSE
+ I1 = 0
+ I2 = 0
+ IAMP = 1
+ ENDIF
+ J1 = I1*2
+ K1 = I1*3
+ L1 = I1*4
+ J2 = I2*2
+ K2 = I2*3
+ L2 = I2*4
+C
+ DO 200 I=1,NGAUSO
+ WG=WGHT(I)*XPNT(I)
+C calculate amplitudes
+ IF(I.EQ.1) THEN
+ CALL PHO_EIKON(1,-1,XPNT(I))
+ ELSE
+ CALL PHO_EIKON(1,1,XPNT(I))
+ ENDIF
+ AMP(1) = AMPEL
+ AMP(2) = AMPVM(I1,I2)
+ AMP(3) = AMPVM(J1,J2)
+ AMP(4) = AMPVM(K1,K2)
+ AMP(5) = AMPVM(L1,L2)
+C
+ DO 400 J=1,NFILL
+ XX=XPNT(I)*SQRT(XTA(1,J)/GEV2MB)
+ FAC = PHO_BESSJ0(XX)*WG
+ DO 500 K=1,IAMP
+ XT(1,J)=XT(1,J)+AMP(K)*FAC
+ 500 CONTINUE
+ 400 CONTINUE
+ 200 CONTINUE
+C
+C change units to mb/GeV**2
+ FAC = 4.D0*PI/GEV2MB
+ FNA = '(mb/GeV**2) '
+ IF(I1+I2.EQ.1) THEN
+ FAC = FAC*THOUS
+ FNA = '(mub/GeV**2)'
+ ELSE IF(I1+I2.EQ.2) THEN
+ FAC = FAC*THOUS*THOUS
+ FNA = '(nb/GeV**2) '
+ ENDIF
+ IF(IDEB(56).GE.5) THEN
+ WRITE(LO,'(1X,A,A12,/1X,A)') 'table: -T (GeV**2) DSIG/DT ',
+ & FNA,'------------------------------------------'
+ ENDIF
+ DO 600 J=1,NFILL
+ DO 700 K=1,IAMP
+ XTA(K+1,J)=CDABS(XT(K,J))**2*FAC
+ 700 CONTINUE
+ IF(IDEB(56).GE.5) THEN
+ WRITE(LO,'(5X,6E12.3)') (XTA(I,J),I=1,IAMP+1)
+ ENDIF
+ 600 CONTINUE
+
+ ECM = ETMP
+ END
+
+CDECK ID>, PHO_XSECT
+ SUBROUTINE PHO_XSECT(IP,IFHARD,EE)
+C*********************************************************************
+C
+C calculation of physical cross sections
+C
+C input: IP particle combination
+C IFHARD -1 reset Born graph cross section tables
+C 0 calculate hard cross sections or take them
+C from interpolation table (if available)
+C 1 assume that hard cross sections are already
+C calculated and stored in /POSBRN/
+C EE cms energy (GeV)
+C
+C output: /POSBRN/ input cross sections
+C /POZBRN/ scaled input cross values
+C /POCSEC/ physical cross sections and slopes
+C
+C slopes in GeV**-2, cross sections in mb
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(ONEM=-1.D0,
+ & THOUS=1.D3,
+ & DEPS=1.D-20)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C Born graph cross sections and slopes
+ INTEGER Max_pro_3
+ PARAMETER ( Max_pro_3 = 16 )
+ COMPLEX*16 SIGP,SIGR,SIGHD,SIGHR,SIGT1,SIGT2,SIGL,SIGDP,
+ & SIGD1,SIGD2,DSIGH
+ COMMON /POSBRN/ SIGP,SIGR,SIGHD,SIGHR,SIGT1(2),SIGT2(2),SIGL,
+ & SIGDP(4),SIGD1(2),SIGD2(2),DSIGH(0:Max_pro_3)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+
+ CHARACTER*15 PHO_PNAME
+
+C complex Born graph amplitudes used for unitarization
+ COMPLEX*16 AMPEL,AMPVM,AMPSOF,AMPHAR,AMLMSD,AMHMSD,AMLMDD,
+ & AMHMDD,AMPDP
+ COMMON /POINT4/ AMPEL,AMPVM(4,4),AMPSOF,AMPHAR,AMLMSD(2),
+ & AMHMSD(2),AMLMDD,AMHMDD,AMPDP(4)
+
+ DIMENSION XPNT(96),WGHT(96),SLVM1(4,4),SLVM2(4,4)
+ CHARACTER*8 VMESA(0:4),VMESB(0:4)
+ DATA VMESA / 'vmeson ','rho ','omega ','phi ',
+ & 'pi+pi- ' /
+ DATA VMESB / 'vmeson ','rho ','omega ','phi ',
+ & 'pi+pi- ' /
+
+ CDABS(AMPEL) = ABS(AMPEL)
+
+ ETMP = ECM
+ IF(EE.LT.0.D0) GOTO 500
+ ECM = EE
+
+C impact parameter integration
+C BMAX=12.D0*SQRT(MAX(BPOM,BREG))
+ BMAX=10.D0
+ CALL PHO_GAUSET(0.D0,BMAX,NGAUSO,XPNT,WGHT)
+ SIGTOT = 0.D0
+ SIGINE = 0.D0
+ SIGELA = 0.D0
+ SIGNDF = 0.D0
+ SIGLSD(1) = 0.D0
+ SIGLSD(2) = 0.D0
+ SIGLDD = 0.D0
+ SIGHSD(1) = 0.D0
+ SIGHSD(2) = 0.D0
+ SIGHDD = 0.D0
+ SIGCDF(0) = 0.D0
+ SIG1SO = 0.D0
+ SIG1HA = 0.D0
+ SLEL1 = 0.D0
+ SLEL2 = 0.D0
+ DO 50 I=1,4
+ SIGCDF(I) = 0.D0
+ DO 55 K=1,4
+ SIGVM(I,K) = 0.D0
+ SLVM1(I,K) = 0.D0
+ SLVM2(I,K) = 0.D0
+ 55 CONTINUE
+ 50 CONTINUE
+
+ DO 100 I=1,NGAUSO
+ B2 = XPNT(I)**2
+ WG = WGHT(I)*XPNT(I)
+ WGB = B2*WG
+
+C calculate impact parameter amplitude, results in /POINT4/
+ IF(I.EQ.1) THEN
+ CALL PHO_EIKON(IP,IFHARD,XPNT(I))
+ ELSE
+ CALL PHO_EIKON(IP,1,XPNT(I))
+ ENDIF
+
+ SIGTOT = SIGTOT + DREAL(AMPEL)*WG
+ SIGELA = SIGELA + CDABS(AMPEL)**2*WG
+ SLEL1 = SLEL1 + AMPEL*WGB
+ SLEL2 = SLEL2 + AMPEL*WG
+
+ DO 110 J=1,4
+ DO 120 K=1,4
+ SIGVM(J,K) = SIGVM(J,K) + CDABS(AMPVM(J,K))**2*WG
+ SLVM1(J,K) = SLVM1(J,K) + AMPVM(J,K)*WGB
+ SLVM2(J,K) = SLVM2(J,K) + AMPVM(J,K)*WG
+ 120 CONTINUE
+ SIGCDF(J) = SIGCDF(J) + DREAL(AMPDP(J))*WG
+ 110 CONTINUE
+
+ SIGLSD(1) = SIGLSD(1) + CDABS(AMLMSD(1))**2*WG
+ SIGLSD(2) = SIGLSD(2) + CDABS(AMLMSD(2))**2*WG
+ SIGLDD = SIGLDD + CDABS(AMLMDD)**2*WG
+ SIG1SO = SIG1SO + DREAL(AMPSOF)*WG
+ SIG1HA = SIG1HA + DREAL(AMPHAR)*WG
+ SIGHSD(1) = SIGHSD(1) + DREAL(AMHMSD(1))*WG
+ SIGHSD(2) = SIGHSD(2) + DREAL(AMHMSD(2))*WG
+ SIGHDD = SIGHDD + DREAL(AMHMDD)*WG
+
+ 100 CONTINUE
+
+ SIGDIR = DREAL(SIGHD)
+ FAC = 4.D0*PI2
+ SIGTOT = SIGTOT*FAC
+ SIGELA = SIGELA*FAC
+ FACSL = 0.5D0/GEV2MB
+ SLOEL = SLEL1/MAX(DEPS,SLEL2)*FACSL
+
+ IF((IFPAP(1).EQ.22).OR.(IFPAP(2).EQ.22)) THEN
+ DO 130 I=1,4
+ DO 140 J=1,4
+ SIGVM(I,J) = SIGVM(I,J)*FAC
+ SLOVM(I,J) = SLVM1(I,J)/MAX(DEPS,SLVM2(I,J))*FACSL
+ 140 CONTINUE
+ 130 CONTINUE
+ SIGVM(0,0) = 0.D0
+ DO 150 I=1,4
+ SIGVM(0,I) = 0.D0
+ SIGVM(I,0) = 0.D0
+ DO 160 J=1,4
+ SIGVM(0,I) = SIGVM(0,I) + SIGVM(J,I)
+ SIGVM(I,0) = SIGVM(I,0) + SIGVM(I,J)
+ 160 CONTINUE
+ SIGVM(0,0) = SIGVM(0,0) + SIGVM(I,0)
+ 150 CONTINUE
+ ENDIF
+
+C diffractive cross sections
+
+ SIGLSD(1) = SIGLSD(1)*FAC*PARMDL(40)
+ SIGLSD(2) = SIGLSD(2)*FAC*PARMDL(41)
+ SIGLDD = SIGLDD *FAC*PARMDL(42)
+ SIGHSD(1) = (SIGHSD(1)-2.D0*(SIGCDF(1)+SIGCDF(2)))*FAC*PARMDL(40)
+ SIGHSD(2) = (SIGHSD(2)-2.D0*(SIGCDF(1)+SIGCDF(3)))*FAC*PARMDL(41)
+ SIGHDD = (SIGHDD-2.D0*(SIGCDF(2)+SIGCDF(3)+2.D0*SIGCDF(4)))
+ & *FAC*PARMDL(42)
+
+C double pomeron scattering
+
+ SIGCDF(0) = 0.D0
+ DO 170 I=1,4
+ SIGCDF(I) = SIGCDF(I)*FAC
+ SIGCDF(0) = SIGCDF(0)+SIGCDF(I)
+ 170 CONTINUE
+
+ SIG1SO = SIG1SO *FAC
+ SIG1HA = SIG1HA *FAC
+
+ SIGINE = SIGTOT - SIGELA
+
+C user-forced change of diffractive cross section
+
+ IF((IP.EQ.1).AND.(ISWMDL(30).GE.1)) THEN
+
+C use optional explicit parametrization for single-diffraction
+
+ SIGSD1 = SIGLSD(1)+SIGHSD(1)
+ SIGSD2 = SIGLSD(2)+SIGHSD(2)
+ SS = EE*EE
+ XI_MIN = 1.5D0/SS
+ XI_MAX = PARMDL(45)**2
+ CALL PHO_CSDIFF(IFPAP(1),IFPAP(2),SS,XI_MIN,XI_MAX,
+ & SIG_SD1,SIG_SD2,SIG_DD)
+ SIG_SD1 = SIG_SD1*PARMDL(40)
+ SIG_SD2 = SIG_SD2*PARMDL(41)
+
+**sr
+C DEL_SD1 = SIG_SD1-SIGSD1
+ DEL_SD1 = PARMDL(200)*(SIG_SD1-SIGSD1)
+**
+
+ FAC = SIGLSD(1)/SIGSD1
+ SIGLSD(1) = SIGLSD(1)+FAC*DEL_SD1
+ SIGHSD(1) = SIGHSD(1)+(1.D0-FAC)*DEL_SD1
+
+C DEL_SD2 = SIG_SD2-SIGSD2
+ DEL_SD2 = PARMDL(200)*(SIG_SD2-SIGSD2)
+
+ FAC = SIGLSD(2)/SIGSD2
+ SIGLSD(2) = SIGLSD(2)+FAC*DEL_SD2
+ SIGHSD(2) = SIGHSD(2)+(1.D0-FAC)*DEL_SD2
+
+ IF(ISWMDL(30).GE.2) THEN
+
+C use explicit parametrization also for double diffraction diss.
+ SIGDD = SIGLDD+SIGHDD
+ SIG_DD = SIG_DD*PARMDL(42)
+ DEL_DD = SIG_DD-SIGDD
+ FAC = SIGLDD/SIGDD
+ SIGLDD = SIGLDD+FAC*DEL_DD
+ SIGHDD = SIGHDD+(1.D0-FAC)*DEL_DD
+ SIGCOR = DEL_SD1 + DEL_SD2 + DEL_DD
+
+ ELSE
+
+C rescale double diffraction cross sections
+ SIGLDD = SIGLDD *PARMDL(42)
+ SIGHDD = SIGHDD *PARMDL(42)
+ SIGCOR = DEL_SD1 + DEL_SD2
+ & +(SIGLDD+SIGHDD)*(PARMDL(42)-1.D0)
+
+ ENDIF
+
+ ELSE
+
+C rescale unitarized cross sections for diffraction dissociation
+
+ SIGLSD(1) = SIGLSD(1)*PARMDL(40)
+ SIGHSD(1) = SIGHSD(1)*PARMDL(40)
+ SIGLSD(2) = SIGLSD(2)*PARMDL(41)
+ SIGHSD(2) = SIGHSD(2)*PARMDL(41)
+ SIGLDD = SIGLDD *PARMDL(42)
+ SIGHDD = SIGHDD *PARMDL(42)
+ SIGCOR = (SIGLSD(1)+SIGHSD(1))*(PARMDL(40)-1.D0)
+ & +(SIGLSD(2)+SIGHSD(2))*(PARMDL(41)-1.D0)
+ & +(SIGLDD+SIGHDD)*(PARMDL(42)-1.D0)
+
+ ENDIF
+
+C non-diffractive inelastic cross section
+
+ SIGNDF = SIGTOT-SIGELA-SIGVM(0,0)-SIGCDF(0)-SIGDIR
+ & -SIGLSD(1)-SIGHSD(1)-SIGLSD(2)-SIGHSD(2)
+ & -SIGLDD-SIGHDD
+
+C specify elastic scattering channel
+
+ 500 CONTINUE
+ IF(IFPAP(1).NE.22) THEN
+ VMESA(1) = PHO_PNAME(IFPAB(1),0)
+ ELSE
+ VMESA(1) = 'rho '
+ ENDIF
+ IF(IFPAP(2).NE.22) THEN
+ VMESB(1) = PHO_PNAME(IFPAB(2),0)
+ ELSE
+ VMESB(1) = 'rho '
+ ENDIF
+
+C write out physical cross sections
+
+ IF(IDEB(57).GE.5) THEN
+ WRITE(LO,'(/1X,A,I3,/1X,A)')
+ & 'PHO_XSECT: cross sections (mb) for combination',IP,
+ & '----------------------------------------------'
+ WRITE(LO,'(5X,A,E12.3,2E11.3)')'energy,virtualities',ECM,PVIRT
+ WRITE(LO,'(5X,A,E12.3)') ' total ',SIGTOT
+ WRITE(LO,'(5X,A,E12.3)') ' purely elastic ',SIGELA
+ WRITE(LO,'(5X,A,E12.3)') ' inelastic ',SIGINE
+ WRITE(LO,'(5X,A,E12.3)') ' s-diff.particle 1 ',
+ & SIGLSD(1)+SIGHSD(1)
+ IF(IDEB(57).GE.7) THEN
+ WRITE(LO,'(5X,A,E12.3)') ' low-mass part ',SIGLSD(1)
+ WRITE(LO,'(5X,A,E12.3)') ' high-mass part ',SIGHSD(1)
+ ENDIF
+ WRITE(LO,'(5X,A,E12.3)') ' s-diff.particle 2 ',
+ & SIGLSD(2)+SIGHSD(2)
+ IF(IDEB(57).GE.7) THEN
+ WRITE(LO,'(5X,A,E12.3)') ' low-mass part ',SIGLSD(2)
+ WRITE(LO,'(5X,A,E12.3)') ' high-mass part ',SIGHSD(2)
+ ENDIF
+ WRITE(LO,'(5X,A,E12.3)') ' double diff ',SIGLDD+SIGHDD
+ IF(IDEB(57).GE.7) THEN
+ WRITE(LO,'(5X,A,E12.3)') ' low-mass part ',SIGLDD
+ WRITE(LO,'(5X,A,E12.3)') ' high-mass part ',SIGHDD
+ ENDIF
+ WRITE(LO,'(5X,A,E12.3)') ' double pomeron ',SIGCDF(0)
+ IF(IDEB(57).GE.7) THEN
+ WRITE(LO,'(5X,A,E12.3)') ' purely elastic ',SIGCDF(1)
+ WRITE(LO,'(5X,A,E12.3)') ' excitation part.1 ',SIGCDF(2)
+ WRITE(LO,'(5X,A,E12.3)') ' excitation part.2 ',SIGCDF(3)
+ WRITE(LO,'(5X,A,E12.3)') ' excitation both ',SIGCDF(4)
+ ENDIF
+ WRITE(LO,'(5X,A,E12.3)') ' elastic slope ',SLOEL
+ DO 200 I=1,4
+ DO 210 J=1,4
+ IF(SIGVM(I,J).GT.DEPS) THEN
+ WRITE(LO,'(1X,3A)') 'q-elastic production of ',
+ & VMESA(I),VMESB(J)
+ WRITE(LO,'(10X,A,E12.3)') 'cross section ',SIGVM(I,J)
+ IF((I.NE.0).AND.(J.NE.0))
+ & WRITE(LO,'(18X,A,E12.3)') 'slope ',SLOVM(I,J)
+ ENDIF
+ 210 CONTINUE
+ 200 CONTINUE
+ IF(IDEB(57).GE.7) THEN
+ WRITE(LO,'(5X,A,E12.3)') ' vmeson production ',SIGVM(0,0)
+ WRITE(LO,'(5X,A,E12.3)') ' one-pomeron soft ',SIG1SO
+ WRITE(LO,'(5X,A,E12.3)') ' one-pomeron hard ',SIG1HA
+ WRITE(LO,'(5X,A,E12.3)') ' pomeron exchange ',SIGPOM
+ WRITE(LO,'(5X,A,E12.3)') ' reggeon exchange ',SIGREG
+ WRITE(LO,'(5X,A,E12.3)') ' hard resolved QCD ',DREAL(DSIGH(9))
+ WRITE(LO,'(5X,A,E12.3/)')' hard direct QCD ',
+ & DREAL(DSIGH(15))
+ ENDIF
+ ENDIF
+
+ ECM = ETMP
+
+ END
+
+CDECK ID>, PHO_IMPAMP
+ SUBROUTINE PHO_IMPAMP(EE,BMIN,BMAX,NSTEP)
+C*********************************************************************
+C
+C calculation of physical impact parameter amplitude
+C
+C input: EE cm energy (GeV)
+C BMIN lower bound in B
+C BMAX upper bound in B
+C NSTEP number of values (linear)
+C
+C output: values written to output unit
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(ONEM=-1.D0,
+ & THOUS=1.D3,
+ & DEPS=1.D-20)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C complex Born graph amplitudes used for unitarization
+ COMPLEX*16 AMPEL,AMPVM,AMPSOF,AMPHAR,AMLMSD,AMHMSD,AMLMDD,
+ & AMHMDD,AMPDP
+ COMMON /POINT4/ AMPEL,AMPVM(4,4),AMPSOF,AMPHAR,AMLMSD(2),
+ & AMHMSD(2),AMLMDD,AMHMDD,AMPDP(4)
+
+ ECM=EE
+ BSTEP = (BMAX-BMIN)/DBLE(NSTEP-1)
+C
+ WRITE(LO,'(3(/,1X,A))')
+ & 'impact parameter amplitudes:',
+ & ' B AMP-EL AMP-LMSD(1,2) AMP-HMSD(1,2) AMP-LMDD AMP-HMDD',
+ & '-------------------------------------------------------------'
+C
+ BB = BMIN
+ DO 100 I=1,NSTEP
+C calculate impact parameter amplitudes
+ IF(I.EQ.1) THEN
+ CALL PHO_EIKON(1,-1,BMIN)
+ ELSE
+ CALL PHO_EIKON(1,1,BB)
+ ENDIF
+ WRITE(LO,'(1X,8E12.4)') BB,DREAL(AMPEL),
+ & DREAL(AMLMSD(1)),DREAL(AMLMSD(2)),
+ & DREAL(AMHMSD(1)),DREAL(AMHMSD(2)),DREAL(AMLMDD),DREAL(AMHMDD)
+ BB = BB+BSTEP
+ 100 CONTINUE
+
+ END
+
+CDECK ID>, PHO_PRBDIS
+ SUBROUTINE PHO_PRBDIS(IP,ECM,IE)
+C*********************************************************************
+C
+C calculation of multi interactions probabilities
+C
+C input: IP particle combination to scatter
+C ECM CMS energy
+C IE index for weight storing
+C /PROBAB/
+C IMAX max. number of soft pomeron interactions
+C KMAX max. number of hard pomeron interactions
+C
+C output: /PROBAB/
+C PROB field of probabilities
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS=1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C Born graph cross sections and slopes
+ INTEGER Max_pro_3
+ PARAMETER ( Max_pro_3 = 16 )
+ COMPLEX*16 SIGP,SIGR,SIGHD,SIGHR,SIGT1,SIGT2,SIGL,SIGDP,
+ & SIGD1,SIGD2,DSIGH
+ COMMON /POSBRN/ SIGP,SIGR,SIGHD,SIGHR,SIGT1(2),SIGT2(2),SIGL,
+ & SIGDP(4),SIGD1(2),SIGD2(2),DSIGH(0:Max_pro_3)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C Born graph cross sections after applying diffraction model
+ DOUBLE PRECISION SBOPOM,SBOREG,SBOHAR,SBOHAD,SBOTR1,SBOTR2,
+ & SBOLPO,SBODPO
+ COMMON /POINT1/ SBOPOM(0:4),SBOREG(0:4),SBOHAR(0:4),SBOHAD(0:4),
+ & SBOTR1(0:4,2),SBOTR2(0:4,2),SBOLPO(0:4),
+ & SBODPO(0:4,4)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C cut probability distribution
+ INTEGER IEETA1,IIMAX,KKMAX
+ PARAMETER( IEETA1=20, IIMAX=20, KKMAX=20 )
+ INTEGER IEEMAX,IMAX,KMAX
+ REAL PROB
+ DOUBLE PRECISION EPTAB
+ COMMON /POPROB/ PROB(4,IEETA1,0:IIMAX,0:KKMAX),EPTAB(4,IEETA1),
+ & IEEMAX,IMAX,KMAX
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+C average number of cut soft and hard ladders (obsolete)
+ DOUBLE PRECISION AVERI,AVERK,AVERL,AVERM,AVERN
+ COMMON /POINT2/ AVERI,AVERK,AVERL,AVERM,AVERN
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C unitarized amplitudes for different diffraction channels
+ DOUBLE PRECISION ZXP,BXP,ZXR,BXR,ZXH,BXH,ZXD,BXD,
+ & ZXT1A,BXT1A,ZXT1B,BXT1B,ZXT2A,BXT2A,ZXT2B,BXT2B,
+ & ZXDPE,BXDPE,ZXDPA,BXDPA,ZXDPB,BXDPB,ZXDPD,BXDPD,
+ & ZXL,BXL
+ COMMON /POINT5/ ZXP(4,4),BXP(4,4),ZXR(4,4),BXR(4,4),
+ & ZXH(4,4),BXH(4,4),ZXD(4,4),BXD(4,4),
+ & ZXT1A(4,4),BXT1A(4,4),ZXT1B(4,4),BXT1B(4,4),
+ & ZXT2A(4,4),BXT2A(4,4),ZXT2B(4,4),BXT2B(4,4),
+ & ZXDPE(4,4),BXDPE(4,4),ZXDPA(4,4),BXDPA(4,4),
+ & ZXDPB(4,4),BXDPB(4,4),ZXDPD(4,4),BXDPD(4,4),
+ & ZXL(4,4),BXL(4,4)
+
+C local variables
+ DIMENSION AB(4,4),CHI2(4),ABSUM2(4,4),ABSTMP(4),CHITMP(4)
+ PARAMETER (ICHMAX=40)
+ DIMENSION CHIFAC(4,4),AMPCOF(4)
+ DIMENSION PCHAIN(2,ICHMAX),XPNT(96),WGHT(96)
+ DIMENSION FACLOG(0:30),PSOFT(0:30),PHARD(0:30)
+
+C combinatorical factors
+ DATA CHIFAC / 1.D0, 1.D0,-1.D0,-1.D0,
+ & 1.D0,-1.D0, 1.D0,-1.D0,
+ & 1.D0,-1.D0,-1.D0, 1.D0,
+ & 1.D0, 1.D0, 1.D0, 1.D0 /
+
+ DATA FACLOG / .000000000000000D+00,
+ & .000000000000000D+00, .693147180559945D+00,
+ & .109861228866811D+01, .138629436111989D+01,
+ & .160943791243410D+01, .179175946922805D+01,
+ & .194591014905531D+01, .207944154167984D+01,
+ & .219722457733622D+01, .230258509299405D+01,
+ & .239789527279837D+01, .248490664978800D+01,
+ & .256494935746154D+01, .263905732961526D+01,
+ & .270805020110221D+01, .277258872223978D+01,
+ & .283321334405622D+01, .289037175789616D+01,
+ & .294443897916644D+01, .299573227355399D+01,
+ & .304452243772342D+01, .309104245335832D+01,
+ & .313549421592915D+01, .317805383034795D+01,
+ & .321887582486820D+01, .325809653802148D+01,
+ & .329583686600433D+01, .333220451017520D+01,
+ & .336729582998647D+01, .340119738166216D+01 /
+
+ DATA ELAST / 0.D0 /
+ DATA IPLAST / 0 /
+
+C test for redundant calculation: skip cs calculation
+ IF((ECM.NE.ELAST).OR.(IP.NE.IPLAST)) THEN
+ ELAST = ECM
+ IPLAST = IP
+ CALL PHO_XSECT(IP,0,ELAST)
+ ISIMAX = IE
+ SIGECM(IP,IE) = ECM
+ SIGTAB(IP,1,IE) = SIGTOT
+ SIGTAB(IP,2,IE) = SIGELA
+ J = 2
+ DO 5 I=0,4
+ DO 6 K=0,4
+ J = J+1
+ SIGTAB(IP,J,IE) = SIGVM(I,K)
+ 6 CONTINUE
+ 5 CONTINUE
+ SIGTAB(IP,28,IE) = SIGINE
+ SIGTAB(IP,29,IE) = SIGDIR
+ SIGTAB(IP,30,IE) = SIGLSD(1)
+ SIGTAB(IP,31,IE) = SIGLSD(2)
+ SIGTAB(IP,32,IE) = SIGHSD(1)
+ SIGTAB(IP,33,IE) = SIGHSD(2)
+ SIGTAB(IP,34,IE) = SIGLDD
+ SIGTAB(IP,35,IE) = SIGHDD
+ SIGTAB(IP,36,IE) = SIGCDF(0)
+ SIGTAB(IP,37,IE) = SIG1SO
+ SIGTAB(IP,38,IE) = SIG1HA
+ SIGTAB(IP,39,IE) = SLOEL
+ J = 39
+ DO 7 I=1,4
+ DO 8 K=1,4
+ J = J+1
+ SIGTAB(IP,J,IE) = SLOVM(I,K)
+ 8 CONTINUE
+ 7 CONTINUE
+ SIGTAB(IP,56,IE) = SIGPOM
+ SIGTAB(IP,57,IE) = SIGREG
+ SIGTAB(IP,58,IE) = SIGHAR
+ SIGTAB(IP,59,IE) = SIGDIR
+ SIGTAB(IP,60,IE) = SIGTR1(1)
+ SIGTAB(IP,61,IE) = SIGTR1(2)
+ SIGTAB(IP,62,IE) = SIGTR2(1)
+ SIGTAB(IP,63,IE) = SIGTR2(2)
+ SIGTAB(IP,64,IE) = SIGLOO
+ SIGTAB(IP,65,IE) = SIGDPO(1)
+ SIGTAB(IP,66,IE) = SIGDPO(2)
+ SIGTAB(IP,67,IE) = SIGDPO(3)
+ SIGTAB(IP,68,IE) = SIGDPO(4)
+
+C consistency check
+ SIGNDF = SIGTOT-SIGELA-SIGVM(0,0)-SIGCDF(0)-SIGDIR
+ & -SIGLSD(1)-SIGHSD(1)-SIGLSD(2)-SIGHSD(2)
+ & -SIGLDD-SIGHDD
+
+ IF(SIGNDF.LE.0.D0) THEN
+ WRITE(LO,'(//1X,A,/)')
+ & 'PHO_PRBDIS:ERROR: neg.cross section for unitarization!'
+ WRITE(LO,'(1X,A,I3,1P,2E12.4)')
+ & 'PHO_PRBDIS: IP,ECM,SIGNDF:',IP,ECM,SIGNDF
+ WRITE(LO,'(4X,A,/1P,8E10.3)')
+ &'(SIGTOT,SIGELA,SIGVM,SIGCDF,SIGDIR,SIGLSD(1),SIGLSD(2),SIGLDD):',
+ & SIGTOT,SIGELA,SIGVM(0,0),SIGCDF(0),SIGDIR,SIGLSD(1),
+ & SIGLSD(2),SIGLDD
+ STOP
+ ENDIF
+
+ IF((IDEB(55).GE.2).AND.(IP.EQ.1)) THEN
+ print LO,'------------------------------------------------'
+ print LO,'IP,ECM:',IP,ECM
+ print LO,'SIGTOT:',SIGTOT
+ print LO,'SIGELA:',SIGELA
+ print LO,'SIGVM :',SIGVM(0,0)
+ print LO,'SIGCDF:',SIGCDF(0)
+ print LO,'SIGDIR:',SIGDIR
+ print LO,'SIGLSD:',SIGLSD
+ print LO,'SIGHSD:',SIGHSD
+ print LO,'SIGLDD:',SIGLDD
+ print LO,'SIGHDD:',SIGHDD
+ print LO,'SIGNDF:',SIGNDF
+
+ print LO,'SIGPOM:',SIGPOM
+ print LO,'SIGREG:',SIGREG
+ print LO,'SIGHAR:',SIGHAR
+ print LO,'SIGDIR:',SIGDIR
+ print LO,'SIGTR1:',SIGTR1
+ print LO,'SIGTR2:',SIGTR2
+ print LO,'SIGLOO:',SIGLOO
+ print LO,'SIGDPO:',SIGDPO
+ print LO,'SIG1SO:',SIG1SO
+ print LO,'SIG1HA:',SIG1HA
+ ENDIF
+
+ SIGTAB(IP,77,IE) = PTCUT(IP)
+ SIGTAB(IP,78,IE) = SIGNDF
+
+ AUXFAC = PI2/SIGNDF
+ IF(ISWMDL(1).EQ.3) THEN
+ DO 133 I=1,4
+ AMPCOF(I) = 0.D0
+ DO 135 K=1,4
+ AMPCOF(I) = AMPCOF(I) + 0.25D0*ELAFAC(K)*CHIFAC(K,I)
+ 135 CONTINUE
+ AMPCOF(I) = AMPCOF(I)*AUXFAC
+ 133 CONTINUE
+ ENDIF
+C
+* BMAX=5.D0*SQRT(DBLE(BPOM))
+ BMAX=10.D0
+ EPTAB(IP,IE) = ECM
+ CALL PHO_GAUSET(0.D0,BMAX,NGAUSO,XPNT,WGHT)
+C
+ ENDIF
+C
+ DO 160 K=0,KMAX
+ DO 170 I=0,IMAX
+ PROB(IP,IE,I,K) = 0.D0
+ 170 CONTINUE
+ 160 CONTINUE
+ DO 120 I=1,ICHMAX
+ PCHAIN(1,I) = 0.D0
+ PCHAIN(2,I) = 0.D0
+ 120 CONTINUE
+C
+C main cross section loop
+C**********************************************************
+ DO 5000 IB=1,NGAUSO
+ B24=XPNT(IB)**2/4.D0
+ FAC = XPNT(IB)*WGHT(IB)
+C
+ IF((ISWMDL(1).EQ.3).OR.(ISWMDL(1).EQ.4)) THEN
+C
+C amplitude construction
+ DO 525 I=1,4
+ AB(1,I)=ZXP(1,I)*EXP(-B24/BXP(1,I))
+ & +ZXR(1,I)*EXP(-B24/BXR(1,I))
+ AB(2,I)=ZXH(1,I)*EXP(-B24/BXH(1,I))
+ AB(3,I)=-ZXT1A(1,I)*EXP(-B24/BXT1A(1,I))
+ & -ZXT1B(1,I)*EXP(-B24/BXT1B(1,I))
+ & -ZXT2A(1,I)*EXP(-B24/BXT2A(1,I))
+ & -ZXT2B(1,I)*EXP(-B24/BXT2B(1,I))
+ & -ZXL(1,I)*EXP(-B24/BXL(1,I))
+ AB(4,I)=ZXDPE(1,I)*EXP(-B24/BXDPE(1,I))
+ & +ZXDPA(1,I)*EXP(-B24/BXDPA(1,I))
+ & +ZXDPB(1,I)*EXP(-B24/BXDPB(1,I))
+ & +ZXDPD(1,I)*EXP(-B24/BXDPD(1,I))
+ AB(1,I) = AB(1,I)+AB(3,I)+AB(4,I)
+ AB(2,I) = AB(2,I)
+ AB(3,I) = 0.D0
+ AB(4,I) = 0.D0
+*
+ 525 CONTINUE
+C
+ DO 460 I=1,4
+ DO 500 K=1,4
+ ABSUM2(I,K) = 0.D0
+ DO 550 L=1,4
+ ABSUM2(I,K) = ABSUM2(I,K) + CHIFAC(L,K)*AB(I,L)
+ 550 CONTINUE
+ ABSUM2(I,K) = 2.D0*ABSUM2(I,K)
+ 500 CONTINUE
+ 460 CONTINUE
+ DO 600 I=1,4
+ CHI2(I) = 0.D0
+ DO 650 K=1,4
+ CHI2(I) = CHI2(I) + ABSUM2(K,I)
+ 650 CONTINUE
+ 600 CONTINUE
+C sums instead of products
+ DO 660 I=1,4
+ DO 670 KD=1,4
+ DTMP = ABS(ABSUM2(I,KD))
+ IF(DTMP.LT.1.D-30) THEN
+ ABSUM2(I,KD) = -50.D0
+ ELSE
+ ABSUM2(I,KD) = LOG(DTMP)
+ ENDIF
+ 670 CONTINUE
+ 660 CONTINUE
+
+ IF(MAX(IMAX,KMAX).GT.30) THEN
+ WRITE(LO,'(1X,2A,3I6)') 'PHO_PRBDIS: internal field ',
+ & 'dimension too small (IMAX,KMAX,int):',IMAX,KMAX,30
+ CALL PHO_ABORT
+ ENDIF
+
+ DO 700 KD=1,4
+ DO 750 I=1,4
+ ABSTMP(I) = ABSUM2(I,KD)
+ 750 CONTINUE
+C recursive sum
+ CHITMP(1) = -ABSUM2(1,KD)
+ DO 800 I=0,IMAX
+ CHITMP(1) = CHITMP(1)+ABSTMP(1)-FACLOG(I)
+ CHITMP(2) = -ABSTMP(2)
+ DO 810 K=0,KMAX
+ CHITMP(2) = CHITMP(2)+ABSTMP(2)-FACLOG(K)
+C calculation of elastic part
+ DTMP = -CHI2(KD)+CHITMP(1)+CHITMP(2)
+ IF(DTMP.LT.-30.D0) THEN
+ DTMP = 0.D0
+ ELSE
+ DTMP = EXP(DTMP)*FAC*AMPCOF(KD)
+ ENDIF
+ PROB(IP,IE,I,K) = PROB(IP,IE,I,K) + DTMP
+ 810 CONTINUE
+ 800 CONTINUE
+ 700 CONTINUE
+ PROB(IP,IE,0,0) = 0.D0
+C
+C**********************************************************
+ ELSE
+ WRITE(LO,'(1X,A,I3)')
+ & 'PHO_PRBDIS:ERROR: invalid setting of ISWMDL(1)',ISWMDL(1)
+ STOP
+ ENDIF
+ 5000 CONTINUE
+
+C debug output
+ IF(IDEB(55).GE.15) THEN
+ WRITE(LO,'(/,1X,A,I3,E11.4)')
+ & 'PHO_PRBDIS: list of probabilities (uncorrected,IP,ECM)',
+ & IP,ECM
+ DO 905 I=0,MIN(IMAX,5)
+ DO 915 K=0,MIN(KMAX,5)
+ IF(ABS(PROB(IP,IE,I,K)).GT.1.D-10)
+ & WRITE(LO,'(10X,2I3,5X,E12.3)') I,K,PROB(IP,IE,I,K)
+ 915 CONTINUE
+ 905 CONTINUE
+ ENDIF
+C string probability (uncorrected)
+ IF(IDEB(55).GE.5) THEN
+ DO 955 I=0,IMAX
+ DO 965 K=0,KMAX
+ INDX = 2*I+2*K
+ IF((INDX.LE.ICHMAX).AND.(INDX.GT.0)) THEN
+ PCHAIN(1,INDX) = PCHAIN(1,INDX) + PROB(IP,IE,I,K)
+ ENDIF
+ 965 CONTINUE
+ 955 CONTINUE
+ WRITE(LO,'(/1X,2A,E11.4)') 'PHO_PRBDIS: ',
+ & 'list of selected probabilities (uncorr,ECM)',ECM
+ WRITE(LO,'(10X,A)') 'I, 0HPOM, 1HPOM, 2HPOM'
+ DO 183 I=0,IIMAX
+ IF(ABS(PROB(IP,IE,I,0)).GT.1.D-10)
+ & WRITE(LO,'(5X,I4,3E12.4)') I,PROB(IP,IE,I,0),
+ & PROB(IP,IE,I,1),PROB(IP,IE,I,2)
+ 183 CONTINUE
+ ENDIF
+C substract high-mass single and double diffraction
+ PROB(IP,IE,1,0) = PROB(IP,IE,1,0)
+ & -(SIGHSD(1)+SIGHSD(2)+SIGHDD+SIGCDF(0))/SIGNDF
+ PROB(IP,IE,1,0) = MAX(0.01,PROB(IP,IE,1,0))
+C
+C probability check
+ CHKSUM = 0.D0
+ PRONEG = 0.D0
+ AVERI = 0.D0
+ AVERK = 0.D0
+ AVERL = 0.D0
+ AVERM = 0.D0
+ AVERN = 0.D0
+ SIGMI = 0.D0
+ SIGMK = 0.D0
+ SIGML = 0.D0
+ SIGMM = 0.D0
+ DO 1001 I=0,IMAX
+ PSOFT(I) = 0.D0
+ 1001 CONTINUE
+ DO 1002 K=0,KMAX
+ PHARD(K) = 0.D0
+ 1002 CONTINUE
+ DO 1000 K=0,KMAX
+ DO 1010 I=0,IMAX
+ TMP = PROB(IP,IE,I,K)
+ IF(TMP.LT.0.D0) THEN
+ IF((IDEB(55).GE.0).AND.(TMP.LT.-EPS)) THEN
+ WRITE(LO,'(1X,A,4I4,E14.4)')
+ & 'PHO_PRBDIS: neg.probability:',
+ & IP,IE,I,K,PROB(IP,IE,I,K)
+ ENDIF
+ PRONEG = PRONEG+TMP
+ TMP = 0.D0
+ ENDIF
+ CHKSUM = CHKSUM+TMP
+ AVERI = AVERI+DBLE(I)*TMP
+ AVERK = AVERK+DBLE(K)*TMP
+ SIGMI = SIGMI+DBLE(I**2)*TMP
+ SIGMK = SIGMK+DBLE(K**2)*TMP
+ PSOFT(I) = PSOFT(I)+PROB(IP,IE,I,K)
+ PHARD(K) = PHARD(K)+PROB(IP,IE,I,K)
+ PROB(IP,IE,I,K) = CHKSUM
+ 1010 CONTINUE
+ 1000 CONTINUE
+C
+ IF(IDEB(55).GE.1) WRITE(LO,'(/,1X,A,2E15.6)')
+ & 'PHO_PRBDIS: first sum of probabilities',CHKSUM,PRONEG
+C cut probabilites output
+ IF(IDEB(55).GE.5) THEN
+ WRITE(LO,'(/1X,A)') 'list of cut probabilities (uncorr/corr)'
+ DO 185 I=1,ICHMAX
+ IF(ABS(PCHAIN(1,I)).GT.1.D-10)
+ & WRITE(LO,'(5X,I4,2E12.3)') I,PCHAIN(1,I),PCHAIN(1,I)/CHKSUM
+ 185 CONTINUE
+ ENDIF
+C rescaling necessary
+ IF(ABS(CHKSUM-1.D0).GT.1.D-15) THEN
+ FAC = 1.D0/CHKSUM
+ IF(IDEB(55).GE.1) WRITE(LO,'(/,1X,A,E15.6)')
+ & 'PHO_PRBDIS: rescaling of probabilities with factor',FAC
+ DO 40 K=0,KMAX
+ DO 50 I=0,IMAX
+ PROB(IP,IE,I,K) = PROB(IP,IE,I,K)*FAC
+ 50 CONTINUE
+ 40 CONTINUE
+ AVERI = AVERI*FAC
+ AVERK = AVERK*FAC
+ AVERL = AVERL*FAC
+ AVERM = AVERM*FAC
+ SIGMI = SIGMI*FAC**2
+ SIGMK = SIGMK*FAC**2
+ SIGML = SIGML*FAC**2
+ SIGMM = SIGMM*FAC**2
+ ENDIF
+C
+C probability to find Reggeon/Pomeron
+ PROB(IP,IE,0,0) = -SIGREG/(SIGPOM+SIGREG)
+ AVERJ = -PROB(IP,IE,0,0)*AVERI
+ AVERII = AVERI-AVERJ
+C
+ SIGTAB(IP,74,IE) = AVERII
+ SIGTAB(IP,75,IE) = AVERK
+ SIGTAB(IP,76,IE) = AVERJ
+C
+ SIGTAB(IP,79,IE) = PROB(IP,IE,IMAX,0)*SIGNDF
+ SIGTAB(IP,80,IE) = SIGNDF-SIGTAB(IP,79,IE)
+C
+ IF(IDEB(55).GE.1) THEN
+
+C average interaction probabilities
+ WRITE(LO,'(/1X,A,/1X,A)')
+ & 'PHO_PRBDIS: expected interaction statistics',
+ & '-------------------------------------------'
+ WRITE(LO,'(1X,A,E12.4,2I3)')
+ & 'energy,IP,table index:',EPTAB(IP,IE),IP,IE
+ WRITE(LO,'(1X,A,2I4)') 'current limitations (soft,hard):',
+ & IMAX,KMAX
+ WRITE(LO,'(1X,A,E12.4/,4X,A,/,1X,6E11.3)')
+ & 'averaged number of cuts per event (eff. cs):',SIGNDF,
+ & ' (Pom / Pom-h / Reg / enh-tri-loop / enh-dble / sum):',
+ & AVERII,AVERK,AVERJ,AVERL,AVERM,
+ & AVERI+AVERK+AVERL+AVERM
+ WRITE(LO,'(1X,A,/,4X,A,/,1X,4E11.3)')
+ & 'standard deviation ( sqrt(sigma) ):',
+ & ' (Pomeron / Pomeron-h / enh-tri-loop / enh-dble):',
+ & SQRT(ABS(SIGMI-AVERI**2)),SQRT(ABS(SIGMK-AVERK**2)),
+ & SQRT(ABS(SIGML-AVERL**2)),SQRT(ABS(SIGMM-AVERM**2))
+ WRITE(LO,'(1X,A)') 'cross section / probability soft, hard'
+ DO I=0,MIN(IMAX,KMAX)
+ WRITE(LO,'(I5,2E12.4,3X,2E12.4)')
+ & I,PSOFT(I)*SIGNDF,PSOFT(I),PHARD(I)*SIGNDF,PHARD(I)
+ ENDDO
+
+C cross check of probability distribution and inclusive cross section
+ PSsum_1 = 0.D0
+ PSsum_2 = 0.D0
+ PHsum_1 = 0.D0
+ PHsum_2 = 0.D0
+ do i=1,IMAX
+ PSsum_1 = PSsum_1+PSOFT(i)*FAC
+ PSsum_2 = PSsum_2+PSOFT(i)*FAC*dble(i)
+ enddo
+ do k=1,KMAX
+ PHsum_1 = PHsum_1+PHARD(k)
+ PHsum_2 = PHsum_2+PHARD(k)*FAC*dble(k)
+ enddo
+ WRITE(LO,'(1x,a,2E12.4,3X,2E12.4)') 'sum:',
+ & PSsum_2*SIGNDF,PSsum_1,PHsum_2*SIGNDF,PHsum_1
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SAMPRO
+ SUBROUTINE PHO_SAMPRO(IP,IFP1,IFP2,ECM,PVIR1,PVIR2,SPROB,IPROC)
+C***********************************************************************
+C
+C routine to sample kind of process
+C
+C input: IP particle combination
+C IFP1/2 PDG number of particle 1/2
+C ECM c.m. energy (GeV)
+C PVIR1/2 virtuality of particle 1/2 (GeV**2, positive)
+C SPROB suppression factor for processes 1-7
+C due to rapidity gap survival probability
+C IPROC mode
+C -2 output of statistics
+C -1 initialization
+C 0 sampling of process
+C
+C output: IPROC kind of interaction process:
+C 1 non-diffractive resolved process
+C 2 elastic scattering
+C 3 quasi-elastic rho/omega/phi production
+C 4 central diffraction
+C 5 single diffraction according to IDIFF1
+C 6 single diffraction according to IDIFF2
+C 7 double diffraction
+C 8 single-resolved / direct processes
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ INTEGER IP,IFP1,IFP2,IPROC
+ DOUBLE PRECISION ECM,PVIR1,PVIR2,SPROB
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DOUBLE PRECISION PRO,XPROB,SIGSDI,CALLS,SIGSUM,ECMSUM
+ DIMENSION PRO(8,4),XPROB(8),SIGSDI(2)
+ DIMENSION CALLS(4),SIGSUM(4),ECMSUM(4)
+
+ INTEGER I,K,KMAX
+ DOUBLE PRECISION DT_RNDM
+ DOUBLE PRECISION SIGDDI,SIGHD,SIGHR,SIGNDR,XI
+
+ IF(IDEB(11).GE.15) WRITE(LO,'(/,1X,A,/5X,I3,2I6,1P4E11.3)')
+ & 'PHO_SAMPRO: called with IP,IFP1/2,ECM,PVIR1/2,SPROB',
+ & IP,IFP1,IFP2,ECM,PVIR1,PVIR2,SPROB
+
+ IF(IPROC.GE.0) THEN
+
+C interpolate cross sections
+ CALL PHO_CSINT(IP,IFP1,IFP2,-1,-1,ECM,PVIR1,PVIR2)
+
+C cross check
+ IF((IP.EQ.1).and.((SPROB.gt.1.D0).or.(SPROB.lt.0.D0))) THEN
+ WRITE(LO,'(/,1X,A,/5X,I12,I3,2I6,1P4E11.3)')
+ & 'PHO_SAMPRO: inconsistent gap survival probability',
+ & 'EVENT,IP,IFP1/2,ECM,PVIR1/2,SPROB:',
+ & KEVENT,IP,IFP1,IFP2,ECM,PVIR1,PVIR2,SPROB
+ ENDIF
+
+C calculate cumulative probabilities
+ IF(ISWMDL(1).EQ.3) THEN
+ IF(ISWMDL(2).GE.1) THEN
+ SIGSDI(1) = SIGLSD(1)+SIGHSD(1)
+ SIGSDI(2) = SIGLSD(2)+SIGHSD(2)
+ SIGDDI = SIGLDD+SIGHDD
+ SIGNDR = SIGINE-SIGVM(0,0)-SIGCDF(0)-SIGDIR
+ & - SIGSDI(1)-SIGSDI(2)-SIGDDI
+ XPROB(1) = SIGNDR*SPROB*DBLE(IPRON(1,IP))
+ XPROB(2) = XPROB(1)+SIGELA*SPROB*DBLE(IPRON(2,IP))
+ XPROB(3) = XPROB(2)+SIGVM(0,0)*SPROB*DBLE(IPRON(3,IP))
+ XPROB(4) = XPROB(3)+SIGCDF(0)*SPROB*DBLE(IPRON(4,IP))
+ XPROB(5) = XPROB(4)+SIGSDI(1)*SPROB*DBLE(IPRON(5,IP))
+ XPROB(6) = XPROB(5)+SIGSDI(2)*SPROB*DBLE(IPRON(6,IP))
+ XPROB(7) = XPROB(6)+SIGDDI*SPROB*DBLE(IPRON(7,IP))
+ XPROB(8) = XPROB(7)+SIGDIR*DBLE(IPRON(8,IP))
+ ELSE
+ SIGHR = 0.D0
+ IF(IPRON(1,IP).EQ.1) SIGHR = SIGHAR
+ SIGHD = 0.D0
+ IF(IPRON(8,IP).EQ.1) SIGHD = SIGDIR
+ XPROB(1) = SIGHR/(SIGHR+SIGHD)
+ XPROB(2) = XPROB(1)
+ XPROB(3) = XPROB(1)
+ XPROB(4) = XPROB(1)
+ XPROB(5) = XPROB(1)
+ XPROB(6) = XPROB(1)
+ XPROB(7) = XPROB(1)
+ XPROB(8) = XPROB(1)+SIGHD/(SIGHR+SIGHD)
+ ENDIF
+
+ IF(IDEB(11).GE.15) THEN
+ WRITE(LO,'(1X,A,I3)')
+ & 'PHO_SAMPRO: partial cross sections for IP',IP
+ WRITE(LO,'(5X,I3,2X,1PE12.4)') 1,XPROB(1)
+ DO 240 I=2,8
+ WRITE(LO,'(5X,I3,2X,1PE12.4)') I,XPROB(I)-XPROB(I-1)
+ 240 CONTINUE
+ ENDIF
+
+ ELSE
+ WRITE(LO,'(/,1X,A,I4)') 'PHO_SAMPRO:ERROR: unsupported model',
+ & ISWMDL(1)
+ CALL PHO_ABORT
+ ENDIF
+
+ IF(XPROB(8).LT.1.D-20) THEN
+ IF(IDEB(11).GE.2)
+ & WRITE(LO,'(1X,2A,/10X,A,1P3E11.3)') 'PHO_SAMPRO:ERROR: ',
+ & 'activated processes have vanishing cross section sum',
+ & 'IP,ECM,SIG_sum:',IP,ECM,XPROB(8)
+ IPROC = 0
+ RETURN
+ ENDIF
+
+C sample process
+ XI = DT_RNDM(XI)*XPROB(8)
+ DO 100 I=1,8
+ IF(XI.LE.XPROB(I)) GOTO 110
+ 100 CONTINUE
+ 110 CONTINUE
+ IPROC = MIN(I,8)
+
+ CALLS(IP) = CALLS(IP)+1.D0
+ PRO(IPROC,IP) = PRO(IPROC,IP)+1.D0
+ ECMSUM(IP) = ECMSUM(IP)+ECM
+ IF(ISWMDL(2).GE.1) THEN
+ SIGSUM(IP) = SIGSUM(IP)+XPROB(8)
+ ELSE
+ SIGSUM(IP) = SIGSUM(IP)+SIGGEN(3)
+ ENDIF
+
+C debug output
+ IF(IDEB(11).GE.5) WRITE(LO,'(1X,A,I3,I12,I4)')
+ & 'PHO_SAMPRO: IP,CALL,PROC-ID',
+ & IP,INT(CALLS(IP)+0.1D0),IPROC
+
+C statistics initialization
+ ELSE IF(IPROC.EQ.-1) THEN
+ DO 260 K=1,4
+ DO 250 I=1,8
+ PRO(I,K) = 0.D0
+ 250 CONTINUE
+ CALLS(K) = 0.D0
+ SIGSUM(K) = 0.D0
+ ECMSUM(K) = 0.D0
+ 260 CONTINUE
+
+C write out statistics
+ ELSE IF(IPROC.EQ.-2) THEN
+ KMAX = 4
+ IF(ISWMDL(2).EQ.0) KMAX=1
+ DO 270 K=1,KMAX
+ IF(CALLS(K).GT.0.5D0) THEN
+ SIGSUM(K) = SIGSUM(K)/CALLS(K)**2
+ ECMSUM(K) = ECMSUM(K)/CALLS(K)
+ IF(IDEB(11).GE.0) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/,1X,2A,I4,1PE12.3,/,1X,A)')
+C & 'PHO_SAMPRO: internal process statistics ',
+C & '(IP,<Ecm>)',K,ECMSUM(K),
+C & '---------------------------------------'
+C WRITE(LO,'(8X,A)')
+C & ' process sampled cross section'
+C IF(ISWMDL(2).GE.1) THEN
+C WRITE(LO,'(9(/5X,A,0PF12.0,5X,1PE12.3))')
+C & ' all processes',CALLS(K),CALLS(K)*SIGSUM(K),
+C & ' nondif.inelastic',PRO(1,K),PRO(1,K)*SIGSUM(K),
+C & ' elastic',PRO(2,K),PRO(2,K)*SIGSUM(K),
+C & 'vmeson production',PRO(3,K),PRO(3,K)*SIGSUM(K),
+C & ' double pomeron',PRO(4,K),PRO(4,K)*SIGSUM(K),
+C & ' single diffr.(1)',PRO(5,K),PRO(5,K)*SIGSUM(K),
+C & ' single diffr.(2)',PRO(6,K),PRO(6,K)*SIGSUM(K),
+C & ' double diffract.',PRO(7,K),PRO(7,K)*SIGSUM(K),
+C & ' direct processes',PRO(8,K),PRO(8,K)*SIGSUM(K)
+C ELSE
+C WRITE(LO,'(3(/5X,A,0PF12.0,5X,1PE12.3))')
+C & ' all processes',CALLS(K),CALLS(K)*SIGSUM(K),
+C & ' double resolved',PRO(1,K),PRO(1,K)*SIGSUM(K),
+C & ' single res + dir',PRO(8,K),PRO(8,K)*SIGSUM(K)
+C ENDIF
+ ENDIF
+ ENDIF
+ 270 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SAMPRB
+ SUBROUTINE PHO_SAMPRB(ECMI,IP,ISAM,JSAM,KSAM)
+C********************************************************************
+C
+C routine to sample number of cut graphs of different kind
+C
+C input: IP scattering particle combination
+C ECMI CMS energy
+C IP -1 initialization
+C -2 output of statistics
+C others sampling of cuts
+C
+C output: ISAM number of soft Pomerons cut
+C JSAM number of soft Reggeons cut
+C KSAM number of hard Pomerons cut
+C
+C PHO_PRBDIS has to be called before
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C cut probability distribution
+ INTEGER IEETA1,IIMAX,KKMAX
+ PARAMETER( IEETA1=20, IIMAX=20, KKMAX=20 )
+ INTEGER IEEMAX,IMAX,KMAX
+ REAL PROB
+ DOUBLE PRECISION EPTAB
+ COMMON /POPROB/ PROB(4,IEETA1,0:IIMAX,0:KKMAX),EPTAB(4,IEETA1),
+ & IEEMAX,IMAX,KMAX
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+
+ DIMENSION ECMS1(4),ECMS2(4),AVERB(0:3,4),AVERC(0:3,4)
+
+C sample number of interactions
+ IF(IP.GE.0) THEN
+ ITER = 0
+ ECMX = ECMI
+ ECMC = ECMI
+ KLIM = 1
+ IF((IPAMDL(13).GT.0).AND.(IPROCE.EQ.1).AND.(IPOIX3.EQ.0)) THEN
+ IF(IPAMDL(16).EQ.0) ECMC = SECM
+ KLIM = 0
+ ENDIF
+
+C sample up to kinematic limits only
+ IMAX1 = MIN(IMAX,INT(0.4D0*ECMC/PARMDL(161)))
+ IF(IMAX1.LT.1) THEN
+ IF(IPAMDL(2).EQ.1) THEN
+C reggeon allowed
+ ISAM = 0
+ JSAM = 1
+ KSAM = 0
+ AVERB(3,IP) = AVERB(3,IP)+1.D0
+ ELSE
+C only pomeron even at very low energies
+ ISAM = 1
+ JSAM = 0
+ KSAM = 0
+ AVERB(1,IP) = AVERB(1,IP)+1.D0
+ ENDIF
+ AVERB(0,IP) = AVERB(0,IP)+1.D0
+ GOTO 150
+ ENDIF
+C find interpolation factors
+ IF(ECMX.LE.EPTAB(IP,1)) THEN
+ I1 = 1
+ I2 = 1
+ ELSE IF(ECMX.LT.EPTAB(IP,IEEMAX)) THEN
+ DO 50 I=2,IEEMAX
+ IF(ECMX.LE.EPTAB(IP,I)) GOTO 200
+ 50 CONTINUE
+ 200 CONTINUE
+ I1 = I-1
+ I2 = I
+ ELSE
+ WRITE(LO,'(/1X,A,2E12.3)')
+ & 'PHO_SAMPRB:too high energy',ECMX,EPTAB(IP,IEEMAX)
+ CALL PHO_PREVNT(-1)
+ I1 = IEEMAX
+ I2 = IEEMAX
+ ENDIF
+ FAC2 = 0.D0
+ IF(I1.NE.I2)
+ & FAC2=LOG(ECMX/EPTAB(IP,I1))/LOG(EPTAB(IP,I2)/EPTAB(IP,I1))
+ FAC1=1.D0-FAC2
+C reggeon probability
+ PREG = -(PROB(IP,I1,0,0)*FAC1+PROB(IP,I2,0,0)*FAC2)
+C calculate soft suppression factor
+ IF(IP.EQ.1) FSUPP = PARMDL(35)**2
+ & /((PVIRT(1)+PARMDL(35))*(PVIRT(2)+PARMDL(35)))
+C
+ 10 CONTINUE
+ ITER = ITER+1
+ XI = DT_RNDM(FAC2)
+ DO 260 KSAM=0,KMAX
+ DO 270 ISAM=0,IMAX
+ PRO = PROB(IP,I1,ISAM,KSAM)*FAC1
+ & +PROB(IP,I2,ISAM,KSAM)*FAC2
+ IF(PRO.GT.XI) GOTO 100
+ 270 CONTINUE
+ 260 CONTINUE
+ ISAM = MIN(IMAX,ISAM)
+ KSAM = MIN(KMAX,KSAM)
+
+ 100 CONTINUE
+
+ IF(ITER.GT.100) THEN
+
+ ISAM = 0
+ JSAM = 1
+ KSAM = 0
+ IF(IDEB(12).GE.3) WRITE(LO,'(1X,A,I10,E11.3,I6)')
+ & 'PHO_SAMPRB: rejection (EV,ECM,ITER)',KEVENT,ECMX,ITER
+
+ ELSE
+
+C reggeon contribution
+ JSAM = 0
+ IF(IPAMDL(2).EQ.1) THEN
+ DO 90 I=1,ISAM
+ IF(DT_RNDM(PRO).LT.PREG) JSAM = JSAM+1
+ 90 CONTINUE
+ ISAM = ISAM-JSAM
+ ENDIF
+C statistics of bare cuts
+ IF(ITER.EQ.1) THEN
+ AVERB(0,IP) = AVERB(0,IP)+1.D0
+ AVERB(1,IP) = AVERB(1,IP)+DBLE(ISAM)
+ AVERB(2,IP) = AVERB(2,IP)+DBLE(KSAM)
+ AVERB(3,IP) = AVERB(3,IP)+DBLE(JSAM)
+ ENDIF
+C limitation given by field dimensions
+ IF((2*ISAM+JSAM+3*KSAM).GT.50) GOTO 10
+
+ IF(IP.EQ.1) THEN
+
+C reweight according to virtualities and PDF treatment
+ IF(IPAMDL(115).GE.1) THEN
+ IF(KSAM.EQ.0) THEN
+ IF(FSUP(1)*FSUP(2).LT.DT_RNDM(ECMI)) GOTO 10
+ ENDIF
+ ENDIF
+
+C reduce number of cuts according to photon virtualities
+ IF(IPAMDL(114).GE.1) THEN
+ 110 CONTINUE
+ I = ISAM+JSAM
+ WGX = FSUPP**I
+ IF(DT_RNDM(WGX).GT.WGX) THEN
+ IF(ISAM+JSAM+KSAM.GT.1) THEN
+ IF(JSAM.GT.0) THEN
+ JSAM = JSAM-1
+ GOTO 110
+ ELSE IF(ISAM.GT.0) THEN
+ ISAM = ISAM-1
+ GOTO 110
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+
+ ENDIF
+
+C phase space limitation
+ 120 CONTINUE
+ XM = DBLE(2*ISAM+JSAM)*PARMDL(160+IP)
+ & +DBLE(2*KSAM)*PTCUT(IP)
+ PACC = EXP(PARMDL(9)*(PARMDL(160+IP)-XM)/ECMC)
+ IF(DT_RNDM(XM).GT.PACC) THEN
+ IF(ISAM+JSAM+KSAM.GT.1) THEN
+ IF(JSAM.GT.0) THEN
+ JSAM = JSAM-1
+ GOTO 120
+ ELSE IF(ISAM.GT.0) THEN
+ ISAM = ISAM-1
+ GOTO 120
+ ELSE IF(KSAM.GT.KLIM) THEN
+ KSAM = KSAM-1
+ GOTO 120
+ ENDIF
+ ENDIF
+ ENDIF
+
+ ENDIF
+
+ ISAM = ISAM+JSAM/2
+ JSAM = MOD(JSAM,2)
+C collect statistics
+ 150 CONTINUE
+ ECMS1(IP) = ECMS1(IP)+ECMX
+ ECMS2(IP) = ECMS2(IP)+ECMC
+
+ AVERC(0,IP) = AVERC(0,IP)+1.D0
+ AVERC(1,IP) = AVERC(1,IP)+DBLE(ISAM)
+ AVERC(2,IP) = AVERC(2,IP)+DBLE(KSAM)
+ AVERC(3,IP) = AVERC(3,IP)+DBLE(JSAM)
+C
+ IF(IDEB(12).GE.10) WRITE(LO,'(1X,A,2E11.4,3I4)')
+ & 'PHO_SAMPRB: ECM,I,J,K',ECM,ECMX,ISAM,JSAM,KSAM
+C
+C initialize statistics
+ ELSE IF(IP.EQ.-1) THEN
+ DO 60 I=1,4
+ ECMS1(I) = 0.D0
+ ECMS2(I) = 0.D0
+ DO 65 K=0,3
+ AVERB(K,I) = 0.D0
+ AVERC(K,I) = 0.D0
+ 65 CONTINUE
+
+ 60 CONTINUE
+ RETURN
+C
+C write out statistics
+ ELSE IF(IP.EQ.-2) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(2(/1X,A))') 'PHO_SAMPRB: interaction statistics',
+C & '----------------------------------'
+ DO 70 I=1,4
+ IF(AVERB(0,I).LT.2.D0) GOTO 75
+C WRITE(LO,'(1X,A,I3,1P,2E13.3)')
+C & 'statistics for IP,<Ecm_1>,<Ecm_2>',I,
+C & ECMS1(I)/MAX(AVERB(0,I),1.D0),ECMS2(I)/MAX(AVERB(0,I),1.D0)
+C WRITE(LO,'(5X,A)')
+C & 'average number of s-pom,h-pom,reg cuts (bare)'
+C WRITE(LO,'(5X,F12.0,1P3E12.4)') AVERB(0,I),
+C & (AVERB(K,I)/AVERB(0,I),K=1,3)
+C WRITE(LO,'(5X,A)')
+C & 'average (with energy/virtuality corrections)'
+C WRITE(LO,'(5X,F12.0,1P3E12.4)') AVERC(0,I),
+C & (AVERC(K,I)/AVERC(0,I),K=1,3)
+
+ 75 CONTINUE
+ 70 CONTINUE
+ RETURN
+ ENDIF
+ END
+
+CDECK ID>, PHO_TRIREG
+ SUBROUTINE PHO_TRIREG(S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP,VIR2A,
+ & SIGTR,BTR)
+C**********************************************************************
+C
+C calculation of triple-Pomeron total cross section
+C according to Gribov's Regge theory
+C
+C input: S squared cms energy
+C GA coupling constant to diffractive line
+C AA slope related to GA (GeV**-2)
+C GB coupling constant to elastic line
+C BB slope related to GB (GeV**-2)
+C DELTA effective pomeron delta (intercept-1)
+C ALPHAP slope of pomeron trajectory (GeV**-2)
+C GPPP triple-Pomeron coupling
+C BPPP slope related to B0PPP (GeV**-2)
+C VIR2A virtuality of particle a (GeV**2)
+C note: units of all coupling constants are mb**1/2
+C
+C output: SIGTR total triple-Pomeron cross section
+C BTR effective triple-Pomeron slope
+C (differs from diffractive slope!)
+C
+C uses E_i (Exponential-Integral function)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (EPS =0.0001D0)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+C integration cut-off Sigma_U ( see Nucl.Phys.B97(1975)493 )
+ SIGU = 2.5
+C integration cut-off Sigma_L (min. squared mass of diff. blob)
+ SIGL = 5.+VIR2A
+C debug output
+ IF(IDEB(50).GE.10) WRITE(LO,'(1X,A,/1X,1P,9E10.3)')
+ & 'PHO_TRIREG: S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP ',
+ & S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP
+C
+ IF(S.LT.5.D0) THEN
+ SIGTR = 0.D0
+ BTR = BPPP+BB
+ RETURN
+ ENDIF
+C change units of ALPHAP to mb
+ ALSCA = ALPHAP*GEV2MB
+C
+C cross section
+ PART1=GA*GB**2*GPPP/(16.*PI*2.*ALSCA)*S**DELTA*
+ & EXP(-(BB+BPPP)/(2.*ALPHAP)*DELTA)
+ PART2=PHO_EXPINT(((BB+BPPP)/(2.*ALPHAP)+LOG(S/SIGL))*DELTA)
+ PART3=PHO_EXPINT(((BB+BPPP)/(2.*ALPHAP)+LOG(SIGU))*DELTA)
+C
+ SIGTR=PART1*(PART2-PART3)
+C
+C slope
+ PART1 = (BB+BPPP+2.*ALPHAP*LOG(S/SIGL))/
+ & (BB+BPPP+2.*ALPHAP*LOG(SIGU))
+ PART2 = LOG(PART1)
+ PART1 = 0.5D0*ALPHAP*LOG(1.D0+S/(SIGU*SIGL))/PART2
+ BTR = (AA+BB/2.D0)/2.D0+BPPP+ALPHAP*LOG(S/4.D0)
+ BTR = BTR-PART1
+C
+ IF(SIGTR.LT.EPS) SIGTR = 0.D0
+ IF(BTR.LT.BB) BTR = BB
+C
+ IF(IDEB(50).GE.7) WRITE(LO,'(1X,A,1P,3E12.3)')
+ & 'PHO_TRIREG: ENERGY,SIGTR,BTR ',SQRT(S),SIGTR,BTR
+ END
+
+CDECK ID>, PHO_LOOREG
+ SUBROUTINE PHO_LOOREG(S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP,
+ & VIR2A,VIR2B,SIGLO,BLO)
+C**********************************************************************
+C
+C calculation of loop-Pomeron total cross section
+C according to Gribov's Regge theory
+C
+C input: S squared cms energy
+C GA coupling constant to diffractive line
+C AA slope related to GA (GeV**-2)
+C GB coupling constant to elastic line
+C BB slope related to GB (GeV**-2)
+C DELTA effective pomeron delta (intercept-1)
+C ALPHAP slope of pomeron trajectory (GeV**-2)
+C GPPP triple-Pomeron coupling
+C BPPP slope related to B0PPP (GeV**-2)
+C VIR2A virtuality of particle a (GeV**2)
+C VIR2B virtuality of particle b (GeV**2)
+C note: units of all coupling constants are mb**1/2
+C
+C output: SIGLO total loop-Pomeron cross section
+C BLO effective loop-Pomeron slope
+C (differs from double diffractive slope!)
+C
+C uses E_i (Exponential-Integral function)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (EPS =0.0001D0)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+C integration cut-off Sigma_U ( see Nucl.Phys.B97(1975)493 )
+ SIGU = 2.5
+C integration cut-off Sigma_L (min. squared mass of diff. blob)
+ SIGL = 5.+VIR2A+VIR2B
+C debug output
+ IF(IDEB(51).GE.10) WRITE(LO,'(1X,A,/1X,1P,9E10.3)')
+ & 'PHO_LOOREG: S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP ',
+ & S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP
+C
+ IF(S.LT.5.D0) THEN
+ SIGLO = 0.D0
+ BLO = 2.D0*BPPP
+ RETURN
+ ENDIF
+
+C
+C change units of ALPHAP to mb
+ ALSCA = ALPHAP*GEV2MB
+C
+C cross section
+ PART1=GA*GB*GPPP**2/(16.*PI*2.*ALSCA)*S**DELTA*
+ & EXP(-DELTA*BPPP/ALPHAP)
+ PARTA=BPPP/ALPHAP+LOG(S/SIGL**2)
+ PARTB=BPPP/ALPHAP+LOG(SIGU)
+ SIGLO=PART1*(PARTA*(PHO_EXPINT(PARTA*DELTA)
+ & -PHO_EXPINT(PARTB*DELTA))
+ & +EXP(PARTA*DELTA)/DELTA-EXP(PARTB*DELTA)/DELTA
+ & )
+C
+C slope
+ PART1 = LOG(ABS(PARTA/PARTB))
+ & *(PARTA-LOG(1.D0+S/(SIGL**2*SIGU)))
+ PART1 = 0.25*ALPHAP*LOG(1.D0+S/(SIGU*SIGL))**2/PART1
+ BLO = (AA+BB)/2.+2.*BPPP+ALPHAP*LOG(S/4.D0)
+ BLO = BLO-PART1
+C
+ IF(SIGLO.LT.EPS) SIGLO = 0.D0
+ IF(BLO.LT.2.D0*BPPP) BLO = 2.D0*BPPP
+C
+ IF(IDEB(51).GE.7) WRITE(LO,'(1X,A,1P,3E12.3)')
+ & 'PHO_LOOREG: ENERGY,SIGLO,BLO',SQRT(S),SIGLO,BLO
+ END
+
+CDECK ID>, PHO_TRXPOM
+ SUBROUTINE PHO_TRXPOM(S,GA,AA,GB,BB,DELTA,ALPHAP,
+ & GPPP,BPPP,SIGDP,BDP)
+C**********************************************************************
+C
+C calculation of total cross section of two tripe-Pomeron
+C graphs in X configuration according to Gribov's Reggeon field
+C theory
+C
+C input: S squared cms energy
+C GA coupling constant to elastic line 1
+C AA slope related to GA (GeV**-2)
+C GB coupling constant to elastic line 2
+C BB slope related to GB (GeV**-2)
+C DELTA effective pomeron delta (intercept-1)
+C ALPHAP slope of pomeron trajectory (GeV**-2)
+C BPPP triple-Pomeron coupling
+C BTR slope related to B0PPP (GeV**-2)
+C note: units of all coupling constants are mb**1/2
+C
+C output: SIGDP total cross section for double-Pomeron
+C scattering
+C BDP effective double-Pomeron slope
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (EPS =0.0001D0)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DIMENSION XWGH1(96),XPOS1(96)
+
+C lower integration cut-off Sigma_L
+ SIGL = PARMDL(71)**2
+C upper integration cut-off Sigma_U
+ C = 1.D0-1.D0/PARMDL(70)**2
+ C = MAX(PARMDL(72),C)
+ SIGU = (1.D0-C)**2*S
+C integration precision
+ NGAUS1=16
+C
+C debug output
+ IF(IDEB(52).GE.10) WRITE(LO,'(1X,A,/1X,1P,9E10.3)')
+ & 'PHO_TRXPOM: S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP',
+ & S,GA,AA,GB,BB,DELTA,ALPHAP,GPPP,BPPP
+C
+ IF(SIGU.LE.SIGL) THEN
+ SIGDP = 0.D0
+ BDP = AA+BB
+ RETURN
+ ENDIF
+C
+C cross section
+C
+ XIL = LOG(SIGL)
+ XIU = LOG(SIGU)
+ XI = LOG(S)
+ FAC = (GPPP*GA*GB)**2/(256.D0*PI2)/ALPHAP/GEV2MB**2
+ ALPHA2 = 2.D0*ALPHAP
+ ALOC = LOG(1.D0/(1.D0-C))
+ CALL PHO_GAUSET(XIL,XIU,NGAUS1,XPOS1,XWGH1)
+ XSUM = 0.D0
+ DO 100 I1=1,NGAUS1
+ AMXSQ = EXP(XPOS1(I1))
+ ALOSMX = LOG(S/AMXSQ)
+ ALCSMX = LOG((1.D0-C)*S/AMXSQ)
+ W = LOG((AA+BPPP+ALPHA2*ALCSMX)/(BB+BPPP+ALPHA2*ALOC))
+ W = MAX(0.D0,W)
+ WN=(AA+BB+2.D0*BPPP+ALPHA2*ALOSMX)
+C supercritical part
+ WSC = AMXSQ**DELTA*(S/AMXSQ)**(2.D0*DELTA)
+ XSUM = XSUM + W*XWGH1(I1)/WN*WSC
+ 100 CONTINUE
+ SIGDP = XSUM*FAC
+C
+C slope
+ BDP = 0.5*(AA+BB+BPPP+ALPHAP*XI)
+C
+ IF(IDEB(52).GE.7) WRITE(LO,'(1X,A,1P,3E12.3)')
+ & 'PHO_TRXPOM: ENERGY,SIGDP,BDP',SQRT(S),SIGDP,BDP
+ END
+
+CDECK ID>, PHO_CHAN2A
+ SUBROUTINE PHO_CHAN2A(BB)
+C***********************************************************************
+C
+C simple two channel model to realize low mass diffraction
+C (version A, iteration of triple- and loop-Pomeron)
+C
+C input: BB impact parameter (mb**1/2)
+C
+C output: /POINT4/
+C AMPEL elastic amplitude
+C AMPVM(4,4) q-elastic VM production
+C AMLMSD(2) low mass single diffraction amplitude
+C AMHMSD(2) high mass single diffraction amplitude
+C AMLMDD low mass double diffraction amplitude
+C AMHMDD high mass double diffraction amplitude
+C AMPDP(4) central diffraction amplitude
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (DEPS = 1.D-5,
+ & EIGHT = 8.D0)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C complex Born graph amplitudes used for unitarization
+ COMPLEX*16 AMPEL,AMPVM,AMPSOF,AMPHAR,AMLMSD,AMHMSD,AMLMDD,
+ & AMHMDD,AMPDP
+ COMMON /POINT4/ AMPEL,AMPVM(4,4),AMPSOF,AMPHAR,AMLMSD(2),
+ & AMHMSD(2),AMLMDD,AMHMDD,AMPDP(4)
+C unitarized amplitudes for different diffraction channels
+ DOUBLE PRECISION ZXP,BXP,ZXR,BXR,ZXH,BXH,ZXD,BXD,
+ & ZXT1A,BXT1A,ZXT1B,BXT1B,ZXT2A,BXT2A,ZXT2B,BXT2B,
+ & ZXDPE,BXDPE,ZXDPA,BXDPA,ZXDPB,BXDPB,ZXDPD,BXDPD,
+ & ZXL,BXL
+ COMMON /POINT5/ ZXP(4,4),BXP(4,4),ZXR(4,4),BXR(4,4),
+ & ZXH(4,4),BXH(4,4),ZXD(4,4),BXD(4,4),
+ & ZXT1A(4,4),BXT1A(4,4),ZXT1B(4,4),BXT1B(4,4),
+ & ZXT2A(4,4),BXT2A(4,4),ZXT2B(4,4),BXT2B(4,4),
+ & ZXDPE(4,4),BXDPE(4,4),ZXDPA(4,4),BXDPA(4,4),
+ & ZXDPB(4,4),BXDPB(4,4),ZXDPD(4,4),BXDPD(4,4),
+ & ZXL(4,4),BXL(4,4)
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+
+C local variables
+ DIMENSION AB(9,4),CHI(4),CHDS(4),CHDH(4),CHDA(4),CHDB(4),
+ & CHDD(4),CHDPE(4),CHDPA(4),CHDPB(4),CHDPD(4),
+ & AMPCHA(4),EX1CHI(4),EX2CHI(4),ABSUM(4),AMPELA(4,0:9)
+ DIMENSION CHIFAC(4,4),EXPFAC(4,4),IELTAB(4,4)
+
+C combinatorical factors
+ DATA CHIFAC / 1.D0, 1.D0,-1.D0,-1.D0,
+ & 1.D0,-1.D0, 1.D0,-1.D0,
+ & 1.D0,-1.D0,-1.D0, 1.D0,
+ & 1.D0, 1.D0, 1.D0, 1.D0 /
+ DATA EXPFAC / 1.D0, 1.D0, 1.D0, 1.D0,
+ & 1.D0,-1.D0,-1.D0, 1.D0,
+ & -1.D0, 1.D0,-1.D0, 1.D0,
+ & -1.D0,-1.D0, 1.D0, 1.D0 /
+ DATA IELTAB / 1, 2, 3, 4,
+ & 2, 1, 4, 3,
+ & 3, 4, 1, 2,
+ & 4, 3, 2, 1 /
+
+ IF(IDEB(86).GE.20) WRITE(LO,'(1X,A,E12.3)')
+ & 'PHO_CHAN2A: impact parameter B',BB
+
+ B24 = BB**2/4.D0
+ DO 25 I=1,4
+ AB(1,I) = ZXP(1,I)*EXP(-B24/BXP(1,I))
+ & +ZXR(1,I)*EXP(-B24/BXR(1,I))
+ AB(2,I) = ZXH(1,I)*EXP(-B24/BXH(1,I))
+ AB(3,I) =-ZXT1A(1,I)*EXP(-B24/BXT1A(1,I))
+ AB(4,I) =-ZXT2A(1,I)*EXP(-B24/BXT2A(1,I))
+ AB(5,I) =-ZXL(1,I)*EXP(-B24/BXL(1,I))
+ & -ZXT1B(1,I)*EXP(-B24/BXT1B(1,I))
+ & -ZXT2B(1,I)*EXP(-B24/BXT2B(1,I))
+ AB(6,I) = ZXDPE(1,I)*EXP(-B24/BXDPE(1,I))
+ AB(7,I) = ZXDPA(1,I)*EXP(-B24/BXDPA(1,I))
+ AB(8,I) = ZXDPB(1,I)*EXP(-B24/BXDPB(1,I))
+ AB(9,I) = ZXDPD(1,I)*EXP(-B24/BXDPD(1,I))
+ 25 CONTINUE
+
+ DO 50 I=1,4
+ ABSUM(I) = 0.D0
+ DO 75 II=9,1,-1
+ ABSUM(I) = ABSUM(I) + AB(II,I)
+ 75 CONTINUE
+ 50 CONTINUE
+ IF(IDEB(86).GE.20) WRITE(LO,'(1X,A,4E12.3)')
+ & 'PHO_CHAN2A: ABSUM',ABSUM
+
+ DO 100 I=1,4
+ CHI(I) = 0.D0
+ CHDS(I) = 0.D0
+ CHDH(I) = 0.D0
+ CHDA(I) = 0.D0
+ CHDB(I) = 0.D0
+ CHDD(I) = 0.D0
+ CHDPE(I) = 0.D0
+ CHDPA(I) = 0.D0
+ CHDPB(I) = 0.D0
+ CHDPD(I) = 0.D0
+ AMPELA(I,0) = 0.D0
+ AMPELA(I,9) = 0.D0
+ DO 200 K=1,4
+ AMPELA(I,K) = 0.D0
+ AMPELA(I,K+4) = 0.D0
+ AMPVM(I,K) = 0.D0
+ CHI(I) = CHI(I) + CHIFAC(K,I)*ABSUM(K)
+ CHDS(I) = CHDS(I) + CHIFAC(K,I)*AB(1,K)
+ CHDH(I) = CHDH(I) + CHIFAC(K,I)*AB(2,K)
+ CHDA(I) = CHDA(I) + CHIFAC(K,I)*AB(3,K)
+ CHDB(I) = CHDB(I) + CHIFAC(K,I)*AB(4,K)
+ CHDD(I) = CHDD(I) + CHIFAC(K,I)*AB(5,K)
+ CHDPE(I) = CHDPE(I) + CHIFAC(K,I)*AB(6,K)
+ CHDPA(I) = CHDPA(I) + CHIFAC(K,I)*AB(7,K)
+ CHDPB(I) = CHDPB(I) + CHIFAC(K,I)*AB(8,K)
+ CHDPD(I) = CHDPD(I) + CHIFAC(K,I)*AB(9,K)
+ 200 CONTINUE
+ IF(CHI(I).LT.-DEPS) THEN
+ IF(IDEB(86).GE.0) THEN
+ WRITE(LO,'(1X,A,I3,2E12.3)')
+ & 'PHO_CHAN2A: neg.eigenvalue (I,B,CHI)',I,BB,CHI(I)
+ WRITE(LO,'(5X,A,5E12.3)') 'E,CHIs:',ECM,(ABSUM(K),K=1,4)
+ ENDIF
+ ENDIF
+ IF(ABS(CHI(I)).GT.200.D0) THEN
+ EX1CHI(I) = 0.D0
+ EX2CHI(I) = 0.D0
+ ELSE
+ TMP = EXP(-CHI(I))
+ EX1CHI(I) = TMP
+ EX2CHI(I) = TMP*TMP
+ ENDIF
+ 100 CONTINUE
+ IF(IDEB(86).GE.20) THEN
+ WRITE(LO,'(1X,A,4E12.3)') 'PHO_CHAN2A: EX1CHI',EX1CHI
+ ENDIF
+
+ AMPELA(1,0) = 4.D0
+ DO 300 K=1,4
+ DO 400 J=1,4
+ CFAC = 2.D0*EXPFAC(J,K)*EX2CHI(J)
+ AMPELA(K,0) = AMPELA(K,0) - EXPFAC(J,K)*EX1CHI(J)
+ AMPELA(K,1) = AMPELA(K,1) + CFAC*CHDS(J)
+ AMPELA(K,2) = AMPELA(K,2) + CFAC*CHDH(J)
+ AMPELA(K,3) = AMPELA(K,3) - CFAC*CHDA(J)
+ AMPELA(K,4) = AMPELA(K,4) - CFAC*CHDB(J)
+ AMPELA(K,5) = AMPELA(K,5) - CFAC*CHDD(J)
+ AMPELA(K,6) = AMPELA(K,6) + CFAC*CHDPE(J)
+ AMPELA(K,7) = AMPELA(K,7) + CFAC*CHDPA(J)
+ AMPELA(K,8) = AMPELA(K,8) + CFAC*CHDPB(J)
+ AMPELA(K,9) = AMPELA(K,9) + CFAC*CHDPD(J)
+ 400 CONTINUE
+ 300 CONTINUE
+
+ IF(IDEB(86).GE.25) THEN
+ DO 305 I=1,9
+ WRITE(LO,'(1X,A,I3,4E10.3)') 'PHO_CHAN2A: AMPELA(1-4,I)',I,
+ & (AMPELA(K,1),K=1,4)
+ 305 CONTINUE
+ ENDIF
+
+C VDM factors --> amplitudes
+C low mass excitations
+ DO 500 I=1,4
+ AMPCHA(I) = 0.D0
+ DO 600 K=1,4
+ AMPCHA(I) = AMPCHA(I) + AMPFAC(K)*AMPELA(IELTAB(K,I),0)
+ 600 CONTINUE
+ 500 CONTINUE
+ AMPVME = AMPCHA(1)/EIGHT
+ AMLMSD(1) = AMPCHA(2)/EIGHT
+ AMLMSD(2) = AMPCHA(3)/EIGHT
+ AMLMDD = AMPCHA(4)/EIGHT
+C elastic part, high mass diffraction
+ AMPEL = 0.5D0*ZXD(1,1)*EXP(-B24/BXD(1,1))
+ AMPSOF = 0.D0
+ AMPHAR = 0.D0
+ AMHMSD(1) = 0.D0
+ AMHMSD(2) = 0.D0
+ AMHMDD = 0.D0
+ AMPDP(1) = 0.D0
+ AMPDP(2) = 0.D0
+ AMPDP(3) = 0.D0
+ AMPDP(4) = 0.D0
+ DO 450 I=1,4
+ AMPEL = AMPEL + ELAFAC(I)*AMPELA(I,0)/8.D0
+ AMPSOF = AMPSOF + ELAFAC(I)*AMPELA(I,1)
+ AMPHAR = AMPHAR + ELAFAC(I)*AMPELA(I,2)
+ AMHMSD(1) = AMHMSD(1) + ELAFAC(I)*AMPELA(I,3)
+ AMHMSD(2) = AMHMSD(2) + ELAFAC(I)*AMPELA(I,4)
+ AMHMDD = AMHMDD + ELAFAC(I)*AMPELA(I,5)
+ AMPDP(1) = AMPDP(1) + ELAFAC(I)*AMPELA(I,6)
+ AMPDP(2) = AMPDP(2) + ELAFAC(I)*AMPELA(I,7)
+ AMPDP(3) = AMPDP(3) + ELAFAC(I)*AMPELA(I,8)
+ AMPDP(4) = AMPDP(4) + ELAFAC(I)*AMPELA(I,9)
+ 450 CONTINUE
+ AMPSOF = AMPSOF/16.D0
+ AMPHAR = AMPHAR/16.D0
+ AMHMSD(1) = AMHMSD(1)/16.D0
+ AMHMSD(2) = AMHMSD(2)/16.D0
+ AMHMDD = AMHMDD/16.D0
+ AMPDP(1) = AMPDP(1)/16.D0
+ AMPDP(2) = AMPDP(2)/16.D0
+ AMPDP(3) = AMPDP(3)/16.D0
+ AMPDP(4) = AMPDP(4)/16.D0
+ IF(DREAL(AMHMSD(1)).LE.0.D0) AMHMSD(1) = 0.D0
+ IF(DREAL(AMHMSD(2)).LE.0.D0) AMHMSD(2) = 0.D0
+ IF(DREAL(AMHMDD).LE.0.D0) AMHMDD = 0.D0
+ IF(DREAL(AMPDP(1)).LE.0.D0) AMPDP(1) = 0.D0
+ IF(DREAL(AMPDP(2)).LE.0.D0) AMPDP(2) = 0.D0
+ IF(DREAL(AMPDP(3)).LE.0.D0) AMPDP(3) = 0.D0
+ IF(DREAL(AMPDP(4)).LE.0.D0) AMPDP(4) = 0.D0
+
+C vector-meson production, weight factors
+ IF((IFPAP(1).EQ.22).OR.(IFPAP(2).EQ.22)) THEN
+ IF(IFPAP(1).EQ.22) THEN
+ IF(IFPAP(2).EQ.22) THEN
+ DO 10 I=1,4
+ DO 15 J=1,4
+ AMPVM(I,J) = PARMDL(9+I)*PARMDL(9+J)*AMPVME
+ 15 CONTINUE
+ 10 CONTINUE
+ ELSE
+ AMPVM(1,1) = PARMDL(10)*AMPVME
+ AMPVM(2,1) = PARMDL(11)*AMPVME
+ AMPVM(3,1) = PARMDL(12)*AMPVME
+ AMPVM(4,1) = PARMDL(13)*AMPVME
+ ENDIF
+ ELSE IF(IFPAP(2).EQ.22) THEN
+ AMPVM(1,1) = PARMDL(10)*AMPVME
+ AMPVM(1,2) = PARMDL(11)*AMPVME
+ AMPVM(1,3) = PARMDL(12)*AMPVME
+ AMPVM(1,4) = PARMDL(13)*AMPVME
+ ENDIF
+ ENDIF
+C debug output
+ IF(IDEB(86).GE.5) THEN
+ WRITE(LO,'(/,1X,A)')
+ & 'PHO_CHAN2A: impact parameter amplitudes'
+ WRITE(LO,'(1X,A,1P,2E12.3)') ' AMPEL',AMPEL
+ WRITE(LO,'(1X,A,1P,8E10.3)') 'AMPVM(1,1-4)',(AMPVM(1,K),K=1,4)
+ WRITE(LO,'(1X,A,1P,8E10.3)') 'AMPVM(2,1-4)',(AMPVM(2,K),K=1,4)
+ WRITE(LO,'(1X,A,1P,8E10.3)') 'AMPVM(3,1-4)',(AMPVM(3,K),K=1,4)
+ WRITE(LO,'(1X,A,1P,8E10.3)') 'AMPVM(4,1-4)',(AMPVM(4,K),K=1,4)
+ WRITE(LO,'(1X,A,1P,4E12.3)') ' AMPSOF/HAR',AMPSOF,AMPHAR
+ WRITE(LO,'(1X,A,1P,4E12.3)') ' AMLMSD',AMLMSD
+ WRITE(LO,'(1X,A,1P,4E12.3)') ' AMHMSD',AMHMSD
+ WRITE(LO,'(1X,A,1P,2E12.3)') ' AMLMDD',AMLMDD
+ WRITE(LO,'(1X,A,1P,2E12.3)') ' AMHMDD',AMHMDD
+ WRITE(LO,'(1X,A,1P,8E10.3)') ' AMPDP(1-4)',AMPDP
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_EVENT
+ SUBROUTINE PHO_EVENT(NEV,P1,P2,FAC,IREJ)
+C********************************************************************
+C
+C main subroutine to manage simulation processes
+C
+C input: NEV -1 initialization
+C 1 generation of events
+C 2 generation of events without rejection
+C due to energy dependent cross section
+C 3 generation of events without rejection
+C using initialization energy
+C -2 output of event generation statistics
+C P1(4) momentum of particle 1 (internal TARGET)
+C P2(4) momentum of particle 2 (internal PROJECTILE)
+C FAC used for initialization:
+C contains cross section the events corresponds to
+C during generation: current cross section
+C
+C output: IREJ 0: event accepted
+C 1: event rejected
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY = 1.D-10 )
+
+ DIMENSION P1(4),P2(4)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+
+ DIMENSION IPRSAM(10),IPRACC(10),IENACC(10),IDNS(4),IDNA(4)
+
+ IREJ = 0
+
+C initializations
+ IF(NEV.EQ.-1) THEN
+ WRITE(LO,'(/3(/1X,A))')
+ & '=======================================================',
+ & ' ------- initialization of event generation --------',
+ & '======================================================='
+ CALL PHO_SETMDL(0,0,-2)
+C amplitude parameters
+ CALL PHO_FITPAR(1)
+
+ CALL PHO_REJSTA(-1)
+C initialize MC package
+ CALL PHO_EVEINI(1,P1,P2,JM1,JM2)
+ CALL PHO_MCINI
+ CALL PHO_SAMPRO(1,IFPAP(1),IFPAP(2),ECM,PVIRT(1),PVIRT(2),
+ & 0.D0,-1)
+ CALL PHO_PARTON(-1,0,0,P1,P2,IREJ)
+
+C cross section
+ FAC = SIGGEN(4)
+ DO 20 I=1,10
+ IPRSAM(I) = 0
+ IPRACC(I) = 0
+ IENACC(I) = 0
+ 20 CONTINUE
+ ISPS = 0
+ ISPA = 0
+ ISRS = 0
+ ISRA = 0
+ IHPS = 0
+ IHPA = 0
+ ISTS = 0
+ ISTA = 0
+ ISLS = 0
+ ISLA = 0
+ IDIS = 0
+ IDIA = 0
+ IDPS = 0
+ IDPA = 0
+ IDNS(1) = 0
+ IDNS(2) = 0
+ IDNS(3) = 0
+ IDNS(4) = 0
+ IDNA(1) = 0
+ IDNA(2) = 0
+ IDNA(3) = 0
+ IDNA(4) = 0
+ KACCEP = 0
+ KEVENT = 0
+ KEVGEN = 0
+ ECMSUM = 0.D0
+ ELSE IF(NEV.GT.0) THEN
+C
+C -------------- begin event generation ---------------
+C
+ IPAMDL(13) = 0
+ IF(NEV.EQ.3) IPAMDL(13) = 1
+ KEVENT = KEVENT+1
+C enable debugging
+ CALL PHO_TRACE(0,0,0)
+ IF(IDEB(68).GE.2) THEN
+ IF((MOD(KEVENT,50).EQ.0).OR.(IDEB(68).GE.3))
+ & WRITE(LO,'(1X,A,2I12)') 'call to PHO_EVENT no',KEVENT,KACCEP
+ ENDIF
+ CALL PHO_EVEINI(0,P1,P2,JM1,JM2)
+C cross section calculation
+ FAC = SIGGEN(3)
+ IF(NEV.EQ.1) THEN
+ IF(IVWGHT(1).EQ.1) THEN
+ WG = EVWGHT(1)*SIGGEN(3)/SIGGEN(4)
+ ELSE
+ WG = SIGGEN(3)/SIGGEN(4)
+ ENDIF
+ IF(DT_RNDM(FAC).GT.WG) THEN
+ IREJ = 1
+ IF(IDEB(68).GE.6) THEN
+ WRITE(LO,'(1X,2A,/5X,2I10,6X,1P3E10.3)')
+ & 'PHO_EVENT: rejection due to cross section',
+ & ' (CALL/ACC/EVWGHT(1)/SIG/SIGMAX)',
+ & KEVENT,KACCEP,EVWGHT(1),SIGGEN(3),SIGGEN(4)
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ ENDIF
+ KEVGEN = KEVGEN+1
+ SIGGEN(1) = SIGGEN(4)*DBLE(KEVGEN)/DBLE(KEVENT)
+ HSWGHT(0) = MAX(1.D0,WG)
+
+ ITRY1 = 0
+ 50 CONTINUE
+ ITRY1 = ITRY1+1
+ IF(ITRY1.GT.1) CALL PHO_EVEINI(2,P1,P2,JM1,JM2)
+
+C sample process
+ IPROCE = 0
+ CALL PHO_SAMPRO(1,IFPAP(1),IFPAP(2),ECM,PVIRT(1),PVIRT(2),
+ & 1.D0,IPROCE)
+ IF(IPROCE.EQ.0) THEN
+ IF(IDEB(68).GE.4) WRITE(LO,'(1X,A)') 'PHO_EVENT: ',
+ & 'rejection by PHO_SAMPRO (call,Ecm)',KEVENT,ECM
+ IREJ = 50
+ RETURN
+ ENDIF
+C sampling statistics
+ IPRSAM(IPROCE) = IPRSAM(IPROCE)+1
+
+ ITRY2 = 0
+ 60 CONTINUE
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GT.1) CALL PHO_EVEINI(2,P1,P2,JM1,JM2)
+C sample number of cut graphs according to IPROCE and
+C generate parton configurations+strings
+ CALL PHO_PARTON(IPROCE,JM1,JM2,P1,P2,IREJ)
+C collect statistics
+ ISPS = ISPS+KSPOM
+ IHPS = IHPS+KHPOM
+ ISRS = ISRS+KSREG
+ ISTS = ISTS+KSTRG+KHTRG
+ ISLS = ISLS+KSLOO+KHLOO
+ IDIS = IDIS+MIN(KHDIR,1)
+ IDPS = IDPS+KHDPO+KSDPO
+ IF((IDIFR1+IDIFR2+IDDPOM.EQ.0).AND.(KHDIR.GT.0))
+ & IDNS(KHDIR) = IDNS(KHDIR)+1
+C rejection?
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(68).GE.4) THEN
+ WRITE(LO,'(/1X,A,2I5)')
+ & 'PHO_EVENT: rejection by PHO_PARTON',ITRY2,IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ IF((IREJ.EQ.50).AND.(NEV.EQ.1)) THEN
+ RETURN
+ ENDIF
+ IFAIL(1) = IFAIL(1)+1
+ IF(ITRY1.GT.5) RETURN
+ IF(IREJ.GE.5) THEN
+ IF(ISWMDL(2).EQ.0) RETURN
+ GOTO 50
+ ENDIF
+ IF(ITRY2.LT.5) GOTO 60
+ GOTO 50
+ ENDIF
+C fragmentation of strings
+
+C FSR and string fragmentation is done separately by DPMJET routines
+C CALL PHO_STRFRA(IREJ)
+
+C rejection?
+ IF(IREJ.NE.0) THEN
+ IFAIL(23) = IFAIL(23)+1
+ IF(IDEB(68).GE.4) THEN
+ WRITE(LO,'(/1X,A,2I5)')
+ & 'PHO_EVENT: rejection by PHO_STRFRA',ITRY2,IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ GOTO 50
+ ENDIF
+C check of conservation of quantum numbers
+ IF(IDEB(68).GE.-5) THEN
+ CALL PHO_CHECK(-1,IREJ)
+ IF(IREJ.NE.0) GOTO 50
+ ENDIF
+C event now completely processed and accepted
+C acceptance statistics
+ IPRACC(IPROCE) = IPRACC(IPROCE)+1
+ ISPA = ISPA+KSPOM
+ IHPA = IHPA+KHPOM
+ ISRA = ISRA+KSREG
+ ISTA = ISTA+(KSTRG+KHTRG)
+ ISLA = ISLA+(KSLOO+KHLOO)
+ IDIA = IDIA+MIN(KHDIR,1)
+ IDPA = IDPA+KHDPO+KSDPO
+ IF((IDIFR1+IDIFR2.EQ.0).AND.(KHDIR.GT.0))
+ & IDNA(KHDIR) = IDNA(KHDIR)+1
+ DO 55 I=1,IPOIX2
+ IENACC(IPORES(I)) = IENACC(IPORES(I))+1
+ 55 CONTINUE
+ KACCEP = KACCEP+1
+
+C debug output (partial / full event listing)
+ if((IDEB(68).eq.1).and.(MOD(KACCEP,50).EQ.0))
+ & WRITE(LO,'(1X,A,2I12)') 'call to PHO_EVENT no',KEVENT,KACCEP
+ IF(IDEB(67).GE.10) THEN
+ IF(IDEB(67).LE.15) THEN
+ CALL PHO_PREVNT(-1)
+ ELSE IF(IDEB(67).LE.20) THEN
+ CALL PHO_PREVNT(0)
+ ELSE IF(IDEB(67).LE.25) THEN
+ CALL PHO_PREVNT(1)
+ ELSE
+ CALL PHO_PREVNT(2)
+ ENDIF
+ ENDIF
+C
+C effective weight
+ DO 65 I=1,10
+ IF(IPOWGC(I).GT.0) THEN
+ HSWGHT(0) = HSWGHT(0)*HSWGHT(I)
+ ENDIF
+ 65 CONTINUE
+ IF(IVWGHT(1).EQ.1) THEN
+ WG = HSWGHT(0)
+ IF(WG.GT.1.01D0) THEN
+ IF(EVWGHT(1).LT.1.01D0) THEN
+ WRITE(LO,'(1X,A,2I12,1PE12.3)')
+ & 'PHO_EVENT: cross section weight > 1',
+ & KEVENT,KACCEP,WG
+ WRITE(LO,'(5X,A,1P3E11.3)') 'SIGCUR,SIGMAX,EVWGHT(1):',
+ & SIGGEN(3),SIGGEN(4),EVWGHT(1)
+ ENDIF
+ EVWGHT(1) = HSWGHT(0)
+ HSWGHT(0) = 1.D0
+ ELSE
+ EVWGHT(1) = 1.D0
+ ENDIF
+ ENDIF
+
+C effective cross section
+ SIGGEN(2) = SIGGEN(4)*DBLE(KACCEP)/DBLE(KEVENT)
+ ECMSUM = ECMSUM+ECM
+ SIGGEN(3) = SIGGEN(3)*HSWGHT(0)
+ ELSE IF(NEV.EQ.-2) THEN
+
+C ---------------- end of event generation ----------------------
+
+* --- Commented by Chiara
+* WRITE(LO,'(/3(/1X,A),//1X,A,3I12,/1X,A,F12.1)')
+* & '====================================================',
+* & ' --------- summary of event generation ----------',
+* & '====================================================',
+* & 'called,generated,accepted events:',KEVENT,KEVGEN,KACCEP,
+* & 'average CMS energy:',ECMSUM/DBLE(MAX(1,KACCEP))
+
+C write out statistics
+ IF(KACCEP.GT.0) THEN
+
+ FAC1 = SIGGEN(4)/DBLE(KEVENT)
+ FAC2 = FAC/DBLE(KACCEP)
+* WRITE(LO,'(/1X,A,/1X,A)')
+* & 'PHO_EVENT: generated and accepted events',
+* & '----------------------------------------'
+* WRITE(LO,'(3X,A)')
+* & 'process, sampled, accepted, cross section (internal/external)'
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'non.diff.',IPRSAM(1),
+* & IPRACC(1),DBLE(IPRACC(1))*FAC1,DBLE(IPRACC(1))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'elas sca.',IPRSAM(2),
+* & IPRACC(2),DBLE(IPRACC(2))*FAC1,DBLE(IPRACC(2))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'qela sca.',IPRSAM(3),
+* & IPRACC(3),DBLE(IPRACC(3))*FAC1,DBLE(IPRACC(3))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'doub.pom.',IPRSAM(4),
+* & IPRACC(4),DBLE(IPRACC(4))*FAC1,DBLE(IPRACC(4))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'diff.par1',IPRSAM(5),
+* & IPRACC(5),DBLE(IPRACC(5))*FAC1,DBLE(IPRACC(5))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'diff.par2',IPRSAM(6),
+* & IPRACC(6),DBLE(IPRACC(6))*FAC1,DBLE(IPRACC(6))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'doub.dif.',IPRSAM(7),
+* & IPRACC(7),DBLE(IPRACC(7))*FAC1,DBLE(IPRACC(7))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'dir all ',IPRSAM(8),
+* & IPRACC(8),DBLE(IPRACC(8))*FAC1,DBLE(IPRACC(8))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'dir X res',IDNS(1),IDNA(1),
+* & DBLE(IDNA(1))*FAC1,DBLE(IDNA(1))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'res X dir',IDNS(2),IDNA(2),
+* & DBLE(IDNA(2))*FAC1,DBLE(IDNA(2))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'dir X dir',IDNS(3),IDNA(3),
+* & DBLE(IDNA(3))*FAC1,DBLE(IDNA(3))*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'soft pom.',ISPS,ISPA,
+* & DBLE(ISPA)*FAC1,DBLE(ISPA)*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'hard pom.',IHPS,IHPA,
+* & DBLE(IHPA)*FAC1,DBLE(IHPA)*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'soft reg.',ISRS,ISRA,
+* & DBLE(ISRA)*FAC1,DBLE(ISRA)*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'enh. trg.',ISTS,ISTA,
+* & DBLE(ISTA)*FAC1,DBLE(ISTA)*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'enh. log.',ISLS,ISLA,
+* & DBLE(ISLA)*FAC1,DBLE(ISLA)*FAC2
+* WRITE(LO,'(3X,A,2I12,1P2E13.3)') 'doub.pom.',IDPS,IDPA,
+* & DBLE(IDPA)*FAC1,DBLE(IDPA)*FAC2
+C *** commented by Chiara
+C IF(ISWMDL(14).GT.0) THEN
+C WRITE(LO,'(3X,A,I3)') 'recursive pomeron splitting:',
+C & ISWMDL(14)
+C WRITE(LO,'(5X,A,I12)') '1->2pom-cut :',IENACC(8)
+C WRITE(LO,'(5X,A,I12)') '1->doub-pom :',IENACC(4)
+C WRITE(LO,'(5X,A,I12)') '1->diff-dis1:',IENACC(5)
+C WRITE(LO,'(5X,A,I12)') '1->diff-dis2:',IENACC(6)
+C WRITE(LO,'(5X,A,I12)') '1->doub-diff:',IENACC(7)
+C ENDIF
+* WRITE(LO,'(2(/1X,A,1PE12.3)/)') ' sampled cross section (mb)',
+* & SIGGEN(1),'accepted cross section (mb)',SIGGEN(2)
+
+ CALL PHO_REJSTA(-2)
+ CALL PHO_SAMPRO(1,IFPAP(1),IFPAP(2),ECM,PVIRT(1),PVIRT(2),
+ & 0.D0,-2)
+ CALL PHO_PARTON(-2,0,0,P1,P2,IREJ)
+C statistics of hard scattering processes
+* WRITE(LO,'(2(/1X,A))')
+* & 'PHO_EVENT: statistics of hard scattering processes',
+* & '--------------------------------------------------'
+* DO 43 K=1,4
+* IF(MH_tried(0,K).GT.0) THEN
+* WRITE(LO,'(/5X,A,I3)')
+* & 'process (accepted,x-section internal/external) for IP:',K
+* DO 47 M=0,Max_pro_2
+* WRITE(LO,'(1X,I3,1X,A,2X,2I12,1P2E13.3)') M,PROC(M),
+* & MH_tried(M,K),MH_acc_1(M,K),DBLE(MH_acc_1(M,K))*FAC1,
+* & DBLE(MH_acc_2(M,K))*FAC2
+* 47 CONTINUE
+* ENDIF
+* 43 CONTINUE
+
+ ELSE
+ WRITE(LO,'(/1X,A,I4,/)') 'no output of statistics',KEVENT
+ ENDIF
+* WRITE(LO,'(/3(/1X,A)/)')
+* & '======================================================',
+* & ' ------- end of event generation summary --------',
+* & '======================================================'
+ ELSE
+ WRITE(LO,'(/1X,A,I7)') 'PHO_EVENT:ERROR: unsupported NEV',NEV
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_PARTON
+ SUBROUTINE PHO_PARTON(IPROC,JM1,JM2,P1,P2,IREJ)
+C********************************************************************
+C
+C calculation of complete parton configuration
+C
+C input: IPROC process ID 1 nondiffractive
+C 2 elastic
+C 3 quasi-ela. rho,omega,phi prod.
+C 4 double Pomeron
+C 5 single diff 1
+C 6 single diff 2
+C 7 double diff diss.
+C 8 single-resolved / direct photon
+C JM1,2 index of mother particles in /POEVT1/
+C
+C
+C output: complete parton configuration in /POEVT1/
+C IREJ 1 failure
+C 0 success
+C 50 rejection due to user cutoffs
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION P1(4),P2(4)
+
+ PARAMETER ( TINY = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ IREJ = 0
+C clear event statistics
+ KSPOM = 0
+ KHPOM = 0
+ KSREG = 0
+ KHDIR = 0
+ KSTRG = 0
+ KHTRG = 0
+ KSLOO = 0
+ KHLOO = 0
+ KHARD = 0
+ KSOFT = 0
+ KSDPO = 0
+ KHDPO = 0
+
+C-------------------------------------------------------------------
+C nondiffractive resolved processes
+
+ IF(IPROC.EQ.1) THEN
+C sample number of interactions
+ 555 CONTINUE
+ IINT = 0
+ IP = 1
+C generate only hard events
+ IF(ISWMDL(2).EQ.0) THEN
+ MHPOM = 1
+ MSPOM = 0
+ MSREG = 0
+ MHDIR = 0
+ HSWGHT(1) = 1.D0
+ ELSE
+C minimum bias events
+ IPOWGC(1) = 0
+ 10 CONTINUE
+ CALL PHO_SAMPRB(ECM,IP,IINT,JINT,KINT)
+ IPOWGC(1) = IPOWGC(1)+1
+ MINT = 0
+ MHDIR = 0
+ MSTRG = 0
+ MSLOO = 0
+C
+C resolved soft processes: pomeron and reggeon
+ MSPOM = IINT
+ MSREG = JINT
+C resolved hard process: hard pomeron
+ MHPOM = KINT
+C resolved absorptive corrections
+ MPTRI = 0
+ MPLOO = 0
+C restrictions given by user
+ IF(MSPOM.LT.ISWCUT(1)) GOTO 10
+ IF(MSREG.LT.ISWCUT(2)) GOTO 10
+ IF(MHPOM.LT.ISWCUT(3)) GOTO 10
+ HSWGHT(1) = 1.D0/DBLE(IPOWGC(1))
+C ----------------------------
+ IF(ISWMDL(15).EQ.0) THEN
+ MHPOM = 0
+ IF(MSREG.GT.0) THEN
+ MSPOM = 0
+ MSREG = 1
+ ELSE
+ MSPOM = 1
+ MSREG = 0
+ ENDIF
+ ELSE IF(ISWMDL(15).EQ.1) THEN
+ IF(MHPOM.GT.0) THEN
+ MHPOM = 1
+ MSPOM = 0
+ MSREG = 0
+ ELSE IF(MSPOM.GT.0) THEN
+ MSPOM = 1
+ MSREG = 0
+ ELSE
+ MSREG = 1
+ ENDIF
+ ELSE IF(ISWMDL(15).EQ.2) THEN
+ MHPOM = MIN(1,MHPOM)
+ ELSE IF(ISWMDL(15).EQ.3) THEN
+ MSPOM = MIN(1,MSPOM)
+ ENDIF
+ ENDIF
+C ----------------------------
+
+C statistics
+ ISPS = ISPS+MSPOM
+ IHPS = IHPS+MHPOM
+ ISRS = ISRS+MSREG
+ ISTS = ISTS+MSTRG
+ ISLS = ISLS+MSLOO
+
+ IF(IDEB(3).GE.5) WRITE(LO,'(1X,A,I10,I7,6I4)')
+ & 'PHO_PARTON: EV,SP,SR,HP,HD,ET,EL',
+ & KEVENT,MSPOM,MSREG,MHPOM,MHDIR,MPTRI,MPLOO
+
+ ITRY2 = 0
+ 50 CONTINUE
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GT.1) CALL PHO_EVEINI(2,P1,P2,JM1,JM2)
+ KSPOM = MSPOM
+ KSREG = MSREG
+ KHPOM = MHPOM
+ KHDIR = MHDIR
+ KSTRG = MPTRI
+ KSLOO = MPLOO
+
+ CALL PHO_STDPAR(JM1,JM2,1,MSPOM,MSREG,MHPOM,MHDIR,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_STDPAR ',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ IF(MHPOM.GT.0) THEN
+ IDNODF = 3
+ ELSE IF(MSPOM.GT.0) THEN
+ IDNODF = 2
+ ELSE
+ IDNODF = 1
+ ENDIF
+C check of quantum numbers of parton configurations
+ IF(IDEB(3).GE.0) THEN
+ CALL PHO_CHECK(1,IREJ)
+ IF(IREJ.NE.0) GOTO 50
+ ENDIF
+C sample strings to prepare fragmentation
+ CALL PHO_STRING(1,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IFAIL(30) = IFAIL(30)+1
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_STRING',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ IF(ITRY2.LT.20) GOTO 50
+ IF(IDEB(3).GE.1) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+
+C statistics
+ ISPA = ISPA+KSPOM
+ IHPA = IHPA+KHPOM
+ ISRA = ISRA+KSREG
+ ISTA = ISTA+KSTRG
+ ISLA = ISLA+KSLOO
+
+C-------------------------------------------------------------------
+C elastic scattering / quasi-elastic rho/omega/phi production
+
+ ELSE IF((IPROC.EQ.2).OR.(IPROC.EQ.3)) THEN
+ IF(IDEB(3).GE.5) WRITE(LO,'(1X,A,I10,I4)')
+ & 'PHO_PARTON: ela./q-ela.sca:(EV,IPROC)',KEVENT,IPROC
+
+C DPMJET call with special projectile / target: transform into CMS
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0))
+ & CALL PHO_DFWRAP(1,JM1,JM2)
+
+ CALL PHO_QELAST(IPROC,JM1,JM2,IREJ)
+
+ IF(IREJ.NE.0) THEN
+C DPMJET call with special projectile / target: clean up
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0))
+ & CALL PHO_DFWRAP(-2,JM1,JM2)
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_QELAST',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+
+C DPMJET call with special projectile / target: transform back
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0))
+ & CALL PHO_DFWRAP(2,JM1,JM2)
+
+C prepare possible decays
+ CALL PHO_STRING(1,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IFAIL(30) = IFAIL(30)+1
+ RETURN
+ ENDIF
+
+C---------------------------------------------------------------------
+C double Pomeron scattering
+
+ ELSE IF(IPROC.EQ.4) THEN
+ MSOFT = 0
+ MHARD = 0
+ IF(IDEB(3).GE.5) WRITE(LO,'(1X,A,I10)')
+ & 'PHO_PARTON: EV,double-pomeron scattering',KEVENT
+ IDPS = IDPS+1
+ ITRY2 = 0
+ 60 CONTINUE
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GT.1) CALL PHO_EVEINI(2,P1,P2,JM1,JM2)
+C
+ CALL PHO_CDIFF(JM1,JM2,MSOFT,MHARD,1,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_CDIFF',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+C check of quantum numbers of parton configurations
+ IF(IDEB(3).GE.0) THEN
+ CALL PHO_CHECK(1,IREJ)
+ IF(IREJ.NE.0) GOTO 60
+ ENDIF
+C sample strings to prepare fragmentation
+ CALL PHO_STRING(1,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IFAIL(30) = IFAIL(30)+1
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_STRING',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ IF(ITRY2.LT.10) GOTO 60
+ WRITE(LO,'(/1X,A,I5)') 'PHO_PARTON: rejection',ITRY2
+ CALL PHO_PREVNT(-1)
+ RETURN
+ ENDIF
+ IDPA = IDPA+1
+
+C-----------------------------------------------------------------------
+C single / double diffraction dissociation
+
+ ELSE IF((IPROC.GE.5).AND.(IPROC.LE.7)) THEN
+ MSOFT = 0
+ MHARD = 0
+ IF(IDEB(3).GE.5) WRITE(LO,'(1X,A,I10,2I4)')
+ & 'PHO_PARTON: EV,diffraction',KEVENT,IPAR1,IPAR2
+ IF(IPROC.EQ.5) ID1S = ID1S+1
+ IF(IPROC.EQ.6) ID2S = ID2S+1
+ IF(IPROC.EQ.7) ID3S = ID3S+1
+ ITRY2 = 0
+ 70 CONTINUE
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GT.1) CALL PHO_EVEINI(2,P1,P2,JM1,JM2)
+ IPAR1 = 1
+ IPAR2 = 1
+ IF(IPROC.EQ.5) IPAR2 = 0
+ IF(IPROC.EQ.6) IPAR1 = 0
+C calculate rapidity gap survival probability
+ SPROB = 1.D0
+ IF(ECM.GT.10.D0) THEN
+ IF((IPAR1.GE.1).AND.(IPAR2.EQ.0)) THEN
+ IF(SIGTR1(1).LT.1.D-10) THEN
+ SPROB = 1.D0
+ ELSE
+ SPROB = SIGHSD(1)/(SIGTR1(1)-2.D0*(SIGDPO(1)+SIGDPO(2)))
+ ENDIF
+ ELSE IF((IPAR1.EQ.0).AND.(IPAR2.GE.1)) THEN
+ IF(SIGTR2(1).LT.1.D-10) THEN
+ SPROB = 1.D0
+ ELSE
+ SPROB = SIGHSD(2)/(SIGTR2(1)-2.D0*(SIGDPO(1)+SIGDPO(3)))
+ ENDIF
+ ELSE IF((IPAR1.GE.1).AND.(IPAR2.GE.1)) THEN
+ IF(SIGLOO.LT.1.D-10) THEN
+ SPROB = 1.D0
+ ELSE
+ SPROB = SIGHDD/SIGLOO
+ ENDIF
+ ENDIF
+ ENDIF
+
+**sr
+* temporary patch, r.e. 8.6.99
+ SPROB = 1.D0
+**
+
+C DPMJET call with special projectile / target: transform into CMS
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0))
+ & CALL PHO_DFWRAP(1,JM1,JM2)
+
+ CALL PHO_DIFDIS(IPAR1,IPAR2,JM1,JM2,SPROB,0,MSOFT,MHARD,IREJ)
+
+ IF(IREJ.NE.0) THEN
+C DPMJET call with special projectile / target: clean up
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0))
+ & CALL PHO_DFWRAP(-2,JM1,JM2)
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_DIFDIS',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+
+C DPMJET call with special projectile / target: transform back
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0))
+ & CALL PHO_DFWRAP(2,JM1,JM2)
+
+C check of quantum numbers of parton configurations
+ IF(IDEB(3).GE.0) THEN
+ CALL PHO_CHECK(1,IREJ)
+ IF(IREJ.NE.0) GOTO 70
+ ENDIF
+C sample strings to prepare fragmentation
+ CALL PHO_STRING(1,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IFAIL(30) = IFAIL(30)+1
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_STRING',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ IF(ITRY2.LT.10) GOTO 70
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection',ITRY2
+ CALL PHO_PREVNT(-1)
+ RETURN
+ ENDIF
+ IF(IPROC.EQ.5) ID1A = ID1A+1
+ IF(IPROC.EQ.6) ID2A = ID2A+1
+ IF(IPROC.EQ.7) ID3A = ID3A+1
+
+C-----------------------------------------------------------------------
+C single / double direct processes
+
+ ELSE IF(IPROC.EQ.8) THEN
+ MSREG = 0
+ MSPOM = 0
+ MHPOM = 0
+ MHDIR = 1
+ IF(IDEB(3).GE.5) THEN
+ WRITE(LO,'(1X,A,I10)') 'PHO_PARTON: EV,direct proc',KEVENT
+ ENDIF
+ IDIS = IDIS+MHDIR
+ ITRY2 = 0
+ 80 CONTINUE
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GT.1) CALL PHO_EVEINI(2,P1,P2,JM1,JM2)
+ KSPOM = MSPOM
+ KSREG = MSREG
+ KHPOM = MHPOM
+ KHDIR = 4
+
+ CALL PHO_STDPAR(JM1,JM2,1,MSPOM,MSREG,MHPOM,MHDIR,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_STDPAR',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ IDNODF = 4
+C check of quantum numbers of parton configurations
+ IF(IDEB(3).GE.0) THEN
+ CALL PHO_CHECK(1,IREJ)
+ IF(IREJ.NE.0) GOTO 80
+ ENDIF
+C sample strings to prepare fragmentation
+ CALL PHO_STRING(1,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IREJ.EQ.50) RETURN
+ IFAIL(30) = IFAIL(30)+1
+ IF(IDEB(3).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_PARTON: rejection by PHO_STRING',ITRY2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ IF(ITRY2.LT.10) GOTO 80
+ WRITE(LO,'(/1X,A,I5)') 'PHO_PARTON: rejection',ITRY2
+ CALL PHO_PREVNT(-1)
+ RETURN
+ ENDIF
+ IF(IPROC.EQ.5) ID1A = ID1A+1
+ IF(IPROC.EQ.6) ID2A = ID2A+1
+ IF(IPROC.EQ.7) ID3A = ID3A+1
+ IDIA = IDIA+MHDIR
+
+C-----------------------------------------------------------------------
+C initialize control statistics
+
+ ELSE IF(IPROC.EQ.-1) THEN
+ CALL PHO_SAMPRB(ECM,-1,0,0,0)
+ CALL PHO_STDPAR(-1,0,0,0,0,0,0,IREJ)
+ CALL PHO_SEAFLA(-1,0,0,DUM)
+ IF((IFPAP(1).EQ.22).OR.(IFPAP(2).EQ.22))
+ & CALL PHO_QELAST(-1,1,2,0)
+ ISPS = 0
+ ISPA = 0
+ ISRS = 0
+ ISRA = 0
+ IHPS = 0
+ IHPA = 0
+ ISTS = 0
+ ISTA = 0
+ ISLS = 0
+ ISLA = 0
+ ID1S = 0
+ ID1A = 0
+ ID2S = 0
+ ID2A = 0
+ ID3S = 0
+ ID3A = 0
+ IDPS = 0
+ IDPA = 0
+ IDIS = 0
+ IDIA = 0
+ CALL PHO_STRING(-1,IREJ)
+ CALL PHO_DIFDIS(0,0,0,0,0.D0,-1,0,0,IREJ)
+ RETURN
+
+C-----------------------------------------------------------------------
+C produce statistics summary
+
+ ELSE IF(IPROC.EQ.-2) THEN
+ IF(ISWMDL(2).NE.0) CALL PHO_SAMPRB(ECM,-2,0,0,0)
+C IF(IDEB(3).GE.0) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A,/1X,A)')
+C & 'PHO_PARTON: internal statistics on parton configurations',
+C & '--------------------------------------------------------'
+C WRITE(LO,'(5X,A)') 'process sampled accepted'
+C WRITE(LO,'(5X,A,2I12)') 'soft pom.',ISPS,ISPA
+C WRITE(LO,'(5X,A,2I12)') 'hard pom.',IHPS,IHPA
+C WRITE(LO,'(5X,A,2I12)') 'soft reg.',ISRS,ISRA
+C WRITE(LO,'(5X,A,2I12)') 'enh. tri.',ISTS,ISTA
+C WRITE(LO,'(5X,A,2I12)') 'enh. loo.',ISLS,ISLA
+C WRITE(LO,'(5X,A,2I12)') 'diff.pa1.',ID1S,ID1A
+C WRITE(LO,'(5X,A,2I12)') 'diff.pa2.',ID2S,ID2A
+C WRITE(LO,'(5X,A,2I12)') 'doub.dif.',ID3S,ID3A
+C WRITE(LO,'(5X,A,2I12)') 'doub.pom.',IDPS,IDPA
+C WRITE(LO,'(5X,A,2I12/)') 'dir.phot.',IDIS,IDIA
+C ENDIF
+ CALL PHO_STDPAR(-2,0,0,0,0,0,0,IREJ)
+ IF((IFPAP(1).EQ.22).OR.(IFPAP(2).EQ.22))
+ & CALL PHO_QELAST(-2,1,2,0)
+ CALL PHO_STRING(-2,IREJ)
+ CALL PHO_DIFDIS(0,0,0,0,0.D0,-2,0,0,IREJ)
+ CALL PHO_SEAFLA(-2,0,0,DUM)
+ RETURN
+ ELSE
+ WRITE(LO,'(1X,A,I2)')
+ & 'PARTON:ERROR: unknown process ID ',IPROC
+ STOP
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_MCINI
+ SUBROUTINE PHO_MCINI
+C********************************************************************
+C
+C initialization of MC event generation
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( PIMASS = 0.13D0,
+ & TINY = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C interpolation tables for hard cross section and MC selection weights
+ INTEGER Max_tab_E,Max_tab_Q2,Max_pro_tab
+ PARAMETER ( Max_tab_E = 20, Max_tab_Q2 = 10, Max_pro_tab = 16 )
+ INTEGER IH_Q2a_up,IH_Q2b_up,IH_Ecm_up
+ DOUBLE PRECISION Hfac_tab,HWgx_tab,HSig_tab,Hdpt_tab,
+ & HQ2a_tab,HQ2b_tab,HEcm_tab
+ COMMON /POHTAB/
+ & Hfac_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HWgx_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HSig_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & Hdpt_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HQ2a_tab(1:Max_tab_Q2,0:4),HQ2b_tab(1:Max_tab_Q2,0:4),
+ & HEcm_tab(1:Max_tab_E,0:4),
+ & IH_Q2a_up(0:4),IH_Q2b_up(0:4),IH_Ecm_up(0:4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C cut probability distribution
+ INTEGER IEETA1,IIMAX,KKMAX
+ PARAMETER( IEETA1=20, IIMAX=20, KKMAX=20 )
+ INTEGER IEEMAX,IMAX,KMAX
+ REAL PROB
+ DOUBLE PRECISION EPTAB
+ COMMON /POPROB/ PROB(4,IEETA1,0:IIMAX,0:KKMAX),EPTAB(4,IEETA1),
+ & IEEMAX,IMAX,KMAX
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+
+ CHARACTER*15 PHO_PNAME
+ DIMENSION ECMF(4)
+
+ DATA XMPOM / 0.766D0 /
+
+C initialize fragmentation
+ CALL PHO_FRAINI(ISWMDL(6))
+
+C reset interpolation tables
+ DO 50 I=1,4
+ DO 60 J=1,10
+ DO 70 K=1,70
+ SIGTAB(I,K,J) = 0.D0
+ 70 CONTINUE
+ SIGECM(I,J) = 0.D0
+ 60 CONTINUE
+ 50 CONTINUE
+
+C max. number of allowed colors (large N expansion)
+ IC1 = 0
+ IC2 = 10000
+ CALL PHO_SELCOL(IC1,IC2,0,0,0,0,-1)
+
+C lower energy limit of initialization
+ ETABLO = PARMDL(19)
+ IF(ECM.LE.5.D0) ETABLO = MIN(2.5D0,ETABLO)
+
+C *** Commented by Chiara
+C WRITE(LO,'(/,1X,A,2F12.1)')
+C & 'PHO_MCINI: selected energy range (SQRT(S))',ETABLO,ECM
+C WRITE(LO,'(5X,A,A,F7.3,E15.4)')
+C & 'particle 1 (name,mass,virtuality): ',PHO_PNAME(IFPAP(1),1),
+C & PMASS(1),PVIRT(1)
+C WRITE(LO,'(5X,A,A,F7.3,E15.4)')
+C & 'particle 2 (name,mass,virtuality): ',PHO_PNAME(IFPAP(2),1),
+C & PMASS(2),PVIRT(2)
+
+C cuts on probabilities of multiple interactions
+ IMAX = MIN(IPAMDL(32),IIMAX)
+ KMAX = MIN(IPAMDL(33),KKMAX)
+ AH = 2.D0*PTCUT(1)/ECM
+ IMAX = MAX(5,MIN(IMAX,INT(ECM/2.0D0)))
+ KMAX = MIN(KMAX,1+INT(0.9*1.D0/AH))
+
+C hard interpolation table
+ ECMF(1) = ECM
+ ECMF(2) = 0.9D0*ECMF(1)
+ ECMF(3) = ECMF(2)
+ ECMF(4) = ECMF(2)
+ do k=1,4
+ IH_Ecm_up(k) = MIN(IPAMDL(30),Max_tab_E)
+ IF(ECMF(k).LT.100.D0) IH_Ecm_up(k) = MIN(IH_Ecm_up(k),15)
+ IF(ECMF(k).LT.50.D0) IH_Ecm_up(k) = MIN(IH_Ecm_up(k),10)
+ IF(ECMF(k).LT.10.D0) IH_Ecm_up(k) = MIN(IH_Ecm_up(k),5)
+ enddo
+
+C initialization of hard scattering for all channels and cutoffs
+ IF(HSWCUT(5).GT.PARMDL(36)) CALL PHO_HARMCI(-1,ECMF(1))
+ I0 = 4
+ IF(ISWMDL(2).EQ.0) I0 = 1
+ DO 110 I=I0,1,-1
+ CALL PHO_HARMCI(I,ECMF(I))
+ 110 CONTINUE
+
+C dimension of interpolation table of cut probabilities
+ IEEMAX = MIN(IPAMDL(31),IEETA1)
+ IF(ECM.LT.100.D0) IEEMAX = MIN(IEEMAX,15)
+ IF(ECM.LT.50.D0) IEEMAX = MIN(IEEMAX,10)
+ IF(ECM.LT.10.D0) IEEMAX = MIN(IEEMAX,5)
+ ISIMAX = IEEMAX
+
+C calculate probability distribution
+ I0 = 4
+ IFT1 = IFPAP(1)
+ IFT2 = IFPAP(2)
+ XMT1 = PMASS(1)
+ XMT2 = PMASS(2)
+ XVT1 = PVIRT(1)
+ XVT2 = PVIRT(2)
+ IF(ISWMDL(2).EQ.0) I0 = 1
+ DO 150 IP=I0,1,-1
+ ECMPRO = ECMF(IP)*1.001D0
+ IF(IP.EQ.4) THEN
+ IFPAP(1) = 990
+ IFPAP(2) = 990
+ PMASS(1) = XMPOM
+ PMASS(2) = XMPOM
+ PVIRT(1) = 0.D0
+ PVIRT(2) = 0.D0
+ ELSE IF(IP.EQ.3) THEN
+ IFPAP(1) = IFT2
+ IFPAP(2) = 990
+ PMASS(1) = XMT2
+ PMASS(2) = XMPOM
+ PVIRT(1) = XVT2
+ PVIRT(2) = 0.D0
+ ELSE IF(IP.EQ.2) THEN
+ IFPAP(1) = IFT1
+ IFPAP(2) = 990
+ PMASS(1) = XMT1
+ PMASS(2) = XMPOM
+ PVIRT(1) = XVT1
+ PVIRT(2) = 0.D0
+ ELSE
+ IFPAP(1) = IFT1
+ IFPAP(2) = IFT2
+ PMASS(1) = XMT1
+ PMASS(2) = XMT2
+ PVIRT(1) = XVT1
+ PVIRT(2) = XVT2
+ ENDIF
+ IF(IEEMAX.GT.1) THEN
+ IF(IP.EQ.1) THEN
+ ELMIN = LOG(ETABLO)
+ ELSE
+ ELMIN = LOG(2.5D0)
+ ENDIF
+ EDELTA = (LOG(ECMPRO)-ELMIN)/DBLE(MAX(1,IEEMAX-1))
+ DO 100 I=1,IEEMAX
+ ECMPRO = EXP(ELMIN+DBLE(I-1)*EDELTA)
+ CALL PHO_PRBDIS(IP,ECMPRO,I)
+ 100 CONTINUE
+ ELSE
+ CALL PHO_PRBDIS(IP,ECMPRO,1)
+ ENDIF
+
+C debug output of cross section tables
+ IF(((IDEB(62).GE.0).AND.(IP.EQ.1)).OR.(IDEB(62).GE.3)) THEN
+ IF((PVIRT(1)+PVIRT(2).GT.0.01D0).AND.(IDEB(62).EQ.0)) GOTO 201
+* --- Commented by Chiara
+* WRITE(LO,'(/1X,A,I3/1X,A,/1X,A)')
+* &'Table of total cross sections (mb) for particle combination',IP,
+* &' Ecm SIGtot SIGela SIGine SIGqel SIGsd1 SIGsd2 SIGdd',
+* &'-------------------------------------------------------------'
+* DO 200 I=1,IEEMAX
+* WRITE(LO,'(1X,1P,8E9.2)') SIGECM(IP,I),SIGTAB(IP,1,I),
+* & SIGTAB(IP,2,I),SIGTAB(IP,28,I),SIGTAB(IP,3,I),
+* & SIGTAB(IP,30,I)+SIGTAB(IP,32,I),
+* & SIGTAB(IP,31,I)+SIGTAB(IP,33,I),
+* & SIGTAB(IP,34,I)+SIGTAB(IP,35,I)
+* 200 CONTINUE
+ 201 CONTINUE
+ IF(IDEB(62).GE.2) THEN
+ WRITE(LO,'(/1X,A,I3/1X,A,/1X,A)')
+ &'Table of partial x-sections (mb) for particle combination',IP,
+ &' Ecm SIGSD1L SIGSD1H SIGSD2L SIGSD2H SIGDDL SIGDDH SIGCDF',
+ &'--------------------------------------------------------------'
+ DO 205 I=1,IEEMAX
+ WRITE(LO,'(1X,1P,8E9.2)') SIGECM(IP,I),SIGTAB(IP,30,I),
+ & SIGTAB(IP,32,I),SIGTAB(IP,31,I),SIGTAB(IP,33,I),
+ & SIGTAB(IP,34,I),SIGTAB(IP,35,I),SIGTAB(IP,36,I)
+ 205 CONTINUE
+ ENDIF
+ IF(IDEB(62).GE.2) THEN
+ WRITE(LO,'(/1X,A,I3/1X,A,/1X,A)')
+ &'Table of born graph x-sections (mb) for particle combination',IP,
+ &' Ecm SIGSVDM SIGHRES SIGHDIR SIGTR1 SIGTR2 SIGLOO SIGDPO',
+ &'-------------------------------------------------------------'
+ DO 210 I=1,IEEMAX
+ WRITE(LO,'(1X,1P,8E9.2)') SIGECM(IP,I),
+ & SIGTAB(IP,56,I)+SIGTAB(IP,57,I),SIGTAB(IP,58,I),
+ & SIGTAB(IP,59,I),SIGTAB(IP,60,I)+SIGTAB(IP,61,I),
+ & SIGTAB(IP,62,I)+SIGTAB(IP,63,I),SIGTAB(IP,64,I),
+ & SIGTAB(IP,65,I)+SIGTAB(IP,66,I)+SIGTAB(IP,67,I)
+ & +SIGTAB(IP,68,I)
+ 210 CONTINUE
+ WRITE(LO,'(/1X,A,I3/1X,A,/1X,A)')
+ &'Table of unitarized x-sections (mb) for particle combination',IP,
+ &' Ecm SIGSVDM SIGHVDM SIGTR1 SIGTR2 SIGLOO SIGDPO SLOPE',
+ &'-------------------------------------------------------------'
+ DO 215 I=1,IEEMAX
+ WRITE(LO,'(1X,1P,8E9.2)') SIGECM(IP,I),SIGTAB(IP,79,I),
+ & SIGTAB(IP,80,I),SIGTAB(IP,32,I),SIGTAB(IP,33,I),
+ & SIGTAB(IP,35,I),SIGTAB(IP,36,I),SIGTAB(IP,39,I)
+ 215 CONTINUE
+ ENDIF
+ IF(IDEB(62).GE.1) THEN
+ WRITE(LO,'(/1X,A,/1X,A,2I4,/1X,A,/1X,A)')
+ &'Table of expected average number of cuts in non-diff events:',
+ &' for max. number of cuts soft/hard:',IMAX,KMAX,
+ &' Ecm PTCUT SIGNDF POM-S POM-H REG-S',
+ &'---------------------------------------------'
+ DO 220 I=1,IEEMAX
+ WRITE(LO,'(1X,1P,6E10.3)') SIGECM(IP,I),SIGTAB(IP,77,I),
+ & SIGTAB(IP,78,I),SIGTAB(IP,74,I),SIGTAB(IP,75,I),
+ & SIGTAB(IP,76,I)
+ 220 CONTINUE
+ IF(IP.EQ.1) THEN
+ WRITE(LO,'(/1X,A,/1X,A,/1X,A)')
+ & 'Table of rapidity gap survival probability (high-mass diff.):',
+ & ' Ecm Spro-sd1 Spro-sd2 Spro-dd Spro-cd',
+ & '---------------------------------------------------'
+ DO 230 I=1,IEEMAX
+ IF(SIGECM(IP,I).GT.10.D0) THEN
+ SPRSD1 = SIGTAB(IP,32,I)/(SIGTAB(IP,60,I)
+ & -2.D0*(SIGTAB(IP,65,I)+SIGTAB(IP,66,I)))
+ SPRSD2 = SIGTAB(IP,33,I)/(SIGTAB(IP,62,I)
+ & -2.D0*(SIGTAB(IP,65,I)+SIGTAB(IP,67,I)))
+ SPRDD = SIGTAB(IP,35,I)/(SIGTAB(IP,64,I)+SIGTAB(IP,61,I)
+ & +SIGTAB(IP,63,I)-2.D0*(SIGTAB(IP,66,I)
+ & +SIGTAB(IP,67,I)+2.D0*SIGTAB(IP,68,I)))
+ SPRCDF = SIGTAB(IP,36,I)/(SIGTAB(IP,65,I)+SIGTAB(IP,66,I)
+ & +SIGTAB(IP,67,I)+SIGTAB(IP,68,I))
+ WRITE(LO,'(1X,1P,5E10.3)') SIGECM(IP,I),
+ & SPRSD1,SPRSD2,SPRDD,SPRCDF
+ ENDIF
+ 230 CONTINUE
+ ENDIF
+ ENDIF
+ ENDIF
+ 150 CONTINUE
+
+C simulate only hard scatterings
+ IF(ISWMDL(2).EQ.0) THEN
+ WRITE(LO,'(2(/1X,A))')
+ & 'WARNING: generation of hard scatterings only!',
+ & '============================================='
+ DO 151 I=2,7
+ IPRON(I,1) = 0
+ 151 CONTINUE
+ DO 152 K=2,4
+ DO 153 I=1,15
+ IPRON(I,K) = 0
+ 153 CONTINUE
+ 152 CONTINUE
+ SIGGEN(4) = 0.D0
+ DO 160 I=1,IEEMAX
+ SIGMAX = 0.D0
+ IF(IPRON(1,1).EQ.1) SIGMAX = SIGTAB(1,58,I)
+ IF(IPRON(8,1).EQ.1) SIGMAX = SIGMAX+SIGTAB(1,59,I)
+ IF(SIGMAX.GT.SIGGEN(4)) THEN
+ ISIGM = I
+ SIGGEN(4) = SIGMAX
+ ENDIF
+ 160 CONTINUE
+ ELSE
+* --- Commented by Chiara
+* WRITE(LO,'(2(/1X,A))')
+* & 'activated processes, cross section',
+* & '----------------------------------'
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' nondiffr. resolved processes',(IPRON(1,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' elastic scattering',(IPRON(2,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & 'qelast. vectormeson production',(IPRON(3,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' double pomeron processes',(IPRON(4,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' single diffract. particle (1)',(IPRON(5,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' single diffract. particle (2)',(IPRON(6,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' double diffract. processes',(IPRON(7,K),K=1,4)
+* WRITE(LO,'(5X,A,I3,2X,3I3)')
+* & ' direct photon processes',(IPRON(8,K),K=1,4)
+
+C calculate effective cross section
+ SIGGEN(4) = 0.D0
+ DO 165 I=1,IEEMAX
+ CALL PHO_CSINT(1,IFPAP(1),IFPAP(2),-1,-1,SIGECM(1,I),
+ & PVIRT(1),PVIRT(2))
+ SIGMAX = 0.D0
+ if(iswmdl(2).ge.1) then
+ IF(IPRON(1,1).EQ.1) SIGMAX = SIGTOT-SIGELA-SIGVM(0,0)
+ & -SIGCDF(0)-SIGLSD(1)-SIGHSD(1)-SIGLSD(2)-SIGHSD(2)
+ & -SIGLDD-SIGHDD-SIGDIR
+ IF(IPRON(2,1).EQ.1) SIGMAX = SIGMAX+SIGELA
+ IF(IPRON(3,1).EQ.1) SIGMAX = SIGMAX+SIGVM(0,0)
+ IF(IPRON(4,1).EQ.1) SIGMAX = SIGMAX+SIGCDF(0)
+ IF(IPRON(5,1).EQ.1) SIGMAX = SIGMAX+SIGLSD(1)+SIGHSD(1)
+ IF(IPRON(6,1).EQ.1) SIGMAX = SIGMAX+SIGLSD(2)+SIGHSD(2)
+ IF(IPRON(7,1).EQ.1) SIGMAX = SIGMAX+SIGLDD+SIGHDD
+ IF(IPRON(8,1).EQ.1) SIGMAX = SIGMAX+SIGDIR
+ else
+ IF(IPRON(1,1).EQ.1) SIGMAX = SIGHAR
+ IF(IPRON(8,1).EQ.1) SIGMAX = SIGMAX+SIGDIR
+ endif
+ IF(SIGMAX.GT.SIGGEN(4)) THEN
+ ISIGM = I
+ SIGGEN(4) = SIGMAX
+ ENDIF
+ 165 CONTINUE
+ ENDIF
+
+C debug output
+ IF(SIGGEN(4).LT.1.D-20) THEN
+ WRITE(LO,'(//1X,A)')
+ & 'PHO_MCINI:ERROR: selected processes have vanishing x-section'
+ STOP
+ ENDIF
+ WRITE(LO,'(3X,A,1P3E11.4)') 'maximum search (Elow/Eup/Epeak)',
+ & SIGECM(1,1),SIGECM(1,IEEMAX),SIGECM(1,ISIGM)
+ WRITE(LO,'(11X,A,1PE12.4,/)') 'max. cross section (mb)',SIGGEN(4)
+
+ END
+
+CDECK ID>, PHO_REJSTA
+ SUBROUTINE PHO_REJSTA(IMODE)
+C********************************************************************
+C
+C MC rejection counting
+C
+C input IMODE -1 initialization
+C -2 output of statistics
+C
+C********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ INTEGER IMODE
+
+ INTEGER I
+
+C initialization
+ IF(IMODE.EQ.-1) THEN
+ DO 100 I=1,NMXJ
+ IFAIL(I) = 0
+ 100 CONTINUE
+C
+ REJTIT(1) = 'PARTON ALL'
+ REJTIT(2) = 'STDPAR ALL'
+ REJTIT(3) = 'STDPAR DPO'
+ REJTIT(4) = 'POMSCA ALL'
+ REJTIT(5) = 'POMSCA INT'
+ REJTIT(6) = 'POMSCA KIN'
+ REJTIT(7) = 'DIFDIS ALL'
+ REJTIT(8) = 'POSPOM ALL'
+ REJTIT(9) = 'HRES.DIF.1'
+ REJTIT(10) = 'HDIR.DIF.1'
+ REJTIT(11) = 'HRES.DIF.2'
+ REJTIT(12) = 'HDIR.DIF.2'
+ REJTIT(13) = 'DIFDIS INT'
+ REJTIT(14) = 'HADRON SP2'
+ REJTIT(15) = 'HADRON SP3'
+ REJTIT(16) = 'HARDIR ALL'
+ REJTIT(17) = 'HARDIR INT'
+ REJTIT(18) = 'HARDIR KIN'
+ REJTIT(19) = 'MCHECK BAR'
+ REJTIT(20) = 'MCHECK MES'
+ REJTIT(21) = 'DIF.DISS.1'
+ REJTIT(22) = 'DIF.DISS.2'
+ REJTIT(23) = 'STRFRA ALL'
+ REJTIT(24) = 'MSHELL CHA'
+ REJTIT(25) = 'PARTPT SOF'
+ REJTIT(26) = 'PARTPT HAR'
+ REJTIT(27) = 'INTRINS KT'
+ REJTIT(28) = 'HACHEK DIR'
+ REJTIT(29) = 'HACHEK RES'
+ REJTIT(30) = 'STRING ALL'
+ REJTIT(31) = 'POMSCA INT'
+ REJTIT(32) = 'DIFF SLOPE'
+ REJTIT(33) = 'GLU2QU ALL'
+ REJTIT(34) = 'MASCOR ALL'
+ REJTIT(35) = 'PARCOR ALL'
+ REJTIT(36) = 'MSHELL PAR'
+ REJTIT(37) = 'MSHELL ALL'
+ REJTIT(38) = 'POMCOR ALL'
+ REJTIT(39) = 'DB-POM KIN'
+ REJTIT(40) = 'DB-POM ALL'
+ REJTIT(41) = 'SOFTXX ALL'
+ REJTIT(42) = 'SOFTXX PSP'
+
+C write output
+* --- Commented by Chiara
+* ELSE IF(IMODE.EQ.-2) THEN
+* WRITE(LO,'(/,1X,A,/,1X,A)') 'PHO_REJSTA: rejection statistics',
+* & '--------------------------------'
+* DO 300 I=1,NMXJ
+* IF(IFAIL(I).GT.0)
+* & WRITE(LO,'(1X,I3,1X,A,5X,I15)') I,REJTIT(I),IFAIL(I)
+* 300 CONTINUE
+* ELSE
+* WRITE(LO,'(1X,A,I3)') 'PHO_REJSTA: invalid mode ',IMODE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_POSPOM
+ SUBROUTINE PHO_POSPOM(IP,IND1,IND2,IGEN,IPOM,KCUT,ISWAP,IREJ)
+C***********************************************************************
+C
+C registration of one cut pomeron (soft/semihard)
+C
+C input: IP particle combination the pomeron belongs to
+C IND1,2 position of X values in /POSOFT/
+C 1 corresponds to a valence-pomeron
+C IGEN production process of mother particles
+C IPOM pomeron number
+C KCUT total number of cut pomerons and reggeons
+C
+C output: ISWAP exchange of x values
+C IND1,2 increased by the number of partons belonging
+C to the generated pomeron cut
+C IREJ success/failure
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-8 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+C light-cone x fractions and c.m. momenta of soft cut string ends
+ INTEGER MAXSOF
+ PARAMETER ( MAXSOF = 50 )
+ INTEGER IJSI2,IJSI1
+ DOUBLE PRECISION XS1,XS2,PSOFT1,PSOFT2
+ COMMON /POSOFT/ XS1(MAXSOF),XS2(MAXSOF),
+ & PSOFT1(4,MAXSOF),PSOFT2(4,MAXSOF),
+ & IJSI1(MAXSOF),IJSI2(MAXSOF)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+
+ DIMENSION P1(4),P2(4),WGXHSD(2),WGX(6)
+
+ IREJ = 0
+ ISWAP = 0
+ JM1 = NPOSP(1)
+ JM2 = NPOSP(2)
+ INDX1 = IND1
+ INDX2 = IND2
+ EA1 = XS1(IND1)*ECMP/2.D0
+ EA2 = XS1(IND1+1)*ECMP/2.D0
+ EB1 = XS2(IND2)*ECMP/2.D0
+ EB2 = XS2(IND2+1)*ECMP/2.D0
+ CMASS1 = MIN(EA1,EA2)
+ CMASS2 = MIN(EB1,EB2)
+
+C debug output
+ IF(IDEB(9).GE.20) THEN
+ WRITE(LO,'(1X,2A,5I4)') 'PHO_POSPOM: ',
+ & 'IP,IND1,IND2,KCUT,IPOIX1',IP,IND1,IND2,KCUT,IPOIX1
+ WRITE(LO,'(1X,A,2I4,1P2E12.4)') 'MOTHER1/2,MASS1/2',JM1,JM2,
+ & CMASS1,CMASS2
+ ENDIF
+
+C flavours
+ IF(IND1.EQ.1) THEN
+ CALL PHO_VALFLA(JM1,IFLA1,IFLA2,EA1,EA2)
+ ELSE
+ CALL PHO_SEAFLA(JM1,IFLA1,IFLA2,CMASS1)
+ ENDIF
+ IF(IND2.EQ.1) THEN
+ CALL PHO_VALFLA(JM2,IFLB1,IFLB2,EB1,EB2)
+ ELSE
+ CALL PHO_SEAFLA(JM2,IFLB1,IFLB2,CMASS2)
+ ENDIF
+ DO 75 I=1,4
+ P1(I) = PSOFT1(I,IND1)+PSOFT1(I,IND1+1)
+ P2(I) = PSOFT2(I,IND2)+PSOFT2(I,IND2+1)
+ 75 CONTINUE
+
+C pomeron resolved?
+ IF((ISWMDL(14).GT.0).AND.(IPOIX1.GT.0)) THEN
+C find energy for cross section calculation
+ IF(IPAMDL(16).EQ.2) THEN
+ ESUB = ECMP
+ ELSE IF(IPAMDL(16).EQ.3) THEN
+ IF(IPROCE.EQ.1) THEN
+ ESUB = ECM
+ ELSE
+ ESUB = ECMP
+ ENDIF
+ ELSE
+ ESUB = SQRT((P1(4)+P2(4))**2-(P1(1)+P2(1))**2
+ & -(P1(2)+P2(2))**2-(P1(3)+P2(3))**2)
+ ENDIF
+C load cross sections from interpolation table
+ IF(ESUB.LE.SIGECM(IP,1)) THEN
+ I1 = 1
+ I2 = 2
+ ELSE IF(ESUB.LT.SIGECM(IP,ISIMAX)) THEN
+ DO 50 I=2,ISIMAX
+ IF(ESUB.LE.SIGECM(IP,I)) GOTO 200
+ 50 CONTINUE
+ 200 CONTINUE
+ I1 = I-1
+ I2 = I
+ ELSE
+ WRITE(LO,'(/1X,A,2E12.3)')
+ & 'PHO_POSPOM: energy too high',ESUB,SIGECM(IP,ISIMAX)
+ CALL PHO_PREVNT(-1)
+ I1 = ISIMAX-1
+ I2 = ISIMAX
+ ENDIF
+ FAC2=0.D0
+ IF(I1.NE.I2) FAC2=LOG(ESUB/SIGECM(IP,I1))
+ & /LOG(SIGECM(IP,I2)/SIGECM(IP,I1))
+ FAC1=1.D0-FAC2
+C calculate weights
+* WGXHSD(1) = FAC2*SIGTAB(IP,32,I2)+FAC1*SIGTAB(IP,32,I1)
+* WGXHSD(2) = FAC2*SIGTAB(IP,33,I2)+FAC1*SIGTAB(IP,33,I1)
+* WGXHDD = FAC2*SIGTAB(IP,35,I2)+FAC1*SIGTAB(IP,35,I1)
+* WGXCDF = FAC2*SIGTAB(IP,36,I2)+FAC1*SIGTAB(IP,36,I1)
+* WGXPOM = FAC2*SIGTAB(IP,37,I2)+FAC1*SIGTAB(IP,37,I1)
+* WGX(1) = WGXPOM-3.D0*(WGXHSD(1)+WGXHSD(2)+WGXHDD)+15.D0*WGXCDF
+
+ WGXPOM = FAC2*(SIGTAB(IP,56,I2)+SIGTAB(IP,57,I2))
+ & +FAC1*(SIGTAB(IP,56,I1)+SIGTAB(IP,57,I1))
+ WGXHSD(1) = FAC2*SIGTAB(IP,60,I2)+FAC1*SIGTAB(IP,60,I1)
+ WGXHSD(2) = FAC2*SIGTAB(IP,62,I2)+FAC1*SIGTAB(IP,62,I1)
+ WGXHDD = FAC2*(SIGTAB(IP,61,I2)+SIGTAB(IP,63,I2)
+ & +SIGTAB(IP,64,I2))
+ & +FAC1*(SIGTAB(IP,61,I1)+SIGTAB(IP,63,I1)
+ & +SIGTAB(IP,64,I1))
+ WGXCDF = FAC2*(SIGTAB(IP,65,I2)+SIGTAB(IP,66,I2)
+ & +SIGTAB(IP,67,I2)+SIGTAB(IP,68,I2))
+ & +FAC1*(SIGTAB(IP,65,I1)+SIGTAB(IP,66,I1)
+ & +SIGTAB(IP,67,I1)+SIGTAB(IP,68,I1))
+
+C one-pomeron cut
+ WGX(1) = WGXPOM-3.D0*(WGXHSD(1)+WGXHSD(2)+WGXHDD)+15.D0*WGXCDF
+C central diff. cut
+ WGX(2) = WGXCDF
+C diff. diss. of particle 1
+ WGX(3) = WGXHSD(1)
+C diff. diss. of particle 2
+ WGX(4) = WGXHSD(2)
+C double diff. dissociation
+ WGX(5) = WGXHDD
+C two-pomeron cut
+ WGX(6) = 2.D0*(WGXHSD(1)+WGXHSD(2)+WGXHDD)
+
+* IF((WGX(1).LT.0.D0).AND.((IP.EQ.1).OR.(IDEB(9).GE.1))) THEN
+* WRITE(LO,'(1X,A,/1X,A,I3,1P,2E11.3)') ' PHO_POSPOM: ',
+* & ' unitarity bound reached for ',IP,ESUB,WGX(1)
+* WRITE(LO,'(5X,A)') 'WGXHSD(1),WGXHSD(2),WGXHDD,WGXCDF,WGXPOM:'
+* WRITE(LO,'(5X,1P5E11.3)') WGXHSD,WGXHDD,WGXCDF,WGXPOM
+* WRITE(LO,'(5X,A,/,5X,1P,6E11.3)') 'weight factors WG(1-6)',WGX
+* ENDIF
+
+ SUM = WGX(1)+WGX(2)+WGX(3)+WGX(4)+WGX(5)+WGX(6)
+
+C selection loop
+ 205 CONTINUE
+ XI = DT_RNDM(SUM)*SUM
+ I = 0
+ SUM = 0.D0
+ 210 CONTINUE
+ I = I+1
+ SUM = SUM+WGX(I)
+ IF((XI.GT.SUM).AND.(I.LT.6)) GOTO 210
+C phase space correction
+ IF(I.NE.1) THEN
+ ISAM = 4
+ IF(I.EQ.6) ISAM = 8
+ PACC = EXP(-PARMDL(8)*DBLE(ISAM*PARMDL(160+IP))/ESUB)
+* IF(DT_RNDM(SUM).GT.PACC) I=1
+ IF(DT_RNDM(SUM).GT.PACC) GOTO 205
+ ENDIF
+
+C do not generate diffraction for events with only one cut pomeron
+ IF((KCUT.EQ.1).AND.(I.LT.6)) I = 1
+
+C do not generate recursive calls for remants with
+C diquark-anti-diquark flavour contents
+ if((abs(IFLA1).gt.1000).and.(IFLA1+IFLA2.eq.0)) I = 1
+ if((abs(IFLB1).gt.1000).and.(IFLB1+IFLB2.eq.0)) I = 1
+
+C debug output
+ IF(IDEB(9).GE.20) WRITE(LO,'(1X,A,/1X,I2,1P7E11.3)')
+ & 'PHO_POSPOM: IPRO,ESUB,WGX(1-6)',I,ESUB,WGX
+
+ IF(I.GT.1) THEN
+C second scattering needed
+ CALL PHO_HACODE(IFLA1,IFLA2,IDHA1,IDUM)
+ CALL PHO_HACODE(IFLB1,IFLB2,IDHA2,IDUM)
+ IDPD1 = IPHO_ID2PDG(IDHA1)
+ IDPD2 = IPHO_ID2PDG(IDHA2)
+
+ if(INDX1.eq.1) then
+ if((IPHIST(2,JM1).GE.0).and.(IDHEP(JM1).NE.990))
+ & IGEN_had = IGEN
+ else
+ IGEN_had = -IGEN
+ endif
+ CALL PHO_REGPAR(1,IDPD1,IDHA1,JM1,JM2,P1(1),P1(2),P1(3),P1(4),
+ & IPOM,IGEN_had,0,0,IPOS1,1)
+
+ if(INDX2.eq.1) then
+ if((IPHIST(2,JM2).GE.0).and.(IDHEP(JM2).NE.990))
+ & IGEN_had = IGEN
+ else
+ IGEN_had = -IGEN
+ endif
+ CALL PHO_REGPAR(1,IDPD2,IDHA2,JM2,JM1,P2(1),P2(2),P2(3),P2(4),
+ & IPOM,IGEN_had,0,0,IPOS1,1)
+
+ IND1 = IND1+2
+ IND2 = IND2+2
+C update index
+ IPOIX2 = IPOIX2+1
+
+ IF(IPOIX2.GT.MAXIPX) THEN
+ WRITE(LO,'(1X,2A,2I5)') 'PHO_POSPOM: no space left in ',
+ & '/PORECU/ (IPOIX2,MAXIPX):',IPOIX2,MAXIPX
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ IPORES(IPOIX2) = I+2
+ IPOPOS(1,IPOIX2) = IPOS1-1
+ IPOPOS(2,IPOIX2) = IPOS1
+ RETURN
+ ENDIF
+ ENDIF
+
+ 100 CONTINUE
+ IF(ISWMDL(12).EQ.0) THEN
+C sample colors
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ CALL PHO_SELCOL(0,0,ICC1,ICC2,ICD1,ICD2,1)
+
+C purely gluonic pomeron or sea strings formed by gluons
+
+ IF( ((IDHEP(JM1).EQ.990).AND.(IPAMDL(20).GT.0))
+ & .OR.((IPAMDL(19).EQ.1).AND.(IND1.NE.1))) THEN
+ IFLA1 = 21
+ IFLA2 = 21
+ ENDIF
+ IF( ((IDHEP(JM2).EQ.990).AND.(IPAMDL(20).GT.0))
+ & .OR.((IPAMDL(19).EQ.1).AND.(IND2.NE.1))) THEN
+ IFLB1 = 21
+ IFLB2 = 21
+ ENDIF
+
+C color connection
+ IF(IFLA1.NE.21) THEN
+ IF(((ABS(IFLA1).GT.6).AND.(IFLA1.GT.0))
+ & .OR.((ABS(IFLA1).LE.6).AND.(IFLA1.LT.0)))
+ & CALL PHO_SWAPI(ICA1,ICD1)
+ ENDIF
+ IF(IFLB1.NE.21) THEN
+ IF(((ABS(IFLB1).GT.6).AND.(IFLB1.LT.0))
+ & .OR.((ABS(IFLB1).LE.6).AND.(IFLB1.GT.0)))
+ & CALL PHO_SWAPI(ICB1,ICC1)
+ ENDIF
+ ISWAP = 0
+ IF(ICA1*ICB1.GT.0) THEN
+ IF((IND1.NE.1).AND.(IND2.NE.1)) THEN
+ IF(DT_RNDM(CMASS1).GT.0.5D0) THEN
+ CALL PHO_SWAPI(IFLA1,IFLA2)
+ CALL PHO_SWAPI(ICA1,ICD1)
+ ELSE
+ CALL PHO_SWAPI(IFLB1,IFLB2)
+ CALL PHO_SWAPI(ICB1,ICC1)
+ ENDIF
+ ELSE IF(IND1.NE.1) THEN
+ CALL PHO_SWAPI(IFLA1,IFLA2)
+ CALL PHO_SWAPI(ICA1,ICD1)
+ ELSE IF(IND2.NE.1) THEN
+ CALL PHO_SWAPI(IFLB1,IFLB2)
+ CALL PHO_SWAPI(ICB1,ICC1)
+ ELSE IF((IFLA1.EQ.-IFLA2).AND.(IFLB1.EQ.-IFLB2)) THEN
+ IF(DT_RNDM(CMASS1).GT.0.5D0) THEN
+ CALL PHO_SWAPI(IFLA1,IFLA2)
+ CALL PHO_SWAPI(ICA1,ICD1)
+ ELSE
+ CALL PHO_SWAPI(IFLB1,IFLB2)
+ CALL PHO_SWAPI(ICB1,ICC1)
+ ENDIF
+ ELSE IF(IFLA1.EQ.-IFLA2) THEN
+ CALL PHO_SWAPI(IFLA1,IFLA2)
+ CALL PHO_SWAPI(ICA1,ICD1)
+ ELSE IF(IFLB1.EQ.-IFLB2) THEN
+ CALL PHO_SWAPI(IFLB1,IFLB2)
+ CALL PHO_SWAPI(ICB1,ICC1)
+ ELSE
+ ISWAP = 1
+ IF(IDEB(9).GE.5) THEN
+ WRITE(LO,'(1X,A,I12)')
+ & 'PHO_POSPOM: string end swap (KEVENT)',KEVENT
+ WRITE(LO,'(5X,A,4I7)')
+ & 'flavors:',IFLA1,IFLA2,IFLB1,IFLB2
+ WRITE(LO,'(5X,A,4I7)') 'colors :',ICA1,ICD1,ICB1,ICC1
+ ENDIF
+ ENDIF
+ ENDIF
+
+C registration
+
+C purely gluonic pomeron or sea strings formed by gluons
+ IF(IFLA1.EQ.21) THEN
+ CALL PHO_REGPAR(-1,21,0,JM1,JM2,P1(1),P1(2),P1(3),P1(4),
+ & IPOM,IGEN,ICA1,ICD1,IPOS1,1)
+ IND1 = IND1+2
+
+C strings formed by quarks
+ ELSE
+C valence quark labels
+ IF((INDX1.EQ.1).and.(IPHIST(2,JM1).GE.0)
+ & .and.(IDHEP(JM1).NE.990)) THEN
+ ICA2 = 1
+ ICD2 = 1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFLA1,0,JM1,JM2,PSOFT1(1,IND1),
+ & PSOFT1(2,IND1),PSOFT1(3,IND1),PSOFT1(4,IND1),IPOM,IGEN,ICA1,
+ & ICA2,IPOS1,1)
+ IND1 = IND1+1
+ CALL PHO_REGPAR(-1,IFLA2,0,JM1,JM2,PSOFT1(1,IND1),
+ & PSOFT1(2,IND1),PSOFT1(3,IND1),PSOFT1(4,IND1),IPOM,IGEN,ICD1,
+ & ICD2,IPOS,1)
+ IND1 = IND1+1
+
+ ENDIF
+
+C purely gluonic pomeron or sea strings formed by gluons
+ IF(IFLB1.EQ.21) THEN
+ CALL PHO_REGPAR(-1,IFLB1,0,JM2,JM1,P2(1),P2(2),P2(3),P2(4),
+ & IPOM,IGEN,ICB1,ICC1,IPOS2,1)
+ IND2 = IND2+2
+
+C strings formed by quarks
+ ELSE
+C valence quark labels
+ IF((INDX2.EQ.1).and.(IPHIST(2,JM2).GE.0)
+ & .and.(IDHEP(JM2).NE.990)) THEN
+ ICB2 = 1
+ ICC2 = 1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFLB1,0,JM2,JM1,PSOFT2(1,IND2),
+ & PSOFT2(2,IND2),PSOFT2(3,IND2),PSOFT2(4,IND2),IPOM,IGEN,ICB1,
+ & ICB2,IPOS,1)
+ IND2 = IND2+1
+ CALL PHO_REGPAR(-1,IFLB2,0,JM2,JM1,PSOFT2(1,IND2),
+ & PSOFT2(2,IND2),PSOFT2(3,IND2),PSOFT2(4,IND2),IPOM,IGEN,ICC1,
+ & ICC2,IPOS2,1)
+ IND2 = IND2+1
+
+ ENDIF
+
+C soft pt assignment
+ IF(ISWMDL(18).EQ.0) THEN
+ CALL PHO_PARTPT(0,IPOS1,IPOS2,PTCUT(IP),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(25) = IFAIL(25)+1
+ RETURN
+ ENDIF
+ ENDIF
+ ELSE
+* CALL PHO_BFKL(P1,P2,IPART,IREJ)
+* IF(IREJ.NE.0) RETURN
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_HADSP2
+ SUBROUTINE PHO_HADSP2(IFLB,XS1,XMAX,XSOFT1,IREJ)
+C***********************************************************************
+C
+C split hadron momentum XMAX into two partons using
+C lower cut-off: AS
+C
+C input: IFLB compressed particle code of particle to split
+C XS1 sum of x values already selected
+C XMAX maximal x possible
+C
+C output: XS1 new sum of x values (without first one)
+C XSOFT1 field of selected x values
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-8 )
+
+ DIMENSION XSOFT1(50)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+
+C model exponents
+ DATA PVMES1 /-0.5D0/
+ DATA PVMES2 /-0.5D0/
+ DATA PVBAR1 / 1.5D0/
+ DATA PVBAR2 /-0.5D0/
+C
+ IREJ = 0
+ ITMAX = 100
+C
+C mesonic particle
+ IF(ipho_bar3(IFLB,0).EQ.0) THEN
+ XPOT1 = PVMES1+1.D0
+ XPOT2 = PVMES2+1.D0
+C baryonic particle
+ ELSE
+ XPOT1 = PVBAR1+1.D0
+ XPOT2 = PVBAR2+1.D0
+ ENDIF
+ ITER = 0
+ XREST= 1.D0-XS1
+C selection loop
+ 100 CONTINUE
+ ITER = ITER+1
+ IF(ITER.GE.ITMAX) THEN
+ IF(IDEB(39).GE.3) THEN
+ WRITE(LO,'(1X,A,I8)')
+ & 'PHO_HADSP2: REJECTION (ITER)',ITER
+ WRITE(LO,'(5X,A,3E12.3)') 'XS1,XMAX,AS:',XS1,XMAX,AS
+ ENDIF
+ IFAIL(14) = IFAIL(14)+1
+ IREJ = 1
+ RETURN
+ ENDIF
+ ZZ = XREST*PHO_RNDBET(XPOT2,XPOT1)
+ IF((ZZ.GT.XMAX).OR.(ZZ.LT.AS)) GOTO 100
+ XSS1 = XS1 + ZZ
+ IF((1.D0-XSS1).LT.AS) GOTO 100
+C
+ XS1 = XSS1
+ XSOFT1(1) = 1.D0-XSS1
+ XSOFT1(2) = ZZ
+C debug output
+ IF(IDEB(39).GE.10) THEN
+ WRITE(LO,'(1X,A,2I8)') 'PHO_HADSP2: ITMAX,ITER',ITMAX,ITER
+ WRITE(LO,'(5X,A,3E10.3,5X,2E11.4)') 'XS1,XMAX,AS X1,X2:',
+ & XS1,XMAX,AS,XSOFT1(1),XSOFT1(2)
+ ENDIF
+ END
+
+CDECK ID>, PHO_HADSP3
+ SUBROUTINE PHO_HADSP3(IFLB,XS1,XMAX,XSOFT1,IREJ)
+C***********************************************************************
+C
+C split hadron momentum XMAX into diquark & quark pair
+C using lower cut-off: AS
+C
+C input: IFLB compressed particle code of particle to split
+C XS1 sum of x values already selected
+C XMAX maximal x possible
+C
+C output: XS1 new sum of x values
+C XSOFT1 field of selected x values
+C
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER ( DEPS = 1.D-8 )
+
+ DIMENSION XSOFT1(50),XSOFT2(50)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+
+ DIMENSION XPOT1(3),XPOT2(3),XMIN(2,3)
+
+C model exponents
+ DATA PVMES1 /-0.5D0/
+ DATA PVMES2 /-0.5D0/
+ DATA PSMES /-0.99D0/
+ DATA PVBAR1 / 1.5D0/
+ DATA PVBAR2 /-0.5D0/
+ DATA PSBAR /-0.99D0/
+C
+ IREJ = 0
+C
+C determine exponents
+C particle 1
+C
+ XMMIN = 0.3D0/ECMP
+ XBMIN = 1.6D0/ECMP
+C mesonic particle
+ IF(ipho_bar3(IFLB,0).EQ.0) THEN
+ XPOT1(1) = PVMES1
+ XMIN(1,1) = XMMIN
+ XPOT1(2) = PVMES2
+ XMIN(1,2) = XMMIN
+ XPOT1(3) = PSMES
+ XMIN(1,3) = XMMIN
+C baryonic particle
+ ELSE
+ XPOT1(1) = PVBAR1
+ XMIN(1,1) = XBMIN
+ XPOT1(2) = PVBAR2
+ XMIN(1,2) = XMMIN
+ XPOT1(3) = PSBAR
+ XMIN(1,3) = XMMIN
+ ENDIF
+C particle 2
+C mesonic particle
+ XPOT2(1) = PVMES1
+ XMIN(2,1) = XMMIN
+ XPOT2(2) = PVMES2
+ XMIN(2,2) = XMMIN
+ XPOT2(3) = PSMES
+ XMIN(2,3) = XMMIN
+C
+ XDUM1 = 0.01D0
+ XDUM2 = 0.99D0
+ CALL PHO_SELSXS(3,3,XPOT1,XPOT2,XMIN,XS1,XDUM1,XMAX,XDUM2,
+ & XSOFT1,XSOFT2,IREJ)
+C rejection?
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(74).GE.3) WRITE(LO,'(1X,A,I6,2E12.4)')
+ & 'PHO_HADSP3: rejection (IFLB,XS1,XMAX)',IFLB,XS1,XMAX
+ IFAIL(15) = IFAIL(15)+1
+ IREJ = 1
+ RETURN
+ ENDIF
+C debug output
+ IF(IDEB(74).GE.10) THEN
+ WRITE(LO,'(1X,A,I6,2E12.4)')
+ & 'PHO_HADSP3: IFLB,XS1,XMAX',IFLB,XS1,XMAX
+ DO 100 I=1,3
+ WRITE(LO,'(10X,I4,2E12.4)') I,XSOFT1(I),XSOFT2(I)
+ 100 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SOFTXX
+ SUBROUTINE PHO_SOFTXX(JM1,JM2,MSPAR1,MSPAR2,IVAL1,IVAL2,MSM1,MSM2,
+ & XSUM1,XSUM2,XMAX1,XMAX2,XS1,XS2,IREJ)
+C***********************************************************************
+C
+C select soft x values
+C
+C input: JM1,JM2 mother particle index in POEVT1
+C (0 flavour not known before)
+C MSPAR1,2 number of x values to select
+C IVAL1,2 number valence quarks involved in hard
+C scattering (0,1,2)
+C MSM1,2 minimum number of soft x to get sampled
+C XSUM1,2 sum of all x values samples up this call
+C XMAX1,2 max. x value
+C
+C output XSUM1,2 new sum of x-values sampled
+C XS1,2 field containing sampled x values
+C
+C x values of valence partons are first given
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+
+ DIMENSION XS1(*),XS2(*)
+
+ INTEGER MAXPOT
+ PARAMETER ( MAXPOT = 50 )
+ DIMENSION XPOT1(MAXPOT),XPOT2(MAXPOT),XMIN(2,MAXPOT)
+
+ IREJ = 0
+
+ MSMAX = MAX(MSPAR1,MSPAR2)
+ MSMIN = MAX(MSM1,MSM2)
+
+ IF(MSMAX.GT.MAXPOT) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_SOFTXX: no space left in ',
+ & 'local fields XPOT1/2 (MSMAX,MAXPOT):',MSMAX,MAXPOT
+ IREJ = 1
+ RETURN
+ ENDIF
+
+C determine exponents
+ IBAR1 = ipho_bar3(JM1,2)
+ IBAR2 = ipho_bar3(JM2,2)
+ ISWAP = 0
+ IF((IBAR1*IBAR2).LT.0) ISWAP = 1
+C meson-baryon scattering (asymmetric sea)
+ IF((ABS(IBAR1)+ABS(IBAR2)).EQ.1) THEN
+ PSBAR = PARMDL(53)
+ PSMES = PARMDL(57)
+ ELSE
+ PSBAR = PARMDL(52)
+ PSMES = PARMDL(56)
+ ENDIF
+
+C lower limits for x sampling
+ XMMINA = 2.D0*PARMDL(157)/ECMP
+ XBMINA = 2.D0*PARMDL(158)/ECMP
+ XSMINA = 2.D0*PARMDL(159)/ECMP
+ XMIN1 = MAX(XSOMIN,AS/XMAX2)
+ XMIN2 = MAX(XSOMIN,AS/XMAX1)
+ XMAXP1 = MIN(1.D0-XMIN1*MSMAX,XMAX1)
+ XMAXP2 = MIN(1.D0-XMIN2*MSMAX,XMAX2)
+ XMIN1 = MAX(AS/XMAX2,XMIN1)
+ XMIN2 = MAX(AS/XMAX1,XMIN2)
+
+C particle 1
+ XMMIN1 = MAX(XMIN1,XMMINA)
+ XBMIN1 = MAX(XMIN1,XBMINA)
+ XSMIN1 = MAX(XMIN1,XSMINA)
+C mesonic particle
+ IF(IBAR1.EQ.0) THEN
+ IF(IHFLS(1).EQ.0) THEN
+ XPOT1(1) = PARMDL(62)
+ XMIN(1,1) = XSMIN1
+ XPOT1(2) = PARMDL(63)
+ XMIN(1,2) = XSMIN1
+ ELSE
+ XPOT1(1) = PARMDL(54)
+ XMIN(1,1) = XMMIN1
+ XPOT1(2) = PARMDL(55)
+ XMIN(1,2) = XMMIN1
+ ENDIF
+ DO 100 I=3-IVAL1,MSMAX
+ XPOT1(I) = PSMES
+ XMIN(1,I) = XSMIN1
+ 100 CONTINUE
+C baryonic particle
+ ELSE
+ IF(IHFLS(1).EQ.0) THEN
+ XPOT1(1) = PARMDL(62)
+ XMIN(1,1) = XSMIN1
+ XPOT1(2) = PARMDL(63)
+ XMIN(1,2) = XSMIN1
+ ELSE
+ XPOT1(1) = PARMDL(50)
+ XMIN(1,1) = XBMIN1
+ XPOT1(2) = PARMDL(51)
+ XMIN(1,2) = XMMIN1
+ ENDIF
+ DO 200 I=3-IVAL1,MSMAX
+ XPOT1(I) = PSBAR
+ XMIN(1,I) = XSMIN1
+ 200 CONTINUE
+ ENDIF
+
+C particle 2
+ XMMIN2 = MAX(XMIN2,XMMINA)
+ XBMIN2 = MAX(XMIN2,XBMINA)
+ XSMIN2 = MAX(XMIN2,XSMINA)
+C mesonic particle
+ IF(IBAR2.EQ.0) THEN
+ IF(IHFLS(2).EQ.0) THEN
+ XPOT2(1) = PARMDL(62)
+ XMIN(2,1) = XSMIN2
+ XPOT2(2) = PARMDL(63)
+ XMIN(2,2) = XSMIN2
+ ELSE
+ XPOT2(1) = PARMDL(54)
+ XMIN(2,1) = XMMIN2
+ XPOT2(2) = PARMDL(55)
+ XMIN(2,2) = XMMIN2
+ ENDIF
+ DO 300 I=3-IVAL2,MSMAX
+ XPOT2(I) = PSMES
+ XMIN(2,I) = XSMIN2
+ 300 CONTINUE
+C baryonic particle
+ ELSE
+ IF(IHFLS(2).EQ.0) THEN
+ XPOT2(1) = PARMDL(62)
+ XMIN(2,1) = XSMIN2
+ XPOT2(2) = PARMDL(63)
+ XMIN(2,2) = XSMIN2
+ ELSE
+ XPOT2(1) = PARMDL(50)
+ XMIN(2,1) = XBMIN2
+ XPOT2(2) = PARMDL(51)
+ XMIN(2,2) = XMMIN2
+ ENDIF
+ DO 400 I=3-IVAL2,MSMAX
+ XPOT2(I) = PSBAR
+ XMIN(2,I) = XSMIN2
+ 400 CONTINUE
+ ENDIF
+
+ XSS1 = XSUM1
+ XSS2 = XSUM2
+ MSOFT = MSMAX
+
+C check limits (important for valences)
+ IF((XMIN(1,1).GE.XMAXP1).OR.(XMIN(1,2).GE.XMAXP1)) GOTO 1000
+ IF((XMIN(2,1).GE.XMAXP2).OR.(XMIN(2,2).GE.XMAXP2)) GOTO 1000
+
+ XMINS1 = XSS1
+ IF(IHFLS(1).NE.0) XMINS1 = XMINS1+(PARMDL(166)/ECMP)**2
+ XMINS2 = XSS2
+ IF(IHFLS(2).NE.0) XMINS2 = XMINS2+(PARMDL(166)/ECMP)**2
+ DO 10 I=1,MSOFT
+ XMINS1 = XMINS1+XMIN(1,I)
+ XMINS2 = XMINS2+XMIN(2,I)
+ 10 CONTINUE
+ IF((XMINS1.GE.1.D0).OR.(XMINS2.GE.1.D0)) GOTO 1000
+
+C try to sample x values
+ IF(IPAMDL(14).EQ.0) THEN
+ IF(MSOFT.EQ.2) THEN
+ CALL PHO_SELSX2(XPOT1,XPOT2,XMIN,XSS1,XSS2,XMAXP1,XMAXP2,
+ & XS1,XS2,IREJ)
+ ELSE IF(MSOFT.LT.5) THEN
+ CALL PHO_SELSXR(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XSS1,XSS2,
+ & XMAXP1,XMAXP2,XS1,XS2,IREJ)
+ ELSE
+ CALL PHO_SELSXS(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XSS1,XSS2,
+ & XMAXP1,XMAXP2,XS1,XS2,IREJ)
+ ENDIF
+ ELSE IF(IPAMDL(14).EQ.1) THEN
+ IF(MSOFT.EQ.2) THEN
+ CALL PHO_SELSX2(XPOT1,XPOT2,XMIN,XSS1,XSS2,XMAXP1,XMAXP2,
+ & XS1,XS2,IREJ)
+ ELSE
+ CALL PHO_SELSXS(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XSS1,XSS2,
+ & XMAXP1,XMAXP2,XS1,XS2,IREJ)
+ ENDIF
+ ELSE IF(IPAMDL(14).EQ.2) THEN
+ CALL PHO_SELSXS(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XSS1,XSS2,
+ & XMAXP1,XMAXP2,XS1,XS2,IREJ)
+ ELSE IF(IPAMDL(14).EQ.3) THEN
+ IF(MSOFT.EQ.2) THEN
+ CALL PHO_SELSX2(XPOT1,XPOT2,XMIN,XSS1,XSS2,XMAXP1,XMAXP2,
+ & XS1,XS2,IREJ)
+ ELSE IF(IVAL1+IVAL2.EQ.0) THEN
+ CALL PHO_SELSXI(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XSS1,XSS2,
+ & XMAXP1,XMAXP2,XS1,XS2,IREJ)
+ ELSE
+ CALL PHO_SELSXS(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XSS1,XSS2,
+ & XMAXP1,XMAXP2,XS1,XS2,IREJ)
+ ENDIF
+ ELSE
+ WRITE(LO,'(/,1X,A,I3)')
+ & 'PHO_SOFTXX:ERROR: unsupported IPAMDL(14)',IPAMDL(14)
+ STOP
+ ENDIF
+ IF(IREJ.NE.0) THEN
+ IFAIL(41) = IFAIL(41)+1
+ IF(IDEB(60).GE.2) THEN
+ WRITE(LO,'(1X,A,I12,4I3)')
+ & 'PHO_SOFTXX: rejection: EVE,MSP1/2,MSM1/2',
+ & KEVENT,MSPAR1,MSPAR2,MSM1,MSM2
+ WRITE(LO,'(1X,A,1P4E11.3)') 'XSUM1/2,XMAX1/2',
+ & XSUM1,XSUM2,XMAX1,XMAX2
+ ENDIF
+ RETURN
+ ENDIF
+ IF(MSOFT.NE.MSMAX) THEN
+ MSDIFF = MSMAX-MSOFT
+ MSPAR1 = MSPAR1-MSDIFF
+ MSPAR2 = MSPAR2-MSDIFF
+ ENDIF
+
+C correct for different MSPAR numbers
+ IF(MSOFT.NE.MSPAR1) THEN
+ IF(MSPAR1.GT.1) THEN
+ XDEL = 0.D0
+ DO 500 I=MSPAR1+1,MSOFT
+ XDEL = XDEL+XS1(I)
+ 500 CONTINUE
+ XFAC = (1.D0-XSUM1)/(1.D0-XDEL-XSUM1)
+ DO 550 I=2,MSPAR1
+ XS1(I) = XS1(I)*XFAC
+ 550 CONTINUE
+ XSS1 = (XSS1-XDEL-XSUM1)*XFAC+XSUM1
+ ELSE
+ XSS1 = XSUM1
+ ENDIF
+ ENDIF
+ IF(MSOFT.NE.MSPAR2) THEN
+ IF(MSPAR2.GT.1) THEN
+ XDEL = 0.D0
+ DO 600 I=MSPAR2+1,MSOFT
+ XDEL = XDEL+XS2(I)
+ 600 CONTINUE
+ XFAC = (1.D0-XSUM2)/(1.D0-XDEL-XSUM2)
+ DO 650 I=2,MSPAR2
+ XS2(I) = XS2(I)*XFAC
+ 650 CONTINUE
+ XSS2 = (XSS2-XDEL-XSUM2)*XFAC+XSUM2
+ ELSE
+ XSS2 = XSUM2
+ ENDIF
+ ENDIF
+
+C first x entry
+ XS1(1) = 1.D0 - XSS1
+ XS2(1) = 1.D0 - XSS2
+ XSUM1 = XSS1
+ XSUM2 = XSS2
+
+C debug output
+ IF(IDEB(60).GE.10) THEN
+ WRITE(LO,'(1X,A,I8,2I4,2E12.4)')
+ & 'PHO_SOFTXX: EVE,MSPAR1/2,XSUM1/2:',
+ & KEVENT,MSPAR1,MSPAR2,XSUM1,XSUM2
+ WRITE(LO,'(1X,A)') 'PHO_SOFTXX: I XS1/2 XPOT1/2 XMIN1/2'
+ DO 30 I=1,MSOFT
+ WRITE(LO,'(5X,I3,6E12.4)') I,XS1(I),XS2(I),XPOT1(I),XPOT2(I),
+ & XMIN(1,I),XMIN(2,I)
+ 30 CONTINUE
+ ENDIF
+
+ RETURN
+
+C not enough phase space
+ 1000 CONTINUE
+
+ IFAIL(42) = IFAIL(42)+1
+ IREJ = 1
+
+C warning message
+ IF(IDEB(60).GE.1) THEN
+ WRITE (6,'(1X,A,1P,2E11.3,/1X,A,/5X,6E11.3)')
+ & 'PHO_SOFTXX: Xmin>Xmax or sum(Xmin)>1 (ECM,AS)',
+ & ECMP,AS,'PHO_SOFTXX: Xmin1/2,Xmaxp1/2,sum(Xmin1/2)',
+ & XMIN1,XMIN2,XMAXP1,XMAXP2,XMINS1,XMINS2
+ WRITE(LO,'(1X,A,1P,3E11.3)')
+ & 'PHO_SOFTXX: Xmmina,Xbmina,Xsmina:',XMMINA,XBMINA,XSMINA
+ WRITE(LO,'(1X,A,1P,3E11.3)')
+ & 'PHO_SOFTXX: Xmmin1,Xbmin1,Xsmin1:',XMMIN1,XBMIN1,XSMIN1
+ WRITE(LO,'(1X,A,1P,3E11.3)')
+ & 'PHO_SOFTXX: Xmmin2,Xbmin2,Xsmin2:',XMMIN2,XBMIN2,XSMIN2
+ WRITE(LO,'(1X,A)')
+ & 'PHO_SOFTXX: Table of lower x limits (I,Xmin(1,I),Xmin(2,I))'
+ DO 27 I=1,MSOFT
+ WRITE(LO,'(5X,I3,1P,2E11.3)') I,XMIN(1,I),XMIN(2,I)
+ 27 CONTINUE
+ WRITE(LO,'(1X,A,I10,2I4,2E11.3)')
+ & 'PHO_SOFTXX: KEVENT,MSPAR1/2,XSUM1/2:',
+ & KEVENT,MSPAR1,MSPAR2,XSUM1,XSUM2
+ WRITE(LO,'(1X,A)') 'PHO_SOFTXX: I XPOT1/2 XMIN1/2'
+ DO 25 I=1,MSOFT
+ WRITE(LO,'(5X,I3,4E12.4)') I,XPOT1(I),XPOT2(I),
+ & XMIN(1,I),XMIN(2,I)
+ 25 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SELSXR
+ SUBROUTINE PHO_SELSXR(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XS1,XS2,
+ & XMAX1,XMAX2,XSOFT1,XSOFT2,IREJ)
+C***********************************************************************
+C
+C select x values of soft string ends (rejection method)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION XPOT1(*),XPOT2(*),XMIN(2,*),XSOFT1(*),XSOFT2(*)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+
+ DIMENSION XLDIF(2,50),XLMIN(2,50),REVP(2,50),POT(2,50)
+
+ IF(IDEB(13).GE.10) THEN
+ WRITE(LO,'(1X,A)') 'PHO_SELSXR:'
+ WRITE(LO,'(5X,A,I4,5E11.3)') 'MSOFT,XS1,XS2,XMAX1,2',
+ & MSOFT,XS1,XS2,XMAX1,XMAX2
+ DO 40 I=1,MSOFT
+ WRITE(LO,'(5X,A,I4,2E12.3)') 'EXPONENTS',I,XPOT1(I),XPOT2(I)
+ 40 CONTINUE
+ ENDIF
+C
+ IREJ = 0
+C
+ XMINK = MAX(PSOMIN/ECM*2.D0,XSOMIN)
+ XMIN1 = MAX(AS/XMAX1,XMINK)
+ XMIN2 = MAX(AS/XMAX2,XMINK)
+C
+ IF(MSOFT.EQ.1) THEN
+ XSOFT1(2) = 0.D0
+ XSOFT2(2) = 0.D0
+ RETURN
+ ENDIF
+ XWMAX = MAX(XMAX1**XPOT1(1),XMIN1**XPOT1(1))
+ & *MAX(XMAX2**XPOT2(1),XMIN2**XPOT2(1))
+C
+ 10 CONTINUE
+C
+ DO 50 I=2,MSOFT
+ POT(1,I) = XPOT1(I)+1.D0
+ POT(2,I) = XPOT2(I)+1.D0
+ REVP(1,I) = 1.D0/POT(1,I)
+ REVP(2,I) = 1.D0/POT(2,I)
+ XLMIN(1,I) = XMIN(1,I)**POT(1,I)
+ XLMAX = XMAX1**POT(1,I)
+ XLDIF(1,I) = XLMAX-XLMIN(1,I)
+ XLMIN(2,I) = XMIN(2,I)**POT(2,I)
+ XLMAX = XMAX2**POT(2,I)
+ XLDIF(2,I) = XLMAX-XLMIN(2,I)
+ 50 CONTINUE
+C
+ ITRY0 = 0
+ 5 CONTINUE
+ ITRY0 = ITRY0 + 1
+ IF(ITRY0.GE.IPAMDL(181)) THEN
+ IF(MSOFT-MSMIN.GE.2) THEN
+ MSOFT = MSMIN
+ GOTO 10
+ ENDIF
+ GOTO 1000
+ ENDIF
+ XREST1 = 1.D0-XS1
+ XREST2 = 1.D0-XS2
+ DO 100 I=2,MSOFT
+ ITRY1 = 0
+
+ 20 CONTINUE
+ Z1 = XLDIF(1,I)*DT_RNDM(XS1)+XLMIN(1,I)
+ Z2 = XLDIF(2,I)*DT_RNDM(XS2)+XLMIN(2,I)
+ XSOFT1(I) = Z1**REVP(1,I)
+ XSOFT2(I) = Z2**REVP(2,I)
+ ITRY1 = ITRY1+1
+ IF(ITRY1.GE.50) GOTO 1000
+ IF( (XSOFT1(I)*XSOFT2(I)).LT.AS ) GOTO 20
+
+ XREST1 = XREST1-XSOFT1(I)
+ IF(XREST1.LT.XMIN1) GOTO 5
+ IF(XREST1.LT.XMIN(1,1)) GOTO 5
+ XREST2 = XREST2-XSOFT2(I)
+ IF(XREST2.LT.XMIN2) GOTO 5
+ IF(XREST2.LT.XMIN(2,1)) GOTO 5
+ IF(XREST1*XREST2.LT.AS) GOTO 5
+
+ 100 CONTINUE
+ XSOFT1(1) = XREST1
+ XSOFT2(1) = XREST2
+ IREJ=0
+* XX = 1.D0
+* DO 200 I=2,MSOFT
+* XX = XX*XSOFT1(I)**XPOT1(I)*XSOFT2(I)**XPOT2(I)
+*200 CONTINUE
+ XX = XSOFT1(1)**XPOT1(1)*XSOFT2(1)**XPOT2(1)
+ IF((XX-DT_RNDM(XX)*XWMAX).LT.0.D0) GOTO 5
+
+ XS1 = 1.D0-XREST1
+ XS2 = 1.D0-XREST2
+ RETURN
+
+ 1000 CONTINUE
+ IREJ = 1
+ IF(IDEB(13).GE.2) THEN
+ WRITE(LO,'(1X,A,2I4)')
+ & 'PHO_SELSXR: REJECTION(ITRY0/1)',ITRY0,ITRY1
+ WRITE(LO,'(5X,A,3E12.3)') 'XMAX1,2,AS:',XMAX1,XMAX2,AS
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SELSX2
+ SUBROUTINE PHO_SELSX2(XPOT1,XPOT2,XMIN,XSUM1,XSUM2,XMAX1,XMAX2,
+ & XS1,XS2,IREJ)
+C***********************************************************************
+C
+C select x values of soft string ends using PHO_RNDBET
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION XPOT1(*),XPOT2(*),XMIN(2,*),XS1(*),XS2(*)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+
+ IREJ = 0
+
+ IF(IDEB(32).GE.10) THEN
+ WRITE(LO,'(1X,A)') 'PHO_SELSX2:'
+ WRITE(LO,'(5X,A,5E11.3)') 'AS,XSUM1,2,XMAX1,2',
+ & AS,XSUM1,XSUM2,XMAX1,XMAX2
+ DO 30 I=1,2
+ WRITE(LO,'(5X,A,I4,2E12.3)') 'EXPONENTS',I,XPOT1(I),XPOT2(I)
+ 30 CONTINUE
+ ENDIF
+
+ FAC1 = 1.D0-XSUM1
+ FAC2 = 1.D0-XSUM2
+ FAC = FAC1*FAC2
+ GAM1 = XPOT1(1)+1.D0
+ GAM2 = XPOT2(1)+1.D0
+ BET1 = XPOT1(2)+1.D0
+ BET2 = XPOT2(2)+1.D0
+
+ ITRY0 = 0
+ DO 100 I=1,IPAMDL(182)
+
+ ITRY1 = 0
+ 10 CONTINUE
+ X1 = PHO_RNDBET(GAM1,BET1)
+ ITRY1 = ITRY1+1
+ IF(ITRY1.GE.50) GOTO 1000
+ IF((X1.LE.XMIN(1,1)).OR.((1.D0-X1).LE.XMIN(1,2))) GOTO 10
+
+ ITRY2 = 0
+ 11 CONTINUE
+ X2 = PHO_RNDBET(GAM2,BET2)
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GE.50) GOTO 1000
+ IF((X2.LE.XMIN(2,1)).OR.((1.D0-X2).LE.XMIN(2,2))) GOTO 11
+
+ X3 = 1.D0 - X1
+ X4 = 1.D0 - X2
+ IF(X1*X2*FAC.GT.AS) THEN
+ IF(X3*X4*FAC.GT.AS) THEN
+ XS1(1) = X1*FAC1
+ XS1(2) = X3*FAC1
+ XS2(1) = X2*FAC2
+ XS2(2) = X4*FAC2
+ IF(XS1(1).GT.XMIN(1,1)) THEN
+ IF(XS2(1).GT.XMIN(2,1)) THEN
+ IF(XS1(2).GT.XMIN(1,2)) THEN
+ IF(XS2(2).GT.XMIN(2,2)) THEN
+ XSUM1 = XSUM1+XS1(2)
+ XSUM2 = XSUM2+XS2(2)
+ GOTO 300
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+ ENDIF
+ ITRY0 = ITRY0+1
+
+ 100 CONTINUE
+
+ 1000 CONTINUE
+ IREJ = 1
+ IF(IDEB(32).GE.2) THEN
+ WRITE(LO,'(1X,A,3I4)')
+ & 'PHO_SELSX2: REJECTION(ITRY0/1/2)',ITRY0,ITRY1,ITRY2
+ WRITE(LO,'(5X,A,3E12.3)') 'XMAX1,2,AS:',XMAX1,XMAX2,AS
+ ENDIF
+ RETURN
+ 300 CONTINUE
+
+ END
+
+CDECK ID>, PHO_SELSXS
+ SUBROUTINE PHO_SELSXS(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XS1,XS2,
+ & XMAX1,XMAX2,XSOFT1,XSOFT2,IREJ)
+C***********************************************************************
+C
+C select x values of soft string ends (rescaling method)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION XPOT1(*),XPOT2(*),XMIN(2,*),XSOFT1(*),XSOFT2(*)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+
+ DIMENSION XLDIF(2,50),XLMIN(2,50),REVP(2,50),POT(2,50)
+
+ IREJ = 0
+
+ 10 CONTINUE
+
+ IF(MSOFT.EQ.1) THEN
+ XSOFT1(1) = 1.D0-XS1
+ XSOFT1(2) = 0.D0
+ XSOFT2(1) = 1.D0-XS2
+ XSOFT2(2) = 0.D0
+ RETURN
+ ENDIF
+
+ DO 50 I=1,MSOFT
+ POT(1,I) = XPOT1(I)+1.D0
+ POT(2,I) = XPOT2(I)+1.D0
+ REVP(1,I) = 1.D0/POT(1,I)
+ REVP(2,I) = 1.D0/POT(2,I)
+ XLMIN(1,I) = XMIN(1,I)**POT(1,I)
+ XLMAX = XMAX1**POT(1,I)
+ XLDIF(1,I) = XLMAX-XLMIN(1,I)
+ XLMIN(2,I) = XMIN(2,I)**POT(2,I)
+ XLMAX = XMAX2**POT(2,I)
+ XLDIF(2,I) = XLMAX-XLMIN(2,I)
+ 50 CONTINUE
+
+ ITRY0 = 0
+ 5 CONTINUE
+ ITRY0 = ITRY0 + 1
+ IF(ITRY0.GE.IPAMDL(180)) THEN
+ IF(MSOFT-MSMIN.GE.2) THEN
+ MSOFT= MSMIN
+ GOTO 10
+ ENDIF
+ GOTO 1000
+ ENDIF
+ XSUM1 = 0.D0
+ XSUM2 = 0.D0
+ DO 100 I=1,MSOFT
+ ITRY1 = 0
+ 20 CONTINUE
+ Z1 = XLDIF(1,I)*DT_RNDM(XS1)+XLMIN(1,I)
+ Z2 = XLDIF(2,I)*DT_RNDM(XS2)+XLMIN(2,I)
+ XSOFT1(I) = Z1**REVP(1,I)
+ XSOFT2(I) = Z2**REVP(2,I)
+ ITRY1 = ITRY1+1
+ IF(ITRY1.GE.50) GOTO 1000
+ IF( (XSOFT1(I)*XSOFT2(I)).LT.AS ) GOTO 20
+ XSUM1 = XSUM1+XSOFT1(I)
+ XSUM2 = XSUM2+XSOFT2(I)
+ 100 CONTINUE
+ FAC1 = (1.D0-XS1)/XSUM1
+ FAC2 = (1.D0-XS2)/XSUM2
+ DO 200 I=1,MSOFT
+ XSOFT1(I) = XSOFT1(I)*FAC1
+ XSOFT2(I) = XSOFT2(I)*FAC2
+ IF(XSOFT1(I).LT.XMIN(1,I)) GOTO 5
+ IF(XSOFT2(I).LT.XMIN(2,I)) GOTO 5
+ IF(XSOFT1(I)*XSOFT2(I).LT.AS) GOTO 5
+ 200 CONTINUE
+
+ XS1 = 1.D0-XSOFT1(1)
+ XS2 = 1.D0-XSOFT2(1)
+ RETURN
+
+ 1000 CONTINUE
+ IREJ = 1
+ IF(IDEB(14).GE.2) THEN
+ WRITE(LO,'(1X,2A,3I4)') 'PHO_SELSXS: ',
+ & 'rejection (MSOFT,ITRY0/1)',MSOFT,ITRY0,ITRY1
+ DO 300 I=1,MSOFT
+ WRITE(LO,'(5X,I4,1P4E11.3)') I,XMIN(1,I),XMIN(2,I),XMAX1,XMAX2
+ 300 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SELSXI
+ SUBROUTINE PHO_SELSXI(MSOFT,MSMIN,XPOT1,XPOT2,XMIN,XS1,XS2,
+ & XMAX1,XMAX2,XSOFT1,XSOFT2,IREJ)
+C***********************************************************************
+C
+C select x values of soft string ends (sea independent from valence)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION XPOT1(*),XPOT2(*),XMIN(2,*),XSOFT1(*),XSOFT2(*)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+
+ DIMENSION XLDIF(2,50),XLMIN(2,50),REVP(2,50),POT(2,50)
+
+ IREJ = 0
+
+ 10 CONTINUE
+
+ DO 50 I=1,MSOFT
+ POT(1,I) = XPOT1(I)+1.D0
+ POT(2,I) = XPOT2(I)+1.D0
+ REVP(1,I) = 1.D0/POT(1,I)
+ REVP(2,I) = 1.D0/POT(2,I)
+ XLMIN(1,I) = XMIN(1,I)**POT(1,I)
+ XLMAX = XMAX1**POT(1,I)
+ XLDIF(1,I) = XLMAX-XLMIN(1,I)
+ XLMIN(2,I) = XMIN(2,I)**POT(2,I)
+ XLMAX = XMAX2**POT(2,I)
+ XLDIF(2,I) = XLMAX-XLMIN(2,I)
+ 50 CONTINUE
+
+C selection of sea
+ ITRY0 = 0
+ 5 CONTINUE
+
+ ITRY0 = ITRY0 + 1
+ IF(ITRY0.GE.IPAMDL(183)) THEN
+ IF(MSOFT-MSMIN.GE.2) THEN
+ MSOFT = MSMIN
+ GOTO 10
+ ENDIF
+ GOTO 1000
+ ENDIF
+ XSUM1 = XS1
+ XSUM2 = XS2
+ DO 100 I=3,MSOFT
+ ITRY1 = 0
+ 20 CONTINUE
+ Z1 = XLDIF(1,I)*DT_RNDM(XS1)+XLMIN(1,I)
+ Z2 = XLDIF(2,I)*DT_RNDM(XS2)+XLMIN(2,I)
+ XSOFT1(I) = Z1**REVP(1,I)
+ XSOFT2(I) = Z2**REVP(2,I)
+ ITRY1 = ITRY1+1
+ IF(ITRY1.GE.50) GOTO 1000
+ IF( (XSOFT1(I)*XSOFT2(I)).LT.AS ) GOTO 20
+ XSUM1 = XSUM1+XSOFT1(I)
+ XSUM2 = XSUM2+XSOFT2(I)
+ 100 CONTINUE
+
+ IF(XSUM1.GT.1.D0-XMIN(1,1)-XMIN(1,2)) GOTO 5
+ IF(XSUM2.GT.1.D0-XMIN(2,1)-XMIN(2,2)) GOTO 5
+
+C selection of valence
+ CALL PHO_SELSX2(XPOT1,XPOT2,XMIN,XSUM1,XSUM2,XMAX1,XMAX2,
+ & XSOFT1,XSOFT2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(MSOFT-MSMIN.GE.2) THEN
+ MSOFT = MSMIN
+ GOTO 10
+ ENDIF
+ IF(IDEB(31).GE.2) WRITE(LO,'(1X,A,1P,4E11.4)')
+ & 'PHO_SELSXI: rejection by PHO_SELSX2 (XSUM1/2,XMAX1/2)',
+ & XSUM1,XSUM2,XMAX1,XMAX2
+ RETURN
+ ENDIF
+
+ XS1 = 1.D0-XSOFT1(1)
+ XS2 = 1.D0-XSOFT2(1)
+ RETURN
+
+ 1000 CONTINUE
+ IREJ = 1
+ IF(IDEB(14).GE.2) THEN
+ WRITE(LO,'(1X,2A,3I4)') 'PHO_SELSXI: ',
+ & 'rejection (MSOFT,ITRY0/1)',MSOFT,ITRY0,ITRY1
+ DO 300 I=1,MSOFT
+ WRITE(LO,'(5X,I4,1P4E11.3)') I,XMIN(1,I),XMIN(2,I),XMAX1,XMAX2
+ 300 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SELCOL
+ SUBROUTINE PHO_SELCOL(ICO1,ICO2,ICOA1,ICOA2,ICOB1,ICOB2,IMODE)
+C********************************************************************
+C
+C color combinatorics
+C
+C input: ICO1,2 colors of incoming particle
+C IMODE -2 output of initialization status
+C -1 initialization
+C ICINP(1) selection mode
+C 0 QCD
+C 1 large N_c expansion
+C ICINP(2) max. allowed color
+C 0 clear internal color counter
+C 1 hadron into two colored objects
+C 2 quark into quark gluon
+C 3 gluon into gluon gluon
+C 4 gluon into quark antiquark
+C
+C output: ICOA1,2 colors of first outgoing particle
+C ICOB1,2 colors of second outgoing particle
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+ DATA METHOD /0/, II /0/
+
+ ICI1 = ICO1
+ ICI2 = ICO2
+ IF(METHOD.EQ.0) THEN
+
+ IF(IMODE.EQ.1) THEN
+ II = II+1
+ IF(II.GT.MAXCOL)
+ & II = MIN(DT_RNDM(DUM)*MAXCOL+1.00001,DBLE(MAXCOL))
+ ICOA1 = II
+ ICOA2 = 0
+ ICOB1 = -II
+ ICOB2 = 0
+ ELSE IF(IMODE.EQ.2) THEN
+ II = II+1
+ IF(II.GT.MAXCOL)
+ & II = MIN(DT_RNDM(DUM)*MAXCOL+1.00001,DBLE(MAXCOL))
+ ICOA2 = 0
+ IF(ICI1.GT.0) THEN
+ ICOA1 = II
+ ICOB1 = ICI1
+ ICOB2 = -II
+ ELSE
+ ICOA1 = -II
+ ICOB1 = II
+ ICOB2 = ICI1
+ ENDIF
+ ELSE IF(IMODE.EQ.3) THEN
+ II = II+1
+ IF(II.GT.MAXCOL)
+ & II = MIN(DT_RNDM(DUM)*MAXCOL+1.00001,DBLE(MAXCOL))
+ IF(DT_RNDM(DUM).GT.0.5D0) THEN
+ ICOA1 = ICI1
+ ICOA2 = -II
+ ICOB1 = II
+ ICOB2 = ICI2
+ ELSE
+ ICOB1 = ICI1
+ ICOB2 = -II
+ ICOA1 = II
+ ICOA2 = ICI2
+ ENDIF
+ ELSE IF(IMODE.EQ.4) THEN
+ ICOA1 = ICI1
+ ICOA2 = 0
+ ICOB1 = ICI2
+ ICOB2 = 0
+ ELSE IF(IMODE.EQ.0) THEN
+ II = 0
+ ELSE IF(IMODE.EQ.-1) THEN
+ METHOD = ICI1
+ MAXCOL = ICI2
+ ELSE IF(IMODE.EQ.-2) THEN
+ WRITE(LO,'(1X,A,2I5)') 'PHO_SELCOL: METHOD,MAXCOL',
+ & METHOD,MAXCOL
+ ELSE
+ WRITE(LO,'(1X,A,I5)')
+ & 'PHO_SELCOL:ERROR: unsupported mode',IMODE
+ CALL PHO_ABORT
+ ENDIF
+
+ ELSE
+ WRITE(LO,'(1X,A,I5)')
+ & 'PHO_SELCOL:ERROR:unsupported method selected',METHOD
+ CALL PHO_ABORT
+ ENDIF
+
+ II = ABS(II)
+ IF(IDEB(75).GE.10) THEN
+ WRITE(LO,'(1X,A,I5,I12,I5)') 'PHO_SELCOL: IMODE,MAXCOL,II',
+ & IMODE,MAXCOL,II
+ WRITE(LO,'(10X,A,2I5)') 'input colors',ICI1,ICI2
+ WRITE(LO,'(10X,A,4I5)') 'output colors',ICOA1,ICOA2,ICOB1,ICOB2
+ ENDIF
+
+ END
+
+CDECK ID>, ipho_diqu
+ INTEGER FUNCTION ipho_diqu(iq1,iq2)
+C***********************************************************************
+C
+C selection of diquark number (PDG convention)
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer iq1,iq2
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C external functions
+ double precision DT_RNDM
+
+C local variables
+ integer i0,i1,i2
+ double precision dum
+
+ i1 = abs(iq1)
+ i2 = abs(iq2)
+
+ if(i1.eq.i2) then
+ i0 = i1*1100+3
+ else
+ i0 = max(i1,i2)*1000+min(i1,i2)*100
+ if(DT_RNDM(dum).gt.PARMDL(135)) then
+ i0 = i0+1
+ else
+ i0 = i0+3
+ endif
+ endif
+
+ ipho_diqu = sign(i0,iq1)
+
+ END
+
+CDECK ID>, PHO_PARREM
+ SUBROUTINE PHO_PARREM(INDX,IOUT,IREM,IREJ)
+C**********************************************************************
+C
+C selection of particle remnant flavour(s) (quark or diquark)
+C
+C input: INDX index of particle in /POEVT1/
+C IOUT parton which was taken out
+C
+C output: IREM remnant according to valence flavours
+C IREJ 0 flavour combination possible
+C 1 flavour combination impossible
+C
+C all particle ID are given according to PDG conventions
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer INDX,IOUT,IREM,IREJ
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C external functions
+ integer ipho_diqu
+
+C local variables
+ integer ID,IS,ID1,ID2,i,k,K1,K2,IQUA,IDQ
+ dimension IQUA(3),IDQ(2)
+
+ ID1 = IDHEP(INDX)
+ ID2 = IMPART(INDX)
+ IREJ = 0
+
+ IF(ID2.EQ.0) THEN
+ WRITE(LO,'(1X,A,I6)') 'PHO_PARREM: no CPC ID available for',INDX
+ CALL PHO_ABORT
+ ENDIF
+
+C particle with flavour mixing
+ if(ID1.eq.22) then
+C photon
+ IREM = -IOUT
+ GOTO 100
+ else if((ID1.eq.111).or.(ID1.eq.113).or.(ID1.eq.223)) then
+C pi0, rho0, and omega
+ IF(ABS(IOUT).LE.2) THEN
+ IREM = -IOUT
+ GOTO 100
+ ELSE
+ GOTO 150
+ ENDIF
+ else if((abs(ID1).eq.311).or.(ID1.eq.310).or.(ID1.eq.130)) then
+C neutral kaons (K0,K0-bar)
+ if(abs(IOUT).eq.1) then
+ IREM = sign(3,-IOUT)
+ goto 100
+ else if(abs(IOUT).eq.3) then
+ IREM = sign(1,-IOUT)
+ goto 100
+ else
+ goto 150
+ endif
+ else if((ID1.eq.990).or.(ID1.eq.110)) then
+C pomeron and reggeon
+ IREM = -IOUT
+ GOTO 100
+ endif
+
+C ordinary hadron
+ ID = abs(ID2)
+ IS = sign(1,ID2)
+ IQUA(1) = iq_list(1,ID)*IS
+ IQUA(2) = iq_list(2,ID)*IS
+ IQUA(3) = iq_list(3,ID)*IS
+
+C compare to flavour content
+ IF(ABS(IOUT).LT.1000) THEN
+C single quark requested
+ IF(IQUA(1).EQ.IOUT) THEN
+ K1 = 2
+ K2 = 3
+ ELSE IF(IQUA(2).EQ.IOUT) THEN
+ K1 = 1
+ K2 = 3
+ ELSE IF(IQUA(3).EQ.IOUT) THEN
+ K1 = 1
+ K2 = 2
+ ELSE
+ GOTO 150
+ ENDIF
+ IF(IQUA(3).EQ.0) THEN
+ IREM = IQUA(K1)
+ ELSE
+ IREM = ipho_diqu(IQUA(K1),IQUA(K2))
+ ENDIF
+ ELSE IF(IQUA(3).NE.0) THEN
+C diquark requested from baryon
+ IDQ(1) = IOUT/1000
+ IDQ(2) = (IOUT-IDQ(1)*1000)/100
+ do i=1,2
+ do k=1,3
+ if(IDQ(i).eq.IQUA(k)) then
+ IQUA(k) = 0
+ goto 110
+ endif
+ enddo
+ goto 150
+ 110 continue
+ enddo
+ IREM = IQUA(1)+IQUA(2)+IQUA(3)
+ ENDIF
+
+ 100 CONTINUE
+C debug output
+ IF(IDEB(72).GE.10) WRITE(LO,'(1X,A,5I6)')
+ & 'PHO_PARREM: INDX,ID-PDG,ID-BAM,IOUT,IREM',
+ & INDX,ID1,ID2,IOUT,IREM
+ RETURN
+
+C rejection
+ 150 CONTINUE
+ IREJ = 1
+ IF(IDEB(72).GE.2) WRITE(LO,'(1X,A,5I7)')
+ & 'PHO_PARREM: rejection IDPDG,Q1-3,IOUT',IDHEP(INDX),IQUA,IOUT
+
+ END
+
+CDECK ID>, PHO_VALFLA
+ SUBROUTINE PHO_VALFLA(IPAR,IFL1,IFL2,E1,E2)
+C***********************************************************************
+C
+C selection of valence flavour decomposition of particle IPAR
+C
+C input: IPAR particle index in /POEVT1/
+C -1 initialization
+C -2 output of statistics
+C XMASS mass of particle
+C (important for pomeron:
+C mass dependent flavour sampling)
+C
+C output: IFL1,IFL2
+C baryon: IFL1 diquark flavour
+C (valence flavours according to PDG conventions)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 0.1D0,
+ & DEPS = 1.D-15)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+ data ITMX / 5 /
+
+ IF(IPAR.GT.0) THEN
+ K = IPAR
+C select particle code
+ ID1 = IDHEP(K)
+ ID = abs(IMPART(K))
+ IBAR = IPHO_BAR3(K,2)
+ ITER = 0
+
+ 10 CONTINUE
+
+ ifl1 = 0
+ ifl2 = 0
+ ITER = ITER+1
+ if(ITER.GT.ITMX) then
+ WRITE(LO,'(1x,2a,i10,1p,2e11.3)') 'PHO_VALFLA: ',
+ & 'no valences found for (IPAR,E1,E2)',IPAR,E1,E2
+ return
+ endif
+
+C not baryon
+ IF(IBAR.EQ.0) THEN
+
+C photon
+ IF(ID1.EQ.22) THEN
+C charge dependent flavour sampling
+ 15 CONTINUE
+ K = INT(DT_RNDM(E1)*6.D0)+1
+ IF(K.LE.4) THEN
+ IFL1 = 2
+ IFL2 = -2
+ ELSE IF(K.EQ.5) THEN
+ IFL1 = 1
+ IFL2 = -1
+ ELSE
+ IFL1 = 3
+ IFL2 = -3
+ ENDIF
+C optional strangeness suppression
+ IF((IFL1.EQ.3).AND.(DT_RNDM(E2).GT.PARMDL(160))) GOTO 15
+ IF(DT_RNDM(DUM).LT.0.5D0) THEN
+ K = IFL1
+ IFL1 = IFL2
+ IFL2 = K
+ ENDIF
+
+C pomeron, reggeon
+ ELSE IF((ID1.EQ.990).or.(ID1.eq.110)) THEN
+ IF(ISWMDL(19).EQ.0) THEN
+C SU(3) symmetric valences
+ K = INT(DT_RNDM(E1)*3.D0)+1
+ IF(DT_RNDM(DUM).LT.0.5D0) THEN
+ IFL1 = K
+ ELSE
+ IFL1 = -K
+ ENDIF
+ IFL2 = -IFL1
+ ELSE IF(ISWMDL(19).EQ.1) THEN
+C mass dependent flavour sampling
+ EMIN = MIN(E1,E2)
+ CALL PHO_SEAFLA(IPAR,IFL1,IFL2,EMIN)
+ ELSE
+ WRITE(LO,'(/1X,2A,I5)') 'PHO_VALFLA: ',
+ & 'invalid flavour selection mode ISWMDL(19)',ISWMDL(19)
+ CALL PHO_ABORT
+ ENDIF
+
+C meson with flavour mixing
+ ELSE if((ID1.eq.111).or.(ID1.eq.113).or.(ID1.eq.223)) then
+ K = INT(2.D0*DT_RNDM(E1))+1
+ IFL1 = K
+ IFL2 = -K
+C meson (standard)
+ ELSE
+ K = INT(2.D0*DT_RNDM(E1))+1
+ IFL1 = iq_list(K,ID)
+ K = MOD(K,2) + 1
+ IFL2 = iq_list(K,ID)
+ if(IFL1.EQ.0) then
+ EMIN = MIN(E1,E2)
+ CALL PHO_SEAFLA(IPAR,IFL1,IFL2,EMIN)
+ endif
+ ENDIF
+
+C baryon
+ ELSE
+ K = INT(2.999999D0*DT_RNDM(E2))+1
+ K1 = MOD(K,3)+1
+ K2 = MOD(K1,3)+1
+ IFL1 = ipho_diqu(iq_list(K1,ID),iq_list(K2,ID))
+ IFL2 = iq_list(K,ID)
+ ENDIF
+
+C change sign for antiparticles
+ if(ID1.lt.0) then
+ IFL1 = -IFL1
+ IFL2 = -IFL2
+ endif
+
+************************************************************************
+C check kinematic constraints
+* IF((PHO_PMASS(IFL1,3).GT.E1)
+* & .OR.(PHO_PMASS(IFL2,3).GT.E2)) GOTO 10
+************************************************************************
+
+C debug output
+ IF(IDEB(46).GE.10) WRITE(LO,'(1X,A,I5,2E12.4,2I7)')
+ & 'PHO_VALFLA: IPAR,MASS1/2,FL1/2',IPAR,E1,E2,IFL1,IFL2
+
+ ELSE IF(IPAR.EQ.-1) THEN
+C initialization
+
+ ELSE IF(IPAR.EQ.-2) THEN
+C output of final statistics
+
+ ELSE
+ WRITE(LO,'(1X,A,I10)')
+ & 'PHO_VALFLA:ERROR: invalid input particle (IPAR)',IPAR
+ CALL PHO_ABORT
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_REGFLA
+ SUBROUTINE PHO_REGFLA(JM1,JM2,IFLR1,IFLR2,IREJ)
+C**********************************************************************
+C
+C selection of reggeon flavours
+C
+C input: JM1,JM2 position index of mother hadrons
+C
+C output: IFLR1,IFLR2 valence flavours according to
+C PDG conventions and JM1,JM2
+C IREJ 0 reggeon possible
+C 1 reggeon impossible
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 0.1D0,
+ & DEPS = 1.D-15)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ IF(JM1.GT.0) THEN
+ IREJ = 0
+ ITER = 0
+C available energy
+ E1 = SQRT((PHEP(4,JM1)+PHEP(4,JM2))**2
+ & -(PHEP(1,JM1)+PHEP(1,JM2))**2
+ & -(PHEP(2,JM1)+PHEP(2,JM2))**2
+ & -(PHEP(3,JM1)+PHEP(3,JM2))**2)/2.D0
+ 50 CONTINUE
+ ITER = ITER+1
+ IF(ITER.GT.50) THEN
+ IREJ = 1
+C debug output
+ IF(IDEB(41).GE.2) WRITE(LO,'(/1X,A,2I7,1P,E12.4)')
+ & 'PHO_REGFLA: rejection, no reggeon found for',
+ & IDHEP(JM1),IDHEP(JM2),E1
+ RETURN
+ ENDIF
+
+ CALL PHO_VALFLA(JM1,IFLA1,IFLA2,E1,E1)
+ CALL PHO_VALFLA(JM2,IFLB1,IFLB2,E1,E1)
+ IF(IFLA1.EQ.-IFLB1) THEN
+ IFLR1 = IFLA2
+ IFLR2 = IFLB2
+ ELSE IF(IFLA1.EQ.-IFLB2) THEN
+ IFLR1 = IFLA2
+ IFLR2 = IFLB1
+ ELSE IF(IFLA2.EQ.-IFLB1) THEN
+ IFLR1 = IFLA1
+ IFLR2 = IFLB2
+ ELSE IF(IFLA2.EQ.-IFLB2) THEN
+ IFLR1 = IFLA1
+ IFLR2 = IFLB1
+ ELSE
+C debug output
+ IF(IDEB(41).GE.25) WRITE(LO,'(/1X,A,3I4)')
+ & 'PHO_REGFLA: int.rejection JM1,JM2,ITRY',JM1,JM2,ITER
+ GOTO 50
+ ENDIF
+C debug output
+ IF(IDEB(41).GE.10) WRITE(LO,'(1X,A,/5X,2I4,2I6,2I5,1PE10.3)')
+ & 'PHO_REGFLA: JM1/2,PDG-ID1/2,IFLR1/2,MASS',
+ & JM1,JM2,IDHEP(JM1),IDHEP(JM2),IFLR1,IFLR2,E1
+ ELSE IF(JM1.EQ.-1) THEN
+C initialization
+ ELSE IF(JM1.EQ.-2) THEN
+C output of statistics
+ ELSE
+ WRITE(LO,'(1X,A,I10)')
+ & 'PHO_REGFLA: invalid mother particle (JM1)',JM1
+ CALL PHO_ABORT
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SEAFLA
+ SUBROUTINE PHO_SEAFLA(IPAR,IFL1,IFL2,CHMASS)
+C**********************************************************************
+C
+C selection of sea flavour content of particle IPAR
+C
+C input: IPAR particle index in /POEVT1/
+C CHMASS available invariant string mass
+C positive mass --> use BAMJET method
+C negative mass --> SU(3) symmetric sea according
+C to values given in PARMDL(1-6)
+C IPAR -1 initialization
+C -2 output of statistics
+C
+C output: sea flavours according to PDG conventions
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 0.1D0,
+ & DEPS = 1.D-15)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+
+ IF(IPAR.GT.0) THEN
+ IF((ISWMDL(20).EQ.1).OR.(CHMASS.LT.0.D0)) THEN
+C constant weights for sea
+ 15 CONTINUE
+ SUM = 0.D0
+ DO 40 K=1,NFSEA
+ SUM = SUM + PARMDL(K)
+ 40 CONTINUE
+ XI = DT_RNDM(SUM)*SUM
+ SUM = 0.D0
+ DO 50 K=1,NFSEA
+ SUM = SUM + PARMDL(K)
+ IF(XI.LE.SUM) GOTO 55
+ 50 CONTINUE
+ 55 CONTINUE
+ IF(K.GT.NFSEA) GOTO 15
+ ELSE
+C mass dependent flavour sampling
+ 10 CONTINUE
+ CALL PHO_FLAUX(CHMASS,K)
+ IF(K.GT.NFSEA) GOTO 10
+ ENDIF
+ IF(DT_RNDM(CHMASS).GT.0.5D0) K = -K
+ IFL1 = K
+ IFL2 = -K
+ IF(IDEB(46).GE.10) THEN
+ WRITE(LO,'(1X,A,3I5,E12.4)') 'PHO_SEAFLA:IPAR,IFL1,IFL2,MASS',
+ & IPAR,IFL1,IFL2,CHMASS
+ ENDIF
+ ELSE IF(IPAR.EQ.-1) THEN
+C initialization
+ NFSEA = NFS
+ ELSE IF(IPAR.EQ.-2) THEN
+C output of statistics
+ ELSE
+ WRITE(LO,'(1X,A,I10)') 'PHO_SEAFLA:ERROR:INVALID IPAR',IPAR
+ CALL PHO_ABORT
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_FLAUX
+ SUBROUTINE PHO_FLAUX(EQUARK,K)
+C***********************************************************************
+C
+C auxiliary subroutine to select flavours
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-14 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+
+ DIMENSION WGHT(9)
+
+C calculate weights for given energy
+ IF(EQUARK.LT.QMASS(1)) THEN
+ IF(IDEB(16).GE.5)
+ & WRITE(LO,'(1X,A,E12.3)') 'PHO_FLAUX: VERY SMALL MASS',
+ & EQUARK
+ WGHT(1) = 0.5D0
+ WGHT(2) = 0.5D0
+ WGHT(3) = 0.D0
+ WGHT(4) = 0.D0
+ SUM = 1.D0
+ ELSE
+ SUM = 0.D0
+ DO 305 K=1,NFS
+ IF(EQUARK.GT.QMASS(K)) THEN
+ WGHT(K) = PHO_BETAF(EQUARK,QMASS(K),BET)
+ ELSE
+ WGHT(K) = 0.D0
+ ENDIF
+ SUM = SUM + WGHT(K)
+ 305 CONTINUE
+ ENDIF
+C sample flavours
+ XI = SUM*(DT_RNDM(SUM)-DEPS)
+ K = 0
+ SUM = 0.D0
+ 400 CONTINUE
+ K = K+1
+ SUM = SUM + WGHT(K)
+ IF(XI.GT.SUM) GOTO 400
+C debug output
+ IF(IDEB(16).GE.20) THEN
+ WRITE(LO,'(1X,A,I5)') 'PHO_FLAUX: selected flavour',K
+ ENDIF
+ END
+
+CDECK ID>, PHO_BETAF
+ DOUBLE PRECISION FUNCTION PHO_BETAF(X1,X2,BET)
+C********************************************************************
+C
+C weights of different quark flavours
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ AX=0.D0
+ BETX1=BET*X1
+ IF(BETX1.LT.70.D0) AX=-1.D0/BET**2*(BETX1+1.D0)*EXP(-BETX1)
+ AY=1.D0/BET**2*(BET*X2+1.D0)*EXP(-BET*X2)
+
+ PHO_BETAF=AX+AY
+
+ END
+
+CDECK ID>, PHO_MCHECK
+ SUBROUTINE PHO_MCHECK(J1,IREJ)
+C********************************************************************
+C
+C check parton momenta for fragmentation
+C
+C input: J1 first string number
+C /POEVT1/
+C /POSTRG/
+C
+C output: /POEVT1/
+C /POSTRG/
+C IREJ 0 successful
+C 1 failure
+C
+C in case of very small string mass:
+C NNCH mass label of string
+C 0 string
+C -1 octett baryon / pseudo scalar meson
+C 1 decuplett baryon / vector meson
+C IBHAD hadron number according to CPC,
+C string will be treated as resonance
+C (sometimes far off mass shell)
+C
+C constant WIDTH ( 0.01GeV ) determines range of acceptance
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( WIDTH = 0.01D0,
+ & DEPS = 1.D-15 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ IREJ = 0
+C quark antiquark jet
+ STRM = PHEP(5,NPOS(1,J1))
+ IF(NCODE(J1).EQ.3) THEN
+ CALL PHO_MEMASS(IPAR1(J1),IPAR2(J1),
+ & AMPS,AMPS2,AMVE,AMVE2,IPS,IVE)
+ IF(IDEB(18).GE.5)
+ & WRITE(LO,'(1X,A,/3X,I3,5E12.3)')
+ & 'PHO_MCHECK:1.STRING NO, CHMASS,AMPS,AMPS2,AMVE,AMVE2 ',
+ & J1,STRM,AMPS,AMPS2,AMVE,AMVE2
+ IF(STRM.LT.AMPS) THEN
+ IREJ = 1
+ IFAIL(20) = IFAIL(20) + 1
+ RETURN
+ ELSE IF(STRM.LT.AMPS2) THEN
+ IF(STRM.LT.(AMVE-WIDTH)) THEN
+ NNCH(J1) = -1
+ IBHAD(J1) = IPS
+ ELSE
+ NNCH(J1) = 1
+ IBHAD(J1) = IVE
+ ENDIF
+ ELSE
+ NNCH(J1) = 0
+ IBHAD(J1) = 0
+ ENDIF
+C quark diquark or v.s. jet
+ ELSE IF((NCODE(J1).EQ.4).OR.(NCODE(J1).EQ.6)) THEN
+ CALL PHO_BAMASS(IPAR1(J1),IPAR2(J1),IPAR3(J1),
+ & AM8,AM82,AM10,AM102,I8,I10)
+ IF(IDEB(18).GE.5)
+ & WRITE(LO,'(1X,A,/5X,I3,5E12.3)')
+ & 'PHO_MCHECK:1.STRING NO, CHMASS,AM8,AM82,AM10,AM102 ',
+ & J1,STRM,AM8,AM82,AM10,AM102
+ IF(STRM.LT.AM8) THEN
+ IREJ = 1
+ IFAIL(19) = IFAIL(19) + 1
+ RETURN
+ ELSE IF(STRM.LT.AM82) THEN
+ IF(STRM.LT.(AM10-WIDTH)) THEN
+ NNCH(J1) = -1
+ IBHAD(J1) = I8
+ ELSE
+ NNCH(J1) = 1
+ IBHAD(J1) = I10
+ ENDIF
+ ELSE
+ NNCH(J1) = 0
+ IBHAD(J1) = 0
+ ENDIF
+C diquark a-diquark string
+ ELSE IF(NCODE(J1).EQ.5) THEN
+ CALL PHO_DQMASS(IPAR1(J1),IPAR2(J1),IPAR3(J1),IPAR4(J1),
+ & AM82,AM102)
+ IF(IDEB(18).GE.5)
+ & WRITE(LO,'(1X,A,/5X,I3,3E12.3)')
+ & 'PHO_MCHECK:1.STRING NO, CHMASS,AM82,AM102 ',
+ & J1,STRM,AM82,AM102
+ IF(STRM.LT.AM82) THEN
+ IREJ = 1
+ IFAIL(19) = IFAIL(19) + 1
+ RETURN
+ ELSE
+ NNCH(J1) = 0
+ IBHAD(J1) = 0
+ ENDIF
+ ELSE IF(NCODE(J1).LT.0) THEN
+ RETURN
+ ELSE
+ WRITE(LO,'(/,1X,2A,2I8)') 'PHO_MCHECK: ',
+ & 'inconsistent flavours for string (NO,NCODE)',J1,NCODE(J1)
+ CALL PHO_ABORT
+ ENDIF
+ END
+
+CDECK ID>, PHO_POMCOR
+ SUBROUTINE PHO_POMCOR(IREJ)
+C********************************************************************
+C
+C join quarks to gluons in case of too small masses
+C
+C input: /POEVT1/
+C /POSTRG/
+C IREJ -1 initialization
+C -2 output of statistics
+C
+C output: /POEVT1/
+C /POSTRG/
+C IREJ 0 successful
+C 1 failure
+C
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+ DIMENSION PJ(4)
+
+ IF(IREJ.EQ.-1) THEN
+ ICTOT = 0
+ ICCOR = 0
+ RETURN
+ ELSE IF(IREJ.EQ.-2) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A,2I8)')
+C & 'PHO_POMCOR: total/joined strings',ICTOT,ICCOR
+ RETURN
+ ENDIF
+C
+ IREJ = 0
+C
+ NITER = 100
+ ITER = 0
+ ICTOT = ICTOT+ISTR
+ IF(ISWMDL(25).LE.0) RETURN
+C debug string entries
+ IF(IDEB(83).GE.25) CALL PHO_PRSTRG
+C
+ 50 CONTINUE
+ ITER = ITER+1
+ IF(ITER.GE.NITER) THEN
+ IREJ = 1
+ IF(IDEB(83).GE.2) THEN
+ WRITE(LO,'(1X,A,2I5)') 'PHO_POMCOR: rejection',ITER,NITER
+ IF(IDEB(83).GE.10) CALL PHO_PREVNT(0)
+ ENDIF
+ RETURN
+ ENDIF
+C
+C check mass limits
+ ISTRO = ISTR
+ DO 100 I=1,ISTRO
+ IF(NCODE(I).LT.0) GOTO 99
+ J1 = NPOS(1,I)
+ NRPOM = IPHIST(2,J1)
+ IF(NRPOM.GE.100) GOTO 99
+ CMASS0 = PHEP(5,J1)
+C get masses
+ IF(NCODE(I).EQ.3) THEN
+ CALL PHO_MEMASS(IPAR1(I),IPAR2(I),AM1,AM2,AM3,AM4,IP1,IP2)
+ ELSE IF((NCODE(I).EQ.4).OR.(NCODE(I).EQ.6)) THEN
+ CALL PHO_BAMASS(IPAR1(I),IPAR2(I),IPAR3(I),
+ & AM1,AM2,AM3,AM4,IP1,IP2)
+ ELSE IF(NCODE(I).EQ.5) THEN
+ CALL PHO_DQMASS(IPAR1(I),IPAR2(I),IPAR3(I),IPAR4(I),
+ & AM1,AM2)
+ AM3 = 0.D0
+ AM4 = 0.D0
+ IP1 = 0
+ IP2 = 0
+ ELSE IF(NCODE(I).EQ.7) THEN
+ GOTO 99
+ ELSE IF(NCODE(I).LT.0) THEN
+ GOTO 99
+ ELSE
+ WRITE(LO,'(/,1X,A,2I5)') 'ERROR:PHO_POMCOR:STRING NO,NCODE ',
+ & J1,NCODE(I)
+ CALL PHO_ABORT
+ ENDIF
+ IF(IDEB(83).GE.5)
+ & WRITE(LO,'(1X,A,/3X,2I4,5E11.3,2I5)')
+ & 'PHO_POMCOR: STRING,POM,CHMASS,AM1,AM2,AM3,AM4,IP1,IP2',
+ & I,NRPOM,CMASS0,AM1,AM2,AM3,AM4,IP1,IP2
+C select masses to correct
+ IF(CMASS0.LT.MAX(AM2,AM4)) THEN
+ DO 200 K=1,ISTRO
+ IF((K.NE.I).AND.(NCODE(K).GE.0)) THEN
+ J2 = NPOS(1,K)
+C join quarks to gluon
+ IF(NRPOM.EQ.IPHIST(2,J2)) THEN
+C flavour check
+ IFL1 = 0
+ IFL2 = 0
+ PROB1 = 0.D0
+ PROB2 = 0.D0
+ KK1 = NPOS(2,I)
+ KK2 = NPOS(2,K)
+ IF(IDHEP(KK1)+IDHEP(KK2).EQ.0) THEN
+ CMASS = (PHEP(4,KK1)+PHEP(4,KK2))**2
+ & -(PHEP(1,KK1)+PHEP(1,KK2))**2
+ & -(PHEP(2,KK1)+PHEP(2,KK2))**2
+ & -(PHEP(2,KK1)+PHEP(2,KK2))**2
+ IFL1 = ABS(IDHEP(KK1))
+ IF(IFL1.GT.2) THEN
+ PROB1 = 0.1D0/MAX(CMASS,EPS)
+ ELSE
+ PROB1 = 0.9D0/MAX(CMASS,EPS)
+ ENDIF
+ ENDIF
+ KK1 = ABS(NPOS(3,I))
+ KK2 = ABS(NPOS(3,K))
+ IF(IDHEP(KK1)+IDHEP(KK2).EQ.0) THEN
+ CMASS = (PHEP(4,KK1)+PHEP(4,KK2))**2
+ & -(PHEP(1,KK1)+PHEP(1,KK2))**2
+ & -(PHEP(2,KK1)+PHEP(2,KK2))**2
+ & -(PHEP(2,KK1)+PHEP(2,KK2))**2
+ IFL2 = ABS(IDHEP(KK1))
+ IF(IFL2.GT.2) THEN
+ PROB2 = 0.1D0/MAX(CMASS,EPS)
+ ELSE
+ PROB2 = 0.9D0/MAX(CMASS,EPS)
+ ENDIF
+ ENDIF
+ IF(IFL1+IFL2.EQ.0) GOTO 99
+C fusion possible
+ ICCOR = ICCOR+1
+ IF((DT_RNDM(CMASS)*(PROB1+PROB2)).LT.PROB1) THEN
+ JJ = 2
+ JE = 3
+ ELSE
+ JJ = 3
+ JE = 2
+ ENDIF
+ KK1 = ABS(NPOS(JJ,I))
+ KK2 = ABS(NPOS(JJ,K))
+ I1 = ABS(NPOS(JE,I))
+ I2 = KK1
+ IS = SIGN(1,I2-I1)
+ I2 = I2 - IS
+ K1 = KK2
+ K2 = ABS(NPOS(JE,K))
+ KS = SIGN(1,K2-K1)
+ K1 = K1 + KS
+ IP1 = NHEP+1
+C copy mother partons of string I
+ DO 300 II=I1,I2,IS
+ CALL PHO_REGPAR(-1,IDHEP(II),0,J1,J2,PHEP(1,II),
+ & PHEP(2,II),PHEP(3,II),PHEP(4,II),I,IPHIST(2,II),
+ & ICOLOR(1,II),ICOLOR(2,II),IPOS,1)
+ 300 CONTINUE
+C register gluon
+ DO 350 II=1,4
+ PJ(II) = PHEP(II,KK1)+PHEP(II,KK2)
+ 350 CONTINUE
+ CALL PHO_REGPAR(-1,21,0,J1,J2,PJ(1),PJ(2),PJ(3),PJ(4),
+ & I,IPHIST(2,KK2),ICOLOR(1,KK1),ICOLOR(1,KK2),IPOS,1)
+C copy mother partons of string K
+ DO 400 II=K1,K2,KS
+ CALL PHO_REGPAR(-1,IDHEP(II),0,J1,J2,PHEP(1,II),
+ & PHEP(2,II),PHEP(3,II),PHEP(4,II),I,IPHIST(2,II),
+ & ICOLOR(1,II),ICOLOR(2,II),IPOS,1)
+ 400 CONTINUE
+C create new string entry
+ DO 450 II=1,4
+ PJ(II) = PHEP(II,J1)+PHEP(II,J2)
+ 450 CONTINUE
+ IP2 = IPOS
+ CALL PHO_REGPAR(-1,90,0,IP1,-IP2,PJ(1),PJ(2),PJ(3),
+ & PJ(4),I,IPHIST(2,J1),ICOLOR(1,J1)+ICOLOR(1,J2),
+ & ICOLOR(2,J1)+ICOLOR(2,J2),IPOS,1)
+C delete string K in /POSTRG/
+ NCODE(K) = -999
+C update string I in /POSTRG/
+ NPOS(1,I) = IPOS
+ NPOS(2,I) = IP1
+ NPOS(3,I) = -IP2
+C calculate new CPC string codes
+ CALL PHO_ID2STR(IDHEP(IP1),IDHEP(IP2),NCODE(I),IPAR1(I),
+ & IPAR2(I),IPAR3(I),IPAR4(I))
+ GOTO 99
+ ENDIF
+ ENDIF
+ 200 CONTINUE
+ ENDIF
+ 99 CONTINUE
+ 100 CONTINUE
+ IF(IDEB(83).GE.20) THEN
+ WRITE(LO,'(1X,A)') 'PHO_POMCOR: after string recombination'
+ IF(IDEB(83).GE.22) THEN
+ CALL PHO_PRSTRG
+ CALL PHO_PREVNT(0)
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_MASCOR
+ SUBROUTINE PHO_MASCOR(IREJ)
+C********************************************************************
+C
+C check and adjust parton momenta for fragmentation
+C
+C input: /POEVT1/
+C /POSTRG/
+C IREJ -1 initialization
+C -2 output of statistics
+C
+C output: /POEVT1/
+C /POSTRG/
+C IREJ 0 successful
+C 1 failure
+C
+C in case of very small string mass:
+C - direct manipulation of /POEVT1/ and /POEVT2/
+C - string will be deleted from /POSTRG/ (label -99)
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-10,
+ & EMIN = 0.3D0,
+ & DEPS = 1.D-15)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+ DIMENSION PC1(4),PC2(4),P1(4),PTR(4),GAM(3),GAMB(3)
+
+ IF(IREJ.EQ.-1) THEN
+ ICTOT = 0
+ ICCOR = 0
+ RETURN
+ ELSE IF(IREJ.EQ.-2) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A,2I8/)')
+C & 'PHO_MASCOR: total/converted strings',ICTOT,ICCOR
+ RETURN
+ ENDIF
+
+ IREJ = 0
+ NITER = 100
+ ITER = 0
+ ICTOT = ICTOT+ISTR
+ IF(ISWMDL(7).EQ.-1) RETURN
+C debug /POSTRG/
+ IF(IDEB(42).GE.25) CALL PHO_PRSTRG
+
+ ITOUCH = 0
+ 50 CONTINUE
+ ITER = ITER+1
+ IF(ITER.GE.NITER) THEN
+ IREJ = 1
+ IF(IDEB(42).GE.2) THEN
+ WRITE(LO,'(1X,A,2I5)') 'PHO_MASCOR: rejection',ITER,NITER
+ IF(IDEB(42).GE.10) CALL PHO_PREVNT(0)
+ ENDIF
+ RETURN
+ ENDIF
+
+C check mass limits
+ IF(DT_RNDM(CMASS0).LT.0.5D0) THEN
+ IM1 = 1
+ IM2 = ISTR
+ IST = 1
+ ELSE
+ IM1 = ISTR
+ IM2 = 1
+ IST = -1
+ ENDIF
+ DO 100 I=IM1,IM2,IST
+ J1 = NPOS(1,I)
+ CMASS0 = PHEP(5,J1)
+C get masses
+ IF(NCODE(I).EQ.3) THEN
+ CALL PHO_MEMASS(IPAR1(I),IPAR2(I),AM1,AM2,AM3,AM4,IP1,IP2)
+ ELSE IF((NCODE(I).EQ.4).OR.(NCODE(I).EQ.6)) THEN
+ CALL PHO_BAMASS(IPAR1(I),IPAR2(I),IPAR3(I),
+ & AM1,AM2,AM3,AM4,IP1,IP2)
+ ELSE IF(NCODE(I).EQ.5) THEN
+ CALL PHO_DQMASS(IPAR1(I),IPAR2(I),IPAR3(I),IPAR4(I),
+ & AM1,AM2)
+ AM3 = 0.D0
+ AM4 = 0.D0
+ IP1 = 0
+ IP2 = 0
+ ELSE IF(NCODE(I).EQ.7) THEN
+ AM1 = 0.15D0
+ AM2 = 0.3D0
+ AM3 = 0.765D0
+ AM4 = 1.5D0
+*??????????????????????????????????
+ IP1 = 23
+ IP2 = 33
+*??????????????????????????????????
+ ELSE IF(NCODE(I).LT.0) THEN
+ GOTO 90
+ ELSE
+ WRITE(LO,'(/,1X,A,2I5)') 'PHO_MASCOR:ERROR: string no,NCODE ',
+ & J1,NCODE(I)
+ CALL PHO_ABORT
+ ENDIF
+ IF(IDEB(42).GE.20) WRITE(LO,'(1X,A,/3X,I3,5E11.3,2I5)')
+ & 'PHO_MASCOR: string no CHMASS,AM1,AM2,AM3,AM4,IP1,IP2:',
+ & I,CMASS0,AM1,AM2,AM3,AM4,IP1,IP2
+C select masses to correct
+ IBHAD(I) = 0
+ NNCH(I) = 0
+C correction needed?
+C no resonances for diquark-antidiquark and gluon-gluon strings
+ IF(NCODE(I).EQ.5) THEN
+ IF(CMASS0.LT.1.3D0*AM1) THEN
+ IF(ISWMDL(7).LE.2) THEN
+ IBHAD(I) = 90
+ NNCH(I) = -1
+ CHMASS = AM1*1.3D0
+ ELSE
+ IREJ = 1
+ RETURN
+ ENDIF
+ ENDIF
+ ELSE
+ INEED = 0
+C resonances possible
+ IF(ISWMDL(7).EQ.0) THEN
+ IF(CMASS0.LT.AM1*0.99D0) THEN
+ IBHAD(I) = IP1
+ NNCH(I) = -1
+ CHMASS = AM1
+ INEED = 1
+ ELSE IF(CMASS0.LT.MIN(AM2,AM4)*1.2D0) THEN
+ DELM1 = 1.D0/((CMASS0-AM1)**2+EPS)
+ DELM2 = 1.D0/((CMASS0-AM3)**2+EPS)
+ IF(DT_RNDM(DELM1).LT.DELM1/(DELM1+DELM2)) THEN
+ IBHAD(I) = IP1
+ NNCH(I) = -1
+ CHMASS = AM1
+ ELSE
+ IBHAD(I) = IP2
+ NNCH(I) = 1
+ CHMASS = AM3
+ ENDIF
+ ENDIF
+ ELSE IF((ISWMDL(7).EQ.1).OR.(ISWMDL(7).EQ.2)) THEN
+ IF(CMASS0.LT.AM1*0.99) THEN
+ IBHAD(I) = IP1
+ NNCH(I) = -1
+ CHMASS = AM1
+ INEED = 1
+ ENDIF
+ ELSE IF(ISWMDL(7).EQ.3) THEN
+ IF(CMASS0.LT.AM1) THEN
+ IREJ = 1
+ RETURN
+ ENDIF
+ ELSE
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_MASCOR:ERROR:UNSUPPORTED ISWMDL(7)',ISWMDL(7)
+ CALL PHO_ABORT
+ ENDIF
+ ENDIF
+C
+C correction necessary?
+ IF(IBHAD(I).NE.0) THEN
+C find largest invar. mass
+ IPOS = 0
+ CMASS1 = -1.D0
+ DO 200 J2=NHEP,3,-1
+
+ IF(ABS(ISTHEP(J2)).EQ.1) THEN
+ IF((IPHIST(1,J2).LE.0).OR.(IPHIST(1,J2).GT.ISTR)) THEN
+ WRITE(LO,'(1X,2A,I7,I12)') 'PHO_MASCOR: ',
+ & 'inconsistent IPHIST(1,J2) entry (J2,KEV):',J2,KEVENT
+ CALL PHO_PREVNT(0)
+ ELSE IF(NCODE(IPHIST(1,J2)).GT.0) THEN
+ CMASS2= (PHEP(4,J1)+PHEP(4,J2))**2
+ & -(PHEP(1,J1)+PHEP(1,J2))**2
+ & -(PHEP(2,J1)+PHEP(2,J2))**2
+ & -(PHEP(3,J1)+PHEP(3,J2))**2
+ IF(CMASS2.GT.CMASS1) THEN
+ IPOS=J2
+ CMASS1=CMASS2
+ ENDIF
+ ENDIF
+ ENDIF
+
+ 200 CONTINUE
+ J2 = IPOS
+ IF((J1.EQ.J2).OR.(CMASS1.LE.EMIN)) THEN
+ IF(INEED.EQ.1) THEN
+ IREJ = 1
+ RETURN
+ ELSE
+ IBHAD(I) = 0
+ NNCH(I) = 0
+ GOTO 90
+ ENDIF
+ ENDIF
+ ISTA = ISTHEP(J1)
+ ISTB = ISTHEP(J2)
+ CMASS1 = SQRT(CMASS1)
+ CMASS2 = PHEP(5,J2)
+ IF(CMASS1.LT.(CMASS2+CHMASS)) CMASS2 = CMASS1-1.1D0*CHMASS
+ IREJ = 1
+ IF(CMASS2.GT.0.D0) CALL PHO_MSHELL(PHEP(1,J1),PHEP(1,J2),
+ & CHMASS,CMASS2,PC1,PC2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(24) = IFAIL(24)+1
+ IF(IDEB(42).GE.2) THEN
+ WRITE(LO,'(1X,A,2I4)')
+ & 'PHO_MASCOR: rejection by PHO_MSHELL (J1,J2):',J1,J2
+ IF(IDEB(42).GE.10) CALL PHO_PREVNT(0)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+C momentum transfer
+ DO 210 II=1,4
+ PTR(II) = PHEP(II,J2)-PC2(II)
+ 210 CONTINUE
+ IF(IDEB(42).GE.10) WRITE(LO,'(1X,A,/5X,2I3,4E12.3)')
+ & 'PHO_MASCOR: J1,J2,transfer',J1,J2,PTR
+C copy parents of strings
+C register partons belonging to first string
+ IF(IDHEP(J1).EQ.90) THEN
+ K1 = JMOHEP(1,J1)
+ K2 = MAX(JMOHEP(1,J1),-JMOHEP(2,J1))
+ ESUM = 0.D0
+ DO 500 II=K1,K2
+ ESUM = ESUM+PHEP(4,II)
+ 500 CONTINUE
+ IF(JMOHEP(2,J1).GT.0) ESUM = ESUM+PHEP(4,JMOHEP(2,J1))
+ DO 600 II=K1,K2
+ FAC = PHEP(4,II)/ESUM
+ DO 650 K=1,4
+ P1(K) = PHEP(K,II)+FAC*PTR(K)
+ 650 CONTINUE
+ CALL PHO_REGPAR(-1,IDHEP(II),0,J1,J2,P1(1),P1(2),P1(3),
+ & P1(4),IPHIST(1,II),IPHIST(2,II),ICOLOR(1,II),
+ & ICOLOR(2,II),IPOS,1)
+ 600 CONTINUE
+ K1A = IPOS+K1-K2
+ IF(JMOHEP(2,J1).GT.0) THEN
+ II = JMOHEP(2,J1)
+ FAC = PHEP(4,II)/ESUM
+ DO 675 K=1,4
+ P1(K) = PHEP(K,II)+FAC*PTR(K)
+ 675 CONTINUE
+ CALL PHO_REGPAR(-1,IDHEP(II),0,J1,J2,P1(1),P1(2),P1(3),
+ & P1(4),IPHIST(1,II),IPHIST(2,II),ICOLOR(1,II),
+ & ICOLOR(2,II),IPOS,1)
+ ENDIF
+ K2A = -IPOS
+ ELSE
+ K1A = J1
+ K2A = J2
+ ENDIF
+C register partons belonging to second string
+ IF(IDHEP(J2).EQ.90) THEN
+ CALL PHO_GETLTR(PHEP(1,J2),PC2,GAM,GAMB,DELE,IREJL)
+ K1 = JMOHEP(1,J2)
+ K2 = MAX(JMOHEP(1,J2),-JMOHEP(2,J2))
+ ESUM = 0.D0
+ DO 300 II=K1,K2
+ ESUM = ESUM+PHEP(4,II)
+ 300 CONTINUE
+ IF(JMOHEP(2,J2).GT.0) ESUM = ESUM+PHEP(4,JMOHEP(2,J2))
+ DO 400 II=K1,K2
+ FAC = PHEP(4,II)/ESUM
+ IF(IREJL.EQ.0) THEN
+ CALL PHO_MKSLTR(PHEP(1,II),P1,GAM,GAMB)
+ P1(4) = P1(4)+FAC*DELE
+ ELSE
+ DO 450 K=1,4
+ P1(K) = PHEP(K,II)-FAC*PTR(K)
+ 450 CONTINUE
+ ENDIF
+ CALL PHO_REGPAR(-1,IDHEP(II),0,J1,J2,P1(1),P1(2),P1(3),
+ & P1(4),IPHIST(1,II),IPHIST(2,II),ICOLOR(1,II),
+ & ICOLOR(2,II),IPOS,1)
+ 400 CONTINUE
+ K1B = IPOS+K1-K2
+ IF(JMOHEP(2,J2).GT.0) THEN
+ II = JMOHEP(2,J2)
+ FAC = PHEP(4,II)/ESUM
+ IF(IREJL.EQ.0) THEN
+ CALL PHO_MKSLTR(PHEP(1,II),P1,GAM,GAMB)
+ P1(4) = P1(4)+FAC*DELE
+ ELSE
+ DO 475 K=1,4
+ P1(K) = PHEP(K,II)-FAC*PTR(K)
+ 475 CONTINUE
+ ENDIF
+ CALL PHO_REGPAR(-1,IDHEP(II),0,J1,J2,P1(1),P1(2),P1(3),
+ & P1(4),IPHIST(1,II),IPHIST(2,II),ICOLOR(1,II),
+ & ICOLOR(2,II),IPOS,1)
+ ENDIF
+ K2B = -IPOS
+ ELSE
+ K1B = J1
+ K2B = J2
+ ENDIF
+C register first string/collapsed to hadron
+ IF((ISWMDL(7).EQ.0).OR.(ISWMDL(7).EQ.1)) THEN
+ IF(NCODE(I).NE.5) THEN
+ CALL PHO_REGPAR(1,0,IBHAD(I),K1A,K2A,PC1(1),PC1(2),PC1(3),
+ & PC1(4),IPHIST(1,J1),IPHIST(2,J1),0,0,IPOS,1)
+C label string as collapsed to hadron/resonance
+ NCODE(I) = -99
+ IDHEP(J1) = 92
+ ELSE
+ CALL PHO_REGPAR(-1,90,0,K1A,K2A,PC1(1),PC1(2),PC1(3),
+ & PC1(4),IPHIST(1,J1),IPHIST(2,J1),0,0,IPOS,1)
+ IDHEP(J1) = 91
+ ENDIF
+ NPOS(1,I) = IPOS
+ NPOS(2,I) = K1A
+ NPOS(3,I) = K2A
+ ELSE
+ CALL PHO_REGPAR(ISTA,IDHEP(J1),IMPART(J1),K1A,K2A,PC1(1),
+ & PC1(2),PC1(3),PC1(4),IPHIST(1,J1),IPHIST(2,J1),
+ & ICOLOR(1,J1),ICOLOR(2,J1),IPOS,1)
+ IF(IDHEP(J1).EQ.90) THEN
+ NPOS(1,IPHIST(1,J1)) = IPOS
+ NPOS(2,IPHIST(1,J1)) = K1A
+ NPOS(3,IPHIST(1,J1)) = K2A
+C label string as collapsed to resonance-string
+ IDHEP(J1) = 91
+ ELSE IF((IPHIST(1,J1).GE.1).AND.(IPHIST(1,J1).LE.ISTR)) THEN
+ IF(NPOS(1,IPHIST(1,J1)).EQ.J1) NPOS(1,IPHIST(1,J1))=IPOS
+ ENDIF
+ ENDIF
+C register second string/hadron/parton
+ CALL PHO_REGPAR(ISTB,IDHEP(J2),IMPART(J2),K1B,K2B,PC2(1),
+ & PC2(2),PC2(3),PC2(4),IPHIST(1,J2),IPHIST(2,J2),ICOLOR(1,J2),
+ & ICOLOR(2,J2),IPOS,1)
+ IF(IDHEP(J2).EQ.90) THEN
+ NPOS(1,IPHIST(1,J2))=IPOS
+ NPOS(2,IPHIST(1,J2))=K1B
+ NPOS(3,IPHIST(1,J2))=K2B
+C label string touched by momentum transfer
+ IDHEP(J2) = 91
+ ELSE IF((IPHIST(1,J2).GE.1).AND.(IPHIST(1,J2).LE.ISTR)) THEN
+ IF(NPOS(1,IPHIST(1,J2)).EQ.J2) NPOS(1,IPHIST(1,J2))=IPOS
+ ENDIF
+ ICCOR = ICCOR+1
+ ITOUCH = ITOUCH+1
+C consistency checks
+ IF(IDEB(42).GE.5) THEN
+ CALL PHO_CHECK(-1,IDEV)
+ IF(IDEB(42).GE.25) CALL PHO_PREVNT(0)
+ ENDIF
+C jump to next iteration
+ GOTO 50
+ ENDIF
+ 90 CONTINUE
+ 100 CONTINUE
+C debug output
+ IF(IDEB(42).GE.15) THEN
+ IF((ITOUCH.GT.0).OR.(IDEB(42).GE.25)) THEN
+ WRITE(LO,'(1X,A,I5)') 'PHO_MASCOR: iterations:',ITER
+ CALL PHO_PREVNT(1)
+ ENDIF
+ ENDIF
+ END
+
+CDECK ID>, PHO_PARCOR
+ SUBROUTINE PHO_PARCOR(MODE,IREJ)
+C********************************************************************
+C
+C conversion of string partons (using JETSET masses)
+C
+C input: MODE >0 position index of corresponding string
+C -1 initialization
+C -2 output of statistics
+C
+C output: /POSTRG/
+C IREJ 1 combination of strings impossible
+C 0 successful combination
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DELM = 0.005D0,
+ & DEPS = 1.D-15,
+ & EPS = 1.D-5)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+ DIMENSION PP1(4),PP2(4),PB1(4),PB2(4),GAM(3),GAMB(3),
+ & PL(4,100),XMP(100),XML(100)
+
+ DOUBLE PRECISION PYMASS
+
+ IREJ = 0
+ IMODE = MODE
+C
+ IF(IMODE.GT.0) THEN
+ ICH = 0
+ I1 = JMOHEP(1,IMODE)
+ I2 = ABS(JMOHEP(2,IMODE))
+C copy to local field
+ L = 0
+ DO 100 I=I1,I2
+ L = L+1
+ DO 200 K=1,4
+ PL(K,L) = PHEP(K,I)
+ 200 CONTINUE
+ XMP(L) = PHEP(5,I)
+
+ XML(L) = PYMASS(IDHEP(I))
+
+ 100 CONTINUE
+ IPAR = L
+ XMC = PHEP(5,IMODE)
+ IF(IDEB(82).GE.20) THEN
+ WRITE(LO,'(1X,A,I7,2I4)')
+ & 'PHO_PARCOR: ini.momenta,masses(C/L),EV,ICH,L',
+ & KEVENT,IMODE,L
+ DO 150 I=1,L
+ WRITE(LO,'(1X,4E12.4,2X,2E12.4)') (PL(K,I),K=1,4),
+ & XMP(I),XML(I)
+ 150 CONTINUE
+ ENDIF
+C
+C two parton configurations
+C -----------------------------------------
+ IF(IPAR.EQ.2) THEN
+ XM1 = XML(1)
+ XM2 = XML(2)
+ IF((XM1+XM2).GE.XMC) THEN
+ IF(IDEB(82).GE.6) WRITE(LO,'(1X,A,/,5X,I3,3E12.4)')
+ & 'PHO_PARCOR: REJECTION I,XM1,XM2,XMC',
+ & IMODE,XM1,XM2,XMC
+ GOTO 990
+ ENDIF
+C conversion possible
+ CALL PHO_MSHELL(PL(1,1),PL(1,2),XM1,XM2,PP1,PP2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(36) = IFAIL(36)+1
+ IF(IDEB(82).GE.6) WRITE(LO,'(1X,A,I8,I4,E12.4)')
+ & 'PHO_PARCOR: rejection by PHO_MSHELL EV,STRING,MASS',
+ & KEVENT,IMODE,XMC
+ GOTO 990
+ ENDIF
+ ICH = 1
+ DO 115 K=1,4
+ PL(K,1) = PP1(K)
+ PL(K,2) = PP2(K)
+ XMP(1) = XM1
+ XMP(2) = XM2
+ 115 CONTINUE
+C
+C multi parton configurations
+C ---------------------------------
+ ELSE
+C
+C random selection of string side to start with
+ IF(DT_RNDM(XMC).LT.0.5D0) THEN
+ K1 = 1
+ K2 = IPAR
+ KS = 1
+ ELSE
+ K1 = IPAR
+ K2 = 1
+ KS = -1
+ ENDIF
+ ITER = 0
+C
+ 300 CONTINUE
+ IF(ITER.LT.4) THEN
+ KK = K1
+ K1 = K2
+ K2 = KK
+ KS = -KS
+ ELSE
+ GOTO 990
+ ENDIF
+ ITER = ITER+1
+C select method
+ IF(ITER.GT.2) GOTO 230
+
+C conversion according to color flow method
+ IFAI = 0
+ DO 210 II=K1,K2-KS,KS
+ DO 215 IK=II+KS,K2,KS
+ XM1 = XML(II)
+ XM2 = XML(IK)
+* IF(IDEB(82).GE.10) WRITE(LO,'(1X,A,2I3,4E12.4)')
+* & 'PHO_PARCOR:I,K,XM(1-4)',II,IK,XM1,XMP(II),XM2,XMP(IK)
+ IF((ABS(XM1-XMP(II)).GT.DELM)
+ & .OR.(ABS(XM2-XMP(IK)).GT.DELM)) THEN
+ CALL PHO_MSHELL(PL(1,II),PL(1,IK),XM1,XM2,PP1,PP2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(36) = IFAIL(36)+1
+ IF(IDEB(82).GE.6) WRITE(LO,'(1X,2A,I8,3I4)')
+ & 'PHO_PARCOR: ',
+ & 'int.rej. by PHO_MSHELL EV,IC,I1,I2',
+ & KEVENT,IMODE,II,IK
+ IREJ = 0
+ ELSE
+ ICH = ICH+1
+ DO 220 KK=1,4
+ PL(KK,II) = PP1(KK)
+ PL(KK,IK) = PP2(KK)
+ 220 CONTINUE
+ XMP(II) = XM1
+ XMP(IK) = XM2
+ GOTO 219
+ ENDIF
+ ELSE
+ GOTO 219
+ ENDIF
+ 215 CONTINUE
+ IFAI = II
+ 219 CONTINUE
+ 210 CONTINUE
+ IF(IFAI.NE.0) GOTO 300
+ GOTO 950
+C
+ 230 CONTINUE
+C
+C conversion according to remainder method
+ DO 350 I=K1,K2,KS
+ XM1 = XML(I)
+ IF(ABS(XM1-XMP(I)).GT.DELM) THEN
+ ICH = ICH+1
+ IFAI = I
+C conversion necessary
+ DO 400 K=1,4
+ PB1(K) = PL(K,I)
+ PB2(K) = PHEP(K,IMODE)-PB1(K)
+ 400 CONTINUE
+ XM2 = PB2(4)**2-PB2(1)**2-PB2(2)**2-PB2(3)**2
+ IF(XM2.LT.0.D0) THEN
+ IF(IDEB(82).GE.10) WRITE(LO,'(1X,2A,/,5X,3I3,4E12.4)')
+ & 'PHO_PARCOR: ',
+ & 'int.rej. I,IPA,ICH,XML,XMP,XM2**2,MCHAIN',
+ & I,IPAR,IMODE,XM1,XMP(I),XM2,XMC
+ GOTO 300
+ ENDIF
+ XM2 = SQRT(XM2)
+ IF((XM1+XM2).GE.XMC) THEN
+ IF(IDEB(82).GE.10) WRITE(LO,'(1X,2A,/,5X,3I3,4E12.4)')
+ & 'PHO_PARCOR: ',
+ & 'int.rej. I,IPA,ICH,XML,XMP,XM2,XMC',
+ & I,IPAR,IMODE,XM1,XMP(I),XM2,XMC
+ GOTO 300
+ ENDIF
+C conversion possible
+ CALL PHO_MSHELL(PB1,PB2,XM1,XM2,PP1,PP2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(36) = IFAIL(36)+1
+ IF(IDEB(82).GE.6) WRITE(LO,'(1X,A,I8,3I4)')
+ & 'PHO_PARCOR: PHO_MSHELL rej. ITER,STRING,PARTON',
+ & ITER,IMODE,I
+ GOTO 300
+ ENDIF
+C calculate Lorentz transformation
+ CALL PHO_GETLTR(PB2,PP2,GAM,GAMB,DELE,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(82).GE.6) WRITE(LO,'(1X,A,I8,3I4)')
+ & 'PHO_PARCOR: PHO_GETLTR rej. ITER,STRING,PARTON',
+ & ITER,IMODE,I
+ GOTO 300
+ ENDIF
+ IFAI = 0
+C transform remaining partons
+ DO 450 L=K1,K2,KS
+ IF(L.NE.I) THEN
+ CALL PHO_MKSLTR(PL(1,L),PP2,GAM,GAMB)
+ DO 500 K=1,4
+ PL(K,L) = PP2(K)
+ 500 CONTINUE
+ ELSE
+ DO 550 K=1,4
+ PL(K,L) = PP1(K)
+ 550 CONTINUE
+ ENDIF
+ 450 CONTINUE
+ XMP(I) = XM1
+ ENDIF
+ 350 CONTINUE
+ ENDIF
+
+C register transformed partons
+ 950 CONTINUE
+ IREJ = 0
+ IF(ICH.NE.0) THEN
+ IP1 = NHEP+1
+ L = 0
+ DO 700 I=I1,I2
+ L= L+1
+ CALL PHO_REGPAR(-1,IDHEP(I),0,IMODE,0,PL(1,L),PL(2,L),
+ & PL(3,L),PL(4,L),IPHIST(1,I),IPHIST(2,I),ICOLOR(1,I),
+ & ICOLOR(2,I),IPOS,1)
+ 700 CONTINUE
+ IP2 = IPOS
+C register string
+ CALL PHO_REGPAR(-1,90,0,IP1,-IP2,PHEP(1,IMODE),
+ & PHEP(2,IMODE),PHEP(3,IMODE),PHEP(4,IMODE),IPHIST(1,IMODE),
+ & IPHIST(2,IMODE),ICOLOR(1,IMODE),ICOLOR(2,IMODE),IPOS,1)
+C update /POSTRG/
+ I = IPHIST(1,IMODE)
+ NPOS(1,I) = IPOS
+ NPOS(2,I) = IP1
+ NPOS(3,I) = -IP2
+ ENDIF
+C debug output
+ IF(IDEB(82).GE.20) THEN
+ WRITE(LO,'(1X,A,I7,2I4)')
+ & 'PHO_PARCOR: fin.momenta,masses(C/L),(EV,ICH,L)',
+ & KEVENT,IMODE,L
+ DO 850 I=1,L
+ WRITE(LO,'(1X,4E12.4,2X,2E12.4)') (PL(K,I),K=1,4),
+ & XMP(I),XML(I)
+ 850 CONTINUE
+ WRITE(LO,'(1X,A,2I5)')
+ & 'PHO_PARCOR: conversion done (old/new ICH)',IMODE,IPOS
+ ENDIF
+ RETURN
+C rejection
+ 990 CONTINUE
+ IREJ = 1
+ IF(IDEB(82).GE.3) THEN
+ WRITE(LO,'(/1X,A,/,5X,3I5,E12.4)')
+ & 'PHO_PARCOR: rejection I,IPAR,ICHAIN,MCHAIN',
+ & IFAI,IPAR,IMODE,XMC
+ IF(IDEB(82).GE.5) THEN
+ WRITE(LO,'(1X,A,I7,2I4)')
+ & 'PHO_PARCOR: momenta,masses(C/L),(EV,ICH,L)',
+ & KEVENT,IMODE,IPAR
+ DO 155 I=1,IPAR
+ WRITE(LO,'(1X,4E12.4,2X,2E12.4)') (PL(K,I),K=1,4),
+ & XMP(I),XML(I)
+ 155 CONTINUE
+ ENDIF
+ ENDIF
+ RETURN
+
+ ELSE IF(IMODE.EQ.-1) THEN
+C initialization
+ RETURN
+
+ ELSE IF(IMODE.EQ.-2) THEN
+C final output
+ RETURN
+ ENDIF
+ END
+
+CDECK ID>, PHO_STRING
+ SUBROUTINE PHO_STRING(IMODE,IREJ)
+C********************************************************************
+C
+C calculation of string combinatorics, Lorentz boosts and
+C particle codes
+C
+C - splitting of gluons
+C - strings will be built up from pairs of partons
+C according to their color labels
+C with IDHEP(..) = -1
+C - there can be other particles between to string partons
+C (these will be unchanged by string construction)
+C - string mass fine correction
+C
+C input: IMODE 1 complete string processing
+C -1 initialization
+C -2 output of statistics
+C
+C output: /POSTRG/
+C IREJ 1 combination of strings impossible
+C 0 successful combination
+C 50 rejection due to user cutoffs
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-15,
+ & EPS = 1.D-5 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ IREJ = 0
+ IF(IMODE.EQ.-1) THEN
+ CALL PHO_POMCOR(-1)
+ CALL PHO_MASCOR(-1)
+ CALL PHO_PARCOR(-1,IREJ)
+
+ RETURN
+ ELSE IF(IMODE.EQ.-2) THEN
+ CALL PHO_POMCOR(-2)
+ CALL PHO_MASCOR(-2)
+ CALL PHO_PARCOR(-2,IREJ)
+
+ RETURN
+ ENDIF
+
+C generate enhanced graphs
+ IF(IPOIX2.GT.0) THEN
+ 200 CONTINUE
+ I1 = MAX(1,IPOIX1)
+ I2 = IPOIX2
+ IF(ISWMDL(14).EQ.1) IPOIX1 = 0
+ KSPOMS = KSPOM-1
+ KSREGS = KSREG
+ KHPOMS = KHPOM
+ KHDIRS = KHDIR
+ IDDFS1 = IDIFR1
+ IDDFS2 = IDIFR2
+ IDDPOS = IDDPOM
+ DO 110 I=I1,I2
+ IPOIX3 = I
+ KSPOM = 0
+ KSREG = 0
+ KHPOM = 0
+ KHDIR = 0
+ IF(IPORES(I).EQ.8) THEN
+ KSPOM = 2
+ LSPOM = 2
+ LHPOM = 0
+ LSREG = 0
+ LHDIR = 0
+ IGEN = abs(IPHIST(2,IPOPOS(1,I)))
+ CALL PHO_STDPAR(IPOPOS(1,I),IPOPOS(2,I),IGEN,
+ & LSPOM,LSREG,LHPOM,LHDIR,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(4).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_STRING: sec.rejection by PHO_STDPAR',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ KSPOM = KSPOMS+LSPOM
+ KSREG = KSREGS+LSREG
+ KHPOM = KHPOMS+LHPOM
+ KHDIR = KHDIRS+LHDIR
+ ELSE IF(IPORES(I).EQ.4) THEN
+ ITEMP = ISWMDL(17)
+ ISWMDL(17) = 0
+ CALL PHO_CDIFF(IPOPOS(1,I),IPOPOS(2,I),MSOFT,MHARD,1,IREJ)
+ ISWMDL(17) = ITEMP
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(4).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_STRING: sec.rejection by PHO_CDIFF',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ KSDPO = KSDPO+1
+ KSPOM = KSPOMS+KSPOM
+ KSREG = KSREGS+KSREG
+ KHPOM = KHPOMS+KHPOM
+ KHDIR = KHDIRS+KHDIR
+ ELSE
+ IDIF1 = 1
+ IDIF2 = 1
+ IF(IPORES(I).EQ.5) THEN
+ IDIF2 = 0
+ KSTRG = KSTRG+1
+ ELSE IF(IPORES(I).EQ.6) THEN
+ IDIF1 = 0
+ KSTRG = KSTRG+1
+ ELSE
+ KSLOO = KSLOO+1
+ ENDIF
+ ITEMP = ISWMDL(16)
+ ISWMDL(16) = 0
+ SPROB = 1.D0
+ CALL PHO_DIFDIS(IDIF1,IDIF2,IPOPOS(1,I),IPOPOS(2,I),SPROB,
+ & 0,MSOFT,MHARD,IREJ)
+ ISWMDL(16) = ITEMP
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(4).GE.2) THEN
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_STRING: sec.rejection by PHO_DIFDIS',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ KSPOM = KSPOMS+KSPOM
+ KSREG = KSREGS+KSREG
+ KHPOM = KHPOMS+KHPOM
+ KHDIR = KHDIRS+KHDIR
+ ENDIF
+ IDIFR1 = IDDFS1
+ IDIFR2 = IDDFS2
+ IDDPOM = IDDPOS
+ 110 CONTINUE
+ IF(IPOIX2.GT.I2) THEN
+ IPOIX1 = I2+1
+ GOTO 200
+ ENDIF
+ ENDIF
+
+C optional: split gluons to q-qbar pairs
+ IF(ISWMDL(9).GT.0) THEN
+ NHEPO = NHEP
+ DO 30 I=3,NHEPO
+ IF((ISTHEP(I).EQ.-1).AND.(IDHEP(I).EQ.21)) THEN
+ ICG1=ICOLOR(1,I)
+ ICG2=ICOLOR(2,I)
+ IQ1 = 0
+ IQ2 = 0
+ DO 40 K=3,NHEPO
+ IF(ICOLOR(1,K).EQ.-ICG1) THEN
+ IQ1 = K
+ IF(IQ1*IQ2.NE.0) GOTO 45
+ ELSE IF(ICOLOR(1,K).EQ.-ICG2) THEN
+ IQ2 = K
+ IF(IQ1*IQ2.NE.0) GOTO 45
+ ENDIF
+ 40 CONTINUE
+ WRITE(LO,'(/1X,2A,3I6)') 'PHO_STRING:ERROR:(1) ',
+ & 'no matching color found (IG,ICG1,ICG2)',I,ICG1,ICG2
+ CALL PHO_ABORT
+ 45 CONTINUE
+ CALL PHO_GLU2QU(I,IQ1,IQ2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(19).GE.5) THEN
+ WRITE(LO,'(/,1X,A)')
+ & 'PHO_STRING: no gluon splitting possible'
+ CALL PHO_PREVNT(0)
+ ENDIF
+ RETURN
+ ENDIF
+ ENDIF
+ 30 CONTINUE
+ ENDIF
+
+C construct strings and write entries sorted by strings
+
+ ISTR = ISTR+1
+ NHEPO = NHEP
+ DO 50 I=3,NHEPO
+
+ IF(ISTR.GT.MSTR) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_STRING: ',
+ & 'event has too many strings (ISTR,MSTR):',ISTR,MSTR
+ CALL PHO_PREVNT(0)
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ IF(ISTHEP(I).EQ.1) THEN
+C hadrons / resonances / clusters
+ NPOS(1,ISTR) = I
+ NPOS(2,ISTR) = 0
+ NPOS(3,ISTR) = 0
+ NPOS(4,ISTR) = abs(IPHIST(2,I))
+ NCODE(ISTR) = -99
+ IPHIST(1,I) = ISTR
+ ISTR = ISTR+1
+ ELSE IF((ISTHEP(I).EQ.-1).AND.(IDHEP(I).NE.21)) THEN
+C quark /diquark terminated strings
+ ICOL1 = -ICOLOR(1,I)
+ P1 = PHEP(1,I)
+ P2 = PHEP(2,I)
+ P3 = PHEP(3,I)
+ P4 = PHEP(4,I)
+ ICH1 = IPHO_CHR3(I,2)
+ IBA1 = IPHO_BAR3(I,2)
+ CALL PHO_REGPAR(-1,IDHEP(I),IMPART(I),I,0,
+ & P1,P2,P3,P4,IPHIST(1,I),IPHIST(2,I),
+ & ICOLOR(1,I),ICOLOR(2,I),IPOS,1)
+ JM1 = IPOS
+
+ NRPOM = 0
+ 65 CONTINUE
+ DO 55 K=3,NHEPO
+ IF(ISTHEP(K).EQ.-1)THEN
+ IF(IDHEP(K).EQ.21) THEN
+ IF(ICOLOR(1,K).EQ.ICOL1) THEN
+ ICOL1 = -ICOLOR(2,K)
+ GOTO 60
+ ELSE IF(ICOLOR(2,K).EQ.ICOL1) THEN
+ ICOL1 = -ICOLOR(1,K)
+ GOTO 60
+ ENDIF
+ ELSE IF(ICOLOR(1,K).EQ.ICOL1) THEN
+ ICOL1 = 0
+ GOTO 60
+ ENDIF
+ ENDIF
+ 55 CONTINUE
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_STRING:ERROR:(2) no matching color found for',-ICOL1
+ CALL PHO_ABORT
+ 60 CONTINUE
+ P1 = P1+PHEP(1,K)
+ P2 = P2+PHEP(2,K)
+ P3 = P3+PHEP(3,K)
+ P4 = P4+PHEP(4,K)
+ NRPOM = MAX(NRPOM,IPHIST(1,K))
+ ICH1 = ICH1+IPHO_CHR3(K,2)
+ IBA1 = IBA1+IPHO_BAR3(K,2)
+ CALL PHO_REGPAR(-1,IDHEP(K),IMPART(K),K,0,
+ & PHEP(1,K),PHEP(2,K),PHEP(3,K),PHEP(4,K),
+ & IPHIST(1,K),IPHIST(2,K),ICOLOR(1,K),ICOLOR(2,K),IPOS,1)
+C further parton involved?
+ IF(ICOL1.NE.0) GOTO 65
+ JM2 = IPOS
+C register string
+ IGEN = IPHIST(2,K)
+ CALL PHO_REGPAR(-1,90,0,JM1,-JM2,P1,P2,P3,P4,
+ & ISTR,IGEN,ICH1,IBA1,IPOS,1)
+C store additional string information
+ NPOS(1,ISTR) = IPOS
+ NPOS(2,ISTR) = JM1
+ NPOS(3,ISTR) = -JM2
+ NPOS(4,ISTR) = abs(IPHIST(2,K))
+C calculate CPC string codes
+ CALL PHO_ID2STR(IDHEP(JM1),IDHEP(JM2),NCODE(ISTR),
+ & IPAR1(ISTR),IPAR2(ISTR),IPAR3(ISTR),IPAR4(ISTR))
+ ISTR = ISTR+1
+ ENDIF
+ 50 CONTINUE
+
+ DO 150 I=3,NHEPO
+
+ IF(ISTR.GT.MSTR) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_STRING: ',
+ & 'event has too many strings (ISTR,MSTR):',ISTR,MSTR
+ CALL PHO_PREVNT(0)
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ IF(ISTHEP(I).EQ.-1) THEN
+C gluon loop-strings
+ ICOL1 = -ICOLOR(1,I)
+ P1 = PHEP(1,I)
+ P2 = PHEP(2,I)
+ P3 = PHEP(3,I)
+ P4 = PHEP(4,I)
+ IBA1 = 0
+ ICH1 = 0
+ CALL PHO_REGPAR(-1,IDHEP(I),IMPART(I),I,0,
+ & P1,P2,P3,P4,IPHIST(1,I),IPHIST(2,I),
+ & ICOLOR(1,I),ICOLOR(2,I),IPOS,1)
+ JM1 = IPOS
+C
+ NRPOM = 0
+ 165 CONTINUE
+ IF(ICOLOR(2,I).EQ.ICOL1) GOTO 170
+ DO 155 K=I,NHEPO
+ IF(ISTHEP(K).EQ.-1)THEN
+ IF(ICOLOR(1,K).EQ.ICOL1) THEN
+ ICOL1 = -ICOLOR(2,K)
+ GOTO 160
+ ELSE IF(ICOLOR(2,K).EQ.ICOL1) THEN
+ ICOL1 = -ICOLOR(1,K)
+ GOTO 160
+ ENDIF
+ ENDIF
+ 155 CONTINUE
+ WRITE(LO,'(/1X,A,I5)')
+ & 'PHO_STRING:ERROR:(3) no matching color found for',-ICOL1
+ CALL PHO_ABORT
+ 160 CONTINUE
+ P1 = P1+PHEP(1,K)
+ P2 = P2+PHEP(2,K)
+ P3 = P3+PHEP(3,K)
+ P4 = P4+PHEP(4,K)
+ NRPOM = MAX(NRPOM,IPHIST(1,K))
+ CALL PHO_REGPAR(-1,IDHEP(K),IMPART(K),K,0,
+ & PHEP(1,K),PHEP(2,K),PHEP(3,K),PHEP(4,K),
+ & IPHIST(1,K),IPHIST(2,K),ICOLOR(1,K),ICOLOR(2,K),IPOS,1)
+C further parton involved?
+ IF(ICOL1.NE.0) GOTO 165
+ 170 CONTINUE
+ JM2 = IPOS
+C register string
+ IGEN = IPHIST(2,K)
+ CALL PHO_REGPAR(-1,90,0,JM1,-JM2,P1,P2,P3,P4,
+ & ISTR,IGEN,ICH1,IBA1,IPOS,1)
+C store additional string information
+ NPOS(1,ISTR) = IPOS
+ NPOS(2,ISTR) = JM1
+ NPOS(3,ISTR) = -JM2
+ NPOS(4,ISTR) = abs(IPHIST(2,K))
+C calculate CPC string codes
+ CALL PHO_ID2STR(IDHEP(JM1),IDHEP(JM2),NCODE(ISTR),
+ & IPAR1(ISTR),IPAR2(ISTR),IPAR3(ISTR),IPAR4(ISTR))
+ ISTR = ISTR+1
+ ENDIF
+ 150 CONTINUE
+
+ ISTR = ISTR-1
+
+ IF(IDEB(19).GE.17) THEN
+ WRITE(LO,'(1X,A)') 'PHO_STRING: after string construction'
+ CALL PHO_PREVNT(0)
+ ENDIF
+
+C pomeron corrections
+ CALL PHO_POMCOR(IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(38) = IFAIL(38)+1
+ IF(IDEB(19).GE.3) THEN
+ WRITE(LO,'(1X,A,I6)')
+ & 'PHO_STRING: rejection by PHO_POMCOR (IREJ)',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+
+C string mass corrections
+ CALL PHO_MASCOR(IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(34) = IFAIL(34)+1
+ IF(IDEB(19).GE.3) THEN
+ WRITE(LO,'(1X,A,I6)')
+ & 'PHO_STRING: rejection by PHO_MASCOR (IREJ)',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+
+C parton mass corrections
+ DO 100 I=1,ISTR
+ IF(NCODE(I).GE.0) THEN
+ CALL PHO_PARCOR(NPOS(1,I),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(35) = IFAIL(35)+1
+ IF(IDEB(19).GE.3) THEN
+ WRITE(LO,'(1X,A,I6)')
+ & 'PHO_STRING: rejection by PHO_PARCOR (IREJ)',IREJ
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ RETURN
+ ENDIF
+ ENDIF
+ 100 CONTINUE
+
+C statistics of hard processes
+ DO 550 I=3,NHEP
+ IF(ISTHEP(I).EQ.25) THEN
+ K = IMPART(I)
+ II = IDHEP(I)
+ MH_acc_2(K,II) = MH_acc_2(K,II)+1
+ ENDIF
+ 550 CONTINUE
+
+C debug: write out strings
+ IF(IDEB(19).GE.5) THEN
+ IF(IDEB(19).GE.10)
+ & CALL PHO_CHECK(1,IDEV)
+ IF(IDEB(19).GE.15) THEN
+ CALL PHO_PREVNT(0)
+ ELSE
+ CALL PHO_PRSTRG
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_STRFRA
+ SUBROUTINE PHO_STRFRA(IREJ)
+C********************************************************************
+C
+C do all fragmentation of strings
+C
+C output: IREJ 0 successful
+C 1 rejection
+C 50 rejection due to user cutoffs
+C
+C********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+ INTEGER IREJ
+
+ DOUBLE PRECISION PX,PY,PZ,HE,XMB,PT1,PT2,DUM
+
+ INTEGER I,II,IJ,IFOUND,IP,IP_old,IPMOTH,IPOS,IBAM,IJOIN,
+ & IGEN,IS,ISH,ISTR,J,K1,K2,NHEP1,NLINES
+
+ integer indx(500),indx_max
+
+ DOUBLE PRECISION DT_RNDM
+ INTEGER ipho_pdg2id
+ EXTERNAL DT_RNDM,ipho_pdg2id
+
+ DOUBLE PRECISION PYP,RQLUN
+ INTEGER PYK
+
+ INTEGER MSTU,MSTJ
+ DOUBLE PRECISION PARU,PARJ
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ INTEGER N,NPAD,K
+ DOUBLE PRECISION P,V
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+
+ DIMENSION IJOIN(100)
+
+ IREJ = 0
+ IF(ABS(ISWMDL(6)).GT.3) THEN
+ WRITE(LO,'(/1X,2A,I3)') 'PHO_STRFRA:ERROR: ',
+ & 'invalid value of ISWMDL(6)',ISWMDL(6)
+ CALL PHO_ABORT
+ ENDIF
+
+C popcorn suppression
+ IF(PARMDL(134).GT.0.D0) THEN
+ IF(DT_RNDM(DUM).LT.PARMDL(134)) THEN
+ MSTJ(12) = 2
+ ELSE
+ MSTJ(12) = 1
+ ENDIF
+ ENDIF
+
+C copy partons to fragmentation code JETSET
+ IP = 0
+ IP_old = 1
+
+ DO 300 J=1,ISTR
+
+C select partons with common production process
+ IGEN = NPOS(4,J)
+ if(IGEN.lt.0) goto 299
+
+ indx_max = 0
+ DO 400 I=J,ISTR
+ if((IGEN.eq.NPOS(4,I)).or.(IPAMDL(17).eq.0)) then
+
+C write final particles/resonances to JETSET
+ IF(NCODE(I).EQ.-99) THEN
+ II = NPOS(1,I)
+ IP = IP+1
+ P(IP,1) = PHEP(1,II)
+ P(IP,2) = PHEP(2,II)
+ P(IP,3) = PHEP(3,II)
+ P(IP,4) = PHEP(4,II)
+ P(IP,5) = PHEP(5,II)
+ K(IP,1) = 1
+ K(IP,2) = IDHEP(II)
+ K(IP,3) = 0
+ K(IP,4) = 0
+ K(IP,5) = 0
+ IPHIST(2,II) = IP
+
+ if(indx_max.eq.500) then
+ WRITE(LO,'(1x,2a,i8,I12)') 'PHO_STRFRA: ',
+ & 'no space left in index vector (indx,Kevent)',
+ & indx_max,KEVENT
+ IREJ = 1
+ return
+ endif
+
+ indx_max = indx_max+1
+ indx(indx_max) = II
+C write partons to JETSET
+ ELSE IF(NCODE(I).GE.0) THEN
+ K1 = JMOHEP(1,NPOS(1,I))
+ K2 = MAX(JMOHEP(1,NPOS(1,I)),-JMOHEP(2,NPOS(1,I)))
+ IJ = 0
+ DO II=K1,K2
+ IP = IP+1
+ P(IP,1) = PHEP(1,II)
+ P(IP,2) = PHEP(2,II)
+ P(IP,3) = PHEP(3,II)
+ P(IP,4) = PHEP(4,II)
+ P(IP,5) = PHEP(5,II)
+ K(IP,1) = 1
+ K(IP,2) = IDHEP(II)
+ K(IP,3) = 0
+ K(IP,4) = 0
+ K(IP,5) = 0
+ IPHIST(2,II) = IP
+ IJ = IJ+1
+ IJOIN(IJ) = IP
+ indx_max = indx_max+1
+ indx(indx_max) = II
+
+ ENDDO
+ II = JMOHEP(2,NPOS(1,I))
+ IF((II.GT.0).AND.(II.NE.K1)) THEN
+ IP = IP+1
+ P(IP,1) = PHEP(1,II)
+ P(IP,2) = PHEP(2,II)
+ P(IP,3) = PHEP(3,II)
+ P(IP,4) = PHEP(4,II)
+ P(IP,5) = PHEP(5,II)
+ K(IP,1) = 1
+ K(IP,2) = IDHEP(II)
+ K(IP,3) = 0
+ K(IP,4) = 0
+ K(IP,5) = 0
+ IPHIST(2,II) = IP
+ IJ = IJ+1
+ IJOIN(IJ) = IP
+ indx_max = indx_max+1
+ indx(indx_max) = II
+
+ ENDIF
+ N = IP
+C connect partons to strings
+
+ CALL PYJOIN(IJ,IJOIN)
+
+ ENDIF
+
+ NPOS(4,I) = -NPOS(4,I)
+ endif
+ 400 continue
+
+C set Lund counter
+ N = IP
+ if(IP.eq.0) goto 299
+
+C hard final state evolution
+ IF((ISWMDL(8).EQ.1).OR.(ISWMDL(8).EQ.3)) THEN
+ ISH = 0
+ do 125 k1=1,indx_max
+ I = indx(k1)
+ IF(IPHIST(1,I).LE.-100) THEN
+ ISH = ISH+1
+ IJOIN(ISH) = I
+ ENDIF
+ 125 continue
+ IF(ISH.GE.2) THEN
+ DO 130 K1=1,ISH
+ IF(IJOIN(K1).EQ.0) GOTO 130
+ I = IJOIN(K1)
+ IF((IPAMDL(102).EQ.1)
+ & .AND.(IPHIST(1,I).NE.-100)) GOTO 130
+ DO 135 K2=K1+1,ISH
+ IF(IJOIN(K2).EQ.0) GOTO 135
+ II = IJOIN(K2)
+ IF(IPHIST(1,I).EQ.IPHIST(1,II)) THEN
+ PT1 = SQRT(PHEP(1,II)**2+PHEP(2,II)**2)
+ PT2 = SQRT(PHEP(1,I)**2+PHEP(2,I)**2)
+ RQLUN = MIN(PT1,PT2)
+
+ IF(IDEB(22).GE.10) WRITE(LO,'(1X,A,2I5,E12.4)')
+ & 'PHO_STRFRA: PYSHOW called',I,II,RQLUN
+ CALL PYSHOW(IPHIST(2,I),IPHIST(2,II),RQLUN)
+
+ IJOIN(K1) = 0
+ IJOIN(K2) = 0
+ GOTO 130
+ ENDIF
+ 135 CONTINUE
+ 130 CONTINUE
+ ENDIF
+ ENDIF
+
+C fragment parton / hadron configuration (hadronization & decay)
+
+ IF(ISWMDL(6).NE.0) THEN
+ II = MSTU(21)
+ MSTU(21) = 1
+
+ CALL PYEXEC
+
+ MSTU(21) = II
+C Lund warning?
+ if(MSTU(28).ne.0) then
+ IF(IDEB(22).GE.10) THEN
+ WRITE(LO,'(1X,A,I12,I3)')
+ & 'PHO_STRFRA:(1) Lund code warning (EV/code)',
+ & KEVENT,MSTU(28)
+ CALL PHO_PREVNT(2)
+ ENDIF
+ endif
+C event accepted?
+ IF(MSTU(24).NE.0) THEN
+ IF(IDEB(22).GE.2) THEN
+ WRITE(LO,'(1X,A,I12,I3)')
+ & 'PHO_STRFRA:(1) rejection by Lund code (EV/code)',
+ & KEVENT,MSTU(24)
+ CALL PHO_PREVNT(2)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+ ENDIF
+
+ IP = N
+C change particle status in JETSET to avoid internal adjustments
+ do k1=IP_old,IP
+ K(k1,1) = K(k1,1)+1000
+ enddo
+ IP_old = IP+1
+
+ 299 continue
+ 300 CONTINUE
+
+C restore original JETSET particle status codes
+ do i=1,N
+ K(i,1) = K(i,1)-1000
+ enddo
+
+* IF(IDEB(22).GE.25) THEN
+* WRITE(LO,'(//1X,2A)') 'PHO_STRFRA: ',
+* & 'particle/string system before fragmentation'
+* CALL PHO_PREVNT(2)
+* ENDIF
+
+C copy hadrons back to POEVT1 / POEVT2
+
+ IF(IP.GT.0) THEN
+ NHEP1 = NHEP+1
+
+ NLINES = PYK(0,1)
+
+C copy hadrons back with full history information
+ IF(IPAMDL(178).EQ.1) THEN
+ DO 155 II=1,ISTR
+ IF(NCODE(II).GE.0) THEN
+ K1 = IPHIST(2,NPOS(2,II))
+ K2 = IPHIST(2,-NPOS(3,II))
+ ELSE IF(NCODE(II).EQ.-99) THEN
+ K1 = IPHIST(2,NPOS(1,II))
+ K2 = K1
+ ELSE
+ GOTO 149
+ ENDIF
+ IFOUND = 0
+ DO 160 J=1,NLINES
+
+ IF(PYK(J,7).EQ.1) THEN
+ IPMOTH = PYK(J,15)
+
+ IF((IPMOTH.GE.K1).AND.(IPMOTH.LE.K2)) THEN
+
+ IBAM = ipho_pdg2id(PYK(J,8))
+
+ IF((IBAM.EQ.0).AND.(ISWMDL(6).NE.0)) THEN
+ IF(IDEB(22).GE.2) THEN
+ WRITE(LO,'(/1X,2A)') 'PHO_STRFRA: ',
+ & 'LUND interface (1) rejection'
+ CALL PHO_PREVNT(2)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+ IFOUND = IFOUND+1
+
+ PX = PYP(J,1)
+ PY = PYP(J,2)
+ PZ = PYP(J,3)
+ HE = PYP(J,4)
+ XMB = PYP(J,5)**2
+
+C register parton/hadron
+ IS = 1
+ IF(IBAM.EQ.0) THEN
+ IF(ISWMDL(6).EQ.0) THEN
+ IS = -1
+ ELSE
+ IF(IDEB(22).GE.2) THEN
+ WRITE(LO,'(/1X,2A)') 'PHO_STRFRA: ',
+ & 'LUND interface (2) rejection'
+ CALL PHO_PREVNT(2)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+ ENDIF
+
+ CALL PHO_REGPAR(IS,PYK(J,8),IBAM,NPOS(1,II),0,
+ & PX,PY,PZ,HE,J,0,0,0,IPOS,1)
+
+ ISTHEP(IPOS) = 1
+ ENDIF
+ ENDIF
+ 160 CONTINUE
+ IF(IFOUND.EQ.0) THEN
+ IF(IDEB(2).GE.2) THEN
+ WRITE(LO,'(2A,I12,I3)') 'PHO_STRFRA: ',
+ & 'no particles found for string (EVE,ISTR):',KEVENT,II
+ ENDIF
+ ISTHEP(NPOS(1,II)) = 2
+ ENDIF
+ 149 CONTINUE
+ 155 CONTINUE
+ ELSE
+C copy hadrons back without history information
+ JDAHEP(1,1) = NHEP1
+ JDAHEP(1,2) = NHEP1
+ DO 170 J=1,NLINES
+
+ IF(PYK(J,7).EQ.1) THEN
+ IBAM = ipho_pdg2id(PYK(J,8))
+
+ IF((IBAM.EQ.99999).AND.(ISWMDL(6).NE.0)) THEN
+ IF(IDEB(22).GE.2) THEN
+ WRITE(LO,'(/1X,A)')
+ & 'PHO_STRFRA: LUND interface (3) rejection'
+ CALL PHO_PREVNT(2)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ PX = PYP(J,1)
+ PY = PYP(J,2)
+ PZ = PYP(J,3)
+ HE = PYP(J,4)
+ XMB = PYP(J,5)**2
+
+C register parton/hadron
+ IS = 1
+ IF(IBAM.EQ.0) THEN
+ IF(ISWMDL(6).EQ.0) THEN
+ IS = -1
+ ELSE
+ IF(IDEB(22).GE.2) THEN
+ WRITE(LO,'(/1X,A)')
+ & 'PHO_STRFRA: LUND interface (4) rejection'
+ CALL PHO_PREVNT(2)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+ ENDIF
+
+ CALL PHO_REGPAR(IS,PYK(J,8),IBAM,1,2,PX,PY,PZ,
+ & HE,J,0,0,0,IPOS,1)
+
+ ISTHEP(IPOS) = 1
+ ENDIF
+ 170 CONTINUE
+ DO 180 II=1,ISTR
+ IF((NCODE(II).GE.0).OR.(NCODE(II).EQ.-99))
+ & ISTHEP(NPOS(1,II)) = 2
+ 180 CONTINUE
+ ENDIF
+ ENDIF
+
+C debug event status
+ IF(IDEB(22).GE.15) THEN
+ WRITE(LO,'(//1X,A)')
+ & 'PHO_STRFRA: particle system after fragmentation'
+ CALL PHO_PREVNT(2)
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_EVEINI
+ SUBROUTINE PHO_EVEINI(IMODE,P1,P2,IP1,IP2)
+C********************************************************************
+C
+C prepare /POEVT1/ for new event
+C
+C first subroutine called for each event
+C
+C input: P1(4) particle 1
+C P2(4) particle 2
+C IMODE 0 general initialization
+C 1 initialization of particles and kinematics
+C 2 initialization after internal rejection
+C
+C output: IP1,IP2 index of interacting particles
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION P1(4),P2(4)
+
+ PARAMETER ( EPS = 1.D-5,
+ & DEPS = 1.D-15 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C gamma-lepton or gamma-hadron vertex information
+ INTEGER IGHEL,IDPSRC,IDBSRC
+ DOUBLE PRECISION PINI,PFIN,PGAM,GYY,GQ2,GGECM,GAIMP,PFTHE,PFPHI,
+ & RADSRC,AMSRC,GAMSRC
+ COMMON /POFSRC/ PINI(5,2),PFIN(5,2),PGAM(5,2),IGHEL(2),
+ & GYY(2),GQ2(2),GGECM,GAIMP(2),PFTHE(2),PFPHI(2),
+ & IDPSRC(2),IDBSRC(2),RADSRC(2),AMSRC(2),GAMSRC(2)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DIMENSION IM(2)
+
+C reset debug variables
+ KSPOM = 0
+ KHPOM = 0
+ KSREG = 0
+ KHDIR = 0
+ KSTRG = 0
+ KHTRG = 0
+ KSLOO = 0
+ KHLOO = 0
+ KSDPO = 0
+ KSOFT = 0
+ KHARD = 0
+C
+ IDNODF = 0
+ IDIFR1 = 0
+ IDIFR2 = 0
+ IDDPOM = 0
+ ISTR = 0
+ IPOIX1 = 0
+ IF(ISWMDL(14).GT.0) IPOIX1 = 1
+ IPOIX2 = 0
+ IPOIX3 = 0
+C reset /POEVT1/ and /POEVT2/
+ CALL PHO_REGPAR(0,0,0,0,0,0.D0,0.D0,0.D0,0.D0,
+ & 0,0,0,0,IPOS,0)
+ CALL PHO_SELCOL(0,0,0,0,0,0,0)
+ DO 15 I=0,10
+ IPOWGC(I) = 0
+ 15 CONTINUE
+
+C initialization of particle kinematics
+
+C lepton-photon/hadron-photon vertex and initial particles
+ IM(1) = 0
+ IM(2) = 0
+ IF((IPAMDL(11).GT.0).AND.(IDPSRC(1).NE.0)) THEN
+ CALL PHO_REGPAR(1,IDPSRC(1),IDBSRC(1),0,0,PINI(1,1),PINI(2,1),
+ & PINI(3,1),PINI(4,1),0,0,0,0,IM(1),1)
+ ELSE
+ CALL PHO_REGPAR(1,IFPAP(1),IFPAB(1),IM(1),0,P1(1),P1(2),P1(3),
+ & P1(4),0,0,0,0,IP1,1)
+ ENDIF
+ IF((IPAMDL(12).GT.0).AND.(IDPSRC(2).NE.0)) THEN
+ CALL PHO_REGPAR(1,IDPSRC(2),IDBSRC(2),0,0,PINI(1,2),PINI(2,2),
+ & PINI(3,2),PINI(4,2),0,0,0,0,IM(2),1)
+ ELSE
+ CALL PHO_REGPAR(1,IFPAP(2),IFPAB(2),IM(2),0,P2(1),P2(2),P2(3),
+ & P2(4),0,0,0,0,IP2,1)
+ ENDIF
+ IF((IPAMDL(11).GT.0).AND.(IDPSRC(1).NE.0)) THEN
+ CALL PHO_REGPAR(1,IDPSRC(1),IDBSRC(1),IM(1),0,PFIN(1,1),
+ & PFIN(2,1),PFIN(3,1),PFIN(4,1),0,10,0,0,IPOS,1)
+ CALL PHO_REGPAR(1,IFPAP(1),IFPAB(1),IM(1),0,P1(1),P1(2),P1(3),
+ & P1(4),0,0,0,0,IP1,1)
+ ENDIF
+ IF((IPAMDL(12).GT.0).AND.(IDPSRC(2).NE.0)) THEN
+ CALL PHO_REGPAR(1,IDPSRC(2),IDBSRC(2),IM(2),0,PFIN(1,2),
+ & PFIN(2,2),PFIN(3,2),PFIN(4,2),0,10,0,0,IPOS,1)
+ CALL PHO_REGPAR(1,IFPAP(2),IFPAB(2),IM(2),0,P2(1),P2(2),P2(3),
+ & P2(4),0,0,0,0,IP2,1)
+ ENDIF
+ NEVHEP = KACCEP
+
+ IF(IMODE.LE.1) THEN
+C CMS energy
+ ECM = SQRT((P1(4)+P2(4))**2-(P1(1)+P2(1))**2-(P1(2)+P2(2))**2
+ & -(P1(3)+P2(3))**2)
+* CALL PHO_PECMS(1,PMASS(1),PMASS(2),ECM,PCM,EE)
+ PMASS(1) = PHEP(5,IP1)
+ PVIRT(1) = 0.D0
+ IF(IFPAP(1).EQ.22) PVIRT(1) = PMASS(1)**2
+ PMASS(2) = PHEP(5,IP2)
+ PVIRT(2) = 0.D0
+ IF(IFPAP(2).EQ.22) PVIRT(2) = PMASS(2)**2
+ ENDIF
+
+C cross section calculations
+
+ IF(IMODE.NE.1) THEN
+ IP = 1
+ CALL PHO_CSINT(IP,IFPAP(1),IFPAP(2),IGHEL(1),IGHEL(2),
+ & ECM,PVIRT(1),PVIRT(2))
+ ENDIF
+
+ IF(IMODE.LE.0) THEN
+C effective cross section
+ SIGGEN(3) = 0.D0
+ IF(ISWMDL(2).ge.1) THEN
+ IF(IPRON(1,1).EQ.1) SIGGEN(3) = SIGTOT-SIGELA-SIGVM(0,0)
+ & -SIGCDF(0)-SIGLSD(1)-SIGHSD(1)-SIGLSD(2)-SIGHSD(2)-SIGLDD
+ & -SIGHDD-SIGDIR
+ IF(IPRON(2,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGELA
+ IF(IPRON(3,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGVM(0,0)
+ IF(IPRON(4,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGCDF(0)
+ IF(IPRON(5,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGLSD(1)+SIGHSD(1)
+ IF(IPRON(6,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGLSD(2)+SIGHSD(2)
+ IF(IPRON(7,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGLDD+SIGHDD
+ IF(IPRON(8,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGDIR
+C simulate only hard scatterings
+ ELSE
+ IF(IPRON(1,1).EQ.1) SIGGEN(3) = SIGHAR
+ IF(IPRON(8,1).EQ.1) SIGGEN(3) = SIGGEN(3)+SIGDIR
+ ENDIF
+
+ ENDIF
+
+C reset of mother/daughter relations only (IMODE = 2)
+
+C debug output
+ IF(IDEB(63).GE.15) THEN
+ WRITE(LO,'(/1X,2A,I12,I3)') 'PHO_EVEINI: ',
+ & '/POEVT1/ initialized (event/mode)',KEVENT,IMODE
+ IF(IMODE.LE.0) THEN
+ WRITE(LO,'(1X,2A,/,5X,1P,6E12.4)') 'PHO_EVEINI: ',
+ & 'current suppression factors total-1/2 hard-1/2 diff-1/2:',
+ & FSUP,FSUH,FSUD
+ ONEM = -1.D0
+ ITMP = IDEB(57)
+ IDEB(57) = MAX(5,ITMP)
+ CALL PHO_XSECT(1,0,ONEM)
+ IDEB(57) = ITMP
+ ENDIF
+ CALL PHO_PREVNT(0)
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_CSINT
+ SUBROUTINE PHO_CSINT(IP,IFPA,IFPB,IHLA,IHLB,ECM,PVIR2A,PVIR2B)
+C********************************************************************
+C
+C calculate cross sections by interpolation
+C
+C input: IP particle combination
+C IFPA/B particle PDG number
+C IHLA/B particle helicity (photons only)
+C ECM c.m. energy (GeV)
+C PVIR2A virtuality of particle A (GeV**2, positive)
+C PVIR2B virtuality of particle B (GeV**2, positive)
+C
+C output: cross sections stored in /POCSEC/
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-5,
+ & DEPS = 1.D-15 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+
+ DIMENSION PVIRT(2),SIGSRH(2),FSUT(2),FSUL(2),IFPAP(2),IHEL(2)
+
+ dimension PD(-6:6),FH_T(2),FH_L(2)
+
+C debug
+ IF(IDEB(15).GE.10) WRITE(LO,'(1X,A,/10X,I3,2I6,1P3E12.4)')
+ & 'PHO_CSINT: called with IP, IFP1, IFP2, ECM, PVIR1, PVIR2',
+ & IP,IFPA,IFPB,ECM,PVIR2A,PVIR2B
+
+C check currently stored cross sections
+ IF((IP.EQ.IPFIL).AND.(ECM.EQ.ECMFIL)
+ & .AND.(PVIR2A.EQ.P2AFIL).AND.(PVIR2B.EQ.P2BFIL)
+ & .AND.(IFPA.EQ.IFAFIL).AND.(IFPB.EQ.IFBFIL)) THEN
+C nothing to calculate
+ IF(IDEB(15).GE.20)
+ & WRITE(LO,'(1X,A)') 'PHO_CSINT: nothing done'
+ RETURN
+ ELSE
+
+C copy to local fields
+ IFPAP(1) = IFPA
+ IFPAP(2) = IFPB
+ IHEL(1) = IHLA
+ IHEL(2) = IHLB
+ PVIRT(1) = PVIR2A
+ PVIRT(2) = PVIR2B
+
+C load cross sections from interpolation table
+ IF(ECM.LE.SIGECM(IP,1)) THEN
+ I1 = 1
+ I2 = 2
+ ELSE IF(ECM.LE.SIGECM(IP,ISIMAX)) THEN
+ DO 50 I=2,ISIMAX
+ IF(ECM.LE.SIGECM(IP,I)) GOTO 200
+ 50 CONTINUE
+ 200 CONTINUE
+ I1 = I-1
+ I2 = I
+ ELSE
+ WRITE(LO,'(/1X,A,2E12.3)')
+ & 'PHO_CSINT: too high energy',ECM,SIGECM(IP,ISIMAX)
+ CALL PHO_PREVNT(-1)
+ I1 = ISIMAX-1
+ I2 = ISIMAX
+ ENDIF
+ FAC2=0.D0
+ IF(I1.NE.I2) FAC2=LOG(ECM/SIGECM(IP,I1))
+ & /LOG(SIGECM(IP,I2)/SIGECM(IP,I1))
+ FAC1=1.D0-FAC2
+
+C cross section dependence on photon virtualities
+ DO 140 K=1,2
+ FSUP(K) = 1.D0
+ FSUD(K) = 1.D0
+ FSUH(K) = 1.D0
+ IF(IFPAP(K).EQ.22) THEN
+ IF(ISWMDL(10).GE.1) THEN
+ FSUP(K) = 0.D0
+ FSUT(K) = 0.D0
+ FSUL(K) = 0.D0
+ FSUH(K) = 0.D0
+C GVDM factors for transverse/longitudinal photons
+ DO 150 I=1,3
+ FSUT(K) = FSUT(K)+PARMDL(26+I)
+ & /(1.D0+PVIRT(K)/PARMDL(30+I))**2
+ FSUL(K) = FSUL(K)
+ & +PARMDL(26+I)*PVIRT(K)/(4.D0*PARMDL(30+I))
+ & /(1.D0+PVIRT(K)/PARMDL(30+I))**2
+ 150 CONTINUE
+ FSUT(K) = FSUT(K)+PARMDL(30)/(1.D0+PVIRT(K)/PARMDL(34))
+C transverse part
+ IF((ABS(IHEL(K)).EQ.1).OR.(ISWMDL(10).EQ.1)) THEN
+ FSUP(K) = FSUT(K)
+ FSUH(K) = FSUT(K)/(FSUT(K)+FSUL(K))
+C diffraction of trans. photons corresponds mainly to leading twist
+ FSUD(K) = 1.D0
+ ENDIF
+C longitudinal (scalar) part
+ IF((IHEL(K).LE.0).OR.(ISWMDL(10).EQ.1)) THEN
+ FSUP(K) = FSUP(K)+FSUL(K)
+ FSUH(K) = FSUH(K)+FSUL(K)/(FSUT(K)+FSUL(K))
+C diffraction of long. photons corresponds mainly to higher twist
+ FSUD(K) = 0.5D0*LOG(((ECM*PARMDL(45))**2+PVIRT(K))
+ & /((0.765D0+PARMDL(46))**2+PVIRT(K)))
+ & /LOG(ECM*PARMDL(45)/(0.765D0+PARMDL(46)))
+ ENDIF
+C debug output
+ if(ideb(15).ge.10) then
+ WRITE(LO,'(1x,2a,2i3,/,5x,1p5e12.4)') 'PHO_CSINT: ',
+ & 'side,helicity,F_tran,F_long,F_eff,F_hard,F_diff',
+ & K,IHEL(K),FSUT(K),FSUL(K),FSUP(K),FSUH(K),FSUD(K)
+ endif
+ ENDIF
+ ENDIF
+ 140 CONTINUE
+
+ FACP = FSUP(1)*FSUP(2)
+ FACH = FSUH(1)*FSUH(2)
+ FACD = FSUD(1)*FSUD(2)
+
+C matching of model cross section to F2(x,Q2,P2) in limit of Q2 >> P2
+
+ if((IFPAP(1).eq.22).and.(IFPAP(2).eq.22)
+ & .and.(IPAMDL(117).gt.0)) then
+C check kinematic limit
+ Q2_max = max(PVIRT(1),PVIRT(2))
+ Q2_min = min(PVIRT(1),PVIRT(2))
+ if((Q2_max.gt.1.D0).and.(Q2_min.lt.1.D0)) then
+
+C calculate F2 from current parton density
+ if(PVIRT(1).gt.PVIRT(2)) then
+ K = 2
+ else
+ K = 1
+ endif
+ Q2 = Q2_max
+ P2 = Q2_min
+ X = Q2/(ECM**2+Q2+P2)
+ call pho_actpdf(IFPAP(K),K)
+ call pho_pdf(K,X,Q2,P2,PD)
+C light quark contribution
+ F2_light = 0.D0
+ do j=1,3
+ F2_light = F2_light+Q_ch2(j)*(PD(j)+PD(-j))
+ enddo
+C heavy quark contribution
+ call pho_qpmpdf(4,X,Q2,0.D0,P2,xpdf_c)
+ F2_c = 2.D0*4.D0/9.D0*xpdf_c
+ F2 = (F2_light+F2_c)
+
+C calculate model prediction
+ SIGTOT = FAC2*SIGTAB(IP,1,I2)+FAC1*SIGTAB(IP,1,I1)
+ SIGINE = FAC2*SIGTAB(IP,28,I2)+FAC1*SIGTAB(IP,28,I1)
+ CALL PHO_HARINT(IP,ECM,0.D0,0.D0,0,Max_pro_2,3,4,1)
+
+ if(ISWMDL(10).ge.2) then
+
+C calculate all helicity combinations
+ if(IPAMDL(115).eq.0) then
+ SIGDIH = HSig(14)
+ SIGSRH(1) = HSig(10)+HSig(11)
+ SIGSRH(2) = HSig(12)+HSig(13)
+ SIGtmp = SIGTOT-SIGDIH-SIGSRH(1)-SIGSRH(2)
+C photon helicity factors
+ FH_T(1) = FSUT(1)/(FSUT(1)+FSUL(1))
+ FH_L(1) = 1.D0-FH_T(1)
+ FH_T(2) = FSUT(2)/(FSUT(2)+FSUL(2))
+ FH_L(2) = 1.D0-FH_T(2)
+ SIG_TT = SIGtmp*FSUT(1)*FSUT(2)
+ & + SIGDIH*FH_T(1)*FH_T(2)
+ & + SIGSRH(1)*FH_T(1)*FSUT(2)
+ & + SIGSRH(2)*FSUT(1)*FH_T(2)
+ SIG_TL = SIGtmp*FSUT(1)*FSUL(2)
+ & + SIGDIH*FH_T(1)*FH_L(2)
+ & + SIGSRH(1)*FH_T(1)*FSUL(2)
+ & + SIGSRH(2)*FSUT(1)*FH_L(2)
+ SIG_LT = SIGtmp*FSUL(1)*FSUT(2)
+ & + SIGDIH*FH_L(1)*FH_T(2)
+ & + SIGSRH(1)*FH_L(1)*FSUT(2)
+ & + SIGSRH(2)*FSUL(1)*FH_T(2)
+ SIG_LL = SIGtmp*FSUL(1)*FSUL(2)
+ & + SIGDIH*FH_L(1)*FH_L(2)
+ & + SIGSRH(1)*FH_L(1)*FSUL(2)
+ & + SIGSRH(2)*FSUL(1)*FH_L(2)
+ else
+C use explicit PDF virtuality dependence (pre-tabulated)
+ SIGDIH = HSig(14)
+ SIGSRH(1) = HSig(10)+HSig(11)
+ SIGSRH(2) = HSig(12)+HSig(13)
+ SIGtmp = SIGTOT-SIGDIH-SIGSRH(1)-SIGSRH(2)
+ print LO,' PHO_CSINT: invalid option for F2 matching'
+ stop
+* CALL PHO_HARINT(IP,ECM,PVIRT(1),PVIRT(2),0,
+* & Max_pro_2,3,4,1)
+* SIG_TT = SIGtmp*FSUT(1)*FSUT(2)
+* & + HSig(10)+HSig(12)+HSig(14)+HSig(16)+HSig(18)
+* SIG_TL = SIGtmp*FSUT(1)*FSUL(2)
+* & + HSig(10)+HSig(12)+HSig(14)+HSig(16)+HSig(19)
+* SIG_LT = SIGtmp*FSUL(1)*FSUT(2)
+* & + HSig(11)+HSig(13)+HSig(15)+HSig(17)+HSig(20)
+* SIG_LL = SIGtmp*FSUL(1)*FSUL(2)
+* & + HSig(11)+HSig(13)+HSig(15)+HSig(17)+HSig(21)
+ endif
+ Xnu = Ecm*Ecm+Q2+P2
+ F2_fac = Q2*Xnu/sqrt(Xnu*Xnu-Q2*P2)/(4.D0*Pi*Pi)
+ & *137.D0/GeV2mb
+ if(K.eq.2) then
+ F2m = F2_fac*(SIG_TT+SIG_LT-0.5D0*SIG_TL-0.5D0*SIG_LL)
+ F2s = F2_fac*SIGtmp*(FSUT(1)*FSUT(2)+FSUL(1)*FSUT(2)
+ & -0.5D0*FSUT(1)*FSUL(2)-0.5D0*FSUL(1)*FSUL(2))
+ else
+ F2m = F2_fac*(SIG_TT+SIG_TL-0.5D0*SIG_LT-0.5D0*SIG_LL)
+ F2s = F2_fac*SIGtmp*(FSUT(1)*FSUT(2)+FSUT(1)*FSUL(2)
+ & -0.5D0*FSUL(1)*FSUT(2)-0.5D0*FSUL(1)*FSUL(2))
+ endif
+
+ else
+
+C assume sig_eff = sigtot
+ SIGDIH = HSig(14)
+ SIGSRH(1) = HSig(10)+HSig(11)
+ SIGSRH(2) = HSig(12)+HSig(13)
+ SIGtmp = SIGTOT-SIGSRH(1)-SIGSRH(2)-SIGDIH
+ SIGeff = SIGtmp*FSUP(1)*FSUP(2)
+ & +SIGSRH(1)*FSUP(2)+SIGSRH(2)*FSUP(1)+SIGDIH
+ Xnu = Ecm*Ecm+Q2+P2
+ F2_fac = Q2*Xnu/sqrt(Xnu*Xnu-Q2*P2)/(4.D0*Pi*Pi)
+ & *137.D0/GeV2mb
+ F2m = F2_fac*SIGeff
+ F2s = F2_fac*SIGtmp*FSUP(1)*FSUP(2)
+ endif
+* print LO,' PHO_CSINT: Q2_1,Q2_2,W ',PVIRT(1),PVIRT(2),Ecm
+* print LO,' PHO_CSINT: F2_mod,F2_pdf,mod/pdf ',F2m,F2,F2m/F2
+
+C global factor to re-scale suppression of soft contributions
+ Fcorr = (F2-F2m+F2s)/F2s
+* print LO,' PHO_CSINT: re-scaling factor: ',Fcorr,FACP*Fcorr
+ FACP = FACP*Fcorr
+
+ endif
+ endif
+
+ SIGTOT = (FAC2*SIGTAB(IP,1,I2)+FAC1*SIGTAB(IP,1,I1))*FACP
+ SIGINE = (FAC2*SIGTAB(IP,28,I2)+FAC1*SIGTAB(IP,28,I1))*FACP
+ SIGELA = (FAC2*SIGTAB(IP,2,I2)+FAC1*SIGTAB(IP,2,I1))*FACP
+ J = 2
+ DO 5 I=0,4
+ DO 6 K=0,4
+ J = J+1
+ SIGVM(I,K) = (FAC2*SIGTAB(IP,J,I2)+FAC1*SIGTAB(IP,J,I1))
+ & *FACP**2
+ 6 CONTINUE
+ 5 CONTINUE
+
+ SIGDIR = FAC2*SIGTAB(IP,29,I2)+FAC1*SIGTAB(IP,29,I1)
+ SIGHAR = FAC2*SIGTAB(IP,58,I2)+FAC1*SIGTAB(IP,58,I1)
+C suppression of multi-pomeron graphs (diffraction)
+ SIGLSD(1) = (FAC2*SIGTAB(IP,30,I2)+FAC1*SIGTAB(IP,30,I1))
+ & *FACP*FSUP(2)*FSUD(1)
+ SIGLSD(2) = (FAC2*SIGTAB(IP,31,I2)+FAC1*SIGTAB(IP,31,I1))
+ & *FACP*FSUP(1)*FSUD(2)
+ SIGHSD(1) = (FAC2*SIGTAB(IP,32,I2)+FAC1*SIGTAB(IP,32,I1))
+ & *FACP*FSUP(2)*FSUD(1)
+ SIGHSD(2) = (FAC2*SIGTAB(IP,33,I2)+FAC1*SIGTAB(IP,33,I1))
+ & *FACP*FSUP(1)*FSUD(2)
+ SIGLDD = (FAC2*SIGTAB(IP,34,I2)+FAC1*SIGTAB(IP,34,I1))
+ & *FACP**2*FACD
+ SIGHDD = (FAC2*SIGTAB(IP,35,I2)+FAC1*SIGTAB(IP,35,I1))*FACP
+ SIGCDF(0) = (FAC2*SIGTAB(IP,36,I2)+FAC1*SIGTAB(IP,36,I1))
+ & *FACP**2
+ SIGTR1(1) = (FAC2*SIGTAB(IP,60,I2)+FAC1*SIGTAB(IP,60,I1))
+ & *FACP*FSUP(2)*FSUD(1)
+ SIGTR1(2) = (FAC2*SIGTAB(IP,61,I2)+FAC1*SIGTAB(IP,61,I1))
+ & *FACP*FSUP(2)*FSUD(1)
+ SIGTR2(1) = (FAC2*SIGTAB(IP,62,I2)+FAC1*SIGTAB(IP,62,I1))
+ & *FACP*FSUP(1)*FSUD(2)
+ SIGTR2(2) = (FAC2*SIGTAB(IP,63,I2)+FAC1*SIGTAB(IP,63,I1))
+ & *FACP*FSUP(1)*FSUD(2)
+ SIGLOO = (FAC2*SIGTAB(IP,64,I2)+FAC1*SIGTAB(IP,64,I1))*FACP
+ SIGDPO(1) = (FAC2*SIGTAB(IP,65,I2)+FAC1*SIGTAB(IP,65,I1))
+ & *FACP**2
+ SIGDPO(2) = (FAC2*SIGTAB(IP,66,I2)+FAC1*SIGTAB(IP,66,I1))
+ & *FACP**2
+ SIGDPO(3) = (FAC2*SIGTAB(IP,67,I2)+FAC1*SIGTAB(IP,67,I1))
+ & *FACP**2
+ SIGDPO(4) = (FAC2*SIGTAB(IP,68,I2)+FAC1*SIGTAB(IP,68,I1))
+ & *FACP**2
+
+C corrections due to photon virtuality dependence of PDFs
+ if(iswmdl(2).eq.1) then
+ CALL PHO_HARINT(IP,ECM,0.D0,0.D0,0,Max_pro_2,3,4,1)
+C minimum bias event generation
+ IF(IPAMDL(115).GE.1) THEN
+C all the virtuality dependence is given by PDF parametrization
+ SIGHIN = FAC2*SIGTAB(IP,80,I2)+FAC1*SIGTAB(IP,80,I1)
+ IF(IPAMDL(116).GE.2) THEN
+C direct interaction according to full QPM calculation
+ SIGDIH = HSig(14)
+ SIGSRH(1) = HSig(10)+HSig(11)
+ SIGSRH(2) = HSig(12)+HSig(13)
+ ELSE
+C direct interaction suppressed according to helicity factor
+ SIGDIH = HSig(14)*FACH
+ SIGSRH(1) = (HSig(10)+HSig(11))*FSUH(1)
+ SIGSRH(2) = (HSig(12)+HSig(13))*FSUH(2)
+ ENDIF
+ print LO,' PHO_CSINT: option not supported yet'
+ stop
+ ELSE
+C rescale relevant hard processes
+ SIGDIH = HSig(14)
+ SIGSRH(1) = HSig(10)+HSig(11)
+ SIGSRH(2) = HSig(12)+HSig(13)
+ SIGtmp = SIGINE-(SIGDIH+SIGSRH(1)+SIGSRH(2))*FACP
+ SIGDIR = HSig(14)*FACH+SIGSRH(1)*FSUH(1)*FSUP(2)
+ & +SIGSRH(2)*FSUP(1)*FSUH(2)
+ SIGINE = SIGtmp+SIGDIR
+ SIGTOT = SIGINE+SIGELA
+ ENDIF
+ else
+C only hard interactions
+ CALL PHO_HARINT(IP,ECM,0.D0,0.D0,0,Max_pro_2,3,4,1)
+ SIGSRH(1) = (HSig(10)+HSig(11))*FSUH(1)
+ SIGSRH(2) = (HSig(12)+HSig(13))*FSUH(2)
+ SIGDIR = HSig(14)+SIGSRH(1)+SIGSRH(2)
+ SIGHAR = HSig(9)*FACH
+ endif
+
+ SIG1SO = (FAC2*SIGTAB(IP,37,I2)+FAC1*SIGTAB(IP,37,I1))*FACP
+ SIG1HA = (FAC2*SIGTAB(IP,38,I2)+FAC1*SIGTAB(IP,38,I1))*FACH
+ SLOEL = FAC2*SIGTAB(IP,39,I2)+FAC1*SIGTAB(IP,39,I1)
+ J = 39
+ DO 9 I=1,4
+ DO 10 K=1,4
+ J = J+1
+ SLOVM(I,K) = FAC2*SIGTAB(IP,J,I2)+FAC1*SIGTAB(IP,J,I1)
+ 10 CONTINUE
+ 9 CONTINUE
+ SIGPOM = (FAC2*SIGTAB(IP,56,I2)+FAC1*SIGTAB(IP,56,I1))*FACP
+ SIGREG = (FAC2*SIGTAB(IP,57,I2)+FAC1*SIGTAB(IP,57,I1))*FACP
+
+ IPFIL = IP
+ IFAFIL = IFPA
+ IFBFIL = IFPB
+ ECMFIL = ECM
+ P2AFIL = PVIR2A
+ P2BFIL = PVIR2B
+
+ IF(IDEB(15).GE.20)
+ & WRITE(LO,'(1X,A)') 'PHO_CSINT: cross sections calculated'
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_PRIMKT
+ SUBROUTINE PHO_PRIMKT(IMODE,IF,IL,PTCUT,IREJ)
+C***********************************************************************
+C
+C give primordial kt to partons entering hard scatterings and
+C remants connected to hard parton-parton interactions by color flow
+C
+C input: IMODE -2 output of statistics
+C -1 initialization
+C 1 sampling of primordial kt
+C IF first entry in /POEVT1/ to check
+C IL last entry in /POEVT1/ to check
+C PTCUT current value of PTCUT to distinguish
+C between soft and hard
+C
+C output: IREJ 0 success
+C 1 failure
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ DOUBLE PRECISION DEPS
+ PARAMETER ( DEPS = 1.D-15 )
+
+ INTEGER IMODE,IF,IL,IREJ
+ DOUBLE PRECISION PTCUT
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DOUBLE PRECISION PTS,XP,XP2,POLD,PNEW,GA,PP
+ DIMENSION PTS(0:2,5),XP(5),
+ & XP2(5,2),POLD(2,2),PNEW(4,2),GA(4),PP(4)
+
+ INTEGER IROTT,IBALT,IBAL,IV,IV2,IRMAX
+
+ PARAMETER (IRMAX=200)
+ DIMENSION IROTT(IRMAX),IBALT(5,2),IBAL(2),IV(5),IV2(5,2)
+
+ DOUBLE PRECISION SI,EI,SF,EF,PTOT,EE,XX,YY,ZZ,ANORF,FAC,DEL,PT2,
+ & DEL2,GAE,GAZ,SID,COD,SIF,COF,ESUM
+ INTEGER IROT,I,J,K,NHD,ISTART,INEXT,ICOM
+
+C debug output
+ IF(IDEB(10).GE.10) WRITE(LO,'(1X,A,3I4,1P,E11.3)')
+ & 'PHO_PRIMKT: called with IMODE,IF,IL,PTCUT',
+ & IMODE,IF,IL,PTCUT
+
+C give primordial kt to partons engaged in a hard scattering
+
+ IF(IMODE.EQ.1) THEN
+
+ ISTART = IF
+
+ 100 CONTINUE
+
+ NHD = 0
+ IBAL(1) = 0
+ IBAL(2) = 0
+ IROT = 0
+ ICOM = 0
+ DO 110 I=ISTART,IL
+ IF(ISTHEP(I).EQ.25) THEN
+C hard scattering number
+ NHD = IPHIST(1,I+1)
+ ICOM = I
+ K = LSIDX(NHD/100)
+C calculate momenta of incoming partons
+ POLD(1,1) = XHD(K,1)*ECMP/2.D0
+ POLD(2,1) = POLD(1,1)
+ POLD(1,2) = -XHD(K,2)*ECMP/2.D0
+ POLD(2,2) = -POLD(1,2)
+ ISTART = I+3
+ GOTO 150
+ ENDIF
+ 110 CONTINUE
+ RETURN
+
+ 150 CONTINUE
+
+C search for partons involved in hard interaction
+ INEXT = 0
+ IROT = 0
+ DO 500 I=ISTART,IL
+ IF(ABS(ISTHEP(I)).EQ.1) THEN
+C hard scatterd partons (including ISR)
+ IF((IPHIST(1,I).EQ.-NHD)
+ & .OR.(IPHIST(1,I).EQ.NHD+1)
+ & .OR.(IPHIST(1,I).EQ.NHD+2)) THEN
+ IROT = IROT+1
+
+ IF(IROT.GT.IRMAX) THEN
+ WRITE(LO,'(1X,/,2A,2I5)') 'PHO_PRIMKT: ',
+ & 'no memory left in IROTT, event rejected (max/IROT)',
+ & IRMAX,IROT
+ CALL PHO_PREVNT(0)
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ IROTT(IROT) = I
+C hard remnant
+ ELSE IF(IPHIST(1,I).EQ.NHD) THEN
+ IF(PHEP(3,I).GT.0.D0) THEN
+ J = 1
+ ELSE
+ J = 2
+ ENDIF
+ IBAL(J) = IBAL(J)+1
+ IBALT(IBAL(J),J) = I
+ XP2(IBAL(J),J) = PHEP(3,I)/ECMP
+ IF(ISWMDL(24).EQ.0) THEN
+ IV2(IBAL(J),J) = 0
+ IF(IDHEP(I).NE.21) IV2(IBAL(J),J) = ICOLOR(2,I)
+ ELSE IF(ISWMDL(24).EQ.1) THEN
+ IV2(IBAL(J),J) = -1
+ ELSE
+ IV2(IBAL(J),J) = 1
+ ENDIF
+ ENDIF
+C possibly further hard scattering
+ ELSE IF(ISTHEP(I).EQ.25) THEN
+ INEXT = 1
+ ISTART = I
+ GOTO 550
+ ENDIF
+ 500 CONTINUE
+ 550 CONTINUE
+
+C debug output
+ if(IDEB(10).ge.15) then
+ WRITE(LO,'(1X,2A,I4)') 'PHO_PRIMKT: ',
+ & 'hard scattering number: ',NHD/100
+ WRITE(LO,'(1X,2A,I5)') 'PHO_PRIMKT: ',
+ & 'number of entries to rotate: ',IROT
+ DO I=1,IROT
+ WRITE(LO,'(1X,2A,2I5)') 'PHO_PRIMKT: ',
+ & 'entries to rotate: ',I,IROTT(I)
+ ENDDO
+ WRITE(LO,'(1X,2A,2I5)') 'PHO_PRIMKT: ',
+ & 'number of entries to balance: ',IBAL
+ DO J=1,2
+ DO I=1,IBAL(J)
+ WRITE(LO,'(1X,2A,I2,2I5)')
+ & 'PHO_PRIMKT: entries to balance (side,no,line)',
+ & J,I,IBALT(I,J)
+ ENDDO
+ ENDDO
+ endif
+
+C incoming partons (comment lines), skip direct interacting particles
+ DO 120 K=1,2
+ IF((IDHEP(ICOM+K).NE.22).AND.(IDHEP(ICOM+K).NE.990)) THEN
+ IF(PHEP(3,ICOM+K).GT.0.D0) THEN
+ J = 1
+ ELSE
+ J = 2
+ ENDIF
+ IBAL(J) = IBAL(J)+1
+ IBALT(IBAL(J),J) = -ICOM-K
+ XP2(IBAL(J),J) = POLD(1,J)/ECMP
+ IV2(IBAL(J),J) = -1
+ ENDIF
+ 120 CONTINUE
+
+C check consistency
+ IF((IBAL(1).GT.4).OR.(IBAL(2).GT.4)) THEN
+ WRITE(LO,'(1X,2A,I10)') 'PHO_PRIMKT: ',
+ & 'inconsistent hard scattering remnant for event: ',KEVENT
+ WRITE(LO,'(1X,A,3I4,1P,E11.3)')
+ & 'PHO_PRIMKT called with IMODE,IF,IL,PTCUT',
+ & IMODE,IF,IL,PTCUT
+ WRITE(LO,'(1X,A,I4)') 'hard scattering number: ',NHD/100
+ DO 390 I=1,IROT
+ WRITE(LO,'(1X,A,2I5)') 'entries to rotate',I,IROTT(I)
+ 390 CONTINUE
+ DO 392 J=1,2
+ DO 395 I=1,IBAL(J)
+ WRITE(LO,'(1X,A,I2,2I5)')
+ & 'entries to balance (side,no,line)',J,I,IBALT(I,J)
+ 395 CONTINUE
+ 392 CONTINUE
+ IF(IBAL(1)+IBAL(2).GT.0) CALL PHO_PREVNT(0)
+ ENDIF
+
+C calculate primordial kt
+
+C something to do?
+ IF((IBAL(1).GT.1).OR.(IBAL(2).GT.1)) THEN
+
+C add transverse momentum (overwrite /POEVT1/ entries)
+ DO 200 J=1,2
+ IF(IBAL(J).GT.1) THEN
+C sample from truncated distribution
+ K = IBAL(J)
+ DO 180 I=1,K
+ IV(I) = IV2(I,J)
+ XP(I) = XP2(I,J)
+ 180 CONTINUE
+ 190 CONTINUE
+ CALL PHO_SOFTPT(K,PTCUT,PTCUT,XP,IV,PTS)
+ IF(PTS(0,K).GE.PARMDL(100)) GOTO 190
+C transform incoming partons of hard scattering
+ DEL = ABS(POLD(1,J))+POLD(2,J)
+ PT2 = PTS(0,K)**2
+ DEL2 = DEL*DEL
+ PNEW(1,J) = PTS(1,K)
+ PNEW(2,J) = PTS(2,K)
+ PNEW(3,J) = (-1)**J*(PT2 - DEL2)/(2.D0*DEL)
+ PNEW(4,J) = (DEL2 + PT2)/(2.D0*DEL)
+C spectator partons
+ ESUM = 0.D0
+ DO 220 I=1,IBAL(J)-1
+ K = IBALT(I,J)
+ PHEP(1,K) = PHEP(1,K)+PTS(1,I)
+ PHEP(2,K) = PHEP(2,K)+PTS(2,I)
+ ESUM = ESUM+PHEP(4,K)
+ 220 CONTINUE
+C long. momentum transfer
+ PP(3) = PNEW(3,J) - POLD(1,J)
+ PP(4) = PNEW(4,J) - POLD(2,J)
+ DO 230 I=1,IBAL(J)-1
+ K = IBALT(I,J)
+ FAC = PHEP(4,K)/ESUM
+ PHEP(3,K) = PHEP(3,K) - FAC*PP(3)
+ PHEP(4,K) = PHEP(4,K) - FAC*PP(4)
+ 230 CONTINUE
+
+C debug output
+ IF(IDEB(10).GE.15) THEN
+ WRITE(LO,'(1X,2A,I3,1P,4E11.3)') 'PHO_PRIMKT: ',
+ & 'old incoming:',J,0.D0,0.D0,(POLD(I,J),I=1,2)
+ WRITE(LO,'(1X,2A,I3,1P,4E11.3)') 'PHO_PRIMKT: ',
+ & 'new incoming:',J,(PNEW(I,J),I=1,4)
+ ENDIF
+
+ ELSE
+ PNEW(1,J) = 0.D0
+ PNEW(2,J) = 0.D0
+ PNEW(3,J) = POLD(1,J)
+ PNEW(4,J) = POLD(2,J)
+ ENDIF
+ 200 CONTINUE
+
+C transformation of hard scattering final states (including ISR)
+
+C old parton c.m. energy
+ SI = (POLD(2,1)+POLD(2,2))**2-(POLD(1,1)+POLD(1,2))**2
+ EI = SQRT(SI)
+C new parton c.m. energy
+ SF = (PNEW(4,1)+PNEW(4,2))**2-(PNEW(1,1)+PNEW(1,2))**2
+ & -(PNEW(2,1)+PNEW(2,2))**2-(PNEW(3,1)+PNEW(3,2))**2
+ EF = SQRT(SF)
+ FAC = EF/EI
+C debug output
+ IF(IDEB(10).GE.25) WRITE(LO,'(1X,A,1P,E12.4)')
+ & 'PHO_PRIMKT: scaling factor (E-final/E-initial): ',FAC
+
+C calculate Lorentz transformation
+ GAZ = -(POLD(1,1)+POLD(1,2))/EI
+ GAE = (POLD(2,1)+POLD(2,2))/EI
+ DO 240 I=1,4
+ GA(I) = (PNEW(I,1)+PNEW(I,2))/EF
+ 240 CONTINUE
+ CALL PHO_ALTRA(GA(4),-GA(1),-GA(2),-GA(3),PNEW(1,1),PNEW(2,1),
+ & PNEW(3,1),PNEW(4,1),PTOT,PP(1),PP(2),PP(3),PP(4))
+ PTOT = MAX(DEPS,PTOT)
+ COD= PP(3)/PTOT
+ SID= SQRT(PP(1)**2+PP(2)**2)/PTOT
+ COF= 1.D0
+ SIF= 0.D0
+ IF(PTOT*SID.GT.1.D-5) THEN
+ COF=PP(1)/(SID*PTOT)
+ SIF=PP(2)/(SID*PTOT)
+ ANORF=SQRT(COF*COF+SIF*SIF)
+ COF=COF/ANORF
+ SIF=SIF/ANORF
+ ENDIF
+
+C debug output
+C check consistency initial/final configuration before rotation
+ IF(IDEB(10).GE.25) THEN
+ WRITE(LO,'(1X,A,1P,4E11.3)') 'PHO_PRIMKT: ini. momentum (1):',
+ & 0.D0,0.D0,(POLD(I,1)+POLD(I,2),I=1,2)
+ DO I=1,4
+ PP(I) = 0.D0
+ ENDDO
+ DO I=1,IROT
+ K = IROTT(I)
+ DO J=1,4
+ PP(J) = PP(J)+PHEP(J,K)
+ ENDDO
+ ENDDO
+ WRITE(LO,'(1X,A,1P,4E11.3)')
+ & 'PHO_PRIMKT: fin. momentum (1):',PP
+ ENDIF
+
+C apply rotation/boost to scattered particles
+ DO 400 I=1,IROT
+ K = IROTT(I)
+ DO 350 J=1,4
+ PP(J) = FAC*PHEP(J,K)
+ 350 CONTINUE
+ CALL PHO_ALTRA(GAE,0.D0,0.D0,GAZ,PP(1),PP(2),PP(3),
+ & PP(4),PTOT,PHEP(1,K),PHEP(2,K),PHEP(3,K),PHEP(4,K))
+ CALL PHO_TRANS(PHEP(1,K),PHEP(2,K),PHEP(3,K),
+ & COD,SID,COF,SIF,XX,YY,ZZ)
+ EE = PHEP(4,K)
+ CALL PHO_ALTRA(GA(4),GA(1),GA(2),GA(3),XX,YY,ZZ,EE,PTOT,
+ & PHEP(1,K),PHEP(2,K),PHEP(3,K),PHEP(4,K))
+ 400 CONTINUE
+
+C debug output
+C check consistency initial/final configuration after rotation
+ IF(IDEB(10).GE.25) THEN
+ DO I=1,4
+ PP(I) = PNEW(I,1)+PNEW(I,2)
+ ENDDO
+ WRITE(LO,'(1X,A,1P,4E11.3)')
+ & 'PHO_PRIMKT: ini. momentum (2):',PP
+ DO I=1,4
+ PP(I) = 0.D0
+ ENDDO
+ DO I=1,IROT
+ K = IROTT(I)
+ DO J=1,4
+ PP(J) = PP(J)+PHEP(J,K)
+ ENDDO
+ ENDDO
+ WRITE(LO,'(1X,A,1P,4E11.3)')
+ & 'PHO_PRIMKT: fin. momentum (2):',PP
+ ENDIF
+
+ ENDIF
+
+ IF(INEXT.EQ.1) GOTO 100
+
+C initialization
+
+ ELSE IF(IMODE.EQ.-1) THEN
+
+C output of statistics etc.
+
+ ELSE IF(IMODE.EQ.-2) THEN
+
+C something wrong
+
+ ELSE
+ WRITE(LO,'(/1X,A,I4)')
+ & 'PHO_PRIMKT:ERROR: invalid value of IMODE:',IMODE
+ CALL PHO_ABORT
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_PARTPT
+ SUBROUTINE PHO_PARTPT(IMODE,IF,IL,PTCUT,IREJ)
+C********************************************************************
+C
+C assign to soft partons
+C
+C input: IMODE -2 output of statistics
+C -1 initialization
+C 0 sampling of pt for soft partons belonging to
+C soft Pomerons
+C 1 sampling of pt for soft partons belonging to
+C hard Pomerons
+C IF first entry in /POEVT1/ to check
+C IL last entry in /POEVT1/ to check
+C PTCUT current value of PTCUT to distinguish
+C between soft and hard
+C
+C output: IREJ 0 success
+C 1 failure
+C
+C (soft pt is sampled by call to PHO_SOFTPT)
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-15 )
+
+ INTEGER IMODE,IF,IL,IREJ
+ DOUBLE PRECISION PTCUT
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DOUBLE PRECISION PTS,PB,XP,XPB,PC
+ DIMENSION PTS(0:2,50),PB(0:2,2),XP(50),XPB(2),PC(4)
+
+ INTEGER MODIFY,IV,IVB
+ DIMENSION MODIFY(50),IV(50),IVB(2)
+
+C debug output
+ IF(IDEB(6).GE.10) WRITE(LO,'(1X,A,3I4,1P,E11.3)')
+ & 'PHO_PARTPT: called with IMODE,IF,IL,PTCUT',
+ & IMODE,IF,IL,PTCUT
+
+ IF(IMODE.LT.0) GOTO 1000
+
+ IREJ = 0
+ IF((ISWMDL(3).EQ.10).AND.(ISWMDL(4).EQ.10)) RETURN
+
+C count entries to modify
+ IENTRY = 0
+ PTCUT2 = PTCUT**2
+ EMIN = 1.D20
+ IPEAK = 1
+ ISTART = IF
+
+C soft Pomerons
+
+ IF(IMODE.EQ.0) THEN
+ DO 300 I=ISTART,IL
+ IF((ISTHEP(I).EQ.-1).AND.(ABS(IPHIST(1,I)).LT.100)) THEN
+ IENTRY = IENTRY+1
+ MODIFY(IENTRY) = I
+ XP(IENTRY) = SIGN(PHEP(4,I)/ECMP,PHEP(3,I))
+ IV(IENTRY) = 0
+ IF(IDHEP(I).NE.21) IV(IENTRY) = ICOLOR(2,I)
+ IF(PHEP(4,I).LT.EMIN) THEN
+ EMIN = PHEP(4,I)
+ IPEAK = IENTRY
+ ENDIF
+ ENDIF
+ 300 CONTINUE
+
+C hard Pomeron associated remnants (IPHIST(1,)=100,200,...)
+
+ ELSE IF(IMODE.EQ.1) THEN
+
+ DO 350 I=ISTART,IL
+ IF((ISTHEP(I).EQ.-1).AND.(IPHIST(1,I).GE.100)) THEN
+ IF(MOD(IPHIST(1,I),100).EQ.0) THEN
+ IENTRY = IENTRY+1
+ MODIFY(IENTRY) = I
+ XP(IENTRY) = SIGN(PHEP(4,I)/ECMP,PHEP(3,I))
+ IF(ISWMDL(24).EQ.0) THEN
+ IV(IENTRY) = 0
+ IF(IDHEP(I).NE.21) IV(IENTRY) = ICOLOR(2,I)
+ ELSE IF(ISWMDL(24).EQ.1) THEN
+ IV(IENTRY) = -1
+ ELSE
+ IV(IENTRY) = 1
+ ENDIF
+ IF(PHEP(4,I).LT.EMIN) THEN
+ EMIN = PHEP(4,I)
+ IPEAK = IENTRY
+ ENDIF
+ ENDIF
+ ENDIF
+ 350 CONTINUE
+
+C something wrong
+
+ ELSE
+ WRITE(LO,'(/1X,A,I5)') 'PHO_PARTPT:ERROR: invalid mode',IMODE
+ CALL PHO_ABORT
+ ENDIF
+
+C debug output
+ IF(IDEB(6).GE.5) THEN
+ WRITE(LO,'(1X,2A,3I4)') 'PHO_PARTPT: ',
+ & 'number of partons, IPEAK,MODE',IENTRY,IPEAK,IMODE
+ IF(IDEB(6).GE.20) CALL PHO_PREVNT(0)
+ ENDIF
+
+C nothing to do
+ IF(IENTRY.LE.1) RETURN
+
+C sample pt of soft partons
+
+ IF(ISWMDL(5).LE.1) THEN
+ ITER = 0
+ IPEAK = DT_RNDM(DUM)*IENTRY+1
+ CALL PHO_SWAPI(MODIFY(IPEAK),MODIFY(1))
+ CALL PHO_SWAPD(XP(IPEAK),XP(1))
+ CALL PHO_SWAPI(IV(IPEAK),IV(1))
+ 400 CONTINUE
+C energy limited sampling
+ PSUMX = 0.D0
+ PSUMY = 0.D0
+ ITER = ITER+1
+ IF(ITER.GE.1000) THEN
+ IF(IDEB(6).GE.3) THEN
+ WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_PARTPT: rejection for MODE,ENTRY,ITER',
+ & IMODE,IENTRY,ITER
+ WRITE(LO,'(8X,A,I5)') 'I II IV XP EP',
+ & IPEAK
+ DO 405 I=1,IENTRY
+ II = MODIFY(I)
+ WRITE(LO,'(5X,3I5,1P,2E13.4)')
+ & I,II,IV(I),XP(I),PHEP(4,II)
+ 405 CONTINUE
+ IF(IDEB(6).GE.5) CALL PHO_PREVNT(0)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ENDIF
+ DO 410 I=2,IENTRY
+ II = MODIFY(I)
+ PTMX = MIN(PHEP(4,II),PTCUT)
+ XPB(1) = XP(I)
+ IVB(1) = IV(I)
+ IF(ISWMDL(5).EQ.0) THEN
+ CALL PHO_SOFTPT(1,PTCUT,PTMX,XPB,IVB,PB)
+ ELSE
+ CALL PHO_SOFTPT(1,PTMX,PTMX,XPB,IVB,PB)
+ ENDIF
+ PTS(0,I) = PB(0,1)
+ PTS(1,I) = PB(1,1)
+ PTS(2,I) = PB(2,1)
+ PSUMX = PSUMX+PB(1,1)
+ PSUMY = PSUMY+PB(2,1)
+ 410 CONTINUE
+ PTREM = SQRT(PSUMX**2+PSUMY**2)
+ IF(PTREM.GT.MIN(PHEP(4,MODIFY(1)),PTCUT)) GOTO 400
+ PTS(1,1) = -PSUMX
+ PTS(2,1) = -PSUMY
+ ELSE IF((ISWMDL(5).EQ.2)
+ & .OR.((IMODE.EQ.1).AND.(ISWMDL(5).EQ.3))) THEN
+C unlimited sampling
+ IPEAK = DT_RNDM(PSUMX)*IENTRY+1
+ CALL PHO_SWAPI(MODIFY(IPEAK),MODIFY(1))
+ CALL PHO_SWAPD(XP(IPEAK),XP(1))
+ CALL PHO_SWAPI(IV(IPEAK),IV(1))
+ CALL PHO_SOFTPT(IENTRY,PTCUT,PTCUT,XP,IV,PTS)
+ ELSE IF(ISWMDL(5).EQ.3) THEN
+C each string has balanced pt
+ DO 500 K=1,IENTRY
+ IF(IV(K).LE.-90) GOTO 499
+ I1 = MODIFY(K)
+ IC1 = -ICOLOR(1,I1)
+ DO 510 L=K+1,IENTRY
+ IF(ICOLOR(1,MODIFY(L)).EQ.IC1) GOTO 511
+ 510 CONTINUE
+ WRITE(LO,'(//1X,A,I5)')
+ & 'PHO_PARTPT:ERROR: no color found for (line,color)',I1,-IC1
+ CALL PHO_ABORT
+ 511 CONTINUE
+ I2 = MODIFY(L)
+ AMSQR = (PHEP(4,I1)+PHEP(4,I2))**2-(PHEP(1,I1)+PHEP(1,I2))**2
+ & -(PHEP(2,I1)+PHEP(2,I2))**2-(PHEP(3,I1)+PHEP(3,I2))**2
+ AM = SQRT(AMSQR)
+ PTMX = AM/2.D0
+ IVB(1) = MAX(IV(K),IV(L))
+ XPB(1) = XP(K)
+ CALL PHO_SOFTPT(1,PTCUT,PTMX,XPB,IVB,PB)
+ PTS(1,K) = PB(1,1)
+ PTS(2,K) = PB(2,1)
+ PTS(1,L) = -PB(1,1)
+ PTS(2,L) = -PB(2,1)
+ GAM = (PHEP(4,I1)+PHEP(4,I2))/AM
+ GAMBEZ = (PHEP(3,I1)+PHEP(3,I2))/AM
+ PC(1) = PB(1,1)
+ PC(2) = PB(2,1)
+ PLONG = SQRT(PTMX**2-PB(0,1)**2+1.D-12)
+ PC(3) = SIGN(PLONG,PHEP(3,I1))
+ PC(4) = PTMX
+ CALL PHO_ALTRA(GAM,0.D0,0.D0,GAMBEZ,PC(1),PC(2),PC(3),PC(4),
+ & PTOT,PHEP(1,I1),PHEP(2,I1),PHEP(3,I1),PHEP(4,I1))
+ PC(1) = -PC(1)
+ PC(2) = -PC(2)
+ PC(3) = -PC(3)
+ CALL PHO_ALTRA(GAM,0.D0,0.D0,GAMBEZ,PC(1),PC(2),PC(3),PC(4),
+ & PTOT,PHEP(1,I2),PHEP(2,I2),PHEP(3,I2),PHEP(4,I2))
+ IV(K) = IV(K)-100
+ IV(L) = IV(L)-100
+ 499 CONTINUE
+ 500 CONTINUE
+ ELSE
+ WRITE(LO,'(/1X,A,I4)')
+ & 'PHO_PARTPT:ERROR: invalid value of ISWMDL(5):',ISWMDL(5)
+ CALL PHO_ABORT
+ ENDIF
+
+C change partons in /POEVT1/
+ DO 900 II=1,IENTRY
+ IF(IV(II).GT.-90) THEN
+ I = MODIFY(II)
+ PHEP(1,I) = PHEP(1,I)+PTS(1,II)
+ PHEP(2,I) = PHEP(2,I)+PTS(2,II)
+ AMSQR = PHEP(4,I)**2
+ & -PHEP(1,I)**2-PHEP(2,I)**2-PHEP(3,I)**2
+ PHEP(5,I) = SIGN(SQRT(ABS(AMSQR)),AMSQR)
+ ENDIF
+ 900 CONTINUE
+
+C debug output
+ IF(IDEB(6).GE.15) THEN
+ WRITE(LO,'(1X,A,/,8X,A,I5)') 'PHO_PARTPT: table of momenta',
+ & 'I II IV XP EP PTS PTX PTY',IPEAK
+ DO 505 I=1,IENTRY
+ II = MODIFY(I)
+ WRITE(LO,'(2X,3I5,1P,5E12.4)')
+ & I,II,IV(I),XP(I),PHEP(4,II),PTS(0,I),PTS(1,I),PTS(2,I)
+ 505 CONTINUE
+ CALL PHO_PREVNT(0)
+ ENDIF
+ RETURN
+
+C initialization / output of statistics
+ 1000 CONTINUE
+ CALL PHO_SOFTPT(IMODE,PTM,PTM,XP,IV,PTS)
+
+ END
+
+CDECK ID>, PHO_SOFTPT
+ SUBROUTINE PHO_SOFTPT(ISOFT,PTCUT,PTMAX,XV,IV,PTSOF)
+C***********************************************************************
+C
+C select pt of soft string ends
+C
+C input: ISOFT number of soft partons
+C -1 initialization
+C >=0 sampling of p_t
+C -2 output of statistics
+C PTCUT cutoff for soft strings
+C PTMAX maximal allowed PT
+C XV field of x values
+C IV 0 sea quark
+C 1 valence quark
+C
+C output: /POINT3/ containing parameters AAS,BETAS
+C PTSOF filed with soft pt values
+C
+C note: ISWMDL(3/4) = 0 dNs/dP_t = P_t ASS * exp(-BETA*P_t**2)
+C ISWMDL(3/4) = 1 dNs/dP_t = P_t ASS * exp(-BETA*P_t)
+C ISWMDL(3/4) = 2 photon wave function
+C ISWMDL(3/4) = 10 no soft P_t assignment
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-15)
+
+ DIMENSION PTSOF(0:2,*),XV(*)
+ DIMENSION IV(*)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C data needed for soft-pt calculation
+ DOUBLE PRECISION SIGS,DSIGHP,SIGH,FS,FH,BETAS,AAS,PTCON
+ COMMON /POINT3/ SIGS,DSIGHP,SIGH,FS,FH,BETAS(3),AAS,PTCON
+
+ DIMENSION BETAB(100)
+
+C selection of pt
+ IF(ISOFT.GE.0) THEN
+ CALLS = CALLS + 1.D0
+C sample according to model ISWMDL(3-6)
+ IF(ISOFT.GT.1) THEN
+ 210 CONTINUE
+ PTXS = 0.D0
+ PTYS = 0.D0
+ DO 300 I=2,ISOFT
+ IMODE = ISWMDL(3)
+C valence partons
+ IF(IV(I).EQ.1) THEN
+ BETA = BETAS(1)
+C photon/pomeron valence part
+ IF(IPAMDL(5).EQ.1) THEN
+ IF(XV(I).GE.0.D0) THEN
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)) THEN
+ IMODE = ISWMDL(4)
+ BETA = BETAS(3)
+ ENDIF
+ ELSE
+ IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ IMODE = ISWMDL(4)
+ BETA = BETAS(3)
+ ENDIF
+ ENDIF
+ ELSE IF(IPAMDL(5).EQ.2) THEN
+ BETA = PARMDL(20)
+ ELSE IF(IPAMDL(5).EQ.3) THEN
+ BETA = BETAS(3)
+ ENDIF
+C sea partons
+ ELSE IF(IV(I).EQ.0) THEN
+ BETA = BETAS(3)
+C hard scattering remnant
+ ELSE
+ IF(IPAMDL(6).EQ.0) THEN
+ BETA = BETAS(1)
+ ELSE IF(IPAMDL(6).EQ.1) THEN
+ BETA = BETAS(3)
+ ELSE
+ BETA = PARMDL(20)
+ ENDIF
+ ENDIF
+ BETA = MAX(BETA,0.01D0)
+ CALL PHO_SELPT(XV(I),0.D0,PTCUT,PTS,BETA,IMODE)
+ PTS = MIN(PTMAX,PTS)
+ CALL PHO_SFECFE(SIG,COG)
+ PTSOF(0,I) = PTS
+ PTSOF(1,I) = COG*PTS
+ PTSOF(2,I) = SIG*PTS
+ PTXS = PTXS+PTSOF(1,I)
+ PTYS = PTYS+PTSOF(2,I)
+ BETAB(I) = BETA
+ 300 CONTINUE
+C balancing of momenta
+ PTS = SQRT(PTXS**2+PTYS**2)
+ IF(PTS.GE.PTMAX) GOTO 210
+ PTSOF(0,1) = PTS
+ PTSOF(1,1) = -PTXS
+ PTSOF(2,1) = -PTYS
+ BETAB(1) = 0.D0
+C
+*400 CONTINUE
+C
+C single parton only
+ ELSE
+ IMODE = ISWMDL(3)
+C valence partons
+ IF(IV(1).EQ.1) THEN
+ BETA = BETAS(1)
+C photon/Pomeron valence part
+ IF(IPAMDL(5).EQ.1) THEN
+ IF(XV(1).GE.0.D0) THEN
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)) THEN
+ IMODE = ISWMDL(4)
+ BETA = BETAS(3)
+ ENDIF
+ ELSE
+ IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ IMODE = ISWMDL(4)
+ BETA = BETAS(3)
+ ENDIF
+ ENDIF
+ ELSE IF(IPAMDL(5).EQ.2) THEN
+ BETA = PARMDL(20)
+ ELSE IF(IPAMDL(5).EQ.3) THEN
+ BETA = BETAS(3)
+ ENDIF
+C sea partons
+ ELSE IF(IV(1).EQ.0) THEN
+ BETA = BETAS(3)
+C hard scattering remnant
+ ELSE
+ IF(IPAMDL(6).EQ.1) THEN
+ BETA = BETAS(3)
+ ELSE
+ BETA = PARMDL(20)
+ ENDIF
+ ENDIF
+ BETA = MAX(BETA,0.01D0)
+ CALL PHO_SELPT(XV(1),0.D0,PTCUT,PTS,BETA,IMODE)
+ PTS = MIN(PTMAX,PTS)
+ CALL PHO_SFECFE(SIG,COG)
+ PTSOF(0,1) = PTS
+ PTSOF(1,1) = COG*PTS
+ PTSOF(2,1) = SIG*PTS
+ BETAB(1) = BETA
+ ENDIF
+
+C debug output
+ IF(IDEB(29).GE.10) THEN
+ WRITE(LO,'(1X,A,I4)') 'PHO_SOFTPT: ISOFT',ISOFT
+ WRITE(LO,'(6X,A)') 'TABLE OF I, IV, XV, PT, PT-X, PT-Y, BETA'
+ DO 105 I=1,ISOFT
+ WRITE(LO,'(10X,2I3,1P,5E12.3)') I,IV(I),XV(I),PTSOF(0,I),
+ & PTSOF(1,I),PTSOF(2,I),BETAB(I)
+ 105 CONTINUE
+ ENDIF
+
+C initialization of statistics and parameters
+
+ ELSE IF(ISOFT.EQ.-1) THEN
+ PTSMIN = 0.D0
+ PTSMAX = PTCUT
+
+ IMODE = -100+ISWMDL(3)
+ CALL PHO_SELPT(ECMP,PTSMIN,PTSMAX,PTS,BETAS(3),IMODE)
+
+C output of statistics
+
+ ELSE IF(ISOFT.EQ.-2) THEN
+
+ ELSE
+ WRITE(LO,'(1X,2A,I2)') 'PHO_SOFTPT:ERROR: ',
+ & 'unsupported ISOFT ',ISOFT
+ STOP
+ ENDIF
+ END
+
+CDECK ID>, PHO_SELPT
+ SUBROUTINE PHO_SELPT(EE,PTLOW,PTHIGH,PTS,BETA,IMODE)
+C***********************************************************************
+C
+C select pt from different distributions
+C
+C input: EE energy (for initialization only)
+C otherwise x value of corresponding parton
+C PTLOW lower pt limit
+C PTHIGH upper pt limit
+C (PTHIGH > 20 will cause DEXP underflows)
+C
+C IMODE = 0 dNs/dP_t = P_t * ASS * exp(-BETA*P_t**2)
+C IMODE = 1 dNs/dP_t = P_t * ASS * exp(-BETA*P_t)
+C IMODE = 2 dNs/dP_t according photon wave function
+C IMODE = 10 no sampling
+C
+C IMODE = -100+IMODE initialization according to
+C given limitations
+C
+C output: PTS sampled pt value
+C initialization:
+C BETA soft pt slope in central region
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( PI2 = 6.28318530718D0,
+ & AMIN = 1.D-2,
+ & EPS = 1.D-7,
+ & DEPS = 1.D-30)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C average number of cut soft and hard ladders (obsolete)
+ DOUBLE PRECISION AVERI,AVERK,AVERL,AVERM,AVERN
+ COMMON /POINT2/ AVERI,AVERK,AVERL,AVERM,AVERN
+C data needed for soft-pt calculation
+ DOUBLE PRECISION SIGS,DSIGHP,SIGH,FS,FH,BETAS,AAS,PTCON
+ COMMON /POINT3/ SIGS,DSIGHP,SIGH,FS,FH,BETAS(3),AAS,PTCON
+
+ DOUBLE PRECISION PHO_CONN0,PHO_CONN1
+ EXTERNAL PHO_CONN0,PHO_CONN1
+
+C initialization
+
+ IF(IMODE.LT.0) GOTO 100
+
+ PX = PTHIGH
+ PTS = 0.D0
+
+C initial checks
+
+ IF(PX.LT.AMIN) RETURN
+
+ IF((PX-PTLOW).LT.0.01) THEN
+ IF(IDEB(5).GE.3) WRITE(LO,'(1X,A,2E12.3,I3)')
+ & 'PHO_SELPT: PTLOW,PTHIGH,IMODE ',PTLOW,PTHIGH,IMODE
+ RETURN
+ ENDIF
+
+C sampling of pt values according to IMODE
+
+ IF(IMODE.EQ.0) THEN
+
+ FAC1 = EXP(-BETA*PX**2)
+ FAC2 = (1.D0-FAC1)
+ 25 CONTINUE
+ XI1 = DT_RNDM(PX)*FAC2 + FAC1
+ PTS = SQRT(-1.D0/BETA*LOG(XI1))
+ IF((PTS.GT.PTHIGH).OR.(PTS.LT.PTLOW)) GOTO 25
+
+ ELSE IF(IMODE.EQ.1) THEN
+
+ XIMIN = EXP(-BETA*PTHIGH)
+ XIDEL = 1.D0-XIMIN
+ 50 CONTINUE
+ PTS = -LOG((XIDEL*DT_RNDM(XIDEL)+XIMIN)
+ & *(XIDEL*DT_RNDM(XIMIN)+XIMIN)+DEPS)/BETA
+ IF(PTS.LT.XMT) GOTO 50
+ PTS = SQRT(PTS**2-XMT2)
+ IF((PTS.GT.PTHIGH).OR.(PTS.LT.PTLOW)) GOTO 50
+
+ ELSE IF(IMODE.EQ.2) THEN
+
+ IF(EE.GE.0.D0) THEN
+ P2 = PVIRTP(1)
+ ELSE
+ P2 = PVIRTP(2)
+ ENDIF
+ XV = ABS(EE)
+ AA = (1.D0-XV)*XV*P2+PARMDL(25)
+ 75 CONTINUE
+ PTS = SQRT(AA/(DT_RNDM(PX)+EPS)-AA)
+ IF((PTS.GT.PTHIGH).OR.(PTS.LT.PTLOW)) GOTO 75
+
+C something wrong
+
+ ELSE IF(IMODE.NE.10) THEN
+ WRITE(LO,'(/1X,A,I4)') 'PHO_SELPT:ERROR: invalid IMODE',IMODE
+ CALL PHO_ABORT
+ ENDIF
+
+C debug output
+ IF(IDEB(5).GE.20) THEN
+ WRITE(LO,'(1X,A,I3,4E10.3)')
+ & 'PHO_SELPT: MODE,BET,PTMI,PTMA,PT',
+ & IMODE,BETA,PTLOW,PTHIGH,PTS
+ ENDIF
+ RETURN
+
+C initialization
+ 100 CONTINUE
+ PTSMIN = PTLOW
+ PTSMAX = PTHIGH
+ PTCON = PTHIGH
+C calculation of parameters
+ INIT = IMODE+100
+ AAS = 0.D0
+
+C initialization for model 0 (gaussian pt distribution)
+
+ IF(INIT.EQ.0) THEN
+ BETAS(1) = PARMDL(23)+0.15D0*LOG(EE)*(PARMDL(24)-PARMDL(23))
+ BETUP = BETAS(1)
+ BETLO = -2.D0
+ XTOL = PHO_CONN0(BETLO)*PHO_CONN0(BETUP)
+ IF(XTOL.LT.0.D0) THEN
+ XTOL = 1.D-4
+ METHOD = 1
+ MAXF = 500
+ BETA = 0.D0
+ BETA = PHO_DZEROX(BETLO,BETUP,XTOL,MAXF,PHO_CONN0,METHOD)
+* IF(BETA.LT.-1.D+10) THEN
+* WRITE(LO,'(1X,2A,1P,2E11.3)') 'PHO_SELPT: no Beta found ',
+* & '(model 0: Ecm,PTcut)',EE,PTCON
+* WRITE(LO,'(1X,A,1P,3E10.3)')
+* & 'PHO_SELPT: SIGS,SIGH,DSIGHP',SIGS,SIGH,DSIGHP
+* CALL PHO_PREVNT(-1)
+* BETA = 0.01
+* ELSE
+ AAS = DSIGHP/PTCON*EXP(-BETA*PTCON**2)
+* ENDIF
+ ELSE
+ AAS = 0.D0
+ BETA = BETAS(1)
+ ENDIF
+
+C initialization for model 1 (exponential pt distribution)
+
+ ELSE IF(INIT.EQ.1) THEN
+ XMT = PARMDL(43)
+ XMT2 = XMT*XMT
+ BETAS(1) = PARMDL(21)+0.15D0*LOG(EE)*(PARMDL(22)-PARMDL(21))
+ BETUP = BETAS(1)
+ BETLO = -3.D0
+ XTOL = PHO_CONN1(BETLO)*PHO_CONN1(BETUP)
+ IF(XTOL.LT.0.D0) THEN
+ XTOL = 1.D-4
+ METHOD = 1
+ MAXF = 500
+ BETA = 0.D0
+ BETA = PHO_DZEROX(BETLO,BETUP,XTOL,MAXF,PHO_CONN1,METHOD)
+* IF(BETA.LT.-1.D+10) THEN
+* WRITE(LO,'(1X,2A,1P,2E11.3)') 'PHO_SELPT: no Beta found ',
+* & '(model 1: Ecm,PTcut)',EE,PTCON
+* WRITE(LO,'(1X,A,1P,3E10.3)')
+* & 'PHO_SELPT: SIGS,SIGH,DSIGHP',SIGS,SIGH,DSIGHP
+* CALL PHO_PREVNT(-1)
+* BETA = 0.01
+* ELSE
+ AAS = DSIGHP/PTCON*EXP(-BETA*PTCON)
+* ENDIF
+ ELSE
+ AAS = 0.D0
+ BETA = BETAS(1)
+ ENDIF
+ ELSE IF(INIT.EQ.10) THEN
+ IF(IDEB(5).GT.10)
+ & WRITE(LO,'(/1X,A)') 'PHO_SELPT: no soft pt sampling'
+ RETURN
+ ELSE
+ WRITE(LO,'(1X,A,I4)') 'PHO_SELPT:ERROR: invalid distribution',
+ & INIT
+ CALL PHO_ABORT
+ ENDIF
+ BETA = MIN(BETA,BETAS(1))
+
+C hard cross section is too big: neg. beta parameter
+ IF(BETA.LE.0.D0) THEN
+ WRITE(LO,'(1X,A,1P,2E12.3)')
+ & 'PHO_SELPT: parameter BETA negative (BETA,AAS)',BETA,AAS
+ WRITE(LO,'(1X,A,1P,4E11.3)') 'SIGS,DSIGHP,SIGH,PTCON:',
+ & SIGS,DSIGHP,SIGH,PTCON
+ CALL PHO_PREVNT(-1)
+ ENDIF
+
+C output of initialization parameters
+ IF(IDEB(5).GE.10) THEN
+ WRITE(LO,'(1X,A,I3)') 'PHO_SELPT: initialization for model',
+ & INIT
+ WRITE(LO,'(5X,A,1P,2E13.3)')
+ & 'BETA,AAS ',BETA,AAS
+ WRITE(LO,'(5X,A,1P,3E13.3)')
+ & 'ECM,PTMIN,PTMAX ',EE,PTSMIN,PTSMAX
+ WRITE(LO,'(5X,A,1P,3E13.3)')
+ & 'SIGS,DSIGHP,SIGH',SIGS,DSIGHP,SIGH
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_CONN0
+ DOUBLE PRECISION FUNCTION PHO_CONN0(BETA)
+C***********************************************************************
+C
+C auxiliary function to determine parameters of soft
+C pt distribution dNs/dP_t = P_t * AAS * EXP(-BETA*P_t**2)
+C
+C internal factors: FS number of soft partons in soft Pomeron
+C FH number of soft partons in hard Pomeron
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C average number of cut soft and hard ladders (obsolete)
+ DOUBLE PRECISION AVERI,AVERK,AVERL,AVERM,AVERN
+ COMMON /POINT2/ AVERI,AVERK,AVERL,AVERM,AVERN
+C data needed for soft-pt calculation
+ DOUBLE PRECISION SIGS,DSIGHP,SIGH,FS,FH,BETAS,AAS,PTCON
+ COMMON /POINT3/ SIGS,DSIGHP,SIGH,FS,FH,BETAS(3),AAS,PTCON
+
+ DOUBLE PRECISION BETA,XX,FF
+
+ XX = BETA*PTCON**2
+ IF(ABS(XX).LT.1.D-3) THEN
+ FF = FS*SIGS+FH*SIGH
+ & - DSIGHP*(PTCON/2.D0+PTCON**3*BETA/4.D0)
+ ELSE
+ FF = FS*SIGS+FH*SIGH
+ & - DSIGHP/(2.D0*PTCON*BETA)*(EXP(XX)-1.D0)
+ ENDIF
+ PHO_CONN0 = FF
+
+* WRITE(LO,'(1X,A,3E12.3)') 'PHO_CONN0:BETA,AAS,FF',BETA,AAS,FF
+* WRITE(LO,'(1X,A,3E12.3)') 'PHO_CONN0:SIGS,SIGH,DSIGH',SIGS,SIGH,DSIGHP
+
+ END
+
+CDECK ID>, PHO_CONN1
+ DOUBLE PRECISION FUNCTION PHO_CONN1(BETA)
+C***********************************************************************
+C
+C auxiliary function to determine parameters of soft
+C pt distribution dNs/dP_t = P_t * AAS * EXP(-BETA*P_t)
+C
+C internal factors: FS number of soft partons in soft Pomeron
+C FH number of soft partons in hard Pomeron
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C average number of cut soft and hard ladders (obsolete)
+ DOUBLE PRECISION AVERI,AVERK,AVERL,AVERM,AVERN
+ COMMON /POINT2/ AVERI,AVERK,AVERL,AVERM,AVERN
+C data needed for soft-pt calculation
+ DOUBLE PRECISION SIGS,DSIGHP,SIGH,FS,FH,BETAS,AAS,PTCON
+ COMMON /POINT3/ SIGS,DSIGHP,SIGH,FS,FH,BETAS(3),AAS,PTCON
+
+ DOUBLE PRECISION BETA,XX,FF
+
+ XX = BETA*PTCON
+ IF(ABS(XX).LT.1.D-3) THEN
+ FF = FS*SIGS+FH*SIGH
+ & - DSIGHP*(PTCON/2.D0+PTCON**2*BETA/6.D0)
+ ELSE
+ FF = FS*SIGS+FH*SIGH
+ & - DSIGHP/(PTCON*BETA**2)*(EXP(XX)-1.D0-BETA*PTCON)
+ ENDIF
+ PHO_CONN1 = FF
+
+* WRITE(LO,'(1X,A,3E12.3)') 'PHO_CONN1:BETA,AAS,FF',BETA,AAS,FF
+* WRITE(LO,'(1X,A,3E12.3)') 'PHO_CONN1:SIGS,SIGH,DSIGH',SIGS,SIGH,DSIGHP
+
+ END
+
+CDECK ID>, PHO_MSHELL
+ SUBROUTINE PHO_MSHELL(PA1,PA2,XM1,XM2,P1,P2,IREJ)
+C********************************************************************
+C
+C rescaling of momenta of two partons to put both
+C on mass shell
+C
+C input: PA1,PA2 input momentum vectors
+C XM1,2 desired masses of particles afterwards
+C P1,P2 changed momentum vectors
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-20 )
+
+ DIMENSION PA1(*),PA2(*),P1(*),P2(*)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ IREJ = 0
+ IDEV = 0
+C debug output
+ IF(IDEB(40).GE.10) THEN
+ WRITE(LO,'(1X,A)') 'PHO_MSHELL: input momenta:'
+ WRITE(LO,'(5X,4E12.5)') (PA1(K),K=1,4)
+ WRITE(LO,'(5X,4E12.5)') (PA2(K),K=1,4)
+ WRITE(LO,'(5X,A,2E12.3)') 'new masses:',XM1,XM2
+ ENDIF
+
+C Lorentz transformation into system CMS
+ PX = PA1(1)+PA2(1)
+ PY = PA1(2)+PA2(2)
+ PZ = PA1(3)+PA2(3)
+ EE = PA1(4)+PA2(4)
+ XMS = EE**2-PX**2-PY**2-PZ**2
+ IF(XMS.LT.(XM1+XM2)**2) THEN
+ IREJ = 1
+ IFAIL(37) = IFAIL(37)+1
+
+ if((xm1.gt.1.D4).or.(xm2.gt.1.D4)) irej = irej/idev
+
+ IF(IDEB(40).GE.3) THEN
+ WRITE(LO,'(/1X,A,I12)')
+ & 'PHO_MSHELL:reject: too small string mass (KEVENT)',KEVENT
+ WRITE(LO,'(5X,A,3E12.4)') 'two-part.mass, part.masses:',
+ & SIGN(SQRT(ABS(XMS)),XMS),XM1,XM2
+ WRITE(LO,'(5X,A,4E11.4)') 'PX,PY,PZ,EE:',PX,PY,PZ,EE
+ IDEV = 5
+ IF(IDEB(40).GE.3) GOTO 55
+ ENDIF
+ RETURN
+ ENDIF
+ XMS = SQRT(XMS)
+ BGX = PX/XMS
+ BGY = PY/XMS
+ BGZ = PZ/XMS
+ GAM = EE/XMS
+ CALL PHO_ALTRA(GAM,-BGX,-BGY,-BGZ,PA1(1),PA1(2),PA1(3),
+ & PA1(4),PTOT1,P1(1),P1(2),P1(3),P1(4))
+C rotation angles
+ PTOT1 = MAX(DEPS,PTOT1)
+ COD = P1(3)/PTOT1
+ SID = SQRT(P1(1)**2+P1(2)**2)/PTOT1
+ COF = 1.D0
+ SIF = 0.D0
+ IF(PTOT1*SID.GT.1.D-5) THEN
+ COF = P1(1)/(SID*PTOT1)
+ SIF = P1(2)/(SID*PTOT1)
+ ANORF = SQRT(COF*COF+SIF*SIF)
+ COF = COF/ANORF
+ SIF = SIF/ANORF
+ ENDIF
+
+C new CM momentum and energies (for masses XM1,XM2)
+ XM12 = XM1**2
+ XM22 = XM2**2
+ SS = XMS**2
+ PCMP = PHO_XLAM(SS,XM12,XM22)/(2.D0*XMS)
+ EE1 = SQRT(XM12+PCMP**2)
+ EE2 = XMS-EE1
+C back rotation
+ CALL PHO_TRANS(0.D0,0.D0,PCMP,COD,SID,COF,SIF,XX,YY,ZZ)
+ CALL PHO_ALTRA(GAM,BGX,BGY,BGZ,XX,YY,ZZ,EE1,
+ & PTOT1,P1(1),P1(2),P1(3),P1(4))
+ CALL PHO_ALTRA(GAM,BGX,BGY,BGZ,-XX,-YY,-ZZ,EE2,
+ & PTOT2,P2(1),P2(2),P2(3),P2(4))
+
+C check consistency
+ DEL = XMS*0.0001
+ IF(ABS(PX-P1(1)-P2(1)).GT.DEL) THEN
+ IDEV = 1
+ ELSE IF(ABS(PY-P1(2)-P2(2)).GT.DEL) THEN
+ IDEV = 2
+ ELSE IF(ABS(PZ-P1(3)-P2(3)).GT.DEL) THEN
+ IDEV = 3
+ ELSE IF(ABS(EE-P1(4)-P2(4)).GT.DEL) THEN
+ IDEV = 4
+ ENDIF
+ 55 CONTINUE
+C debug output
+ IF(IDEV.NE.0) THEN
+ WRITE(LO,'(1X,A,I3)')
+ & 'PHO_MSHELL: inconsistent transformation (IDEV)',IDEV
+ WRITE(LO,'(1X,A)') 'PHO_MSHELL: input momenta:'
+ WRITE(LO,'(5X,4E12.5)') (PA1(K),K=1,4)
+ WRITE(LO,'(5X,4E12.5)') (PA2(K),K=1,4)
+ WRITE(LO,'(5X,A,3E12.3)') 'ava.mass,masses:',XMS,XM1,XM2
+ WRITE(LO,'(1X,A)') 'PHO_MSHELL: output momenta:'
+ WRITE(LO,'(5X,4E12.5)') (P1(K),K=1,4)
+ WRITE(LO,'(5X,4E12.5)') (P2(K),K=1,4)
+ ELSE IF(IDEB(40).GE.10) THEN
+ WRITE(LO,'(1X,A)') 'PHO_MSHELL: output momenta:'
+ WRITE(LO,'(5X,4E12.5)') (P1(K),K=1,4)
+ WRITE(LO,'(5X,4E12.5)') (P2(K),K=1,4)
+ ENDIF
+ END
+
+CDECK ID>, PHO_GLU2QU
+ SUBROUTINE PHO_GLU2QU(IG,IQ1,IQ2,IREJ)
+C********************************************************************
+C
+C split gluon with index I in POEVT1
+C (massless gluon assumed)
+C
+C input: /POEVT1/
+C IG gluon index
+C IQ1 first quark index
+C IQ2 second quark index
+C
+C output: new quarks in /POEVT1/
+C IREJ 1 splitting impossible
+C 0 splitting successful
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-15,
+ & EPS = 1.D-5 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ DIMENSION P1(4),P2(4)
+ DATA CUTM /0.02D0/
+
+ IREJ = 0
+
+C calculate string masses max possible
+ IF(ISWMDL(9).EQ.1) THEN
+ CMASS1=2.D0*(PHEP(4,IG)*PHEP(4,IQ1)-PHEP(1,IG)*PHEP(1,IQ1)
+ & -PHEP(2,IG)*PHEP(2,IQ1)-PHEP(3,IG)*PHEP(3,IQ1))
+ IF(CMASS1.LT.CUTM) THEN
+ IF(IDEB(73).GE.5) THEN
+ WRITE(LO,'(1X,A,3I4,4E10.3)')
+ & 'PHO_GLU2QU:REJECTION:IG,IQ1,IQ2,CMASS1',IG,IQ1,IQ2,CMASS1
+ ENDIF
+ IFAIL(33) = IFAIL(33) + 1
+ IREJ = 1
+ RETURN
+ ENDIF
+ CMASS2=2.D0*(PHEP(4,IG)*PHEP(4,IQ2)-PHEP(1,IG)*PHEP(1,IQ2)
+ & -PHEP(2,IG)*PHEP(2,IQ2)-PHEP(3,IG)*PHEP(3,IQ2))
+ IF(CMASS2.LT.CUTM) THEN
+ IF(IDEB(73).GE.5) THEN
+ WRITE(LO,'(1X,A,3I4,4E10.3)')
+ & 'PHO_GLU2QU:REJECTION:IG,IQ1,IQ2,CMASS2',IG,IQ1,IQ2,CMASS2
+ ENDIF
+ IFAIL(33) = IFAIL(33) + 1
+ IREJ = 1
+ RETURN
+ ENDIF
+C
+C calculate minimal z
+ ZMIN1 = (CUTM-SIGN(PHEP(5,IQ1)**2,PHEP(5,IQ1)))/CMASS1+EPS
+ ZMIN2 = (CUTM-SIGN(PHEP(5,IQ2)**2,PHEP(5,IQ2)))/CMASS2+EPS
+ ZMIN = MIN(ZMIN1,ZMIN2)
+ IF(MAX(ZMIN1,ZMIN2).GE.0.45D0) THEN
+ IF(IDEB(73).GE.5) THEN
+ WRITE(LO,'(1X,A,3I3,4E10.3)')
+ & 'PHO_GLU2QU:REJECTION:IG,IQ1,IQ2,ZMIN1,ZMIN2,P1*PG,P2*PG',
+ & IG,IQ1,IQ2,ZMIN1,ZMIN2,CMASS1,CMASS2
+ ENDIF
+ IFAIL(33) = IFAIL(33) + 1
+ IREJ = 1
+ RETURN
+ ENDIF
+ ELSE
+ ZMIN = MIN(0.1D0,0.5D0/PHEP(4,IG))
+ ENDIF
+C
+ ZFRAC = PHO_GLUSPL(ZMIN)
+ IF((ZFRAC.LT.ZMIN1).OR.((1.D0-ZFRAC).LT.ZMIN2)) THEN
+ ZFRAC = 1.D0-ZFRAC
+ ENDIF
+ DO 200 I=1,4
+ P1(I) = PHEP(I,IG)*ZFRAC
+ P2(I) = PHEP(I,IG)*(1.D0-ZFRAC)
+ 200 CONTINUE
+C quark flavours
+ CMASS1 = SQRT(ZFRAC*CMASS1+SIGN(PHEP(5,IQ1)**2,PHEP(5,IQ1)))
+ CMASS2 = SQRT((1.D0-ZFRAC)*CMASS2
+ & +SIGN(PHEP(5,IQ2)**2,PHEP(5,IQ2)))
+ CALL PHO_SEAFLA(IG,K,I,MIN(CMASS1,CMASS2))
+
+ IF(ABS(IDHEP(IQ1)).GT.6) THEN
+ K = SIGN(ABS(K),IDHEP(IQ1))
+ ELSE
+ K = -SIGN(ABS(K),IDHEP(IQ1))
+ ENDIF
+C colors
+ IF(K.GT.0) THEN
+ IC1 = MAX(ICOLOR(1,IG),ICOLOR(2,IG))
+ IC2 = MIN(ICOLOR(1,IG),ICOLOR(2,IG))
+ ELSE
+ IC1 = MIN(ICOLOR(1,IG),ICOLOR(2,IG))
+ IC2 = MAX(ICOLOR(1,IG),ICOLOR(2,IG))
+ ENDIF
+C register new partons
+ CALL PHO_REGPAR(-1,K,0,IG,0,P1(1),P1(2),P1(3),P1(4),
+ & IPHIST(1,IG),0,IC1,0,IPOS,1)
+ CALL PHO_REGPAR(-1,-K,0,IG,0,P2(1),P2(2),P2(3),P2(4),
+ & IPHIST(1,IG),0,IC2,0,IPOS,1)
+C debug output
+ IF(IDEB(73).GE.20) THEN
+ WRITE(LO,'(1X,A,/1X,A,3I3,5E10.3)')
+ & 'PHO_GLU2QU:',' IG,IQ1,IQ2,ZMIN1,2,Z,P1*PG,P2*PG',
+ & IG,IQ1,IQ2,ZMIN1,ZMIN2,ZFRAC,CMASS1,CMASS2
+ WRITE(LO,'(1X,A,4I5)') ' flavours, colors ',
+ & K,-K,IC1,IC2
+ ENDIF
+ END
+
+CDECK ID>, PHO_GLUSPL
+ DOUBLE PRECISION FUNCTION PHO_GLUSPL(ZMIN)
+C*********************************************************************
+C
+C calculate quark - antiquark light cone momentum fractions
+C according to Altarelli-Parisi g->q aq splitting function
+C (symmetric z interval assumed)
+C
+C input: ZMIN minimal Z value allowed,
+C 1-ZMIN maximal Z value allowed
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( ALEXP= 0.3333333333D0,
+ & DEPS = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+ IF(ZMIN.GE.0.5D0) THEN
+ IF(IDEB(69).GT.2) THEN
+ WRITE(LO,'(1X,A,E12.4)') 'PHO_GLUSPL: ZMIN>=0.5',ZMIN
+ ENDIF
+ ZZ=0.D0
+ GOTO 1000
+ ELSE IF(ZMIN.LE.0.D0) THEN
+ IF(IDEB(69).GT.2) THEN
+ WRITE(LO,'(1X,A,E12.4)') 'PHO_GLUSPL: ZMIN<=0',ZMIN
+ ENDIF
+ ZMINL = DEPS
+ ELSE
+ ZMINL = ZMIN
+ ENDIF
+
+ ZMAX = 1.D0-ZMINL
+ XI = DT_RNDM(ZMAX)
+ ZZ = ((1.D0-XI)*ZMINL**3+XI*ZMAX**3)**ALEXP
+ IF(DT_RNDM(ZZ).LT.0.5D0) ZZ = 1.D0-ZZ
+
+ 1000 CONTINUE
+ IF(IDEB(69).GE.10) THEN
+ WRITE(LO,'(1X,A,2E12.4)') 'PHO_GLUSPL: ZMIN,Z ',ZMIN,ZZ
+ ENDIF
+ PHO_GLUSPL = ZZ
+ END
+
+CDECK ID>, PHO_STDPAR
+ SUBROUTINE PHO_STDPAR(IJM1,IJM2,IGEN,MSPOM,MSREG,MHPOM,MHDIR,IREJ)
+C***********************************************************************
+C
+C select the initial parton x-fractions and flavors and
+C the final parton momenta and flavours
+C for standard Pomeron/Reggeon cuts
+C
+C input: IJM1 index of mother particle 1 in /POEVT1/
+C IJM2 index of mother particle 2 in /POEVT1/
+C IGEN production process of mother particles
+C MSPOM soft cut Pomerons
+C MHPOM hard or semihard cut Pomerons
+C MSREG soft cut Reggeons
+C MHDIR direct hard processes
+C
+C IJM1 -1 initialization of statistics
+C -2 output of statistics
+C
+C output: partons are directly written to /POEVT1/,/POEVT2/
+C
+C structure of /POSOFT/
+C XS1(I),XS2(I): x-values of initial partons
+C IJSI1(I),IJSI2(I): flavor of initial parton
+C 0 gluon
+C 1,2,3,4 quarks
+C negative antiquarks
+C IJSF1(I),IJSF2(I): flavor of final state partons
+C PSOFT1(I,J),PSOFT2(I,J): final part. momentum and energy
+C J=1 PX
+C =2 PY
+C =3 PZ
+C =4 ENERGY
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (RHOMAS = 0.766D0,
+ & DEPS = 1.D-10,
+ & TINY = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C particles created by initial state evolution
+ INTEGER MXISR1,MXISR2
+ PARAMETER ( MXISR1 = 150, MXISR2 = 50 )
+ INTEGER IFLISR,IPOISR,IMXISR
+ DOUBLE PRECISION PHISR
+ COMMON /POPISR/ IFLISR(2,MXISR1),PHISR(2,4,MXISR1),
+ & IPOISR(2,2,MXISR2),IMXISR(2)
+C light-cone x fractions and c.m. momenta of soft cut string ends
+ INTEGER MAXSOF
+ PARAMETER ( MAXSOF = 50 )
+ INTEGER IJSI2,IJSI1
+ DOUBLE PRECISION XS1,XS2,PSOFT1,PSOFT2
+ COMMON /POSOFT/ XS1(MAXSOF),XS2(MAXSOF),
+ & PSOFT1(4,MAXSOF),PSOFT2(4,MAXSOF),
+ & IJSI1(MAXSOF),IJSI2(MAXSOF)
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C internal cross check information on hard scattering limits
+ DOUBLE PRECISION ETAMI,ETAMA,XXMI,XXMA
+ COMMON /POHLIM/ ETAMI(2,15),ETAMA(2,15),XXMI(2,15),XXMA(2,15)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+
+ double precision pho_alphas
+
+ DIMENSION PC(4),IFLA(2),ICI(2,2)
+
+ IF(IJM1.EQ.-1) THEN
+ DO 116 I=1,15
+ ETAMI(1,I) = 1.D10
+ ETAMA(1,I) = -1.D10
+ ETAMI(2,I) = 1.D10
+ ETAMA(2,I) = -1.D10
+ XXMI(1,I) = 1.D0
+ XXMA(1,I) = 0.D0
+ XXMI(2,I) = 1.D0
+ XXMA(2,I) = 0.D0
+ 116 CONTINUE
+ CALL PHO_HARSCA(IJM1,1)
+ CALL PHO_HARCOL(IJM1,0.D0,0,0,0,0,0,0,0,0,0,0,0,0)
+
+ RETURN
+
+ ELSE IF(IJM1.EQ.-2) THEN
+
+C output internal statistics
+ IF(IDEB(23).GE.1) THEN
+ WRITE(LO,'(/1X,A)')
+ & 'kinematic limits particle c (ETAMIN,ETAMAX,XMIN,XMAX)'
+ DO 117 I=1,15
+ WRITE(LO,'(5X,I3,4E13.5)')
+ & I,ETAMI(1,I),ETAMA(1,I),XXMI(1,I),XXMA(1,I)
+ 117 CONTINUE
+ WRITE(LO,'(1X,A)')
+ & 'kinematic limits particle d (ETAMIN,ETAMAX,XMIN,XMAX)'
+ DO 118 I=1,15
+ WRITE(LO,'(5X,I3,4E13.5)')
+ & I,ETAMI(2,I),ETAMA(2,I),XXMI(2,I),XXMA(2,I)
+ 118 CONTINUE
+ ENDIF
+ CALL PHO_HARSCA(IJM1,1)
+ CALL PHO_HARCOL(IJM1,0.D0,0,0,0,0,0,0,0,0,0,0,0,0)
+
+ RETURN
+ ENDIF
+
+ IREJ = 0
+C debug output
+ IF(IDEB(23).GT.5) WRITE(LO,221) IJM1,IJM2,MSPOM,MHPOM,MSREG,MHDIR
+ 221 FORMAT (' PHO_STDPAR: JM1/2,MSPOM,MHPOM,MSREG,MHDIR ',6I5)
+
+C get mother data (exchange if first particle is a pomeron)
+ IF((IDHEP(IJM1).EQ.990).AND.(IFPAP(1).NE.990)) THEN
+ JM1 = IJM2
+ JM2 = IJM1
+ ELSE
+ JM1 = IJM1
+ JM2 = IJM2
+ ENDIF
+
+ NPOSP(1) = JM1
+ NPOSP(2) = JM2
+ IDPDG1 = IDHEP(JM1)
+ IDBAM1 = IMPART(JM1)
+ IDPDG2 = IDHEP(JM2)
+ IDBAM2 = IMPART(JM2)
+
+C store current status of /POEVT1/
+ KHPOMS = KHPOM
+ KSPOMS = KSPOM
+ KSREGS = KSREG
+ KHDIRS = KHDIR
+ NHEPS = NHEP
+ IPOIS1 = IPOIX1
+ IPOIS2 = IPOIX2
+
+C get nominal masses (photons: VDM assumption)
+ DELMAS = 0.D0
+ IF(IDHEP(JM1).EQ.22) THEN
+ PMASSP(1) = RHOMAS+DELMAS
+ PVIRTP(1) = PHEP(5,JM1)**2
+ ELSE
+ PMASSP(1) = PHO_PMASS(IDBAM1,0)+DELMAS
+ PVIRTP(1) = 0.D0
+ ENDIF
+ IF(IDHEP(JM2).EQ.22) THEN
+ PMASSP(2) = RHOMAS+DELMAS
+ PVIRTP(2) = PHEP(5,JM2)**2
+ ELSE
+ PMASSP(2) = PHO_PMASS(IDBAM2,0)+DELMAS
+ PVIRTP(2) = 0.D0
+ ENDIF
+
+C calculate c.m. energy and check kinematics
+ PC(1) = PHEP(1,JM1)+PHEP(1,JM2)
+ PC(2) = PHEP(2,JM1)+PHEP(2,JM2)
+ PC(3) = PHEP(3,JM1)+PHEP(3,JM2)
+ PC(4) = PHEP(4,JM1)+PHEP(4,JM2)
+ SS = (PC(4)+PC(3))*(PC(4)-PC(3))-PC(1)**2-PC(2)**2
+
+ IF(SS.LE.(PMASSP(1)+PMASSP(2)+DEPS)**2) THEN
+ WRITE(LO,'(/,1X,2A)') 'PHO_STDPAR: ',
+ & 'energy smaller than two-particle threshold (event rejected)'
+ CALL PHO_PREVNT(1)
+ IREJ = 5
+ GOTO 150
+ ENDIF
+ ECMP = SQRT(SS)
+
+ IF(IDEB(23).GE.5) THEN
+ WRITE(LO,'(1X,2A,2I7,E12.4)') 'PHO_STDPAR: ',
+ & 'particles, available energy:',IDHEP(JM1),IDHEP(JM2),ECMP
+ IF(IDEB(23).GE.25) CALL PHO_PREVNT(0)
+ ENDIF
+
+C Lorentz transformation into c.m. system
+ DO 10 I=1,4
+ GAMBEP(I) = PC(I)/ECMP
+ 10 CONTINUE
+ CALL PHO_ALTRA(GAMBEP(4),-GAMBEP(1),-GAMBEP(2),-GAMBEP(3),
+ & PHEP(1,JM1),PHEP(2,JM1),PHEP(3,JM1),
+ & PHEP(4,JM1),PTOT1,PC(1),PC(2),PC(3),PC(4))
+C rotation angle: particle 1 moves along +z
+ CODP = PC(3)/PTOT1
+ SIDP = SQRT(PC(1)**2+PC(2)**2)/PTOT1
+ COFP = 1.D0
+ SIFP = 0.D0
+ IF(PTOT1*SIDP.GT.1.D-5) THEN
+ COFP = PC(1)/(SIDP*PTOT1)
+ SIFP = PC(2)/(SIDP*PTOT1)
+ ANORF = SQRT(COFP*COFP+SIFP*SIFP)
+ COFP = COFP/ANORF
+ SIFP = SIFP/ANORF
+ ENDIF
+C get CM momentum
+ XM12 = PMASSP(1)**2
+ XM22 = PMASSP(2)**2
+ PCMP = PHO_XLAM(SS,XM12,XM22)/(2.D0*ECMP)
+
+C find particle combination
+ II = 0
+ IF(IDPDG2.EQ.IFPAP(2)) THEN
+ IF(IDPDG1.EQ.IFPAP(1)) II = 1
+ ELSE IF(IDPDG2.EQ.990) THEN
+ IF(IDPDG1.EQ.IFPAP(1)) THEN
+ II = 2
+ ELSE IF(IDPDG1.EQ.IFPAP(2)) THEN
+ II = 3
+ ELSE IF(IDPDG1.EQ.990) THEN
+ II = 4
+ ENDIF
+ ENDIF
+ IF(II.EQ.0) THEN
+ IF(ISWMDL(14).GT.0) THEN
+ II = 1
+ ELSE
+ WRITE(LO,'(/1X,2A,2I8)') 'PHO_STDPAR:ERROR: ',
+ & 'invalid particle combination:',IDPDG1,IDPDG2
+ CALL PHO_ABORT
+ ENDIF
+ ENDIF
+
+C select parton distribution functions from tables
+ IF((MHPOM+MHDIR).GT.0) THEN
+ CALL PHO_ACTPDF(IDPDG1,1)
+ CALL PHO_ACTPDF(IDPDG2,2)
+C initialize alpha_s calculation
+ DUMMY = PHO_ALPHAS(0.D0,-4)
+ ENDIF
+
+C interpolate hard cross sections and rejection weights
+ CALL PHO_HARINT(II,ECMP,PVIRTP(1),PVIRTP(2),
+ & -1,Max_pro_2,1,4,MSPOM+MHPOM+MHDIR)
+
+ NTRY = 10
+
+C position of first particle added to /POEVT2/
+ NLOR1 = NHEP+1
+
+C ---------------- direct processes -----------------
+
+ IF(MHDIR.EQ.1) THEN
+ CALL PHO_HARDIR(II,IVAL1,IVAL2,MSPAR1,MSPAR2,MHPAR1,MHPAR2,IREJ)
+ IF(IREJ.EQ.50) RETURN
+ IF(IREJ.NE.0) GOTO 150
+C write comments to /POEVT1/
+ CALL PHO_REGPAR(25,II,NPROHD(1),IDPDG1,IDPDG2,X0HD(1,1),
+ & X0HD(1,2),PTHD(1),VHD(1),N0INHD(1,1),N0INHD(1,2),
+ & IPHO_CNV1(NOUTHD(1,1)),IPHO_CNV1(NOUTHD(1,2)),IPOS,1)
+ CALL PHO_REGPAR(20,IPHO_CNV1(N0INHD(1,1)),IPDF1,JM1,JM2,
+ & PPH(1,1),PPH(2,1),PPH(3,1),Q2SCA(1,1),100,NBRAHD(1,1),
+ & ICA1,ICA2,IPOS,1)
+ CALL PHO_REGPAR(20,IPHO_CNV1(N0INHD(1,2)),IPDF2,JM2,JM1,
+ & PPH(1,2),PPH(2,2),PPH(3,2),Q2SCA(1,2),100,NBRAHD(1,2),
+ & ICA1,ICA2,IPOS,1)
+ CALL PHO_REGPAR(21,NOUTHD(1,1),IPDF1,JM1,JM2,PPH(5,1),
+ & PPH(6,1),PPH(7,1),PPH(8,1),100,NBRAHD(1,1),ICA1,ICA2,
+ & IPOS1,1)
+ CALL PHO_REGPAR(21,NOUTHD(1,2),IPDF2,JM2,JM1,PPH(5,2),
+ & PPH(6,2),PPH(7,2),PPH(8,2),100,NBRAHD(1,2),ICA1,ICA2,
+ & IPOS2,1)
+
+C soft spectator partons
+ ICA1 = 0
+ ICA2 = 0
+ ICB1 = 0
+ ICB2 = 0
+ IPDF1 = 0
+ IPDF2 = 0
+
+C single resolved: QCD compton scattering
+C ------------------------------
+ IF(NPROHD(1).EQ.10) THEN
+C register hadron remnant
+ CALL PHO_HARREM(JM2,JM1,IGEN,-1,IVAL2,1,ICB1,ICB2,IUSED,IREJ)
+ IPDF2 = 1000*IGRP(2)+ISET(2)
+ ELSE IF(NPROHD(1).EQ.12) THEN
+C register hadron remnant
+ CALL PHO_HARREM(JM1,JM2,IGEN,1,IVAL1,1,ICA1,ICA2,IUSED,IREJ)
+ IPDF1 = 1000*IGRP(1)+ISET(1)
+
+C single resolved: photon gluon fusion
+C ---------------------------
+ ELSE IF(NPROHD(1).EQ.11) THEN
+C register hadron remnant
+ CALL PHO_HARREM(JM2,JM1,IGEN,-1,IVAL2,1,ICB1,ICB2,IUSED,IREJ)
+ IPDF2 = 1000*IGRP(2)+ISET(2)
+ ELSE IF(NPROHD(1).EQ.13) THEN
+C register hadron remnant
+ CALL PHO_HARREM(JM1,JM2,IGEN,1,IVAL1,1,ICA1,ICA2,IUSED,IREJ)
+ IPDF1 = 1000*IGRP(1)+ISET(1)
+
+C direct process (no remnant)
+C ----------------------------
+ ELSE IF(NPROHD(1).EQ.14) THEN
+
+ ENDIF
+
+C write final high-pt partons to POEVT1
+ IF((ISWMDL(8).GE.2).AND.(NPROHD(1).NE.14)) THEN
+ ICI(1,1) = ICA1
+ ICI(1,2) = ICA2
+ ICI(2,1) = ICB1
+ ICI(2,2) = ICB2
+ I = 1
+ IFLA(1) = NINHD(I,1)
+ IFLA(2) = NINHD(I,2)
+C initial state radiation
+ DO 130 K=1,2
+ DO 135 IPA=IPOISR(K,2,I),IPOISR(K,1,I)+1,-1
+ KK = 1
+ 137 CONTINUE
+ IFLB = IFLISR(K,IPA)
+ IF(ABS(IFLB).LE.6) THEN
+C partons
+ IF(ICI(K,1)*ICI(K,2).NE.0) THEN
+ IF(IFLB.EQ.0) THEN
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),IC1,IC2,
+ & ICI(K,1),ICI(K,2),3)
+ ELSE IF(IFLB.GT.0) THEN
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),IC1,IC2,
+ & ICI(K,1),ICI(K,2),4)
+ ELSE
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),ICI(K,1),ICI(K,2),
+ & IC1,IC2,4)
+ ENDIF
+ ELSE
+ IF((ICI(K,1)+ICI(K,2))*IFLB.LT.0) THEN
+ IF(IPA-KK.GT.IPOISR(K,1,I)) THEN
+ CALL PHO_SWAPI(IFLISR(K,IPA),IFLISR(K,IPA-KK))
+ KK = KK+1
+ GOTO 137
+ ENDIF
+ ENDIF
+ IF(IFLB.EQ.0) THEN
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),ICI(K,1),ICI(K,2),
+ & IC1,IC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),IC1,IC2,
+ & ICI(K,1),ICI(K,2),2)
+ ENDIF
+ ENDIF
+ IIFL = IPHO_CNV1(IFLB)
+
+ IFLA(K) = IFLA(K)-IFLB
+ IST = -1
+ ELSE
+C other particle
+ IIFL = IFLB
+ IC1 = 0
+ IC2 = 0
+ IST = 1
+ ENDIF
+ CALL PHO_REGPAR(IST,IIFL,0,JM1,JM2,PHISR(K,1,IPA),
+ & PHISR(K,2,IPA),PHISR(K,3,IPA),PHISR(K,4,IPA),I*100+K,
+ & IGEN,IC1,IC2,IPOS,1)
+ 135 CONTINUE
+ 130 CONTINUE
+ ICOLOR(1,IPOS1-2) = ICI(1,1)
+ ICOLOR(2,IPOS1-2) = ICI(1,2)
+ ICOLOR(1,IPOS1-1) = ICI(2,1)
+ ICOLOR(2,IPOS1-1) = ICI(2,2)
+ CALL PHO_HARCOL(NPROHD(I),VHD(I),IFLA(1),ICI(1,1),ICI(1,2),
+ & IFLA(2),ICI(2,1),ICI(2,2),NOUTHD(I,1),ICI(1,1),ICI(1,2),
+ & NOUTHD(I,2),ICI(2,1),ICI(2,2))
+ ICOLOR(1,IPOS1) = ICI(1,1)
+ ICOLOR(2,IPOS1) = ICI(1,2)
+ ICOLOR(1,IPOS2) = ICI(2,1)
+ ICOLOR(2,IPOS2) = ICI(2,2)
+ DO 140 K=1,2
+ IPA = IPOISR(K,1,I)
+ CALL PHO_REGPAR(-1,IPHO_CNV1(IFLISR(K,IPA)),0,JM1,JM2,
+ & PHISR(K,1,IPA),PHISR(K,2,IPA),PHISR(K,3,IPA),
+ & PHISR(K,4,IPA),-I*100,IGEN,ICI(K,1),ICI(K,2),IPOS,1)
+ 140 CONTINUE
+ ELSE
+ ICOLOR(1,IPOS1-2) = ICA1
+ ICOLOR(2,IPOS1-2) = ICA2
+ ICOLOR(1,IPOS1-1) = ICB1
+ ICOLOR(2,IPOS1-1) = ICB2
+ CALL PHO_HARCOL(NPROHD(1),VHD(1),NINHD(1,1),ICA1,ICA2,
+ & NINHD(1,2),ICB1,ICB2,NOUTHD(1,1),ICA1,ICA2,
+ & NOUTHD(1,2),ICB1,ICB2)
+ ICOLOR(1,IPOS1) = ICA1
+ ICOLOR(2,IPOS1) = ICA2
+ ICOLOR(1,IPOS2) = ICB1
+ ICOLOR(2,IPOS2) = ICB2
+ I = -1
+ IF(ABS(NOUTHD(1,1)).GT.12) I = 1
+ CALL PHO_REGPAR(I,IPHO_CNV1(NOUTHD(1,1)),0,JM1,JM2,PPH(5,1),
+ & PPH(6,1),PPH(7,1),PPH(8,1),-100,IGEN,ICA1,ICA2,IPOS,1)
+ CALL PHO_REGPAR(I,IPHO_CNV1(NOUTHD(1,2)),0,JM1,JM2,PPH(5,2),
+ & PPH(6,2),PPH(7,2),PPH(8,2),-100,IGEN,ICB1,ICB2,IPOS,1)
+ ENDIF
+
+C assign soft pt to spectators
+ IF(ISWMDL(18).EQ.0) THEN
+ IPOS2 = IPOS2-1
+ CALL PHO_PARTPT(0,NLOR1,IPOS2,PTCUT(II),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(26) = IFAIL(26) + 1
+ GOTO 150
+ ENDIF
+
+ ENDIF
+
+C ----------------- resolved processes -------------------
+
+C single Reggeon exchange
+C ----------------------------
+ ELSE IF((MSREG.EQ.1).AND.(MHPOM+MSPOM.EQ.0)) THEN
+C flavours
+ CALL PHO_REGFLA(JM1,JM2,IFL1,IFL2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(24) = IFAIL(24)+1
+ GOTO 150
+ ENDIF
+
+C colors
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(((ABS(IFL1).GT.6).AND.(IFL1.GT.0))
+ & .OR.((ABS(IFL1).LE.6).AND.(IFL1.LT.0))) THEN
+ CALL PHO_SWAPI(ICA1,ICB1)
+ ENDIF
+ ECMH = ECMP/2.D0
+
+C registration
+
+C DPMJET call with special projectile / target
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0).AND.(IPROCE.EQ.1)) THEN
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,0.D0,0.D0,ECMH*XPSUB,
+ & ECMH*XPSUB,-1,IGEN,ICA1,0,IPOS1,1)
+ CALL PHO_REGPAR(-1,IFL2,0,JM1,JM2,0.D0,0.D0,-ECMH*XTSUB,
+ & ECMH*XTSUB,-1,IGEN,ICB1,0,IPOS2,1)
+C default treatment
+ ELSE
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,0.D0,0.D0,ECMH,ECMH,
+ & -1,IGEN,ICA1,0,IPOS1,1)
+ CALL PHO_REGPAR(-1,IFL2,0,JM1,JM2,0.D0,0.D0,-ECMH,ECMH,
+ & -1,IGEN,ICB1,0,IPOS2,1)
+ ENDIF
+
+C soft pt assignment
+ IF(ISWMDL(18).EQ.0) THEN
+ CALL PHO_PARTPT(0,IPOS1,IPOS2,PTCUT(II),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(25) = IFAIL(25) + 1
+ GOTO 150
+ ENDIF
+ ENDIF
+C
+C multi Reggeon / Pomeron exchange
+C----------------------------------------
+ ELSE
+C parton configuration
+
+ CALL PHO_POMSCA(II,MSPOM,MHPOM,MSREG,IVAL1,IVAL2,MSPAR1,MSPAR2,
+ & MHPAR1,MHPAR2,IREJ)
+
+ IF(IREJ.EQ.50) RETURN
+ IF(IREJ.NE.0) GOTO 150
+
+C register particles
+ IF(IDEB(23).GE.15) WRITE(LO,'(1X,A,/15X,7I5)')
+ & 'PHO_STDPAR: MSPOM,MHPOM,MSREG,MSPAR1/2,IVAL1/2',
+ & MSPOM,MHPOM,MSREG,MSPAR1,MSPAR2,IVAL1,IVAL2
+
+C register soft partons
+ IF(IVAL1.NE.0) THEN
+ IF(IVAL1.LT.0) THEN
+ IND1 = 3
+ IVAL1=-IVAL1
+ ELSE
+ IND1 = 2
+ ENDIF
+ ELSE IF(MSPOM.EQ.0) THEN
+ IND1 = 4
+ ELSE
+ IND1 = 1
+ ENDIF
+ IF(IVAL2.NE.0) THEN
+ IF(IVAL2.LT.0) THEN
+ IND2 = 3
+ IVAL2=-IVAL2
+ ELSE
+ IND2 = 2
+ ENDIF
+ ELSE IF(MSPOM.EQ.0) THEN
+ IND2 = 4
+ ELSE
+ IND2 = 1
+ ENDIF
+
+ IF(IDEB(23).GE.20) WRITE(LO,'(1X,A,2I3,2X,2I3)')
+ & 'PHO_STDPAR: IND1/2,IVAL1/2',IND1,IND2,IVAL1,IVAL2
+
+C soft Pomeron final states
+C -----------------------------------
+ K = MSPOM+MHPOM+MSREG
+ DO 50 I=1,MSPOM
+
+ CALL PHO_POSPOM(II,IND1,IND2,IGEN,I,K,ISWAP,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(8) = IFAIL(8) + 1
+ GOTO 150
+ ENDIF
+C
+ 50 CONTINUE
+
+C soft Reggeon final states
+C -----------------------------------------
+ DO 75 I=1,MSREG
+C flavours
+ CMASS1 = MIN(PSOFT1(4,IND1),PSOFT2(4,IND2))
+ IF(DT_RNDM(CMASS1).LT.0.5D0) THEN
+ CALL PHO_SEAFLA(JM1,IFLA1,IFLB1,CMASS1)
+ ELSE
+ CALL PHO_SEAFLA(JM2,IFLA1,IFLB1,CMASS1)
+ ENDIF
+
+C colors
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(((ABS(IFLA1).GT.6).AND.(IFLA1.GT.0))
+ & .OR.((ABS(IFLA1).LE.6).AND.(IFLA1.LT.0)))
+ & CALL PHO_SWAPI(ICA1,ICB1)
+C registration
+ CALL PHO_REGPAR(-1,IFLA1,0,JM1,JM2,PSOFT1(1,IND1),
+ & PSOFT1(2,IND1),PSOFT1(3,IND1),PSOFT1(4,IND1),
+ & I,IGEN,ICA1,ICA2,IPOS1,1)
+ IND1 = IND1+1
+ CALL PHO_REGPAR(-1,IFLB1,0,JM2,JM1,PSOFT2(1,IND2),
+ & PSOFT2(2,IND2),PSOFT2(3,IND2),PSOFT2(4,IND2),
+ & I,IGEN,ICB1,ICB2,IPOS2,1)
+ IND2 = IND2+1
+
+ IF(IDEB(23).GE.20) WRITE(LO,'(1X,A,/15X,6I4)')
+ & 'PHO_STDPAR: reg.cut: IND1,IND2,IFLA,IFLB,IPOS1,IPOS2',
+ & IND1-1,IND2-1,IFLA1,IFLB1,IPOS1,IPOS2
+
+C soft pt assignment
+ IF(ISWMDL(18).EQ.0) THEN
+ CALL PHO_PARTPT(0,IPOS1,IPOS2,PTCUT(II),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(25) = IFAIL(25) + 1
+ GOTO 150
+ ENDIF
+ ENDIF
+
+ 75 CONTINUE
+
+C hard Pomeron final states
+C ------------------------------------
+ IND1 = MSPAR1
+ IND2 = MSPAR2
+
+ DO 100 L=1,MHPOM
+ I = LSIDX(L)
+
+ IFLI1 = IPHO_CNV1(N0INHD(I,1))
+ IFLI2 = IPHO_CNV1(N0INHD(I,2))
+ IFLO1 = IPHO_CNV1(NOUTHD(I,1))
+ IFLO2 = IPHO_CNV1(NOUTHD(I,2))
+
+C write comments to /POEVT1/
+ CALL PHO_REGPAR(25,II,NPROHD(I),IDPDG1,IDPDG2,X0HD(I,1),
+ & X0HD(I,2),PTHD(I),VHD(I),N0INHD(I,1),N0INHD(I,2),
+ & IFLO1,IFLO2,IPOS,1)
+ I1 = 8*I-7
+ IPDF = 1000*IGRP(1)+ISET(1)
+ CALL PHO_REGPAR(20,IFLI1,IPDF,JM1,JM2,PPH(I1,1),
+ & PPH(I1+1,1),PPH(I1+2,1),Q2SCA(I,1),L*100,NBRAHD(I,1),
+ & ICA1,ICA2,IPOS,1)
+ IPDF = 1000*IGRP(2)+ISET(2)
+ CALL PHO_REGPAR(20,IFLI2,IPDF,JM2,JM1,PPH(I1,2),
+ & PPH(I1+1,2),PPH(I1+2,2),Q2SCA(I,2),L*100,NBRAHD(I,2),
+ & ICB1,ICB2,IPOS,1)
+ I1 = 8*I-3
+ IPDF = 1000*IGRP(1)+ISET(1)
+ CALL PHO_REGPAR(21,IFLO1,IPDF,JM1,JM2,PPH(I1,1),
+ & PPH(I1+1,1),PPH(I1+2,1),PPH(I,1),L*100,NBRAHD(I,1),
+ & ICA1,ICA2,IPOS1,1)
+ IPDF = 1000*IGRP(2)+ISET(2)
+ CALL PHO_REGPAR(21,IFLO2,IPDF,JM2,JM1,PPH(I1,2),
+ & PPH(I1+1,2),PPH(I1+2,2),PPH(I,2),L*100,NBRAHD(I,2),
+ & ICB1,ICB2,IPOS2,1)
+
+C spectator partons belonging to hard interaction
+ IF(IVAL1.EQ.I) THEN
+ IVQ = 1
+ IND = 1
+ ELSE IF((MSPOM.EQ.0).AND.(L.EQ.1).AND.(IVAL1.EQ.0)) THEN
+ IVQ = 0
+ IND = 1
+ ELSE
+ IVQ = -1
+ IND = IND1
+ ENDIF
+ CALL PHO_HARREM(JM1,JM2,IGEN,L,IVQ,IND,ICA1,ICA2,IUSED,IREJ)
+ IF(IVQ.LT.0) IND1 = IND1-IUSED
+ IF(IVAL2.EQ.I) THEN
+ IVQ = 1
+ IND = 1
+ ELSE IF((MSPOM.EQ.0).AND.(L.EQ.1).AND.(IVAL2.EQ.0)) THEN
+ IVQ = 0
+ IND = 1
+ ELSE
+ IVQ = -1
+ IND = IND2
+ ENDIF
+ CALL PHO_HARREM(JM2,JM1,IGEN,-L,IVQ,IND,ICB1,ICB2,IUSED,IREJ)
+ IF(IVQ.LT.0) IND2 = IND2-IUSED
+C
+C register hard scattered partons
+ IF((ISWMDL(8).GE.2)
+ & .AND.((IPAMDL(101).NE.1).OR.(L.EQ.1))) THEN
+ ICI(1,1) = ICA1
+ ICI(1,2) = ICA2
+ ICI(2,1) = ICB1
+ ICI(2,2) = ICB2
+ IFLA(1) = NINHD(I,1)
+ IFLA(2) = NINHD(I,2)
+C initial state radiation
+ DO 230 K=1,2
+ DO 235 IPA=IPOISR(K,2,I),IPOISR(K,1,I)+1,-1
+ KK = 1
+ 237 CONTINUE
+ IFLB = IFLISR(K,IPA)
+ IF(ABS(IFLB).LE.6) THEN
+C partons
+ IF(ICI(K,1)*ICI(K,2).NE.0) THEN
+ IF(IFLB.EQ.0) THEN
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),IC1,IC2,
+ & ICI(K,1),ICI(K,2),3)
+ ELSE IF(IFLB.GT.0) THEN
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),IC1,IC2,
+ & ICI(K,1),ICI(K,2),4)
+ ELSE
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),ICI(K,1),
+ & ICI(K,2),IC1,IC2,4)
+ ENDIF
+ ELSE
+ IF((ICI(K,1)+ICI(K,2))*IFLB.LT.0) THEN
+ IF(IPA-KK.GT.IPOISR(K,1,I)) THEN
+ CALL PHO_SWAPI(IFLISR(K,IPA),IFLISR(K,IPA-KK))
+ KK = KK+1
+ GOTO 237
+ ENDIF
+ ENDIF
+ IF(IFLB.EQ.0) THEN
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),ICI(K,1),
+ & ICI(K,2),IC1,IC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICI(K,1),ICI(K,2),IC1,IC2,
+ & ICI(K,1),ICI(K,2),2)
+ ENDIF
+ ENDIF
+ IIFL = IPHO_CNV1(IFLB)
+
+ IFLA(K) = IFLA(K)-IFLB
+ IST = -1
+ ELSE
+C other particles
+ IIFL = IFLB
+ IC1 = 0
+ IC2 = 0
+ IST = 1
+ ENDIF
+ CALL PHO_REGPAR(IST,IIFL,0,JM1,JM2,PHISR(K,1,IPA),
+ & PHISR(K,2,IPA),PHISR(K,3,IPA),PHISR(K,4,IPA),
+ & L*100+K,IGEN,IC1,IC2,IPOS,1)
+ 235 CONTINUE
+ 230 CONTINUE
+ ICOLOR(1,IPOS1-2) = ICI(1,1)
+ ICOLOR(2,IPOS1-2) = ICI(1,2)
+ ICOLOR(1,IPOS1-1) = ICI(2,1)
+ ICOLOR(2,IPOS1-1) = ICI(2,2)
+ CALL PHO_HARCOL(NPROHD(I),VHD(I),IFLA(1),ICI(1,1),ICI(1,2),
+ & IFLA(2),ICI(2,1),ICI(2,2),NOUTHD(I,1),ICI(1,1),ICI(1,2),
+ & NOUTHD(I,2),ICI(2,1),ICI(2,2))
+ ICOLOR(1,IPOS1) = ICI(1,1)
+ ICOLOR(2,IPOS1) = ICI(1,2)
+ ICOLOR(1,IPOS2) = ICI(2,1)
+ ICOLOR(2,IPOS2) = ICI(2,2)
+ DO 240 K=1,2
+ IPA = IPOISR(K,1,I)
+ CALL PHO_REGPAR(-1,IPHO_CNV1(IFLISR(K,IPA)),0,JM1,JM2,
+ & PHISR(K,1,IPA),PHISR(K,2,IPA),PHISR(K,3,IPA),
+ & PHISR(K,4,IPA),-L*100,IGEN,ICI(K,1),ICI(K,2),IPOS,1)
+ 240 CONTINUE
+ ELSE
+ ICOLOR(1,IPOS1-2) = ICA1
+ ICOLOR(2,IPOS1-2) = ICA2
+ ICOLOR(1,IPOS1-1) = ICB1
+ ICOLOR(2,IPOS1-1) = ICB2
+ CALL PHO_HARCOL(NPROHD(I),VHD(I),NINHD(I,1),ICA1,ICA2,
+ & NINHD(I,2),ICB1,ICB2,NOUTHD(I,1),ICA1,ICA2,
+ & NOUTHD(I,2),ICB1,ICB2)
+ ICOLOR(1,IPOS1) = ICA1
+ ICOLOR(2,IPOS1) = ICA2
+ ICOLOR(1,IPOS2) = ICB1
+ ICOLOR(2,IPOS2) = ICB2
+ I1 = 8*I-3
+ CALL PHO_REGPAR(-1,IPHO_CNV1(NOUTHD(I,1)),0,JM1,JM2,
+ & PPH(I1,1),PPH(I1+1,1),PPH(I1+2,1),PPH(I1+3,1),-L*100,IGEN,
+ & ICA1,ICA2,IPOS,1)
+ CALL PHO_REGPAR(-1,IPHO_CNV1(NOUTHD(I,2)),0,JM1,JM2,
+ & PPH(I1,2),PPH(I1+1,2),PPH(I1+2,2),PPH(I1+3,2),-L*100,IGEN,
+ & ICB1,ICB2,IPOS,1)
+ ENDIF
+ 100 CONTINUE
+C end of resolved parton registration
+ ENDIF
+
+ IF(MHDIR+MHPOM.GT.0) THEN
+
+ IF(ISWMDL(29).GE.1) THEN
+C primordial kt of hard scattering
+ CALL PHO_PRIMKT(1,NLOR1,NHEP,PTCUT(II),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(27) = IFAIL(27)+1
+ GOTO 150
+ ENDIF
+ ELSE IF(ISWMDL(24).GE.0) THEN
+C give "soft" pt only to soft (spectator) partons in hard processes
+ CALL PHO_PARTPT(1,NLOR1,NHEP,PTCUT(II),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(26) = IFAIL(26)+1
+ GOTO 150
+ ENDIF
+ ENDIF
+
+ ENDIF
+
+C give "soft" pt to partons in soft Pomerons
+ IF((MHDIR.EQ.0).AND.(ISWMDL(18).EQ.1)) THEN
+ CALL PHO_PARTPT(0,NLOR1,NHEP,PTCUT(II),IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(25) = IFAIL(25) + 1
+ GOTO 150
+ ENDIF
+ ENDIF
+
+C boost back to lab frame
+ CALL PHO_LTRHEP(NLOR1,NHEP,CODP,SIDP,COFP,SIFP,GAMBEP(4),
+ & GAMBEP(1),GAMBEP(2),GAMBEP(3))
+ RETURN
+
+C rejection treatment
+ 150 CONTINUE
+ IFAIL(2) = IFAIL(2)+1
+C reset counters
+ KSPOM = KSPOMS
+ KHPOM = KHPOMS
+ KHDIR = KHDIRS
+ KSREG = KSREGS
+C reset mother-daugther relations
+ JDAHEP(1,JM1) = 0
+ JDAHEP(2,JM1) = 0
+ JDAHEP(1,JM2) = 0
+ JDAHEP(2,JM2) = 0
+ ISTHEP(JM1) = 1
+ ISTHEP(JM2) = 1
+ IPOIX1 = IPOIS1
+ IPOIX2 = IPOIS2
+ NHEP = NHEPS
+C debug
+ IF(IDEB(23).GT.2) WRITE(LO,'(/1X,A,4I6)')
+ & 'PHO_STDPAR: rejection (MSPOM,MHPOM,MSREG,MHDIR)',
+ & MSPOM,MHPOM,MSREG,MHDIR
+ RETURN
+
+ END
+
+CDECK ID>, PHO_HARCOL
+ SUBROUTINE PHO_HARCOL(MSPR,V,IP1,ICA1,ICA2,IP2,ICB1,ICB2,
+ & IP3,ICC1,ICC2,IP4,ICD1,ICD2)
+C*********************************************************************
+C
+C calculate color flow for hard resolved process
+C
+C input: IP1..4 flavour of partons (PDG convention)
+C V parton subprocess Mandelstam variable V = t/s
+C (lightcone momenta assumed)
+C ICA,ICB color labels
+C MSPR process number
+C -1 initialization of statistics
+C -2 output of statistics
+C
+C output: ICC,ICD color label of final partons
+C
+C (it is possible to use the same variables for in and output)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+
+ DIMENSION PC(3),ICONF(8,5),IRECN(8,2)
+
+C initialization
+ IF(MSPR.EQ.-1) THEN
+ DO 200 I=1,8
+ DO 210 K=1,5
+ ICONF(I,K) = 0
+ 210 CONTINUE
+ IRECN(I,1) = 0
+ IRECN(I,2) = 0
+ 200 CONTINUE
+ RETURN
+C output of statistics
+ ELSE IF(MSPR.EQ.-2) THEN
+ IF(IDEB(26).LT.1) RETURN
+ WRITE(LO,'(/1X,A,/1X,A)')
+ & 'PHO_HARCOL: sampled color configurations',
+ & '----------------------------------------'
+ WRITE(LO,'(6X,A,15X,A)')
+ & 'diagram color configurations (1-4)','sum'
+ DO 300 I=1,8
+ DO 310 K=1,4
+ ICONF(I,5) = ICONF(I,5) + ICONF(I,K)
+ 310 CONTINUE
+ WRITE(LO,'(2X,A,4I11,I12)') PROC(I),(ICONF(I,K),K=1,5)
+ 300 CONTINUE
+ IF(ISWMDL(11).GE.2) THEN
+ WRITE(LO,'(/6X,A)')
+ & 'diagram with / without color re-connection'
+ DO 320 I=1,8
+ WRITE(LO,'(2X,A,2I11)') PROC(I),IRECN(I,1),IRECN(I,2)
+ 320 CONTINUE
+ ENDIF
+ RETURN
+ ENDIF
+C
+C gluons: first color positive, quarks second color zero
+ IF(IP1.EQ.0) THEN
+ IF(ICA1.LT.0) THEN
+ I = ICA2
+ ICA2 = ICA1
+ ICA1 = I
+ ENDIF
+ ELSE
+ ICA2 = 0
+ ENDIF
+ IF(IP2.EQ.0) THEN
+ IF(ICB1.LT.0) THEN
+ I = ICB2
+ ICB2 = ICB1
+ ICB1 = I
+ ENDIF
+ ELSE
+ ICB2 = 0
+ ENDIF
+ IC2 = 0
+ IC4 = 0
+C debug output
+ IF(IDEB(26).GE.15)
+ & WRITE(LO,'(1X,A,I4,/,5X,A,3I5,2X,3I5)')
+ & 'PHO_HARCOL: process',MSPR,
+ & 'initial partons and colors',IP1,ICA1,ICA2,IP2,ICB1,ICB2
+C
+ IRC = 0
+ IF(IPAMDL(21).EQ.1) THEN
+C
+C soft color re-connection option
+C
+ IF(MSPR.EQ.1) THEN
+C hard g g final state, only g g --> g g
+ IF((ICA1.NE.-ICA2).AND.(ICB1.NE.-ICB2)) THEN
+ IF(DT_RNDM(V).LT.PARMDL(140)) THEN
+ IC1 = ICA1
+ IC2 = ICA2
+ IC3 = ICB1
+ IC4 = ICB2
+ IRECN(MSPR,1) = IRECN(MSPR,1)+1
+ IRC = 1
+ GOTO 100
+ ENDIF
+ ENDIF
+ ELSE IF(MSPR.EQ.3) THEN
+C hard q g final state
+ IF((ICA1.NE.-ICA2).AND.(ICB1.NE.-ICB2)) THEN
+ IF(DT_RNDM(V).LT.PARMDL(141)) THEN
+ IC1 = ICA1
+ IC2 = ICA2
+ IC3 = ICB1
+ IC4 = ICB2
+ IRECN(MSPR,1) = IRECN(MSPR,1)+1
+ IRC = 1
+ GOTO 100
+ ENDIF
+ ENDIF
+ ELSE IF((MSPR.EQ.5).OR.(MSPR.EQ.7).OR.(MSPR.EQ.8)) THEN
+C hard q q final state
+ IF(ICA1.NE.-ICB1) THEN
+ IF(DT_RNDM(V).LT.PARMDL(142)) THEN
+ IC1 = ICA1
+ IC2 = ICA2
+ IC3 = ICB1
+ IC4 = ICB2
+ IRECN(MSPR,1) = IRECN(MSPR,1)+1
+ IRC = 1
+ GOTO 100
+ ENDIF
+ ENDIF
+ ENDIF
+ IRECN(MSPR,2) = IRECN(MSPR,2)+1
+ ENDIF
+C
+ IF((ISWMDL(11).EQ.1).AND.(MSPR.LT.10)) THEN
+C
+C large Nc limit of all graphs
+C
+ IF(MSPR.EQ.1) THEN
+C g g --> g g
+ IF(DT_RNDM(V).GT.0.5D0) THEN
+ IC1 = ICB1
+ IC2 = ICA2
+ IC3 = ICA1
+ IC4 = ICB2
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = ICA1
+ IC2 = ICB2
+ IC3 = ICB1
+ IC4 = ICA2
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.2) THEN
+C q qb --> g g
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ IF(ICA1.LT.0) THEN
+ IC1 = I1
+ IC2 = ICA1
+ IC3 = ICB1
+ IC4 = I2
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ELSE
+ IC1 = ICA1
+ IC2 = I2
+ IC3 = I1
+ IC4 = ICB1
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.3) THEN
+C q g --> q g
+ IF(DT_RNDM(V).LT.0.5D0) THEN
+ IF(IP1+IP2.GT.0) THEN
+ IC1 = ICB1
+ IC2 = ICA2
+ IC3 = ICA1
+ IC4 = ICB2
+ ELSE IF(IP1.LT.0) THEN
+ IC1 = ICB2
+ IC3 = ICB1
+ IC4 = ICA1
+ ELSE
+ IC1 = ICA1
+ IC2 = ICB1
+ IC3 = ICA2
+ ENDIF
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IF(IP1.GT.0) THEN
+ CALL PHO_HARCOR(-ICA1,ICB2)
+ IC1 = ICA1
+ IC3 = ICB1
+ IC4 = -ICA1
+ ELSE IF(IP2.GT.0) THEN
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ IC1 = ICA1
+ IC2 = -ICB1
+ IC3 = ICB1
+ ELSE IF(IP1.LT.0) THEN
+ CALL PHO_HARCOR(-ICA1,ICB1)
+ IC1 = ICA1
+ IC3 = -ICA1
+ IC4 = ICB2
+ ELSE IF(IP2.LT.0) THEN
+ CALL PHO_HARCOR(-ICB1,ICA1)
+ IC1 = -ICB1
+ IC2 = ICA2
+ IC3 = ICB1
+ ENDIF
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.4) THEN
+C g g --> q qb
+ IC1 = ICA1
+ IC3 = ICB2
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ IF(ICB2.EQ.-ICB1) IC3 = ICA2
+ IF(IP3*IC1.LT.0) THEN
+ I = IC1
+ IC1 = IC3
+ IC3 = I
+ ENDIF
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ELSE IF(MSPR.EQ.5) THEN
+C q qb --> q qb
+ IF(DT_RNDM(V).LT.0.5D0) THEN
+ IF(ICA1*IP3.LT.0) THEN
+ IC1 = ICB1
+ IC3 = ICA1
+ ELSE
+ IC1 = ICA1
+ IC3 = ICB1
+ ENDIF
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IF(ICA1*IP3.LT.0) THEN
+ IC1 = -ICA1
+ IC3 = ICA1
+ ELSE
+ IC1 = ICA1
+ IC3 = -ICA1
+ ENDIF
+ CALL PHO_HARCOR(-ICA1,ICB1)
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.6) THEN
+C q qb --> qp qbp
+ IF(ICA1*IP3.LT.0) THEN
+ IC1 = ICB1
+ IC3 = ICA1
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = ICA1
+ IC3 = ICB1
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.7) THEN
+C q q --> q q
+ IF(DT_RNDM(V).LT.0.5D0) THEN
+ IC1 = ICA1
+ IC3 = ICB1
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = ICB1
+ IC3 = ICA1
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.8) THEN
+C q qp --> q qp
+ IF(IP1*IP2.GT.0) THEN
+ IF(IP3.EQ.IP1) THEN
+ IC1 = ICB1
+ IC3 = ICA1
+ ELSE
+ IC1 = ICA1
+ IC3 = ICB1
+ ENDIF
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IF(ICA1*IP3.LT.0) THEN
+ IC1 = -ICA1
+ IC3 = ICA1
+ ELSE
+ IC1 = ICA1
+ IC3 = -ICA1
+ ENDIF
+ CALL PHO_HARCOR(-ICA1,ICB1)
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE
+C unknown process
+ WRITE(LO,'(/1X,A,I3)')
+ & 'PHO_HARCOL:ERROR:invalid process number (MSPR)',MSPR
+ CALL PHO_ABORT
+ ENDIF
+C
+ ELSE
+C
+C color flow according to QCD leading order matrix element
+C
+ U = -(1.D0+V)
+ IF(MSPR.EQ.1) THEN
+C g g --> g g
+ PC(1) = 1/V**2 +2.D0/V +3.D0 +2.D0*V +V**2
+ PC(2) = 1/U**2 +2.D0/U +3.D0 +2.D0*U +U**2
+ PC(3) = (V/U)**2+2.D0*(V/U)+3.D0 +2.D0*(U/V)+(U/V)**2
+ XI = (PC(1)+PC(2)+PC(3))*DT_RNDM(U)
+ PCS = 0.D0
+ DO 110 I=1,3
+ PCS = PCS+PC(I)
+ IF(XI.LT.PCS) GOTO 120
+ 110 CONTINUE
+ 120 CONTINUE
+ IF(I.EQ.1) THEN
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ IF(DT_RNDM(V).GT.0.5D0) THEN
+ IC1 = I1
+ IC2 = ICA2
+ IC3 = ICB1
+ IC4 = I2
+ CALL PHO_HARCOR(-ICB2,ICA1)
+ IF(ICB1.EQ.-ICB2) IC3 = ICA1
+ ELSE
+ IC1 = ICA1
+ IC2 = I2
+ IC3 = I1
+ IC4 = ICB2
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ IF(ICB2.EQ.-ICB1) IC4 = ICA2
+ ENDIF
+ ELSE IF(I.EQ.2) THEN
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ IF(DT_RNDM(U).GT.0.5D0) THEN
+ IC1 = ICB1
+ IC2 = I2
+ IC3 = I1
+ IC4 = ICA2
+ CALL PHO_HARCOR(-ICB2,ICA1)
+ IF(ICB1.EQ.-ICB2) IC1 = ICA1
+ ELSE
+ IC1 = I1
+ IC2 = ICB2
+ IC3 = ICA1
+ IC4 = I2
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ IF(ICB2.EQ.-ICB1) IC2 = ICA2
+ ENDIF
+ ELSE
+ IF(DT_RNDM(V).GT.0.5D0) THEN
+ IC1 = ICB1
+ IC2 = ICA2
+ IC3 = ICA1
+ IC4 = ICB2
+ ELSE
+ IC1 = ICA1
+ IC2 = ICB2
+ IC3 = ICB1
+ IC4 = ICA2
+ ENDIF
+ ENDIF
+ ICONF(MSPR,I) = ICONF(MSPR,I)+1
+ ELSE IF(MSPR.EQ.2) THEN
+C q qb --> g g
+ PC(1) = U/V-2.D0*U**2
+ PC(2) = V/U-2.D0*V**2
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ XI = (PC(1)+PC(2))*DT_RNDM(U)
+ IF(XI.LT.PC(1)) THEN
+ IF(ICA1.GT.0) THEN
+ IC1 = ICA1
+ IC2 = I2
+ IC3 = I1
+ IC4 = ICB1
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = I1
+ IC2 = ICA1
+ IC3 = ICB1
+ IC4 = I2
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE
+ IF(ICA1.GT.0) THEN
+ IC1 = I1
+ IC2 = ICB1
+ IC3 = ICA1
+ IC4 = I2
+ ICONF(MSPR,3) = ICONF(MSPR,3)+1
+ ELSE
+ IC1 = ICB1
+ IC2 = I2
+ IC3 = I1
+ IC4 = ICA1
+ ICONF(MSPR,4) = ICONF(MSPR,4)+1
+ ENDIF
+ ENDIF
+ ELSE IF(MSPR.EQ.3) THEN
+C q g --> q g
+ PC(1) = 2.D0*(U/V)**2-U
+ PC(2) = 2.D0/V**2-1.D0/U
+ XI = (PC(1)+PC(2))*DT_RNDM(V)
+ IF(XI.LT.PC(1)) THEN
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ IF(IP1.GT.0) THEN
+ IC1 = I1
+ IC3 = ICB1
+ IC4 = I2
+ CALL PHO_HARCOR(-ICA1,ICB2)
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE IF(IP1.LT.0) THEN
+ IC1 = I2
+ IC3 = I1
+ IC4 = ICB2
+ CALL PHO_HARCOR(-ICA1,ICB1)
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE IF(IP2.GT.0) THEN
+ IC1 = ICA1
+ IC2 = I2
+ IC3 = I1
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ELSE
+ IC1 = I1
+ IC2 = ICA2
+ IC3 = I2
+ CALL PHO_HARCOR(-ICB1,ICA1)
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE
+ IF(IP1.GT.0) THEN
+ IC1 = ICB1
+ IC3 = ICA1
+ IC4 = ICB2
+ ICONF(MSPR,3) = ICONF(MSPR,3)+1
+ ELSE IF(IP1.LT.0) THEN
+ IC1 = ICB2
+ IC3 = ICB1
+ IC4 = ICA1
+ ICONF(MSPR,3) = ICONF(MSPR,3)+1
+ ELSE IF(IP2.GT.0) THEN
+ IC1 = ICB1
+ IC2 = ICA2
+ IC3 = ICA1
+ ICONF(MSPR,4) = ICONF(MSPR,4)+1
+ ELSE
+ IC1 = ICA1
+ IC2 = ICB1
+ IC3 = ICA2
+ ICONF(MSPR,4) = ICONF(MSPR,4)+1
+ ENDIF
+ ENDIF
+ ELSE IF(MSPR.EQ.4) THEN
+C g g --> q qb
+ PC(1) = U/V-2.D0*U**2
+ PC(2) = V/U-2.D0*V**2
+ XI = (PC(1)+PC(2))*DT_RNDM(U)
+ IF(XI.LT.PC(1)) THEN
+ IF(IP3.GT.0) THEN
+ IC1 = ICA1
+ IC3 = ICB2
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ IF(ICB2.EQ.-ICB1) IC3 = ICA2
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = ICA2
+ IC3 = ICB1
+ CALL PHO_HARCOR(-ICB2,ICA1)
+ IF(ICB1.EQ.-ICB2) IC3 = ICA1
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE
+ IF(IP3.GT.0) THEN
+ IC1 = ICB1
+ IC3 = ICA2
+ CALL PHO_HARCOR(-ICB2,ICA1)
+ IF(ICB1.EQ.-ICB2) IC1 = ICA1
+ ICONF(MSPR,3) = ICONF(MSPR,3)+1
+ ELSE
+ IC1 = ICB2
+ IC3 = ICA1
+ CALL PHO_HARCOR(-ICB1,ICA2)
+ IF(ICB2.EQ.-ICB1) IC1 = ICA2
+ ICONF(MSPR,4) = ICONF(MSPR,4)+1
+ ENDIF
+ ENDIF
+ ELSE IF(MSPR.EQ.5) THEN
+C q qb --> q qb
+ PC(1) = (1.D0+U**2)/V**2
+ PC(2) = (V**2+U**2)
+ XI = (PC(1)+PC(2))*DT_RNDM(V)
+ IF(XI.LT.PC(1)) THEN
+ CALL PHO_HARCOR(-ICB1,ICA1)
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ IF(IP3.GT.0) THEN
+ IC1 = I1
+ IC3 = I2
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = I2
+ IC3 = I1
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE
+ IF(IP3.GT.0) THEN
+ IC1 = MAX(ICA1,ICB1)
+ IC3 = MIN(ICA1,ICB1)
+ ICONF(MSPR,3) = ICONF(MSPR,3)+1
+ ELSE
+ IC1 = MIN(ICA1,ICB1)
+ IC3 = MAX(ICA1,ICB1)
+ ICONF(MSPR,4) = ICONF(MSPR,4)+1
+ ENDIF
+ ENDIF
+ ELSE IF(MSPR.EQ.6) THEN
+C q qb --> qp qpb
+ IF(IP3.GT.0) THEN
+ IC1 = MAX(ICA1,ICB1)
+ IC3 = MIN(ICA1,ICB1)
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = MIN(ICA1,ICB1)
+ IC3 = MAX(ICA1,ICB1)
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.7) THEN
+C q q --> q q
+ PC(1) = (1.D0+U**2)/V**2
+ PC(2) = (1.D0+V**2)/U**2
+ XI = (PC(1)+PC(2))*DT_RNDM(U)
+ IF(XI.LT.PC(1)) THEN
+ IC1 = ICB1
+ IC3 = ICA1
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = ICA1
+ IC3 = ICB1
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE IF(MSPR.EQ.8) THEN
+C q qp --> q qp
+ IF(IP1*IP2.LT.0) THEN
+ CALL PHO_HARCOR(-ICB1,ICA1)
+ CALL PHO_SELCOL(0,0,I1,K1,I2,K2,1)
+ IF(IP1.GT.0) THEN
+ IC1 = I1
+ IC3 = I2
+ ICONF(MSPR,1) = ICONF(MSPR,1)+1
+ ELSE
+ IC1 = I2
+ IC3 = I1
+ ICONF(MSPR,2) = ICONF(MSPR,2)+1
+ ENDIF
+ ELSE
+ IC1 = ICB1
+ IC3 = ICA1
+ ICONF(MSPR,3) = ICONF(MSPR,3)+1
+ ENDIF
+
+ ELSE IF(MSPR.EQ.10) THEN
+C gam q --> q g
+ CALL PHO_SELCOL(ICB1,ICB2,IC1,IC2,IC3,IC4,2)
+ IF(IP3.EQ.0) THEN
+ CALL PHO_SWAPI(IC1,IC3)
+ CALL PHO_SWAPI(IC2,IC4)
+ ENDIF
+ ELSE IF(MSPR.EQ.11) THEN
+C gam g --> q q
+ IC1 = ICB1
+ IC3 = ICB2
+ IF(IP3.LT.0) CALL PHO_SWAPI(IC1,IC3)
+ ELSE IF(MSPR.EQ.12) THEN
+C q gam --> q g
+ CALL PHO_SELCOL(ICA1,ICA2,IC1,IC2,IC3,IC4,2)
+ IF(IP3.EQ.0) THEN
+ CALL PHO_SWAPI(IC1,IC3)
+ CALL PHO_SWAPI(IC2,IC4)
+ ENDIF
+ ELSE IF(MSPR.EQ.13) THEN
+C g gam --> q q
+ IC1 = ICA1
+ IC3 = ICA2
+ IF(IP3.LT.0) CALL PHO_SWAPI(IC1,IC3)
+ ELSE IF(MSPR.EQ.14) THEN
+ IF(ABS(IP3).GT.12) THEN
+ IC1 = 0
+ IC3 = 0
+ ELSE
+ CALL PHO_SELCOL(ICA1,ICA2,IC1,IC2,IC3,IC4,1)
+ IF(IP3.LT.0) CALL PHO_SWAPI(IC1,IC3)
+ ENDIF
+ ELSE
+C unknown process
+ WRITE(LO,'(/1X,A,I3)')
+ & 'PHO_HARCOL:ERROR:invalid process number',MSPR
+ CALL PHO_ABORT
+ ENDIF
+ ENDIF
+C
+ 100 CONTINUE
+C debug output
+ IF(IDEB(26).GE.10) WRITE(LO,'(5X,A,3I5,2X,3I5)')
+ & 'final partons and colors',IP3,IC1,IC2,IP4,IC3,IC4
+C color connection?
+* IF(((IC1.NE.-IC3).AND.(IC1.NE.-IC4)).AND.
+* & (((IC2.NE.0).AND.(IC2.NE.-IC3).AND.(IC2.NE.-IC4))
+* & .OR.(IC2.EQ.0))) THEN
+C color exchange?
+* IF(((IP1.EQ.IP3).AND.(ICA1.EQ.IC1).AND.(ICA2.EQ.IC2))
+* & .OR.((IP1.EQ.IP4).AND.(ICA1.EQ.IC3).AND.(ICA2.EQ.IC4))) THEN
+* IF(IRC.NE.1) THEN
+* WRITE(LO,'(1X,A,I10,I3)')
+* & 'PHO_HARCOL:unexp. re-connection (event/MSPR):',KEVENT,MSPR
+* WRITE(LO,'(5X,A,3I5,2X,3I5)')
+* & 'initial partons and colors',IP1,ICA1,ICA2,IP2,ICB1,ICB2
+* WRITE(LO,'(5X,A,3I5,2X,3I5)')
+* & 'final partons and colors ',IP3,IC1,IC2,IP4,IC3,IC4
+* ENDIF
+* IRC = 0
+* ENDIF
+* ENDIF
+* IF(IRC.EQ.1) THEN
+* WRITE(LO,'(1X,A,I10,I3)')
+* & 'PHO_HARCOL:re-conn. failed (event/MSPR):',KEVENT,MSPR
+* WRITE(LO,'(5X,A,3I5,2X,3I5)')
+* & 'initial partons and colors',IP1,ICA1,ICA2,IP2,ICB1,ICB2
+* WRITE(LO,'(5X,A,3I5,2X,3I5)')
+* & 'final partons and colors ',IP3,IC1,IC2,IP4,IC3,IC4
+* ENDIF
+C
+ ICC1 = IC1
+ ICC2 = IC2
+ ICD1 = IC3
+ ICD2 = IC4
+
+ END
+
+CDECK ID>, PHO_HARCOR
+ SUBROUTINE PHO_HARCOR(ICOLD,ICNEW)
+C***********************************************************************
+C
+C substituite color in /POEVT2/
+C
+C input: ICOLD old color
+C ICNEW new color
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DO 100 I=NHEP,3,-1
+ IF(ISTHEP(I).EQ.-1) THEN
+ IF(ICOLOR(1,I).EQ.ICOLD) THEN
+ ICOLOR(1,I) = ICNEW
+ RETURN
+ ELSE IF(IDHEP(I).EQ.21) THEN
+ IF(ICOLOR(2,I).EQ.ICOLD) THEN
+ ICOLOR(2,I) = ICNEW
+ RETURN
+ ENDIF
+ ENDIF
+* ELSE IF(ISTHEP(I).EQ.20) THEN
+* IF(ICOLOR(1,I).EQ.-ICOLD) THEN
+* print LO,' PHO_HARCOR(3): line, old, new:',I,ICOLD,ICNEW
+* ICOLOR(1,I) = -ICNEW
+* RETURN
+* ELSE IF(IDHEP(I).EQ.21) THEN
+* IF(ICOLOR(2,I).EQ.-ICOLD) THEN
+* print LO,' PHO_HARCOR(4): line, old, new:',I,ICOLD,ICNEW
+* ICOLOR(2,I) = -ICNEW
+* RETURN
+* ENDIF
+* ENDIF
+ ENDIF
+ 100 CONTINUE
+ END
+
+CDECK ID>, PHO_HARREM
+ SUBROUTINE PHO_HARREM(JM1,JM2,IGEN,IHPOS,IVAL,INDXS,IC1,IC2,
+ & IUSED,IREJ)
+C***********************************************************************
+C
+C sample color structure for initial quark/gluon of hard scattering
+C and write hadron remnant to /POEVT1/
+C
+C input: JM1,2 index of mother particle in POEVT1
+C IGEN mother particle production process
+C IHPOS hard pomeron number
+C INDXH index of hard parton
+C positive for labels 1
+C negative for labels 2
+C IVAL 1 hard valence parton
+C 0 hard sea parton connected by color flow with
+C valence quarks
+C -1 hard sea parton independent off valence
+C quarks
+C INDXS index of soft partons needed
+C
+C output: IC1,IC2 color label of initial parton
+C IUSED number of soft X values used
+C IREJ rejection flag
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C light-cone x fractions and c.m. momenta of soft cut string ends
+ INTEGER MAXSOF
+ PARAMETER ( MAXSOF = 50 )
+ INTEGER IJSI2,IJSI1
+ DOUBLE PRECISION XS1,XS2,PSOFT1,PSOFT2
+ COMMON /POSOFT/ XS1(MAXSOF),XS2(MAXSOF),
+ & PSOFT1(4,MAXSOF),PSOFT2(4,MAXSOF),
+ & IJSI1(MAXSOF),IJSI2(MAXSOF)
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ IREJ = 0
+
+ INDXH = SIGN(LSIDX(ABS(IHPOS)),IHPOS)
+
+ IF(INDXH.GT.0) THEN
+ IJH = IPHO_CNV1(NINHD(INDXH,1))
+ ELSE
+ IJH = IPHO_CNV1(NINHD(-INDXH,2))
+ ENDIF
+C direct process (photon or pomeron)
+ IUSED = 0
+ IC1 = 0
+ IC2 = 0
+ IF((IJH.EQ.22).OR.(IJH.EQ.990)) RETURN
+
+ IHP = 100*ABS(IHPOS)
+ IVSW = 1
+***************************************
+* IF((IDHEP(JM1).EQ.22).OR.(IDHEP(JM1).EQ.990)) IVSW = 0
+***************************************
+
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,2I3,1X,5I4)')
+ & 'PHO_HARREM: JM1,JM2,IHPOS,INDXH,IFLH,IVAL,INDXS:',
+ & JM1,JM2,IHPOS,INDXH,IJH,IVAL,INDXS
+
+C quark
+C****************************************************************
+
+ IF(IJH.NE.21) THEN
+
+C valence quark engaged in hard scattering
+ IF(IVAL.EQ.1) THEN
+ CALL PHO_PARREM(JM1,IJH,IREM,IREJ)
+ IF(IREJ.NE.0) THEN
+ WRITE(LO,'(/1X,2A,2I6)') 'PHO_HARREM: ',
+ & 'invalid valence flavour requested JM,IFLA',JM1,IJH
+ return
+ ENDIF
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(((ABS(IREM).GT.6).AND.(IREM.GT.0))
+ & .OR.((ABS(IREM).LE.6).AND.(IREM.LT.0))) THEN
+ I = ICA1
+ ICA1 = ICB1
+ ICB1 = I
+ ENDIF
+C remnant of hadron
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS)
+ P2 = PSOFT1(2,INDXS)
+ P3 = PSOFT1(3,INDXS)
+ P4 = PSOFT1(4,INDXS)
+ IJSI1(INDXS) = IREM
+ ELSE
+ P1 = PSOFT2(1,INDXS)
+ P2 = PSOFT2(2,INDXS)
+ P3 = PSOFT2(3,INDXS)
+ P4 = PSOFT2(4,INDXS)
+ IJSI2(INDXS) = IREM
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IREM,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IREM,IPOS,SIGN(INDXS,INDXH)
+
+ IUSED = 1
+
+C sea quark engaged in hard scattering, valence quarks treated
+ ELSE IF(IVAL.EQ.0) THEN
+ IF(INDXH.GT.0) THEN
+ E1 = PSOFT1(4,INDXS)
+ E2 = PSOFT1(4,INDXS+1)
+ ELSE
+ E1 = PSOFT2(4,INDXS)
+ E2 = PSOFT2(4,INDXS+1)
+ ENDIF
+ CALL PHO_VALFLA(JM1,IVFL1,IVFL2,E1,E2)
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(DT_RNDM(P1).LT.0.5D0) THEN
+ CALL PHO_SELCOL(ICB1,ICB2,ICB1,ICB2,ICC1,ICC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICA1,ICA2,ICA1,ICA2,ICC1,ICC2,2)
+ ENDIF
+ IF(((ABS(IVFL1).GT.6).AND.(IVFL1.GT.0))
+ & .OR.((ABS(IVFL1).LE.6).AND.(IVFL1.LT.0))) THEN
+ I = ICA1
+ ICA1 = ICB1
+ ICB1 = I
+ ENDIF
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS)
+ P2 = PSOFT1(2,INDXS)
+ P3 = PSOFT1(3,INDXS)
+ P4 = PSOFT1(4,INDXS)
+ IJSI1(INDXS) = IVFL1
+ ELSE
+ P1 = PSOFT2(1,INDXS)
+ P2 = PSOFT2(2,INDXS)
+ P3 = PSOFT2(3,INDXS)
+ P4 = PSOFT2(4,INDXS)
+ IJSI2(INDXS) = IVFL1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IVFL1,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IVFL1,IPOS,SIGN(INDXS,INDXH)
+
+C
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS+1)
+ P2 = PSOFT1(2,INDXS+1)
+ P3 = PSOFT1(3,INDXS+1)
+ P4 = PSOFT1(4,INDXS+1)
+ IJSI1(INDXS+1) = IVFL2
+ ELSE
+ P1 = PSOFT2(1,INDXS+1)
+ P2 = PSOFT2(2,INDXS+1)
+ P3 = PSOFT2(3,INDXS+1)
+ P4 = PSOFT2(4,INDXS+1)
+ IJSI2(INDXS+1) = IVFL2
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IVFL2,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICB1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IVFL2,IPOS,SIGN(INDXS+1,INDXH)
+
+C
+ IF(IJH.LT.0) THEN
+ ICB1 = ICC2
+ ICA1 = ICC1
+ ELSE
+ ICB1 = ICC1
+ ICA1 = ICC2
+ ENDIF
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS+2)
+ P2 = PSOFT1(2,INDXS+2)
+ P3 = PSOFT1(3,INDXS+2)
+ P4 = PSOFT1(4,INDXS+2)
+ IJSI1(INDXS+2) = -IJH
+ ELSE
+ P1 = PSOFT2(1,INDXS+2)
+ P2 = PSOFT2(2,INDXS+2)
+ P3 = PSOFT2(3,INDXS+2)
+ P4 = PSOFT2(4,INDXS+2)
+ IJSI2(INDXS+2) = -IJH
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,-IJH,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,0,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: sea spectator:(IFL,IPOS,INDXS)',
+ & -IJH,IPOS,SIGN(INDXS+2,INDXH)
+ IUSED = 3
+C
+C sea quark engaged in hard scattering, valences treated separately
+ ELSE IF(IVAL.EQ.-1) THEN
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(IJH.GT.0) THEN
+ ICC1 = ICB1
+ ICB1 = ICA1
+ ICA1 = ICC1
+ ENDIF
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS)
+ P2 = PSOFT1(2,INDXS)
+ P3 = PSOFT1(3,INDXS)
+ P4 = PSOFT1(4,INDXS)
+ IJSI1(INDXS) = -IJH
+ ELSE
+ P1 = PSOFT2(1,INDXS)
+ P2 = PSOFT2(2,INDXS)
+ P3 = PSOFT2(3,INDXS)
+ P4 = PSOFT2(4,INDXS)
+ IJSI2(INDXS) = -IJH
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,-IJH,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,0,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: sea spectator:(IFL,IPOS,INDXS)',
+ & -IJH,IPOS,SIGN(INDXS,INDXH)
+
+ IUSED = 1
+ ELSE
+ WRITE(LO,'(1X,A,2I5)')
+ & 'PHO_HARREM:ERROR:unsupported combination of IVAL,IJH',
+ & IVAL,IJH
+ CALL PHO_ABORT
+ ENDIF
+C
+ IC1 = ICB1
+ IC2 = 0
+C
+C gluon
+C****************************************************************
+C
+C gluon from valence quarks
+ ELSE
+ IF(IVAL.EQ.1) THEN
+C purely gluonic pomeron remnant
+ IF((IDHEP(JM1).EQ.990).AND.(IPAMDL(20).GT.0)) THEN
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS) + PSOFT1(1,INDXS+1)
+ P2 = PSOFT1(2,INDXS) + PSOFT1(2,INDXS+1)
+ P3 = PSOFT1(3,INDXS) + PSOFT1(3,INDXS+1)
+ P4 = PSOFT1(4,INDXS) + PSOFT1(4,INDXS+1)
+ IJSI1(INDXS) = 0
+ ELSE
+ P1 = PSOFT2(1,INDXS) + PSOFT2(1,INDXS+1)
+ P2 = PSOFT2(2,INDXS) + PSOFT2(2,INDXS+1)
+ P3 = PSOFT2(3,INDXS) + PSOFT2(3,INDXS+1)
+ P4 = PSOFT2(4,INDXS) + PSOFT2(4,INDXS+1)
+ IJSI2(INDXS) = 0
+ ENDIF
+ IFL1 = 21
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(DT_RNDM(P2).LT.0.5D0) THEN
+ CALL PHO_SELCOL(ICA1,ICA2,ICA1,ICA2,ICC1,ICC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICB1,ICB2,ICB1,ICB2,ICC1,ICC2,2)
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,ICB1,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.gluon:(IFL,IPOS,INDXS)',
+ & IFL1,IPOS,SIGN(INDXS,INDXH)
+
+ IUSED = 2
+C valence quark remnant
+ ELSE
+ IF(INDXH.GT.0) THEN
+ E1 = PSOFT1(4,INDXS)
+ E2 = PSOFT1(4,INDXS+1)
+ ELSE
+ E1 = PSOFT2(4,INDXS)
+ E2 = PSOFT2(4,INDXS+1)
+ ENDIF
+ CALL PHO_VALFLA(JM1,IFL1,IFL2,E1,E2)
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(((ABS(IFL1).LE.6).AND.(IFL1.LT.0))
+ & .OR.((ABS(IFL1).GT.6).AND.(IFL1.GT.0))) THEN
+ I = ICA1
+ ICA1 = ICB1
+ ICB1 = I
+ ENDIF
+ IF(DT_RNDM(P2).LT.0.5D0) THEN
+ CALL PHO_SELCOL(ICA1,ICA2,ICA1,ICA2,ICC1,ICC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICB1,ICB2,ICB1,ICB2,ICC1,ICC2,2)
+ ENDIF
+C remnant of hadron
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS)
+ P2 = PSOFT1(2,INDXS)
+ P3 = PSOFT1(3,INDXS)
+ P4 = PSOFT1(4,INDXS)
+ IJSI1(INDXS) = IFL1
+ ELSE
+ P1 = PSOFT2(1,INDXS)
+ P2 = PSOFT2(2,INDXS)
+ P3 = PSOFT2(3,INDXS)
+ P4 = PSOFT2(4,INDXS)
+ IJSI2(INDXS) = IFL1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IFL1,IPOS,SIGN(INDXS,INDXH)
+
+C
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS+1)
+ P2 = PSOFT1(2,INDXS+1)
+ P3 = PSOFT1(3,INDXS+1)
+ P4 = PSOFT1(4,INDXS+1)
+ IJSI1(INDXS+1) = IFL2
+ ELSE
+ P1 = PSOFT2(1,INDXS+1)
+ P2 = PSOFT2(2,INDXS+1)
+ P3 = PSOFT2(3,INDXS+1)
+ P4 = PSOFT2(4,INDXS+1)
+ IJSI2(INDXS+1) = IFL2
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL2,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICB1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IFL2,IPOS,SIGN(INDXS+1,INDXH)
+
+ IUSED = 2
+ ENDIF
+C
+C gluon from sea quarks connected with valence quarks
+ ELSE IF(IVAL.EQ.0) THEN
+ IF(INDXH.GT.0) THEN
+ E1 = PSOFT1(4,INDXS)
+ E2 = PSOFT1(4,INDXS+1)
+ ELSE
+ E1 = PSOFT2(4,INDXS)
+ E2 = PSOFT2(4,INDXS+1)
+ ENDIF
+ CALL PHO_VALFLA(JM1,IFL1,IFL2,E1,E2)
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ IF(((ABS(IFL1).LE.6).AND.(IFL1.LT.0))
+ & .OR.((ABS(IFL1).GT.6).AND.(IFL1.GT.0))) THEN
+ I = ICA1
+ ICA1 = ICB1
+ ICB1 = I
+ ENDIF
+ IF(DT_RNDM(P3).LT.0.5D0) THEN
+ CALL PHO_SELCOL(ICA1,ICA2,ICA1,ICA2,ICC1,ICC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICB1,ICB2,ICB1,ICB2,ICC1,ICC2,2)
+ ENDIF
+C remnant of hadron
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS)
+ P2 = PSOFT1(2,INDXS)
+ P3 = PSOFT1(3,INDXS)
+ P4 = PSOFT1(4,INDXS)
+ IJSI1(INDXS) = IFL1
+ ELSE
+ P1 = PSOFT2(1,INDXS)
+ P2 = PSOFT2(2,INDXS)
+ P3 = PSOFT2(3,INDXS)
+ P4 = PSOFT2(4,INDXS)
+ IJSI2(INDXS) = IFL1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IFL1,IPOS,SIGN(INDXS,INDXH)
+
+C
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS+1)
+ P2 = PSOFT1(2,INDXS+1)
+ P3 = PSOFT1(3,INDXS+1)
+ P4 = PSOFT1(4,INDXS+1)
+ IJSI1(INDXS+1) = IFL2
+ ELSE
+ P1 = PSOFT2(1,INDXS+1)
+ P2 = PSOFT2(2,INDXS+1)
+ P3 = PSOFT2(3,INDXS+1)
+ P4 = PSOFT2(4,INDXS+1)
+ IJSI2(INDXS+1) = IFL2
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL2,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICB1,IVSW,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: val.spectator:(IFL,IPOS,INDXS)',
+ & IFL2,IPOS,SIGN(INDXS+1,INDXH)
+
+ IF(IPAMDL(18).EQ.0) THEN
+C sea quark pair
+ CALL PHO_SEAFLA(JM1,IFL1,IFL2,PARMDL(161))
+ IF(ICC1.GT.0) THEN
+ IFL1 = ABS(IFL1)
+ IFL2 = -IFL1
+ ELSE
+ IFL1 = -ABS(IFL1)
+ IFL2 = -IFL1
+ ENDIF
+ IF(DT_RNDM(P4).LT.0.5D0) THEN
+ ICB1 = ICC2
+ CALL PHO_SELCOL(ICC1,0,ICA1,ICA2,ICC1,ICC2,2)
+ ELSE
+ ICA1 = ICC1
+ CALL PHO_SELCOL(ICC2,0,ICB1,ICB2,ICC1,ICC2,2)
+ ENDIF
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS+2)
+ P2 = PSOFT1(2,INDXS+2)
+ P3 = PSOFT1(3,INDXS+2)
+ P4 = PSOFT1(4,INDXS+2)
+ IJSI1(INDXS+2) = IFL1
+ ELSE
+ P1 = PSOFT2(1,INDXS+2)
+ P2 = PSOFT2(2,INDXS+2)
+ P3 = PSOFT2(3,INDXS+2)
+ P4 = PSOFT2(4,INDXS+2)
+ IJSI2(INDXS+2) = IFL1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,0,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: sea spectator:(IFL,IPOS,INDXS)',
+ & IFL1,IPOS,SIGN(INDXS+2,INDXH)
+
+C
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS+3)
+ P2 = PSOFT1(2,INDXS+3)
+ P3 = PSOFT1(3,INDXS+3)
+ P4 = PSOFT1(4,INDXS+3)
+ IJSI1(INDXS+3) = IFL2
+ ELSE
+ P1 = PSOFT2(1,INDXS+3)
+ P2 = PSOFT2(2,INDXS+3)
+ P3 = PSOFT2(3,INDXS+3)
+ P4 = PSOFT2(4,INDXS+3)
+ IJSI2(INDXS+3) = IFL2
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL2,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICB1,0,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: sea spectator:(IFL,IPOS,INDXS)',
+ & IFL2,IPOS,SIGN(INDXS+3,INDXH)
+
+ IUSED = 4
+ ELSE
+ IUSED = 2
+ ENDIF
+C
+C gluon from independent sea quarks
+ ELSE IF(IVAL.EQ.-1) THEN
+ IF(IPAMDL(18).EQ.0) THEN
+ CALL PHO_SELCOL(0,0,ICA1,ICA2,ICB1,ICB2,1)
+ CALL PHO_SEAFLA(JM1,IFL1,IFL2,PARMDL(161))
+ IF(((ABS(IFL1).LE.6).AND.(IFL1.LT.0))
+ & .OR.((ABS(IFL1).GT.6).AND.(IFL1.GT.0))) THEN
+ I = ICA1
+ ICA1 = ICB1
+ ICB1 = I
+ ENDIF
+ IF(DT_RNDM(P1).LT.0.5D0) THEN
+ CALL PHO_SELCOL(ICA1,ICA2,ICA1,ICA2,ICC1,ICC2,2)
+ ELSE
+ CALL PHO_SELCOL(ICB1,ICB2,ICB1,ICB2,ICC1,ICC2,2)
+ ENDIF
+C remainder of hadron
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS)
+ P2 = PSOFT1(2,INDXS)
+ P3 = PSOFT1(3,INDXS)
+ P4 = PSOFT1(4,INDXS)
+ IJSI1(INDXS) = IFL1
+ ELSE
+ P1 = PSOFT2(1,INDXS)
+ P2 = PSOFT2(2,INDXS)
+ P3 = PSOFT2(3,INDXS)
+ P4 = PSOFT2(4,INDXS)
+ IJSI2(INDXS) = IFL1
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL1,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICA1,ICA2,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: sea spectator:(IFL,IPOS,INDXS)',
+ & IFL1,IPOS,SIGN(INDXS,INDXH)
+
+C remnant of sea
+ IF(INDXH.GT.0) THEN
+ P1 = PSOFT1(1,INDXS-1)
+ P2 = PSOFT1(2,INDXS-1)
+ P3 = PSOFT1(3,INDXS-1)
+ P4 = PSOFT1(4,INDXS-1)
+ IJSI1(INDXS-1) = IFL2
+ ELSE
+ P1 = PSOFT2(1,INDXS-1)
+ P2 = PSOFT2(2,INDXS-1)
+ P3 = PSOFT2(3,INDXS-1)
+ P4 = PSOFT2(4,INDXS-1)
+ IJSI2(INDXS-1) = IFL2
+ ENDIF
+C registration
+ CALL PHO_REGPAR(-1,IFL2,0,JM1,JM2,P1,P2,P3,P4,
+ & IHP,IGEN,ICB1,ICB2,IPOS,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARREM: sea spectator:(IFL,IPOS,INDXS)',
+ & IFL2,IPOS,SIGN(INDXS-1,INDXH)
+
+ IUSED = 2
+ ELSE
+ CALL PHO_SELCOL(0,0,ICC1,ICA2,ICC2,ICB2,1)
+ IF(IDEB(28).GE.20) WRITE(LO,'(1X,A,I5)')
+ & 'PHO_HARREM: no spectator added:(INDXS)',
+ & SIGN(INDXS,INDXH)
+ IUSED = 0
+ ENDIF
+C
+ ELSE
+ WRITE(LO,'(1X,A,2I5)')
+ & 'PHO_HARREM:ERROR: unsupported combination of IVAL,IJH',
+ & IVAL,IJH
+ CALL PHO_ABORT
+ ENDIF
+ IC1 = ICC1
+ IC2 = ICC2
+ ENDIF
+ END
+
+CDECK ID>, PHO_HARDIR
+ SUBROUTINE PHO_HARDIR(II,IVAL1,IVAL2,MSPAR1,MSPAR2,MHPAR1,MHPAR2,
+ & IREJ)
+C**********************************************************************
+C
+C parton orientated formulation of direct scattering processes
+C
+C input:
+C
+C output: II particle combination (1..4)
+C IVAL1,2 0 no valence quarks engaged
+C 1 valence quarks engaged
+C MSPAR1,2 number of realized soft partons
+C MHPAR1,2 number of realized hard partons
+C IREJ 1 failure
+C 0 success
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C light-cone x fractions and c.m. momenta of soft cut string ends
+ INTEGER MAXSOF
+ PARAMETER ( MAXSOF = 50 )
+ INTEGER IJSI2,IJSI1
+ DOUBLE PRECISION XS1,XS2,PSOFT1,PSOFT2
+ COMMON /POSOFT/ XS1(MAXSOF),XS2(MAXSOF),
+ & PSOFT1(4,MAXSOF),PSOFT2(4,MAXSOF),
+ & IJSI1(MAXSOF),IJSI2(MAXSOF)
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ DIMENSION P1(4),P2(4),PD1(-6:6)
+
+ PARAMETER ( TINY = 1.D-10 )
+
+ ITRY = 0
+ NTRY = 10
+ LSC1HD = 0
+ LSIDX(1) = 1
+
+C check phase space
+ IF(ECMP.LT.(2.D0*PTWANT+0.1D0)) THEN
+ IFAIL(18) = IFAIL(18)+1
+ IREJ = 50
+ RETURN
+ ENDIF
+
+ AS = (PARMDL(160+II)/ECMP)**2
+ AH = (2.D0*PTWANT/ECMP)**2
+
+ ALNS = LOG(AS)
+ ALNH = LOG(AH)
+
+ XMAX = MAX(TINY,1.D0-AS)
+ Z1MAX = LOG(XMAX)
+ Z1DIF = Z1MAX-ALNH
+C
+C main loop to select hard and soft parton kinematics
+C -----------------------------------------------------
+ 120 CONTINUE
+ IREJ = 0
+ ITRY = ITRY+1
+ LSC1HD = LSC1HD+1
+ IF(ITRY.GT.1) THEN
+ IFAIL(17) = IFAIL(17)+1
+ IF(ITRY.GE.NTRY) THEN
+ IREJ = 1
+ GOTO 450
+ ENDIF
+ ENDIF
+ LINE = 0
+ LSCAHD = 0
+ XSS1 = 0.D0
+ XSS2 = 0.D0
+ MSPAR1 = 0
+ MSPAR2 = 0
+
+C select hard V,X
+ CALL PHO_HARSCA(1,II)
+ XSS1 = XSS1+X1
+ XSS2 = XSS2+X2
+C debug output
+ IF(IDEB(25).GE.20) THEN
+ WRITE(LO,'(1X,A,2E12.4,2I5)')
+ & 'PHO_HARDIR: AS,XMAX,process ID,ITRY',
+ & AS,XMAX,MSPR,ITRY
+ WRITE(LO,'(1X,A,4E12.4)') 'HARD X1,2 SUM X1,2',
+ & X1,X2,XSS1,XSS2
+ ENDIF
+
+ IF(MSPR.LE.11) THEN
+ IF((XSS2.GT.XMAX).OR.((1.D0-XSS2).LT.AS)) GOTO 120
+ ELSE IF(MSPR.LE.13) THEN
+ IF((XSS1.GT.XMAX).OR.((1.D0-XSS1).LT.AS)) GOTO 120
+ ENDIF
+
+C fill /POHSLT/
+ LSCAHD = 1
+ LSIDX(1) = 1
+ XHD(1,1) = X1
+ XHD(1,2) = X2
+ X0HD(1,1) = X1
+ X0HD(1,2) = X2
+ VHD(1) = V
+ ETAHD(1,1) = ETAC
+ ETAHD(1,2) = ETAD
+ PTHD(1) = PT
+ Q2SCA(1,1) = QQPD
+ Q2SCA(1,2) = QQPD
+ NPROHD(1) = MSPR
+ NBRAHD(1,1)= IDPDG1
+ NBRAHD(1,2)= IDPDG2
+ DO 45 I=1,4
+ PPH(I,1) = PHI1(I)
+ PPH(I,2) = PHI2(I)
+ PPH(4+I,1) = PHO1(I)
+ PPH(4+I,2) = PHO2(I)
+ 45 CONTINUE
+C valence quarks
+ IVAL1 = IV1
+ IVAL2 = IV2
+ PDFVA(1,1) = 0.D0
+ PDFVA(1,2) = 0.D0
+C parton flavours
+ IF(MSPR.LE.11) THEN
+ NINHD(1,1) = IDPDG1
+ NINHD(1,2) = IB
+ PDFVA(1,2) = PDF2(IB)
+ KHDIR = 1
+ ELSE IF(MSPR.LE.13) THEN
+ NINHD(1,1) = IA
+ PDFVA(1,1) = PDF1(IA)
+ NINHD(1,2) = IDPDG2
+ KHDIR = 2
+ ELSE
+ NINHD(1,1) = IDPDG1
+ NINHD(1,2) = IDPDG2
+ KHDIR = 3
+ ENDIF
+ N0INHD(1,1) = NINHD(1,1)
+ N0INHD(1,2) = NINHD(1,2)
+ N0IVAL(1,1) = IVAL1
+ N0IVAL(1,2) = IVAL2
+ NOUTHD(1,1) = IC
+ NOUTHD(1,2) = ID
+
+C reweight according to photon virtuality
+ IF(MSPR.NE.14) THEN
+ IF(IPAMDL(115).GE.1) THEN
+ WGX = 1.D0
+ IF(((MSPR.EQ.10).OR.(MSPR.EQ.11)).AND.(IDPDG2.EQ.22)) THEN
+ QQPD = Q2SCA(1,2)
+ IF(IPAMDL(115).EQ.1) THEN
+ IF(QQPD.LT.(PVIRTP(2)+PARMDL(144))) THEN
+ WGX = 0.D0
+ ELSE
+ WGX = LOG(QQPD/(PVIRTP(2)+PARMDL(144)))
+ & /LOG(QQPD/PARMDL(144))
+ ENDIF
+ IF(NINHD(1,2).EQ.0) WGX = WGX*WGX
+ ELSE IF(IPAMDL(115).EQ.2) THEN
+ CALL PHO_PDF(2,X2,QQPD,PVIRTP(2),PD1)
+ WGX = PD1(IB)/PDFVA(1,2)
+ ENDIF
+ ELSE IF(((MSPR.EQ.12).OR.(MSPR.EQ.13))
+ & .AND.(IDPDG1.EQ.22)) THEN
+ QQPD = Q2SCA(1,1)
+ IF(IPAMDL(115).EQ.1) THEN
+ IF(QQPD.LT.(PVIRTP(1)+PARMDL(144))) THEN
+ WGX = 0.D0
+ ELSE
+ WGX = LOG(QQPD/(PVIRTP(1)+PARMDL(144)))
+ & /LOG(QQPD/PARMDL(144))
+ ENDIF
+ IF(NINHD(1,1).EQ.0) WGX = WGX*WGX
+ ELSE IF(IPAMDL(115).EQ.2) THEN
+ CALL PHO_PDF(1,X1,QQPD,PVIRTP(1),PD1)
+ WGX = PD1(IA)/PDFVA(1,1)
+ ENDIF
+ ENDIF
+
+ IF(IDEB(25).GE.25)
+ & WRITE(LO,'(1X,2A,/5X,I10,I3,1P6E10.3)') 'PHO_HARDIR: ',
+ & 're-weight with (EVE, MSPR, X1/2, Q2, PV1/2, W1/W2)',
+ & KEVENT,MSPR,X1,X2,QQPD,PVIRTP,WGX
+
+ IF(WGX.LT.DT_RNDM(WGX)) THEN
+ IREJ = 50
+ RETURN
+ ENDIF
+
+ IF(WGX.GT.1.01D0)
+ & WRITE(LO,'(1X,2A,/5X,I10,I3,1P6E10.3)') 'PHO_HARDIR: ',
+ & 're-weight >1 (EVE, MSPR, X1/2, Q2, PV1/2, W1/W2)',
+ & KEVENT,MSPR,X1,X2,QQPD,PVIRTP,WGX
+
+ ENDIF
+ ENDIF
+
+C generate ISR
+ IF((MSPR.NE.14).AND.(ISWMDL(8).GE.2)) THEN
+ IF(IPAMDL(109).EQ.1) THEN
+ Q2H = PARMDL(93)*PT**2
+ ELSE
+ Q2H = -PARMDL(93)*VHD(1)*XHD(1,1)*XHD(1,2)*ECMP*ECMP
+ ENDIF
+ XHMAX1 = 1.D0 - XSS1 - AS + XHD(1,1)
+ XHMAX2 = 1.D0 - XSS2 - AS + XHD(1,2)
+ DO 42 J=1,4
+ P1(J) = PPH(4+J,1)
+ P2(J) = PPH(4+J,2)
+ 42 CONTINUE
+ CALL PHO_HARISR(-1,P1,P2,NOUTHD(1,1),NOUTHD(1,2),N0INHD(1,1),
+ & N0INHD(1,2),N0IVAL(1,1),N0IVAL(1,2),Q2H,X0HD(1,1),X0HD(1,2),
+ & XHMAX1,XHMAX2,IFL1,IFL2,IVAL1,IVAL2,XISR1,XISR2,IREJ)
+ XSS1 = XSS1+XISR1-XHD(1,1)
+ XSS2 = XSS2+XISR2-XHD(1,2)
+ NINHD(1,1) = IFL1
+ NINHD(1,2) = IFL2
+ XHD(1,1) = XISR1
+ XHD(1,2) = XISR2
+ ELSE
+ IFL1 = NINHD(1,1)
+ IFL2 = NINHD(1,2)
+ ENDIF
+ NIVAL(1,1) = IVAL1
+ NIVAL(1,2) = IVAL2
+
+C add photon/hadron remnant
+
+C incoming gluon
+ IF(IFL2.EQ.0) THEN
+ XMAXX = 1.D0 - XSS2 - AS
+ XMAXH = MIN(XMAXX,PARMDL(44))
+ CALL PHO_HADSP2(IDBAM2,XSS2,XMAXH,XS2,IREJ)
+ IVAL2 = 1
+ MSPAR1 = 0
+ MSPAR2 = 2
+ MHPAR1 = 1
+ MHPAR2 = 1
+ ELSE IF(IFL1.EQ.0) THEN
+ XMAXX = 1.D0 - XSS1 - AS
+ XMAXH = MIN(XMAXX,PARMDL(44))
+ CALL PHO_HADSP2(IDBAM1,XSS1,XMAXH,XS1,IREJ)
+ IVAL1 = 1
+ MSPAR1 = 2
+ MSPAR2 = 0
+ MHPAR1 = 1
+ MHPAR2 = 1
+
+C incoming quark
+ ELSE IF(ABS(IFL2).LE.12) THEN
+ IF(IVAL2.EQ.1) THEN
+ XS2(1) = 1.D0 - XSS2
+ MSPAR1 = 0
+ MSPAR2 = 1
+ MHPAR1 = 1
+ MHPAR2 = 1
+ ELSE
+ XMAXX = 1.D0 - XSS2 - AS
+ XMAXH = MIN(XMAXX,PARMDL(44))
+ CALL PHO_HADSP3(IDBAM2,XSS2,XMAXH,XS2,IREJ)
+ MSPAR1 = 0
+ MSPAR2 = 3
+ MHPAR1 = 1
+ MHPAR2 = 1
+ ENDIF
+ ELSE IF(ABS(IFL1).LE.12) THEN
+ IF(IVAL1.EQ.1) THEN
+ XS1(1) = 1.D0 - XSS1
+ MSPAR1 = 1
+ MSPAR2 = 0
+ MHPAR1 = 1
+ MHPAR2 = 1
+ ELSE
+ XMAXX = 1.D0 - XSS1 - AS
+ XMAXH = MIN(XMAXX,PARMDL(44))
+ CALL PHO_HADSP3(IDBAM1,XSS1,XMAXH,XS1,IREJ)
+ MSPAR1 = 3
+ MSPAR2 = 0
+ MHPAR1 = 1
+ MHPAR2 = 1
+ ENDIF
+
+C double direct process
+ ELSE IF(MSPR.EQ.14) THEN
+ MSPAR1 = 0
+ MSPAR2 = 0
+ MHPAR1 = 1
+ MHPAR2 = 1
+
+C unknown process
+ ELSE
+ WRITE(LO,'(/1X,A,I3/)')
+ & 'PHO_HARDIR:ERROR: unsupported hard process (MSPR)',MSPR
+ CALL PHO_ABORT
+ ENDIF
+
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(25).GE.3) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARDIR: int. rejection (MSPR,ITRY,NTRY)',MSPR,ITRY,NTRY
+ GOTO 120
+ ENDIF
+
+C soft particle momenta
+ IF(MSPAR1.GT.0) THEN
+ DO 50 I=1,MSPAR1
+ PSOFT1(1,I) = 0.D0
+ PSOFT1(2,I) = 0.D0
+ PSOFT1(3,I) = XS1(I)*ECMP/2.D0
+ PSOFT1(4,I) = XS1(I)*ECMP/2.D0
+ 50 CONTINUE
+ ENDIF
+ IF(MSPAR2.GT.0) THEN
+ DO 55 I=1,MSPAR2
+ PSOFT2(1,I) = 0.D0
+ PSOFT2(2,I) = 0.D0
+ PSOFT2(3,I) = -XS2(I)*ECMP/2.D0
+ PSOFT2(4,I) = XS2(I)*ECMP/2.D0
+ 55 CONTINUE
+ ENDIF
+C process counting
+ MH_acc_1(MSPR,II) = MH_acc_1(MSPR,II)+1
+ KSOFT = MAX(MSPAR1,MSPAR2)
+ KHARD = MAX(MHPAR1,MHPAR2)
+C debug output
+ IF(IDEB(25).GE.10) THEN
+ WRITE(LO,'(/1X,A,2I3,3I5)')
+ & 'PHO_HARDIR: accepted IVAL1,IVAL2,MSPR,ITRY,NTRY',
+ & IVAL1,IVAL2,MSPR,ITRY,NTRY
+ IF(MSPAR1.GT.0) THEN
+ WRITE(LO,'(5X,A,I4)') 'soft x particle 1:',MSPAR1
+ DO 105 I=1,MSPAR1
+ WRITE(LO,'(10X,I3,E12.3)') I,XS1(I)
+ 105 CONTINUE
+ ENDIF
+ IF(MSPAR2.GT.0) THEN
+ WRITE(LO,'(5X,A,I4)') 'soft x particle 2:',MSPAR2
+ DO 106 I=1,MSPAR2
+ WRITE(LO,'(10X,I3,E12.3)') I,XS2(I)
+ 106 CONTINUE
+ ENDIF
+ WRITE(LO,'(5X,A,I4)') 'ini.hard X/flavor particle 1:',MHPAR1
+ WRITE(LO,'(10X,I3,E12.3,I8)') 1,XHD(1,1),NINHD(1,1)
+ WRITE(LO,'(5X,A,I4)') 'fin.hard momenta particle 1:',MHPAR1
+ WRITE(LO,'(10X,I3,4E12.3,I8)') 1,(PPH(K,1),K=5,8),NOUTHD(1,1)
+ WRITE(LO,'(5X,A,I4)') 'ini.hard X/flavour particle 2:',MHPAR2
+ WRITE(LO,'(10X,I3,E12.3,I8)') 1,XHD(1,2),NINHD(1,2)
+ WRITE(LO,'(5X,A,I4)') 'fin.hard momenta particle 2:',MHPAR2
+ WRITE(LO,'(10X,I3,4E12.3,I8)') 1,(PPH(K,2),K=5,8),NOUTHD(1,2)
+ ENDIF
+ RETURN
+
+ 450 CONTINUE
+ IFAIL(16) = IFAIL(16)+1
+ IF(IDEB(25).GE.2) THEN
+ WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_HARDIR: rejection (ITRY,NTRY,IREJ)',ITRY,NTRY,IREJ
+ WRITE(LO,'(5X,A,E12.4)') 'available energy:',ECMP
+ IF(IDEB(25).GE.5) THEN
+ CALL PHO_PREVNT(0)
+ ELSE
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_POMSCA
+ SUBROUTINE PHO_POMSCA(II,MSPOM,MHPOM,MSREG,IVAL1,IVAL2,
+ & MSPAR1,MSPAR2,MHPAR1,MHPAR2,IREJ)
+C**********************************************************************
+C
+C parton orientated formulation of soft and hard inelastic events
+C
+C
+C input: II particle combiantion (1..4)
+C MSPOM number of soft pomerons
+C MHPOM number of semihard pomerons
+C MSREG number of soft reggeons
+C
+C output: IVAL1,2 0 no valence quark engaged
+C otherwise: position of valence quark engaged
+C neg.number: gluon connected to valence quark
+C by color flow
+C MSPAR1,2 number of realized soft partons
+C MHPAR1,2 number of realized hard partons
+C IREJ 1 failure
+C 0 success
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (TINY = 1.D-30 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C light-cone x fractions and c.m. momenta of soft cut string ends
+ INTEGER MAXSOF
+ PARAMETER ( MAXSOF = 50 )
+ INTEGER IJSI2,IJSI1
+ DOUBLE PRECISION XS1,XS2,PSOFT1,PSOFT2
+ COMMON /POSOFT/ XS1(MAXSOF),XS2(MAXSOF),
+ & PSOFT1(4,MAXSOF),PSOFT2(4,MAXSOF),
+ & IJSI1(MAXSOF),IJSI2(MAXSOF)
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ DIMENSION P1(4),P2(4),PD1(-6:6)
+
+ IF(IDEB(24).GT.20) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_POMSCA: MSPOM,MHPOM,MSREG',MSPOM,MHPOM,MSREG
+
+ ITRY = 0
+ NTRY = 10
+ IREJ = 0
+ INMAX = 10
+ MHARD = MHPOM
+
+C phase space limitation (single hard valence-valence quark scattering)
+ IF(MHPOM.GT.0) THEN
+ Emin = 2.D0*PTWANT + 0.2D0
+ IF(ECMP.LT.Emin) THEN
+ IF(IDEB(24).GE.1) WRITE(LO,'(1X,A,1P,3E10.3)') 'PHO_POMSCA: ',
+ & 'kin. rejection (1) (Ecm,Ptcut,Emin)',ECMP,PTWANT,Emin
+ IREJ = 50
+ IFAIL(6) = IFAIL(6) + 1
+ RETURN
+ ENDIF
+ ENDIF
+
+ SAS = PARMDL(160+II)/ECMP
+ SAH = 2.D0*PTWANT/ECMP
+ AS = SAS**2
+ AH = SAH**2
+
+C save energy for leading particle effect
+ XMAXP1 = 1.D0
+ if(IHFLS(1).ne.0) XMAXP1 = 1.D0-PARMDL(165)*XPSUB
+ XMAXP2 = 1.D0
+ if(IHFLS(2).ne.0) XMAXP2 = 1.D0-PARMDL(165)*XTSUB
+
+C
+C main loop to select hard and soft parton kinematics
+C -----------------------------------------------------
+ IFAIL(31) = IFAIL(31)+MHARD
+ 20 CONTINUE
+ IREJ = 0
+ IHARD = 0
+ LSC1HD = 0
+ ITRY = ITRY+1
+ IF(ITRY.GT.1) IFAIL(5) = IFAIL(5)+1
+ IF(ITRY.GE.NTRY) THEN
+ IREJ = 1
+ GOTO 450
+ ENDIF
+ LINE = 0
+ LSCAHD = 0
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0).AND.(IPROCE.EQ.1)) THEN
+ XSS1 = MAX(0.D0,1.D0-XPSUB)
+ XSS2 = MAX(0.D0,1.D0-XTSUB)
+ ELSE
+ XSS1 = 0.D0
+ XSS2 = 0.D0
+ ENDIF
+ 22 continue
+
+C partons needed to construct soft/hard interactions
+ MSPAR1 = 2*MSPOM+MSREG+MHPOM
+ MSPAR2 = MSPAR1
+ MHPAR1 = MHPOM
+ MHPAR2 = MHPOM
+
+C number of strings
+ MSCHA = 2*MSPOM+MSREG
+ MHCHA = 2*MHPOM
+
+ KSOFT = MSCHA
+ KHARD = MHCHA
+
+C check actual phase space limit
+ XX = SAS*DBLE(MSCHA)+SAH*DBLE(MHCHA)/2.D0
+ IF(XX.GE.1.D0) THEN
+ IF(IDEB(24).GE.3) WRITE(LO,'(1X,2A,/1X,4I3,1P4E12.4)')
+ & 'PHO_POMSCA: internal kin. rejection ',
+ & '(MSpom,MHpom,MSchain,MHchain,Ecm,AS,AH,XX):',
+ & MSPOM,MHPOM,MSCHA,MHCHA,ECMP,AS,AH,XX
+ if(MSPOM+MSREG+MHPOM.gt.1) then
+ if(MSREG.gt.0) then
+ MSREG = MSREG-1
+ else if(MSPOM.gt.0) THEN
+ MSPOM = MSPOM-1
+ else if(MHPOM.gt.1) then
+ MHPOM = MHPOM-1
+ endif
+ goto 22
+ endif
+ IF(IDEB(24).GE.1) WRITE(LO,'(1X,A,1P2E10.3)')
+ & 'PHO_POMSCA: kin. rejection (2) (Ecm,Ptcut)',ECMP,PTWANT
+ IREJ = 50
+ IFAIL(6) = IFAIL(6) + 1
+ RETURN
+ ENDIF
+
+ XMAXX1 = MAX(TINY,1.D0-MIN(MSPAR1,1)*AS-MIN(MHPAR1,1)*AH)
+ XMAXX2 = MAX(TINY,1.D0-MIN(MSPAR2,1)*AS-MIN(MHPAR2,1)*AH)
+
+C very low energy phase space restriction
+ if(MHARD.gt.0) then
+ if((XMAXX1*XMAXX2.le.AH)) then
+ IF(IDEB(24).GE.1) WRITE(LO,'(1X,A,1P2E10.3)')
+ & 'PHO_POMSCA: kin. rejection (3) (Ecm,Ptcut)',ECMP,PTWANT
+ IREJ = 50
+ IFAIL(6) = IFAIL(6) + 1
+ RETURN
+ endif
+ endif
+
+ AS = MAX(AS,PSOMIN/PCMP)
+ ALNS = LOG(AS)
+ ALNH = LOG(AH)
+ Z1MAX = LOG(XMAXX1)
+ Z2MAX = LOG(XMAXX2)
+ Z1DIF = Z1MAX+Z2MAX-ALNH
+ Z2DIF = Z1DIF
+ PTMAX = 0.D0
+C
+C select hard parton momenta
+C ------------------- begin of inner loop -------------------
+ IF(IPOIX3.EQ.0) IPOWGC(4+II) = 0
+
+ IF(MHARD.GT.MSCAHD) THEN
+ WRITE(LO,'(1X,2A,2I3)') 'PHO_POMSCA: ',
+ & 'no space left in /POHSLT/ (MHARD,MSCAHD):',MHARD,MSCAHD
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ DO 11 NN=1,MHARD
+C
+C generate one resolved hard scattering
+C
+C high-pt option
+ IF((NN.EQ.1).AND.(II.EQ.1).AND.(HSWCUT(4+II).GT.PTWANT)) THEN
+ CALL PHO_HARINT(-1,ECMP,PVIRTP(1),PVIRTP(2),
+ & -1,Max_pro_2,1,4,MSPOM+MHPOM)
+ XSCUT = HSig(9)
+ AHS = AH
+ ALNHS = ALNH
+ Z1DIFS = Z1DIF
+ Z2DIFS = Z2DIF
+ AH = (2.D0*PTWANT/ECMP)**2
+ ALNH = LOG(AH)
+ Z1DIF = Z1MAX+Z2MAX-ALNH
+ Z2DIF = Z1DIF
+ IF((Z1DIF.LE.0.01D0).OR.(Z2DIF.LE.0.01D0)) THEN
+ IF(IDEB(24).GE.1) WRITE(LO,'(1X,2A,/1X,1P4E12.3)')
+ & 'PHO_POMSCA: kin.rejection, high-pt option ',
+ & '(Z1/2max,ALNH,Z1dif):',Z1MAX,Z2MAX,ALNH,Z1DIF
+ IREJ = 5
+ RETURN
+ ENDIF
+ CALL PHO_HARSCA(2,II)
+ CALL PHO_HARINT(1,ECMP,PVIRTP(1),PVIRTP(2),
+ & -1,Max_pro_2,1,4,MSPOM+MHPOM)
+ AH = AHS
+ ALNH = ALNHS
+ Z1DIF = Z1DIFS
+ Z2DIF = Z2DIFS
+ IPOWGC(4+II) = IPOWGC(4+II)+1
+ HSWGHT(4+II) = XSCUT/HSig(9)*DBLE(MHARD)
+C minimum bias option
+ ELSE
+ CALL PHO_HARSCA(2,II)
+ ENDIF
+
+C fill /POHSLT/
+ LSIDX(NN) = NN
+ LSCAHD = NN
+ XHD(NN,1) = X1
+ XHD(NN,2) = X2
+ X0HD(NN,1) = X1
+ X0HD(NN,2) = X2
+ VHD(NN) = V
+ ETAHD(NN,1) = ETAC
+ ETAHD(NN,2) = ETAD
+ PTHD(NN) = PT
+ NPROHD(NN) = MSPR
+ Q2SCA(NN,1) = QQPD
+ Q2SCA(NN,2) = QQPD
+ PDFVA(NN,1) = PDF1(IA)
+ PDFVA(NN,2) = PDF2(IB)
+ NINHD(NN,1) = IA
+ NINHD(NN,2) = IB
+ N0INHD(NN,1) = IA
+ N0INHD(NN,2) = IB
+ NIVAL(NN,1) = IV1
+ NIVAL(NN,2) = IV2
+ N0IVAL(NN,1) = IV1
+ N0IVAL(NN,2) = IV2
+ NOUTHD(NN,1) = IC
+ NOUTHD(NN,2) = ID
+ NBRAHD(NN,1) = IDPDG1
+ NBRAHD(NN,2) = IDPDG2
+ I3 = 8*(NN-1)
+ I4 = 8*(NN-1)+4
+ DO 50 I=1,4
+ PPH(I3+I,1) = PHI1(I)
+ PPH(I3+I,2) = PHI2(I)
+ PPH(I4+I,1) = PHO1(I)
+ PPH(I4+I,2) = PHO2(I)
+ 50 CONTINUE
+
+ 11 CONTINUE
+
+C sort according to pt-hat
+ DO 12 NN=1,MHARD
+ PTMX = PTHD(LSIDX(NN))
+ IPTM = NN
+ DO 13 I=NN+1,MHARD
+ IF(PTHD(LSIDX(I)).GT.PTMX) THEN
+ IPTM = I
+ PTMX = PTHD(LSIDX(I))
+ ENDIF
+ 13 CONTINUE
+ IF(IPTM.NE.NN) CALL PHO_SWAPI(LSIDX(NN),LSIDX(IPTM))
+ 12 CONTINUE
+ IPTM = LSIDX(1)
+
+C copy partons, generate ISR
+ DO 15 L=1,MHARD
+ NN = LSIDX(L)
+ XSSS1 = XSS1+XHD(NN,1)
+ XSSS2 = XSS2+XHD(NN,2)
+C debug output
+ IF(IDEB(24).GE.10) WRITE(LO,'(1X,A,3I4,1P,3E11.3)')
+ & 'PHO_POMSCA: NR,LSIDX,MSPR,X1,X2,PT',
+ & L,NN,NPROHD(NN),XHD(NN,1),XHD(NN,2),PTHD(NN)
+C check phase space
+ IF( (XSSS1.GT.XMAXX1)
+ & .OR.(XSSS2.GT.XMAXX2)
+ & .OR.((1.D0-XSSS1)*(1.D0-XSSS2).LT.AS) ) THEN
+ IF(IHARD.EQ.0) THEN
+ IF(ISWMDL(2).NE.1) GOTO 20
+ MHPOM = 0
+ MSPOM = 1
+ MSREG = 0
+ ENDIF
+ GOTO 199
+ ENDIF
+
+C reweight according to photon virtuality
+ IF(IPAMDL(115).GE.1) THEN
+ QQPD = Q2SCA(NN,1)
+ WGX = 1.D0
+ IF(IDPDG1.EQ.22) THEN
+ IF(IPAMDL(115).EQ.1) THEN
+ IF(QQPD.LT.PVIRTP(1)+PARMDL(144)) THEN
+ WG1 = 0.D0
+ ELSE
+ WG1 = LOG(QQPD/(PVIRTP(1)+PARMDL(144)))
+ & /LOG(QQPD/PARMDL(144))
+ ENDIF
+ IF(NINHD(NN,1).EQ.0) WG1 = WG1*WG1
+ ELSE IF(IPAMDL(115).EQ.2) THEN
+ CALL PHO_PDF(1,X0HD(NN,1),QQPD,PVIRTP(1),PD1)
+ WG1 = PD1(NINHD(NN,1))/PDFVA(NN,1)
+ ENDIF
+ WGX = WG1
+ ENDIF
+ QQPD = Q2SCA(NN,2)
+ IF(IDPDG2.EQ.22) THEN
+ IF(IPAMDL(115).EQ.1) THEN
+ IF(QQPD.LT.PVIRTP(2)+PARMDL(144)) THEN
+ WG1 = 0.D0
+ ELSE
+ WG1 = LOG(QQPD/(PVIRTP(2)+PARMDL(144)))
+ & /LOG(QQPD/PARMDL(144))
+ ENDIF
+ IF(NINHD(NN,2).EQ.0) WG1 = WG1*WG1
+ ELSE IF(IPAMDL(115).EQ.2) THEN
+ CALL PHO_PDF(2,X0HD(NN,2),QQPD,PVIRTP(2),PD1)
+ WG1 = PD1(NINHD(NN,2))/PDFVA(NN,2)
+ ENDIF
+ WGX = WGX*WG1
+ ENDIF
+
+ IF(IDEB(24).GE.25)
+ & WRITE(LO,'(1X,2A,/5X,I10,I3,1P6E10.3)') 'PHO_POMSCA: ',
+ & ' re-weight with (EVE, MSPR, X1/2, Q2, PV1/2, W1/W2)',
+ & KEVENT,MSPR,X0HD(NN,1),X0HD(NN,2),QQPD,PVIRTP,WGX
+
+ IF(WGX.LT.DT_RNDM(WGX)) THEN
+ IF(L.EQ.1) THEN
+ IREJ = 50
+ RETURN
+ ELSE
+ GOTO 199
+ ENDIF
+ ENDIF
+
+ IF(WGX.GT.1.D0) WRITE(LO,'(1X,2A,/5X,I10,I3,1P6E10.3)')
+ & 'PHO_POMSCA: ',
+ & 'weight >1 (EVE, MSPR, X1/2, Q2, PV1/2, W1/W2)',
+ & KEVENT,MSPR,X0HD(NN,1),X0HD(NN,2),QQPD,PVIRTP,WGX
+
+ ENDIF
+
+C generate ISR
+ IF((ISWMDL(8).GE.2)
+ & .AND.((IPAMDL(101).NE.1).OR.(L.EQ.1))) THEN
+ IF(IPAMDL(109).EQ.1) THEN
+ Q2H = PARMDL(93)*PTHD(NN)**2
+ ELSE
+ Q2H = -PARMDL(93)*VHD(NN)
+ & *XHD(NN,1)*XHD(NN,2)*ECMP*ECMP
+ ENDIF
+ XHMAX1 = 1.D0 - XSSS1 - MSCHA*AS + XHD(NN,1)
+ XHMAX2 = 1.D0 - XSSS2 - MSCHA*AS + XHD(NN,2)
+ I3 = 8*NN-4
+ DO 42 J=1,4
+ P1(J) = PPH(I3+J,1)
+ P2(J) = PPH(I3+J,2)
+ 42 CONTINUE
+ IF(IDEB(24).GE.10)
+ & WRITE(LO,'(1X,A,/5X,2I3,1P,3E12.4)')
+ & 'PHO_POMSCA: generate ISR for (L,NN,X1,X2,Q2H)',
+ & L,NN,XHD(NN,1),XHD(NN,2),Q2H
+ J = NN
+ IF(L.EQ.1) J = -NN
+ CALL PHO_HARISR(J,P1,P2,NOUTHD(NN,1),NOUTHD(NN,2),
+ & N0INHD(NN,1),N0INHD(NN,2),N0IVAL(NN,1),N0IVAL(NN,2),Q2H,
+ & X0HD(NN,1),X0HD(NN,2),XHMAX1,XHMAX2,IFL1,IFL2,
+ & NIVAL(NN,1),NIVAL(NN,2),XISR1,XISR2,IREJ)
+ XSSS1 = XSSS1+XISR1-XHD(NN,1)
+ XSSS2 = XSSS2+XISR2-XHD(NN,2)
+ NINHD(NN,1) = IFL1
+ NINHD(NN,2) = IFL2
+ XHD(NN,1) = XISR1
+ XHD(NN,2) = XISR2
+ ENDIF
+
+C check phase space
+ IF( (XSSS1.GT.XMAXX1)
+ & .OR.(XSSS2.GT.XMAXX2)
+ & .OR.((1.D0-XSSS1)*(1.D0-XSSS2).LT.AS) ) THEN
+ IF(IHARD.EQ.0) THEN
+ IF(ISWMDL(2).NE.1) GOTO 20
+ MHPOM = 0
+ MSPOM = 1
+ MSREG = 0
+ ENDIF
+ GOTO 199
+ ENDIF
+
+C leave energy for leading particle effect
+ IF((IHARD.GT.0).AND.
+ & ((XSSS1.GT.XMAXP1).OR.(XSSS2.GT.XMAXP2))) then
+ GOTO 199
+ endif
+
+C hard scattering accepted
+ IHARD = IHARD+1
+ XSS1 = XSSS1
+ XSS2 = XSSS2
+ IFAIL(31) = IFAIL(31)-1
+
+ 15 CONTINUE
+
+C ------------------- end of inner (hard) loop -------------------
+ 199 CONTINUE
+
+ MHPOM = IHARD
+ MHPAR1 = IHARD
+ MHPAR2 = IHARD
+
+C count valences involved in hard scattering
+ IVAL1 = 0
+ IVAL2 = 0
+ DO 17 L=1,IHARD
+ NN = LSIDX(L)
+ IF((NIVAL(NN,1).NE.0).AND.(IVAL1.EQ.0)) IVAL1 = NN
+ IF((NIVAL(NN,2).NE.0).AND.(IVAL2.EQ.0)) IVAL2 = NN
+ 17 CONTINUE
+
+ IQUA1 = 0
+ IQUA2 = 0
+ IVGLU1 = 0
+ IVGLU2 = 0
+ DO 18 L=1,IHARD
+ NN = LSIDX(L)
+
+C photon, pomeron valences
+ IF((IVAL1.EQ.0).AND.(NINHD(NN,1).NE.0)) THEN
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)) THEN
+ NIVAL(NN,1) = 1
+ IVAL1 = NN
+ ENDIF
+ ENDIF
+ IF((IVAL2.EQ.0).AND.(NINHD(NN,2).NE.0)) THEN
+ IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ NIVAL(NN,2) = 1
+ IVAL2 = NN
+ ENDIF
+ ENDIF
+
+C total number of quarks
+ IF(NINHD(NN,1).NE.0) THEN
+ IQUA1 = IQUA1+1
+ ELSE IF(IVGLU1.EQ.0) THEN
+ IVGLU1 = NN
+ ENDIF
+ IF(NINHD(NN,2).NE.0) THEN
+ IQUA2 = IQUA2+1
+ ELSE IF(IVGLU2.EQ.0) THEN
+ IVGLU2 = NN
+ ENDIF
+ 18 CONTINUE
+
+C gluons emitted by valence quarks
+ VALPRO = 1.D0
+ IF(II.EQ.1) VALPRO = VALPRG(1)
+ IVQ1 = 1
+ IVG1 = 0
+ IVAL1 = MAX(IVAL1,0)
+ IF(IVAL1.EQ.0) THEN
+ IVQ1 = 0
+ IF((IVGLU1.NE.0).AND.(DT_RNDM(XSS1).LT.VALPRO)) THEN
+ IVAL1 = -IVGLU1
+ IVG1 = 1
+ ENDIF
+ ENDIF
+ VALPRO = 1.D0
+ IF(II.EQ.1) VALPRO = VALPRG(2)
+ IVQ2 = 1
+ IVG2 = 0
+ IVAL2 = MAX(IVAL2,0)
+ IF(IVAL2.EQ.0) THEN
+ IVQ2 = 0
+ IF((IVGLU2.NE.0).AND.(DT_RNDM(XSS2).LT.VALPRO)) THEN
+ IVAL2 = -IVGLU2
+ IVG2 = 1
+ ENDIF
+ ENDIF
+ MSPOM = MAX(0,MSPOM-IQUA1-IQUA2)
+C debug output
+ IF(IDEB(24).GE.5) WRITE(LO,'(1X,A,6I4)')
+ & 'PHO_POMSCA: IVAL1/2,IQUA1/2,IVGLU1/2',
+ & IVAL1,IVAL2,IQUA1,IQUA2,IVGLU1,IVGLU2
+
+C select soft X values
+ 25 CONTINUE
+C number of soft/remnant quarks
+ IF(MSPOM.EQ.0) THEN
+ IF(IPAMDL(18).EQ.0) THEN
+ MSPAR1 = 2+2*MHPOM+MSREG-IQUA1-2*IVQ1-2*IVG1
+ MSPAR2 = 2+2*MHPOM+MSREG-IQUA2-2*IVQ2-2*IVG2
+ ELSE
+ MSPAR1 = 2+MSREG+IQUA1-2*IVQ1
+ MSPAR2 = 2+MSREG+IQUA2-2*IVQ2
+ ENDIF
+ ELSE
+ IF(IPAMDL(18).EQ.0) THEN
+ MSPAR1 = 2*MSPOM+MSREG+2*MHPOM-IQUA1
+ MSPAR2 = 2*MSPOM+MSREG+2*MHPOM-IQUA2
+ ELSE
+ MSPAR1 = 2*MSPOM+MSREG+IQUA1+2*IVG1
+ MSPAR2 = 2*MSPOM+MSREG+IQUA2+2*IVG2
+ ENDIF
+ ENDIF
+C debug output
+ IF(IDEB(24).GE.15) WRITE(LO,'(1X,A,9I3)')
+ & 'PHO_POMSCA: MSP,MSR,MHP,IVQ1/2,IVG1/2,MSPAR1/2',
+ & MSPOM,MSREG,MHPOM,IVQ1,IVQ2,IVG1,IVG2,MSPAR1,MSPAR2
+
+ XMAX1 = 1.D0 - MAX(MSPAR1-1,0)*AS - XSS1
+ XMAX2 = 1.D0 - MAX(MSPAR2-1,0)*AS - XSS2
+ I1 = IVQ1
+ I2 = IVQ2
+ IF(IVAL1.LE.0) I1 = 0
+ IF(IVAL2.LE.0) I2 = 0
+ IF((IVQ1+IVG1)*(IVQ2+IVG2).NE.0) THEN
+ MSDIFF = 2*MSPOM
+ ELSE
+ MSDIFF = 2*MAX(0,MSPOM-1)
+ ENDIF
+ MSG1 = MSPAR1
+ MSG2 = MSPAR2
+ MSM1 = MSPAR1-MSDIFF
+ MSM2 = MSPAR2-MSDIFF
+ XMAXH1 = MIN(XMAX1,PARMDL(44))
+ XMAXH2 = MIN(XMAX2,PARMDL(44))
+ CALL PHO_SOFTXX(NPOSP(1),NPOSP(2),MSG1,MSG2,I1,I2,MSM1,MSM2,
+ & XSS1,XSS2,XMAXH1,XMAXH2,XS1,XS2,IREJ)
+
+C correct for proper simulation of high pt tail
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(48).GE.2) WRITE(LO,'(1X,A,4I4)')
+ & 'PHO_STDPAR: rejection (PHO_SOFTXX): MSPOM,MHPOM,I1,I2',
+ & MSPOM,MHPOM,I1,I2
+ IF(MSPOM*MHPOM.GT.0) THEN
+ MSPOM = MSPOM-1
+ GOTO 25
+ ELSE IF(MSPOM.GT.1) THEN
+ MSPOM = MSPOM-1
+ GOTO 25
+ ELSE IF(MHPOM.GT.1) THEN
+ IHARD = IHARD-1
+ IF((IPAMDL(13).GT.0).AND.(IPOIX3.EQ.0)
+ & .AND.(IPROCE.EQ.1)) THEN
+ XSS1 = MAX(0.D0,1.D0-XPSUB)
+ XSS2 = MAX(0.D0,1.D0-XTSUB)
+ ELSE
+ XSS1 = 0.D0
+ XSS2 = 0.D0
+ ENDIF
+ DO 103 K=1,IHARD
+ I = LSIDX(K)
+ XSS1 = XSS1+ XHD(I,1)
+ XSS2 = XSS2+ XHD(I,2)
+ 103 CONTINUE
+ GOTO 199
+ ENDIF
+ IREJ = 4
+ GOTO 450
+ ENDIF
+C accepted
+ MSPOM = MSPOM-(MSPAR1-MSG1)/2
+ MSPAR1 = MSG1
+ MSPAR2 = MSG2
+C ------------ kinematics sampled ---------------
+C debug output
+ IF(IDEB(24).GE.10) THEN
+ WRITE(LO,'(1X,A,I3)')
+ & 'PHO_POMSCA: soft x values, ITRY',ITRY
+ DO 104 I=2,MAX(MSPAR1,MSPAR2)
+ WRITE(LO,'(10X,I3,2E12.3)') I,XS1(I),XS2(I)
+ 104 CONTINUE
+ ENDIF
+ IF((1.D0-XSS1)*(1.D0-XSS2).LT.AS) GOTO 20
+
+C end of loop
+ XS1(1) = 1.D0 - XSS1
+ XS2(1) = 1.D0 - XSS2
+
+C process counting
+ DO 30 N=1,LSCAHD
+ MH_acc_1(NPROHD(N),II) = MH_acc_1(NPROHD(N),II)+1
+ 30 CONTINUE
+
+C soft particle momenta
+
+ IF(MAX(MSPAR1,MSPAR2).GT.MAXSOF) THEN
+ WRITE(LO,'(1X,2A,3I4)') 'PHO_POMSCA: no space left in ',
+ & '/POSOFT/ (MSPAR1/2,MAXSOF):',MSPAR1,MSPAR2,MAXSOF
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ DO 55 I=1,MSPAR1
+ PSOFT1(1,I) = 0.D0
+ PSOFT1(2,I) = 0.D0
+ PSOFT1(3,I) = XS1(I)*ECMP/2.D0
+ PSOFT1(4,I) = XS1(I)*ECMP/2.D0
+ 55 CONTINUE
+ DO 60 I=1,MSPAR2
+ PSOFT2(1,I) = 0.D0
+ PSOFT2(2,I) = 0.D0
+ PSOFT2(3,I) = -XS2(I)*ECMP/2.D0
+ PSOFT2(4,I) = XS2(I)*ECMP/2.D0
+ 60 CONTINUE
+
+ KSOFT = MAX(MSPAR1,MSPAR2)
+ KHARD = MAX(MHPAR1,MHPAR2)
+ KSPOM = MSPOM
+ KSREG = MSREG
+ KHPOM = MHPOM
+
+C debug output
+ IF(IDEB(24).GE.10) THEN
+ WRITE(LO,'(/1X,A,2I3,2I5)')
+ & 'PHO_POMSCA: accepted IVAL1,IVAL2,ITRY,NTRY',
+ & IVAL1,IVAL2,ITRY,NTRY
+ IF(MSPAR1+MSPAR2.GT.0) THEN
+ WRITE(LO,'(5X,A)') 'soft x particle1 particle2:'
+ XTMP1 = 0.D0
+ XTMP2 = 0.D0
+ DO 105 I=1,MAX(MSPAR1,MSPAR2)
+ IF(I.LE.MIN(MSPAR1,MSPAR2)) THEN
+ WRITE(LO,'(10X,I3,2E13.4)') I,XS1(I),XS2(I)
+ XTMP1 = XTMP1+XS1(I)
+ XTMP2 = XTMP2+XS2(I)
+ ELSE IF(I.LE.MSPAR1) THEN
+ WRITE(LO,'(10X,I3,2E13.4)') I,XS1(I),0.D0
+ XTMP1 = XTMP1+XS1(I)
+ ELSE IF(I.LE.MSPAR2) THEN
+ WRITE(LO,'(10X,I3,2E13.4)') I,0.D0,XS2(I)
+ XTMP2 = XTMP2+XS2(I)
+ ENDIF
+ 105 CONTINUE
+ WRITE(LO,'(5X,A,2E13.4)') 'sum X1/2 (soft):',XTMP1,XTMP2
+ ENDIF
+ IF(MHPAR1.GT.0) THEN
+ WRITE(LO,'(5X,A)')
+ & 'NR IDX MSPR hard X / hard X ISR / flavor particle 1,2:'
+ DO 107 K=1,MHPAR1
+ I = LSIDX(K)
+ WRITE(LO,'(5X,3I3,4E12.3,2I3)')
+ & K,I,NPROHD(I),X0HD(I,1),X0HD(I,2),XHD(I,1),XHD(I,2),
+ & NINHD(I,1),NINHD(I,2)
+ XTMP1 = XTMP1+XHD(I,1)
+ XTMP2 = XTMP2+XHD(I,2)
+ 107 CONTINUE
+ WRITE(LO,'(1X,A,2E13.4)') 'sum X1/2 (soft+hard):',XTMP1,XTMP2
+ WRITE(LO,'(5X,A)') 'hard momenta particle1:'
+ DO 108 K=1,MHPAR1
+ I = LSIDX(K)
+ I3 = 8*I-4
+ WRITE(LO,'(5X,2I3,1P,4E12.3,I5)') K,I,(PPH(I3+L,1),L=1,4),
+ & NOUTHD(I,1)
+ 108 CONTINUE
+ WRITE(LO,'(5X,A)') 'hard momenta particle2:'
+ DO 110 K=1,MHPAR2
+ I = LSIDX(K)
+ I3 = 8*I-4
+ WRITE(LO,'(5X,2I3,1P,4E12.3,I5)') K,I,(PPH(I3+L,2),L=1,4),
+ & NOUTHD(I,2)
+ 110 CONTINUE
+ ENDIF
+ ENDIF
+ RETURN
+
+C event rejected, print debug information
+ 450 CONTINUE
+ IFAIL(4) = IFAIL(4)+1
+ IF(IDEB(24).GE.2) THEN
+ WRITE(LO,'(1X,2A,/,10X,7I5)') 'PHO_POMSCA: ',
+ & 'rejection (MSPOM,MHPOM,IHARD,MHARD,ITRY,NTRY,IREJ)',
+ & MSPOM,MHPOM,IHARD,MHARD,ITRY,NTRY,IREJ
+ WRITE(LO,'(5X,A,I4,1P,2E12.4)') 'IP,Ecm,PTcut:',II,ECMP,PTWANT
+ IF(IDEB(24).GE.5) THEN
+ CALL PHO_PREVNT(0)
+ ELSE
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_HARX12
+ SUBROUTINE PHO_HARX12
+C**********************************************************************
+C
+C selection of x1 and x2 according to 1/x1*1/x2
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY= 1.D-30, TINY6=1.D-06)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+
+10 CONTINUE
+ Z1 = Z1MAX-DT_RNDM(X1)*Z1DIF
+ Z2 = Z2MAX-DT_RNDM(X2)*Z2DIF
+ IF ( (Z1+Z2).LT.ALNH ) GOTO 10
+ X1 = EXP(Z1)
+ X2 = EXP(Z2)
+ AXX = AH/(X1*X2)
+ W = SQRT(MAX(TINY,1.D0-AXX))
+ W1 = AXX/(1.D0+W)
+
+ END
+
+CDECK ID>, PHO_HARDX1
+ SUBROUTINE PHO_HARDX1
+C**********************************************************************
+C
+C selection of x1 according to 1/x1
+C ( x2 = 1 )
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY= 1.D-30, TINY6=1.D-06)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+
+ Z1 = Z1MAX-DT_RNDM(X1)*Z1DIF
+ X2 = 1.D0
+ X1 = EXP(Z1)
+ AXX = AH/X1
+ W = SQRT(MAX(TINY,1.D0-AXX))
+ W1 = AXX/(1.D0+W)
+
+ END
+
+CDECK ID>, PHO_HARKIN
+ SUBROUTINE PHO_HARKIN(IREJ)
+C***********************************************************************
+C
+C selection of kinematic variables
+C (resolved and direct processes)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY= 1.D-30, TINYP=1.D-14 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C internal cross check information on hard scattering limits
+ DOUBLE PRECISION ETAMI,ETAMA,XXMI,XXMA
+ COMMON /POHLIM/ ETAMI(2,15),ETAMA(2,15),XXMI(2,15),XXMA(2,15)
+
+ PARAMETER ( Max_pro_2 = 16 )
+ DIMENSION RM(-1:Max_pro_2)
+ DATA RM / 3.31D0, 0.0D0,
+ & 7.60D0, 0.65D0, 4.00D0, 0.65D0, 0.89D0,
+ & 0.45D0, 0.89D0, 0.89D0, 0.0D0, 4.776D0,
+ & 0.615D0,4.776D0,0.615D0,1.0D0, 0.0D0,
+ & 1.0D0 /
+
+ IREJ = 0
+ M = MSPR
+
+C------------- resolved processes -----------
+ IF ( M.EQ.1 ) THEN
+10 CALL PHO_HARX12
+ V =-0.5D0*W1/(W1+DT_RNDM(X1)*W)
+ U =-1.D0-V
+ R = (1.D0+W)*2.25D0*(V*V*(3.D0-U*V-V/(U*U))-U)
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(1)*DT_RNDM(X2) ) GOTO 10
+ IF ( DT_RNDM(V).LE.0.5D0 ) V = U
+ ELSEIF ( M.EQ.2 .OR. M.EQ.4 ) THEN
+20 CALL PHO_HARX12
+ WL = LOG(W1)
+ V =-EXP(-0.6931472D0+DT_RNDM(X1)*WL)
+ U =-1.D0-V
+ R = (U*U+V*V)*((16.D0/27.D0)/U-(4.D0/3.D0)*V)*(WL/W)*AXX
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(M)*DT_RNDM(X2) ) GOTO 20
+ IF ( DT_RNDM(V).LE.0.5D0 ) V = U
+ ELSEIF ( M.EQ.3 ) THEN
+30 CALL PHO_HARX12
+ V =-0.5D0*W1/(W1+DT_RNDM(X1)*W)
+ U =-1.D0-V
+ R = (1.D0+W)*(1.D0+U*U)*(1.D0-(4.D0/9.D0)*V*V/U)
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(3)*DT_RNDM(X2) ) GOTO 30
+ ELSEIF ( M.EQ.5 ) THEN
+50 CALL PHO_HARX12
+ V =-0.5D0*AXX/(W1+2.D0*DT_RNDM(X1)*W)
+ U =-1.D0-V
+ R = (4.D0/9.D0)*(1.D0+U*U+V*V*(U*U+V*V))-(8.D0/27.D0)*U*U*V
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(5)*DT_RNDM(X2) ) GOTO 50
+ ELSEIF ( M.EQ.6 ) THEN
+60 CALL PHO_HARX12
+ V =-0.5D0*(1.D0+W)+DT_RNDM(X1)*W
+ U =-1.D0-V
+ R = (4.D0/9.D0)*(U*U+V*V)*AXX
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(6)*DT_RNDM(V) ) GOTO 60
+ ELSEIF ( M.EQ.7 ) THEN
+70 CALL PHO_HARX12
+ V =-0.5D0*W1/(W1+DT_RNDM(X1)*W)
+ U =-1.D0-V
+ R = (1.D0+W)*((2.D0/9.D0)*(1.D0+U*U+(1.D0+V*V)*V*V/(U*U))
+ & -(4.D0/27.D0)*V/U)
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(7)*DT_RNDM(X2) ) GOTO 70
+ IF ( DT_RNDM(V).LE.0.5D0 ) V = U
+ ELSEIF ( M.EQ.8 ) THEN
+80 CALL PHO_HARX12
+ V =-0.5D0*AXX/(W1+2.D0*DT_RNDM(X1)*W)
+ U =-1.D0-V
+ R = (4.D0/9.D0)*(1.D0+U*U)
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(8)*DT_RNDM(X2) ) GOTO 80
+ ELSEIF ( M.EQ.-1 ) THEN
+90 CALL PHO_HARX12
+ WL = LOG(W1)
+ V =-EXP(-0.6931472D0+DT_RNDM(X1)*WL)
+ U =-1.D0-V
+ R = (1.D0+V*V)*(V/(U*U)-(4.D0/9.D0))*(WL/W)*AXX
+ IF(R*W.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R*W.LT.RM(-1)*DT_RNDM(X2) ) GOTO 90
+C------------- direct / single-resolved processes -----------
+ ELSEIF ( M.EQ.10 ) THEN
+100 CALL PHO_HARDX1
+ WL = LOG(AXX/(1.D0+W)**2)
+ U =-(1.D0+W)/2.D0*EXP(DT_RNDM(X1)*WL)
+ R = -(8.D0/3.D0)*(U*U+1.D0)*WL*AXX
+ IF(R.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R.LT.RM(10)*DT_RNDM(U) ) GOTO 100
+ V =-1.D0-U
+ X2 = X1
+ X1 = 1.D0
+ ELSEIF ( M.EQ.11) THEN
+110 CALL PHO_HARDX1
+ WL = LOG(W1)
+ U =-EXP(-0.6931472D0+DT_RNDM(X1)*WL)
+ V =-1.D0-U
+ R = (U*U+V*V)/V*WL*AXX
+ IF(R.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R.LT.RM(11)*DT_RNDM(X2) ) GOTO 110
+ IF ( DT_RNDM(V).LE.0.5D0 ) V = U
+ X2 = X1
+ X1 = 1.D0
+ ELSEIF ( M.EQ.12 ) THEN
+120 CALL PHO_HARDX1
+ WL = LOG(AXX/(1.D0+W)**2)
+ V =-(1.D0+W)/2.D0*EXP(DT_RNDM(X1)*WL)
+ R = -(8.D0/3.D0)*(V*V+1.D0)*WL*AXX
+ IF(R.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R.LT.RM(12)*DT_RNDM(V) ) GOTO 120
+ ELSEIF ( M.EQ.13) THEN
+130 CALL PHO_HARDX1
+ WL = LOG(W1)
+ V =-EXP(-0.6931472D0+DT_RNDM(X1)*WL)
+ U =-1.D0-V
+ R = (U*U+V*V)/U*WL*AXX
+ IF(R.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R.LT.RM(13)*DT_RNDM(X2) ) GOTO 130
+ IF ( DT_RNDM(V).LE.0.5D0 ) V = U
+C------------- (double) direct process -----------
+ ELSEIF ((M.EQ.14).OR.(M.EQ.16)) THEN
+ X1 = 1.D0
+ X2 = 1.D0
+ AXX= AH
+ W = SQRT(MAX(TINY,1.D0-AXX))
+ W1 = AXX/(1.D0+W)
+ WL = LOG(W1)
+ 140 V =-EXP(-0.6931472D0+DT_RNDM(X1)*WL)
+ U =-1.D0-V
+ R = -(U*U+V*V)/U
+ IF(R.GT.RM(M)) WRITE(LO,'(1X,A,I3)')
+ & 'PHO_HARKIN:weight error',M
+ IF ( R.LT.RM(14)*DT_RNDM(X2) ) GOTO 140
+ IF ( DT_RNDM(V).LE.0.5D0 ) V = U
+C---------------------------------------------
+ ELSE
+ WRITE(LO,'(/1X,A,I3)')
+ & 'PHO_HARKIN:ERROR:unsupported process (MSPR)',MSPR
+ CALL PHO_ABORT
+ ENDIF
+
+ V = MAX(MIN(V,-TINYP ),-1.D0+TINYP)
+ U = -1.D0-V
+ U = MAX(MIN(U,-TINYP ),-1.D0+TINYP)
+ PT = SQRT(U*V*X1*X2)*ECMP
+ ETAC = 0.5D0*LOG((U*X1)/(V*X2))
+ ETAD = 0.5D0*LOG((V*X1)/(U*X2))
+
+***************************************************************
+ MM = M
+ IF(M.EQ.-1) MM = 3
+ ETAMI(1,MM) = MIN(ETAMI(1,MM),ETAC)
+ ETAMA(1,MM) = MAX(ETAMA(1,MM),ETAC)
+ ETAMI(2,MM) = MIN(ETAMI(2,MM),ETAD)
+ ETAMA(2,MM) = MAX(ETAMA(2,MM),ETAD)
+ XXMI(1,MM) = MIN(XXMI(1,MM),X1)
+ XXMA(1,MM) = MAX(XXMA(1,MM),X1)
+ XXMI(2,MM) = MIN(XXMI(2,MM),X2)
+ XXMA(2,MM) = MAX(XXMA(2,MM),X2)
+***************************************************************
+
+ IF(IDEB(81).GE.25) WRITE(LO,'(1X,A,/5X,6E12.3)')
+ & 'PHO_HARKIN: V,PT,ETAC,ETAD,X1,X2',V,PT,ETAC,ETAD,X1,X2
+
+ END
+
+CDECK ID>, PHO_HARWGH
+ SUBROUTINE PHO_HARWGH(PDS,PDA,PDB,FDISTR)
+C***********************************************************************
+C
+C calculate product of PDFs and coupling constants
+C according to selected MSPR (process type)
+C
+C input: /POCKIN/
+C
+C output: PDS resulting from PDFs alone
+C FDISTR complete weight function
+C PDA,PDB fields containing the PDFs
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY= 1.D-30, TINY6=1.D-06)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DOUBLE PRECISION PHO_ALPHAS,pho_alphae
+ DIMENSION PDA(-6:6),PDB(-6:6)
+
+ FDISTR = 0.D0
+C set hard scale QQ for alpha and partondistr.
+ IF ( NQQAL.EQ.1 ) THEN
+ QQAL = AQQAL*PT*PT
+ ELSEIF ( NQQAL.EQ.2 ) THEN
+ QQAL = AQQAL*X1*X2*ECMP*ECMP*U*V/(1.D0+V*V+U*U)
+ ELSEIF ( NQQAL.EQ.3 ) THEN
+ QQAL = AQQAL*X1*X2*ECMP*ECMP
+ ELSEIF ( NQQAL.EQ.4 ) THEN
+ QQAL = AQQAL*X1*X2*ECMP*ECMP*(U*V)**(1.D0/3.D0)
+ ENDIF
+ IF ( NQQPD.EQ.1 ) THEN
+ QQPD = AQQPD*PT*PT
+ ELSEIF ( NQQPD.EQ.2 ) THEN
+ QQPD = AQQPD*X1*X2*ECMP*ECMP*U*V/(1.D0+V*V+U*U)
+ ELSEIF ( NQQPD.EQ.3 ) THEN
+ QQPD = AQQPD*X1*X2*ECMP*ECMP
+ ELSEIF ( NQQPD.EQ.4 ) THEN
+ QQPD = AQQPD*X1*X2*ECMP*ECMP*(U*V)**(1.D0/3.D0)
+ ENDIF
+C coupling constants, PDFs
+ IF(MSPR.LT.9) THEN
+ ALPHA1 = PHO_ALPHAS(QQAL,3)
+ ALPHA2 = ALPHA1
+ CALL PHO_PDF(1,X1,QQPD,0.D0,PDA)
+ CALL PHO_PDF(2,X2,QQPD,0.D0,PDB)
+ IF ( MSPR.EQ.1 .OR. MSPR.EQ.4 ) THEN
+ PDS = PDA(0)*PDB(0)
+ ELSE
+ S2 = 0.D0
+ S3 = 0.D0
+ S4 = 0.D0
+ S5 = 0.D0
+ DO 10 I=1,NF
+ S2 = S2+PDA(I)*PDB(-I)+PDA(-I)*PDB( I)
+ S3 = S3+PDA(I)*PDB( I)+PDA(-I)*PDB(-I)
+ S4 = S4+PDA(I)+PDA(-I)
+ S5 = S5+PDB(I)+PDB(-I)
+ 10 CONTINUE
+ IF ((MSPR.EQ.2).OR.(MSPR.EQ.5).OR.(MSPR.EQ.6)) THEN
+ PDS = S2
+ ELSE IF((MSPR.EQ.3).OR.(MSPR.EQ.-1)) THEN
+ PDS = PDA(0)*S5+PDB(0)*S4
+ ELSE IF(MSPR.EQ.7) THEN
+ PDS = S3
+ ELSE IF(MSPR.EQ.8) THEN
+ PDS = S4*S5-(S2+S3)
+ ENDIF
+ ENDIF
+ ELSE IF(MSPR.LT.12) THEN
+ ALPHA2 = PHO_ALPHAS(QQAL,2)
+ IF(IDPDG1.EQ.22) THEN
+ ALPHA1 = pho_alphae(QQAL)
+ ELSE IF(IDPDG1.EQ.990) THEN
+ ALPHA1 = PARMDL(74)
+ ENDIF
+ CALL PHO_PDF(2,X2,QQPD,0.D0,PDB)
+ S4 = 0.D0
+ S6 = 0.D0
+ DO 15 I=1,NF
+ S4 = S4+PDB(I)+PDB(-I)
+C charge counting
+* IF(MOD(I,2).EQ.0) THEN
+* S6 = S6+(PDB(I)+PDB(-I))*4.D0/9.D0
+* ELSE
+* S6 = S6+(PDB(I)+PDB(-I))*1.D0/9.D0
+* ENDIF
+ S6 = S6+(PDB(I)+PDB(-I))*Q_ch2(I)
+ 15 CONTINUE
+ IF(MSPR.EQ.10) THEN
+ IF(IDPDG1.EQ.990) THEN
+ PDS = S4
+ ELSE
+ PDS = S6
+ ENDIF
+ ELSE
+ PDS = PDB(0)
+ ENDIF
+ ELSE IF(MSPR.LT.14) THEN
+ ALPHA1 = PHO_ALPHAS(QQAL,1)
+ IF(IDPDG2.EQ.22) THEN
+ ALPHA2 = pho_alphae(QQAL)
+ ELSE IF(IDPDG2.EQ.990) THEN
+ ALPHA2 = PARMDL(74)
+ ENDIF
+ CALL PHO_PDF(1,X1,QQPD,0.D0,PDA)
+ S4 = 0.D0
+ S6 = 0.D0
+ DO 20 I=1,NF
+ S4 = S4+PDA(I)+PDA(-I)
+C charge counting
+* IF(MOD(I,2).EQ.0) THEN
+* S6 = S6+(PDA(I)+PDA(-I))*4.D0/9.D0
+* ELSE
+* S6 = S6+(PDA(I)+PDA(-I))*1.D0/9.D0
+* ENDIF
+ S6 = S6+(PDA(I)+PDA(-I))*Q_ch2(I)
+ 20 CONTINUE
+ IF(MSPR.EQ.12) THEN
+ IF(IDPDG2.EQ.990) THEN
+ PDS = S4
+ ELSE
+ PDS = S6
+ ENDIF
+ ELSE
+ PDS = PDA(0)
+ ENDIF
+ ELSE IF(MSPR.EQ.14) THEN
+ SSR = X1*X2*ECMP*ECMP
+ IF(IDPDG1.EQ.22) THEN
+ ALPHA1 = pho_alphae(SSR)
+ ELSE IF(IDPDG1.EQ.990) THEN
+ ALPHA1 = PARMDL(74)
+ ENDIF
+ IF(IDPDG2.EQ.22) THEN
+ ALPHA2 = pho_alphae(SSR)
+ ELSE IF(IDPDG2.EQ.990) THEN
+ ALPHA2 = PARMDL(74)
+ ENDIF
+ PDS = 1.D0
+ ELSE
+ WRITE(LO,'(/1X,A,I4)')
+ & 'PHO_HARWGH:ERROR: invalid hard process number (MSPR)',MSPR
+ CALL PHO_ABORT
+ ENDIF
+
+C complete weight
+ FDISTR = HFac(MSPR)*ALPHA1*ALPHA2*PDS
+
+C debug output
+ IF(IDEB(15).GE.20) WRITE(LO,'(1X,A,/5X,I3,2I6,4E10.3)')
+ & 'PHO_HARWGH: MSPR,ID1,ID2,AL1,AL2,PDS,FDIS',
+ & MSPR,IDPDG1,IDPDG2,ALPHA1,ALPHA2,PDS,FDISTR
+
+ END
+
+CDECK ID>, PHO_HARSCA
+ SUBROUTINE PHO_HARSCA(IMODE,IP)
+C***********************************************************************
+C
+C PHO_HARSCA determines the type of hard subprocess, the partons
+C taking part in this subprocess and the kinematic variables
+C
+C input: IMODE 1 direct processes
+C 2 resolved processes
+C -1 initialization
+C -2 output of statistics
+C IP 1-4 particle combination (hadron/photon)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER( EPS = 1.D-10,
+ & DEPS = 1.D-30 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ 111 CONTINUE
+
+C resolved processes
+ IF(IMODE.EQ.2) THEN
+
+ MH_pro_on(0,IP) = 0
+ HWgx(9) = 0.D0
+ DO 15 M=-1,8
+ IF(MH_pro_on(M,IP).EQ.1) HWgx(9) = HWgx(9)+HWgx(M)
+ 15 CONTINUE
+ IF(HWgx(9).LT.DEPS) THEN
+ WRITE(LO,'(/1X,2A,I4,1P,E12.4)') 'PHO_HARSCA:ERROR: ',
+ & 'no resolved process possible for IP',IP,HWgx(9)
+ CALL PHO_ABORT
+ ENDIF
+C
+C ----------------------------------------------I
+C begin of iteration loop (resolved processes) I
+C I
+ IREJSC = 0
+ 10 CONTINUE
+ IREJSC = IREJSC+1
+ IF(IREJSC.GT.1000) THEN
+ WRITE(LO,'(/1X,A,I10)')
+ & 'PHO_HARSCA:ERROR: too many rejections (resolved)',IREJSC
+ CALL PHO_ABORT
+ ENDIF
+
+C find subprocess
+ B = DT_RNDM(X1)*HWgx(9)
+ MSPR =-2
+ SUM = 0.D0
+ 20 MSPR = MSPR+1
+ IF ( MH_pro_on(MSPR,IP).EQ.1 ) SUM = SUM+HWgx(MSPR)
+ IF ( SUM.LT.B .AND. MSPR.LT.8 ) GOTO 20
+
+ IF(IDEB(78).GE.20) WRITE(LO,'(1x,a,i3,i6)')
+ & 'PHO_HARSCA: resolved process (MSPR,IREJSC)',MSPR,IREJSC
+
+C find kin. variables X1,X2 and V
+ CALL PHO_HARKIN(IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(29) = IFAIL(29)+1
+ GOTO 10
+ ENDIF
+C calculate remaining distribution
+ CALL PHO_HARWGH(PDS,PDF1,PDF2,F)
+C actualize counter for cross-section calculation
+ if(F.LE.1.D-15) then
+ F = 0.D0
+ goto 10
+ endif
+* XSECT(5,MSPR) = XSECT(5,MSPR)+F
+* XSECT(6,MSPR) = XSECT(6,MSPR)+F*F
+ MH_tried(MSPR,IP) = MH_tried(MSPR,IP)+1
+C check F against FMAX
+ WEIGHT = F/(HWgx(MSPR)+DEPS)
+ IF ( WEIGHT.LT.DT_RNDM(X2) ) GOTO 10
+C-------------------------------------------------------------------
+ IF(WEIGHT.GT.1.D0) THEN
+ WRITE(LO,1234) MSPR,IP,IDPDG1,IDPDG2,F,HWgx(MSPR),WEIGHT
+ 1234 FORMAT(/,' PHO_HARSCA: (resolved) W>1 (MSPR,IP,ID1,2)',
+ & 2I3,2I7,/' F,HWgx(MSPR),W',3E12.4)
+ WRITE(LO,'(1X,A,5E11.3)') 'ECM,PTWANT,AS,AH,PT',
+ & ECMP,PTWANT,AS,AH,PT
+ WRITE(LO,'(1X,A,5E11.3)') 'ETAC,ETAD,X1,X2,V',
+ & ETAC,ETAD,X1,X2,V
+ CALL PHO_PREVNT(-1)
+ ENDIF
+C-------------------------------------------------------------------
+C I
+C end of iteration loop (resolved processes) I
+C --------------------------------------------I
+C
+C*********************************************************************
+C
+C direct processes
+
+ ELSE IF(IMODE.EQ.1) THEN
+
+C single-resolved processes kinematically forbidden
+ if(Z1DIF.lt.0.D0) then
+ HWgx(10) = 0.D0
+ HWgx(11) = 0.D0
+ HWgx(12) = 0.D0
+ HWgx(13) = 0.D0
+ endif
+
+ HWgx(15) = 0.D0
+ if((IPAMDL(115).eq.0).and.(IP.eq.1)) then
+ DO M= 10,14
+ IF(MH_pro_on(M,IP).EQ.1) then
+ if((M.eq.10).or.(M.eq.11)) then
+ fac = FSUH(1)*FSUP(2)
+ else if((M.eq.12).or.(M.eq.13)) then
+ fac = FSUP(1)*FSUH(2)
+ else
+ fac = FSUH(1)*FSUH(2)
+ endif
+ HWgx(15) = HWgx(15)+HWgx(M)*fac
+ endif
+ ENDDO
+ else
+ DO M= 10,14
+ IF(MH_pro_on(M,IP).EQ.1) HWgx(15)=HWgx(15)+HWgx(M)
+ ENDDO
+ endif
+ IF(HWgx(15).LT.DEPS) THEN
+ WRITE(LO,'(/1X,2A,I4)') 'PHO_HARSCA:ERROR: ',
+ & 'no direct/single-resolved process possible (IP)',IP
+ CALL PHO_ABORT
+ ENDIF
+C
+C ----------------------------------------------I
+C begin of iteration loop (direct processes) I
+C I
+ IREJSC = 0
+ 100 CONTINUE
+ IREJSC = IREJSC+1
+ IF(IREJSC.GT.1000) THEN
+ WRITE(LO,'(/1X,A,I10)')
+ & 'PHO_HARSCA:ERROR: too many rejections (direct)',IREJSC
+ CALL PHO_ABORT
+ ENDIF
+
+C find subprocess
+ B = DT_RNDM(X1)*HWgx(15)
+ MSPR = 9
+ SUM = 0.D0
+ if((IPAMDL(115).eq.0).and.(IP.eq.1)) then
+ 150 continue
+ MSPR = MSPR+1
+ IF(MH_pro_on(MSPR,IP).EQ.1) then
+ if((MSPR.eq.10).or.(MSPR.eq.11)) then
+ fac = FSUH(1)*FSUP(2)
+ else if((MSPR.eq.12).or.(MSPR.eq.13)) then
+ fac = FSUP(1)*FSUH(2)
+ else
+ fac = FSUH(1)*FSUH(2)
+ endif
+ SUM = SUM+HWgx(MSPR)*fac
+ endif
+ IF ( SUM.LT.B .AND. MSPR.LT.14 ) GOTO 150
+ else
+ 200 continue
+ MSPR = MSPR+1
+ IF(MH_pro_on(MSPR,IP).EQ.1) SUM = SUM+HWgx(MSPR)
+ IF ( SUM.LT.B .AND. MSPR.LT.14 ) GOTO 200
+ endif
+
+ IF(IDEB(78).GE.20) WRITE(LO,'(1x,a,i3,i6)')
+ & 'PHO_HARSCA: direct process (MSPR,IREJSC)',MSPR,IREJSC
+
+C find kin. variables X1,X2 and V
+ CALL PHO_HARKIN(IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(28) = IFAIL(28)+1
+ GOTO 100
+ ENDIF
+
+C calculate remaining distribution
+ CALL PHO_HARWGH(PDS,PDF1,PDF2,F)
+
+C counter for cross-section calculation
+ if(F.LE.1.D-15) then
+ F=0.D0
+ goto 100
+ endif
+* XSECT(5,MSPR) = XSECT(5,MSPR)+F
+* XSECT(6,MSPR) = XSECT(6,MSPR)+F*F
+ MH_tried(MSPR,IP) = MH_tried(MSPR,IP)+1
+C check F against FMAX
+ WEIGHT = F/(HWgx(MSPR)+DEPS)
+ IF(WEIGHT.LT.DT_RNDM(X2)) GOTO 100
+C-------------------------------------------------------------------
+ IF(WEIGHT.GT.1.D0) THEN
+ WRITE(LO,1235) MSPR,IP,IDPDG1,IDPDG2,F,HWgx(MSPR),WEIGHT
+ 1235 FORMAT(/,' PHO_HARSCA: (direct) W>1 (MSPR,IP,ID1,2)',
+ & 2I3,2I7,/,' F,HWgx(MSPR),W',3E12.4)
+ WRITE(LO,'(1X,A,5E11.3)') 'ECM,PTWANT,AS,AH,PT',
+ & ECMP,PTWANT,AS,AH,PT
+ WRITE(LO,'(1X,A,5E11.3)') 'ETAC,ETAD,X1,X2,V',
+ & ETAC,ETAD,X1,X2,V
+ CALL PHO_PREVNT(-1)
+ ENDIF
+C-------------------------------------------------------------------
+C I
+C end of iteration loop (direct processes) I
+C --------------------------------------------I
+
+ ELSE IF(IMODE.EQ.-1) THEN
+
+C initialize cross section calculations
+
+ DO 40 M=-1,Max_pro_2
+* DO 30 I=5,6
+* XSECT(I,M) = 0.D0
+*30 CONTINUE
+C reset counters
+ DO 35 J=1,4
+ MH_tried(M,J) = 0
+ MH_acc_1(M,J) = 0
+ MH_acc_2(M,J) = 0
+ 35 CONTINUE
+ 40 CONTINUE
+ IF(IDEB(78).GE.0) THEN
+C *** Commented by Chiara
+C WRITE(LO,'(/1X,A,/1X,A)')
+C & 'PHO_HARSCA: activated hard processes',
+C & '------------------------------------'
+C WRITE(LO,'(5X,A)') 'PROCESS, IP= 1 ... 4 (on/off)'
+ DO 42 M=1,Max_pro_2
+C WRITE(LO,'(1X,I3,5X,A,4I3)') M,PROC(M),
+C & (MH_pro_on(M,J),J=1,4)
+ 42 CONTINUE
+ ENDIF
+ RETURN
+
+ ELSE IF(IMODE.EQ.-2) THEN
+
+C calculation of process statistics
+
+ do K=1,4
+
+ MH_tried(0,K) = 0
+ MH_acc_1(0,K) = 0
+ MH_acc_2(0,K) = 0
+ MH_tried(9,K) = 0
+ MH_acc_1(9,K) = 0
+ MH_acc_2(9,K) = 0
+ MH_tried(15,K) = 0
+ MH_acc_1(15,K) = 0
+ MH_acc_2(15,K) = 0
+
+ MH_tried(3,K) = MH_tried(3,K)+MH_tried(-1,K)
+ MH_acc_1(3,K) = MH_acc_1(3,K)+MH_acc_1(-1,K)
+ MH_acc_2(3,K) = MH_acc_2(3,K)+MH_acc_2(-1,K)
+
+ do M=1,8
+ MH_tried(9,K) = MH_tried(9,K)+MH_tried(M,K)
+ MH_acc_1(9,K) = MH_acc_1(9,K)+MH_acc_1(M,K)
+ MH_acc_2(9,K) = MH_acc_2(9,K)+MH_acc_2(M,K)
+ enddo
+ do M=10,14
+ MH_tried(15,K) = MH_tried(15,K)+MH_tried(M,K)
+ MH_acc_1(15,K) = MH_acc_1(15,K)+MH_acc_1(M,K)
+ MH_acc_2(15,K) = MH_acc_2(15,K)+MH_acc_2(M,K)
+ enddo
+ MH_tried(0,K) = MH_tried(9,K)+MH_tried(15,K)
+ MH_acc_1(0,K) = MH_acc_1(9,K)+MH_acc_1(15,K)
+ MH_acc_2(0,K) = MH_acc_2(9,K)+MH_acc_2(15,K)
+ enddo
+
+ IF(IDEB(78).GE.1) THEN
+ WRITE(LO,'(/1X,A,/1X,A)')
+ & 'PHO_HARSCA: internal rejection statistics',
+ & '-----------------------------------------'
+ do K=1,4
+ IF(MH_tried(0,K).GT.0) THEN
+ WRITE(LO,'(5X,A,I3)')
+ & 'process (sampled/accepted) for IP:',K
+ do M=0,Max_pro_2
+ WRITE(LO,'(1X,I3,1X,A,2X,3I12,F10.4)') M,PROC(M),
+ & MH_tried(M,K),MH_acc_1(M,K),MH_acc_2(K,K),
+ & dble(MH_acc_1(M,K))/dble(max(1,MH_tried(M,K)))
+ enddo
+ ENDIF
+ enddo
+ ENDIF
+ RETURN
+
+ ELSE
+ WRITE(LO,'(/1X,2A,I10)') 'PHO_HARSCA:ERROR: ',
+ & 'unsupported mode',IMODE
+ CALL PHO_ABORT
+ ENDIF
+
+C the event is accepted now
+C actualize counter for accepted events
+ MH_acc_1(MSPR,IP) = MH_acc_1(MSPR,IP)+1
+ IF(MSPR.EQ.-1) MSPR = 3
+C
+C find flavor of initial partons
+C
+ SUM = 0.D0
+ SCHECK = DT_RNDM(SUM)*PDS-EPS
+ IF ( MSPR.EQ.1 .OR. MSPR.EQ.4 ) THEN
+ IA = 0
+ IB = 0
+ ELSEIF ( MSPR.EQ.2 .OR. MSPR.EQ.5 .OR. MSPR.EQ.6 ) THEN
+ DO 610 IA=-NF,NF
+ IF ( IA.EQ.0 ) GOTO 610
+ SUM = SUM+PDF1(IA)*PDF2(-IA)
+ IF ( SUM.GE.SCHECK ) GOTO 620
+ 610 CONTINUE
+ 620 IB =-IA
+ ELSEIF ( MSPR.EQ.3 ) THEN
+ IB = 0
+ DO 630 IA=-NF,NF
+ IF ( IA.EQ.0 ) GOTO 630
+ SUM = SUM+PDF1(0)*PDF2(IA)
+ IF ( SUM.GE.SCHECK ) GOTO 640
+ SUM = SUM+PDF1(IA)*PDF2(0)
+ IF ( SUM.GE.SCHECK ) GOTO 650
+ 630 CONTINUE
+ 640 IB = IA
+ IA = 0
+ 650 CONTINUE
+ ELSEIF ( MSPR.EQ.7 ) THEN
+ DO 660 IA=-NF,NF
+ IF ( IA.EQ.0 ) GOTO 660
+ SUM = SUM+PDF1(IA)*PDF2(IA)
+ IF ( SUM.GE.SCHECK ) GOTO 670
+ 660 CONTINUE
+ 670 IB = IA
+ ELSEIF ( MSPR.EQ.8 ) THEN
+ DO 690 IA=-NF,NF
+ IF ( IA.EQ.0 ) GOTO 690
+ DO 680 IB=-NF,NF
+ IF ( ABS(IB).EQ.ABS(IA) .OR. IB.EQ.0 ) GOTO 680
+ SUM = SUM+PDF1(IA)*PDF2(IB)
+ IF ( SUM.GE.SCHECK ) GOTO 700
+ 680 CONTINUE
+ 690 CONTINUE
+ 700 CONTINUE
+ ELSEIF ( MSPR.EQ.10 ) THEN
+ IA = 0
+ DO 710 IB=-NF,NF
+ IF ( IB.NE.0 ) THEN
+ IF(IDPDG1.EQ.22) THEN
+* IF(MOD(ABS(IB),2).EQ.0) THEN
+* SUM = SUM+PDF2(IB)*4.D0/9.D0
+* ELSE
+* SUM = SUM+PDF2(IB)*1.D0/9.D0
+* ENDIF
+ SUM = SUM+PDF2(IB)*Q_ch2(IB)
+ ELSE
+ SUM = SUM+PDF2(IB)
+ ENDIF
+ IF ( SUM.GE.SCHECK ) GOTO 720
+ ENDIF
+ 710 CONTINUE
+ 720 CONTINUE
+ ELSEIF ( MSPR.EQ.12 ) THEN
+ IB = 0
+ DO 810 IA=-NF,NF
+ IF ( IA.NE.0 ) THEN
+ IF(IDPDG2.EQ.22) THEN
+* IF(MOD(ABS(IA),2).EQ.0) THEN
+* SUM = SUM+PDF1(IA)*4.D0/9.D0
+* ELSE
+* SUM = SUM+PDF1(IA)*1.D0/9.D0
+* ENDIF
+ SUM = SUM+PDF1(IA)*Q_ch2(IA)
+ ELSE
+ SUM = SUM+PDF1(IA)
+ ENDIF
+ IF ( SUM.GE.SCHECK ) GOTO 820
+ ENDIF
+ 810 CONTINUE
+ 820 CONTINUE
+ ELSEIF ((MSPR.EQ.11).OR.(MSPR.EQ.13).OR.(MSPR.EQ.14)) THEN
+ IA = 0
+ IB = 0
+ ENDIF
+C final check
+ IF((ABS(IA).GT.NF).OR.(ABS(IB).GT.NF)) THEN
+ print LO,'PHO_HARSCA: rejection, final check IA,IB',IA,IB
+ print LO,'EVENT,MSPR,IA,IB,NF: ',KEVENT,MSPR,IA,IB,NF
+ GOTO 111
+ ENDIF
+C
+C find flavour of final partons
+C
+ IC = IA
+ ID = IB
+ IF ( MSPR.EQ.2 ) THEN
+ IC = 0
+ ID = 0
+ ELSEIF ( MSPR.EQ.4 ) THEN
+ IC = INT(FLOAT(NF+NF)*DT_RNDM(SUM))+1
+ IF ( IC.GT.NF ) IC = NF-IC
+ ID =-IC
+ ELSEIF ( MSPR.EQ.6 ) THEN
+ IC = INT(FLOAT(NF+NF-2)*DT_RNDM(SUM))+1
+ IF ( IC.GT.NF-1 ) IC = NF-1-IC
+ IF ( ABS(IC).EQ.ABS(IA) ) IC = SIGN(NF,IC)
+ ID =-IC
+ ELSEIF ( MSPR.EQ.11) THEN
+ SUM = 0.D0
+ DO 730 IC=-NF,NF
+ IF ( IC.NE.0 ) THEN
+ IF(IDPDG1.EQ.22) THEN
+* IF(MOD(ABS(IC),2).EQ.0) THEN
+* SUM = SUM + 4.D0
+* ELSE
+* SUM = SUM + 1.D0
+* ENDIF
+ SUM = SUM + Q_ch2(IC)
+ ELSE
+ SUM = SUM + 1.D0
+ ENDIF
+ ENDIF
+ 730 CONTINUE
+ SCHECK = DT_RNDM(SUM)*SUM-EPS
+ SUM = 0.D0
+ DO 740 IC=-NF,NF
+ IF ( IC.NE.0 ) THEN
+ IF(IDPDG1.EQ.22) THEN
+* IF(MOD(ABS(IC),2).EQ.0) THEN
+* SUM = SUM + 4.D0
+* ELSE
+* SUM = SUM + 1.D0
+* ENDIF
+ SUM = SUM + Q_ch2(IC)
+ ELSE
+ SUM = SUM + 1.D0
+ ENDIF
+ IF ( SUM.GE.SCHECK ) GOTO 750
+ ENDIF
+ 740 CONTINUE
+ 750 CONTINUE
+ ID = -IC
+ ELSEIF ( MSPR.EQ.12) THEN
+ IC = 0
+ ID = IA
+ ELSEIF ( MSPR.EQ.13) THEN
+ SUM = 0.D0
+ DO 830 IC=-NF,NF
+ IF ( IC.NE.0 ) THEN
+ IF(IDPDG2.EQ.22) THEN
+* IF(MOD(ABS(IC),2).EQ.0) THEN
+* SUM = SUM + 4.D0
+* ELSE
+* SUM = SUM + 1.D0
+* ENDIF
+ SUM = SUM + Q_ch2(IC)
+ ELSE
+ SUM = SUM + 1.D0
+ ENDIF
+ ENDIF
+ 830 CONTINUE
+ SCHECK = DT_RNDM(SUM)*SUM-EPS
+ SUM = 0.D0
+ DO 840 IC=-NF,NF
+ IF ( IC.NE.0 ) THEN
+ IF(IDPDG2.EQ.22) THEN
+* IF(MOD(ABS(IC),2).EQ.0) THEN
+* SUM = SUM + 4.D0
+* ELSE
+* SUM = SUM + 1.D0
+* ENDIF
+ SUM = SUM + Q_ch2(IC)
+ ELSE
+ SUM = SUM + 1.D0
+ ENDIF
+ IF ( SUM.GE.SCHECK ) GOTO 850
+ ENDIF
+ 840 CONTINUE
+ 850 CONTINUE
+ ID = -IC
+ ELSEIF ( MSPR.EQ.14) THEN
+ SUM = 0.D0
+ DO 930 IC=1,NF
+ FAC1 = 1.D0
+ FAC2 = 1.D0
+ IF(MOD(ABS(IC),2).EQ.0) THEN
+ IF(IDPDG1.EQ.22) FAC1 = 4.D0
+ IF(IDPDG2.EQ.22) FAC2 = 4.D0
+ ENDIF
+ SUM = SUM + FAC1*FAC2
+ 930 CONTINUE
+ IF(IPAMDL(64).NE.0) THEN
+ IF((IDPDG1.EQ.22).AND.(IDPDG2.EQ.22)) SUM = SUM + 81.D0
+ ENDIF
+ SCHECK = DT_RNDM(SUM)*SUM-EPS
+ SUM = 0.D0
+ DO 940 IC=1,NF
+ FAC1 = 1.D0
+ FAC2 = 1.D0
+ IF(MOD(ABS(IC),2).EQ.0) THEN
+ IF(IDPDG1.EQ.22) FAC1 = 4.D0
+ IF(IDPDG2.EQ.22) FAC2 = 4.D0
+ ENDIF
+ SUM = SUM + FAC1*FAC2
+ IF ( SUM.GE.SCHECK ) GOTO 950
+ 940 CONTINUE
+ IC = 15
+ 950 CONTINUE
+ ID = -IC
+ IF(DT_RNDM(FAC1).GT.0.5D0) CALL PHO_SWAPI(IC,ID)
+ ENDIF
+ if(IC.eq.0) then
+ XM3 = 0.D0
+ else
+ XM3 = PHO_PMASS(IC,3)
+ endif
+ if(ID.eq.0) then
+ XM4 = 0.D0
+ else
+ XM4 = PHO_PMASS(ID,3)
+ endif
+ IF(ABS(IC).EQ.15) GOTO 955
+
+C valence quarks involved?
+ IV1 = 0
+ IF(IA.NE.0) THEN
+ IF(IDPDG1.EQ.22) THEN
+ CALL PHO_QPMPDF(IA,X1,QQPD,0.D0,PVIRTP(1),FXP)
+ IF(DT_RNDM(XM3)*PDF1(IA).GT.PDF1(IA)-FXP) IV1 = 1
+ ELSE
+ IF(DT_RNDM(XM3)*PDF1(IA).GT.PDF1(-IA)) IV1 = 1
+ ENDIF
+ ENDIF
+ IV2 = 0
+ IF(IB.NE.0) THEN
+ IF(IDPDG2.EQ.22) THEN
+ CALL PHO_QPMPDF(IB,X2,QQPD,0.D0,PVIRTP(2),FXP)
+ IF(DT_RNDM(XM4)*PDF2(IB).GT.PDF2(IB)-FXP) IV2 = 1
+ ELSE
+ IF(DT_RNDM(XM4)*PDF2(IB).GT.PDF2(-IB)) IV2 = 1
+ ENDIF
+ ENDIF
+C
+C fill event record
+C
+ 955 CONTINUE
+ CALL PHO_SFECFE(SINPHI,COSPHI)
+ ECM2 = ECMP/2.D0
+C incoming partons
+ PHI1(1) = 0.D0
+ PHI1(2) = 0.D0
+ PHI1(3) = ECM2*X1
+ PHI1(4) = PHI1(3)
+ PHI1(5) = 0.D0
+ PHI2(1) = 0.D0
+ PHI2(2) = 0.D0
+ PHI2(3) = -ECM2*X2
+ PHI2(4) = -PHI2(3)
+ PHI2(5) = 0.D0
+C outgoing partons
+ PHO1(1) = PT*COSPHI
+ PHO1(2) = PT*SINPHI
+ PHO1(3) = -ECM2*(U*X1-V*X2)
+ PHO1(4) = -ECM2*(U*X1+V*X2)
+ PHO1(5) = XM3
+ PHO2(1) = -PHO1(1)
+ PHO2(2) = -PHO1(2)
+ PHO2(3) = -ECM2*(V*X1-U*X2)
+ PHO2(4) = -ECM2*(V*X1+U*X2)
+ PHO2(5) = XM4
+
+C convert to mass shell
+ CALL PHO_MSHELL(PHO1,PHO2,XM3,XM4,PHO1,PHO2,IREJ)
+ IF(IREJ.NE.0) THEN
+ IF(IDEB(78).GE.5) WRITE(LO,'(1X,A,1P,3E11.3)')
+ & 'PHO_HARSCA: rejection by PHO_MSHELL (PT,M1,M2)',
+ & PT,XM3,XM4
+ GOTO 111
+ ENDIF
+ PTfin = SQRT(PHO1(1)**2+PHO1(2)**2)
+
+C debug output
+ IF(IDEB(78).GE.20) THEN
+ SHAT = X1*X2*ECMP*ECMP
+ WRITE(LO,'(1X,A,5I4)') 'PHO_HARSCA: MSPR,IA,IB,IC,ID',
+ & MSPR,IA,IB,IC,ID
+ WRITE(LO,'(5X,A,1P,4E11.3)') 'X1/2,MU2,Q2 ',X1,X2,QQPD,QQAL
+ WRITE(LO,'(5X,A,1P,4E11.3)') 'U,V,PT,SHAT ',U,V,PT,SHAT
+ WRITE(LO,'(5X,A,1P,5E11.3)') 'PHI1 ',PHI1
+ WRITE(LO,'(5X,A,1P,5E11.3)') 'PHI2 ',PHI2
+ WRITE(LO,'(5X,A,1P,5E11.3)') 'PHO1 ',PHO1
+ WRITE(LO,'(5X,A,1P,5E11.3)') 'PHO2 ',PHO2
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_HARFAC
+ SUBROUTINE PHO_HARFAC(PTCUT,ECMI)
+C*********************************************************************
+C
+C initialization: find scaling factors and maxima of remaining
+C weights
+C
+C input: PTCUT transverse momentum cutoff
+C ECMI cms energy
+C
+C output: Hfac(-1:Max_pro_2) field for sampling hard processes
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( MXABWT = 96 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+
+ DIMENSION ABSZ(MXABWT),WEIG(MXABWT)
+ DIMENSION S(-1:Max_pro_2),S1(-1:Max_pro_2),S2(-1:Max_pro_2),
+ & F124(-1:Max_pro_2)
+ DATA F124 / 1.D0,0.D0,
+ & 4.D0,2.D0,2.D0,2.D0,4.D0,1.D0,4.D0,4.D0,0.D0,1.D0,
+ & 2.D0,1.D0,2.D0,1.D0,0.D0,1.D0 /
+
+ SS = ECMI*ECMI
+ AH = (2.D0*PTCUT/ECMI)**2
+ ALN = LOG(AH)
+ HLN = LOG(0.5D0)
+ NPOINT = NGAUIN
+ CALL PHO_GAUSET(0.D0,1.D0,NPOINT,ABSZ,WEIG)
+ DO 10 M=-1,Max_pro_2
+ S1(M) = 0.D0
+10 CONTINUE
+
+C resolved processes
+ DO 80 I1=1,NPOINT
+ Z1 = ABSZ(I1)
+ X1 = EXP(ALN*Z1)
+ DO 20 M=-1,9
+ S2(M) = 0.D0
+20 CONTINUE
+
+ DO 60 I2=1,NPOINT
+ Z2 = (1.D0-Z1)*ABSZ(I2)
+ X2 = EXP(ALN*Z2)
+ FAXX = AH/(X1*X2)
+ W = SQRT(1.D0-FAXX)
+ W1 = FAXX/(1.+W)
+ WLOG = LOG(W1)
+ FWW = FAXX*WLOG/W
+ DO 30 M=-1,9
+ S(M) = 0.D0
+30 CONTINUE
+
+ DO 40 I=1,NPOINT
+ Z = ABSZ(I)
+ VA =-0.5D0*W1/(W1+Z*W)
+ UA =-1.D0-VA
+ VB =-0.5D0*FAXX/(W1+2.D0*W*Z)
+ UB =-1.D0-VB
+ VC =-EXP(HLN+Z*WLOG)
+ UC =-1.D0-VC
+ VE =-0.5D0*(1.D0+W)+Z*W
+ UE =-1.D0-VE
+ S(1) = S(1)+(1.+W)*2.25*(VA*VA*(3.-UA*VA-VA/(UA*UA))-UA)*
+ & WEIG(I)
+ S(2) = S(2)+(VC*VC+UC*UC)*((16./27.)/UC-(4./3.)*VC)*FWW*
+ & WEIG(I)
+ S(3) = S(3)+(1.+W)*(1.+UA*UA)*(1.-(4./9.)*VA*VA/UA)*WEIG(I)
+ S(5) = S(5)+((4./9.)*(1.+UB*UB+(UB*UB+VB*VB)*VB*VB)-
+ & (8./27.)*UA*UA*VA)*WEIG(I)
+ S(6) = S(6)+(4./9.)*(UE*UE+VE*VE)*FAXX*WEIG(I)
+ S(7) = S(7)+(1.+W)*((2./9.)*(1.+UA*UA+(1.+VA*VA)*VA*VA/
+ & (UA*UA))-(4./27.)*VA/UA)*WEIG(I)
+ S(8) = S(8)+(4./9.)*(1.+UB*UB)*WEIG(I)
+ S(-1) = S(-1)+(1.+VC*VC)*(VC/(UC*UC)-(4./9.))*FWW*WEIG(I)
+40 CONTINUE
+ S(4) = S(2)*(9./32.)
+ DO 50 M=-1,8
+ S2(M) = S2(M)+S(M)*WEIG(I2)*W
+50 CONTINUE
+60 CONTINUE
+ DO 70 M=-1,8
+ S1(M) = S1(M)+S2(M)*(1.D0-Z1)*WEIG(I1)
+70 CONTINUE
+80 CONTINUE
+ S1(4) = S1(4)*NF
+ S1(6) = S1(6)*MAX(0,NF-1)
+C
+C direct processes
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)
+ & .OR.(IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ DO 180 I1=1,NPOINT
+ Z2 = ABSZ(I1)
+ X2 = EXP(ALN*Z2)
+ FAXX = AH/X2
+ W = SQRT(1.D0-FAXX)
+ W1 = FAXX/(1.D0+W)
+ WLOG = LOG(W1)
+ WL = LOG(FAXX/(1.D0+W)**2)
+ FWW1 = FAXX*WL/ALN
+ FWW2 = FAXX*WLOG/ALN
+ DO 130 M=10,12
+ S(M) = 0.D0
+ 130 CONTINUE
+C
+ DO 140 I=1,NPOINT
+ Z = ABSZ(I)
+ UA =-(1.D0+W)/2.D0*EXP(Z*WL)
+ VA =-1.D0-UA
+ VB =-EXP(HLN+Z*WLOG)
+ UB =-1.D0-VB
+ S(10) = S(10)+(8.D0/3.D0)*(1.D0+UA*UA)*WEIG(I)*FWW1
+ S(11) = S(11)-(VB*VB+UB*UB)/UB*WEIG(I)*FWW2
+ 140 CONTINUE
+ DO 170 M=10,11
+ S1(M) = S1(M)+S(M)*WEIG(I1)
+ 170 CONTINUE
+ 180 CONTINUE
+ S1(12) = S1(10)
+ S1(13) = S1(11)
+C quark charges fractions
+ IF(IDPDG1.EQ.22) THEN
+ CHRNF = 0.D0
+ DO 100 I=1,NF
+ CHRNF = CHRNF + Q_ch2(I)
+ 100 CONTINUE
+ S1(11) = S1(11)*CHRNF
+ ELSE IF(IDPDG1.EQ.990) THEN
+ S1(11) = S1(11)*NF
+ ELSE
+ S1(11) = 0.D0
+ ENDIF
+ IF(IDPDG2.EQ.22) THEN
+ CHRNF = 0.D0
+ DO 200 I=1,NF
+ CHRNF = CHRNF + Q_ch2(I)
+ 200 CONTINUE
+ S1(13) = S1(13)*CHRNF
+ ELSE IF(IDPDG2.EQ.990) THEN
+ S1(13) = S1(13)*NF
+ ELSE
+ S1(13) = 0.D0
+ ENDIF
+ ENDIF
+C
+C global factors
+ FFF = PI*GEV2MB*ALN*ALN/(AH*SS)
+ DO 90 M=-1,Max_pro_2
+ Hfac(M) = MAX(FFF*F124(M)*S1(M),0.D0)
+90 CONTINUE
+C
+C double direct process
+ IF(((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990))
+ & .AND.((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990))) THEN
+ FAC = 0.D0
+ DO 300 I=1,NF
+ IF(IDPDG1.EQ.22) THEN
+ F1 = Q_ch2(I)
+ ELSE
+ F1 = 1.D0
+ ENDIF
+ IF(IDPDG2.EQ.22) THEN
+ F2 = Q_ch2(I)
+ ELSE
+ F2 = 1.D0
+ ENDIF
+ FAC = FAC+F1*F2*3.D0
+ 300 CONTINUE
+ ZZ = SQRT(1.D0-4.D0*PTCUT*PTCUT/SS)
+ Hfac(14) = 4.D0*PI/SS*(LOG((1.D0+ZZ)/(1.D0-ZZ))-ZZ)
+ & *GEV2MB*FAC
+ ENDIF
+ END
+
+CDECK ID>, PHO_HARWGX
+ SUBROUTINE PHO_HARWGX(PTCUT,ECM)
+C**********************************************************************
+C
+C find maximum of remaining weight for MC sampling
+C
+C input: PTCUT transverse momentum cutoff
+C ECM cms energy
+C
+C output: HWgx(-1:Max_pro_2) field for sampling hard processes
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( NKM = 10 )
+ PARAMETER ( TINY = 1.D-20 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+
+ DIMENSION Z(3),D(3),FF(0:NKM),PDA(-6:6),PDB(-6:6),XM1(NKM),
+ & XM2(NKM),PTM(NKM),ZMX(3,NKM),DMX(3,NKM),IMX(NKM),IPO(NKM)
+ DIMENSION IFTAB(-1:Max_pro_2)
+ DATA IFTAB / 4,0,1,2,4,1,2,2,3,5,0,6,7,8,9,10,0,10 /
+
+C initial settings
+ AH = (2.D0*PTCUT/ECM)**2
+ ALNH = LOG(AH)
+ FF(0) = 0.D0
+ DO 22 I=1,NKM
+ FF(I) = 0.D0
+ XM1(I) = 0.D0
+ XM2(I) = 0.D0
+ PTM(I) = 0.D0
+ ZMX(1,I) = 0.D0
+ ZMX(2,I) = 0.D0
+ ZMX(3,I) = 0.D0
+ DMX(1,I) = 0.D0
+ DMX(2,I) = 0.D0
+ DMX(3,I) = 0.D0
+ IMX(I) = 0
+ IPO(I) = 0
+ 22 CONTINUE
+
+ NKML = 10
+ DO 40 NKON=1,NKML
+
+ DO 50 IST=1,3
+C start configuration
+ IF(IST.EQ.1) THEN
+ Z(1) = MIN(0.999D0,LOG(0.5D0)/LOG(AH))
+ Z(2) = 0.5
+ Z(3) = 0.1
+ D(1) =-0.5
+ D(2) = 0.5
+ D(3) = 0.5
+ ELSE IF(IST.EQ.2) THEN
+ Z(1) = 0.999D0
+ Z(2) = 0.5
+ Z(3) = 0.0
+ D(1) =-0.5
+ D(2) = 0.5
+ D(3) = 0.5
+ ELSE IF(IST.EQ.3) THEN
+ Z(1) = MIN(0.999D0,LOG(0.5D0)/LOG(AH))
+ Z(2) = 0.1
+ Z(3) = 0.1
+ D(1) =-0.5
+ D(2) = 0.5
+ D(3) = 0.5
+ ELSE IF(IST.EQ.4) THEN
+ Z(1) = MIN(0.999D0,LOG(0.5D0)/LOG(AH))
+ Z(2) = 0.9
+ Z(3) = 0.1
+ D(1) =-0.5
+ D(2) = 0.5
+ D(3) = 0.5
+ ENDIF
+ IT = 0
+ CALL PHO_HARWGI(ECM,PTCUT,NKON,Z,F2)
+C process possible?
+ IF(F2.LE.0.D0) GOTO 35
+
+ 10 CONTINUE
+ IT = IT+1
+ FOLD = F2
+ DO 30 I=1,3
+ D(I) = D(I)/5.D0
+ Z(I) = Z(I)+D(I)
+ CALL PHO_HARWGI(ECM,PTCUT,NKON,Z,F3)
+ IF ( F2.GT.F3 ) Z(I) = Z(I)-D(I)
+ IF ( F2.GT.F3 ) D(I) =-D(I)
+ 20 CONTINUE
+ F1 = MIN(F2,F3)
+ F2 = MAX(F2,F3)
+ Z(I) = Z(I)+D(I)
+ CALL PHO_HARWGI(ECM,PTCUT,NKON,Z,F3)
+ IF ( F3.GT.F2 ) GOTO 20
+ ZZ = Z(I)-D(I)
+ Z(I) = ZZ+0.5*D(I)*(F3-F1)/MAX(TINY,F2+F2-F1-F3)
+ IF ( ABS(ZZ-Z(I)).GT.D(I)*0.1D0 )
+ & CALL PHO_HARWGI(ECM,PTCUT,NKON,Z,F1)
+ IF ( F1.LE.F2 ) Z(I) = ZZ
+ F2 = MAX(F1,F2)
+ 30 CONTINUE
+ IF((ABS(FOLD-F2)/MAX(TINY,F2).GT.0.002D0).OR.(IT.LT.3)) GOTO 10
+
+ IF(F2.GT.FF(NKON)) THEN
+ FF(NKON) = MAX(F2,0.D0)
+ XM1(NKON) = X1
+ XM2(NKON) = X2
+ PTM(NKON) = PT
+ ZMX(1,NKON) = Z(1)
+ ZMX(2,NKON) = Z(2)
+ ZMX(3,NKON) = Z(3)
+ DMX(1,NKON) = D(1)
+ DMX(2,NKON) = D(2)
+ DMX(3,NKON) = D(3)
+ IMX(NKON) = IT
+ IPO(NKON) = IST
+ ENDIF
+C
+ 50 CONTINUE
+ 35 CONTINUE
+ 40 CONTINUE
+
+C debug output
+ IF(IDEB(38).GE.5) THEN
+ WRITE(LO,'(/1X,A)')
+ & 'PHO_HARWGX: maximum of weight (I,IT,IS,FF,Z(1-3),D(1-3))'
+ DO 60 I=1,NKM
+ IF(IMX(I).NE.0) WRITE(LO,'(1X,I2,I3,I2,7E10.3)') I,IMX(I),
+ & IPO(I),FF(I),ZMX(1,I),ZMX(2,I),ZMX(3,I),DMX(1,I),
+ & DMX(2,I),DMX(3,I)
+ 60 CONTINUE
+ ENDIF
+
+ DO 70 I=-1,Max_pro_2
+ HWgx(I) = MAX(FF(IFTAB(I))*Hfac(I),0.D0)
+ 70 CONTINUE
+
+C debug output
+ IF(IDEB(38).GE.5) THEN
+ WRITE(LO,'(/1X,A)') 'PHO_HARWGX: total weights'
+ WRITE(LO,'(5X,A)') 'I X1 X2 PT HWgx(I) FDIS'
+ DO 80 I=-1,Max_pro_2
+ IF((IFTAB(I).NE.0).AND.(HWgx(I).GT.0.D0)) THEN
+ MSPR = I
+ X1 = MIN(XM1(IFTAB(I)),0.9999999999D0)
+ X2 = MIN(XM2(IFTAB(I)),0.9999999999D0)
+ PT = PTM(IFTAB(I))
+ CALL PHO_HARWGH(PDS,PDA,PDB,FDIS)
+ WRITE(LO,'(1X,I3,5E12.3)') I,X1,X2,PT,HWgx(I),FDIS
+ ENDIF
+ 80 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_HARWGI
+ SUBROUTINE PHO_HARWGI(ECMX,PTCUT,NKON,Z,FDIS)
+C**********************************************************************
+C
+C auxiliary subroutine to find maximum of remaining weight
+C
+C input: ECMX current CMS energy
+C PTCUT current pt cutoff
+C NKON process label 1..5 resolved
+C 6..7 direct particle 1
+C 8..9 direct particle 2
+C 10 double direct
+C Z(3) transformed variable
+C
+C output: remaining weight
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION Z(3)
+
+ PARAMETER ( NKM = 10 )
+ PARAMETER ( TINY = 1.D-30,
+ & TINY6 = 1.D-06 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+
+ DOUBLE PRECISION PHO_ALPHAS,pho_alphae
+ DIMENSION F(NKM),PDA(-6:6),PDB(-6:6)
+
+ FDIS = 0.D0
+
+ IF(IDEB(64).GE.25) WRITE(LO,'(1X,A,/5X,5E12.3,I5)')
+ & 'PHO_HARWGI: ECM,PT,Z,NK',ECMX,PTCUT,Z,NKON
+C check input values
+ IF ( Z(1).LT.0.D0 .OR. Z(1).GT.1.D0 ) RETURN
+ IF ( Z(2).LT.0.D0 .OR. Z(2).GT.1.D0 ) RETURN
+ IF ( Z(3).LT.0.D0 .OR. Z(3).GT.1.D0 ) RETURN
+C transformations
+ Y1 = EXP(ALNH*Z(1))
+ IF(NKON.LE.5) THEN
+C resolved kinematic
+ Y2 =-(1.D0-Y1)+2.D0*(1.D0-Y1)*Z(2)
+ X1 = 0.5D0*(Y2+SQRT(Y2*Y2+4.D0*Y1))
+ X2 = X1-Y2
+ X1 = MIN(X1,0.999999999999D0)
+ X2 = MIN(X2,0.999999999999D0)
+ ELSE IF(NKON.LE.7) THEN
+C direct kinematic 1
+ X1 = 1.D0
+ X2 = MIN(Y1,0.999999999999D0)
+ ELSE IF(NKON.LE.9) THEN
+C direct kinematic 2
+ X1 = MIN(Y1,0.999999999999D0)
+ X2 = 1.D0
+ ELSE
+C double direct kinematic
+ X1 = 1.D0
+ X2 = 1.D0
+ ENDIF
+ W = SQRT(MAX(TINY,1.D0-AH/Y1))
+ V =-0.5D0+W*(Z(3)-0.5D0)
+ U =-(1.D0+V)
+ PT = MAX(SQRT(U*V*Y1*ECMX*ECMX),PTCUT)
+
+C set hard scale QQ for alpha and partondistr.
+ IF ( NQQAL.EQ.1 ) THEN
+ QQAL = AQQAL*PT*PT
+ ELSEIF ( NQQAL.EQ.2 ) THEN
+ QQAL = AQQAL*Y1*ECMX*ECMX*U*V/(1.+V*V+U*U)
+ ELSEIF ( NQQAL.EQ.3 ) THEN
+ QQAL = AQQAL*Y1*ECMX*ECMX
+ ELSEIF ( NQQAL.EQ.4 ) THEN
+ QQAL = AQQAL*Y1*ECMX*ECMX*(U*V)**(1./3.)
+ ENDIF
+ IF ( NQQPD.EQ.1 ) THEN
+ QQPD = AQQPD*PT*PT
+ ELSEIF ( NQQPD.EQ.2 ) THEN
+ QQPD = AQQPD*Y1*ECMX*ECMX*U*V/(1.+V*V+U*U)
+ ELSEIF ( NQQPD.EQ.3 ) THEN
+ QQPD = AQQPD*Y1*ECMX*ECMX
+ ELSEIF ( NQQPD.EQ.4 ) THEN
+ QQPD = AQQPD*Y1*ECMX*ECMX*(U*V)**(1./3.)
+ ENDIF
+C
+ IF(NKON.LE.5) THEN
+ DO 10 N=1,5
+ F(N) = 0.D0
+ 10 CONTINUE
+C resolved processes
+ ALPHA1 = PHO_ALPHAS(QQAL,3)
+ ALPHA2 = ALPHA1
+ CALL PHO_PDF(1,X1,QQPD,0.D0,PDA)
+ CALL PHO_PDF(2,X2,QQPD,0.D0,PDB)
+C calculate full distribution FDIS
+ DO 20 I=1,NF
+ F(2) = F(2)+PDA(I)*PDB(-I)+PDA(-I)*PDB( I)
+ F(3) = F(3)+PDA(I)*PDB( I)+PDA(-I)*PDB(-I)
+ F(4) = F(4)+PDA(I)+PDA(-I)
+ F(5) = F(5)+PDB(I)+PDB(-I)
+20 CONTINUE
+ F(1) = PDA(0)*PDB(0)
+ T = PDA(0)*F(5)+PDB(0)*F(4)
+ F(5) = F(4)*F(5)-(F(2)+F(3))
+ F(4) = T
+ ELSE IF(NKON.LE.7) THEN
+C direct processes particle 1
+ IF(IDPDG1.EQ.22) THEN
+ ALPHA1 = pho_alphae(QQAL)
+ CH1 = 4.D0/9.D0
+ CH2 = 3.D0/9.D0
+ ELSE IF(IDPDG1.EQ.990) THEN
+ ALPHA1 = PARMDL(74)
+ CH1 = 1.D0
+ CH2 = 0.D0
+ ELSE
+ FDIS = -1.D0
+ RETURN
+ ENDIF
+ ALPHA2 = PHO_ALPHAS(QQAL,2)
+ CALL PHO_PDF(2,X2,QQPD,0.D0,PDB)
+ F(6) = 0.D0
+ DO 30 I=1,NF
+ F(6) = F(6)+(PDB(I)+PDB(-I))*(CH1-CH2*MOD(I,2))
+ 30 CONTINUE
+ F(7) = PDB(0)
+ ELSE IF(NKON.LE.9) THEN
+C direct processes particle 2
+ ALPHA1 = PHO_ALPHAS(QQAL,1)
+ IF(IDPDG2.EQ.22) THEN
+ ALPHA2 = pho_alphae(QQAL)
+ CH1 = 4.D0/9.D0
+ CH2 = 3.D0/9.D0
+ ELSE IF(IDPDG2.EQ.990) THEN
+ ALPHA2 = PARMDL(74)
+ CH1 = 1.D0
+ CH2 = 0.D0
+ ELSE
+ FDIS = -1.D0
+ RETURN
+ ENDIF
+ CALL PHO_PDF(1,X1,QQPD,0.D0,PDA)
+ F(8) = 0.D0
+ DO 40 I=1,NF
+ F(8) = F(8)+(PDA(I)+PDA(-I))*(CH1-CH2*MOD(I,2))
+ 40 CONTINUE
+ F(9) = PDA(0)
+ ELSE
+C double direct process
+ SSR = ECMX*ECMX
+ IF(IDPDG1.EQ.22) THEN
+ ALPHA1 = pho_alphae(SSR)
+ ELSE IF(IDPDG1.EQ.990) THEN
+ ALPHA1 = PARMDL(74)
+ ELSE
+ FDIS = -1.D0
+ RETURN
+ ENDIF
+ IF(IDPDG2.EQ.22) THEN
+ ALPHA2 = pho_alphae(SSR)
+ ELSE IF(IDPDG2.EQ.990) THEN
+ ALPHA2 = PARMDL(74)
+ ELSE
+ FDIS = -1.D0
+ RETURN
+ ENDIF
+ F(10) = 1.D0
+ ENDIF
+
+ FDIS = MAX(0.D0,F(NKON)*ALPHA1*ALPHA2)
+
+C debug output
+ IF(IDEB(64).GE.20) WRITE(LO,'(1X,A,/2X,I3,2I6,7E11.3)')
+ & 'PHO_HARWGI: NKON,ID1,ID2,AL1,AL2,X1,X2,PT,F(NKON),FDIS',
+ & NKON,IDPDG1,IDPDG2,ALPHA1,ALPHA2,X1,X2,PT,F(NKON),FDIS
+
+ END
+
+CDECK ID>, PHO_HARINI
+ SUBROUTINE PHO_HARINI(IP,IDP1,IDP2,PV1,PV2,NOUT,MODE)
+C**********************************************************************
+C
+C initialize calculation of hard cross section
+C
+C must not be called during MC generation
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+
+ double precision pho_alphas
+
+ CHARACTER*20 RFLAG
+
+C set local Pomeron c.m. system data
+ IDPDG1 = IDP1
+ IDPDG2 = IDP2
+ PVIRTP(1) = PV1
+ PVIRTP(2) = PV2
+C initialize PDFs
+ CALL PHO_ACTPDF(IDPDG1,1)
+ CALL PHO_ACTPDF(IDPDG2,2)
+C initialize alpha_s calculation
+ DUMMY = PHO_ALPHAS(0.D0,-4)
+C initialize scales with defaults
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)) THEN
+ IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ AQQAL = PARMDL(83)
+ AQQALI = PARMDL(86)
+ AQQALF = PARMDL(89)
+ AQQPD = PARMDL(92)
+ NQQAL = IPAMDL(83)
+ NQQALI = IPAMDL(86)
+ NQQALF = IPAMDL(89)
+ NQQPD = IPAMDL(92)
+ ELSE
+ AQQAL = PARMDL(82)
+ AQQALI = PARMDL(85)
+ AQQALF = PARMDL(88)
+ AQQPD = PARMDL(91)
+ NQQAL = IPAMDL(82)
+ NQQALI = IPAMDL(85)
+ NQQALF = IPAMDL(88)
+ NQQPD = IPAMDL(91)
+ ENDIF
+ ELSE IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ AQQAL = PARMDL(82)
+ AQQALI = PARMDL(85)
+ AQQALF = PARMDL(88)
+ AQQPD = PARMDL(91)
+ NQQAL = IPAMDL(82)
+ NQQALI = IPAMDL(85)
+ NQQALF = IPAMDL(88)
+ NQQPD = IPAMDL(91)
+ ELSE
+ AQQAL = PARMDL(81)
+ AQQALI = PARMDL(84)
+ AQQALF = PARMDL(87)
+ AQQPD = PARMDL(90)
+ NQQAL = IPAMDL(81)
+ NQQALI = IPAMDL(84)
+ NQQALF = IPAMDL(87)
+ NQQPD = IPAMDL(90)
+ ENDIF
+ IF(PARMDL(109+IP).LT.DEPS) PARMDL(109+IP) = AQQAL
+ IF(PARMDL(113+IP).LT.DEPS) PARMDL(113+IP) = AQQALI
+ IF(PARMDL(117+IP).LT.DEPS) PARMDL(117+IP) = AQQALF
+ IF(PARMDL(121+IP).LT.DEPS) PARMDL(121+IP) = AQQPD
+ IF(IPAMDL(64+IP).LT.0) IPAMDL(64+IP) = NQQAL
+ IF(IPAMDL(68+IP).LT.0) IPAMDL(68+IP) = NQQALI
+ IF(IPAMDL(72+IP).LT.0) IPAMDL(72+IP) = NQQALF
+ IF(IPAMDL(76+IP).LT.0) IPAMDL(76+IP) = NQQPD
+ AQQAL = PARMDL(109+IP)
+ AQQALI = PARMDL(113+IP)
+ AQQALF = PARMDL(117+IP)
+ AQQPD = PARMDL(121+IP)
+ NQQAL = IPAMDL(64+IP)
+ NQQALI = IPAMDL(68+IP)
+ NQQALF = IPAMDL(72+IP)
+ NQQPD = IPAMDL(76+IP)
+ PTCUT(1) = PARMDL(36)
+ PTCUT(2) = PARMDL(37)
+ PTCUT(3) = PARMDL(38)
+ PTCUT(4) = PARMDL(39)
+ PTANO(1) = PARMDL(130)
+ PTANO(2) = PARMDL(131)
+ PTANO(3) = PARMDL(132)
+ PTANO(4) = PARMDL(133)
+ RFLAG = '(energy-independent)'
+ IF(IPAMDL(7).GT.0) RFLAG = '(energy-dependent)'
+
+C write out all settings
+C *** Commented by Chiara
+C IF((IDEB(66).GE.15).OR.(MODE.GT.0)) THEN
+C WRITE(NOUT,1050) IP,IDPDG1,IDPDG2,PTCUT(IP),RFLAG,
+C & PDFNAM(1),IGRP(1),ISET(1),IEXT(1),
+C & PDFNAM(2),IGRP(2),ISET(2),IEXT(2),
+C & PDFLAM,NF,NQQAL,AQQAL,NQQPD,AQQPD
+C1050 FORMAT(/,
+C & ' PHO_HARINI: hard scattering parameters for IP:',I3/,
+C & 5X,'particle 1 / particle 2:',2I8,/,
+C & 5X,'min. PT :',F7.1,2X,A,/,
+C & 5X,'PDF side 1:',2X,A8,' IGRP/ISET/IEXT ',3I4,/,
+C & 5X,'PDF side 2:',2X,A8,' IGRP/ISET/IEXT ',3I4,/,
+C & 5X,'LAMBDA1,2 (4 active flavours):',2F8.3,/,
+C & 5X,'max. number of active flavours NF :',I3,/,
+C & 5X,'NQQAL/AQQAL/NQQPD/AQQPD:',I5,F8.3,I5,F8.3)
+C ENDIF
+
+ END
+
+CDECK ID>, PHO_HARINT
+ SUBROUTINE PHO_HARINT(IPP,ECM,P2V1,P2V2,I1,I2,K1,K2,MSPOM)
+C**********************************************************************
+C
+C interpolate cross sections and weights for hard scattering
+C
+C input: IPP particle combination (neg. for add. user cuts)
+C ECM CMS energy (GeV)
+C P2V1/2 particle virtualities (pos., GeV**2)
+C I1 first subprocess to calculate
+C I2 last subprocess to calculate
+C <-1 only scales and cutoffs calculated
+C K1 first variable to calculate
+C K2 last variable to calculate
+C MSPOM cross sections to use for pt distribution
+C 0 reggeon
+C >0 pomeron
+C
+C for K1 < 3 the soft pt distribution is also calculated
+C
+C output: interpolated values in HWgx, HSig, Hdpt
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-15,
+ & DEPS2 = 2.D-15 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C data needed for soft-pt calculation
+ DOUBLE PRECISION SIGS,DSIGHP,SIGH,FS,FH,BETAS,AAS,PTCON
+ COMMON /POINT3/ SIGS,DSIGHP,SIGH,FS,FH,BETAS(3),AAS,PTCON
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+C parameters for DGLAP backward evolution in ISR
+ INTEGER NFSISR
+ DOUBLE PRECISION Q2MISR,PMISR,ZMISR,AL2ISR
+ COMMON /PODGL1/ Q2MISR(2),PMISR(2),ZMISR(2),AL2ISR(2),NFSISR
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C interpolation tables for hard cross section and MC selection weights
+ INTEGER Max_tab_E,Max_tab_Q2,Max_pro_tab
+ PARAMETER ( Max_tab_E = 20, Max_tab_Q2 = 10, Max_pro_tab = 16 )
+ INTEGER IH_Q2a_up,IH_Q2b_up,IH_Ecm_up
+ DOUBLE PRECISION Hfac_tab,HWgx_tab,HSig_tab,Hdpt_tab,
+ & HQ2a_tab,HQ2b_tab,HEcm_tab
+ COMMON /POHTAB/
+ & Hfac_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HWgx_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HSig_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & Hdpt_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HQ2a_tab(1:Max_tab_Q2,0:4),HQ2b_tab(1:Max_tab_Q2,0:4),
+ & HEcm_tab(1:Max_tab_E,0:4),
+ & IH_Q2a_up(0:4),IH_Q2b_up(0:4),IH_Ecm_up(0:4)
+C data on most recent hard scattering
+ INTEGER IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+ DOUBLE PRECISION PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,QQPD,QQAL,
+ & PDF1,PDF2,WEIGHT,PHI1,PHI2,PHO1,PHO2
+ COMMON /POCKIN/ PTWANT,AS,AH,ALNS,ALNH,Z1MAX,Z1DIF,Z2MAX,Z2DIF,
+ & PT,PTfin,ETAC,ETAD,X1,X2,V,U,W,W1,AXX,
+ & QQPD,QQAL,PDF1(-6:6),PDF2(-6:6),WEIGHT,
+ & PHI1(5),PHI2(5),PHO1(5),PHO2(5),
+ & IA,IB,IC,ID,IV1,IV2,MSPR,IREJSC
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+
+ DOUBLE PRECISION XP,PTS
+ DIMENSION XP(2),PTS(0:2,2)
+
+ INTEGER IV
+ DIMENSION IV(2)
+
+ IF(IDEB(58).GE.25) WRITE(LO,'(1X,2A,/,5X,I2,3E12.3,5I4)')
+ & 'PHO_HARINT: called with ',
+ & 'IPP,ECM,P2V1,P2V2,I1,I2,K1,K2,MSPOM',
+ & IPP,ECM,P2V1,P2V2,I1,I2,K1,K2,MSPOM
+
+ IP = ABS(IPP)
+ IF(IPP.GT.0) THEN
+C default minimum bias cutoff
+ PTCUT(IP) = pho_ptcut(ECM,IP)
+ ELSE
+C user defined additional cutoff
+ PTCUT(IP) = HSWCUT(4+IP)
+ ENDIF
+ PTWANT = PTCUT(IP)
+
+C ISR cutoffs
+ Q2CUT = MIN(PTWANT**2,PARMDL(125+IP))
+ Q2MISR(1) = MAX(P2V1,Q2CUT)
+ Q2MISR(2) = MAX(P2V2,Q2CUT)
+C cutoff for direct photon contribution to photon PDF
+ PTANO(IP) = MIN(PTCUT(IP),PARMDL(129+IP))
+ PTA1 = PTANO(IP)
+C scales for hard scattering
+ AQQAL = PARMDL(109+IP)
+ AQQALI = PARMDL(113+IP)
+ AQQALF = PARMDL(117+IP)
+ AQQPD = PARMDL(121+IP)
+ NQQAL = IPAMDL(64+IP)
+ NQQALI = IPAMDL(68+IP)
+ NQQALF = IPAMDL(72+IP)
+ NQQPD = IPAMDL(76+IP)
+ IF(IDEB(58).GE.15) WRITE(LO,'(1X,A,4I3,4E10.3)')
+ & 'PHO_HARINT: scales:',
+ & NQQAL,NQQALI,NQQALF,NQQPD,AQQAL,AQQALI,AQQALF,AQQPD
+
+ IF(I2.LT.-1) RETURN
+
+ IL = IP
+ IF(IPP.LT.0) IL = 0
+
+C double-log interpolation
+ IF(ECM.LT.2.1D0*PTCUT(IP)) THEN
+ DO 50 M=I1,I2
+ Hfac(M) = 0.D0
+ HWgx(M) = 0.D0
+ HSig(M) = 0.D0
+ Hdpt(M) = 0.D0
+ 50 CONTINUE
+ ELSE
+ I=1
+ 310 CONTINUE
+ I = I+1
+ IF((ECM.GT.HEcm_tab(I,IL)).AND.(I.LT.IH_Ecm_up(IL))) GOTO 310
+
+ Ia = 1
+ Ib = 1
+ fac = LOG(ECM/HEcm_tab(I-1,IL))
+ & /LOG(HEcm_tab(I,IL)/HEcm_tab(I-1,IL))
+ do M=I1,I2
+C factor due to phase space integration
+ XX = LOG(Hfac_tab(M,I-1,Ia,Ib,IL)+DEPS) + fac
+ & *LOG((Hfac_tab(M,I,Ia,Ib,IL)+DEPS)
+ & /(Hfac_tab(M,I-1,Ia,Ib,IL)+DEPS))
+ XX = EXP(XX)
+ IF(XX.LT.DEPS2) XX = 0.D0
+ Hfac(M) = XX
+C max. weight
+ XX = LOG(HWgx_tab(M,I-1,Ia,Ib,IL)+DEPS) + fac
+ & *LOG((HWgx_tab(M,I,Ia,Ib,IL)+DEPS)
+ & /(HWgx_tab(M,I-1,Ia,Ib,IL)+DEPS))
+ XX = EXP(XX)
+ IF(XX.LT.DEPS2) XX = 0.D0
+ HWgx(M) = XX*1.2D0
+C hard cross section
+ XX = LOG(HSig_tab(M,I-1,Ia,Ib,IL)+DEPS) + fac
+ & *LOG((HSig_tab(M,I,Ia,Ib,IL)+DEPS)
+ & /(HSig_tab(M,I-1,Ia,Ib,IL)+DEPS))
+ XX = EXP(XX)
+ IF(XX.LT.DEPS2) XX = 0.D0
+ HSig(M) = XX
+C differential hard cross section
+ XX = LOG(Hdpt_tab(M,I-1,Ia,Ib,IL)+DEPS) + fac
+ & *LOG((Hdpt_tab(M,I,Ia,Ib,IL)+DEPS)
+ & /(Hdpt_tab(M,I-1,Ia,Ib,IL)+DEPS))
+ XX = EXP(XX)
+ IF(XX.LT.DEPS2) XX = 0.D0
+ Hdpt(M) = XX
+ enddo
+ ENDIF
+
+ IF((K1.LT.3).AND.(K2.GE.3)) THEN
+C cross check
+ IF((I1.GT.9).OR.(I2.LT.9)) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_HARINT: ',
+ & 'hard cross section not calculated ',I1,I2
+ ENDIF
+ SIGH = HSig(9)
+ DSIGHP = Hdpt(9)
+C load soft cross sections from interpolation table
+ IF(ECM.LE.SIGECM(IP,1)) THEN
+ L1 = 1
+ L2 = 1
+ ELSE IF(ECM.LT.SIGECM(IP,ISIMAX)) THEN
+ DO 55 I=2,ISIMAX
+ IF(ECM.LE.SIGECM(IP,I)) GOTO 205
+ 55 CONTINUE
+ 205 CONTINUE
+ L1 = I-1
+ L2 = I
+ ELSE
+ WRITE(LO,'(/1X,A,I3,1P,2E11.3)')
+ & 'PHO_HARINT: energy too high (IP,Ecm,Emax)',
+ & IP,ECM,SIGECM(IP,ISIMAX)
+ CALL PHO_PREVNT(-1)
+ L1 = ISIMAX-1
+ L2 = ISIMAX
+ ENDIF
+ FAC2=0.D0
+ IF(L1.NE.L2) FAC2=LOG(ECM/SIGECM(IP,L1))
+ & /LOG(SIGECM(IP,L2)/SIGECM(IP,L1))
+ FAC1=1.D0-FAC2
+ SIGS = FAC2*(SIGTAB(IP,56,L2)+SIGTAB(IP,57,L2))+
+ & FAC1*(SIGTAB(IP,56,L1)+SIGTAB(IP,57,L1))
+
+ FS = FPS(IP)
+ FH = FPH(IP)
+ CALL PHO_SOFTPT(-1,PTWANT,PTWANT,XP,IV,PTS)
+ ENDIF
+
+ 300 CONTINUE
+
+C debug output
+ IF(IDEB(58).GE.15) THEN
+ WRITE(LO,'(1X,A,I10,3I2,2E10.3)')
+ & 'PHO_HARINT: weights EV,IP,K1/2,ECM,PTC',
+ & KEVENT,IP,K1,K2,ECM,PTCUT(IP)
+ DO 162 M=I1,I2
+ WRITE(LO,'(5X,2I3,1p,4E12.3)')
+ & M,MH_pro_on(M,IP),Hfac(M),HWgx(M),HSig(M),Hdpt(M)
+ 162 CONTINUE
+ ENDIF
+
+ END
+
+ DOUBLE PRECISION FUNCTION PHO_PTCUT(ECM,IP)
+C***********************************************************************
+C
+C calculate energy-dependent transverse momentum cutoff
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ double precision ECM
+ integer IP
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+ pho_ptcut = PARMDL(35+IP)
+
+ IF(IPAMDL(7).EQ.1) THEN
+C Bopp et al. type (DPMJET)
+ pho_ptcut = PARMDL(35+IP)
+ & + max(0.D0,0.12D0*(LOG10(ECM/50.D0))**3)
+ ELSE IF(IPAMDL(7).EQ.2) THEN
+C Gribov-Levin-Ryskin type
+ pho_ptcut = PARMDL(35+IP)
+ & + 0.065D0*exp(0.9D0*sqrt(2.D0*log(Ecm)))
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_HARMCI
+ SUBROUTINE PHO_HARMCI(IP,EMAXF)
+C**********************************************************************
+C
+C initialize MC sampling and calculate hard cross section
+C
+C input: IP particle combination (neg. number for user cut)
+C EMAXF maximum CMS energy for
+C interpolation table in reference to PTCUT(1..4)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (DEPS = 1.D-10,
+ & PLARGE = 1.D20 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C names of hard scattering processes
+ INTEGER Max_pro_1
+ PARAMETER ( Max_pro_1 = 16 )
+ CHARACTER*18 PROC
+ COMMON /POHPRO/ PROC(0:Max_pro_1)
+C hard cross sections and MC selection weights
+ INTEGER Max_pro_2
+ PARAMETER ( Max_pro_2 = 16 )
+ INTEGER IHa_last,IHb_last,MH_pro_on,MH_tried,
+ & MH_acc_1,MH_acc_2
+ DOUBLE PRECISION Hfac,HWgx,HSig,Hdpt,HEcm_last,HQ2a_last,HQ2b_last
+ COMMON /POHRCS/ Hfac(-1:Max_pro_2),HWgx(-1:Max_pro_2),
+ & HSig(-1:Max_pro_2),Hdpt(-1:Max_pro_2),
+ & HEcm_last,HQ2a_last,HQ2b_last,IHa_last,IHb_last,
+ & MH_pro_on(-1:Max_pro_2,0:4),MH_tried(-1:Max_pro_2,0:4),
+ & MH_acc_1(-1:Max_pro_2,0:4),MH_acc_2(-1:Max_pro_2,0:4)
+C interpolation tables for hard cross section and MC selection weights
+ INTEGER Max_tab_E,Max_tab_Q2,Max_pro_tab
+ PARAMETER ( Max_tab_E = 20, Max_tab_Q2 = 10, Max_pro_tab = 16 )
+ INTEGER IH_Q2a_up,IH_Q2b_up,IH_Ecm_up
+ DOUBLE PRECISION Hfac_tab,HWgx_tab,HSig_tab,Hdpt_tab,
+ & HQ2a_tab,HQ2b_tab,HEcm_tab
+ COMMON /POHTAB/
+ & Hfac_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HWgx_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HSig_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & Hdpt_tab(-1:Max_pro_tab,Max_tab_E,Max_tab_Q2,Max_tab_Q2,0:4),
+ & HQ2a_tab(1:Max_tab_Q2,0:4),HQ2b_tab(1:Max_tab_Q2,0:4),
+ & HEcm_tab(1:Max_tab_E,0:4),
+ & IH_Q2a_up(0:4),IH_Q2b_up(0:4),IH_Ecm_up(0:4)
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ COMPLEX*16 DSIG
+ DIMENSION DSIG(0:Max_pro_2),DSPT(0:Max_pro_2)
+
+C initialization for all pt cutoffs
+ I = ABS(IP)
+ IL = I
+ IF(IP.LT.0) THEN
+ IL = 0
+ PTC = HSWCUT(4+I)
+ else
+ PTC = pho_ptcut(parmdl(19),I)
+ ENDIF
+
+C skip unassigned PTCUT
+ IF(PTC.LT.0.5D0) GOTO 1000
+
+ IH_Q2a_up(I) = 1
+ IH_Q2b_up(I) = 1
+ do ib=1,Max_tab_Q2
+ do ia=1,Max_tab_Q2
+ do ie=1,Max_tab_E
+ do m=-1,Max_pro_2
+ Hfac_tab(M,Ie,Ia,Ib,I) = 0.D0
+ HWgx_tab(M,Ie,Ia,Ib,I) = 0.D0
+ HSig_tab(M,Ie,Ia,Ib,I) = 0.D0
+ Hdpt_tab(M,Ie,Ia,Ib,I) = 0.D0
+ enddo
+ enddo
+ enddo
+ enddo
+
+ ELLOW = LOG(2.05*PTC)
+ DELTA = (LOG(EMAXF)-ELLOW)/DBLE(IH_Ecm_up(I)-1)
+C energy too low
+ IF(DELTA.LE.0.D0) GOTO 1000
+
+C switch between external particles and Pomeron
+ IF(I.EQ.4) THEN
+ IDP1 = 990
+ PV1 = 0.D0
+ IDP2 = 990
+ PV2 = 0.D0
+ ELSE IF(I.EQ.3) THEN
+ IDP1 = IFPAP(2)
+ PV1 = PVIRT(2)
+ IDP2 = 990
+ PV2 = 0.D0
+ ELSE IF(I.EQ.2) THEN
+ IDP1 = IFPAP(1)
+ PV1 = PVIRT(1)
+ IDP2 = 990
+ PV2 = 0.D0
+ ELSE
+ IDP1 = IFPAP(1)
+ PV1 = PVIRT(1)
+ IDP2 = IFPAP(2)
+ PV2 = PVIRT(2)
+ ENDIF
+
+C initialize PT scales
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)) THEN
+ IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ FPS(I) = PARMDL(105)
+ FPH(I) = PARMDL(106)
+ ELSE
+ FPS(I) = PARMDL(103)
+ FPH(I) = PARMDL(104)
+ ENDIF
+ ELSE IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ FPS(I) = PARMDL(103)
+ FPH(I) = PARMDL(104)
+ ELSE
+ FPS(I) = PARMDL(101)
+ FPH(I) = PARMDL(102)
+ ENDIF
+
+C initialize hard scattering
+ IF(IP.GT.0) THEN
+ CALL PHO_HARINI(I,IDP1,IDP2,PV1,PV2,6,IDEB(8)+1)
+ ELSE
+ CALL PHO_HARINI(I,IDP1,IDP2,PV1,PV2,6,IDEB(8))
+ ENDIF
+
+C energy/virtuality grid
+ do Ie=1,IH_Ecm_up(IL)
+ HEcm_tab(Ie,IL) = EXP(ELLOW+DELTA*(IE-1))
+ enddo
+ do Ia=1,IH_Q2a_up(IL)
+ HQ2a_tab(Ia,IL) = 0.D0
+ enddo
+ do Ib=1,IH_Q2b_up(IL)
+ HQ2b_tab(Ib,IL) = 0.D0
+ enddo
+
+C initialization for several energies and particle virtualities
+ do Ie=1,IH_Ecm_up(IL)
+ do Ia=1,IH_Q2a_up(IL)
+ do Ib=1,IH_Q2b_up(IL)
+
+ EE = HEcm_tab(IE,IL)
+ Q2a = HQ2a_tab(Ia,IL)
+ Q2b = HQ2b_tab(Ib,IL)
+ CALL PHO_HARINT(IP,EE,0.D0,0.D0,0,-2,0,0,1)
+ IF(IDEB(8).GE.5) WRITE(LO,'(1X,A,2E10.3,2I7)')
+ & 'PHO_HARMCI: initialization PT,ECM,ID1,ID2:',
+ & PTCUT(I),EE,IDPDG1,IDPDG2
+ Hfac_tab(0,Ie,Ia,Ib,IL) = PTCUT(I)
+ CALL PHO_HARFAC(PTCUT(I),EE)
+ CALL PHO_HARWGX(PTCUT(I),EE)
+ CALL PHO_HARXTO(EE,PTCUT(I),PTCUT(I),DSIG,DSPT)
+ IF(IDEB(8).GE.10) THEN
+ WRITE(LO,'(1X,A,/,1X,A)')
+ & 'hard cross sections SIGH(mb),DSIG/DPT(mb/GeV**2)',
+ & '------------------------------------------------'
+ DO M=0,Max_pro_2
+ WRITE(LO,'(10X,A,1P2E14.4)')
+ & PROC(M),DREAL(DSIG(M)),DSPT(M)
+ ENDDO
+ ENDIF
+
+C store in interpolation tables
+ Hfac_tab(-1,IE,Ia,Ib,IL) = Hfac(-1)
+ HWgx_tab(-1,IE,Ia,Ib,IL) = HWgx(-1)
+ do M=0,Max_pro_2
+ Hfac_tab(M,IE,Ia,Ib,IL) = Hfac(M)
+ HWgx_tab(M,IE,Ia,Ib,IL) = HWgx(M)
+ HSig_tab(M,IE,Ia,Ib,IL) = DREAL(DSIG(M))*MH_pro_on(M,I)
+ Hdpt_tab(M,IE,Ia,Ib,IL) = DSPT(M)*MH_pro_on(M,I)
+ enddo
+
+C summed quantities
+ HSig_tab(9,IE,Ia,Ib,IL) = 0.D0
+ Hdpt_tab(9,IE,Ia,Ib,IL) = 0.D0
+ do M=1,8
+ IF(MH_pro_on(M,I).GT.0) THEN
+ HSig_tab(9,IE,Ia,Ib,IL) =
+ & HSig_tab(9,IE,Ia,Ib,IL) + HSig_tab(M,IE,Ia,Ib,IL)
+ Hdpt_tab(9,IE,Ia,Ib,IL) =
+ & Hdpt_tab(9,IE,Ia,Ib,IL) + Hdpt_tab(M,IE,Ia,Ib,IL)
+ ENDIF
+ enddo
+ HSig_tab(15,IE,Ia,Ib,IL) = 0.D0
+ Hdpt_tab(15,IE,Ia,Ib,IL) = 0.D0
+ do M=10,14
+ IF(MH_pro_on(M,I).GT.0) THEN
+ HSig_tab(15,IE,Ia,Ib,IL) =
+ & HSig_tab(15,IE,Ia,Ib,IL) + HSig_tab(M,IE,Ia,Ib,IL)
+ Hdpt_tab(15,IE,Ia,Ib,IL) =
+ & Hdpt_tab(15,IE,Ia,Ib,IL) + Hdpt_tab(M,IE,Ia,Ib,IL)
+ ENDIF
+ enddo
+ HSig_tab(0,IE,Ia,Ib,IL) =
+ & HSig_tab(9,IE,Ia,Ib,IL) + HSig_tab(15,IE,Ia,Ib,IL)
+ Hdpt_tab(0,IE,Ia,Ib,IL) =
+ & Hdpt_tab(9,IE,Ia,Ib,IL) + Hdpt_tab(15,IE,Ia,Ib,IL)
+
+ enddo
+ enddo
+ enddo
+
+C debug output of weights
+ 1000 CONTINUE
+ IF(IDEB(8).GE.5) THEN
+ WRITE(LO,'(/1X,A,5X,2I7,I3,F7.2,/1X,A)')
+ & 'PHO_HARMCI: weights, maxima (ID1/2,IP,PTC)',
+ & IDPDG1,IDPDG2,IP,PTCUT(I),
+ & '------------------------------------------'
+ DO M=-1,Max_pro_2
+ IF((M.EQ.0).OR.(M.EQ.9).OR.(M.EQ.15)) GOTO 512
+ WRITE(LO,'(2X,A,I3,2I7)')
+ & 'PHO_HARMCI: ECM Hfac, HWgx, HSig, Hdpt for MSTR,ID1,ID2',
+ & M,IDPDG1,IDPDG2
+ do k=1,IH_Ecm_up(IL)
+ do ia=1,IH_Q2a_up(IL)
+ do ib=1,IH_Q2b_up(IL)
+ WRITE(LO,'(3X,1p,7E10.3)') HEcm_tab(k,IL),
+ & HQ2a_tab(ia,IL),HQ2b_tab(ib,IL),
+ & Hfac_tab(M,k,ia,ib,IL),HWgx_tab(M,k,ia,ib,IL),
+ & HSig_tab(M,k,ia,ib,IL),Hdpt_tab(M,k,ia,ib,IL)
+ enddo
+ enddo
+ enddo
+ 512 CONTINUE
+ ENDDO
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_HARXR3
+ SUBROUTINE PHO_HARXR3(ECMH,PT,ETAC,ETAD,DSIGMC)
+C**********************************************************************
+C
+C differential cross section DSIG/(DETAC*DETAD*DPT)
+C
+C input: ECMH CMS energy
+C PT parton PT
+C ETAC pseudorapidity of parton C
+C ETAD pseudorapidity of parton D
+C
+C output: DSIGMC(0:15) QCD-PM cross sections dsigma/dpt/detac/detad
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY= 1.D-30, ONEP1=1.1, TINY6=1.D-06, EPS=1.D-20)
+
+ PARAMETER ( Max_pro_2 = 16 )
+ COMPLEX*16 DSIGMC
+ DIMENSION DSIGMC(0:Max_pro_2)
+ DIMENSION DSIGM(0:Max_pro_2)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+
+ DOUBLE PRECISION PHO_ALPHAS
+ DIMENSION PDA(-6:6),PDB(-6:6)
+
+ DO 10 I=1,9
+ DSIGMC(I) = CMPLX(0.D0,0.D0)
+ DSIGM(I) = 0.D0
+10 CONTINUE
+
+ EC = EXP(ETAC)
+ ED = EXP(ETAD)
+C kinematic conversions
+ XA = PT*(EC+ED)/ECMH
+ XB = XA/(EC*ED)
+ IF((XA.GE.1.D0).OR.(XB.GE.1.D0)) THEN
+ WRITE(LO,'(/1X,A,2E12.4)') 'PHO_HARXR3:ERROR:X1 OR X2 > 1',XA,XB
+ RETURN
+ ENDIF
+ SP = XA*XB*ECMH*ECMH
+ UP =-ECMH*PT*EC*XB
+ UP = UP/SP
+ TP =-(1.D0+UP)
+ UU = UP*UP
+ TT = TP*TP
+C set hard scale QQ for alpha and partondistr.
+ IF ( NQQAL.EQ.1 ) THEN
+ QQAL = AQQAL*PT*PT
+ ELSEIF ( NQQAL.EQ.2 ) THEN
+ QQAL = AQQAL*SP*UP*TP/(1.D0+TT+UU)
+ ELSEIF ( NQQAL.EQ.3 ) THEN
+ QQAL = AQQAL*SP
+ ELSEIF ( NQQAL.EQ.4 ) THEN
+ QQAL = AQQAL*SP*(UP*TP)**(1.D0/3.D0)
+ ENDIF
+ IF ( NQQPD.EQ.1 ) THEN
+ QQPD = AQQPD*PT*PT
+ ELSEIF ( NQQPD.EQ.2 ) THEN
+ QQPD = AQQPD*SP*UP*TP/(1.D0+TT+UU)
+ ELSEIF ( NQQPD.EQ.3 ) THEN
+ QQPD = AQQPD*SP
+ ELSEIF ( NQQPD.EQ.4 ) THEN
+ QQPD = AQQPD*SP*(UP*TP)**(1.D0/3.D0)
+ ENDIF
+
+ ALPHA = PHO_ALPHAS(QQAL,3)
+ FACTOR = PI2*GEV2MB*PT*(ALPHA/SP)**2*AKFAC
+C parton distributions (times x)
+ CALL PHO_PDF(1,XA,QQPD,0.D0,PDA)
+ CALL PHO_PDF(2,XB,QQPD,0.D0,PDB)
+ S1 = PDA(0)*PDB(0)
+ S2 = 0.D0
+ S3 = 0.D0
+ S4 = 0.D0
+ S5 = 0.D0
+ DO 20 I=1,NF
+ S2 = S2+PDA(I)*PDB(-I)+PDA(-I)*PDB( I)
+ S3 = S3+PDA(I)*PDB( I)+PDA(-I)*PDB(-I)
+ S4 = S4+PDA(I)+PDA(-I)
+ S5 = S5+PDB(I)+PDB(-I)
+20 CONTINUE
+C partial cross sections (including color and symmetry factors)
+C resolved photon matrix elements (light quarks)
+ DSIGM(1) = 2.25D0*(3.-((UP*TP)+UP/TT+TP/UU))
+ DSIGM(6) = (4.D0/9.D0)*(UU+TT)
+ DSIGM(8) = (4.D0/9.D0)*(1.D0+UU)/TT
+ DSIGM(2) = (16.D0/27.D0)*(UU+TT)/(UP*TP)-3.D0*DSIGM(6)
+ DSIGM(3) = ((1.D0+UU)/TT)-(4.D0/9.D0)*(1.D0+UU)/UP
+ DSIGM(4) = (9.D0/32.D0)*DSIGM(2)
+ DSIGM(5) = DSIGM(6)+DSIGM(8)-(8.D0/27.D0)*UU/TP
+ DSIGM(7) = 0.5D0*(DSIGM(8)+(4.D0/9.D0)*(1.D0+TT)/UU-
+ & (8.D0/27.D0)/(UP*TP))
+C
+ DSIGM(1) = FACTOR*DSIGM(1)*S1
+ DSIGM(2) = FACTOR*DSIGM(2)*S2
+ DSIGM(3) = FACTOR*DSIGM(3)*(PDA(0)*S5+PDB(0)*S4)
+ DSIGM(4) = FACTOR*DSIGM(4)*S1*NF
+ DSIGM(5) = FACTOR*DSIGM(5)*S2
+ DSIGM(6) = FACTOR*DSIGM(6)*S2*MAX(0,(NF-1))
+ DSIGM(7) = FACTOR*DSIGM(7)*S3
+ DSIGM(8) = FACTOR*DSIGM(8)*(S4*S5-(S2+S3))
+C complex part
+ X=ABS(TP-UP)
+ FAC2 = -LOG((X+2.D0)/(X+1.D-30))/PI
+C
+ DO 50 I=1,8
+ IF(DSIGM(I).LT.EPS) DSIGM(I) = 0.D0
+ DSIGMC(I) = CMPLX(DSIGM(I),DSIGM(I)*FAC2)
+ DSIGMC(9) = DSIGMC(9)+DSIGMC(I)
+ 50 CONTINUE
+ END
+
+CDECK ID>, PHO_HARXR2
+ SUBROUTINE PHO_HARXR2(ECMH,PT,ETAC,DSIGMC)
+C**********************************************************************
+C
+C differential cross section DSIG/(DETAC*DPT)
+C
+C input: ECMH CMS energy
+C PT parton PT
+C ETAC pseudorapidity of parton C
+C
+C output: DSIGMC(0:15) QCD-PM cross sections dsigma/dpt/detac
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY= 1.D-20 )
+
+ PARAMETER ( Max_pro_2 = 16 )
+ COMPLEX*16 DSIGMC
+ DIMENSION DSIGMC(0:Max_pro_2)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+
+ COMPLEX*16 DSIG1
+ DIMENSION DSIG1(0:Max_pro_2)
+ DIMENSION ABSZ(32),WEIG(32)
+
+ DO 10 M=1,9
+ DSIGMC(M) = CMPLX(0.D0,0.D0)
+ DSIG1(M) = 0.D0
+10 CONTINUE
+C
+ EC = EXP(ETAC)
+ ARG = ECMH/PT
+ IF ( ARG.LE.EC .OR. ARG.LE.1.D0/EC ) RETURN
+ EDU = LOG(ARG-EC)
+ EDL =-LOG(ARG-1.D0/EC)
+ NPOINT = NGAUET
+ CALL PHO_GAUSET(EDL,EDU,NPOINT,ABSZ,WEIG)
+ DO 30 I=1,NPOINT
+ CALL PHO_HARXR3(ECMH,PT,ETAC,ABSZ(I),DSIG1)
+ DO 20 M=1,9
+ PCTRL= DREAL(DSIG1(M))/TINY
+ IF( PCTRL.GE.1.D0 ) THEN
+ DSIGMC(M) = DSIGMC(M)+WEIG(I)*DSIG1(M)
+ ENDIF
+20 CONTINUE
+30 CONTINUE
+ END
+
+CDECK ID>, PHO_HARXD2
+ SUBROUTINE PHO_HARXD2(ECMH,PT,ETAC,DSIGMC)
+C**********************************************************************
+C
+C differential cross section DSIG/(DETAC*DPT) for direct processes
+C
+C input: ECMH CMS energy of scattering system
+C PT parton PT
+C ETAC pseudorapidity of parton C
+C
+C output: DSIGMC(0:15) QCD-PM cross sections dsigma/dpt/detac
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( Max_pro_2 = 16 )
+ COMPLEX*16 DSIGMC
+ DIMENSION DSIGMC(0:Max_pro_2)
+ PARAMETER ( TINY= 1.D-30, ONEP1=1.1, TINY6=1.D-06, EPS=1.D-25)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DOUBLE PRECISION PHO_ALPHAS,pho_alphae
+ DIMENSION PDA(-6:6),PDB(-6:6),DSIGM(0:Max_pro_2)
+
+* ONE32=1.D0/9.D0
+* TWO32=4.D0/9.D0
+ DO 10 I=10,13
+ DSIGMC(I) = CMPLX(0.D0,0.D0)
+ DSIGM(I) = 0.D0
+ 10 CONTINUE
+ DSIGMC(15) = CMPLX(0.D0,0.D0)
+ DSIGM(15) = 0.D0
+
+C direct particle 1
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)) THEN
+ EC = EXP(ETAC)
+ ED = ECMH/PT-EC
+C kinematic conversions
+ XA = 1.D0
+ XB = 1.D0/(EC*ED)
+ IF ( XB.GE.1.D0 ) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_HARXD2:ERROR: XB>1 (XA,XB)',XA,XB
+ RETURN
+ ENDIF
+ SP = XA*XB*ECMH*ECMH
+ UP =-ECMH*PT*EC*XB
+ UP = UP/SP
+ TP =-(1.D0+UP)
+ UU = UP*UP
+ TT = TP*TP
+C set hard scale QQ for alpha and partondistr.
+ IF ( NQQAL.EQ.1 ) THEN
+ QQAL = AQQAL*PT*PT
+ ELSEIF ( NQQAL.EQ.2 ) THEN
+ QQAL = AQQAL*SP*UP*TP/(1.D0+TT+UU)
+ ELSEIF ( NQQAL.EQ.3 ) THEN
+ QQAL = AQQAL*SP
+ ELSEIF ( NQQAL.EQ.4 ) THEN
+ QQAL = AQQAL*SP*(UP*TP)**(1.D0/3.D0)
+ ENDIF
+ IF ( NQQPD.EQ.1 ) THEN
+ QQPD = AQQPD*PT*PT
+ ELSEIF ( NQQPD.EQ.2 ) THEN
+ QQPD = AQQPD*SP*UP*TP/(1.D0+TT+UU)
+ ELSEIF ( NQQPD.EQ.3 ) THEN
+ QQPD = AQQPD*SP
+ ELSEIF ( NQQPD.EQ.4 ) THEN
+ QQPD = AQQPD*SP*(UP*TP)**(1.D0/3.D0)
+ ENDIF
+
+ ALPHA2 = PHO_ALPHAS(QQAL,2)
+ IF(IDPDG1.EQ.22) THEN
+ ALPHA1 = pho_alphae(QQAL)
+ ELSE IF(IDPDG1.EQ.990) THEN
+ ALPHA1 = PARMDL(74)
+ ENDIF
+ FACTOR = -PI2*GEV2MB*UP/PT*ALPHA1*ALPHA2/SP*AKFAC
+C parton distribution (times x)
+ CALL PHO_PDF(2,XB,QQPD,0.D0,PDB)
+ S1 = PDB(0)
+C charge counting
+ S2 = 0.D0
+ S3 = 0.D0
+ IF(IDPDG1.EQ.22) THEN
+ DO 20 I=1,NF
+* IF(MOD(I,2).EQ.0) THEN
+* S2 = S2 + (PDB(I)+PDB(-I))*TWO32
+* S3 = S3 + TWO32
+* ELSE
+* S2 = S2 + (PDB(I)+PDB(-I))*ONE32
+* S3 = S3 + ONE32
+* ENDIF
+ S2 = S2 + (PDB(I)+PDB(-I))*Q_ch2(I)
+ S3 = S3 + Q_ch2(I)
+ 20 CONTINUE
+ ELSE IF(IDPDG1.EQ.990) THEN
+ DO 25 I=1,NF
+ S2 = S2 + PDB(I)+PDB(-I)
+ 25 CONTINUE
+ S3 = NF
+ ENDIF
+C partial cross sections (including color and symmetry factors)
+C direct photon matrix elements
+ DSIGM(10) = -8.D0/3.D0*(UU+1.D0)/UP
+ DSIGM(11) = (UU+TT)/(UP*TP)
+C
+ DSIGM(10) = FACTOR*DSIGM(10)*S2
+ DSIGM(11) = FACTOR*DSIGM(11)*S1*S3
+C complex part
+ X=ABS(TP-UP)
+ FAC2 = -LOG((X+2.D0)/(X+1.D-30))/PI
+C
+ DO 50 I=10,11
+ IF(DSIGM(I).LT.0.D0) THEN
+ WRITE(LO,'(1X,A,I3,1P,2E12.4)')
+ & 'PHO_HARXD2: neg. cross section',I,DSIGM(I),ECMH
+ DSIGM(I) = 0.D0
+ ENDIF
+ DSIGMC(I) = CMPLX(DSIGM(I),DSIGM(I)*FAC2)
+ DSIGMC(15) = DSIGMC(15)+DSIGMC(I)
+ 50 CONTINUE
+ ENDIF
+C
+C direct particle 2
+ IF((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ EC = EXP(ETAC)
+ ED = 1.D0/(ECMH/PT-1.D0/EC)
+C kinematic conversions
+ XA = PT*(EC+ED)/ECMH
+ XB = 1.D0
+ IF ( XA.GE.1.D0 ) THEN
+ WRITE(LO,'(/1X,A,2E12.4)')
+ & 'PHO_HARXD2:ERROR:XA>1 (XA,XB)',XA,XB
+ RETURN
+ ENDIF
+ SP = XA*XB*ECMH*ECMH
+ UP =-ECMH*PT*EC*XB
+ UP = UP/SP
+ TP =-(1.D0+UP)
+ UU = UP*UP
+ TT = TP*TP
+C set hard scale QQ for alpha and partondistr.
+ IF ( NQQAL.EQ.1 ) THEN
+ QQAL = AQQAL*PT*PT
+ ELSEIF ( NQQAL.EQ.2 ) THEN
+ QQAL = AQQAL*SP*UP*TP/(1.D0+TT+UU)
+ ELSEIF ( NQQAL.EQ.3 ) THEN
+ QQAL = AQQAL*SP
+ ELSEIF ( NQQAL.EQ.4 ) THEN
+ QQAL = AQQAL*SP*(UP*TP)**(1.D0/3.D0)
+ ENDIF
+ IF ( NQQPD.EQ.1 ) THEN
+ QQPD = AQQPD*PT*PT
+ ELSEIF ( NQQPD.EQ.2 ) THEN
+ QQPD = AQQPD*SP*UP*TP/(1.D0+TT+UU)
+ ELSEIF ( NQQPD.EQ.3 ) THEN
+ QQPD = AQQPD*SP
+ ELSEIF ( NQQPD.EQ.4 ) THEN
+ QQPD = AQQPD*SP*(UP*TP)**(1.D0/3.D0)
+ ENDIF
+
+ ALPHA1 = PHO_ALPHAS(QQAL,1)
+ IF(IDPDG2.EQ.22) THEN
+ ALPHA2 = pho_alphae(QQAL)
+ ELSE IF(IDPDG2.EQ.990) THEN
+ ALPHA2 = PARMDL(74)
+ ENDIF
+ FACTOR = -PI2*GEV2MB*TP/PT*ALPHA1*ALPHA2/SP*AKFAC
+C parton distribution (times x)
+ CALL PHO_PDF(1,XA,QQPD,0.D0,PDA)
+ S1 = PDA(0)
+C charge counting
+ S2 = 0.D0
+ S3 = 0.D0
+ IF(IDPDG2.EQ.22) THEN
+ DO 70 I=1,NF
+* IF(MOD(I,2).EQ.0) THEN
+* S2 = S2 + (PDA(I)+PDA(-I))*TWO32
+* S3 = S3 + TWO32
+* ELSE
+* S2 = S2 + (PDA(I)+PDA(-I))*ONE32
+* S3 = S3 + ONE32
+* ENDIF
+ S2 = S2 + (PDA(I)+PDA(-I))*Q_ch2(I)
+ S3 = S3 + Q_ch2(I)
+ 70 CONTINUE
+ ELSE IF(IDPDG2.EQ.990) THEN
+ DO 75 I=1,NF
+ S2 = S2 + PDA(I)+PDA(-I)
+ 75 CONTINUE
+ S3 = NF
+ ENDIF
+C partial cross sections (including color and symmetry factors)
+C direct photon matrix elements
+ DSIGM(12) = -8.D0/3.D0*(TT+1.D0)/TP
+ DSIGM(13) = (UU+TT)/(UP*TP)
+C
+ DSIGM(12) = FACTOR*DSIGM(12)*S2
+ DSIGM(13) = FACTOR*DSIGM(13)*S3*S1
+C complex part
+ X=ABS(TP-UP)
+ FAC2 = -LOG((X+2.D0)/(X+1.D-30))/PI
+C
+ DO 80 I=12,13
+ IF(DSIGM(I).LT.0.D0) THEN
+ WRITE(LO,'(1X,A,I3,1P,2E12.4)')
+ & 'PHO_HARXD2: neg. cross section:',I,DSIGM(I),ECMH
+ DSIGM(I) = 0.D0
+ ENDIF
+ DSIGMC(I) = CMPLX(DSIGM(I),DSIGM(I)*FAC2)
+ DSIGMC(15) = DSIGMC(15)+DSIGMC(I)
+ 80 CONTINUE
+ ENDIF
+ END
+
+CDECK ID>, PHO_HARXPT
+ SUBROUTINE PHO_HARXPT(ECMH,PT,IPRO,DSIGMC)
+C**********************************************************************
+C
+C differential cross section DSIG/DPT
+C
+C input: ECMH CMS energy of scattering system
+C PT parton PT
+C IPRO 1 resolved processes
+C 2 direct processes
+C 3 resolved and direct processes
+C
+C output: DSIGMC(0:12) QCD-PM cross sections dsigma/dpt
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( Max_pro_2 = 16 )
+ COMPLEX*16 DSIGMC
+ DIMENSION DSIGMC(0:Max_pro_2)
+ PARAMETER ( TINY= 1.D-10, ONEP1=1.1, EPS=1.D-25)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+
+ double precision pho_alphae
+
+ COMPLEX*16 DSIG1
+ DIMENSION DSIG1(0:Max_pro_2)
+ DIMENSION ABSZ(32),WEIG(32)
+
+ DO 10 M=0,Max_pro_2
+ DSIGMC(M) = CMPLX(0.D0,0.D0)
+ DSIG1(M) = CMPLX(0.D0,0.D0)
+ 10 CONTINUE
+
+C resolved and direct processes
+ AMT = 2.D0*PT/ECMH
+ IF ( AMT.GE.1.D0 ) RETURN
+ ECU = LOG((SQRT(1.D0-AMT*AMT)+1.D0)/AMT)
+ ECL = -ECU
+ NPOINT = NGAUET
+ CALL PHO_GAUSET(ECL,ECU,NPOINT,ABSZ,WEIG)
+ DO 30 I=1,NPOINT
+ DSIG1(9) = CMPLX(0.D0,0.D0)
+ DSIG1(15) = CMPLX(0.D0,0.D0)
+ IF(IPRO.EQ.1) THEN
+ CALL PHO_HARXR2(ECMH,PT,ABSZ(I),DSIG1)
+ ELSE IF(IPRO.EQ.2) THEN
+ CALL PHO_HARXD2(ECMH,PT,ABSZ(I),DSIG1)
+ ELSE
+ CALL PHO_HARXR2(ECMH,PT,ABSZ(I),DSIG1)
+ CALL PHO_HARXD2(ECMH,PT,ABSZ(I),DSIG1)
+ ENDIF
+ DO 20 M=1,Max_pro_2
+ DSIGMC(M) = DSIGMC(M)+WEIG(I)*DSIG1(M)
+ 20 CONTINUE
+ 30 CONTINUE
+
+C direct processes
+ IF(((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990))
+ & .AND.((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990))) THEN
+ FAC = 0.D0
+ SS = ECMH*ECMH
+ ALPHAE = pho_alphae(SS)
+ DO 300 I=1,NF
+ IF(IDPDG1.EQ.22) THEN
+* F1 = (4.D0-3.D0*MOD(I,2))/9.D0*ALPHAE
+ F1 = Q_ch2(I)*ALPHAE
+ ELSE
+ F1 = PARMDL(74)
+ ENDIF
+ IF(IDPDG2.EQ.22) THEN
+* F2 = (4.D0-3.D0*MOD(I,2))/9.D0*ALPHAE
+ F2 = Q_ch2(I)*ALPHAE
+ ELSE
+ F2 = PARMDL(74)
+ ENDIF
+ FAC = FAC+F1*F2*3.D0
+ 300 CONTINUE
+C direct cross sections
+ ZZ = SQRT(1.D0-4.D0*PT*PT/SS+TINY)
+ T1 = -SS/2.D0*(1.D0+ZZ)
+ T2 = -SS/2.D0*(1.D0-ZZ)
+ XM = -2.D0*PT/ZZ*((SS+T1)/T1+T1/(SS+T1)+(SS+T2)/T2+T2/(SS+T2))
+C hadronic part
+ DSIGMC(14) = GEV2MB*2.D0*PI*FAC/(SS*SS)*XM*AKFAC
+
+C leptonic part (e, mu, tau)
+ DSIGMC(16) = 0.D0
+ IF((IDPDG1.EQ.22).AND.(IDPDG2.EQ.22)) THEN
+ DSIGMC(16) = DSIGMC(14)/FAC*3.D0*ALPHAE**2
+C simulation of tau together with quarks
+ IF(IPAMDL(64).NE.0) DSIGMC(14) = DSIGMC(14)+DSIGMC(16)/3.D0
+ ENDIF
+ ENDIF
+
+ DSIGMC(15) = DSIGMC(15)+DSIGMC(14)
+ DSIGMC(0) = DSIGMC(9)+DSIGMC(15)
+
+ END
+
+CDECK ID>, PHO_HARXTO
+ SUBROUTINE PHO_HARXTO(ECMH,PTCUTR,PTCUTD,DSIGMC,DSDPTC)
+C**********************************************************************
+C
+C total hard cross section (perturbative QCD, Parton Model)
+C
+C input: ECMH CMS energy of scattering system
+C PTCUTR PT cutoff for resolved processes
+C PTCUTD PT cutoff for direct processes (photon, Pomeron)
+C
+C output: DSIGMC(0:MARPR2) cross sections for given cutoff
+C DSDPTC(0:MARPR2) differential cross sections at cutoff
+C
+C note: COMPLEX*16 DSIGMC
+C DOUBLE PRECISION DSDPTC
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( Max_pro_2 = 16 )
+ COMPLEX*16 DSIGMC
+ DIMENSION DSIGMC(0:Max_pro_2),DSDPTC(0:Max_pro_2)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C integration precision for hard cross sections (obsolete)
+ INTEGER NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+ COMMON /POGAUP/ NGAUP1,NGAUP2,NGAUET,NGAUIN,NGAUSO
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+
+ double precision pho_alphae
+
+ COMPLEX*16 DSIG1
+ DIMENSION DSIG1(0:Max_pro_2)
+ DIMENSION ABSZ(32),WEIG(32)
+
+ DATA FAC / 3.0D0 /
+
+ DO 10 M=0,Max_pro_2
+ DSIGMC(M)= CMPLX(0.D0,0.D0)
+ 10 CONTINUE
+ EEC=ECMH/2.001D0
+C
+ IF ( PTCUTR.GE.EEC ) GOTO 100
+C
+C integration for resolved processes
+ PTMIN = PTCUTR
+ PTMAX = MIN(FAC*PTMIN,EEC)
+ NPOINT = NGAUP1
+ CALL PHO_HARXPT(ECMH,PTMIN,1,DSIG1)
+ DO 60 M=1,9
+ DSDPTC(M) = DREAL(DSIG1(M))
+ 60 CONTINUE
+ DSIGH = DREAL(DSIG1(9))
+ PTMXX = 0.95D0*PTMAX
+ CALL PHO_HARXPT(ECMH,PTMXX,1,DSIG1)
+ DSIGL = DREAL(DSIG1(9))
+ EX = LOG(DSIGH/(DSIGL+1.D-30))/LOG(FAC)
+ EX1 = 1.0D0-EX
+ DO 50 K=1,2
+ IF ( PTMIN.GE.PTMAX ) GOTO 40
+ RL = PTMIN**EX1
+ RU = PTMAX**EX1
+ CALL PHO_GAUSET(RL,RU,NPOINT,ABSZ,WEIG)
+ DO 30 I=1,NPOINT
+ R = ABSZ(I)
+ PT = R**(1.0D0/EX1)
+ CALL PHO_HARXPT(ECMH,PT,1,DSIG1)
+ F = WEIG(I)*PT/(R*EX1)
+ DO 20 M=1,9
+ DSIGMC(M) = DSIGMC(M)+F*DSIG1(M)
+ 20 CONTINUE
+ 30 CONTINUE
+ 40 PTMIN = PTMAX
+ PTMAX = EEC
+ NPOINT = NGAUP2
+ 50 CONTINUE
+ 100 CONTINUE
+ DSIGMC(0) = DSIGMC(9)
+ DSDPTC(0) = DSDPTC(9)
+C
+C integration for direct processes
+ IF((PTCUTD.GE.EEC).OR.(PTCUTD.LT.0.5D0)) RETURN
+C
+ IF((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990)
+ & .OR.(IDPDG2.EQ.22).OR.(IDPDG2.EQ.990)) THEN
+ PTMIN = PTCUTD
+ PTMAX = MIN(FAC*PTMIN,EEC)
+ NPOINT = NGAUP1
+ CALL PHO_HARXPT(ECMH,PTMIN,2,DSIG1)
+ IF(DREAL(DSIG1(15)).LT.1.D-15) GOTO 170
+ DO 160 M=10,16
+ DSDPTC(M) = DREAL(DSIG1(M))
+ 160 CONTINUE
+ DSIGH = DREAL(DSIG1(15)-DSIG1(14))
+ PTMXX = 0.95D0*PTMAX
+ CALL PHO_HARXPT(ECMH,PTMXX,2,DSIG1)
+ DSIGL = DREAL(DSIG1(15)-DSIG1(14))
+ EX = LOG(DSIGH/(DSIGL+1.D-30))/LOG(FAC)
+ EX1 = 1.0D0-EX
+ DO 150 K=1,2
+ IF ( PTMIN.GE.PTMAX ) GOTO 140
+ RL = PTMIN**EX1
+ RU = PTMAX**EX1
+ CALL PHO_GAUSET(RL,RU,NPOINT,ABSZ,WEIG)
+ DO 130 I=1,NPOINT
+ R = ABSZ(I)
+ PT = R**(1.0D0/EX1)
+ CALL PHO_HARXPT(ECMH,PT,2,DSIG1)
+ F = WEIG(I)*PT/(R*EX1)
+ DO 120 M=10,15
+ DSIGMC(M) = DSIGMC(M)+F*DSIG1(M)
+ 120 CONTINUE
+ 130 CONTINUE
+ 140 PTMIN = PTMAX
+ PTMAX = EEC
+ NPOINT = NGAUP2
+ 150 CONTINUE
+ ENDIF
+C
+ 170 CONTINUE
+C
+C double direct process
+ IF(((IDPDG1.EQ.22).OR.(IDPDG1.EQ.990))
+ & .AND.((IDPDG2.EQ.22).OR.(IDPDG2.EQ.990))) THEN
+ FACC = 0.D0
+ SS = ECMH*ECMH
+ ALPHAE = pho_alphae(SS)
+ DO 300 I=1,NF
+ IF(IDPDG1.EQ.22) THEN
+* F1 = (4.D0-3.D0*MOD(I,2))/9.D0*ALPHAE
+ F1 = Q_ch2(I)*ALPHAE
+ ELSE
+ F1 = PARMDL(74)
+ ENDIF
+ IF(IDPDG2.EQ.22) THEN
+* F2 = (4.D0-3.D0*MOD(I,2))/9.D0*ALPHAE
+ F2 = Q_ch2(I)*ALPHAE
+ ELSE
+ F2 = PARMDL(74)
+ ENDIF
+ FACC = FACC + F1*F2*3.D0
+ 300 CONTINUE
+
+ ZZ = SQRT(1.D0-4.D0*PTCUTD*PTCUTD/SS)
+ R = 4.D0*PI/SS*(LOG((1.D0+ZZ)/(1.D0-ZZ))-ZZ)*GEV2MB
+C hadronic cross section
+ DSIGMC(14) = R*FACC*AKFAC
+C leptonic cross section
+ IF((IDPDG1.EQ.22).AND.(IDPDG2.EQ.22)) THEN
+ DSIGMC(16) = R*3.D0*ALPHAE**2*AKFAC
+C simulation of tau together with quarks
+ IF(IPAMDL(64).NE.0) DSIGMC(14) = DSIGMC(14)+DSIGMC(16)/3.D0
+ DSIGMC(16) = DSIGMC(16)*2.D0/3.D0
+ ELSE
+ DSIGMC(16) = CMPLX(0.D0,0.D0)
+ ENDIF
+C sum of direct part
+ DSIGMC(15) = CMPLX(0.D0,0.D0)
+ DO 400 I=10,14
+ DSIGMC(15) = DSIGMC(15) + DSIGMC(I)
+ 400 CONTINUE
+ ENDIF
+C total sum (hadronic)
+ DSIGMC(0) = DSIGMC(9) + DSIGMC(15)
+ DSDPTC(0) = DSDPTC(9) + DSDPTC(15)
+
+ END
+
+CDECK ID>, PHO_HARISR
+ SUBROUTINE PHO_HARISR(IHPOM,P1,P2,IPF1,IPF2,IPA1,IPA2,IV1,IV2,Q2H,
+ & XH1,XH2,XHMAX1,XHMAX2,IPB1,IPB2,IVO1,IVO2,XISR1,XISR2,IREJ)
+C********************************************************************
+C
+C initial state radiation according to DGLAP evolution equations
+C (backward evolution, no spin effects)
+C
+C input: IHPOM index of hard Pomeron
+C negative: delete all previous entries
+C P1,P2 4 momenta of hard scattered final partons
+C (in CMS of hard scattering)
+C IPF1,2 flavours of final partons
+C IPA1,2 flavours of initial partons
+C IV1,2 valence quark labels (0/1)
+C Q2H momentum transfer (squared, positive)
+C XH1,XH2 x values of initial partons
+C XHMAX1,2 max. x values allowed
+C
+C output: all emitted partons in /POPISR/, final state
+C partons are the first two entries
+C shower evolution traced in /PODGL1/
+C IPB1,2 flavours of new initial partons
+C XISR1,2 x values of new initial partons
+C IVO1,2 valence quark labels (0/1)
+C
+C attention: quark numbering according to PDG convention,
+C but 0 for gluons
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (RHOMAS = 0.766D0,
+ & DEPS = 1.D-10,
+ & TINY = 1.D-10)
+
+ DIMENSION P1(4),P2(4)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C data of c.m. system of Pomeron / Reggeon exchange
+ INTEGER NPOSP,IDPDG1,IDBAM1,IDPDG2,IDBAM2
+ DOUBLE PRECISION ECMP,PCMP,PMASSP,PVIRTP,GAMBEP,
+ & SIDP,CODP,SIFP,COFP
+ COMMON /POPCMS/ ECMP,PCMP,PMASSP(2),PVIRTP(2),GAMBEP(4),
+ & SIDP,CODP,SIFP,COFP,NPOSP(2),
+ & IDPDG1,IDBAM1,IDPDG2,IDBAM2
+C some hadron information, will be deleted in future versions
+ INTEGER NFS
+ DOUBLE PRECISION QMASS,BET,PCOUDI,PNORM,VALPRG
+ COMMON /POHDRN/ QMASS(6),BET,PCOUDI,PNORM,VALPRG(2),NFS
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C scale parameters for parton model calculations
+ INTEGER NQQAL,NQQALI,NQQALF,NQQPD
+ DOUBLE PRECISION AQQAL,AQQALI,AQQALF,AQQPD
+ COMMON /POHSCL/ AQQAL,AQQALI,AQQALF,AQQPD,
+ & NQQAL,NQQALI,NQQALF,NQQPD
+C parameters for DGLAP backward evolution in ISR
+ INTEGER NFSISR
+ DOUBLE PRECISION Q2MISR,PMISR,ZMISR,AL2ISR
+ COMMON /PODGL1/ Q2MISR(2),PMISR(2),ZMISR(2),AL2ISR(2),NFSISR
+C initial state parton radiation (internal part)
+ INTEGER MXISR3,MXISR4
+ PARAMETER ( MXISR3 = 50, MXISR4 = 100 )
+ INTEGER IFL1,IFL2,IBRA,IFANO,ISH,NACC
+ DOUBLE PRECISION Q2SH,PT2SH,XPSH,ZPSH,THSH,SHAT
+ COMMON /POINT6/ Q2SH(2,MXISR3),PT2SH(2,MXISR3),XPSH(2,MXISR3),
+ & ZPSH(2,MXISR3),THSH(2,MXISR3),SHAT(MXISR3),
+ & IFL1(2,MXISR3),IFL2(2,MXISR3),
+ & IBRA(2,MXISR4),IFANO(2),ISH(2),NACC
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C particles created by initial state evolution
+ INTEGER MXISR1,MXISR2
+ PARAMETER ( MXISR1 = 150, MXISR2 = 50 )
+ INTEGER IFLISR,IPOISR,IMXISR
+ DOUBLE PRECISION PHISR
+ COMMON /POPISR/ IFLISR(2,MXISR1),PHISR(2,4,MXISR1),
+ & IPOISR(2,2,MXISR2),IMXISR(2)
+
+ DOUBLE PRECISION PYP,EER,THER,QMAXR
+ INTEGER PYK
+
+ DIMENSION XHMA(2),NEXT(2),PD1(-6:6),PD2(-6:6),WGGAP(-6:6),
+ & WGPDF(-6:6),XHMI(2),GB(4),PM(4),PN(4),PC(2,4),Q2(2),
+ & IVAL(2),IPAL(2),IL(2),IFSUM(2),IDMO(2)
+
+ IREJ = 0
+ NTRY = 1000
+ NITER = 0
+C debug output
+ IF(IDEB(79).GE.10) THEN
+ WRITE(LO,'(1X,A,/1X,I10,3I3,5E11.3,2(/5X,4E12.3))')
+ & 'PHO_HARISR: KEV,IHPOM,IP1,IP2,Q2H,XH1,XH2,XHM1,XHM2:',
+ & KEVENT,IHPOM,IPA1,IPA2,Q2H,XH1,XH2,XHMAX1,XHMAX2,P1,P2
+ ENDIF
+ IF(IHPOM.EQ.0) RETURN
+C
+ 10 CONTINUE
+ NACC = 0
+ IDMO(1) = IDPDG1
+ IDMO(2) = IDPDG2
+C
+C copy final state partons to local fields
+ IHIDX = ABS(IHPOM)
+
+ IF(IHIDX.GT.MXISR2) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_HARISR: no space left in ',
+ & '/POPISR/ for hard scattering labels (IHIDX,MXISR2):',
+ & IHIDX,MXISR2
+ IREJ = 1
+ ENDIF
+
+ DO 50 K=1,2
+ IF(IHPOM.LT.0) IMXISR(K) = 0
+ IPOISR(K,1,IHIDX) = IMXISR(K)+1
+ IPAL(K) = IPOISR(K,1,IHIDX)
+ 50 CONTINUE
+ DO 55 I=1,4
+ PHISR(1,I,IPAL(1)) = P1(I)
+ PHISR(2,I,IPAL(2)) = P2(I)
+ 55 CONTINUE
+ IFLISR(1,IPAL(1)) = IPF1
+ IFLISR(2,IPAL(2)) = IPF2
+C
+C check limitations, initialize /PODGL1/
+ IF((Q2H.GT.Q2MISR(1)).AND.(XH1.LT.XHMAX1)) THEN
+ NEXT(1) = 1
+ Q2SH(1,1) = Q2H
+ ELSE
+ NEXT(1) = 0
+ Q2SH(1,1) = 0.D0
+ ENDIF
+ IF((Q2H.GT.Q2MISR(2)).AND.(XH2.LT.XHMAX2)) THEN
+ NEXT(2) = 1
+ Q2SH(2,1) = Q2H
+ ELSE
+ NEXT(2) = 0
+ Q2SH(2,1) = 0.D0
+ ENDIF
+C
+ ISH(1) = 1
+ ISH(2) = 1
+ XPSH(1,1) = XH1
+ XPSH(2,1) = XH2
+C
+ IFL1(1,1) = IPA1
+ IVAL(1) = IV1
+ IF((IPA1.EQ.22).OR.(IPA1.EQ.990)) NEXT(1) = 0
+ IFL1(2,1) = IPA2
+ IVAL(2) = IV2
+ IF((IPA2.EQ.22).OR.(IPA2.EQ.990)) NEXT(2) = 0
+C
+ IF(IDEB(79).GE.17) WRITE(LO,'(1X,A,/5X,2I2,3E12.3)')
+ & 'PHO_HARISR:INITIAL TESTS (NEXT1,2 Q2H Q21,2)',NEXT,Q2H,Q2MISR
+ IF(NEXT(1)+NEXT(2).EQ.0) GOTO 800
+C
+C initialize parton shower loop
+ B0QCD = (33.D0-2.D0*NFSISR)/6.D0
+ AL2ISR(1) = PDFLAM(1)
+ AL2ISR(2) = PDFLAM(2)
+ XHMA(1) = XHMAX1
+ XHMA(2) = XHMAX2
+ XHMI(1) = PMISR(1)/PCMP
+ XHMI(2) = PMISR(2)/PCMP
+ ZPSH(1,1) = 1.D0
+ ZPSH(2,1) = 1.D0
+ SHAT1 = XH1*XH2*ECMP**2
+ IF(IPAMDL(109).EQ.1) THEN
+ PT2SH(1,1) = Q2H
+ ELSE
+ PT2SH(1,1) = Q2H*(1.D0-Q2H/SHAT1)
+ ENDIF
+ PT2SH(2,1) = PT2SH(1,1)
+ IF(PT2SH(1,1).LT.Q2MISR(1)) NEXT(1) = 0
+ IF(PT2SH(2,1).LT.Q2MISR(2)) NEXT(2) = 0
+ THSH(1,1) = 2.D0*SQRT(Q2H/SHAT1)
+ THSH(2,1) = THSH(1,1)
+ IFANO(1) = 0
+ IFANO(2) = 0
+ ZZ = 1.D0
+ IF(IREJ.NE.0) GOTO 800
+C
+C main generation loop
+C -------------------------------------------------
+ 100 CONTINUE
+C choose parton side to become solved
+ IF((NEXT(1)+NEXT(2)).EQ.2) THEN
+ IF(Q2SH(1,ISH(1)).GT.Q2SH(2,ISH(2))) THEN
+ IP = 1
+ ELSE IF(Q2SH(2,ISH(2)).GT.Q2SH(1,ISH(1))) THEN
+ IP = 2
+ ELSE
+ IP = MAX(INT(DT_RNDM(SHAT1)*2.D0+0.999999D0),1)
+ ENDIF
+ ELSE IF(NEXT(1).EQ.1) THEN
+ IP = 1
+ ELSE IF(NEXT(2).EQ.1) THEN
+ IP = 2
+ ELSE
+ GOTO 800
+ ENDIF
+ INDX = ISH(IP)
+C INDX now parton position of parton to become solved
+C IP now side to be treated
+ XP = XPSH(IP,INDX)
+ Q2P = Q2SH(IP,INDX)
+ PT2 = PT2SH(IP,INDX)
+ IFLB = IFL1(IP,INDX)
+C check available x
+ XMIP = XHMI(IP)
+C cutoff by x limitation: no further development
+ IF((XHMA(IP)-XP).LT.XMIP*2.D0) THEN
+ NEXT(IP) = 0
+ Q2SH(IP,INDX) = 0.D0
+ IF(IDEB(79).GE.17) THEN
+ WRITE(LO,'(1X,A,/5X,3E12.4,2I3)')
+ & 'PHO_HARISR: evolution x-stop (XP,XMIP,XHMA,IP,INDX)',
+ & XP,XMIP,XHMA(IP),IP,INDX
+ ENDIF
+ GOTO 100
+ ENDIF
+C initial value of evolution variable t
+ TT = LOG(AQQALI*Q2P/AL2ISR(IP))
+ DO 110 I=-NFSISR,NFSISR
+ WGGAP(I) = 0.D0
+ WGPDF(I) = 0.D0
+ 110 CONTINUE
+C DGLAP weights
+ ZMIN = XP/XHMA(IP)
+ ZMAX = XP/(XP+XMIP)
+ CF = 4./3.
+C q --> q g, g --> g g
+ IF(IFLB.EQ.0) THEN
+ WGGAP(0) = CF*((ZMAX**2-ZMIN**2)/2.D0-2.D0*(ZMAX-ZMIN)
+ & +2.D0*LOG(ZMAX/ZMIN))
+ DO 120 I=1,NFSISR
+ WGGAP(I) = WGGAP(0)
+ WGGAP(-I) = WGGAP(0)
+ 120 CONTINUE
+ WGGAP(0) = 6.D0*((ZMIN**3-ZMAX**3)/3.D0+(ZMAX**2-ZMIN**2)/2.D0
+ & -2.D0*(ZMAX-ZMIN)+LOG(ZMAX/ZMIN*(1.D0-ZMIN)/(1.D0-ZMAX)))
+C q --> g q, g --> q qb
+ ELSE IF(ABS(IFLB).LE.6) THEN
+ WGGAP(IFLB) = CF*((ZMIN**2-ZMAX**2)/2.D0-ZMAX+ZMIN
+ & -2.D0*LOG((1.D0-ZMAX)/(1.D0-ZMIN)))
+ IF(IVAL(IP).EQ.0) WGGAP(0) = 0.5D0*(2./3.*(ZMAX**3-ZMIN**3)
+ & -ZMAX**2+ZMIN**2+ZMAX-ZMIN)
+ ELSE
+ WRITE(LO,'(/1X,A,I7)')
+ & 'PHO_HARISR:ERROR: unsupported particle ID',IFLB
+ CALL PHO_ABORT
+ ENDIF
+C anomalous/resolved evolution
+ IPDFC = 0
+ IF(IPAMDL(110).GE.1) THEN
+ IF((IDMO(IP).EQ.22).AND.(IFLB.NE.0)
+ & .AND.(IFLB.NE.21)) THEN
+ WGDIR = 0.D0
+ IF(NQQALI.EQ.1) THEN
+ SCALE2 = PT2*AQQPD
+ ELSE
+ SCALE2 = Q2P*AQQPD
+ ENDIF
+ CALL PHO_PDF(IP,XP,SCALE2,0.D0,PD1)
+ IPDFC = 1
+ CALL PHO_QPMPDF(IFLB,XP,SCALE2,PTA1,PVIRTP(IP),WGDIR)
+ XI = DT_RNDM(XP)*PD1(IFLB)
+ IF(WGDIR.GT.XI) THEN
+C debug output
+ IF(IDEB(79).GE.17) WRITE(LO,'(1X,2A,/5X,4E12.5,I2,I3)')
+ & 'PHO_HARISR: ',
+ & 'direct splitting (WGDIR,WGPDF,X,SCALE2,IP,IFLB)',
+ & WGDIR,PD1(IFLB),XP,SCALE2,IP,IFLB
+ Q2SH(IP,INDX) = 0.D0
+ NEXT(IP) = 0
+ IFANO(IP) = INDX
+ GOTO 100
+ ENDIF
+ ENDIF
+ ENDIF
+C
+C rejection loop for z,t sampling
+C ------------------------------------
+ 200 CONTINUE
+ NITER = NITER+1
+ IF(NITER.GE.NTRY) THEN
+ WRITE(LO,'(1X,A,2I6)')
+ & 'PHO_HARISR: too many rejections',NITER,NTRY
+ CALL PHO_PREVNT(-1)
+C clean up event
+ IREJ = 1
+ GOTO 10
+ ENDIF
+C PDF weights
+ IF(IPDFC.EQ.0) THEN
+ IF(NQQALI.EQ.1) THEN
+ SCALE2 = PT2*AQQPD
+ ELSE
+ SCALE2 = Q2P*AQQPD
+ ENDIF
+ CALL PHO_PDF(IP,XP,SCALE2,0.D0,PD1)
+ ENDIF
+ IPDFC = 0
+C
+ WGTOT = 0.D0
+ DO 210 I=-NFSISR,NFSISR
+ WGPDF(I) = PD1(I)/(PD1(IFLB)+1.D-12)*5.D0
+ WGTOT = WGTOT+WGPDF(I)*WGGAP(I)
+ 210 CONTINUE
+C
+ 215 CONTINUE
+C sample new t value
+ TT = TT*EXP(MAX(-10.D0,LOG(DT_RNDM(SHAT1))*B0QCD/WGTOT))
+ Q2NEW = AL2ISR(IP)*EXP(TT)/AQQALI
+C debug output
+ IF(IDEB(79).GE.20) WRITE(LO,'(1X,A,E12.5)')
+ & 'PHO_HARISR: pre-selected Q2:',Q2NEW
+C compare to limits
+ IF(Q2NEW.LT.Q2MISR(IP)) THEN
+ Q2SH(IP,INDX) = 0.D0
+ NEXT(IP) = 0
+ IF(IDEB(79).GE.17) WRITE(LO,'(1X,A,2E10.3,2I3)')
+ & 'PHO_HARISR: evolution Q2-stop (Q2,Q2MIN,IP,INDX):',
+ & Q2NEW,Q2MISR(IP),IP,INDX
+ GOTO 100
+ ENDIF
+ Q2SH(IP,INDX) = Q2NEW
+ TT = LOG(AQQALI*Q2NEW/AL2ISR(IP))
+C selection of flavours
+ XI = WGTOT*DT_RNDM(TT)
+ IFLA = -NFSISR-1
+ 220 CONTINUE
+ IFLA = IFLA+1
+ XI = XI-WGPDF(IFLA)*WGGAP(IFLA)
+ IF((XI.GT.0.D0).AND.(IFLA.LT.NFSISR)) GOTO 220
+C debug output
+ IF(IDEB(79).GE.20) WRITE(LO,'(1X,A,2I3)')
+ & 'PHO_HARISR: pre-selected IFLA (IFLA,IFLB):',IFLA,IFLB
+C selection of z
+ CALL PHO_HARZSP(IFLA,IFLB,NFSISR,ZMIN,ZMAX,ZZ)
+C debug output
+ IF(IDEB(79).GE.20) WRITE(LO,'(1X,A,E12.3)')
+ & 'PHO_HARISR: pre-selected ZZ',ZZ
+C angular ordering
+ THETA = 4.D0*ZZ**2*Q2NEW/((ECMP*XP)**2*(1.D0-ZZ))
+ IF(THETA.GT.THSH(IP,INDX)) THEN
+ IF(IDEB(79).GE.20) WRITE(LO,'(1X,A,2E12.3)')
+ & 'PHO_HARISR: reject by angle (NEW/OLD)',
+ & THETA,THSH(IP,INDX)
+ GOTO 215
+ ENDIF
+C rejection weight given by new PDFs
+ XNEW = XP/ZZ
+ PT2NEW = Q2NEW*(1.D0-ZZ)
+ IF(NQQALI.EQ.1) THEN
+ SCALE2 = PT2NEW*AQQPD
+ ELSE
+ SCALE2 = Q2NEW*AQQPD
+ ENDIF
+ IF(SCALE2.LT.Q2MISR(IP)) THEN
+ Q2SH(IP,INDX) = 0.D0
+ NEXT(IP) = 0
+ IF(IDEB(79).GE.17) WRITE(LO,'(1X,A,2E10.3,2I3)')
+ & 'PHO_HARISR: evol.Q2-stop (SCALE2,Q2MIN,IP,INDX):',
+ & Q2NEW,Q2MISR(IP),IP,INDX
+ GOTO 100
+ ENDIF
+ CALL PHO_PDF(IP,XNEW,SCALE2,0.D0,PD2)
+ IF(PD2(IFLA).LT.1.D-10) GOTO 200
+ CALL PHO_PDF(IP,XP,SCALE2,0.D0,PD1)
+ PD1(IFLB) = MAX(PD1(IFLB),1.D-10)
+ WGF = PD2(IFLA)/PD1(IFLB)/(WGPDF(IFLA)+1.D-12)
+ IF(NQQALI.EQ.1) WGF = WGF*LOG(Q2NEW*AQQALI/AL2ISR(IP))
+ & /LOG(PT2NEW*AQQALI/AL2ISR(IP))
+ IF((WGF.GT.1.D0).AND.(IDEB(79).GE.2)) THEN
+ WRITE(LO,'(1X,A,E12.3)')
+ & 'PHO_HARISR: final weight:',WGF
+ WRITE(LO,'(6X,A,I7,2I3,3E11.3)')
+ & 'EV,IFLA,IFLB,Q2,PT2,Z:',KEVENT,IFLA,IFLB,Q2NEW,PT2NEW,ZZ
+ ENDIF
+ IF(WGF.LT.DT_RNDM(XNEW)) GOTO 200
+
+ IF(IDEB(79).GE.15) THEN
+ WRITE(LO,'(1X,A,/3X,3I3,3E11.3)')
+ & 'PHO_HARISR: accepted IP,IFLA,IFLB,PT2,Q2,Z:',
+ & IP,IFLA,IFLB,PT2NEW,Q2NEW,ZZ
+ ENDIF
+
+ IF(INDX.GE.MXISR3) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_HARISR: no space left in ',
+ & '/POINT6/ for parton radiation (INDX,MXISR3):',INDX,MXISR3
+ IREJ = 1
+ RETURN
+ ENDIF
+
+C branching accepted, registration
+ Q2SH(IP,INDX) = Q2NEW
+ PT2SH(IP,INDX) = PT2NEW
+ ZPSH(IP,INDX) = ZZ
+ IFL2(IP,INDX) = IFLA-IFLB
+ Q2SH(IP,INDX+1) = Q2NEW
+ PT2SH(IP,INDX+1) = PT2SH(IP,INDX)
+ XPSH(IP,INDX+1) = XNEW
+ THSH(IP,INDX+1) = THETA
+ IFL1(IP,INDX+1) = IFLA
+ ISH(IP) = ISH(IP)+1
+
+ NACC = NACC+1
+
+ IF(NACC.GT.MXISR4) THEN
+ WRITE(LO,'(1X,2A,2I4)') 'PHO_HARISR: no space left in ',
+ & '/POINT6/ for parton radiation (NACC,MXISR4):',NACC,MXISR4
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ SHAT(NACC) = SHAT1
+ IBRA(1,NACC) = IP
+ IBRA(2,NACC) = INDX
+ SHAT1 = SHAT1/ZZ
+
+C generation of next branching
+ IF(NEXT(1)+NEXT(2).NE.0) GOTO 100
+
+ 800 CONTINUE
+
+C new initial flavours, x values
+ IPB1 = IFL1(1,ISH(1))
+ IPB2 = IFL1(2,ISH(2))
+ XISR1 = XPSH(1,ISH(1))
+ XISR2 = XPSH(2,ISH(2))
+ IVO1 = IVAL(1)
+ IVO2 = IVAL(2)
+C valence flavours
+ IF(IPB1.NE.0) THEN
+ IF(ISH(1).GT.1) THEN
+ CALL PHO_PDF(1,XISR1,Q2MISR(1),0.D0,PD1)
+ IF(IDPDG1.EQ.22) THEN
+ CALL PHO_QPMPDF(IPB1,XISR1,Q2MISR(1),0.D0,PVIRTP(1),FXP)
+ IF(DT_RNDM(XISR1)*PD1(IPB1).GT.PD1(IPB1)-FXP) IVAL(1) = 1
+ ELSE
+ CALL PHO_PDF(1,XISR1,Q2MISR(1),0.D0,PD1)
+ IF(DT_RNDM(XISR1)*PD1(IPB1).GT.PD1(-IPB1)) IVAL(1) = 1
+ ENDIF
+ ENDIF
+ ENDIF
+ IF(IPB2.NE.0) THEN
+ IF(ISH(2).GT.1) THEN
+ CALL PHO_PDF(2,XISR2,Q2MISR(2),0.D0,PD1)
+ IF(IDPDG2.EQ.22) THEN
+ CALL PHO_QPMPDF(IPB2,XISR2,Q2MISR(2),0.D0,PVIRTP(2),FXP)
+ IF(DT_RNDM(XISR2)*PD1(IPB2).GT.PD1(IPB2)-FXP) IVAL(2) = 1
+ ELSE
+ IF(DT_RNDM(XISR2)*PD1(IPB2).GT.PD1(-IPB2)) IVAL(2) = 1
+ ENDIF
+ ENDIF
+ ENDIF
+
+C parton kinematics
+ IF(NACC.GT.0) THEN
+C final partons in CMS
+ PM(3) = (XH1-XH2)*ECMP/2.D0
+ PM(4) = (XH1+XH2)*ECMP/2.D0
+ SH = XH1*XH2*ECMP**2
+ SSH = SQRT(SH)
+ GB(3) = PM(3)/SSH
+ GB(4) = PM(4)/SSH
+ CALL PHO_ALTRA(GB(4),0.D0,0.D0,-GB(3),P1(1),P1(2),P1(3),
+ & P1(4),PTOT1,PHISR(1,1,IPAL(1)),PHISR(1,2,IPAL(1)),
+ & PHISR(1,3,IPAL(1)),PHISR(1,4,IPAL(1)))
+ CALL PHO_ALTRA(GB(4),0.D0,0.D0,-GB(3),P2(1),P2(2),P2(3),
+ & P2(4),PTOT1,PHISR(2,1,IPAL(2)),PHISR(2,2,IPAL(2)),
+ & PHISR(2,3,IPAL(2)),PHISR(2,4,IPAL(2)))
+ IL(1) = 1
+ IL(2) = 1
+ DO 900 I=1,NACC
+ IPA = IBRA(1,I)
+ IPB = 3-IPA
+ IL(IPA) = IBRA(2,I)
+C new initial partons in CMS
+ SH = SHAT(I)
+ SSH = SQRT(SH)
+ SHZ = SH/ZPSH(IPA,IL(IPA))
+ SSHZ = SQRT(SHZ)
+ Q2(1) = Q2SH(1,IL(1))
+ Q2(2) = Q2SH(2,IL(2))
+ PC(1,1) = 0.D0
+ PC(1,2) = 0.D0
+ PC(1,3) = SQRT((SH+Q2(1)+Q2(2))**2-4.D0*Q2(1)*Q2(2))
+ & /(2.D0*SSH)
+ PC(1,4) = (SH-Q2(1)+Q2(2))/(2.D0*SSH)
+ PC(2,1) = 0.D0
+ PC(2,2) = 0.D0
+ PC(2,3) = -PC(1,3)
+ PC(2,4) = SSH-PC(1,4)
+ XMS4 = PHO_PMASS(IFL2(IPA,IL(IPA)),1)**2
+ EE3 = (SHZ-Q2(IPA)+Q2(IPB)-XMS4)/(2.D0*SSH)
+ S1 = SH+Q2(IPA)+Q2(IPB)
+ S3 = SHZ+Q2(IPB)+Q2SH(IPA,IL(IPA)+1)
+ R1 = SQRT(S1**2-4.D0*Q2(IPA)*Q2(IPB))
+ R3 = SQRT(S3**2-4.D0*Q2(IPB)*Q2SH(IPA,IL(IPA)+1))
+ IF(Q2(IPB).LT.0.1D0) THEN
+ XMS4M = (Q2(IPA)/ZPSH(IPA,IL(IPA))-Q2SH(IPA,IL(IPA)+1))
+ & *(SH/(SH+Q2(IPA))-SH/(SHZ+Q2SH(IPA,IL(IPA)+1)))
+ ELSE
+ XMS4M = (S1*S3-R1*R3)/(2.D0*Q2(IPB))
+ & -Q2(IPA)-Q2SH(IPA,IL(IPA)+1)
+ ENDIF
+ NGEN = 1
+C max. virtuality for time-like showers
+ QMAX = MIN(XMS4M,PARMDL(95)*Q2(IPA))
+ IF((IPAMDL(111).GE.1).AND.(QMAX.GT.PARMDL(94))) THEN
+C generate time-like parton shower
+ KF = IFL2(IPA,IL(IPA))
+ IF(KF.EQ.0) KF = 21
+ EER = MIN(EE3-PC(IPA,4),ECMP)
+ THER = 0.
+
+ CALL PY1ENT(1,KF,EER,THER,THER)
+ QMAXR = SQRT(QMAX)
+ CALL PYSHOW(1,0,QMAXR)
+C debug output
+ IF(IDEB(79).GE.25) THEN
+ WRITE(LO,'(1X,2A,/,5X,1P,4E12.4)') 'PHO_HARISR: ',
+ & 'PYSHOW called for EE,QMAX,XMS4M,Q2(IPA)',
+ & EER,QMAX,XMS4M,Q2(IPA)
+ CALL PYLIST(1)
+ ENDIF
+ NGEN = PYK(0,1)
+
+ IF(NGEN.GT.1) THEN
+ PJX = 0.D0
+ PJY = 0.D0
+ PJZ = 0.D0
+ PJE = 0.D0
+ KK = IPAL(IPA)
+ DO 820 K=3,NGEN
+
+ IF(PYK(K,1).LE.4) THEN
+ KK = KK+1
+
+ IF(KK.GT.MXISR1) THEN
+ WRITE(LO,'(1X,2A,2I5)') 'PHO_HARISR: no space ',
+ & 'left in /POPISR/ (KK,MXISR1):',KK,MXISR1
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ PHISR(IPA,1,KK) = PYP(K,1)
+ PJX = PJX+PHISR(IPA,1,KK)
+ PHISR(IPA,2,KK) = PYP(K,2)
+ PJY = PJY+PHISR(IPA,2,KK)
+ PHISR(IPA,3,KK) = PYP(K,3)
+ PJZ = PJZ+PHISR(IPA,3,KK)
+ PHISR(IPA,4,KK) = PYP(K,4)
+ PJE = PJE+PHISR(IPA,4,KK)
+ IFLISR(IPA,KK) = PYK(K,2)
+
+ IF(IFLISR(IPA,KK).EQ.21) IFLISR(IPA,KK) = 0
+ IF(IFLISR(IPA,KK).EQ.5) IFLISR(IPA,KK) = 3
+ IF(IFLISR(IPA,KK).EQ.-5) IFLISR(IPA,KK) = -3
+ ENDIF
+ 820 CONTINUE
+ NGEN = KK-IPAL(IPA)
+ XMS4 = (PJE+PJZ)*(PJE-PJZ)-PJX**2-PJY**2
+ PP4 = SQRT(PJE**2-XMS4)
+ EE3 = (SHZ-Q2(IPA)+Q2(IPB)-XMS4)/(2.D0*SSH)
+C debug output
+ IF(IDEB(79).GE.20) WRITE(LO,'(1X,2A,/,5X,1P,6E12.4)')
+ & 'PHO_HARISR: ',
+ & 'time-like shower: PJE,PJX,PJY,PJZ,PP4,XMS4',
+ & PJE,PJX,PJY,PJZ,PP4,XMS4
+ ENDIF
+ ENDIF
+ PZ3 = (2.D0*PC(IPA,4)*EE3+Q2(IPA)+Q2SH(IPA,IL(IPA)+1)+XMS4)
+ & /(2.D0*PC(IPA,3))
+ PT3 = (EE3+PZ3)*(EE3-PZ3)+Q2SH(IPA,IL(IPA)+1)
+ IF(PT3.LT.0.D0) THEN
+ IF(IDEB(79).GE.5) WRITE(LO,'(1X,A,E12.3)')
+ & 'PHO_HARISR: rejection due to PT3',PT3
+ GOTO 10
+ ENDIF
+ PT3 = SQRT(PT3)
+ CALL PHO_SFECFE(SFE,CFE)
+ PX3 = CFE*PT3
+ PY3 = SFE*PT3
+C
+ IF(NGEN.GT.1) THEN
+C time-like shower generated
+ EE4 = EE3-PC(IPA,4)
+ PZ4 = PZ3-PC(IPA,3)
+ PP4 = SQRT(PT3**2+PZ4**2)
+C Lorentz boost
+ GAM = (EE4*PJE-PP4*PJZ)/XMS4
+ BEG = (PJE*PP4-EE4*PJZ)/XMS4
+C rotation angles
+ CODD = PZ4/PP4
+ SIDD = SQRT(PX3**2+PY3**2)/PP4
+ COFD = 1.D0
+ SIFD = 0.D0
+ IF(PP4*SIDD.GT.1.D-5) THEN
+ COFD = PX3/(SIDD*PP4)
+ SIFD = PY3/(SIDD*PP4)
+ ANORF = SQRT(COFD*COFD+SIFD*SIFD)
+ COFD = COFD/ANORF
+ SIFD = SIFD/ANORF
+ ENDIF
+C copy partons back
+ KK = IPAL(IPA)
+ DO 830 K=1,NGEN
+ KK = KK+1
+ PX = PHISR(IPA,1,KK)
+ PY = PHISR(IPA,2,KK)
+ PZ = PHISR(IPA,3,KK)
+ COH= PHISR(IPA,4,KK)
+ EE = GAM*COH+BEG*PZ
+ PZ = GAM*PZ +BEG*COH
+ PHISR(IPA,4,KK) = EE
+ CALL PHO_TRANS(PX,PY,PZ,CODD,SIDD,COFD,SIFD,
+ & PHISR(IPA,1,KK),PHISR(IPA,2,KK),PHISR(IPA,3,KK))
+ 830 CONTINUE
+ IPAL(IPA) = KK
+ ELSE
+C no time-like shower generated
+ IPAL(IPA) = IPAL(IPA)+1
+ PHISR(IPA,1,IPAL(IPA)) = PX3
+ PHISR(IPA,2,IPAL(IPA)) = PY3
+ PHISR(IPA,3,IPAL(IPA)) = PZ3-PC(IPA,3)
+ PHISR(IPA,4,IPAL(IPA)) = EE3-PC(IPA,4)
+ IFLISR(IPA,IPAL(IPA)) = IFL2(IPA,IL(IPA))
+ ENDIF
+ PC(IPA,1) = PX3
+ PC(IPA,2) = PY3
+ PC(IPA,3) = PZ3
+ PC(IPA,4) = EE3
+C boost / rotate into new CMS
+ DO 842 K=1,4
+ GB(K) = (PC(1,K)+PC(2,K))/SSHZ
+ 842 CONTINUE
+ CALL PHO_ALTRA(GB(4),-GB(1),-GB(2),-GB(3),PC(1,1),PC(1,2),
+ & PC(1,3),PC(1,4),PTOT1,PM(1),PM(2),PM(3),PM(4))
+ COG= PM(3)/PTOT1
+ SIG= SQRT(PM(1)**2+PM(2)**2)/PTOT1
+ COH=1.D0
+ SIH=0.D0
+ IF(PTOT1*SIG.GT.1.D-5) THEN
+ COH=PM(1)/(SIG*PTOT1)
+ SIH=PM(2)/(SIG*PTOT1)
+ ANORF=SQRT(COH*COH+SIH*SIH)
+ COH=COH/ANORF
+ SIH=SIH/ANORF
+ ENDIF
+ DO 845 K=1,2
+ DO 844 L=IPOISR(K,1,IHIDX),IPAL(K)
+ CALL PHO_ALTRA(GB(4),-GB(1),-GB(2),-GB(3),
+ & PHISR(K,1,L),PHISR(K,2,L),PHISR(K,3,L),PHISR(K,4,L),
+ & PTOT1,PM(1),PM(2),PM(3),PM(4))
+ CALL PHO_TRANI(PM(1),PM(2),PM(3),COG,SIG,COH,SIH,PN(1),
+ & PN(2),PN(3))
+ CALL PHO_TRANS(PN(1),PN(2),PN(3),1.D0,0.D0,COH,SIH,
+ & PHISR(K,1,L),PHISR(K,2,L),PHISR(K,3,L))
+ PHISR(K,4,L) = PM(4)
+ 844 CONTINUE
+ 845 CONTINUE
+ 900 CONTINUE
+C boost back to global CMS
+ PM(3) = (XISR1-XISR2)/2.D0
+ PM(4) = (XISR1+XISR2)/2.D0
+ SSH = SQRT(XISR1*XISR2)
+ GB(3) = PM(3)/SSH
+ GB(4) = PM(4)/SSH
+ DO 945 K=1,2
+ DO 944 L=IPOISR(K,1,IHIDX),IPAL(K)
+ CALL PHO_ALTRA(GB(4),0.D0,0.D0,GB(3),PHISR(K,1,L),
+ & PHISR(K,2,L),PHISR(K,3,L),PHISR(K,4,L),PTOT1,PM(1),
+ & PM(2),PM(3),PM(4))
+ PHISR(K,1,L) = PM(1)
+ PHISR(K,2,L) = PM(2)
+ PHISR(K,3,L) = PM(3)
+ PHISR(K,4,L) = PM(4)
+ 944 CONTINUE
+ 945 CONTINUE
+ ENDIF
+ IPOISR(1,2,IHIDX) = IPAL(1)
+ IPOISR(2,2,IHIDX) = IPAL(2)
+ IMXISR(1) = IPAL(1)
+ IMXISR(2) = IPAL(2)
+C
+C debug output
+ IF(IDEB(79).GE.10) THEN
+ WRITE(LO,'(1X,A,2I10/,6X,A,2E12.3,2I5)') 'NUMBER OF EMISSIONS',
+ & ISH(1)-1,ISH(2)-1,'NEW X1,X2,IFL1,ILF2',XISR1,XISR2,IPB1,IPB2
+ IF(NACC.GT.0) THEN
+ WRITE(LO,'(1X,A,2I5,/6X,A)')
+ & 'PHO_HARISR: ISR configuration (NITER,NACC)',NITER,NACC,
+ & ' SIDE NO. IFLB IFLC Q2SH PT2SH XH ZZ'
+ DO 600 II=1,NACC
+ K = IBRA(1,II)
+ I = IBRA(2,II)
+ WRITE(LO,'(5X,4I5,4E11.3)')
+ & K,I,IFL1(K,I),IFL2(K,I),Q2SH(K,I),PT2SH(K,I),XPSH(K,I),
+ & ZPSH(K,I)
+ 600 CONTINUE
+ ENDIF
+C check of final configuration
+ PX3 = 0.D0
+ PY3 = 0.D0
+ PZ3 = 0.D0
+ EE3 = 0.D0
+ IFSUM(1) = 0
+ IFSUM(2) = 0
+ WRITE(LO,'(1X,A)') 'PHO_HARISR: outgoing partons'
+ DO 745 K=1,2
+ DO 744 L=IPOISR(K,1,IHIDX),IPOISR(K,2,IHIDX)
+ WRITE(LO,'(6X,2I4,I6,4E11.3)') K,L,IFLISR(K,L),
+ & PHISR(K,1,L),PHISR(K,2,L),PHISR(K,3,L),PHISR(K,4,L)
+ IFSUM(K) = IFSUM(K)+ IFLISR(K,L)
+ PX3 = PX3 + PHISR(K,1,L)
+ PY3 = PY3 + PHISR(K,2,L)
+ PZ3 = PZ3 + PHISR(K,3,L)
+ EE3 = EE3 + PHISR(K,4,L)
+ 744 CONTINUE
+ 745 CONTINUE
+ IFSUM(1) = IFSUM(1)-IPB1
+ IFSUM(2) = IFSUM(2)-IPB2
+ PZ3 = PZ3 -(XISR1-XISR2)*ECMP/2.D0
+ EE3 = EE3 -(XISR1+XISR2)*ECMP/2.D0
+ WRITE(LO,'(1X,A,2I4,4E11.3)') 'CHECK:IFL1,2 PCM(1-4)',
+ & IFSUM,PX3,PY3,PZ3,EE3
+ ENDIF
+ END
+
+CDECK ID>, PHO_HARZSP
+ SUBROUTINE PHO_HARZSP(IFLA,IFLB,NFSH,ZMIN,ZMAX,ZZ)
+C*********************************************************************
+C
+C sampling of z values from DGLAP kernels
+C
+C input: IFLA,IFLB parton flavours
+C NFSH flavours involved in hard processes
+C ZMIN minimal ZZ allowed
+C ZMAX maximal ZZ allowed
+C
+C output: ZZ z value
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+
+ IF(ZMAX.LE.ZMIN) THEN
+ WRITE(LO,'(1X,A,2E12.3)')
+ & 'PHO_HARZSP: ZMAX<ZMIN (ZMAX,ZMIN)',ZMAX,ZMIN
+ CALL PHO_PREVNT(-1)
+ ZZ = 0.D0
+ RETURN
+ ENDIF
+C
+ IF(IFLB.EQ.0) THEN
+ IF(IFLA.EQ.0) THEN
+C g --> g g
+ C1 = ZMAX/ZMIN*(1.D0-ZMIN)/(1.D0-ZMAX)
+ C2 = (1.D0-ZMIN)/ZMIN
+ 100 CONTINUE
+ ZZ = 1.D0/(1.D0+C2/C1**DT_RNDM(ZMIN))
+ IF(((1.D0-ZZ*(1.D0-ZZ))**2).LT.DT_RNDM(ZMAX)) GOTO 100
+ ELSE IF(ABS(IFLA).LE.NFSH) THEN
+C q --> q g
+ C1 = ZMAX/ZMIN
+ 200 CONTINUE
+ ZZ = ZMIN*C1**DT_RNDM(ZMIN)
+ IF((0.5D0*(1.D0+(1.D0-ZZ)**2)).LT.DT_RNDM(ZMAX)) GOTO 200
+ ELSE
+ GOTO 900
+ ENDIF
+ ELSE IF(ABS(IFLB).LE.NFSH) THEN
+ IF(IFLA.EQ.0) THEN
+C g --> q qb
+ C1 = ZMAX-ZMIN
+ 300 CONTINUE
+ ZZ = ZMIN+C1*DT_RNDM(ZMIN)
+ IF((2.D0*ZZ*(ZZ-1.D0)+1.D0).LT.DT_RNDM(ZMAX)) GOTO 300
+ ELSE IF(ABS(IFLA).LE.NFSH) THEN
+C q --> g q
+ C1 = (1.D0-ZMAX)/(1.D0-ZMIN)
+ C2 = 1.D0-ZMIN
+ 400 CONTINUE
+ ZZ = 1.D0-C2*C1**DT_RNDM(ZMIN)
+ IF(0.5D0*(1.D0+ZZ**2).LT.DT_RNDM(ZMAX)) GOTO 400
+ ELSE
+ GOTO 900
+ ENDIF
+ ELSE
+ GOTO 900
+ ENDIF
+C debug output
+ IF(IDEB(80).GE.20) WRITE(LO,'(1X,A,2I3,3E11.3)')
+ & 'PHO_HARZSP: IFLA,IFLB,ZZ,ZMIN,ZMAX',
+ & IFLA,IFLB,ZZ,ZMIN,ZMAX
+ RETURN
+
+ 900 CONTINUE
+ WRITE(LO,'(/1X,A,2I7)') 'PHO_HARZSP:ERROR: invalid flavours A,B',
+ & IFLA,IFLB
+ CALL PHO_ABORT
+
+ END
+
+CDECK ID>, PHO_ALPHAE
+ DOUBLE PRECISION FUNCTION PHO_ALPHAE(Q2)
+C**********************************************************************
+C
+C calculation of ALPHA_em
+C
+C input: Q2 scale in GeV**2
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ DOUBLE PRECISION Q2
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+ DOUBLE PRECISION PYALEM
+
+ pho_alphae = 1.D0/137.D0
+
+ if(ipamdl(120).eq.1) then
+
+ pho_alphae = PYALEM(Q2)
+
+ endif
+
+ END
+
+CDECK ID>, PHO_ALPHAS
+ DOUBLE PRECISION FUNCTION PHO_ALPHAS(Q2,IMODE)
+C**********************************************************************
+C
+C calculation of ALPHA_S
+C
+C input: IMODE = 1 lambda_QCD**2 for PDF 1 evolution
+C 2 lambda_QCD**2 for PDF 2 evolution
+C 3 lambda_QCD**2 for hard scattering
+C Q2 scale in GeV**2
+C
+C initialization needed:
+C IMODE = 0 lambda values taken from PDF table
+C -1 given Q2 is 4-flavour lambda 1
+C -2 given Q2 is 4-flavour lambda 2
+C -3 given Q2 is 4-flavour lambda 3
+C
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ DOUBLE PRECISION Q2
+ INTEGER IMODE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C hard scattering parameters used for most recent hard interaction
+ INTEGER NFbeta,NF
+ DOUBLE PRECISION ALQCD2,BQCD
+ COMMON /POHAPA/ ALQCD2(3,4),BQCD(4),NFbeta,NF
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+
+ INTEGER I
+
+ PHO_ALPHAS = 0.D0
+
+ IF(IMODE.GT.0) THEN
+
+ IF(Q2.LT.PARMDL(148)) THEN
+ NFbeta = 1
+ ELSE IF(Q2.LT.PARMDL(149)) THEN
+ NFbeta = 2
+ ELSE IF(Q2.LT.PARMDL(150)) THEN
+ NFbeta = 3
+ ELSE
+ NFbeta = 4
+ ENDIF
+
+ PHO_ALPHAS = BQCD(NFbeta)/LOG(Q2/ALQCD2(IMODE,NFbeta))
+ NFbeta = NFbeta+2
+
+ ELSE IF(IMODE.EQ.0) THEN
+
+ DO I=1,3
+ if(I.EQ.3) then
+ ALQCD2(I,2) = PDFLAM(1)*PDFLAM(2)
+ else
+ ALQCD2(I,2) = PDFLAM(I)*PDFLAM(I)
+ endif
+ ALQCD2(I,1) = PARMDL(148)
+ & *(ALQCD2(I,2)/PARMDL(148))**(BQCD(1)/BQCD(2))
+ ALQCD2(I,3) = PARMDL(149)
+ & *(ALQCD2(I,2)/PARMDL(149))**(BQCD(3)/BQCD(2))
+ ALQCD2(I,4) = PARMDL(150)
+ & *(ALQCD2(I,2)/PARMDL(150))**(BQCD(4)/BQCD(2))
+
+ ENDDO
+
+ ELSE IF(IMODE.LT.0) THEN
+
+ if(IMODE.eq.-4) then
+ I = 3
+ ALQCD2(I,2) = SQRT(ALQCD2(1,2)*ALQCD2(2,2))
+ else
+ I = -IMODE
+ ALQCD2(I,2) = Q2
+ endif
+ ALQCD2(I,1) = PARMDL(148)
+ & *(ALQCD2(I,2)/PARMDL(148))**(BQCD(1)/BQCD(2))
+ ALQCD2(I,3) = PARMDL(149)
+ & *(ALQCD2(I,2)/PARMDL(149))**(BQCD(3)/BQCD(2))
+ ALQCD2(I,4) = PARMDL(150)
+ & *(ALQCD2(I,2)/PARMDL(150))**(BQCD(4)/BQCD(2))
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_DFWRAP
+ SUBROUTINE PHO_DFWRAP(MODE,JM1,JM2)
+C**********************************************************************
+C
+C wrapper for diffraction dissociation in hadron-nucleus and
+C nucleus-nucleus collisions with DPMJET
+C
+C input: MODE 1: transformation into CMS
+C 2: transformation into Lab
+C JM1/2 indices of old mother particles
+C JM1/2N indices of new mother particles
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ INTEGER MODE,JM1,JM2
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+ DOUBLE PRECISION GAMBED(4),P1(4),P2(4),P3(4),P4(4),XM1,XM2
+ DOUBLE PRECISION SS,ECMD,PTOT1,CODD,SIDD,COFD,SIFD,ANORF
+
+ INTEGER I,NHEPS,JM1S,JM2S,JM1N,JM2N,IREJ
+
+C transformation into CMS
+
+ IF(MODE.EQ.1) THEN
+
+ JM1S = JM1
+ JM2S = JM2
+ NHEPS = NHEP
+
+ XM1 = PHEP(5,JM1)
+ XM2 = PHEP(5,JM2)
+
+C boost into CMS
+ P1(1) = PHEP(1,JM1)+PHEP(1,JM2)
+ P1(2) = PHEP(2,JM1)+PHEP(2,JM2)
+ P1(3) = PHEP(3,JM1)+PHEP(3,JM2)
+ P1(4) = PHEP(4,JM1)+PHEP(4,JM2)
+ SS = (P1(4)+P1(3))*(P1(4)-P1(3))-P1(1)**2-P1(2)**2
+ ECMD = SQRT(SS)
+ DO 10 I=1,4
+ GAMBED(I) = P1(I)/ECMD
+ 10 CONTINUE
+ CALL PHO_ALTRA(GAMBED(4),-GAMBED(1),-GAMBED(2),-GAMBED(3),
+ & PHEP(1,JM1),PHEP(2,JM1),PHEP(3,JM1),
+ & PHEP(4,JM1),PTOT1,P1(1),P1(2),P1(3),P1(4))
+C rotation angles
+ CODD = P1(3)/PTOT1
+ SIDD = SQRT(P1(1)**2+P1(2)**2)/PTOT1
+ COFD = 1.D0
+ SIFD = 0.D0
+ IF(PTOT1*SIDD.GT.1.D-5) THEN
+ COFD = P1(1)/(SIDD*PTOT1)
+ SIFD = P1(2)/(SIDD*PTOT1)
+ ANORF= SQRT(COFD*COFD+SIFD*SIFD)
+ COFD = COFD/ANORF
+ SIFD = SIFD/ANORF
+ ENDIF
+
+C initial particles in CMS
+
+ P1(1) = 0.D0
+ P1(2) = 0.D0
+ P1(3) = ECMD/2.D0*XPSUB
+ P1(4) = P1(3)
+
+ P2(1) = 0.D0
+ P2(2) = 0.D0
+ P2(3) = -ECMD/2.D0*XTSUB
+ P2(4) = -P2(3)
+
+ CALL PHO_MSHELL(P1,P2,XM1,XM2,P3,P4,IREJ)
+
+ CALL PHO_REGPAR(1,IDHEP(JM1),IMPART(JM1),JM1,JM2,
+ & P3(1),P3(2),P3(3),P3(4),IPHIST(1,JM1),IPHIST(2,JM1),
+ & ICOLOR(1,JM1),ICOLOR(2,JM1),JM1N,1)
+
+ CALL PHO_REGPAR(1,IDHEP(JM2),IMPART(JM2),JM2,JM1,
+ & P4(1),P4(2),P4(3),P4(4),IPHIST(1,JM2),IPHIST(2,JM2),
+ & ICOLOR(1,JM2),ICOLOR(2,JM2),JM2N,1)
+
+ JM1 = JM1N
+ JM2 = JM2N
+
+C transformation into lab.
+
+ ELSE IF(MODE.EQ.2) THEN
+
+ CALL PHO_LTRHEP(JM1,NHEP,CODD,SIDD,COFD,SIFD,GAMBED(4),
+ & GAMBED(1),GAMBED(2),GAMBED(3))
+
+ JM1 = JM1S
+ JM2 = JM2S
+
+C clean up after rejection
+
+ ELSE IF(MODE.EQ.-2) THEN
+
+ NHEP = NHEPS
+
+ JM1 = JM1S
+ JM2 = JM2S
+
+ ELSE
+
+ WRITE(LO,'(1X,A,I6)') 'PHO_DFWRAP: invalid MODE parameter:',MODE
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_DIFDIS
+ SUBROUTINE PHO_DIFDIS(IDIF1,IDIF2,IMOTH1,IMOTH2,SPROB,IMODE,
+ & MSOFT,MHARD,IREJ)
+C***********************************************************************
+C
+C sampling of diffractive events of different kinds,
+C (produced particles stored in /POEVT1/)
+C
+C input: IDIF1/2 diffractive process particle 1/2
+C 0 elastic/quasi-elastic scattering
+C 1 diffraction dissociation
+C IMOTH1/2 index of mother particles in /POEVT1/
+C SPROB suppression factor (survival probability) for
+C resolved diffraction dissociation
+C IMODE mode of operation
+C 0 sampling of diffractive cut
+C 1 sampling of enhanced cut
+C 2 sampling of diffractive cut without
+C scattering (needed for double-pomeron)
+C -1 initialization
+C -2 output of statistics
+C
+C output: MSOFT number of generated soft strings
+C MHARD number of generated hard strings
+C IDIF1/2 diffraction label for particle 1/2 in /PROCES/
+C 0 quasi elastic scattering
+C 1 low-mass diffractive dissociation
+C 2 soft high-mass diffractive dissociation
+C 3 hard resolved diffractive dissociation
+C 4 hard direct diffractive dissociation
+C IREJ rejection label
+C 0 successful generation of partons
+C 1 failure
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-7,
+ & DEPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C c.m. kinematics of diffraction
+ INTEGER NPOSD
+ DOUBLE PRECISION ECMD,PCMD,PMASSD,PVIRTD,GAMBED,
+ & SIDD,CODD,SIFD,COFD,PDCMS
+ COMMON /PODCMS/ ECMD,PCMD,PMASSD(2),PVIRTD(2),GAMBED(4),
+ & SIDD,CODD,SIFD,COFD,PDCMS(4,2),NPOSD(2)
+C obsolete cut-off information
+ DOUBLE PRECISION PTCUT,PTANO,FPS,FPH,PSOMIN,XSOMIN
+ COMMON /POCUT1/ PTCUT(4),PTANO(4),FPS(4),FPH(4),PSOMIN,XSOMIN
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C event weights and generated cross section
+ INTEGER IPOWGC,ISWCUT,IVWGHT
+ DOUBLE PRECISION SIGGEN,HSWGHT,HSWCUT,EVWGHT
+ COMMON /POWGHT/ SIGGEN(4),HSWGHT(0:10),HSWCUT(20),EVWGHT(0:10),
+ & IPOWGC(0:10),ISWCUT(20),IVWGHT(0:10)
+
+ DOUBLE PRECISION P1,P2,XMASS,AMP,PP,PD1,PD2
+ DIMENSION P1(5),P2(5),XMASS(2),AMP(2),PP(7,2),PD1(7),PD2(7)
+ DIMENSION IDPDG(2),IDBAM(2),IPAR(2),IPOSP(2,2),IRPDG(2),IVEC(2),
+ & IRBAM(2),IFL1P(2),IFL2P(2),ISAM(2),JSAM(2),KSAM(2),
+ & IDIR(2),IPROC(2)
+
+ IF(IMODE.EQ.-1) THEN
+C initialization
+ RETURN
+ ELSE IF(IMODE.EQ.-2) THEN
+C output of statistics
+ RETURN
+ ENDIF
+
+ IREJ = 0
+C mass cuts
+ PIMASS = 0.140D0
+C debug output
+ IF(IDEB(45).GE.10) THEN
+ WRITE(LO,'(1X,2A,/16X,7I6)') 'PHO_DIFDIS: (1) ',
+ & 'IDIF1,IDIF2,IMOTH1,IMOTH2,MSOFT,MHARD,IMODE',
+ & IDIF1,IDIF2,IMOTH1,IMOTH2,MSOFT,MHARD,IMODE
+ ENDIF
+ IPAR(1) = IDIF1
+ IPAR(2) = IDIF2
+C save current status
+ MSOFT = 0
+ MHARD = 0
+ KHPOMS = KHPOM
+ KSPOMS = KSPOM
+ KSREGS = KSREG
+ KHDIRS = KHDIR
+ IPOIS1 = IPOIX1
+ IPOIS2 = IPOIX2
+ IPOIS3 = IPOIX3
+ JDA11 = JDAHEP(1,IMOTH1)
+ JDA21 = JDAHEP(2,IMOTH1)
+ JDA12 = JDAHEP(1,IMOTH2)
+ JDA22 = JDAHEP(2,IMOTH2)
+ ISTH1 = ISTHEP(IMOTH1)
+ ISTH2 = ISTHEP(IMOTH2)
+ NHEPS = NHEP
+C get mother data
+ NPOSD(1) = IMOTH1
+ NPOSD(2) = IMOTH2
+ DO 20 I=1,2
+ IDPDG(I) = IDHEP(NPOSD(I))
+ IDBAM(I) = IMPART(NPOSD(I))
+ AMP(I) = PHO_PMASS(IDBAM(I),0)
+ IF(IDPDG(I).EQ.22) THEN
+ PMASSD(I) = 0.765D0
+ PVIRTD(I) = PHEP(5,NPOSD(I))**2
+ ELSE
+ PMASSD(I) = PHO_PMASS(IDBAM(I),0)
+ PVIRTD(I) = 0.D0
+ ENDIF
+ 20 CONTINUE
+C get CM system
+ P1(1) = PHEP(1,IMOTH1)+PHEP(1,IMOTH2)
+ P1(2) = PHEP(2,IMOTH1)+PHEP(2,IMOTH2)
+ P1(3) = PHEP(3,IMOTH1)+PHEP(3,IMOTH2)
+ P1(4) = PHEP(4,IMOTH1)+PHEP(4,IMOTH2)
+ SS = (P1(4)+P1(3))*(P1(4)-P1(3))-P1(1)**2-P1(2)**2
+ ECMD = SQRT(SS)
+ IF(IDEB(45).GE.15) WRITE(LO,'(1X,A,E12.4)')
+ & 'PHO_DIFDIS: availabe energy',ECMD
+C check total available energy
+ IF((AMP(1)+AMP(2)+0.1D0).GE.ECMD) THEN
+ IF(IDEB(45).GE.2) WRITE(LO,'(1X,2A,/5X,A,1P,3E11.3)')
+ & 'PHO_DIFDIS: ',
+ & 'not enough energy for inelastic diffraction',
+ & 'ECM, particle masses:',ECMD,AMP
+ IFAIL(7) = IFAIL(7)+1
+ IREJ = 1
+ RETURN
+ ENDIF
+C boost into CMS
+ DO 10 I=1,4
+ GAMBED(I) = P1(I)/ECMD
+ 10 CONTINUE
+ CALL PHO_ALTRA(GAMBED(4),-GAMBED(1),-GAMBED(2),-GAMBED(3),
+ & PHEP(1,IMOTH1),PHEP(2,IMOTH1),PHEP(3,IMOTH1),
+ & PHEP(4,IMOTH1),PTOT1,P1(1),P1(2),P1(3),P1(4))
+C rotation angles
+ CODD = P1(3)/PTOT1
+ SIDD = SQRT(P1(1)**2+P1(2)**2)/PTOT1
+ COFD = 1.D0
+ SIFD = 0.D0
+ IF(PTOT1*SIDD.GT.1.D-5) THEN
+ COFD = P1(1)/(SIDD*PTOT1)
+ SIFD = P1(2)/(SIDD*PTOT1)
+ ANORF= SQRT(COFD*COFD+SIFD*SIFD)
+ COFD = COFD/ANORF
+ SIFD = SIFD/ANORF
+ ENDIF
+C initial particles in CMS
+ PDCMS(1,1) = 0.D0
+ PDCMS(2,1) = 0.D0
+ PDCMS(3,1) = PTOT1
+ PDCMS(4,1) = P1(4)
+ PDCMS(1,2) = 0.D0
+ PDCMS(2,2) = 0.D0
+ PDCMS(3,2) = -PTOT1
+ PDCMS(4,2) = ECMD-P1(4)
+C get new CM momentum
+ AM12 = PMASSD(1)**2
+ AM22 = PMASSD(2)**2
+ PCMD = PHO_XLAM(SS,AM12,AM22)/(2.D0*ECMD)
+
+C coherence constraint (min/max diffractive mass allowed)
+ IF(IMODE.EQ.2) THEN
+ THRM1 = PARMDL(71)/SQRT(1-PARMDL(72))
+ THRM1 = MAX(THRM1,PARMDL(70)*PARMDL(71))
+ THRM2 = SQRT(1-PARMDL(72))*ECMD
+ THRM2 = MIN(THRM2,ECMD/PARMDL(70))
+ ELSE
+ THRM1 = PARMDL(46)
+ THRM2 = PARMDL(45)*ECMD
+C check kinematic limits
+ IF(THRM2.LE.(4.D0*PARMDL(162))) IPAR(1) = MIN(IPAR(1),1)
+ IF(THRM2.LE.(4.D0*PARMDL(163))) IPAR(2) = MIN(IPAR(2),1)
+ ENDIF
+
+C check energy vs. coherence constraints
+ IF(MAX(PARMDL(162),PMASSD(1)+THRM1).GE.THRM2) IPAR(1) = 0
+ IF(MAX(PARMDL(163),PMASSD(2)+THRM1).GE.THRM2) IPAR(2) = 0
+
+C no phase space available
+ IF(IPAR(1)+IPAR(2).EQ.0) THEN
+ IF(IDEB(45).GE.2) WRITE(LO,'(1X,2A,1P,E11.3,2(/5X,A,2E11.3))')
+ & 'PHO_DIFDIS: ',
+ & 'not enough phase space for ine. diffraction (Ecm)',ECMD,
+ & 'side 1: min. mass, upper mass limit:',
+ & MAX(PARMDL(162),PMASSD(1)+THRM1),THRM2,
+ & 'side 2: min. mass, upper mass limit:',
+ & MAX(PARMDL(163),PMASSD(2)+THRM1),THRM2
+ IFAIL(7) = IFAIL(7)+1
+ IREJ = 1
+ RETURN
+ ENDIF
+
+ ITRY = 0
+ ITRYM = 10
+ IPARS1 = IPAR(1)
+ IPARS2 = IPAR(2)
+
+C main rejection loop
+C -------------------------------
+ 50 CONTINUE
+ ITRY = ITRY+1
+ IF(ITRY.GT.1) THEN
+ IFAIL(13) = IFAIL(13)+1
+ IF(ITRY.GE.ITRYM) THEN
+ IF(IDEB(45).GE.2) WRITE(LO,'(1X,A,I10,2I3)')
+ & 'PHO_DIFDIS: rejection (KEVE,IPAR1/2) ',KEVENT,IPAR
+ IFAIL(7) = IFAIL(7)+1
+ IREJ = 1
+ RETURN
+ ENDIF
+ ENDIF
+ KSPOM = KSPOMS
+ KHPOM = KHPOMS
+ KHDIR = KHDIRS
+ KSREG = KSREGS
+ IPAR(1) = IPARS1
+ IPAR(2) = IPARS2
+C reset mother-daugther relations
+ NHEP = NHEPS
+ JDAHEP(1,IMOTH1) = JDA11
+ JDAHEP(2,IMOTH1) = JDA21
+ JDAHEP(1,IMOTH2) = JDA12
+ JDAHEP(2,IMOTH2) = JDA22
+ ISTHEP(IMOTH1) = ISTH1
+ ISTHEP(IMOTH2) = ISTH2
+ IPOIX1 = IPOIS1
+ IPOIX2 = IPOIS2
+ IPOIX3 = IPOIS3
+C
+ NSLP = 0
+ NCOR = 0
+ 55 CONTINUE
+
+C calculation of kinematics
+ DO 100 I=1,2
+C sampling of masses
+ IRPDG(I) = 0
+ IRBAM(I) = 0
+ IFL1P(I) = IDPDG(I)
+ IFL2P(I) = IDBAM(I)
+ IVEC(I) = 0
+ IDIR(I) = 0
+ ISAM(I) = 0
+ JSAM(I) = 0
+ KSAM(I) = 0
+ IF(IPAR(I).EQ.0) THEN
+C vector meson dominance assumed
+ XMASS(I) = AMP(I)
+ CALL PHO_VECRES(IVEC(I),XMASS(I),IFL1P(I),IFL2P(I))
+C diffraction dissociation
+ ELSE IF(IPAR(I).EQ.1) THEN
+ XMMIN = MAX(PARMDL(161+I),PMASSD(I)+THRM1)
+ PREF2 = PMASSD(I)**2
+ XMASS(I) = PHO_DFMASS(XMMIN,THRM2,PREF2,PVIRTD(I),ISWMDL(22))
+ ELSE
+ WRITE(LO,'(/1X,A,2I3)')
+ & 'PHO_DIFDIS:ERROR:invalid IPAR1,IPAR2',IPAR(1),IPAR(2)
+ CALL PHO_ABORT
+ ENDIF
+ 100 CONTINUE
+
+C sampling of momentum transfer
+ CALL PHO_DIFSLP(IPAR(1),IPAR(2),IVEC(1),IVEC(2),XMASS(1),XMASS(2),
+ & THRM2,TT,SLWGHT,IREJ)
+ IF(IREJ.NE.0) THEN
+ NSLP=NSLP+1
+ IF(NSLP.LT.100) GOTO 55
+ WRITE(LO,'(1X,2A,/10X,2I3,2E12.3)') 'PHO_DIFDIS: ',
+ & 'too many slope rejections:IPAR1,IPAR2,M1,M2',IPAR,XMASS
+ IREJ = 5
+ RETURN
+ ENDIF
+
+C correct for t-M^2 correlation in diffraction
+ IF(DT_RNDM(TT).GT.SLWGHT) THEN
+ NCOR=NCOR+1
+ IF(NCOR.LT.100) GOTO 55
+ WRITE(LO,'(1X,2A,I10)') 'PHO_DIFDIS: ',
+ & 'too many rejections due to t-M**2 correlation (EVE)',KEVENT
+ IREJ = 5
+ RETURN
+ ENDIF
+
+C debug output
+ IF(IDEB(45).GE.5) THEN
+ WRITE(LO,'(1X,A,/5X,2I3,3E12.3)')
+ & 'PHO_DIFDIS: IPAR1,IPAR2,XMASS1,XMASS2,TT',IPAR,XMASS,TT
+ ENDIF
+C not double pomeron scattering
+ IF(IMODE.NE.2) THEN
+C sample diffractive interaction processes
+ DO 120 I=1,2
+ IF(IPAR(I).NE.0) THEN
+C find particle combination
+ IF(IDPDG(I).EQ.IFPAP(1)) THEN
+ IP = 2
+ ELSE IF(IDPDG(I).EQ.IFPAP(2)) THEN
+ IP = 3
+ ELSE IF(IDPDG(I).EQ.990) THEN
+ IP = 4
+ ELSE
+ IP = I+1
+ ENDIF
+C sample dissociation process
+ CALL PHO_DIFPRO(IP,ISWMDL(16),IDPDG(I),990,XMASS(I),
+ & PVIRTD(I),0.D0,SPROB,IPROC(I),ISAM(I),JSAM(I),
+ & KSAM(I),IDIR(I))
+ IF((IPROC(I).EQ.1).OR.(IPROC(I).EQ.8)) THEN
+C store process label
+ IF(IDIR(I).GT.0) THEN
+ IPAR(I) = 4
+ ELSE IF(KSAM(I).GT.0) THEN
+ IPAR(I) = 3
+ ELSE IF(ISAM(I).GT.0) THEN
+ IPAR(I) = 2
+ ELSE
+ IPAR(I) = 1
+C mass fine correction
+ CALL PHO_MASSAD(IDPDG(I),IFL1P(I),IFL2P(I),PMASSD(I),
+ & XMASS(I),XMNEW,IRPDG(I),IRBAM(I))
+ XMASS(I) = XMNEW
+ ENDIF
+ ELSE
+C diffractive pomeron-hadron interaction
+ IPAR(I) = 10+IPROC(I)
+ ENDIF
+C debug output
+ IF(IDEB(45).GE.15) WRITE(LO,'(1X,A,/10X,I3,E12.4,5I3)')
+ & 'PHO_DIFDIS: IP,XMASS,IPROC,ISAM,JSAM,KSAM,IDIR',
+ & IP,XMASS(I),IPROC(I),ISAM(I),JSAM(I),KSAM(I),IDIR(I)
+ ENDIF
+ 120 CONTINUE
+ ENDIF
+C actualize debug information
+ IF(IMODE.EQ.1) THEN
+ IDIFR1 = IPAR(1)
+ IDIFR2 = IPAR(2)
+ ENDIF
+C calculate new momenta in CMS
+ CALL PHO_DIFKIN(XMASS(1),XMASS(2),TT,P1,P2,IREJ)
+ IF(IREJ.NE.0) GOTO 50
+ DO 130 I=1,4
+ PP(I,1) = P1(I)
+ PP(I,2) = P2(I)
+ 130 CONTINUE
+
+C comment line for diffraction
+ CALL PHO_REGPAR(30,IPROCE,IMODE,NPOSD(1),NPOSD(2),XMASS(1),
+ & XMASS(2),TT,ECMD,IPAR(1),IPAR(2),IDPDG(1),IDPDG(2),ICPOS,1)
+C write diffractive strings/particles
+ DO 200 I=1,2
+ I1 = I
+ I2 = 3-I1
+ DO K=1,4
+ PD1(K) = PP(K,I1)
+ PD2(K) = PP(K,I2)
+ ENDDO
+ PP(6,I1) = SIGN(PHEP(5,NPOSD(I1))**2,PHEP(5,NPOSD(I1)))
+ PP(7,I1) = TT
+ IGEN = IPHIST(2,NPOSD(I1))
+ if(IGEN.eq.0) IGEN = -I1*10
+ CALL PHO_DIFPAR(NPOSD(I1),NPOSD(I2),IGEN,IFL1P(I1),IFL2P(I1),
+ & IPAR(I1),PD1,PD2,IPOSP(1,I1),IPOSP(2,I1),IMODE,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(7+I) = IFAIL(7+I)+1
+ IF(IDEB(45).GE.3) WRITE(LO,'(1X,A,2I3,E11.3)')
+ & 'PHO_DIFDIS: rejection by PHO_DIFPAR (I,IPAR,XM)',
+ & I,IPAR(I),XMASS(I)
+ GOTO 50
+ ENDIF
+ ICOLOR(I1,ICPOS) = IPOSP(1,I1)
+ 200 CONTINUE
+C double-pomeron scattering?
+ IF(IMODE.EQ.2) GOTO 150
+
+C diffractive final states
+ DO 300 I=1,2
+ 110 CONTINUE
+ IF(IPAR(I).EQ.0) THEN
+C vector meson production
+ IF(IDPDG(I).EQ.22) THEN
+ IF(ISWMDL(21).GE.0) THEN
+ ISP = IPAMDL(3)
+ IF(ISWMDL(21).GE.1) ISP = IPAMDL(4)
+ CALL PHO_SDECAY(IPOSP(1,I),ISP,2)
+ ENDIF
+C hadronic state of multi-pomeron coupling
+ ELSE IF(IDPDG(I).EQ.990) THEN
+ CALL PHO_SDECAY(IPOSP(1,I),0,2)
+ ENDIF
+ ELSE
+ IF((IPROC(I).EQ.1).OR.(IPROC(I).EQ.8)) THEN
+ IF(ISAM(I)+JSAM(I)+KSAM(I).EQ.0) JSAM(I) = 1
+ IF(IDIR(I).GT.0) THEN
+ IPAR(I) = 4
+ ELSE IF(KSAM(I).GT.0) THEN
+ IPAR(I) = 3
+ ELSE IF(ISAM(I).GT.0) THEN
+ IPAR(I) = 2
+ ELSE
+ IPAR(I) = 1
+ ENDIF
+ ELSE
+ IPAR(I) = 10+IPROC(I)
+ ENDIF
+ IPHIST(I,ICPOS) = IPAR(I)
+C update debug informantion
+ KSPOM = ISAM(I)
+ KSREG = JSAM(I)
+ KHPOM = KSAM(I)
+ KHDIR = IDIR(I)
+ IDIFR1 = IPAR(1)
+ IDIFR2 = IPAR(2)
+ IF((IRPDG(I).NE.0).AND.(ISWMDL(23).GT.0)) THEN
+
+C resonance decay, pi+pi- background
+ P1(1) = PHEP(1,IPOSP(1,I))+PHEP(1,IPOSP(2,I))
+ P1(2) = PHEP(2,IPOSP(1,I))+PHEP(2,IPOSP(2,I))
+ P1(3) = PHEP(3,IPOSP(1,I))+PHEP(3,IPOSP(2,I))
+ P1(4) = PHEP(4,IPOSP(1,I))+PHEP(4,IPOSP(2,I))
+ CALL PHO_REGPAR(1,IRPDG(I),IRBAM(I),IPOSP(1,I),IPOSP(2,I),
+ & P1(1),P1(2),P1(3),P1(4),0,2,0,0,IPOS,1)
+C decay
+ IF(IDPDG(I).EQ.22) THEN
+ IPHIST(2,IPOS) = 3
+ IF(ISWMDL(21).GE.0) THEN
+ ISP = IPAMDL(3)
+ IF(ISWMDL(21).GE.2) ISP = IPAMDL(4)
+ CALL PHO_SDECAY(IPOS,ISP,2)
+ ENDIF
+ ELSE
+ CALL PHO_SDECAY(IPOS,IPAMDL(3),2)
+ ENDIF
+ IREJ = 0
+ ELSE
+
+C particle-pomeron scattering
+ IF(IPAR(I).LE.4) THEN
+C non-diffractive particle-pomeron scattering
+ IGEN = IPHIST(2,NPOSD(I))
+ if(IGEN.eq.0) then
+ if(I.eq.1) then
+ IGEN = 5
+ else
+ IGEN = 6
+ endif
+ endif
+ CALL PHO_STDPAR(IPOSP(1,I),IPOSP(2,I),IGEN,
+ & ISAM(I),JSAM(I),KSAM(I),IDIR(I),IREJ)
+ ELSE
+C diffractive particle-pomeron scattering
+ IPOIX2 = IPOIX2+1
+ IPORES(IPOIX2) = IPROC(I)
+ IPOPOS(1,IPOIX2) = IPOSP(1,I)
+ IPOPOS(2,IPOIX2) = IPOSP(2,I)
+ ENDIF
+ ENDIF
+ ENDIF
+
+C rejection?
+ IF(IREJ.NE.0) THEN
+ IFAIL(20+I) = IFAIL(20+I)+1
+ IF(IPAR(I).GT.1) THEN
+ IF(IPAR(I).EQ.3) IFAIL(7+2*I) = IFAIL(7+2*I)+1
+ IF(IPAR(I).EQ.4) IFAIL(8+2*I) = IFAIL(8+2*I)+1
+ IF(IDIR(I).GT.0) THEN
+ IDIR(I) = 0
+ ELSE IF(KSAM(I).GT.0) THEN
+ KSAM(I) = KSAM(I)-1
+ ELSE IF(ISAM(I).GT.0) THEN
+ ISAM(I) = ISAM(I)-1
+ ENDIF
+ GOTO 110
+ ELSE
+ IF(IDEB(45).GE.2) WRITE(LO,'(1X,A,2I3,E11.3)')
+ & 'PHO_DIFDIS: rejection PHO_STDPAR (I,IPAR,XM)',
+ & I,IPAR(I),XMASS(I)
+ GOTO 50
+ ENDIF
+ ENDIF
+ 300 CONTINUE
+
+ IDIF1 = IPAR(1)
+ IDIF2 = IPAR(2)
+C update debug information
+ KSPOM = KSPOMS+ISAM(1)+ISAM(2)
+ KSREG = KSREGS+JSAM(1)+JSAM(2)
+ KHPOM = KHPOMS+KSAM(1)+KSAM(2)
+ KHDIR = KHDIRS+IDIR(1)+IDIR(2)
+
+ 150 CONTINUE
+
+C debug output
+ IF(IDEB(45).GE.10) THEN
+ WRITE(LO,'(1X,2A,/18X,7I6)') 'PHO_DIFDIS: (2) ',
+ & 'IPAR1,IPAR2,IMOTH1,IMOTH2,MSOFT,MHARD,IMODE',
+ & IPAR,NPOSD,MSOFT,MHARD,IMODE
+ ENDIF
+ IF(IDEB(45).GE.15) THEN
+ WRITE(LO,'(2(/1X,A))') 'PHO_DIFDIS: output of /POEVT1/',
+ & '------------------------------'
+ CALL PHO_PREVNT(0)
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_DIFPRO
+ SUBROUTINE PHO_DIFPRO(IP,ICUT,ID1,ID2,XMASS,P2V1,P2V2,SPROB,
+ & IPROC,ISAM,JSAM,KSAM,IDIR)
+C*********************************************************************
+C
+C sampling of diffraction dissociation process
+C
+C input: IP particle combination
+C ICUT user imposed limitations
+C ID1/2 PDG particle code of scattering particles
+C XMASS diffractively produced mass (GeV)
+C P2V1/2 virtuality of scattering particles (Gev**2)
+C SPROB suppression factor for resolved single and
+C double diffraction dissociation
+C
+C output: IRPOC process ID
+C ISAM number of cut pomerons (soft)
+C JSAM number of cut reggeons
+C KSAM number of cut pomerons (hard)
+C IDIR direct hard interaction
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+
+ ISAM = 0
+ JSAM = 0
+ KSAM = 0
+ IDIR = 0
+
+ IF(XMASS.GT.3.D0) THEN
+C rapidity gap survival probability
+ SPRO = 1.D0
+ IF(ISWMDL(28).GE.1) SPRO = SPROB
+C sample interaction
+ IPROC = 0
+ CALL PHO_SAMPRO(IP,ID1,ID2,XMASS,P2V1,P2V2,SPRO,IPROC)
+ ELSE
+ IPROC = 1
+ ENDIF
+ IF(IPROC.EQ.1) CALL PHO_SAMPRB(XMASS,IP,ISAM,JSAM,KSAM)
+C non-diffractive hadron-pomeron interaction
+ IF((IPROC.EQ.1).OR.(IPROC.EQ.8)) THEN
+C option for suppression of multiple interaction
+ IF(ICUT.EQ.0) THEN
+ IPROC = 1
+ IF(ISAM+KSAM+IDIR.GT.0) THEN
+ ISAM = 1
+ JSAM = 0
+ ELSE
+ JSAM = 1
+ ENDIF
+ KSAM = 0
+ IDIR = 0
+ ELSE IF(ICUT.EQ.1) THEN
+ IF(IDIR.GT.0) THEN
+ ELSE IF(KSAM.GT.0) THEN
+ KSAM = 1
+ ISAM = 0
+ JSAM = 0
+ ELSE IF(ISAM.GT.0) THEN
+ ISAM = 1
+ JSAM = 0
+ ELSE
+ JSAM = 1
+ ENDIF
+ ELSE IF(ICUT.EQ.2) THEN
+ KSAM = MIN(KSAM,1)
+ ELSE IF(ICUT.EQ.3) THEN
+ ISAM = MIN(ISAM,1)
+ ENDIF
+ ENDIF
+ END
+
+CDECK ID>, PHO_DIFPAR
+ SUBROUTINE PHO_DIFPAR(IMOTH1,IMOTH2,IGENM,IFL1,IFL2,IPAR,P1,P2,
+ & IPOSH1,IPOSH2,IMODE,IREJ)
+C***********************************************************************
+C
+C perform string construction for diffraction dissociation
+C
+C input: IMOTH1,2 index of mother particles in POEVT1
+C IGENM production process of mother particles
+C IFL1,IFL2 particle numbers
+C (IDPDG,IDBAM for quasi-elas. hadron)
+C IPAR 0 quasi-elasic scattering
+C 1 single string configuration
+C 2 two string configuration
+C P1 massive 4 momentum of first
+C P1(6) virtuality/squ.mass of particle (GeV**2)
+C P1(7) virtuality of Pomeron (neg, GeV**2)
+C P2 massive 4 momentum of second particle
+C IMODE 1 diffraction dissociation
+C 2 double-pomeron scattering
+C
+C output: IPOSH1,2 index of the particles in /POEVT1/
+C IREJ 0 successful string construction
+C 1 no string construction possible
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION P1(7),P2(7)
+
+ PARAMETER ( EPS = 1.D-7,
+ & DEPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C c.m. kinematics of diffraction
+ INTEGER NPOSD
+ DOUBLE PRECISION ECMD,PCMD,PMASSD,PVIRTD,GAMBED,
+ & SIDD,CODD,SIFD,COFD,PDCMS
+ COMMON /PODCMS/ ECMD,PCMD,PMASSD(2),PVIRTD(2),GAMBED(4),
+ & SIDD,CODD,SIFD,COFD,PDCMS(4,2),NPOSD(2)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DIMENSION PCH1(2,4)
+ data IC1 /0/
+ data IC2 /0/
+
+ IREJ = 0
+ ILTR1 = NHEP+1
+ IGEN = IGENM
+ if(IGENM.le.-10) IGEN = 0
+
+C elastic part
+ IF(IPAR.EQ.0) THEN
+ IF((IFL1.EQ.92).OR.(IFL1.EQ.91)) THEN
+ if(IGEN.eq.0) IGEN = 3
+C pi+/pi- isotropic background
+ CALL PHO_REGPAR(1,IFL1,IFL2,IMOTH1,IMOTH2,
+ & P1(1),P1(2),P1(3),P1(4),0,IGEN,0,0,IPOSH1,1)
+ CALL PHO_SDECAY(IPOSH1,0,-2)
+ ELSE
+ if(IGEN.eq.0) then
+ IGEN = 2
+ if(IFL1.ne.IDHEP(IMOTH1)) IGEN = 3
+ endif
+C registration of particle or resonance
+ CALL PHO_REGPAR(1,IFL1,IFL2,IMOTH1,IMOTH2,P1(1),P1(2),P1(3),
+ & P1(4),0,IGEN,0,0,IPOSH1,1)
+ ENDIF
+
+C diffraction dissociation
+ ELSE IF((IPAR.GE.1).AND.(IPAR.LE.18)) THEN
+C calculation of resulting particle momenta
+ IF(IMOTH1.EQ.NPOSD(1)) THEN
+ K = 2
+ ELSE
+ K = 1
+ ENDIF
+ DO 100 I=1,4
+ PCH1(2,I) = PDCMS(I,K)-P2(I)
+ PCH1(1,I) = P1(I)-PCH1(2,I)
+ 100 CONTINUE
+
+C registration
+ if(IMODE.LT.2) then
+ if(IGEN.eq.0) IGEN = -IGENM/10+4
+ CALL PHO_REGPAR(1,IFL1,IFL2,IMOTH1,IMOTH2,PCH1(1,1),
+ & PCH1(1,2),PCH1(1,3),PCH1(1,4),-1,IGEN,IC1,IC2,IPOSH1,1)
+ else
+ if(IGEN.eq.0) IGEN = 4
+ endif
+ CALL PHO_REGPAR(1,990,0,IMOTH2,IMOTH1,PCH1(2,1),PCH1(2,2),
+ & PCH1(2,3),PCH1(2,4),-1,IGEN,IC1,IC2,IPOSH2,1)
+
+C invalid IPAR
+ ELSE
+ WRITE(LO,'(/1X,A,I6)') 'PHO_DIFPAR:ERROR: invalid IPAR:',IPAR
+ CALL PHO_ABORT
+ ENDIF
+
+C back transformation
+ CALL PHO_LTRHEP(ILTR1,NHEP,CODD,SIDD,COFD,SIFD,GAMBED(4),
+ & GAMBED(1),GAMBED(2),GAMBED(3))
+
+ END
+
+CDECK ID>, PHO_QELAST
+ SUBROUTINE PHO_QELAST(IPROC,JM1,JM2,IREJ)
+C**********************************************************************
+C
+C sampling of quasi elastic processes
+C
+C input: IPROC 2 purely elastic scattering
+C IPROC 3 q-ela. omega/omega/phi/pi+pi- production
+C IPROC 4 double pomeron scattering
+C IPROC -1 initialization
+C IPROC -2 output of statistics
+C JM1/2 index of initial particle 1/2
+C
+C output: initial and final particles in /POEVT1/ involving
+C polarized resonances in /POEVT1/ and decay
+C products
+C
+C IREJ 0 successful
+C 1 failure
+C 50 user rejection
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( NTAB = 20,
+ & EPS = 1.D-10,
+ & PIMASS = 0.13D0,
+ & DEPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C c.m. kinematics of diffraction
+ INTEGER NPOSD
+ DOUBLE PRECISION ECMD,PCMD,PMASSD,PVIRTD,GAMBED,
+ & SIDD,CODD,SIFD,COFD,PDCMS
+ COMMON /PODCMS/ ECMD,PCMD,PMASSD(2),PVIRTD(2),GAMBED(4),
+ & SIDD,CODD,SIFD,COFD,PDCMS(4,2),NPOSD(2)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DOUBLE PRECISION P,PK1,PK2,PMI,RMASS
+ DIMENSION P(4,2),PK1(5),PK2(5),PMI(2),RMASS(2)
+ DIMENSION IFL(2),IDPRO(4)
+ character*15 pho_pname
+ CHARACTER*8 VMESA(0:4),VMESB(0:4)
+ DIMENSION ISAMVM(4,4)
+ DATA IDPRO / 113,223,333,92 /
+ DATA VMESA / 'vmeson ','rho ','omega ','phi ',
+ & 'pi+pi- ' /
+ DATA VMESB / 'vmeson ','rho ','omega ','phi ',
+ & 'pi+pi- ' /
+
+C sampling of elastic/quasi-elastic processes
+ IF((IPROC.EQ.2).OR.(IPROC.EQ.3)) THEN
+ IREJ = 0
+ NPOSD(1) = JM1
+ NPOSD(2) = JM2
+ DO 55 I=1,2
+ PMI(I) = PHEP(5,NPOSD(I))
+ IF(PMI(I).LT.0.1D0) PMI(I) = 0.765D0
+ 55 CONTINUE
+C get CM system
+ PK1(1) = PHEP(1,JM1)+PHEP(1,JM2)
+ PK1(2) = PHEP(2,JM1)+PHEP(2,JM2)
+ PK1(3) = PHEP(3,JM1)+PHEP(3,JM2)
+ PK1(4) = PHEP(4,JM1)+PHEP(4,JM2)
+ SS = (PK1(4)+PK1(3))*(PK1(4)-PK1(3))-PK1(1)**2-PK1(2)**2
+ ECMD = SQRT(SS)
+
+ IF(ECMD.LE.PMI(1)+PMI(2)) THEN
+ IF(IDEB(34).GE.3) WRITE(LO,'(1X,A,I12,3E12.4)')
+ & 'PHO_QELAST: too small mass (EV,ECM,M1,M2)',KEVENT,
+ & ECMD,PMI
+ IREJ = 5
+ RETURN
+ ENDIF
+
+ DO 60 I=1,4
+ GAMBED(I) = PK1(I)/ECMD
+ 60 CONTINUE
+ CALL PHO_ALTRA(GAMBED(4),-GAMBED(1),-GAMBED(2),-GAMBED(3),
+ & PHEP(1,NPOSD(1)),PHEP(2,NPOSD(1)),PHEP(3,NPOSD(1)),
+ & PHEP(4,NPOSD(1)),PTOT1,PK1(1),PK1(2),PK1(3),PK1(4))
+C rotation angles
+ CODD = PK1(3)/PTOT1
+ SIDD = SQRT(PK1(1)**2+PK1(2)**2)/PTOT1
+ COFD = 1.D0
+ SIFD = 0.D0
+ IF(PTOT1*SIDD.GT.1.D-5) THEN
+ COFD = PK1(1)/(SIDD*PTOT1)
+ SIFD = PK1(2)/(SIDD*PTOT1)
+ ANORF = SQRT(COFD*COFD+SIFD*SIFD)
+ COFD = COFD/ANORF
+ SIFD = SIFD/ANORF
+ ENDIF
+C get CM momentum
+ AM12 = PMI(1)**2
+ AM22 = PMI(2)**2
+ PCMD = PHO_XLAM(SS,AM12,AM22)/(2.D0*ECMD)
+
+C production process of mother particles
+ IGEN = IPHIST(2,NPOSD(1))
+ if(IGEN.eq.0) IGEN = IPROC
+
+ ICALL = ICALL + 1
+C main rejection label
+ 50 CONTINUE
+C determine process and final particles
+ IFL(1) = IDHEP(NPOSD(1))
+ IFL(2) = IDHEP(NPOSD(2))
+ IF(IPROC.EQ.3) THEN
+ ITRY = 0
+ 100 CONTINUE
+ ITRY = ITRY+1
+ IF(ITRY.GT.50) THEN
+ IF(IDEB(34).GE.3) WRITE(LO,'(1X,A,I12,I5,E12.4)')
+ & 'PHO_QELAST: mass rejection (EV,ITRY,ECM)',KEVENT,
+ & ITRY,ECMD
+ IREJ = 5
+ RETURN
+ ENDIF
+ XI = DT_RNDM(PCMD)*SIGVM(0,0)-DEPS
+ DO 110 I=1,4
+ DO 120 J=1,4
+ XI = XI-SIGVM(I,J)
+ IF(XI.LE.0.D0) GOTO 130
+ 120 CONTINUE
+ 110 CONTINUE
+ 130 CONTINUE
+ IF(IFL(1).EQ.22) IFL(1) = IDPRO(I)
+ IF(IFL(2).EQ.22) IFL(2) = IDPRO(J)
+ ISAMVM(I,J) = ISAMVM(I,J)+1
+ ISAMQE = ISAMQE+1
+C sample new masses
+ CALL PHO_SAMASS(IFL(1),RMASS(1))
+ CALL PHO_SAMASS(IFL(2),RMASS(2))
+ IF(RMASS(1)+RMASS(2).GE.ECMD) GOTO 100
+ ELSE IF(IPROC.EQ.2) THEN
+ I = 0
+ J = 0
+ ISAMEL = ISAMEL+1
+ RMASS(1) = PHO_PMASS(NPOSD(1),2)
+ RMASS(2) = PHO_PMASS(NPOSD(2),2)
+ ELSE
+ WRITE(LO,'(/1X,A,I6)') 'PHO_QELAST:ERROR: invalid IPROC',IPROC
+ CALL PHO_ABORT
+ ENDIF
+C sample momentum transfer
+ CALL PHO_DIFSLP(0,0,I,J,RMASS(1),RMASS(2),RMASS(1),TT,
+ & SLWGHT,IREJ)
+ IF(IDEB(34).GE.5) WRITE(LO,'(1X,A,2I6,I3,3E11.3)')
+ & 'PHO_QELAST: IF1,2,T,RM1,RM2',IFL,IPROC,TT,RMASS
+C calculate new momenta
+ CALL PHO_DIFKIN(RMASS(1),RMASS(2),TT,PK1,PK2,IREJ)
+ IF(IREJ.NE.0) GOTO 50
+ DO K=1,4
+ P(K,1) = PK1(K)
+ P(K,2) = PK2(K)
+ ENDDO
+C comment line for elastic/quasi-elastic scattering
+ CALL PHO_REGPAR(35,IPROC,0,NPOSD(1),NPOSD(2),RMASS(1),RMASS(2),
+ & TT,ECMD,IFL(1),IFL(2),IDHEP(NPOSD(1)),IDHEP(NPOSD(2)),ICPOS,1)
+
+ I1 = NHEP+1
+C fill /POEVT1/
+ DO 200 I=1,2
+ K = 3-I
+ IF((IFL(I).EQ.92).OR.(IFL(I).EQ.91)) THEN
+C pi+/pi- isotropic background
+ IGEN = 3
+ CALL PHO_REGPAR(1,113,0,NPOSD(I),NPOSD(K),P(1,I),P(2,I),
+ & P(3,I),P(4,I),0,IGEN,0,0,IPOS,1)
+ ICOLOR(I,ICPOS) = IPOS
+ CALL PHO_SDECAY(IPOS,0,-2)
+ ELSE
+C registration
+ IGEN = 2
+ if(IFL(I).ne.IDHEP(NPOSD(I))) IGEN = 3
+ CALL PHO_REGPAR(1,IFL(I),0,NPOSD(I),NPOSD(K),P(1,I),P(2,I),
+ & P(3,I),P(4,I),0,IGEN,0,0,IPOS,1)
+ ICOLOR(I,ICPOS) = IPOS
+ ENDIF
+ 200 CONTINUE
+ I2 = NHEP
+C search for vector mesons
+ DO 300 I=I1,I2
+C decay according to polarization
+ IF((IDHEP(JMOHEP(1,I)).EQ.22).AND.(ISWMDL(21).GE.0)) THEN
+ ISP = IPAMDL(3)
+ IF(ISWMDL(21).GE.1) ISP = IPAMDL(4)
+ CALL PHO_SDECAY(I,ISP,2)
+ ENDIF
+ 300 CONTINUE
+ I2 = NHEP
+C back transformation
+ CALL PHO_LTRHEP(I1,I2,CODD,SIDD,COFD,SIFD,GAMBED(4),GAMBED(1),
+ & GAMBED(2),GAMBED(3))
+
+C initialization of tables
+ ELSE IF(IPROC.EQ.-1) THEN
+ DO 10 I=1,4
+ DO 20 J=1,4
+ ISAMVM(I,J) = 0
+ 20 CONTINUE
+ 10 CONTINUE
+ ISAMEL = 0
+ ISAMQE = 0
+ IF(IFPAP(1).NE.22) VMESA(1) = PHO_PNAME(IFPAP(1),1)
+ IF(IFPAP(2).NE.22) VMESB(1) = PHO_PNAME(IFPAP(2),1)
+ CALL PHO_SAMASS(-1,RMASS(1))
+ ICALL = 0
+
+C output of statistics
+ ELSE IF(IPROC.EQ.-2) THEN
+ IF(ICALL.LT.10) RETURN
+ WRITE(LO,'(/,1X,A,I10/,1X,A)')
+ & 'PHO_QELAST: statistics of (quasi-)elastic processes',ICALL,
+ & '---------------------------------------------------'
+ WRITE(LO,'(1X,A,I10)')
+ & 'sampled elastic processes:',ISAMEL
+ WRITE(LO,'(1X,A,I10)')
+ & 'sampled quasi-elastic vectormeson production:',ISAMQE
+ WRITE(LO,'(15X,4(4X,A))') (VMESB(I),I=1,4)
+ DO 30 I=1,4
+ WRITE(LO,'(5X,A,4I12)') VMESA(I),(ISAMVM(I,K),K=1,4)
+ 30 CONTINUE
+ CALL PHO_SAMASS(-2,RMASS(1))
+ ELSE
+ WRITE(LO,'(/1X,2A,I3)') 'PHO_QELAST:ERROR: ',
+ & 'unknown process ID',IPROC
+ CALL PHO_ABORT
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_CDIFF
+ SUBROUTINE PHO_CDIFF(IMOTH1,IMOTH2,MSOFT,MHARD,IMODE,IREJ)
+C**********************************************************************
+C
+C preparation of /POEVT1/ for double-pomeron scattering
+C
+C input: IMOTH1/2 index of mother particles in /POEVT1/
+C
+C IMODE 1 sampling of pomeron-pomeron scattering
+C -1 initialization
+C -2 output of statistics
+C
+C output: MSOFT number of generated soft strings
+C MHARD number of generated hard strings
+C IREJ 0 accepted
+C 1 rejected
+C 50 user rejection
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-10,
+ & DEPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C energy-interpolation table
+ INTEGER IEETA2
+ PARAMETER ( IEETA2 = 20 )
+ INTEGER ISIMAX
+ DOUBLE PRECISION SIGTAB,SIGECM
+ COMMON /POTABL/ SIGTAB(4,80,IEETA2),SIGECM(4,IEETA2),ISIMAX
+C table of particle indices for recursive PHOJET calls
+ INTEGER MAXIPX
+ PARAMETER ( MAXIPX = 100 )
+ INTEGER IPOPOS,IPORES,IPOIX1,IPOIX2,IPOIX3
+ COMMON /PORECU/ IPOPOS(2,MAXIPX),IPORES(MAXIPX),
+ & IPOIX1,IPOIX2,IPOIX3
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DIMENSION PD(4)
+
+ if(IMODE.ne.1) return
+
+ IREJ = 0
+ IP = 4
+C select first diffraction
+ IF(DT_RNDM(DUM).GT.0.5D0) THEN
+ IPAR1 = 1
+ IPAR2 = 0
+ ELSE
+ IPAR1 = 0
+ IPAR2 = 1
+ ENDIF
+ ITRY2 = 0
+ ITRYM = 1000
+
+C save current status
+ MSOFT = 0
+ MHARD = 0
+ KHPOMS = KHPOM
+ KSPOMS = KSPOM
+ KSREGS = KSREG
+ KHDIRS = KHDIR
+ IPOIS1 = IPOIX1
+ IPOIS2 = IPOIX2
+ IPOIS3 = IPOIX3
+ JDA11 = JDAHEP(1,IMOTH1)
+ JDA21 = JDAHEP(2,IMOTH1)
+ JDA12 = JDAHEP(1,IMOTH2)
+ JDA22 = JDAHEP(2,IMOTH2)
+ ISTH1 = ISTHEP(IMOTH1)
+ ISTH2 = ISTHEP(IMOTH2)
+ NHEPS = NHEP
+
+C find mother particle production process
+ IGEN = IPHIST(2,IMOTH1)
+ if(IGEN.eq.0) IGEN = 4
+
+C main generation loop
+ 60 CONTINUE
+
+ KSPOM = KSPOMS
+ KHPOM = KHPOMS
+ KHDIR = KHDIRS
+ KSREG = KSREGS
+ I1 = IPAR1
+ I2 = IPAR2
+C reset mother-daugther relations
+ NHEP = NHEPS
+ JDAHEP(1,IMOTH1) = JDA11
+ JDAHEP(2,IMOTH1) = JDA21
+ JDAHEP(1,IMOTH2) = JDA12
+ JDAHEP(2,IMOTH2) = JDA22
+ ISTHEP(IMOTH1) = ISTH1
+ ISTHEP(IMOTH2) = ISTH2
+ IPOIX1 = IPOIS1
+ IPOIX2 = IPOIS2
+ IPOIX3 = IPOIS3
+C rejection counter
+ ITRY2 = ITRY2+1
+ IF(ITRY2.GT.1) THEN
+ IFAIL(39) = IFAIL(39)+1
+ IF(ITRY2.GE.ITRYM) GOTO 50
+ ENDIF
+C generate two diffractive events
+ CALL PHO_DIFDIS(I1,I2,IMOTH1,IMOTH2,1.D0,2,MSOFT,MHARD,IREJ)
+ IF(IREJ.NE.0) GOTO 50
+ CALL PHO_DIFDIS(I2,I1,IMOTH1,IMOTH2,1.D0,2,MSOFT,MHARD,IREJ)
+ IF(IREJ.NE.0) GOTO 50
+C mass of pomeron-pomeron system
+ DO 100 I2 = NHEP,1,-1
+ IF(IDHEP(I2).EQ.990) GOTO 110
+ 100 CONTINUE
+ 110 CONTINUE
+ DO 120 I1 = I2-1,1,-1
+ IF(IDHEP(I1).EQ.990) GOTO 130
+ 120 CONTINUE
+ 130 CONTINUE
+ DO 140 I=1,4
+ PD(I) = PHEP(I,I1)+PHEP(I,I2)
+ 140 CONTINUE
+ XMASS = (PD(4)-PD(3))*(PD(4)+PD(3))-PD(1)**2-PD(2)**2
+ IF(IDEB(59).GE.20) WRITE(LO,'(1X,A,2I3,E12.4)')
+ & 'PHO_CDIFF: IPOM1,IPOM2,MASS**2',I1,I2,XMASS
+ IF(XMASS.LT.0.1D0) GOTO 60
+ XMASS = SQRT(XMASS)
+ IF(XMASS.LT.PARMDL(71)) GOTO 60
+
+C sample pomeron-pomeron interaction process
+ CALL PHO_DIFPRO(4,ISWMDL(17),990,990,XMASS,0.D0,0.D0,1.D0,
+ & IPROC,ISAM,JSAM,KSAM,IDIR)
+
+C non-diffractive pomeron-pomeron interactions
+ IF((IPROC.EQ.1).OR.(IPROC.EQ.8)) THEN
+ 200 CONTINUE
+ IF(ISAM+JSAM+KSAM+IDIR.EQ.0) JSAM = 1
+C debug output
+ IF(IDEB(59).GE.15) WRITE(LO,'(1X,A,/5X,I3,E12.4,4I5)')
+ & 'PHO_CDIFF: IP,XMASS,ISAM,JSAM,KSAM,IDIR,',
+ & IP,XMASS,ISAM,JSAM,KSAM,IDIR
+C store debug information
+ IF(IDIR.GT.0) THEN
+ IPAR = 4
+ ELSE IF(KSAM.GT.0) THEN
+ IPAR = 3
+ ELSE IF(ISAM.GT.0) THEN
+ IPAR = 2
+ ELSE
+ IPAR = 1
+ ENDIF
+ IDDPOM = IPAR
+ IF(ISAM+JSAM.GT.0) KSDPO = 1
+ IF(KSAM+IDIR.GT.0) KHDPO = 1
+ KSPOM = ISAM
+ KSREG = JSAM
+ KHPOM = KSAM
+ KHDIR = IDIR
+ KSTRG = 0
+ KSLOO = 0
+C generate pomeron-pomeron interaction
+ CALL PHO_STDPAR(I1,I2,IGEN,ISAM,JSAM,KSAM,IDIR,IREJ)
+ IF(IREJ.NE.0) THEN
+ IFAIL(3) = IFAIL(3)+1
+ IF(IPAR.GT.1) THEN
+ IF(IPAR.EQ.3) IFAIL(9) = IFAIL(9)+1
+ IF(IDIR.GT.0) THEN
+ IFAIL(10) = IFAIL(10)+1
+ IDIR = 0
+ ELSE IF(KSAM.GT.0) THEN
+ KSAM = KSAM-1
+ ELSE IF(ISAM.GT.0) THEN
+ ISAM = ISAM-1
+ ENDIF
+ GOTO 200
+ ELSE
+ IF(IDEB(59).GE.2) WRITE(LO,'(1X,A,2I3,E11.3)')
+ & 'PHO_CDIFF: rejection by PHO_STDPAR (I,IPAR,XM)',
+ & I,IPAR,XMASS
+ GOTO 50
+ ENDIF
+ ENDIF
+
+C diffractive pomeron-pomeron interactions
+ ELSE
+ IPOIX2 = IPOIX2+1
+ IPORES(IPOIX2) = IPROC
+ IPOPOS(1,IPOIX2) = I1
+ IPOPOS(2,IPOIX2) = I2
+ IPAR = 10+IPROC
+ IDDPOM = IPAR
+ ENDIF
+
+C update debug information
+ KSPOM = KSPOMS+ISAM
+ KSREG = KSREGS+JSAM
+ KHPOM = KHPOMS+KSAM
+ KHDIR = KHDIRS+IDIR
+C comment line for central diffraction
+ CALL PHO_REGPAR(40,4,IPAR,IMOTH1,IMOTH2,PD(1),PD(2),PD(3),PD(4),
+ & I1,I2,IDHEP(IMOTH1),IDHEP(IMOTH2),IPOS,1)
+ PHEP(5,IPOS) = XMASS
+C debug output
+ IF(IDEB(59).GE.15) THEN
+ WRITE(LO,'(2(/1X,A))') 'PHO_CDIFF: output of /POEVT1/',
+ & '-----------------------------'
+ CALL PHO_PREVNT(0)
+ ENDIF
+ RETURN
+
+C treatment of rejection
+ 50 CONTINUE
+ IREJ = 1
+ IFAIL(40) = IFAIL(40)+1
+ IF(IDEB(59).GE.3) THEN
+ WRITE(LO,'(1X,A)')
+ & 'PHO_CDIFF: rejection (ITRY,ITRYM)',ITRY2,ITRYM
+ IF(IDEB(59).GE.10) THEN
+ CALL PHO_PREVNT(0)
+ ELSE
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SAMASS
+ SUBROUTINE PHO_SAMASS(IFLA,RMASS)
+C**********************************************************************
+C
+C resonance mass sampling of quasi elastic processes
+C
+C input: IFLA PDG number of particle
+C IFLA -1 initialization
+C IFLA -2 output of statistics
+C
+C output: RMASS particle mass (in GeV)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(EPS = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C parameters of the "simple" Vector Dominance Model
+ DOUBLE PRECISION VMAS,GAMM,RMIN,RMAX,VMSL,VMFA
+ COMMON /POSVDM/ VMAS(4),GAMM(4),RMIN(4),RMAX(4),VMSL(4),VMFA(4)
+
+ PARAMETER(NTABM=50)
+ DIMENSION XMA(4,NTABM),XMC(4,NTABM),RMA(4,NTABM)
+ DIMENSION SUM(4),ICALL(4)
+
+C*****************************************************************
+C initialization of tables
+ IF(IFLA.EQ.-1) THEN
+C
+ NSTEP = NTABM
+ DO 102 I=1,4
+ ICALL(I) = 0
+
+ DELTAM=(RMAX(I)-RMIN(I))/DBLE(NSTEP-1)
+ DO 105 K=1,NSTEP
+ RMA(I,K)=RMIN(I)+DELTAM*DBLE(K-1)
+ 105 CONTINUE
+ 102 CONTINUE
+C calculate table of dsig/dm
+ CALL PHO_DSIGDM(RMA,XMA,NSTEP)
+C output of table
+ IF(IDEB(35).GE.1) THEN
+ WRITE(LO,'(/5X,A)') 'table: mass (GeV) DSIG/DM (mub/GeV)'
+ WRITE(LO,'(1X,A,/1X,A)')
+ & ' (m, rho, m, omega, m, phi, m, pi+pi-)',
+ & ' -------------------------------------------------------'
+ DO 106 K=1,NSTEP
+ WRITE(LO,'(1X,8E12.3)') RMA(1,K),XMA(1,K),
+ & RMA(2,K),XMA(2,K),RMA(3,K),XMA(3,K),RMA(4,K),XMA(4,K)
+ 106 CONTINUE
+ ENDIF
+C make second table for sampling
+ DO 109 I=1,4
+ SUM(I) = 0.D0
+ DO 108 K=2,NSTEP
+ SUM(I) = SUM(I) + (XMA(I,K-1)+XMA(I,K))/2.D0
+ XMC(I,K) = SUM(I)
+ 108 CONTINUE
+ 109 CONTINUE
+C normalization
+ DO 118 K=1,NSTEP
+ DO 119 I=1,4
+ XMC(I,K) = XMC(I,K)/XMC(I,NSTEP)
+ 119 CONTINUE
+ 118 CONTINUE
+ IF(IDEB(35).GE.10) THEN
+ WRITE(LO,'(/5X,A)') 'PHO_DSIGDM: normalized summed table:'
+ WRITE(LO,'(1X,A,/1X,A)')
+ & ' (m, rho, m, omega, m, phi, m, pi+pi-)',
+ & ' -------------------------------------------------------'
+ DO 120 K=1,NSTEP
+ WRITE(LO,'(1X,8E12.3)') RMA(1,K),XMC(1,K),
+ & RMA(2,K),XMC(2,K),RMA(3,K),XMC(3,K),RMA(4,K),XMC(4,K)
+ 120 CONTINUE
+ ENDIF
+C
+C**************************************************
+C output of statistics
+ ELSE IF(IFLA.EQ.-2) THEN
+ WRITE(LO,'(2(/1X,A))') 'PHO_SAMASS: statistics',
+ & '----------------------'
+ WRITE(LO,'(4(/8X,A,I10))') 'rho: ',ICALL(1),
+ & 'omega: ',ICALL(2),'phi: ',ICALL(3),'pi+pi-:',ICALL(4)
+
+C
+C********************************************************
+C sampling of RMASS
+ ELSE
+C quasi-elastic vector meson production
+ IF(IFLA.EQ.113) THEN
+ KP = 1
+ ELSE IF(IFLA.EQ.223) THEN
+ KP = 2
+ ELSE IF(IFLA.EQ.333) THEN
+ KP = 3
+ ELSE IF(IFLA.EQ.92) THEN
+ KP = 4
+C quasi-elastic production of h*
+ ELSE IF(IFLA.EQ.91) THEN
+ RMASS = 0.35D0
+ RETURN
+C elastic hadron scattering
+ ELSE
+ RMASS = PHO_PMASS(IFLA,1)
+ IF(IDEB(35).GE.20) WRITE(LO,'(1X,A,I7,E12.3)')
+ & 'PHO_SAMASS: IFLA,MASS',IFLA,RMASS
+ RETURN
+ ENDIF
+C
+C sample mass of vector mesonsn / two-pi background
+ XI = DT_RNDM(RMASS) + EPS
+C binary search
+ IF((XMC(KP,1).LE.XI).AND.(XMC(KP,NSTEP).GE.XI)) THEN
+ KMIN=1
+ KMAX=NSTEP
+ 300 CONTINUE
+ IF((KMAX-KMIN).EQ.1) GOTO 400
+ KK=(KMAX+KMIN)/2
+ IF(XI.LE.XMC(KP,KK)) THEN
+ KMAX=KK
+ ELSE
+ KMIN=KK
+ ENDIF
+ GOTO 300
+ 400 CONTINUE
+ ELSE
+ WRITE(LO,'(1X,A)') 'PHO_SAMASS:ERROR:XI out of range'
+ WRITE(LO,'(5X,A,I7,I6,3E12.4)') 'EVENT,IFLA,XI,XImin,XImax',
+ & KEVENT,IFLA,XI,XMC(KP,1),XMC(KP,NSTEP)
+ CALL PHO_ABORT
+ ENDIF
+C fine interpolation
+ RMASS = RMA(KP,KMIN)+
+ & (RMA(KP,KMAX)-RMA(KP,KMIN))/
+ & (XMC(KP,KMAX)-XMC(KP,KMIN))
+ & *(XI-XMC(KP,KMIN))
+ IF(IDEB(35).GE.20) THEN
+ IF(IDEB(35).GE.25) WRITE(LO,'(1X,A,3E15.3)')
+ & 'PHO_SAMASS: MLEFT,MRIGHT,RMASS',
+ & RMA(KP,KMIN),RMA(KP,KMAX),RMASS
+ WRITE(LO,'(1X,A,I7,E12.3)') 'PHO_SAMASS: IFLA,MASS',
+ & IFLA,RMASS
+ ENDIF
+ ICALL(KP) = ICALL(KP)+1
+
+ ENDIF
+ END
+
+CDECK ID>, PHO_DSIGDM
+ SUBROUTINE PHO_DSIGDM(RMA,XMA,NSTEP)
+C**********************************************************************
+C
+C differential cross section DSIG/DM of low mass enhancement
+C
+C input: RMA(4,NTABM) mass values
+C output: XMA(4,NTABM) DSIG/DM of resonances
+C 1 rho production
+C 2 omega production
+C 3 phi production
+C 4 pi-pi continuum
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-10 )
+
+ PARAMETER(NTABM=50)
+ DIMENSION XMA(4,NTABM),RMA(4,NTABM)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C parameters of the "simple" Vector Dominance Model
+ DOUBLE PRECISION VMAS,GAMM,RMIN,RMAX,VMSL,VMFA
+ COMMON /POSVDM/ VMAS(4),GAMM(4),RMIN(4),RMAX(4),VMSL(4),VMFA(4)
+
+ PIMASS = 0.135
+C rho meson shape (mass dependent width)
+ QRES = SQRT(VMAS(1)**2 - 4.D0*PIMASS**2)
+ DO 100 I=1,NSTEP
+ XMASS = RMA(1,I)
+ QQ = SQRT(XMASS**2 - 4.D0*PIMASS**2)
+ GAMMA = GAMM(1)*(QQ/QRES)**3
+ XMA(1,I) = XMASS*GAMMA*(VMAS(1)/XMASS)**PARMDL(170)
+ & /((VMAS(1)**2-XMASS**2)**2+VMAS(1)**2*GAMMA**2)
+ 100 CONTINUE
+C omega/phi meson (constant width)
+ DO 200 K=2,3
+ DO 300 I=1,NSTEP
+ XMASS = RMA(K,I)
+ XMA(K,I) = XMASS*GAMM(K)
+ & /((VMAS(K)**2-XMASS**2)**2+VMAS(K)**2*GAMM(K)**2)
+ 300 CONTINUE
+ 200 CONTINUE
+C pi-pi continuum
+ DO 400 I=1,NSTEP
+ XMASS = RMA(4,I)
+ XMA(4,I) = (XMASS-0.29D0)**2/XMASS
+ 400 CONTINUE
+
+ END
+
+CDECK ID>, PHO_SDECAY
+ SUBROUTINE PHO_SDECAY(NPOS,ISP,ILEV)
+C**********************************************************************
+C
+C decay of single resonance of /POEVT1/:
+C decay in helicity frame according to polarization, isotropic
+C decay and decay with limited transverse phase space possible
+C
+C ATTENTION:
+C reference to particle number of CPC has to exist
+C
+C input: NPOS position in /POEVT1/
+C ISP 0 decay according to phase space
+C 1 decay according to transversal polarization
+C 2 decay according to longitudinal polarization
+C 3 decay with limited phase space
+C ILEV decay mode to use
+C 1 strong only
+C 2 strong and ew of tau, charm, and bottom
+C 3 strong and electro-weak decays
+C negative: remove mother resonance after decay
+C
+C output: /POEVT1/,/POEVT2/ final particles according to decay mode
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( EPS = 1.D-15,
+ & DEPS = 1.D-10 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+C particle decay data
+ double precision wg_sec_list
+ integer idec_list,isec_list
+ COMMON /POPAR3/ wg_sec_list(500),idec_list(3,300),
+ & isec_list(3,500)
+C auxiliary data for three particle decay
+ DOUBLE PRECISION ECM,PCM,COD,COF,SIF
+ COMMON /PO3DCY/ ECM(3),PCM(3),COD(3),COF(3),SIF(3)
+
+ DIMENSION WGHD(20),KCH(20),ID(3)
+
+ IMODE = ABS(ILEV)
+ IF(IDEB(36).GE.15) WRITE(LO,'(1X,A,3I5)')
+ & 'PHO_SDECAY: NPOS,ISP,ILEV',NPOS,ISP,ILEV
+
+C comment entry
+ IF(ISTHEP(NPOS).GT.11) RETURN
+
+C particle stable?
+ IDcpc = IMPART(NPOS)
+ IF(IDcpc.EQ.0) return
+ if(idec_list(1,IDcpc).eq.0) return
+ IDabs = iabs(IDcpc)
+
+C different decay modi (times)
+ IF(IMODE.EQ.1) THEN
+ if(idec_list(1,IDabs).ne.1) return
+ ELSE IF(IMODE.EQ.2) THEN
+ if(idec_list(1,IDabs).gt.2) return
+ ELSE IF(IMODE.EQ.3) THEN
+ if(idec_list(1,IDabs).gt.3) return
+ ELSE
+ WRITE(LO,'(/1X,A,I5)') 'PHO_SDECAY: invalid mode (ILEV)',ILEV
+ CALL PHO_ABORT
+ ENDIF
+
+C decay products, check for mass limitations
+ K = 0
+ WGSUM = 0.D0
+ AMIST = PHEP(5,NPOS)
+ DO 100 I=idec_list(2,IDabs),idec_list(3,IDabs)
+ AMSUM = 0.D0
+ DO 200 L=1,3
+ ID(L) = isec_list(L,I)
+ IF(ID(L).NE.0) AMSUM = AMSUM+pho_pmass(ID(L),0)
+ 200 CONTINUE
+ IF(AMSUM.LT.AMIST) THEN
+ K = K+1
+ WGHD(K) = wg_sec_list(I)
+ KCH(K) = I
+ ENDIF
+ 100 CONTINUE
+ IF(K.EQ.0)THEN
+ WRITE(LO,'(/1X,A,I6,3E12.4)')
+ & 'PHO_SDECAY: particle mass too small (NPOS,MA,DCYM)',
+ & NPOS,AMIST,AMSUM
+ CALL PHO_PREVNT(0)
+ RETURN
+ ENDIF
+
+C sample new decay channel
+ XI = (DT_RNDM(AMSUM)-EPS)*WGSUM
+ K = 0
+ WGSUM = 0.D0
+ 500 CONTINUE
+ K = K+1
+ WGSUM = WGSUM+WGHD(K)
+ IF(XI.GT.WGSUM) GOTO 500
+ IK = KCH(K)
+ ID(1) = isec_list(1,IK)
+ ID(2) = isec_list(2,IK)
+ ID(3) = isec_list(3,IK)
+ if(IDcpc.lt.0) then
+ ID(1) = ipho_anti(ID(1))
+ ID(2) = ipho_anti(ID(2))
+ ID(3) = ipho_anti(ID(3))
+ endif
+
+C rotation
+ PTOT = SQRT(PHEP(1,NPOS)**2+PHEP(2,NPOS)**2+PHEP(3,NPOS)**2)
+ CXS = PHEP(1,NPOS)/PTOT
+ CYS = PHEP(2,NPOS)/PTOT
+ CZS = PHEP(3,NPOS)/PTOT
+C boost
+ GBET = PTOT/AMIST
+ GAM = PHEP(4,NPOS)/AMIST
+
+ IF(ID(3).EQ.0) THEN
+C two particle decay
+ CALL PHO_SDECY2(AMIST,pho_pmass(ID(1),0),pho_pmass(ID(2),0),ISP)
+ ELSE
+C three particle decay
+ CALL PHO_SDECY3(AMIST,pho_pmass(ID(1),0),pho_pmass(ID(2),0),
+ & pho_pmass(ID(3),0),ISP)
+ ENDIF
+
+ IF(ILEV.LT.0) THEN
+ IF(NHEP.NE.NPOS) THEN
+ WRITE(LO,'(/1X,2A,2I5)') 'PHO_SDECAY:ERROR: ',
+ & 'cannot remove resonance (NPOS,NHEP)',NPOS,NHEP
+ CALL PHO_ABORT
+ ENDIF
+ IMO1 = JMOHEP(1,NPOS)
+ IMO2 = JMOHEP(2,NPOS)
+ NHEP = NHEP-1
+ ELSE
+ IMO1 = NPOS
+ IMO2 = 0
+ ENDIF
+ IPH1 = IPHIST(1,NPOS)
+ IPH2 = IPHIST(2,NPOS)
+
+C back transformation and registration
+ DO 300 I=1,3
+ IF(ID(I).NE.0) THEN
+ CALL PHO_LTRANS(GAM,GBET,CXS,CYS,CZS,COD(I),COF(I),SIF(I),
+ & PCM(I),ECM(I),PTOT,CX,CY,CZ,EE)
+ XX = PTOT*CX
+ YY = PTOT*CY
+ ZZ = PTOT*CZ
+ CALL PHO_REGPAR(1,0,ID(I),IMO1,IMO2,XX,YY,ZZ,EE,
+ & IPH1,IPH2,0,0,IPOS,1)
+ ENDIF
+ 300 CONTINUE
+
+ 400 CONTINUE
+C debug output
+ IF(IDEB(36).GE.20) THEN
+ WRITE(LO,'(2(/1X,A))') 'PHO_SDECAY: /POEVT1/',
+ & '--------------------'
+ CALL PHO_PREVNT(0)
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_SDECY2
+ SUBROUTINE PHO_SDECY2(UMO,AM1,AM2,ISP)
+C**********************************************************************
+C
+C isotropic/anisotropic two particle decay in CM system,
+C (transversely/longitudinally polarized boson into two
+C pseudo-scalar mesons)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C auxiliary data for three particle decay
+ DOUBLE PRECISION ECM,PCM,COD,COF,SIF
+ COMMON /PO3DCY/ ECM(3),PCM(3),COD(3),COF(3),SIF(3)
+
+ UMO2=UMO*UMO
+ AM11=AM1*AM1
+ AM22=AM2*AM2
+ ECM(1)=(UMO2+AM11-AM22)/(2.D0*UMO)
+ ECM(2)=UMO-ECM(1)
+ WAU=ECM(1)*ECM(1)-AM11
+ IF(WAU.LT.0.D0) THEN
+ WRITE(LO,'(/1X,A,E12.4)') 'PHO_SDECY2:ERROR:too small mass',WAU
+ CALL PHO_ABORT
+ ENDIF
+ PCM(1)=SQRT(WAU)
+ PCM(2)=PCM(1)
+
+ CALL PHO_SFECFE(SIF(1),COF(1))
+ IF(ISP.EQ.0) THEN
+C no polarization
+ COD(1) = 2.D0*DT_RNDM(UMO)-1.D0
+ ELSE IF(ISP.EQ.1) THEN
+C transverse polarization
+ 400 CONTINUE
+ COD(1) = 2.D0*DT_RNDM(AM22)-1.D0
+ SID12 = 1.D0-COD(1)*COD(1)
+ IF(SID12.LT.DT_RNDM(AM1)) GOTO 400
+ ELSE IF(ISP.EQ.2) THEN
+C longitudinal polarization
+ 500 CONTINUE
+ COD(1) = 2.D0*DT_RNDM(AM2)-1.D0
+ COD12 = COD(1)*COD(1)
+ IF(COD12.LT.DT_RNDM(AM11)) GOTO 500
+ ELSE
+ WRITE(LO,'(/1X,2A,I3)') 'PHO_SDECY2:ERROR: ',
+ & 'invalid polarization',ISP
+ CALL PHO_ABORT
+ ENDIF
+
+ COD(2) = -COD(1)
+ COF(2) = -COF(1)
+ SIF(2) = -SIF(1)
+
+ END
+
+CDECK ID>, PHO_SDECY3
+ SUBROUTINE PHO_SDECY3(UMO,AM1,AM2,AM3,ISP)
+C**********************************************************************
+C
+C isotropic/anisotropic three particle decay in CM system,
+C (transversely/longitudinally polarized boson into three
+C pseudo-scalar mesons)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-30,
+ & EPS = 1.D-15 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C auxiliary data for three particle decay
+ DOUBLE PRECISION ECM,PCM,COD,COF,SIF
+ COMMON /PO3DCY/ ECM(3),PCM(3),COD(3),COF(3),SIF(3)
+
+ DIMENSION F(5),XX(5)
+
+C calculation of maximum of S2 phase space weight
+ UMOO=UMO+UMO
+ GU=(AM2+AM3)**2
+ GO=(UMO-AM1)**2
+ UFAK=1.0000000000001D0
+ IF (GU.GT.GO) UFAK=0.99999999999999D0
+ OFAK=2.D0-UFAK
+ GU=GU*UFAK
+ GO=GO*OFAK
+ DS2=(GO-GU)/99.D0
+ AM11=AM1*AM1
+ AM22=AM2*AM2
+ AM33=AM3*AM3
+ UMO2=UMO*UMO
+ RHO2=0.D0
+ S22=GU
+ DO 124 I=1,100
+ S21=S22
+ S22=GU+(I-1.D0)*DS2
+ RHO1=RHO2
+ RHO2=PHO_XLAM(S22,UMO2,AM11)*PHO_XLAM(S22,AM22,AM33)/(S22+EPS)
+ IF(RHO2.LT.RHO1) GOTO 125
+ 124 CONTINUE
+
+ 125 CONTINUE
+ S2SUP=(S22-S21)/2.D0+S21
+ SUPRHO=PHO_XLAM(S2SUP,UMO2,AM11)*PHO_XLAM(S2SUP,AM22,AM33)
+ & /(S2SUP+EPS)
+ SUPRHO=SUPRHO*1.05D0
+ XO=S21-DS2
+ IF(GU.LT.GO.AND.XO.LT.GU) XO=GU
+ IF(GU.GT.GO.AND.XO.GT.GU) XO=GU
+ XX(1)=XO
+ XX(3)=S22
+ X1=(XO+S22)*0.5D0
+ XX(2)=X1
+ F(3)=RHO2
+ F(1)=PHO_XLAM(XO,UMO2,AM11)*PHO_XLAM(XO,AM22,AM33)/(XO+EPS)
+ F(2)=PHO_XLAM(X1,UMO2,AM11)*PHO_XLAM(X1,AM22,AM33)/(X1+EPS)
+ DO 126 I=1,16
+ X4=(XX(1)+XX(2))*0.5D0
+ X5=(XX(2)+XX(3))*0.5D0
+ F(4)=PHO_XLAM(X4,UMO2,AM11)*PHO_XLAM(X4,AM22,AM33)/(X4+EPS)
+ F(5)=PHO_XLAM(X5,UMO2,AM11)*PHO_XLAM(X5,AM22,AM33)/(X5+EPS)
+ XX(4)=X4
+ XX(5)=X5
+ DO 128 II=1,5
+ IA=II
+ DO 131 III=IA,5
+ IF(F(II).LT.F(III)) THEN
+ FH=F(II)
+ F(II)=F(III)
+ F(III)=FH
+ FH=XX(II)
+ XX(II)=XX(III)
+ XX(III)=FH
+ ENDIF
+ 131 CONTINUE
+ 128 CONTINUE
+ SUPRHO=F(1)
+ S2SUP=XX(1)
+ DO 129 II=1,3
+ IA=II
+ DO 130 III=IA,3
+ IF (XX(II).LT.XX(III)) THEN
+ FH=F(II)
+ F(II)=F(III)
+ F(III)=FH
+ FH=XX(II)
+ XX(II)=XX(III)
+ XX(III)=FH
+ ENDIF
+ 130 CONTINUE
+ 129 CONTINUE
+ 126 CONTINUE
+
+ AM23=(AM2+AM3)**2
+
+C selection of S1
+ ITH=0
+ 200 CONTINUE
+ ITH=ITH+1
+ IF(ITH.GT.200) THEN
+ WRITE(LO,'(/1X,A,I10)')
+ & 'PHO_SDECY3:ERROR: too many iterations',ITH
+ CALL PHO_ABORT
+ ENDIF
+ S2=AM23+DT_RNDM(AM2)*((UMO-AM1)**2-AM23)
+ Y=DT_RNDM(AM23)*SUPRHO
+ RHO=PHO_XLAM(S2,UMO2,AM11)*PHO_XLAM(S2,AM22,AM33)/S2
+ IF(Y.GT.RHO) GOTO 200
+
+C selection of S2
+ S1=DT_RNDM(AM2)*RHO+AM11+AM22-(S2-UMO2+AM11)*(S2+AM22-AM33)
+ & /(2.D0*S2)-RHO/2.D0
+ S3=UMO2+AM11+AM22+AM33-S1-S2
+ ECM(1)=(UMO2+AM11-S2)/UMOO
+ ECM(2)=(UMO2+AM22-S3)/UMOO
+ ECM(3)=(UMO2+AM33-S1)/UMOO
+ PCM(1)=SQRT((ECM(1)+AM1)*(ECM(1)-AM1))
+ PCM(2)=SQRT((ECM(2)+AM2)*(ECM(2)-AM2))
+ PCM(3)=SQRT((ECM(3)+AM3)*(ECM(3)-AM3))
+
+C calculation of angles: TH between p1,p2; TH1 p3,p1; TH2 p3,p2
+ IF((PCM(1).LE.EPS).OR.(PCM(2).LE.EPS)) THEN
+ COSTH=(DT_RNDM(S1)-0.5D0)*2.D0
+ ELSE
+ COSTH=(ECM(1)*ECM(2)+0.5D0*(AM11+AM22-S1))/(PCM(1)*PCM(2))
+ ENDIF
+ COSTH2=(PCM(3)*PCM(3)+PCM(2)*PCM(2)-PCM(1)*PCM(1))
+ & /(2.D0*PCM(2)*PCM(3))
+ SINTH2=SQRT(1.D0-COSTH2*COSTH2)
+ SINTH1=COSTH2*SQRT(1.D0-COSTH*COSTH)-COSTH*SINTH2
+ COSTH1=COSTH*COSTH2+SINTH2*SQRT(1.D0-COSTH*COSTH)
+
+C selection of the sperical coordinates of particle 3
+ CALL PHO_SFECFE(SIF(3),COF(3))
+ IF(ISP.EQ.0) THEN
+C no polarization
+ COD(3) = 2.D0*DT_RNDM(S2)-1.D0
+ ELSE IF(ISP.EQ.1) THEN
+C transverse polarization
+ 400 CONTINUE
+ COD(3) = 2.D0*DT_RNDM(S1)-1.D0
+ SID32 = 1.D0-COD(3)*COD(3)
+ IF(SID32.LT.DT_RNDM(COSTH)) GOTO 400
+ ELSE IF(ISP.EQ.2) THEN
+C longitudinal polarization
+ 500 CONTINUE
+ COD(3) = 2.D0*DT_RNDM(COSTH2)-1.D0
+ COD32 = COD(3)*COD(3)
+ IF(COD32.LT.DT_RNDM(SINTH1)) GOTO 500
+ ELSE
+ WRITE(LO,'(/1X,2A,I3)') 'PHO_SDECY3:ERROR: ',
+ & 'invalid polarization',ISP
+ CALL PHO_ABORT
+ ENDIF
+
+C selection of the rotation angle of p1-p2 plane along p3
+ IF(ISP.EQ.0) THEN
+ CALL PHO_SFECFE(SFE,CFE)
+ ELSE
+ SFE = 0.D0
+ CFE = 1.D0
+ ENDIF
+ CX11=-COSTH1
+ CY11=SINTH1*CFE
+ CZ11=SINTH1*SFE
+ CX22=-COSTH2
+ CY22=-SINTH2*CFE
+ CZ22=-SINTH2*SFE
+
+ SID3 = SQRT((1.D0+COD(3))*(1.D0-COD(3)))
+ COD(1)=CX11*COD(3)+CZ11*SID3
+ IF((1.D0-COD(1)*COD(1)).LT.DEPS) THEN
+ WRITE(LO,'(1X,A,5E12.4)') 'PHO_SDECY3: COS(TH1) > 1',
+ & COD(1),COF(3),SID3,CX11,CZ11
+ CALL PHO_PREVNT(-1)
+ ENDIF
+
+ SID1=SQRT((1.D0+COD(1))*(1.D0-COD(1)))
+ COF(1)=(CX11*SID3*COF(3)-CY11*SIF(3)-CZ11*COD(3)*COF(3))/SID1
+ SIF(1)=(CX11*SID3*SIF(3)+CY11*COF(3)-CZ11*COD(3)*SIF(3))/SID1
+ COD(2)=CX22*COD(3)+CZ22*SID3
+ SID2=SQRT((1.D0+COD(2))*(1.D0-COD(2)))
+ COF(2)=(CX22*SID3*COF(3)-CY22*SIF(3)-CZ22*COD(3)*COF(3))/SID2
+ SIF(2)=(CX22*SID3*SIF(3)+CY22*COF(3)-CZ22*COD(3)*SIF(3))/SID2
+
+ END
+
+CDECK ID>, PHO_DFMASS
+ DOUBLE PRECISION FUNCTION PHO_DFMASS(XMIN,XMAX,PREF2,PVIRT2,IMODE)
+C**********************************************************************
+C
+C sampling of Mx diffractive mass distribution within
+C limits XMIN, XMAX
+C
+C input: XMIN,XMAX mass limitations (GeV)
+C PREF2 original particle mass/ reference mass
+C (squared, GeV**2)
+C PVIRT2 particle virtuality
+C IMODE M**2 mass distribution
+C 1 1/(M**2+Q**2)
+C 2 1/(M**2+Q**2)**alpha
+C -1 1/(M**2-Mref**2+Q**2)
+C -2 1/(M**2-Mref**2+Q**2)**alpha
+C
+C output: diffractive mass (GeV)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(EPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ IF((XMIN.GE.XMAX).OR.(XMIN.LE.0.3D0)) THEN
+ WRITE(LO,'(/1X,2A,3E12.4)') 'PHO_DFMASS:ERROR: ',
+ & 'invalid mass limits',XMIN,XMAX,PREF2
+ CALL PHO_PREVNT(-1)
+ PHO_DFMASS = 0.135D0
+ RETURN
+ ENDIF
+
+ IF(IMODE.GT.0) THEN
+ PM2 = -PVIRT2
+ ELSE
+ PM2 = PREF2 - PVIRT2
+ ENDIF
+
+C critical pomeron
+ IF(ABS(IMODE).EQ.1) THEN
+ XMIN2 = LOG(XMIN**2-PM2)
+ XMAX2 = LOG(XMAX**2-PM2)
+ XI = (XMAX2-XMIN2)*DT_RNDM(PM2)+XMIN2
+ XMA2 = EXP(XI)+PM2
+
+C supercritical pomeron
+ ELSE IF(ABS(IMODE).EQ.2) THEN
+ DDELTA = 1.D0-PARMDL(48)
+ XMIN2 = (XMIN**2-PM2)**DDELTA
+ XMAX2 = (XMAX**2-PM2)**DDELTA
+ XI = (XMAX2-XMIN2)*DT_RNDM(PM2)+XMIN2
+ XMA2 = XI**(1.D0/DDELTA)+PM2
+ ELSE
+ WRITE(LO,'(/,1X,A,I3)')
+ & 'PHO_DFMASS:ERROR: unsupported mode',IMODE
+ CALL PHO_ABORT
+ ENDIF
+
+ PHO_DFMASS = SQRT(XMA2)
+C debug output
+ IF(IDEB(43).GE.15) THEN
+ WRITE(LO,'(1X,A,4E12.3)') 'PHO_DFMASS:Mmin,Mmax,Mref,Mass',
+ & XMIN,XMAX,PREF2,SQRT(XMA2)
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_DIFSLP
+ SUBROUTINE PHO_DIFSLP(IDF1,IDF2,IVEC1,IVEC2,XM1,XM2,XMX,
+ & TT,SLWGHT,IREJ)
+C**********************************************************************
+C
+C sampling of T (Mandelstam variable) distribution within
+C certain limits TMIN, TMAX
+C
+C input: IDF1,2 type of diffractive vertex
+C 0 elastic/quasi-elastic scattering
+C 1 diffraction dissociation
+C IVEC1,2 vector meson IDs in case of quasi-elastic
+C scattering, otherwise 0
+C XM1 mass of diffractive system 1 (GeV)
+C XM2 mass of diffractive system 2 (GeV)
+C XMX max. mass of diffractive system (GeV)
+C
+C output: TT squared momentum transfer ( < 0, GeV**2)
+C SLWGHT weight to allow for mass-dependent slope
+C IREJ 0 successful sampling
+C 1 masses too big for given T range
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(EPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C c.m. kinematics of diffraction
+ INTEGER NPOSD
+ DOUBLE PRECISION ECMD,PCMD,PMASSD,PVIRTD,GAMBED,
+ & SIDD,CODD,SIFD,COFD,PDCMS
+ COMMON /PODCMS/ ECMD,PCMD,PMASSD(2),PVIRTD(2),GAMBED(4),
+ & SIDD,CODD,SIFD,COFD,PDCMS(4,2),NPOSD(2)
+C cross sections
+ INTEGER IPFIL,IFAFIL,IFBFIL
+ DOUBLE PRECISION SIGTOT,SIGELA,SIGVM,SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD,SIGHSD,SIGLDD,SIGHDD,SIGCDF,
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1,SIGTR2,SIGLOO,
+ & SIGDPO,SIG1SO,SIG1HA,SLOEL,SLOVM,SIGCOR,
+ & FSUP,FSUD,FSUH,ECMFIL,P2AFIL,P2BFIL
+ COMMON /POCSEC/ SIGTOT,SIGELA,SIGVM(0:4,0:4),SIGINE,SIGNDF,SIGDIR,
+ & SIGLSD(2),SIGHSD(2),SIGLDD,SIGHDD,SIGCDF(0:4),
+ & SIGPOM,SIGREG,SIGHAR,SIGTR1(2),SIGTR2(2),SIGLOO,
+ & SIGDPO(4),SIG1SO,SIG1HA,SLOEL,SLOVM(4,4),SIGCOR,
+ & FSUP(2),FSUD(2),FSUH(2),ECMFIL,P2AFIL,P2BFIL,
+ & IPFIL,IFAFIL,IFBFIL
+C Reggeon phenomenology parameters
+ DOUBLE PRECISION ALPOM,ALPOMP,GP,B0POM,ALREG,ALREGP,GR,B0REG,
+ & GPPP,GPPR,B0PPP,B0PPR,VDMFAC,VDMQ2F,B0HAR,AKFAC
+ COMMON /POPREG/ ALPOM,ALPOMP,GP(2),B0POM(2),
+ & ALREG,ALREGP,GR(2),B0REG(2),
+ & GPPP,GPPR,B0PPP,B0PPR,
+ & VDMFAC(4),VDMQ2F(4),B0HAR,AKFAC
+C parameters of 2x2 channel model
+ DOUBLE PRECISION PHISUP,RMASS,VAR,AMPFAC,ELAFAC,VFAC
+ COMMON /PO2CHA/ PHISUP(2),RMASS(2),VAR,AMPFAC(4),ELAFAC(4),VFAC
+C parameters of the "simple" Vector Dominance Model
+ DOUBLE PRECISION VMAS,GAMM,RMIN,RMAX,VMSL,VMFA
+ COMMON /POSVDM/ VMAS(4),GAMM(4),RMIN(4),RMAX(4),VMSL(4),VMFA(4)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ IREJ = 0
+ XM12 = XM1**2
+ XM22 = XM2**2
+ SS = ECMD**2
+C
+C range of momentum transfer t
+ TMIN = -PARMDL(68)
+ TMAX = -PARMDL(69)
+C determine min. abs(t) necessary to produce masses
+ PCM2 = PCMD**2
+ PCMP2 = PHO_XLAM(SS,XM12,XM22)**2/(4.D0*SS)
+ IF(PCMP2.LE.0.D0) THEN
+ IREJ = 1
+ TT = 0.D0
+ RETURN
+ ENDIF
+ TMINP = PMASSD(1)**2+XM12+2.D0*PCMD*SQRT(PCMP2)
+ & -2.D0*SQRT((PMASSD(1)**2+PCM2)*(XM12+PCMP2))
+C
+ IF(TMINP.LT.TMAX) THEN
+ IF(IDEB(44).GE.3) THEN
+ WRITE(LO,'(1X,2A,/5X,5E12.3)') 'PHO_DIFSLP:REJECTION: ',
+ & 'too large Tmin (XM1/2,TMIN,TMAX,TMINP)',
+ & XM1,XM2,TMIN,TMAX,TMINP
+ ENDIF
+ IFAIL(32) = IFAIL(32)+1
+ IREJ = 1
+ TT = 0.D0
+ RETURN
+ ENDIF
+ TMINA = MIN(TMIN,TMINP)
+C
+C calculation of slope (mass-dependent parametrization)
+ IF(IDF1+IDF2.GT.0) THEN
+C diffraction dissociation
+ XMP12 = XM1**2+PVIRTD(1)
+ XMP22 = XM2**2+PVIRTD(2)
+ XMX1 = SQRT(XMP12)
+ XMX2 = SQRT(XMP22)
+ CALL PHO_SCALES(PMASSD(1),PMASSD(2),XMX1,XMX2,SC1,SC2,SB1,SB2)
+ FAC = 4.D0*(PMASSD(1)*PMASSD(2))**2
+ SLOPE = DBLE(IDF1+IDF2)*B0PPP
+ & +2.D0*(B0POM(1)*SB1+B0POM(2)*SB2+ALPOMP*LOG(SS*FAC
+ & /((PMASSD(1)**2+XMP12)*(PMASSD(2)**2+XMP22))+PARMDL(47)))
+ SLOPE = MAX(SLOPE,1.D0)
+C
+ XMA1 = XMX
+ XMA2 = XMX
+ IF(IDF1.EQ.0) THEN
+ XMA1 = XM1
+ ELSE IF(IDF1.EQ.0) THEN
+ XMA2 = XM2
+ ENDIF
+ XMP12 = XMA1**2+PVIRTD(1)
+ XMP22 = XMA2**2+PVIRTD(2)
+ XMX1 = SQRT(XMP12)
+ XMX2 = SQRT(XMP22)
+ CALL PHO_SCALES(PMASSD(1),PMASSD(2),XMX1,XMX2,SC1,SC2,SB1,SB2)
+ SLMIN = DBLE(IDF1+IDF2)*B0PPP
+ & +2.D0*(B0POM(1)*SB1+B0POM(2)*SB2+ALPOMP*LOG(SS*FAC
+ & /((PMASSD(1)**2+XMP12)*(PMASSD(2)**2+XMP22))+PARMDL(47)))
+ SLMIN = MAX(SLMIN,1.D0)
+ ELSE
+C elastic/quasi-elastic scattering
+ IF(ISWMDL(13).EQ.0) THEN
+C external slope values
+ PRINT LO,'PHO_DIFSLP:ERROR: this option is not installed !'
+ CALL PHO_ABORT
+ ELSE IF(ISWMDL(13).EQ.1) THEN
+C model slopes
+ IF(IVEC1*IVEC2.EQ.0) THEN
+ SLOPE = SLOEL
+ ELSE
+ SLOPE = SLOVM(IVEC1,IVEC2)
+ ENDIF
+ SLMIN = SLOPE
+ ELSE
+ WRITE(LO,'(/1X,A,I5)') 'SASDSDT:ERROR: invalid ISWMDL(13)',
+ & ISWMDL(13)
+ CALL PHO_ABORT
+ ENDIF
+ ENDIF
+C
+C determine max. abs(t) to avoid underflows
+ TMAXP = -25.D0/SLOPE
+ TMAXA = MAX(TMAX,TMAXP)
+C
+ IF(TMINA.LT.TMAXA) THEN
+ IF(IDEB(44).GE.3) THEN
+ WRITE(LO,'(1X,2A,/5X,5E12.3)') 'PHO_DIFSLP:REJECTION: ',
+ & 'too small Tmax (XM1/2,TMINA,TMAXA,SLOPE)',
+ & XM1,XM2,TMINA,TMAXA,SLOPE
+ ENDIF
+ IFAIL(32) = IFAIL(32)+1
+ IREJ = 1
+ TT = 0.D0
+ RETURN
+ ENDIF
+C
+C sampling from corrected range of T
+ TMINE = EXP(SLMIN*TMINA)
+ TMAXE = EXP(SLMIN*TMAXA)
+ XI = (TMINE-TMAXE)*DT_RNDM(SLMIN)+TMAXE
+ TT = LOG(XI)/SLMIN
+ SLWGHT = EXP((SLOPE-SLMIN)*TT)
+C
+C debug output
+ IF(IDEB(44).GE.15) THEN
+ WRITE(LO,'(1X,A,1P,E12.3/5X,A,2I2,2X,2I2,2E10.2,/5X,A,5E10.2)')
+ & 'PHO_DIFSLP: sampled momentum transfer:',TT,
+ & 'IDF1/2,IVEC1/2,XM1/2:',IDF1,IDF2,IVEC1,IVEC2,XM1,XM2,
+ & 'Tmi,Tmx,SLMIN,SLOPE,WGHT:',TMINP,TMAXP,SLMIN,SLOPE,SLWGHT
+ ENDIF
+ END
+
+CDECK ID>, PHO_DIFKIN
+ SUBROUTINE PHO_DIFKIN(XMP1,XMP2,TT,PMOM1,PMOM2,IREJ)
+C**********************************************************************
+C
+C calculation of diffractive kinematics
+C
+C input: XMP1 mass of outgoing particle system 1 (GeV)
+C XMP2 mass of outgoing particle system 2 (GeV)
+C TT momentum transfer (GeV**2, negative)
+C
+C output: PMOM1(5) four momentum of outgoing system 1
+C PMOM2(5) four momentum of outgoing system 2
+C IREJ 0 kinematics consistent
+C 1 kinematics inconsistent
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(EPS = 1.D-10,
+ & DEPS = 0.001)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C c.m. kinematics of diffraction
+ INTEGER NPOSD
+ DOUBLE PRECISION ECMD,PCMD,PMASSD,PVIRTD,GAMBED,
+ & SIDD,CODD,SIFD,COFD,PDCMS
+ COMMON /PODCMS/ ECMD,PCMD,PMASSD(2),PVIRTD(2),GAMBED(4),
+ & SIDD,CODD,SIFD,COFD,PDCMS(4,2),NPOSD(2)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DOUBLE PRECISION PMOM1,PMOM2
+ DIMENSION PMOM1(5),PMOM2(5)
+
+C debug output
+ IF(IDEB(49).GT.10) WRITE(LO,'(1X,A,/5X,5E12.4)')
+ & 'PHO_DIFKIN: Ecmd,Pcmd,Mini-1,Mini-2,TT:',
+ & ECMD,PCMD,XMP1,XMP2,TT
+
+C general kinematic constraints
+ IREJ = 1
+ IF(ECMD.LE.1.1D0*(XMP1+XMP2)) RETURN
+
+C new squared cms momentum
+ XMP12 = XMP1**2
+ XMP22 = XMP2**2
+ SS = ECMD**2
+ PCM2 = PCMD**2
+ PCMP2 = PHO_XLAM(SS,XMP12,XMP22)**2/(4.D0*SS)
+
+C new longitudinal/transverse momentum
+ E1I = SQRT(PCM2+PMASSD(1)**2)
+ E1F = SQRT(PCMP2+XMP12)
+ E2F = SQRT(PCMP2+XMP22)
+ PLONG = (TT+PCM2+PCMP2-(E1I-E1F)**2)/(2.D0*PCMD)
+ PTRAN = PCMP2-PLONG**2
+
+C check consistency of kinematics
+ IF(PTRAN.LT.0.D0) THEN
+ IF(IDEB(49).GE.1) THEN
+ WRITE(LO,'(1X,2A,I10)') 'PHO_DIFKIN: ',
+ & 'inconsistent kinematics in event call: ',KEVENT
+ WRITE(LO,'(1X,A,/5X,1p,6E11.3)')
+ & 'PHO_DIFKIN: XMP1,XMP2,TT,PCMP,PLONG,PTRANS',
+ & XMP1,XMP2,TT,SQRT(PCMP2),PLONG,SIGN(SQRT(ABS(PTRAN)),PTRAN)
+ ENDIF
+ IREJ = 1
+ RETURN
+ ELSE
+ PTRAN = SQRT(PTRAN)
+ ENDIF
+ XI = PI2*DT_RNDM(PTRAN)
+
+C outgoing momenta in cm. system
+ PMOM1(4) = E1F
+ PMOM1(1) = PTRAN*COS(XI)
+ PMOM1(2) = PTRAN*SIN(XI)
+ PMOM1(3) = PLONG
+ PMOM1(5) = XMP1
+
+ PMOM2(4) = E2F
+ PMOM2(1) = -PMOM1(1)
+ PMOM2(2) = -PMOM1(2)
+ PMOM2(3) = -PLONG
+ PMOM2(5) = XMP2
+ IREJ = 0
+
+C debug output / precision check
+ IF(IDEB(49).GE.0) THEN
+C check kinematics
+ XM1 = (PMOM1(4)-PMOM1(3))*(PMOM1(4)+PMOM1(3))
+ & -PMOM1(1)**2-PMOM1(2)**2
+ XM1 = SIGN(SQRT(ABS(XM1)),XM1)
+ XM2 = (PMOM2(4)-PMOM2(3))*(PMOM2(4)+PMOM2(3))
+ & -PMOM2(1)**2-PMOM2(2)**2
+ XM2 = SIGN(SQRT(ABS(XM2)),XM2)
+ IF((ABS(XM1-XMP1).GT.DEPS).OR.(ABS(XM1-XMP1).GT.DEPS)) THEN
+ WRITE(LO,'(1X,2A,/5X,4E11.4)') 'PHO_DIFKIN: ',
+ & 'inconsistent masses: MINI-1,MOUT-1,MINI-2,MOUT-2',
+ & XMP1,XM1,XMP2,XM2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+C output
+ IF(IDEB(49).GT.10) THEN
+ WRITE(LO,'(1X,A,5E11.3,/1X,A,5E11.3)')
+ & 'PHO_DIFKIN: P1',PMOM1,' P2',PMOM2
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_VECRES
+ SUBROUTINE PHO_VECRES(IVEC,RMASS,IDPDG,IDBAM)
+C**********************************************************************
+C
+C sampling of vector meson resonance in diffractive processes
+C (nothing done for hadrons)
+C
+C input: /POSVDM/ VDMFAC factors
+C
+C output: IVEC 0 incoming hadron
+C 1 rho 0
+C 2 omega
+C 3 phi
+C 4 pi+/pi- background
+C RMASS mass of vector meson (GeV)
+C IDPDG particle ID according to PDG
+C IDBAM particle ID according to CPC
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER(EPS = 1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C parameters of the "simple" Vector Dominance Model
+ DOUBLE PRECISION VMAS,GAMM,RMIN,RMAX,VMSL,VMFA
+ COMMON /POSVDM/ VMAS(4),GAMM(4),RMIN(4),RMAX(4),VMSL(4),VMFA(4)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+C particle code translation
+ DIMENSION ITRANS(4)
+C rho0,omega,phi,pi+/pi-
+ DATA ITRANS /113, 223, 333, 92 /
+
+ IDPDO = IDPDG
+C
+C vector meson production
+ IF(IDPDG.EQ.22) THEN
+ XI = DT_RNDM(RMASS)*(VMFA(1)+VMFA(2)+VMFA(3)+VMFA(4))
+ SUM = 0.D0
+ DO 55 K=1,4
+ SUM = SUM + VMFA(K)
+ IF(XI.LE.SUM) GOTO 65
+ 55 CONTINUE
+ 65 CONTINUE
+C
+ IDPDG = ITRANS(K)
+ IDBAM = ipho_pdg2id(IDPDG)
+ IVEC = K
+C sample mass of vector meson
+ CALL PHO_SAMASS(IDPDG,RMASS)
+
+C hadronic resonance of multi-pomeron coupling
+ ELSE IF(IDPDG.EQ.990) THEN
+ K = 4
+ IDPDG = 91
+ IDBAM = ipho_pdg2id(IDPDG)
+ IVEC = 4
+C sample mass of two-pion system
+ CALL PHO_SAMASS(IDPDG,RMASS)
+
+C hadron remnants in inucleus interactions
+ ELSE IF(IDPDG.EQ.81) THEN
+ IF(IHFLD(1,1).EQ.0) THEN
+ CALL PHO_SEAFLA(1,IFL1,IFL2,RMASS)
+ CALL PHO_HACODE(IFL1,IFL2,IDBA1,IDBA2)
+ ELSE
+ CALL PHO_HACODE(IHFLD(1,1),IHFLD(1,2),IDBA1,IDBA2)
+ ENDIF
+ RMAS1 = PHO_PMASS(IDBA1,0)
+ RMAS2 = PHO_PMASS(IDBA2,0)
+ IF((IDBA2.NE.0).AND.
+ & (DT_RNDM(RMAS1).LT.(RMAS1/(RMAS1+RMAS2)))) THEN
+ IDBAM = IDBA2
+ RMASS = RMAS2
+ ELSE
+ IDBAM = IDBA1
+ RMASS = RMAS1
+ ENDIF
+ IDPDG = IPHO_ID2PDG(IDBAM)
+ IVEC = 0
+ ELSE IF(IDPDG.EQ.82) THEN
+ IF(IHFLD(2,1).EQ.0) THEN
+ CALL PHO_SEAFLA(2,IFL1,IFL2,RMASS)
+ CALL PHO_HACODE(IFL1,IFL2,IDBA1,IDBA2)
+ ELSE
+ CALL PHO_HACODE(IHFLD(2,1),IHFLD(2,2),IDBA1,IDBA2)
+ ENDIF
+ RMAS1 = PHO_PMASS(IDBA1,0)
+ RMAS2 = PHO_PMASS(IDBA2,0)
+ IF((IDBA2.NE.0).AND.
+ & (DT_RNDM(RMAS1).LT.(RMAS1/(RMAS1+RMAS2)))) THEN
+ IDBAM = IDBA2
+ RMASS = RMAS2
+ ELSE
+ IDBAM = IDBA1
+ RMASS = RMAS1
+ ENDIF
+ IDPDG = IPHO_ID2PDG(IDBAM)
+ IVEC = 0
+ ENDIF
+C debug output
+ IF(IDEB(47).GE.5) THEN
+ WRITE(LO,'(1X,A,/10X,3I7,E12.4)')
+ & 'PHO_VECRES: IDPDG-OLD,IDPDG,IDBAM,MASS',
+ & IDPDO,IDPDG,IDBAM,RMASS
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_DIFRES
+ SUBROUTINE PHO_DIFRES(IDMOTH,IVAL1,IVAL2,
+ & IDPDG,IDBAM,RMASS,RGAM,RWG,LISTL)
+C**********************************************************************
+C
+C list of resonance states for low mass resonances
+C
+C input: IDMOTH PDG ID of mother particle
+C IVAL1,2 quarks (photon only)
+C
+C output: IDPDG list of PDG IDs for possible resonances
+C IDBAM list of corresponding CPC IDs
+C RMASS mass
+C RGAMS decay width
+C RMASS additional weight factor
+C LISTL entries in current list
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION IDPDG(10),IDBAM(10),RMASS(10),RGAM(10),RWG(10)
+
+ PARAMETER (EPS = 1.D-10,
+ & DEPS = 1.D-15)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+ DIMENSION RWGHT(20),IRPDG(20),IRBAM(20)
+ DATA IRPDG /113, 223, 333, 50223, 40113, 60223, 10333, 30113,
+ & 12212, 42212, -12212, -42212,
+ & 8*0 /
+ DATA RWGHT /1.D0, 0.11D0, 0.1D0, 0.11D0, 1.D0, 0.11D0, 0.1D0,
+ & 1.D0, 1.D0, 1.D0, 1.D0, 1.D0,
+ & 8*1.D0 /
+
+ DATA init /0/
+
+C initialize table
+ if(init.eq.0) then
+ do i=1,20
+ if(IRPDG(i).ne.0) then
+ IRBAM(i) = ipho_pdg2id(IRPDG(i))
+ endif
+ enddo
+ init = 1
+ endif
+
+C copy table with particles and isospin weights
+ LISTL = 0
+ IF(IDMOTH.EQ.22) THEN
+ I1 = 4
+ I2 = 8
+ ELSE IF(IDMOTH.EQ.2212) THEN
+ I1 = 9
+ I2 = 10
+ ELSE IF(IDMOTH.EQ.-2212) THEN
+ I1 = 11
+ I2 = 12
+ ELSE
+ RETURN
+ ENDIF
+
+ DO 100 I=I1,I2
+ LISTL = LISTL+1
+ IDBAM(LISTL) = IRBAM(I)
+ IDPDG(LISTL) = IRPDG(I)
+ RMASS(LISTL) = xm_list(iabs(IDBAM(LISTL)))
+ RGAM(LISTL) = gam_list(iabs(IDBAM(LISTL)))
+ RWG(LISTL) = RWGHT(I)
+ 100 CONTINUE
+
+C debug output
+ IF(IDEB(85).GE.20) THEN
+ WRITE(LO,'(1X,A,3I7)') 'PHO_DIFRES: mother,quarks',IDMOTH,
+ & IVAL1,IVAL2
+ DO 200 I=1,LISTL
+ WRITE(LO,'(1X,I3,2I7,E12.4)') I,IDBAM(I),IDPDG(I),RMASS(I)
+ 200 CONTINUE
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_MASSAD
+ SUBROUTINE PHO_MASSAD(IFLMO,IFL1,IFL2,
+ & PMASS,XMCON,XMOUT,IDPDG,IDcpc)
+C***********************************************************************
+C
+C fine-correction of low mass strings to mass of corresponding
+C resonance or two particle threshold
+C
+C input: IFLMO PDG ID of mother particle
+C IFL1,2 requested parton flavours
+C (not used at the moment)
+C PMASS reference mass (mass of mother particle)
+C XMCON conjecture of mass
+C
+C output: XMOUT output mass (adjusted input mass)
+C moved ot nearest mass possible
+C IDPDG PDG resonance ID
+C IDcpc CPC resonance ID
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DEPS = 1.D-8 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+C particle decay data
+ double precision wg_sec_list
+ integer idec_list,isec_list
+ COMMON /POPAR3/ wg_sec_list(500),idec_list(3,300),
+ & isec_list(3,500)
+
+ DIMENSION XWG(10),RMA(10),RGA(10),RWG(10),IRPDG(10),IRBAM(10)
+
+ XMINP = XMCON
+ IDPDG = 0
+ IDcpc = 0
+ XMOUT = XMINP
+
+C resonance treatment activated?
+ IF(ISWMDL(23).EQ.0) RETURN
+
+ CALL PHO_DIFRES(IFLMO,IFL1,IFL2,IRPDG,IRBAM,RMA,RGA,RWG,LISTL)
+ IF(LISTL.LT.1) THEN
+ IF(IDEB(7).GE.2) WRITE(LO,'(1X,A,3I7)')
+ & 'PHO_MASSAD: no resonances for (IFMO,IF1,IF2)',
+ & IFLMO,IFL1,IFL2
+ GOTO 50
+ ENDIF
+C mass small?
+ PMASSL = (PMASS+0.15D0)**2
+ XMINP2 = XMINP**2
+C determine resonance probability
+ DM2 = 1.1D0
+ RPROB = (PMASSL+DM2)*(XMINP2-PMASSL)/(DM2*XMINP2)
+ IF(RPROB.LT.DT_RNDM(PMASSL)) THEN
+C sample new resonance
+ XWGSUM = 0.D0
+ DO 100 I=1,LISTL
+ XWG(I) = RWG(I)/RMA(I)**2
+ XWGSUM = XWGSUM+XWG(I)
+ 100 CONTINUE
+
+ ITER = 0
+ 150 CONTINUE
+ ITER = ITER+1
+ IF(ITER.GE.5) THEN
+ IDcpc = 0
+ IDPDG = 0
+ XMOUT = XMINP
+ GOTO 50
+ ENDIF
+
+ I = 0
+ XI = XWGSUM*DT_RNDM(XMOUT)
+ 200 CONTINUE
+ I = I+1
+ XWGSUM = XWGSUM-XWG(I)
+ IF((XI.LT.XWGSUM).AND.(I.LT.LISTL)) GOTO 200
+ IDPDG = IRPDG(I)
+ IDcpc = IRBAM(I)
+ GARES = RGA(I)
+ XMRES = RMA(I)
+ XMRES2 = XMRES**2
+C sample new mass (from Breit-Wigner cross section)
+ ALO = ATAN((PMASSL-XMRES2)/(XMRES*GARES))
+ AHI = ATAN((5.D0-XMRES2)/(XMRES*GARES))
+ XI = (AHI-ALO)*DT_RNDM(XMRES)+ALO
+ XMOUT = XMRES*GARES*TAN(XI)+XMRES2
+ XMOUT = SQRT(XMOUT)
+
+C check mass for decay
+ AMDCY = 2.D0*XMRES
+ ID = abs(IDcpc)
+ DO 250 IK=idec_list(2,ID),idec_list(3,ID)
+ AMSUM = 0.D0
+ DO 275 I=1,3
+ IF(isec_list(I,IK).NE.0)
+ & AMSUM = AMSUM + xm_list(iabs(isec_list(I,IK)))
+ 275 CONTINUE
+ AMDCY = MIN(AMDCY,AMSUM)
+ 250 CONTINUE
+ IF(AMDCY.GE.XMOUT) GOTO 150
+
+C debug output
+ IF(IDEB(7).GE.10)
+ & WRITE(LO,'(1X,2A,/1X,3I6,2E10.3,2I7,2E10.3)')
+ & 'PHO_MASSAD: ',
+ & 'IFMO,IF1,IF2,XMCON,XMOUT,IDPDG,IDcpc,RMA,RGA',
+ & IFLMO,IFL1,IFL2,XMCON,XMOUT,IDPDG,IDcpc,RMA(I),RGA(I)
+ RETURN
+ ENDIF
+
+ 50 CONTINUE
+C debug output
+ IF(IDEB(7).GE.15)
+ & WRITE(LO,'(1X,A,/1X,3I6,2E10.3)')
+ & 'PHO_MASSAD: string sampled: IFMO,IF1,IF2,XMCON,XMOUT',
+ & IFLMO,IFL1,IFL2,XMCON,XMOUT
+
+ END
+
+CDECK ID>, PHO_PDF
+ SUBROUTINE PHO_PDF(NPAR,X,SCALE2,P2VIR,PD)
+C***************************************************************
+C
+C call different PDF sets for different particle types
+C
+C input: NPAR 1 IGRP(1),ISET(1)
+C 2 IGRP(2),ISET(2)
+C X momentum fraction
+C SCALE2 squared scale (GeV**2)
+C P2VIR particle virtuality (positive, GeV**2)
+C
+C output PD(-6:6) field containing the x*PDF fractions
+C
+C***************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION PD(-6:6)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+ DIMENSION PARAM(20),VALUE(20)
+ CHARACTER*20 PARAM
+
+ REAL XR,P2R,Q2R,F2GM,XPDFGM
+ DIMENSION XPDFGM(-6:6)
+
+C check of kinematic boundaries
+ XI = X
+ IF(X.GT.1.D0) THEN
+ IF(IDEB(37).GE.0) THEN
+ WRITE(LO,'(/,1X,A,E15.8/)')
+ & 'PHO_PDF: x>1 (corrected to x=1)',X
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ XI = 0.99999999999D0
+ ELSE IF(X.LE.0.D0) THEN
+ IF(IDEB(37).GE.0) THEN
+ WRITE(LO,'(/,1X,A,E15.8/)') 'PHO_PDF: X <= 0 ',X
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ XI = 0.0001D0
+ ENDIF
+
+ DO 100 I=-6,6
+ PD(I) = 0.D0
+ 100 CONTINUE
+ IRET = 1
+
+ IF((NPAR.EQ.1).OR.(NPAR.EQ.2)) THEN
+
+C internal PDFs
+
+ IF(IEXT(NPAR).EQ.0) THEN
+ IF(ITYPE(NPAR).EQ.1) THEN
+C proton PDFs
+ IF(IGRP(NPAR).EQ.5) THEN
+ IF(ISET(NPAR).EQ.3) THEN
+ CALL PHO_DOR92HO(XI,SCALE2,UDV,DV,GL,UDB,SB,CB,BB)
+ UV = UDV-DV
+ UDB = 2.D0*UDB
+ DEL = 0.D0
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.4) THEN
+ CALL PHO_DOR92LO(XI,SCALE2,UDV,DV,GL,UDB,SB,CB,BB)
+ UV = UDV-DV
+ UDB = 2.D0*UDB
+ DEL = 0.D0
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.5) THEN
+ CALL PHO_DOR94HO(XI,SCALE2,UV,DV,DEL,UDB,SB,GL)
+C heavy quarks from GRV92-HO
+ AMU2 = 0.3
+ ALAM2 = 0.248 * 0.248
+ S = LOG (LOG(SCALE2/ALAM2) / LOG(AMU2/ALAM2))
+ SC = 0.820
+ ALC = 0.98
+ BEC = 0.0
+ AKC = -0.625 - 0.523 * S
+ AGC = 0.0
+ BC = 1.896 + 1.616 * S
+ DC = 4.12 + 0.683 * S
+ EC = 4.36 + 1.328 * S
+ ESC = 0.677 + 0.679 * S
+ CB = PHO_DOR92FS(X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+ SBO = 1.297
+ ALB = 0.99
+ BEB = 0.0
+ AKB = 0.0 - 0.193 * S
+ AGB = 0.0
+ BBO = 0.0
+ DB = 3.447 + 0.927 * S
+ EB = 4.68 + 1.259 * S
+ ESB = 1.892 + 2.199 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.6) THEN
+ CALL PHO_DOR94LO(XI,SCALE2,UV,DV,DEL,UDB,SB,GL)
+C heavy quarks from GRV92-LO
+ AMU2 = 0.25
+ ALAM2 = 0.232D0**2
+ S = LOG (LOG(SCALE2/ALAM2) / LOG(AMU2/ALAM2))
+ SC = 0.888
+ ALC = 1.01
+ BEC = 0.37
+ AKC = 0.0
+ AGC = 0.0
+ BC = 4.24 - 0.804 * S
+ DC = 3.46 + 1.076 * S
+ EC = 4.61 + 1.490 * S
+ ESC = 2.555 + 1.961 * S
+ CB = PHO_DOR92FS(X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+ SBO = 1.351
+ ALB = 1.00
+ BEB = 0.51
+ AKB = 0.0
+ AGB = 0.0
+ BBO = 1.848
+ DB = 2.929 + 1.396 * S
+ EB = 4.71 + 1.514 * S
+ ESB = 4.02 + 1.239 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.7) THEN
+ CALL PHO_DOR94DI(XI,SCALE2, UV, DV, DEL, UDB, SB, GL)
+C heavy quarks from GRV92-HO
+ AMU2 = 0.3
+ ALAM2 = 0.248 * 0.248
+ S = LOG (LOG(SCALE2/ALAM2) / LOG(AMU2/ALAM2))
+ SC = 0.820
+ ALC = 0.98
+ BEC = 0.0
+ AKC = -0.625 - 0.523 * S
+ AGC = 0.0
+ BC = 1.896 + 1.616 * S
+ DC = 4.12 + 0.683 * S
+ EC = 4.36 + 1.328 * S
+ ESC = 0.677 + 0.679 * S
+ CB = PHO_DOR92FS(X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+ SBO = 1.297
+ ALB = 0.99
+ BEB = 0.0
+ AKB = 0.0 - 0.193 * S
+ AGB = 0.0
+ BBO = 0.0
+ DB = 3.447 + 0.927 * S
+ EB = 4.68 + 1.259 * S
+ ESB = 1.892 + 2.199 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.8) THEN
+ CALL PHO_DOR98LO(XI,SCALE2,UV,DV,US,DS,SB,GL)
+ DEL = DS-US
+ UDB = DS+US
+C heavy quarks from GRV92-LO
+ AMU2 = 0.25
+ ALAM2 = 0.232D0**2
+ S = LOG (LOG(SCALE2/ALAM2) / LOG(AMU2/ALAM2))
+ SC = 0.888
+ ALC = 1.01
+ BEC = 0.37
+ AKC = 0.0
+ AGC = 0.0
+ BC = 4.24 - 0.804 * S
+ DC = 3.46 + 1.076 * S
+ EC = 4.61 + 1.490 * S
+ ESC = 2.555 + 1.961 * S
+ CB = PHO_DOR92FS(X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+ SBO = 1.351
+ ALB = 1.00
+ BEB = 0.51
+ AKB = 0.0
+ AGB = 0.0
+ BBO = 1.848
+ DB = 2.929 + 1.396 * S
+ EB = 4.71 + 1.514 * S
+ ESB = 4.02 + 1.239 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.9) THEN
+* CALL PHO_DOR98SC(XI,SCALE2,UV,DV,US,DS,SB,GL)
+ DEL = DS-US
+ UDB = DS+US
+C heavy quarks from GRV92-LO
+ AMU2 = 0.25
+ ALAM2 = 0.232D0**2
+ S = LOG (LOG(SCALE2/ALAM2) / LOG(AMU2/ALAM2))
+ SC = 0.888
+ ALC = 1.01
+ BEC = 0.37
+ AKC = 0.0
+ AGC = 0.0
+ BC = 4.24 - 0.804 * S
+ DC = 3.46 + 1.076 * S
+ EC = 4.61 + 1.490 * S
+ ESC = 2.555 + 1.961 * S
+ CB = PHO_DOR92FS(X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+ SBO = 1.351
+ ALB = 1.00
+ BEB = 0.51
+ AKB = 0.0
+ AGB = 0.0
+ BBO = 1.848
+ DB = 2.929 + 1.396 * S
+ EB = 4.71 + 1.514 * S
+ ESB = 4.02 + 1.239 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+ IRET = 0
+ ENDIF
+ PD(-5) = BB
+ PD(-4) = CB
+ PD(-3) = SB
+ PD(-2) = 0.5D0*(UDB-DEL)
+ PD(-1) = 0.5D0*(UDB+DEL)
+ PD(0) = GL
+ PD(1) = DV+PD(-1)
+ PD(2) = UV+PD(-2)
+ PD(3) = PD(-3)
+ PD(4) = PD(-4)
+ PD(5) = PD(-5)
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.2) THEN
+C pion PDFs (default for pi+)
+ IF(IGRP(NPAR).EQ.5) THEN
+ IF(ISET(NPAR).EQ.1) THEN
+ CALL PHO_DORPHO (XI,SCALE2,VA,GL,QB,CB,BB)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.2) THEN
+ CALL PHO_DORPLO (XI,SCALE2,VA,GL,QB,CB,BB)
+ IRET = 0
+ ENDIF
+ PD(-5) = BB
+ PD(-4) = CB
+ PD(-3) = QB
+ PD(-2) = QB
+ PD(-1) = QB+VA
+ PD(0) = GL
+ PD(1) = QB
+ PD(2) = VA+QB
+ PD(3) = QB
+ PD(4) = CB
+ PD(5) = BB
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.3) THEN
+C photon PDFs
+ IF(IGRP(NPAR).EQ.5) THEN
+ IF(ISET(NPAR).EQ.1) THEN
+ CALL PHO_DORGH0 (XI,SCALE2,UB,DB,SB,CB,BB,GL)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.2) THEN
+ CALL PHO_DORGHO (XI,SCALE2,UB,DB,SB,CB,BB,GL)
+ IRET = 0
+ ELSE IF(ISET(NPAR).EQ.3) THEN
+ CALL PHO_DORGLO (XI,SCALE2,UB,DB,SB,CB,BB,GL)
+ IRET = 0
+ ENDIF
+C reweight with Drees-Godbole factor
+ WGX = 1.D0
+ IF(P2VIR.GT.0.001D0) THEN
+ WGX = LOG(SCALE2/(P2VIR+PARMDL(144)))
+ & /LOG(SCALE2/PARMDL(144))
+ WGX = MAX(WGX,0.D0)
+ ENDIF
+ PD(-5) = BB*WGX/137.D0
+ PD(-4) = CB*WGX/137.D0
+ PD(-3) = SB*WGX/137.D0
+ PD(-2) = UB*WGX/137.D0
+ PD(-1) = DB*WGX/137.D0
+ PD(0) = GL*WGX*WGX/137.D0
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ PD(3) = PD(-3)
+ PD(4) = PD(-4)
+ PD(5) = PD(-5)
+ ELSE IF(IGRP(NPAR).EQ.8) THEN
+ IF(ISET(NPAR).EQ.1) THEN
+ CALL PHO_PHGAL (XI,SCALE2,PD)
+ IRET = 0
+ ENDIF
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.20) THEN
+C Pomeron PDFs
+ MODE = IGRP(NPAR)
+ IF(MODE.EQ.1) THEN
+ PD(0) = 6.D0*(1.D0-XI)**5*PARMDL(26)*PARMDL(78)
+ IRET = 0
+ ELSE IF(MODE.EQ.2) THEN
+ PD(0) = 6.D0*XI*(1.D0-XI)*PARMDL(26)*PARMDL(78)
+ IRET = 0
+ ELSE IF(MODE.EQ.3) THEN
+ PD(0) = (0.18D0/XI+5.46D0)*(1.D0-XI)*PARMDL(26)*PARMDL(78)
+ IRET = 0
+ ELSE IF(MODE.EQ.4) THEN
+ CALL PHO_CKMTPD(990,XI,SCALE2,PD)
+ DO 105 I=-4,4
+ PD(I) = PD(I)*PARMDL(78)
+ 105 CONTINUE
+ IRET = 0
+ ENDIF
+ ENDIF
+
+C external PDFs
+
+ ELSE IF(IEXT(NPAR).EQ.2) THEN
+C PDFLIB call: new PDF numbering
+ IF(NPAR.NE.NPAOLD) THEN
+ PARAM(1) = 'NPTYPE'
+ PARAM(2) = 'NGROUP'
+ PARAM(3) = 'NSET'
+ PARAM(4) = ' '
+ VALUE(1) = ITYPE(NPAR)
+ VALUE(2) = ABS(IGRP(NPAR))
+ VALUE(3) = ISET(NPAR)
+ CALL PDFSET(PARAM,VALUE)
+ ENDIF
+ IF(ITYPE(NPAR).EQ.3) THEN
+ IP2 = 0
+ CALL STRUCTP(XI,SCALE2,P2VIR,IP2,PD(2),PD(1),PD(-2),PD(-1),
+ & PD(-3),PD(-4),PD(-5),PD(-6),PD(0))
+ ELSE
+ SCALE = SQRT(SCALE2)
+ CALL STRUCTM(XI,SCALE,PD(2),PD(1),PD(-2),PD(-1),
+ & PD(-3),PD(-4),PD(-5),PD(-6),PD(0))
+ ENDIF
+ DO 115 I=3,6
+ PD(I) = PD(-I)
+ 115 CONTINUE
+ IF(ITYPE(NPAR).EQ.1) THEN
+C proton valence quarks
+ PD(1) = PD(1)+PD(-1)
+ PD(2) = PD(2)+PD(-2)
+ ELSE IF(ITYPE(NPAR).EQ.2) THEN
+C pi+ valences
+ DVAL = PD(1)
+ PD(1) = PD(-1)
+ PD(-1) = DVAL+PD(1)
+ PD(2) = PD(2)+PD(-2)
+ ELSE IF(ITYPE(NPAR).EQ.3) THEN
+C photon conventions
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ ENDIF
+ IRET = 0
+
+ ELSE IF(IEXT(NPAR).EQ.3) THEN
+C PHOLIB call: version 2.0
+ CALL PHVAL(IGRP(NPAR),ISET(NPAR),XI,SCALE2,PD,IRET)
+ IF(IRET.LT.0) THEN
+ WRITE(LO,'(/1X,A,I2)')
+ & 'PHO_PDF:ERROR: non-vanishing PHVAL return code',IRET
+ CALL PHO_ABORT
+ ENDIF
+ IRET = 0
+
+C photon PDFs depending on photon virtuality
+
+ ELSE IF(IEXT(NPAR).EQ.4) THEN
+ IF(IGRP(NPAR).EQ.1) THEN
+C Schuler/Sjostrand PDF (interface to single precision)
+ XR = XI
+ Q2R = SCALE2
+ P2R = P2VIR
+ IP2 = 0
+ CALL PHO_SASGAM(ISET(NPAR),XR,Q2R,P2R,IP2,F2GM,XPDFGM)
+ DO 120 I=-6,6
+ PD(I) = DBLE(XPDFGM(I))
+ 120 CONTINUE
+ IRET = 0
+ ELSE IF(IGRP(NPAR).EQ.5) THEN
+C Gluck/Reya/Stratmann
+ IF(ISET(NPAR).EQ.4) THEN
+ CALL PHO_DORGLV (XI,SCALE2,P2VIR, UB, DB, SB, GL)
+ CALL PHO_QPMPDF(4,XI,SCALE2,0.D0,P2VIR,CB)
+ IRET = 0
+ PD(-5) = 0.D0
+ PD(-4) = CB
+ PD(-3) = SB/137.D0
+ PD(-2) = UB/137.D0
+ PD(-1) = DB/137.D0
+ PD(0) = GL/137.D0
+ PD(1) = PD(-1)
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ PD(3) = PD(-3)
+ PD(4) = PD(-4)
+ PD(5) = PD(-5)
+ ENDIF
+ ENDIF
+ ENDIF
+
+C check for errors
+
+ IF(IRET.NE.0) THEN
+ WRITE(LO,'(/1X,A,/10X,5I6)')
+ & 'PHO_PDF:ERROR:unsupported PDF(NPAR,IEXT,ITYPE,IGRP,ISET)',
+ & NPAR,IEXT(NPAR),ITYPE(NPAR),IGRP(NPAR),ISET(NPAR)
+ CALL PHO_ABORT
+ ENDIF
+C error in NPAR
+ ELSE
+ WRITE(LO,'(/1X,A,I5)') 'PHO_PDF:ERROR:invalid NPAR(1,2) ',NPAR
+ CALL PHO_ABORT
+ ENDIF
+ NPAOLD = NPAR
+
+C valence quark treatment
+
+ IF(ITYPE(NPAR).EQ.2) THEN
+C meson conventions
+ IF(IPARID(NPAR).EQ.111) THEN
+C pi0 valence quarks
+ PD(-1) = (PD(1)+PD(-1))/2.D0
+ PD(1) = PD(-1)
+ PD(-2) = (PD(2)+PD(-2))/2.D0
+ PD(2) = PD(-2)
+ ELSE IF(ABS(IPARID(NPAR)).EQ.321) THEN
+C K+/-
+ VALS = PD(-1)-PD(1)
+ PD(-1) = PD(1)
+ PD(-3) = PD(-3)+VALS
+ ELSE IF( (IPARID(NPAR).EQ.311)
+ & .OR.(IPARID(NPAR).EQ.310)
+ & .OR.(IPARID(NPAR).EQ.130)) THEN
+C neutral kaons
+ VALS = PD(-1)-PD(1)
+ VALU = PD(2)-PD(-2)
+ PD(-1) = PD(1)
+ PD(2) = PD(-2)
+ PD(2) = PD(2)+VALU/2.D0
+ PD(-2) = PD(-2)+VALU/2.D0
+ PD(3) = PD(3)+VALS/2.D0
+ PD(-3) = PD(-3)+VALS/2.D0
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.1) THEN
+C nucleon conventions
+ IF(ABS(IPARID(NPAR)).EQ.2112) THEN
+C neutron valence quarks
+ DUM = PD(1)
+ PD(1) = PD(2)
+ PD(2) = DUM
+ ELSE IF(ABS(IPARID(NPAR)).EQ.3222) THEN
+C (anti-)sigma+
+ VALS = PD(1)-PD(-1)
+ PD(1) = PD(-1)
+ PD(3) = PD(3)+VALS
+ ELSE IF(ABS(IPARID(NPAR)).EQ.3112) THEN
+C (anti-)sigma-
+ VALS = PD(1)-PD(-1)
+ VALD = PD(2)-PD(-2)
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ PD(1) = PD(1)+VALD
+ PD(3) = PD(3)+VALS
+ ELSE IF( (ABS(IPARID(NPAR)).EQ.3122)
+ & .OR.(ABS(IPARID(NPAR)).EQ.3212)) THEN
+C (anti-)sigma0 and (anti-)lambda
+ VALS = PD(1)-PD(-1)
+ VALD = (PD(2)-PD(-2))/2.D0
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ PD(1) = PD(1)+VALD
+ PD(2) = PD(2)+VALD
+ PD(3) = PD(3)+VALS
+ ENDIF
+ ENDIF
+
+C antiparticle
+ IF(IPARID(NPAR).LT.0) THEN
+ DO 190 I=1,4
+ DUM=PD(I)
+ PD(I)=PD(-I)
+ PD(-I)=DUM
+ 190 CONTINUE
+ ENDIF
+
+C optionally remove valence quarks
+ IF(IPAVA(NPAR).EQ.0) THEN
+ DO 200 I=1,4
+ PD(I) = MIN(PD(-I),PD(I))
+ PD(-I) = PD(I)
+ 200 CONTINUE
+ ENDIF
+
+C debug information
+ IF(IDEB(37).GE.30) WRITE(LO,
+ & '(1X,A,I4,1P,3E12.4/,2X,A,6E10.3,/2X,A,E10.3,/2X,A,6E10.3)')
+ & 'PHO_PDF: NPAR,X,SCALE**2,P2VIR',
+ & NPAR,X,SCALE2,P2VIR,'PD(-6..-1)',(PD(I),I=-6,-1),
+ & 'PD(0) ',PD(0),'PD(1..6) ',(PD(I),I=1,6)
+
+ END
+
+CDECK ID>, PHO_QPMPDF
+ SUBROUTINE PHO_QPMPDF(IQ,X,SCALE2,PTREF,PVIRT,FXP)
+C***************************************************************
+C
+C contribution to photon PDF from box graph
+C (Bethe-Heitler process)
+C
+C input: IQ quark flavour
+C SCALE2 scale (GeV**2, positive)
+C PTREF reference scale (GeV, positive)
+C X parton momentum fraction
+C PVIRT photon virtuality (GeV**2, positive)
+C FXP x*f(x,Q**2), x times parton density
+C
+C***************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C internal rejection counters
+ INTEGER NMXJ
+ PARAMETER (NMXJ=60)
+ CHARACTER*10 REJTIT
+ INTEGER IFAIL
+ COMMON /POLOOP/ IFAIL(NMXJ),REJTIT(NMXJ)
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DIMENSION QM(6)
+ DATA QM / 0.2D0,0.25D0,0.5D0,1.5D0,4.5D0,174.D0 /
+
+ FXP = 0.D0
+ I = ABS(IQ)
+C
+* QM2 = MAX(QM(I),PTREF)**2
+* QM2 = MAX(QM2,PVIRT)
+* BBE = (1.D0-X)*SCALE2
+* IF(BBE.LE.0.D0) THEN
+* IF(IDEB(27).GE.5) WRITE(LO,'(1X,A,4E10.3)')
+* & 'PHO_QPMPDF: over mass limit (X,Q2,P2,QM)',X,SCALE2,
+* & PVIRT,QM(I)
+* ENDIF
+* FXP = X*(4.D0-3.D0*MOD(I,2))/9.D0*3.D0/(2.D0*137.D0*PI)
+* & *((X**2+(1.D0-X)**2)*LOG(BBE/(QM2*X))+8.D0*X*(1.D0-X)-1.D0)
+C Bethe-Heitler process approximation for 2*x*p2/q2 << 1
+ QM2 = MAX(QM(I),PTREF)**2
+ W2 = SCALE2/X*(1.D0-X-X*PVIRT/SCALE2)
+ IF(W2.GT.4.D0*QM2) THEN
+ BE = SQRT(1.D0-4.D0*QM2/W2)
+ BP = SQRT(1.D0+BE*(1.D0-4.D0*X*X*PVIRT/SCALE2))
+ BM = SQRT(1.D0-BE*(1.D0-4.D0*X*X*PVIRT/SCALE2))
+* FXP = X*(4.D0-3.D0*MOD(I,2))/9.D0*3.D0/(137.D0*PI)*(BE*(-1.D0
+ FXP = X*Q_ch2(I)*3.D0/(137.D0*PI)*(BE*(-1.D0
+ & +6.D0*X-6.D0*X*X)+2.D0*X*X*((2.D0*QM2-PVIRT)/SCALE2
+ & -4.D0*QM2*QM2/SCALE2**2)*(1.D0/BM-1.D0/BP)
+ & +(X*X+(1.D0-X)**2+X*(1-3.D0*X)*4.D0*QM2/SCALE2
+ & -X*X*8.D0*QM2*QM2/SCALE2**2)*LOG(BP/BM))
+ ELSE
+ IF(IDEB(27).GE.5) WRITE(LO,'(1X,A,4E10.3)')
+ & 'PHO_QPMPDF: under mass limit (X,Q2,P2,QM)',X,SCALE2,
+ & PVIRT,QM(I)
+ ENDIF
+C debug output
+ IF(IDEB(27).GE.20) WRITE(LO,'(1X,A,I3,1P,5E10.3)')
+ & 'PHO_QPMPDF: X,Q2,P2,QM',I,X,SCALE2,PVIRT,QM(I),FXP
+ END
+
+CDECK ID>, PHO_SETPDF
+ SUBROUTINE PHO_SETPDF(IDPDG,ITYP,IPAR,ISET,IEXT,IPAVAL,MODE)
+C***************************************************************
+C
+C assigns PDF numbers to particles
+C
+C input: IDPDG PDG number of particle
+C ITYP particle type
+C IPAR PDF paramertization
+C ISET number of set
+C IEXT library number for PDF calculation
+C IPAVAL (only output)
+C 1 PDF with valence quarks
+C 0 PDF without valence quarks
+C MODE -1 add entry to table
+C 1 read from table
+C 2 output of table
+C
+C***************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+ DIMENSION IPDFS(5,50)
+ DATA IENTRY / 0 /
+
+ IF(MODE.EQ.1) THEN
+ I = 1
+ IF(IDPDG.EQ.81) THEN
+ IDCMP = IDEQP(1)
+ IPAVAL = IHFLS(1)
+ ELSE IF(IDPDG.EQ.82) THEN
+ IDCMP = IDEQP(2)
+ IPAVAL = IHFLS(2)
+ ELSE
+ IDCMP = IDPDG
+ IPAVAL = 1
+ ENDIF
+200 CONTINUE
+ IF(IDCMP.EQ.IPDFS(1,I)) THEN
+ ITYP = IPDFS(2,I)
+ IPAR = IPDFS(3,I)
+ ISET = IPDFS(4,I)
+ IEXT = IPDFS(5,I)
+ IF(IDEB(80).GE.15) WRITE(LO,'(1X,A,I7,5X,3I4)')
+ & 'PHO_SETPDF: ID,IPAR,ISET,IEXT',IDCMP,IPAR,ISET,IEXT
+ RETURN
+ ENDIF
+ I = I+1
+ IF(I.GT.IENTRY) THEN
+ WRITE(LO,'(/1X,A,I7)')
+ & 'PHO_SETPDF: no PDF assigned to ',IDCMP
+ CALL PHO_ABORT
+ ENDIF
+ GOTO 200
+ ELSE IF(MODE.EQ.-1) THEN
+ DO 50 I=1,IENTRY
+ IF(IDPDG.EQ.IPDFS(1,I)) THEN
+ WRITE(LO,'(/1X,A,5I6)')
+ & 'PHO_SETPDF: overwrite old particle PDF',
+ & IDPDG,IPDFS(2,I),IPDFS(3,I),IPDFS(4,I),IPDFS(5,I)
+ GOTO 100
+ ENDIF
+ 50 CONTINUE
+ I = IENTRY+1
+ IF(I.GT.50) THEN
+ WRITE(LO,'(/1X,A,/1x,6I6)')
+ & 'PHO_SETPDF:ERROR: no space left in IPDFS:',
+ & I,IDPDG,IPDFS(2,I),IPDFS(3,I),IPDFS(4,I),IPDFS(5,I)
+ STOP
+ ENDIF
+ IENTRY = I
+ 100 CONTINUE
+ IPDFS(1,I) = IDPDG
+ IF(IDPDG.EQ.990) THEN
+ ITYP1 = 20
+ ELSE IF(IDPDG.EQ.22) THEN
+ ITYP1 = 3
+ ELSE IF(ABS(IDPDG).LT.1000) THEN
+ ITYP1 = 2
+ ELSE
+ ITYP1 = 1
+ ENDIF
+ IPDFS(2,I) = ITYP1
+ IPDFS(3,I) = IPAR
+ IPDFS(4,I) = ISET
+ IPDFS(5,I) = IEXT
+ ELSE IF(MODE.EQ.-2) THEN
+ WRITE(LO,'(/1X,A)') 'PHO_SETPDF: PDFs assigned by user:'
+ DO 150 I=1,IENTRY
+ WRITE(LO,'(5X,I4,A,I7,A,4I5)') I,' particle:',IPDFS(1,I),
+ & ' PDF-set ',IPDFS(2,I),IPDFS(3,I),IPDFS(4,I),IPDFS(5,I)
+ 150 CONTINUE
+ ELSE
+ WRITE(LO,'(/1X,A,I5)') 'PHO_SETPDF:ERROR: invalid mode ',MODE
+ ENDIF
+ END
+
+CDECK ID>, PHO_GETPDF
+ SUBROUTINE PHO_GETPDF(NPAR,PDFNA,ALA,Q2MI,Q2MA,XMI,XMA)
+C***************************************************************
+C
+C get PDF information
+C
+C input: NPAR 1 first PDF in /POPPDF/
+C 2 second PDF in /POPPDF/
+C
+C output: PDFNA name of PDf parametrization
+C ALA QCD LAMBDA (4 flavours, in GeV)
+C Q2MI minimal Q2
+C Q2MA maximal Q2
+C XMI minimal X
+C XMA maximal X
+C
+C***************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ CHARACTER*8 PDFNA
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+C PHOLIB 4.15 common
+ COMMON /W50512/ QCDL4,QCDL5
+ COMMON /W50513/ XMIN,XMAX,Q2MIN,Q2MAX
+
+C PHOPDF version 2.0 common
+ PARAMETER (MAXS=6,MAXP=10)
+ CHARACTER*4 CHPAR
+ COMMON/PHCOM1/ XLIM(MAXP,0:MAXS,2), Q2LIM(MAXP,0:MAXS,2),
+ & NSET(MAXP,2),NFL(MAXP)
+ COMMON/PHCOM2/ ALM(MAXP,0:MAXS),CHPAR(MAXP),IORD(MAXP,-MAXS:MAXS)
+
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+
+ DIMENSION PARAM(20),VALUE(20)
+ CHARACTER*20 PARAM
+
+ IF((NPAR.NE.1).AND.(NPAR.NE.2)) THEN
+ WRITE(LO,'(/1X,A,I6)')
+ & 'PHO_GETPDF:ERROR: invalid PDF number (1,2)',NPAR
+ CALL PHO_ABORT
+ ENDIF
+ ALA = 0.D0
+
+ IF(IEXT(NPAR).EQ.0) THEN
+
+C internal parametrizations
+
+ IF(ITYPE(NPAR).EQ.1) THEN
+C proton PDFs
+ IF(IGRP(NPAR).EQ.5) THEN
+ IF(ISET(NPAR).EQ.3) THEN
+ ALA = 0.2D0
+ Q2MI = 0.3D0
+ PDFNA = 'GRV92 HO'
+ ELSE IF(ISET(NPAR).EQ.4) THEN
+ ALA = 0.2D0
+ Q2MI = 0.25D0
+ PDFNA = 'GRV92 LO'
+ ELSE IF(ISET(NPAR).EQ.5) THEN
+ ALA = 0.2D0
+ Q2MI = 0.4D0
+ PDFNA = 'GRV94 HO'
+ ELSE IF(ISET(NPAR).EQ.6) THEN
+ ALA = 0.2D0
+ Q2MI = 0.4D0
+ PDFNA = 'GRV94 LO'
+ ELSE IF(ISET(NPAR).EQ.7) THEN
+ ALA = 0.2D0
+ Q2MI = 0.4D0
+ PDFNA = 'GRV94 DI'
+ ELSE IF(ISET(NPAR).EQ.8) THEN
+ ALA = 0.175D0
+ Q2MI = 0.8D0
+ PDFNA = 'GRV98 LO'
+ ELSE IF(ISET(NPAR).EQ.9) THEN
+ ALA = 0.175D0
+ Q2MI = 0.8D0
+ PDFNA = 'GRV98 SC'
+ ENDIF
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.2) THEN
+C pion PDFs
+ IF(IGRP(NPAR).EQ.5) THEN
+ IF(ISET(NPAR).EQ.1) THEN
+ ALA = 0.2D0
+ Q2MI = 0.3D0
+ PDFNA = 'GRV-P HO'
+ ELSE IF(ISET(NPAR).EQ.2) THEN
+ ALA = 0.2D0
+ Q2MI = 0.25D0
+ PDFNA = 'GRV-P LO'
+ ENDIF
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.3) THEN
+C photon PDFs
+ IF(IGRP(NPAR).EQ.5) THEN
+ IF(ISET(NPAR).EQ.1) THEN
+ ALA = 0.2D0
+ Q2MI = 0.3D0
+ PDFNA = 'GRV-G LH'
+ ELSE IF(ISET(NPAR).EQ.2) THEN
+ ALA = 0.2D0
+ Q2MI = 0.3D0
+ PDFNA = 'GRV-G HO'
+ ELSE IF(ISET(NPAR).EQ.3) THEN
+ ALA = 0.2D0
+ Q2MI = 0.25D0
+ PDFNA = 'GRV-G LO'
+ ENDIF
+ ELSE IF(IGRP(NPAR).EQ.8) THEN
+ IF(ISET(NPAR).EQ.1) THEN
+ ALA = 0.2D0
+ Q2MI = 4.D0
+ PDFNA = 'AGL-G LO'
+ ENDIF
+ ENDIF
+ ELSE IF(ITYPE(NPAR).EQ.20) THEN
+C pomeron PDFs
+ IF(IGRP(NPAR).EQ.4) THEN
+ CALL PHO_CKMTPA(990,XMI,XMA,ALA,Q2MI,Q2MA,PDFNA)
+ ELSE
+ ALA = 0.3D0
+ Q2MI = 2.D0
+ PDFNA = 'POM-PDF1'
+ ENDIF
+ ENDIF
+
+C external parametrizations
+
+ ELSE IF(IEXT(NPAR).EQ.1) THEN
+C PDFLIB call: old numbering
+ PARAM(1) = 'MODE'
+ PARAM(2) = ' '
+ VALUE(1) = IGRP(NPAR)
+ CALL PDFSET(PARAM,VALUE)
+ Q2MI = Q2MIN
+ Q2MA = Q2MAX
+ XMI = XMIN
+ XMA = XMAX
+ ALA = QCDL4
+ PDFNA = 'PDFLIB1'
+ ELSE IF(IEXT(NPAR).EQ.2) THEN
+C PDFLIB call: new numbering
+ PARAM(1) = 'NPTYPE'
+ PARAM(2) = 'NGROUP'
+ PARAM(3) = 'NSET'
+ PARAM(4) = ' '
+ VALUE(1) = ITYPE(NPAR)
+ VALUE(2) = IGRP(NPAR)
+ VALUE(3) = ISET(NPAR)
+ CALL PDFSET(PARAM,VALUE)
+ Q2MI = Q2MIN
+ Q2MA = Q2MAX
+ XMI = XMIN
+ XMA = XMAX
+ ALA = QCDL4
+ PDFNA = 'PDFLIB2'
+ ELSE IF(IEXT(NPAR).EQ.3) THEN
+C PHOLIB interface
+ ALA = ALM(IGRP(NPAR),ISET(NPAR))
+ Q2MI = 2.D0
+ PDFNA = CHPAR(IGRP(NPAR))
+
+C some special internal parametrizations
+
+ ELSE IF(IEXT(NPAR).EQ.4) THEN
+C photon PDFs depending on virtualities
+ IF(IGRP(NPAR).EQ.1) THEN
+C Schuler/Sjostrand parametrization
+ ALA = 0.2D0
+ IF(ISET(NPAR).EQ.1) THEN
+ Q2MI = 0.2D0
+ PDFNA = 'SaS-1D '
+ ELSE IF(ISET(NPAR).EQ.2) THEN
+ Q2MI = 0.2D0
+ PDFNA = 'SaS-1M '
+ ELSE IF(ISET(NPAR).EQ.3) THEN
+ Q2MI = 2.D0
+ PDFNA = 'SaS-2D '
+ ELSE IF(ISET(NPAR).EQ.4) THEN
+ Q2MI = 2.D0
+ PDFNA = 'SaS-2M '
+ ENDIF
+ ELSE IF(IGRP(NPAR).EQ.5) THEN
+C Gluck/Reya/Stratmann parametrization
+ IF(ISET(NPAR).EQ.4) THEN
+ ALA = 0.2D0
+ Q2MI = 0.6D0
+ PDFNA = 'GRS-G LO'
+ ENDIF
+ ENDIF
+ ELSE IF(IEXT(NPAR).EQ.5) THEN
+C Schuler/Sjostrand anomalous only
+ ALA = 0.2D0
+ Q2MI = 0.2D0
+ PDFNA = 'SaS anom'
+ ENDIF
+ IF(ALA.LT.0.01D0) THEN
+ WRITE(LO,'(/1X,2A,/10X,5I6)')
+ & 'PHO_GETPDF:ERROR: ',
+ & 'unsupported PDF (NPAR,IEXT,ITYPE,IGRP,ISET)',
+ & NPAR,IEXT(NPAR),ITYPE(NPAR),IGRP(NPAR),ISET(NPAR)
+ CALL PHO_ABORT
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_ACTPDF
+ SUBROUTINE PHO_ACTPDF(IDPDG,K)
+C***************************************************************
+C
+C activate PDF for QCD calculations
+C
+C input: IDPDG PDG particle number
+C K 1 first PDF in /POPPDF/
+C 2 second PDF in /POPPDF/
+C -2 write current settings
+C
+C output: /POPPDF/
+C
+C***************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+
+ IF(K.GT.0) THEN
+
+C read PDF from table
+ CALL PHO_SETPDF(IDPDG,ITYPE(K),IGRP(K),ISET(K),IEXT(K),
+ & IPAVA(K),1)
+ IPARID(K) = IDPDG
+C get PDF parameters
+ CALL PHO_GETPDF(K,PDFNAM(K),PDFLAM(K),PDFQ2M(K),Q2MA,XMI,XMA)
+C initialize alpha_s calculation
+ alam2 = PDFLAM(K)*PDFLAM(K)
+ DUMMY = PHO_ALPHAS(alam2,-K)
+
+ IF(IDEB(2).GE.20) THEN
+ WRITE(LO,'(1X,A)')
+ & 'PHO_ACTPDF: LAMBDA,Q2MIN,NAME,ITYPE,IPAR,ISET,IEXT,PAR'
+ WRITE(LO,'(1X,A,I2,2E12.3,2X,A8,4I4,I7)') 'SIDE',K,
+ & PDFLAM(K),PDFQ2M(K),PDFNAM(K),ITYPE(K),IGRP(K),ISET(K),
+ & IEXT(K),IPARID(K)
+ ENDIF
+ NPAOLD = K
+
+ ELSE IF(K.EQ.-2) THEN
+
+C write table of current PDFs
+ WRITE(LO,'(1X,A)')
+ & 'PHO_ACTPDF: LAMBDA,Q2MIN,NAME,ITYPE,IPAR,ISET,IEXT,PAR'
+ WRITE(LO,'(1X,A,2E12.3,2X,A8,4I4,I7)') 'SIDE 1:',PDFLAM(1),
+ & PDFQ2M(1),PDFNAM(1),ITYPE(1),IGRP(1),ISET(1),IEXT(1),
+ & IPARID(1)
+ WRITE(LO,'(1X,A,2E12.3,2X,A8,4I4,I7)') 'SIDE 2:',PDFLAM(2),
+ & PDFQ2M(2),PDFNAM(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),
+ & IPARID(2)
+
+ ELSE
+
+ WRITE(LO,'(/1X,A,2I4)')
+ & 'PHO_ACTPDF:ERROR: invalid arguments',IDPDG,K
+ CALL PHO_ABORT
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_PDFTST
+ SUBROUTINE PHO_PDFTST(IDPDG,SCALE2,P2MASS)
+C*********************************************************************
+C
+C structure function test utility
+C
+C input: IDPDG PDG ID of particle
+C SCALE2 squared scale (GeV**2)
+C P2MASS particle virtuality (pos, GeV**2)
+C
+C output: tables of PDF, sum rule checking, table of F2
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C currently activated parton density parametrizations
+ CHARACTER*8 PDFNAM
+ INTEGER IPARID,IPAVA,ITYPE,IGRP,ISET,IEXT,NPAOLD
+ DOUBLE PRECISION PDFLAM,PDFQ2M
+ COMMON /POPPDF/ PDFLAM(2),PDFQ2M(2),PDFNAM(2),IPARID(2),
+ & IPAVA(2),ITYPE(2),IGRP(2),ISET(2),IEXT(2),NPAOLD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DIMENSION PD(-6:6),PDSUM(-6:6),PDAVE(-6:6),FXP(4)
+ CHARACTER*8 PDFNA
+
+ CALL PHO_ACTPDF(IDPDG,1)
+ CALL PHO_GETPDF(1,PDFNA,ALA,Q2MI,Q2MA,XMI,XMA)
+
+ WRITE(LO,'(/,A)') ' *** Structure Function Test Utility ***'
+ WRITE(LO,'(A)') ' ======================================='
+
+ WRITE(LO,'(/,A,3I10)')
+ & ' used structure function:',ITYPE(1),IGRP(1),ISET(1)
+ WRITE(LO,'(A,A)') ' corresponds to ',PDFNA
+ WRITE(LO,'(A,E12.3)') ' used squared scale (GeV**2):',SCALE2
+ WRITE(LO,'(A,E12.3)') ' particle virtuality (GeV**2):',P2MASS
+ WRITE(LO,'(/1X,A)') 'x times parton densities'
+ WRITE(LO,'(1X,A)') ' X PD(-4 - 4)'
+ WRITE(LO,'(1X,A)')
+ & ' ============================================================'
+
+C logarithmic loop over x values
+C upper bound
+ XUPPER=0.9999D0
+C lower bound
+ XLOWER=1.D-4
+C number of steps
+ NSTEP=50
+
+ XFIRST=LOG(XLOWER)
+ XDELTA=LOG(XUPPER/XLOWER)/DBLE(NSTEP-1)
+ DO 100 I=1,NSTEP
+ X=EXP(XFIRST)
+ XCONTR=X
+ CALL PHO_PDF(1,X,SCALE2,P2MASS,PD)
+ IF(X.NE.XCONTR) THEN
+ WRITE(LO,*) ' x changed! old: ',XCONTR,' new: ',X
+ ENDIF
+ WRITE(LO,'(1X,1P,10E11.4)') XCONTR,(PD(K),K=-4,4)
+ XFIRST=XFIRST+XDELTA
+ 100 CONTINUE
+
+ IF(IDPDG.EQ.22) THEN
+ WRITE(LO,'(/1X,A)')
+ & 'comparison PDF to contribution due to box diagram'
+ WRITE(LO,'(1X,A)') ' X PD(1),PB(1), .... ,PD(4),PB(4)'
+ WRITE(LO,'(1X,A)')
+ & ' ============================================================'
+ XFIRST=LOG(XLOWER)
+ XDELTA=LOG(XUPPER/XLOWER)/DBLE(NSTEP-1)
+ DO 110 I=1,NSTEP
+ X=EXP(XFIRST)
+ CALL PHO_PDF(1,X,SCALE2,P2MASS,PD)
+ DO 120 K=1,4
+ CALL PHO_QPMPDF(K,X,SCALE2,0.D0,P2MASS,FXP(K))
+ 120 CONTINUE
+ WRITE(LO,'(1X,1P,9E11.4)') X,(PD(K),FXP(K),K=1,4)
+ XFIRST=XFIRST+XDELTA
+ 110 CONTINUE
+ ENDIF
+
+C check momentum sum rule
+
+ WRITE(LO,'(/1X,A)') 'PHO_PDFTST: estimate of quark sum rules'
+ DO 199 I=-6,6
+ PDSUM(I) = 0.D0
+ PDAVE(I) = 0.D0
+ 199 CONTINUE
+ ITER=5000
+ DO 200 I=1,ITER
+ XX=DBLE(I)/DBLE(ITER)
+ IF(XX.EQ.1.D0) XX = 0.999999D0
+ CALL PHO_PDF(1,XX,SCALE2,P2MASS,PD)
+ DO 202 K=-6,6
+ PDSUM(K) = PDSUM(K)+PD(K)/XX
+ PDAVE(K) = PDAVE(K)+PD(K)
+ 202 CONTINUE
+ 200 CONTINUE
+ WRITE(LO,'(1X,A)')
+ & 'Table: parton-ID, dx-integral over Q(X,Q**2), X*Q(X,Q**2)'
+ XSUM = 0.D0
+ DO 204 I=-6,6
+ PDSUM(I) = PDSUM(I)/DBLE(ITER)
+ PDAVE(I) = PDAVE(I)/DBLE(ITER)
+ XSUM = XSUM+PDAVE(I)
+ WRITE(LO,'(9X,I3,3X,2E15.4)') I,PDSUM(I),PDAVE(I)
+ 204 CONTINUE
+ WRITE(LO,'(1X,A)') 'PHO_PDFTST: valence flavours'
+ DO 205 I=1,6
+ WRITE(LO,'(9X,I3,E12.4)') I,PDSUM(I)-PDSUM(-I)
+ 205 CONTINUE
+ WRITE(LO,'(1X,A,E12.4)') 'momentum sum rule',XSUM
+ WRITE(LO,'(A/)') ' ============================================='
+
+C table of F2
+
+ WRITE(LO,'(/1X,A,E12.4,/1X,A)')
+ & 'PHO_PDFTST: TABLE OF X, F2(X,Q**2) FOR Q**2',SCALE2,
+ & '-----------------------------------------------------'
+ ITER=100
+ DO 300 I=1,ITER
+ XX=DBLE(I)/DBLE(ITER)
+ IF(XX.EQ.1.D0) XX = 0.9999D0
+ CALL PHO_PDF(1,XX,SCALE2,P2MASS,PD)
+ F2 = 0.D0
+ DO 302 K=-6,6
+ IF(K.NE.0) F2 = F2 + Q_ch2(K)*PD(K)
+ 302 CONTINUE
+ WRITE(LO,'(5X,1P,2E14.5)') XX,F2
+ 300 CONTINUE
+ WRITE(LO,'(A/)') ' ============================================='
+ END
+
+CDECK ID>, PHO_REGPAR
+ SUBROUTINE PHO_REGPAR(ISTH,IDPDG,IDBAM,JM1,JM2,P1,P2,P3,P4,
+ & IPHIS1,IPHIS2,IC1,IC2,IPOS,IMODE)
+C**********************************************************************
+C
+C registration of particle in /POEVT1/ and /POEVT2/
+C
+C input: ISTH status code of particle
+C -2 initial parton hard scattering
+C -1 parton
+C 0 string
+C 1 visible particle (no color)
+C 2 decayed particle
+C IDPDG PDG particle ID code
+C IDBAM CPC particle ID code
+C JM1,JM2 first and second mother index
+C P1..P4 four momentum
+C IPHIS1 extended history information
+C IPHIS1<100: JM1 from particle 1
+C IPHIS1>100: JM1 from particle 2
+C 1 valence quark
+C 2 valence diquark
+C 3 sea quark
+C 4 sea diquark
+C (neg. for antipartons)
+C IPHIS2 extended history information
+C positive: JM2 from particle 1
+C negative: JM2 from particle 2
+C (see IPHIS1)
+C IC1,IC2 color labels for partons
+C IMODE 1 register given parton
+C 0 reset /POEVT1/ and /POEVT2/
+C 2 return data of entry IPOS
+C
+C IPOS position of particle in /POEVT1/
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (DEPS = 1.D-20)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ IF(IMODE.EQ.1) THEN
+ IF(IDEB(76).GE.26) THEN
+ WRITE(LO,'(1X,A,/2X,I3,I6,3I4,4E10.3)')
+ & 'PHO_REGPAR: ISTH,IDPDG,IDBAM,JM1,JM2,P1,P2,P3,P4',
+ & ISTH,IDPDG,IDBAM,JM1,JM2,P1,P2,P3,P4
+ WRITE(LO,'(1X,A,/2X,6I6)')
+ & 'PHO_REGPAR: IPHIS1,IPHIS2,IC1,IC2,IPOS,IMODE',
+ & IPHIS1,IPHIS2,IC1,IC2,IPOS,IMODE
+ ENDIF
+ IF(NHEP.EQ.NMXHEP) THEN
+ WRITE(LO,'(/1X,2A,2I6/)') 'PHO_REGPAR: ',
+ & 'no space left in /POEVT1/ (NHEP,NMXHEP):',NHEP,NMXHEP
+ CALL PHO_ABORT
+ ENDIF
+ NHEP = NHEP+1
+ IDBAMI = IDBAM
+ IDPDGI = IDPDG
+ IF(ABS(ISTH).LE.2) THEN
+ IF((IDBAM.NE.0).AND.(IDPDG.EQ.0)) THEN
+ IDPDGI = ipho_id2pdg(IDBAM)
+ ELSE IF((IDBAM.EQ.0).AND.(IDPDG.NE.0)) THEN
+ IDBAMI = ipho_pdg2id(IDPDG)
+ ENDIF
+ ENDIF
+C standard data
+ ISTHEP(NHEP) = ISTH
+ IDHEP(NHEP) = IDPDGI
+ JMOHEP(1,NHEP) = JM1
+ JMOHEP(2,NHEP) = JM2
+C update of mother-daugther relations
+ IF(ABS(ISTH).LE.1) THEN
+ IF(JM1.GT.0) THEN
+ IF(JDAHEP(1,JM1).EQ.0) THEN
+ JDAHEP(1,JM1) = NHEP
+ ISTHEP(JM1) = 2
+ ENDIF
+ JDAHEP(2,JM1) = NHEP
+ ENDIF
+ IF((JM2.NE.JM1).AND.(JM2.GT.0)) THEN
+ IF(JDAHEP(1,JM2).EQ.0) THEN
+ JDAHEP(1,JM2) = NHEP
+ ISTHEP(JM2) = 2
+ ENDIF
+ JDAHEP(2,JM2) = NHEP
+ ELSE IF(JM2.LT.0) THEN
+ DO 100 II=JM1+1,-JM2
+ IF(JDAHEP(1,II).EQ.0) THEN
+ JDAHEP(1,II) = NHEP
+ ISTHEP(II) = 2
+ ENDIF
+ JDAHEP(2,II) = NHEP
+100 CONTINUE
+ ENDIF
+ ENDIF
+ PHEP(1,NHEP) = P1
+ PHEP(2,NHEP) = P2
+ PHEP(3,NHEP) = P3
+ PHEP(4,NHEP) = P4
+ IF((ABS(ISTH).LE.3).OR.(ISTH.EQ.20).OR.(ISTH.EQ.21)) THEN
+ TMP=(P4-P3)*(P4+P3)-P1**2-P2**2
+ PHEP(5,NHEP) = SIGN(SQRT(ABS(TMP)),TMP)
+ ELSE
+ PHEP(5,NHEP) = 0.D0
+ ENDIF
+ JDAHEP(1,NHEP) = 0
+ JDAHEP(2,NHEP) = 0
+C extended information
+ IMPART(NHEP) = IDBAMI
+C extended history information
+ IPHIST(1,NHEP) = IPHIS1
+ IPHIST(2,NHEP) = IPHIS2
+C charge/baryon number or color labels
+ IF(ISTH.EQ.1) THEN
+ ICOLOR(1,NHEP) = IPHO_CHR3(NHEP,2)
+ ICOLOR(2,NHEP) = IPHO_BAR3(NHEP,2)
+ ELSE
+ ICOLOR(1,NHEP) = IC1
+ ICOLOR(2,NHEP) = IC2
+ ENDIF
+
+ IPOS = NHEP
+ IF(IDEB(76).GE.26) THEN
+ WRITE(LO,'(1X,A,2I4,2X,2I4,E12.3,I5)')
+ & 'PHO_REGPAR: IPHIST1/2,IC1/2,MASS,IPOS',IPHIST(1,NHEP),
+ & IPHIST(2,NHEP),ICOLOR(1,NHEP),ICOLOR(2,NHEP),
+ & PHEP(5,NHEP),IPOS
+ ENDIF
+
+ ELSE IF(IMODE.EQ.0) THEN
+ NHEP = 0
+ ELSE IF(IMODE.EQ.2) THEN
+ IF((IPOS.LT.1).OR.(IPOS.GT.NHEP)) THEN
+ WRITE(LO,'(1X,2A,2I8)') 'PHO_REGPAR: ',
+ & 'index out of bounds (NHEP,IPOS)',NHEP,IPOS
+ RETURN
+ ENDIF
+ ISTH = ISTHEP(IPOS)
+ IDPDG = IDHEP(IPOS)
+ IDBAM = IMPART(IPOS)
+ JM1 = JMOHEP(1,IPOS)
+ JM2 = JMOHEP(2,IPOS)
+ P1 = PHEP(1,IPOS)
+ P2 = PHEP(2,IPOS)
+ P3 = PHEP(3,IPOS)
+ P4 = PHEP(4,IPOS)
+ IPHIS1= IPHIST(1,IPOS)
+ IPHIS2= IPHIST(2,IPOS)
+ IC1 = ICOLOR(1,IPOS)
+ IC2 = ICOLOR(2,IPOS)
+ ELSE
+ WRITE(LO,'(1X,A,I8)') 'PHO_REGPAR: invalid mode',IMODE
+ ENDIF
+ END
+
+CDECK ID>, IPHO_CNV1
+ INTEGER FUNCTION IPHO_CNV1(IPART)
+C*********************************************************************
+C
+C conversion of quark numbering scheme to PARTICLE DATA GROUP
+C convention
+C
+C input: old internal particle code of hard scattering
+C 0 gluon
+C 1 d
+C 2 u
+C 3 s
+C 4 c
+C valence quarks changed to standard numbering
+C
+C output: standard particle codes
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+C
+ II = ABS(IPART)
+C change gluon number
+ IF(II.EQ.0) THEN
+ IPHO_CNV1 = 21
+C change valence quark
+ ELSE IF((II.GT.6).AND.(II.LT.13)) THEN
+ IPHO_CNV1 = SIGN(II-6,IPART)
+ ELSE
+ IPHO_CNV1 = IPART
+ ENDIF
+ END
+
+CDECK ID>, PHO_HACODE
+ SUBROUTINE PHO_HACODE(ID1,ID2,IDcpc1,IDcpc2)
+C*********************************************************************
+C
+C determination of hadron index from quarks
+C
+C input: ID1,ID2 parton code according to PDG conventions
+C
+C output: IDcpc1,2 CPC particle codes
+C
+C*********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer ID1,ID2,IDcpc1,IDcpc2
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C local variables
+ integer ii,jj,kk,i1,i2
+
+ IDcpc1 = 0
+ IDcpc2 = 0
+
+ if(ID1*ID2.lt.0) then
+C meson
+ if(ID1.gt.0) then
+ ii = ID1
+ jj = -ID2
+ else
+ ii = ID2
+ jj = -ID1
+ endif
+ IDcpc1 = ID_psm_list(ii,jj)
+ IDcpc2 = ID_vem_list(ii,jj)
+
+ else
+C baryon
+ i1 = abs(ID1)
+ i2 = abs(ID2)
+ if(i1.gt.6) then
+ ii = i1/1000
+ jj = (i1-ii*1000)/100
+ kk = i2
+ else
+ ii = i1
+ jj = i2/1000
+ kk = (i2-jj*1000)/100
+ endif
+ IDcpc1 = sign(ID_b8_list(ii,jj,kk),ID1)
+ IDcpc2 = sign(ID_b10_list(ii,jj,kk),ID1)
+
+ endif
+
+ END
+
+CDECK ID>, PHO_ID2STR
+ SUBROUTINE PHO_ID2STR(ID1,ID2,NOBAM,IBAM1,IBAM2,IBAM3,IBAM4)
+C*********************************************************************
+C
+C conversion of quark numbering scheme
+C
+C input: standard particle codes:
+C ID1
+C ID2
+C
+C output: NOBAM CPC string code
+C quark codes (PDG convention):
+C IBAM1
+C IBAM2
+C IBAM3
+C IBAM4
+C
+C NOBAM = -1 invalid flavour combinations
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ IDA1 = ABS(ID1)
+ IDA2 = ABS(ID2)
+
+C quark-antiquark string
+ IF((IDA1.LE.6).AND.(IDA2.LE.6)) THEN
+ IF((ID1*ID2).GE.0) GOTO 100
+ IBAM1 = ID1
+ IBAM2 = ID2
+ IBAM3 = 0
+ IBAM4 = 0
+ NOBAM = 3
+C quark-diquark string
+ ELSE IF((IDA2.GT.6).AND.(IDA1.LE.6)) THEN
+ IF((ID1*ID2).LE.0) GOTO 100
+ IBAM1 = ID1
+ IBAM2 = ID2/1000
+ IBAM3 = (ID2-IBAM2*1000)/100
+ IBAM4 = 0
+ NOBAM = 4
+C diquark-quark string
+ ELSE IF((IDA1.GT.6).AND.(IDA2.LE.6)) THEN
+ IF((ID1*ID2).LE.0) GOTO 100
+ IBAM1 = ID1/1000
+ IBAM2 = (ID1-IBAM1*1000)/100
+ IBAM3 = ID2
+ IBAM4 = 0
+ NOBAM = 6
+C gluon-gluon string
+ ELSE IF((IDA1.EQ.21).AND.(IDA2.EQ.21)) THEN
+ IBAM1 = 21
+ IBAM2 = 21
+ IBAM3 = 0
+ IBAM4 = 0
+ NOBAM = 7
+C diquark-antidiquark string
+ ELSE IF((IDA1.GT.6).AND.(IDA2.GT.6)) THEN
+ IF((ID1*ID2).GE.0) GOTO 100
+ IBAM1 = ID1/1000
+ IBAM2 = (ID1-IBAM1*1000)/100
+ IBAM3 = ID2/1000
+ IBAM4 = (ID2-IBAM3*1000)/100
+ NOBAM = 5
+ ENDIF
+ RETURN
+
+C invalid combination
+ 100 CONTINUE
+ WRITE(LO,'(//1X,A,2I10)')
+ & 'PHO_ID2STR: invalid flavors for string (ID1,ID2)',ID1,ID2
+ CALL PHO_ABORT
+
+ END
+
+CDECK ID>, PHO_MKSLTR
+ SUBROUTINE PHO_MKSLTR(P1,P2,GAM,GAMB)
+C********************************************************************
+C
+C calculate successive Lorentz boots for arbitrary Lorentz trans.
+C
+C input: P1 initial 4 vector
+C GAM(3),GAMB(3) Lorentz boost parameters
+C
+C output: P2 final 4 vector
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ DIMENSION P1(4),P2(4),GAM(3),GAMB(3)
+
+ P2(4) = P1(4)
+ DO 150 I=1,3
+ P2(I)=GAM(I)*P1(I)+GAMB(I)*P2(4)
+ P2(4)=GAM(I)*P2(4)+GAMB(I)*P1(I)
+ 150 CONTINUE
+ END
+
+CDECK ID>, PHO_GETLTR
+ SUBROUTINE PHO_GETLTR(P1,P2,GAM,GAMB,DELE,IREJ)
+C********************************************************************
+C
+C calculate Lorentz boots for arbitrary Lorentz transformation
+C
+C input: P1 initial 4 vector
+C P2 final 4 vector
+C
+C output: GAM(3),GAMB(3)
+C DELE energy deviation
+C IREJ 0 success
+C 1 failure
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DREL = 0.001D0 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DIMENSION P1(4),P2(4),GAM(3),GAMB(3),PA(4),PP(4)
+
+ IREJ = 1
+ DO 50 K=1,4
+ PA(K) = P1(K)
+ PP(K) = P1(K)
+ 50 CONTINUE
+ PM1 = P1(4)**2-P1(1)**2-P1(2)**2-P1(3)**2
+ DO 100 I=1,3
+ PP(I) = P2(I)
+ PP(4) = PM1+PP(1)**2+PP(2)**2+PP(3)**2
+ IF(PP(4).LE.0.D0) RETURN
+ PP(4) = SQRT(PP(4))
+ GAMB(I) = (SQRT(PA(4)**2-PA(I)**2+PP(I)**2)*PP(I)
+ & -PA(4)*PA(I))/(PA(4)**2+PP(I)**2)
+ GAM(I) = 1.D0/SQRT(1.D0-GAMB(I)**2)
+ GAMB(I) = GAMB(I)*GAM(I)
+ DO 150 K=1,4
+ PA(K) = PP(K)
+ 150 CONTINUE
+ 100 CONTINUE
+ DELE = P2(4)-PP(4)
+ IREJ = 0
+C consistency check
+* IF(ABS(P2(4)-PP(4))/MAX(P2(4),PP(4)).GT.DREL) THEN
+* PM2 = P2(4)**2-P2(1)**2-P2(2)**2-P2(3)**2
+* WRITE(LO,'(/1X,A,2E12.5)')
+* & 'PHO_GETLTR: INCONSISTENT ENERGIES',P2(4),PP(4)
+* WRITE(LO,'(1X,A,2E12.4)') 'INPUT MASSES',PM1,PM2
+* WRITE(LO,'(1X,A,4E12.4)') 'INPUT ',P1
+* WRITE(LO,'(1X,A,4E12.4)') 'OUTPUT',P2
+* WRITE(LO,'(1X,A,4E12.4)') 'INTERN',PP
+* ENDIF
+ END
+
+CDECK ID>, PHO_ALTRA
+ SUBROUTINE PHO_ALTRA(GA,BGX,BGY,BGZ,PCX,PCY,PCZ,EC,P,PX,PY,PZ,E)
+C*********************************************************************
+C
+C arbitrary Lorentz transformation
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ EP=PCX*BGX+PCY*BGY+PCZ*BGZ
+ PE=EP/(GA+1.D0)+EC
+ PX=PCX+BGX*PE
+ PY=PCY+BGY*PE
+ PZ=PCZ+BGZ*PE
+ P=SQRT(PX*PX+PY*PY+PZ*PZ)
+ E=GA*EC+EP
+
+ END
+
+CDECK ID>, PHO_LTRANS
+ SUBROUTINE PHO_LTRANS(GAM,BGAM,CX,CY,CZ,COD,COF,SIF,P,ECM,
+ & PL,CXL,CYL,CZL,EL)
+C**********************************************************************
+C
+C Lorentz transformation into lab - system
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( TINY=1.D-08,TINY2=1.D-30 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ SID=SQRT(1.D0-COD*COD)
+ PLX=P*SID*COF
+ PLY=P*SID*SIF
+ PCMZ=P*COD
+ PLZ=GAM*PCMZ+BGAM*ECM
+ PL=SQRT(PLX*PLX+PLY*PLY+PLZ*PLZ)
+ EL=GAM*ECM+BGAM*PCMZ
+
+C rotation into the original direction
+ COZ=PLZ/PL
+ SIZ=SQRT(MAX((1.D0-COZ)*(1.D0+COZ),0.D0))
+
+* CALL PHO_DTRANS(CX,CY,CZ,COZ,SIZ,COF,SIF,CXL,CYL,CZL)
+
+ AX=ABS(CX)
+ AY=ABS(CY)
+ IF(AX.LT.AY) THEN
+ AMAX=AY
+ AMIN=AX
+ ELSE
+ AMAX=AX
+ AMIN=AY
+ ENDIF
+ IF (ABS(CX)-TINY) 1,1,2
+ 1 IF (ABS(CY)-TINY) 3,3,2
+
+ 3 CONTINUE
+* WRITE(LO,*)' PHO_DTRANS CX CY CZ =',CX,CY,CZ
+ CXL=SIZ*COF
+ CYL=SIZ*SIF
+ CZL=COZ*CZ
+* WRITE(LO,*)' PHO_DTRANS CXL=SIZ*COF CYL=SIZ*SIF CZL=COZ'
+* WRITE(LO,*) CXL,CYL,CZL
+ RETURN
+
+ 2 CONTINUE
+ IF(AMAX.GT.TINY2) THEN
+ AR=AMIN/AMAX
+ AR=AR*AR
+ A=AMAX*SQRT(1.D0+AR)
+ ELSE
+* WRITE(LO,*)' PHO_DTRANS AMAX LE TINY2 '
+ GOTO 3
+ ENDIF
+ XI=SIZ*COF
+ YI=SIZ*SIF
+ ZI=COZ
+ CXL=-CY*XI/A-CZ*CX*YI/A+CX*ZI
+ CYL=CX*XI/A-CZ*CY*YI/A+CY*ZI
+ CZL=A*YI+CZ*ZI
+
+ END
+
+CDECK ID>, PHO_TRANS
+ SUBROUTINE PHO_TRANS(XO,YO,ZO,CDE,SDE,CFE,SFE,X,Y,Z)
+C**********************************************************************
+C
+C rotation of coordinate frame (1) de rotation around y axis
+C (2) fe rotation around z axis
+C (inverse rotation to PHO_TRANI)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ X= CDE*CFE*XO-SFE*YO+SDE*CFE*ZO
+ Y= CDE*SFE*XO+CFE*YO+SDE*SFE*ZO
+ Z=-SDE *XO +CDE *ZO
+
+ END
+
+CDECK ID>, PHO_TRANI
+ SUBROUTINE PHO_TRANI(XO,YO,ZO,CDE,SDE,CFE,SFE,X,Y,Z)
+C**********************************************************************
+C
+C rotation of coordinate frame (1) -fe rotation around z axis
+C (2) -de rotation around y axis
+C (inverse rotation to PHO_TRANS)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ X= CDE*CFE*XO+CDE*SFE*YO-SDE*ZO
+ Y=-SFE *XO+CFE* YO
+ Z= SDE*CFE*XO+SDE*SFE*YO+CDE*ZO
+
+ END
+
+CDECK ID>, pho_cpcini
+ SUBROUTINE pho_cpcini(Nrows,Number,List)
+C***********************************************************************
+C
+C initialization of particle hash table
+C
+C input: Number vector with Nrows entries according to PDG
+C convention
+C
+C output: List vector with hash table
+C
+C (this code is based on the function initpns written by
+C Gerry Lynch, LBL, January 1990)
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ integer Number(*),List(*),Nrows
+
+ Integer Nin,Nout,Ip,I
+
+ do I = 1,577
+ List(I) = 0
+ enddo
+
+C Loop over all of the elements in the Number vector
+
+ Do 500 Ip = 1,Nrows
+ Nin = Number(Ip)
+
+C Calculate a list number for this particle id number
+ If(Nin.Gt.99999.or.Nin.Le.0) Then
+ Nout = -1
+ Else If(Nin.Le.577) Then
+ Nout = Nin
+ Else
+ Nout = Mod(Nin,577)
+ End If
+
+ 200 continue
+
+ If(Nout.Lt.0) Then
+C Count the bad entries
+ WRITE(LO,'(1x,a,i10)')
+ & 'pho_cpcini: invalid particle ID',Nin
+ Go to 500
+ End If
+ If(List(Nout).eq.0) Then
+ List(Nout) = Ip
+ Else
+ If(Nin.eq.Number(List(Nout))) Then
+ WRITE(LO,'(1x,a,i10)')
+ & 'pho_cpcini: double particle ID',Nin
+ End If
+ Nout = Nout + 5
+ If(Nout.Gt.577) Nout = Mod(Nout, 577)
+
+ Go to 200
+ End If
+ 500 Continue
+
+ END
+
+CDECK ID>, ipho_pdg2id
+ INTEGER FUNCTION ipho_pdg2id(IDpdg)
+C**********************************************************************
+C
+C calculation internal particle code using the particle index i
+C according to the PDG proposal.
+C
+C input: IDpdg PDG particle number
+C output: ipho_pdg2id internal particle code
+C (0 for invalid IDpdg)
+C
+C the hash algorithm is based on a program by Gerry Lynch
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer IDpdg
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+
+ integer Nin,Nout
+
+ Nin = abs(IDpdg)
+
+ if((Nin.gt.99999).or.(Nin.eq.0)) then
+C invalid particle number
+ if(ideb(71).gt.5) WRITE(LO,'(1x,A,I10)')
+ & 'ipho_pdg2id: invalid PDG ID number ',IDpdg
+ ipho_pdg2id = 0
+ return
+ else If(Nin.le.577) then
+C simple case
+ Nout = Nin
+ else
+C use hash algorithm
+ Nout = mod(Nin,577)
+ endif
+
+ 100 continue
+
+C particle not in table
+ if(ID_list(Nout).Eq.0) then
+ if(ideb(71).ge.0) WRITE(LO,'(1x,A,I10)')
+ & 'ipho_pdg2id: particle not in table ',IDpdg
+ ipho_pdg2id = 0
+ return
+ endif
+
+ if(ID_pdg_list(ID_list(Nout)).eq.Nin) then
+C particle ID found
+ ipho_pdg2id = sign(ID_list(Nout),IDpdg)
+ return
+ else
+C increment and try again
+ Nout = Nout + 5
+ If(Nout.gt.577) Nout = Mod(Nout,577)
+ goto 100
+ endif
+
+ END
+
+CDECK ID>, IPHO_ID2PDG
+ INTEGER FUNCTION ipho_id2pdg(IDcpc)
+C**********************************************************************
+C
+C conversion of internal particle code to PDG standard
+C
+C input: IDcpc internal particle number
+C output: ipho_id2pdg PDG particle number
+C (0 for invalid IDcpc)
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer IDcpc
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+
+ integer IDabs
+
+ IDabs = abs(IDcpc)
+ if((IDabs.lt.1).or.(IDabs.gt.ID_pdg_max)) then
+ ipho_id2pdg = 0
+ return
+ endif
+
+ ipho_id2pdg = sign(ID_pdg_list(IDabs),IDcpc)
+
+ END
+
+CDECK ID>, IPHO_LU2PDG
+ INTEGER FUNCTION IPHO_LU2PDG(LUKF)
+C**********************************************************************
+C
+C conversion of JETSET KF code to PDG code
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (NTAB=10)
+ DIMENSION LU2PD(2,NTAB)
+ DATA LU2PD / 4232, 4322,
+ & 4322, 4232,
+ & 3212, 3122,
+ & 3122, 3212,
+ & 30553, 20553,
+ & 30443, 20443,
+ & 20443, 10443,
+ & 10443, 0,
+ & 511, 0,
+ & 10551, 551 /
+C
+ DO 100 I=1,NTAB
+ IF(LU2PD(1,I).EQ.LUKF) THEN
+ IPHO_LU2PDG=LU2PD(2,I)
+ RETURN
+ ENDIF
+ 100 CONTINUE
+ IPHO_LU2PDG=LUKF
+
+ END
+
+CDECK ID>, IPHO_PDG2LU
+ INTEGER FUNCTION IPHO_PDG2LU(IPDG)
+C**********************************************************************
+C
+C conversion of PDG code to JETSET code
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+ PARAMETER (NTAB=8)
+ DIMENSION LU2PD(2,NTAB)
+ DATA LU2PD / 4232, 4322,
+ & 4322, 4232,
+ & 3212, 3122,
+ & 3122, 3212,
+ & 30553, 20553,
+ & 30443, 20443,
+ & 20443, 10443,
+ & 10551, 551 /
+C
+ DO 100 I=1,NTAB
+ IF(LU2PD(2,I).EQ.IPDG) THEN
+ IPHO_PDG2LU=LU2PD(1,I)
+ RETURN
+ ENDIF
+ 100 CONTINUE
+ IPHO_PDG2LU=IPDG
+
+ END
+
+CDECK ID>, pho_pname
+ CHARACTER*15 FUNCTION pho_pname(ID,mode)
+C***********************************************************************
+C
+C returns particle name for given ID number
+C
+C input: ID particle ID number
+C mode 0: ID treated as compressed particle code
+C 1: ID treated as PDG number
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer ID,mode
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C external functions
+ integer ipho_id2pdg,ipho_pdg2id
+
+C local variables
+ integer IDpdg,i,ii,k,l,ichar,i_anti
+ character*15 name
+
+ pho_pname = '(?????????????)'
+
+ if(mode.eq.0) then
+ i = ID
+ IDpdg = ipho_id2pdg(ID)
+ if(IDpdg.eq.0) return
+ else if(mode.eq.1) then
+ i = ipho_pdg2id(ID)
+ if(i.eq.0) return
+ IDpdg = ID
+ else if(mode.eq.2) then
+ if(ISTHEP(ID).gt.11) then
+ if(ISTHEP(ID).eq.20) then
+ pho_pname = 'hard ini. part.'
+ else if(ISTHEP(ID).eq.21) then
+ pho_pname = 'hard fin. part.'
+ else if(ISTHEP(ID).eq.25) then
+ pho_pname = 'hard scattering'
+ else if(ISTHEP(ID).eq.30) then
+ pho_pname = 'diff. diss. '
+ else if(ISTHEP(ID).eq.35) then
+ pho_pname = 'elastic scatt. '
+ else if(ISTHEP(ID).eq.40) then
+ pho_pname = 'central scatt. '
+ endif
+ return
+ endif
+ IDpdg = IDHEP(ID)
+ i = IMPART(ID)
+ else
+ WRITE(LO,'(1x,a,2i4)')
+ & 'pho_pname: invalid arguments (ID,mode): ',ID,mode
+ return
+ endif
+
+ ii = abs(i)
+ if((ii.eq.0).or.(ii.gt.ID_pdg_max)) return
+
+ name = name_list(ii)
+ ichar = ich3_list(ii)*sign(1,i)
+ if(mod(ichar,3).ne.0) then
+ ichar = 0
+ else
+ ichar = ichar/3
+ endif
+
+C find position of first blank character
+ k = 1
+ 100 continue
+ k = k+1
+ if(name(k:k).ne.' ') goto 100
+
+C append anti-particle sign
+ if(i.lt.0) then
+ i_anti = 0
+ do l=1,3
+ i_anti = i_anti+iq_list(l,ii)
+ enddo
+ if(iba3_list(ii).ne.0) then
+ name(k:k) = '~'
+ k = K+1
+ else if(((i_anti.ne.0).and.(ichar.eq.0))
+ & .or.(IDpdg.eq.-12)
+ & .or.(IDpdg.eq.-14)
+ & .or.(IDpdg.eq.-16)) then
+ name(k:k) = '~'
+ k = K+1
+ endif
+ endif
+
+C append charge sign
+ if(ichar.eq.-2) then
+ name(k:k+1) = '--'
+ else if(ichar.eq.-1) then
+ name(k:k) = '-'
+ else if(ichar.eq.1) then
+ name(k:k) = '+'
+ else if(ichar.eq.2) then
+ name(k:k+1) = '++'
+ endif
+
+ pho_pname = name
+
+ END
+
+CDECK ID>, ipho_anti
+ INTEGER FUNCTION ipho_anti(ID)
+C**********************************************************************
+C
+C determine antiparticle for given ID
+C
+C input: ID gives CPC particle number
+C
+C output: ipho_anti antiparticle code
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer ID
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C external functions
+ integer ipho_id2pdg,ipho_pdg2id
+
+C local variables
+ integer IDabs,IDpdg,i_anti,l
+
+ ipho_anti = -ID
+ IDabs = abs(ID)
+
+C baryons
+ if(iba3_list(IDabs).ne.0) return
+
+C charged particles
+ if(ich3_list(IDabs).ne.0) return
+
+C K0_s and K0_l
+ IDpdg = ipho_id2pdg(ID)
+ if(IDpdg.eq.310) then
+ ID = ipho_pdg2id(130)
+ return
+ else if(IDpdg.eq.130) then
+ ID = ipho_pdg2id(310)
+ return
+ endif
+
+C neutral mesons with open strangeness, charm, or beauty
+ i_anti = 0
+ do l=1,3
+ i_anti = i_anti+iq_list(l,IDabs)
+ enddo
+ if(i_anti.ne.0) return
+
+C neutrinos
+ IDpdg = abs(IDpdg)
+ if((IDpdg.eq.12).or.(IDpdg.eq.14).or.(IDpdg.eq.16)) return
+
+ ipho_anti = ID
+
+ END
+
+CDECK ID>, ipho_chr3
+ INTEGER FUNCTION ipho_chr3(ID,mode)
+C**********************************************************************
+C
+C output of three times the electric charge
+C
+C input: mode
+C 0 ID gives CPC particle number
+C 1 ID gives PDG particle number
+C 2 ID gives position of particle in /POEVT1/
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer ID,mode
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C external functions
+ integer ipho_pdg2id
+
+C local variables
+ integer i,IDpdg
+
+ ipho_chr3 = 0
+
+ if(mode.eq.0) then
+ i = ID
+ else if(mode.eq.1) then
+ i = ipho_pdg2id(ID)
+ if(i.eq.0) return
+ IDpdg = ID
+ else if(mode.eq.2) then
+ if(ISTHEP(ID).gt.11) return
+ i = IMPART(ID)
+ IDpdg = IDHEP(ID)
+ IF((IDpdg.eq.90).or.(IDpdg.eq.91).or.(IDpdg.eq.92)) then
+ ipho_chr3 = ICOLOR(1,ID)
+ return
+ endif
+ else
+ WRITE(LO,'(1x,a,2i4)')
+ & 'ipho_chr3: invalid mode (ID,mode): ',ID,mode
+ return
+ endif
+
+ if((i.eq.0).or.(iabs(i).gt.ID_pdg_max)) then
+ WRITE(LO,'(1x,a,3i8)')
+ & 'ipho_chr3: invalid arguments (ID,mode,i): ',ID,mode,i
+ ipho_chr3 = 1.D0/dble(i)
+ call pho_prevnt(0)
+ return
+ endif
+
+ ipho_chr3 = ich3_list(iabs(i))*sign(1,i)
+
+ END
+
+CDECK ID>, ipho_bar3
+ INTEGER FUNCTION ipho_bar3(ID,mode)
+C**********************************************************************
+C
+C output of three times the baryon charge
+C
+C index: MODE
+C 0 ID gives CPC particle number
+C 1 ID gives PDG particle number
+C 2 ID gives position of particle in /POEVT1/
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer ID,mode
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C external functions
+ integer ipho_pdg2id
+
+C local variables
+ integer i,IDpdg
+
+ ipho_bar3 = 0
+
+ if(mode.eq.0) then
+ i = ID
+ else if(mode.eq.1) then
+ i = ipho_pdg2id(ID)
+ if(i.eq.0) return
+ IDpdg = ID
+ else if(mode.eq.2) then
+ if(ISTHEP(ID).gt.11) return
+ i = IMPART(ID)
+ IDpdg = IDHEP(ID)
+ IF((IDpdg.eq.90).or.(IDpdg.eq.91).or.(IDpdg.eq.92)) then
+ ipho_bar3 = ICOLOR(2,ID)
+ return
+ endif
+ else
+ WRITE(LO,'(1x,a,2i4)')
+ & 'ipho_bar3: invalid mode (ID,mode): ',ID,mode
+ return
+ endif
+
+ if((i.eq.0).or.(iabs(i).gt.ID_pdg_max)) then
+ WRITE(LO,'(1x,a,3i8)')
+ & 'ipho_bar3: invalid arguments (ID,mode,i): ',ID,mode,i
+ ipho_bar3 = 1.D0/dble(i)
+ return
+ endif
+
+ ipho_bar3 = iba3_list(iabs(i))*sign(1,i)
+
+ END
+
+CDECK ID>, pho_pmass
+ DOUBLE PRECISION FUNCTION pho_pmass(ID,mode)
+C***********************************************************************
+C
+C particle mass
+C
+C input: mode -1 initialization
+C 0 ID gives CPC particle number
+C 1 ID gives PDG particle number,
+C (for quarks current masses are returned)
+C 2 ID gives position of particle in /POEVT1/
+C 3 ID gives PDG parton number,
+C (for quarks constituent masses are returned)
+C
+C output: average particle mass (in GeV)
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer ID,mode,MSTJ24
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+ INTEGER MSTU,MSTJ
+ DOUBLE PRECISION PARU,PARJ
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+C external functions
+ integer ipho_pdg2id,ipho_id2pdg
+
+ DOUBLE PRECISION PYMASS
+
+C local variables
+ integer i,IDpdg
+
+ pho_pmass = 0.D0
+
+ if(mode.eq.0) then
+ i = ID
+ else if(mode.eq.1) then
+ i = ipho_pdg2id(ID)
+ if(i.eq.0) return
+ else if(mode.eq.2) then
+ if(ISTHEP(ID).gt.11) return
+ i = IMPART(ID)
+ IDpdg = IDHEP(ID)
+ IF((IDpdg.eq.90).or.(IDpdg.eq.91).or.(IDpdg.eq.92)) then
+ pho_pmass = PHEP(5,ID)
+ return
+ endif
+ else if(mode.eq.3) then
+ i = abs(ID)
+ if((i.gt.0).and.(i.le.6)) then
+ pho_pmass = PARMDL(150+i)
+ return
+ else
+ i = ipho_pdg2id(ID)
+ if(i.eq.0) return
+ endif
+ else if(mode.eq.-1) then
+C initialization: take masses for quarks and di-quarks from JETSET
+ MSTJ24 = MSTJ(24)
+ MSTJ(24) = 0
+ do i=1,22
+ IDpdg = ipho_id2pdg(i)
+
+ xm_list(i) = PYMASS(IDpdg)
+
+ enddo
+ MSTJ(24) = MSTJ24
+ return
+ else
+ WRITE(LO,'(1x,a,2i4)')
+ & 'pho_pmass: invalid arguments (ID,mode): ',ID,mode
+ return
+ endif
+
+ if((i.eq.0).or.(iabs(i).gt.ID_pdg_max)) then
+ WRITE(LO,'(1x,a,2i8)')
+ & 'pho_pmass: invalid arguments (ID,mode): ',ID,mode
+ pho_pmass = 1.D0/dble(i)
+ return
+ endif
+
+ pho_pmass = xm_list(iabs(i))
+
+ END
+
+CDECK ID>, PHO_MEMASS
+ SUBROUTINE PHO_MEMASS(I,J,AMPS,AMPS2,AMVE,AMVE2,IPS,IVE)
+C**********************************************************************
+C
+C determine meson masses corresponding to the input flavours
+C
+C input: I,J,K quark flavours (PDG convention)
+C
+C output: AMPS pseudo scalar meson mass
+C AMPS2 next possible two particle configuration
+C (two pseudo scalar mesons)
+C AMVE vector meson mass
+C AMVE2 next possible two particle configuration
+C (two vector mesons)
+C IPS,IVE meson numbers in CPC
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer I,J,IPS,IVE
+ double precision AMPS,AMPS2,AMVE,AMVE2
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C local variables
+ integer ii,jj
+
+ IF(I.GT.0) THEN
+ ii = I
+ jj = -J
+ ELSE
+ ii = J
+ jj = -I
+ ENDIF
+
+C particle ID's
+ IPS = id_psm_list(ii,jj)
+ IVE = id_vem_list(ii,jj)
+C masses
+ if(IPS.ne.0) then
+ AMPS = xm_list(iabs(IPS))
+ else
+ AMPS = 0.D0
+ endif
+ if(IVE.ne.0) then
+ AMVE = xm_list(iabs(IVE))
+ else
+ AMVE = 0.D0
+ endif
+
+C next possible two-particle configurations (add phase space)
+ AMPS2 = xm_psm2_list(ii,jj)*1.5D0
+ AMVE2 = xm_vem2_list(ii,jj)*1.1D0
+
+ END
+
+CDECK ID>, PHO_BAMASS
+ SUBROUTINE PHO_BAMASS(I,J,K,AM8,AM82,AM10,AM102,I8,I10)
+C**********************************************************************
+C
+C determine baryon masses corresponding to the input flavours
+C
+C input: I,J,K quark flavours (PDG convention)
+C
+C output: AM8 octett baryon mass
+C AM82 next possible two particle configuration
+C (octett baryon and meson)
+C AM10 decuplett baryon mass
+C AM102 next possible two particle configuration
+C (decuplett baryon and meson,
+C baryon built up from first two quarks)
+C I8,I10 internal baryon numbers
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer I,J,K,I8,I10
+ double precision AM8,AM82,AM10,AM102
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C local variables
+ integer ii,jj,kk
+
+C find particle ID's
+ ii = iabs(I)
+ jj = iabs(J)
+ kk = iabs(K)
+ I8 = id_b8_list(ii,jj,kk)
+ I10 = id_b10_list(ii,jj,kk)
+
+C masses (if combination possible)
+ if(I8.ne.0) then
+ AM8 = xm_list(I8)
+ I8 = sign(I8,i)
+ else
+ AM8 = 0.D0
+ endif
+ if(I10.ne.0) then
+ AM10 = xm_list(I10)
+ I10 = sign(I10,i)
+ else
+ AM10 = 0.D0
+ endif
+
+C next possible two-particle configurations (add phase space)
+ AM82 = xm_b82_list(ii,jj,kk)*1.5D0
+ AM102 = xm_b102_list(ii,jj,kk)*1.1D0
+
+ END
+
+CDECK ID>, PHO_DQMASS
+ SUBROUTINE PHO_DQMASS(I,J,K,L,AM82,AM102)
+C**********************************************************************
+C
+C determine minimal masses corresponding to the input flavours
+C (diquark a-diquark string system)
+C
+C input: I,J,K,L quark flavours (PDG convention)
+C
+C output: AM82 mass of two octett baryons
+C AM102 mass of two decuplett baryons
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer I,J,K,L
+ double precision AM82,AM102
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+
+C local variables
+ integer ii,jj,kk,ll
+
+ ii = iabs(i)
+ kk = iabs(k)
+ jj = iabs(j)
+ ll = iabs(l)
+
+ AM82 = xm_bb82_list(ii,jj,kk,ll)
+ AM102 = xm_bb102_list(ii,jj,kk,ll)
+
+ END
+
+CDECK ID>, PHO_CHECK
+ SUBROUTINE PHO_CHECK(MD,IDEV)
+C**********************************************************************
+C
+C check quantum numbers of entries in /POEVT1/ and /POEVT2/
+C (energy, momentum, charge, baryon number conservation)
+C
+C input: MD -1 check overall momentum conservation
+C and perform detailed check only in case of
+C deviations
+C 1 test all branchings, mother-daughter
+C relations
+C
+C output: IDEV 0 no deviations
+C 1 deviations found
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+C count number of errors to avoid disk overflow
+ DATA IERR / 0 /
+
+ IDEV = 0
+C conservation check suppressed
+ IF((IPAMDL(15).EQ.0).OR.(IDEB(20).LE.-10)) RETURN
+
+ IF(IPAMDL(13).GT.0) THEN
+
+C DPMJET call with x limitations
+ MODE = -1
+ ECM1 = SQRT(XPSUB*XTSUB)*ECM
+
+ ELSE
+
+C standard call
+ MODE = MD
+C first two entries are considered as scattering particles
+ EE1 = PHEP(4,1) + PHEP(4,2)
+ PX1 = PHEP(1,1) + PHEP(1,2)
+ PY1 = PHEP(2,1) + PHEP(2,2)
+ PZ1 = PHEP(3,1) + PHEP(3,2)
+
+ ENDIF
+
+ DDREL = PARMDL(75)
+ DDABS = PARMDL(76)
+ IF(MODE.EQ.-1) GOTO 500
+
+ 50 CONTINUE
+
+ I = 1
+ 100 CONTINUE
+
+C recognize only decayed particles as mothers
+ IF(ISTHEP(I).EQ.2) THEN
+C search for other mother particles
+ K = JDAHEP(1,I)
+ IF(K.EQ.0) THEN
+ IF(IPAMDL(178).NE.0)
+ & WRITE(LO,'(1X,2A,I4)') 'PHO_CHECK: ',
+ & 'entry marked as decayed but no dauther given:',I
+ GOTO 99
+ ENDIF
+ K1 = JMOHEP(1,K)
+ K2 = JMOHEP(2,K)
+C sum over mother particles
+ ICH1 = IPHO_CHR3(K1,2)
+ IBA1 = IPHO_BAR3(K1,2)
+ EE1 = PHEP(4,K1)
+ PX1 = PHEP(1,K1)
+ PY1 = PHEP(2,K1)
+ PZ1 = PHEP(3,K1)
+ IF(K2.LT.0) THEN
+ K2 = -K2
+ IF((K1.GT.I).OR.(K2.LT.I)) THEN
+ WRITE(LO,'(/,1X,2A,3I4)') 'PHO_CHECK: ',
+ & 'inconsistent mother/daughter relation found',I,K1,K2
+ CALL PHO_PREVNT(-1)
+ ENDIF
+ DO 400 II=K1+1,K2
+ IF(ABS(ISTHEP(II)).LE.2) THEN
+ ICH1 = ICH1 + IPHO_CHR3(II,2)
+ IBA1 = IBA1 + IPHO_BAR3(II,2)
+ EE1 = EE1 + PHEP(4,II)
+ PX1 = PX1 + PHEP(1,II)
+ PY1 = PY1 + PHEP(2,II)
+ PZ1 = PZ1 + PHEP(3,II)
+ ENDIF
+ 400 CONTINUE
+ ELSE IF((K2.GT.0).AND.(K2.NE.K1)) THEN
+ ICH1 = ICH1 + IPHO_CHR3(K2,2)
+ IBA1 = IBA1 + IPHO_BAR3(K2,2)
+ EE1 = EE1 + PHEP(4,K2)
+ PX1 = PX1 + PHEP(1,K2)
+ PY1 = PY1 + PHEP(2,K2)
+ PZ1 = PZ1 + PHEP(3,K2)
+ ENDIF
+
+C sum over daughter particles
+ ICH2 = 0.D0
+ IBA2 = 0.D0
+ EE2 = 0.D0
+ PX2 = 0.D0
+ PY2 = 0.D0
+ PZ2 = 0.D0
+ DO 200 II=JDAHEP(1,I),JDAHEP(2,I)
+ IF(ABS(ISTHEP(II)).LE.2) THEN
+ ICH2 = ICH2 + IPHO_CHR3(II,2)
+ IBA2 = IBA2 + IPHO_BAR3(II,2)
+ EE2 = EE2 + PHEP(4,II)
+ PX2 = PX2 + PHEP(1,II)
+ PY2 = PY2 + PHEP(2,II)
+ PZ2 = PZ2 + PHEP(3,II)
+ ENDIF
+ 200 CONTINUE
+
+C conservation check
+ ESC = MAX(MAX(EE1,EE2)*DDREL,DDABS)
+ IF(ABS(EE1-EE2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,I3,2X,1P,2E10.3)')
+ & 'PHO_CHECK: energy conservation violated for',
+ & 'entry,initial,final:',I,EE1,EE2
+ IDEV = 1
+ ENDIF
+ ESC = MAX(MAX(ABS(PX1),ABS(PX2))*DDREL,DDABS)
+ IF(ABS(PX1-PX2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,I3,2X,1P,2E12.3)')
+ & 'PHO_CHECK: x-momentum conservation violated for',
+ & 'entry,initial,final:',I,PX1,PX2
+ IDEV = 1
+ ENDIF
+ ESC = MAX(MAX(ABS(PY1),ABS(PY2))*DDREL,DDABS)
+ IF(ABS(PY1-PY2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,I3,2X,1P,2E12.3)')
+ & 'PHO_CHECK: y-momentum conservation violated for',
+ & 'entry,initial,final:',I,PY1,PY2
+ IDEV = 1
+ ENDIF
+ ESC = MAX(MAX(ABS(PZ1),ABS(PZ2))*DDREL,DDABS)
+ IF(ABS(PZ1-PZ2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,I3,2X,1P,2E12.3)')
+ & 'PHO_CHECK: z-momentum conservation violated for',
+ & 'entry,initial,final:',I,PZ1,PZ2
+ IDEV = 1
+ ENDIF
+ IF(ICH1.NE.ICH2) THEN
+ WRITE(LO,'(1X,A,/,5X,A,I3,2X,2I5)')
+ & 'PHO_CHECK: charge conservation violated for',
+ & 'entry,initial,final:',I,ICH1,ICH2
+ IDEV = 1
+ ENDIF
+ IF(IBA1.NE.IBA2) THEN
+ WRITE(LO,'(1X,2A,/,5X,A,I3,2X,2I5)') 'PHO_CHECK: ',
+ & 'baryon charge conservation violated for',
+ & 'entry,initial,final:',I,IBA1,IBA2
+ IDEV = 1
+ ENDIF
+ IF(IDEB(20).GE.35) THEN
+ WRITE(LO,
+ & '(/,1X,A,A,2(2X,I4,A,I4),2(/,5X,A,4E13.4),/5X,A,4I5)')
+ & 'PHO_CHECK diagnostics:',
+ & '(1.mother/l.mother,1.daughter/l.daughter):',
+ & K1,'/',K2,JDAHEP(1,I),'/',JDAHEP(2,I),
+ & 'mother momenta ',PX1,PY1,PZ1,EE1,
+ & 'daughter momenta ',PX2,PY2,PZ2,EE2,
+ & 'charge,baryon no ',ICH1,ICH2,IBA1,IBA2
+ ENDIF
+ ENDIF
+ 99 CONTINUE
+ I = I+1
+ IF(I.LE.NHEP) GOTO 100
+
+ 55 CONTINUE
+
+ IERR = IERR+IDEV
+
+C write complete event in case of deviations
+ IF((IDEB(20).GE.0).AND.(IDEV.NE.0)) THEN
+ CALL PHO_PREVNT(1)
+ IF(ISTR.GT.0) THEN
+ CALL PHO_PRSTRG
+
+ IF(ISWMDL(6).GE.0) CALL PYLIST(1)
+
+ ENDIF
+ ENDIF
+
+C stop after too many errors
+ IF(IERR.GT.IPAMDL(179)) THEN
+ WRITE(LO,'(////1X,2A,I6,////)') 'PHO_CHECK:ERROR:',
+ & 'too many inconsistencies found, program terminated',IERR
+ CALL PHO_ABORT
+ ENDIF
+
+ RETURN
+
+C overall check only (less time consuming)
+
+ 500 CONTINUE
+
+ ICH2 = 0.D0
+ IBA2 = 0.D0
+ EE2 = 0.D0
+ PX2 = 0.D0
+ PY2 = 0.D0
+ PZ2 = 0.D0
+
+ DO 300 K=3,NHEP
+C recognize only existing particles as possible daughters
+ IF(ABS(ISTHEP(K)).EQ.1) THEN
+ ICH2 = ICH2 + IPHO_CHR3(K,2)
+ IBA2 = IBA2 + IPHO_BAR3(K,2)
+ EE2 = EE2 + PHEP(4,K)
+ PX2 = PX2 + PHEP(1,K)
+ PY2 = PY2 + PHEP(2,K)
+ PZ2 = PZ2 + PHEP(3,K)
+ ENDIF
+ 300 CONTINUE
+
+C check energy-momentum conservation
+ ESC = ECM*DDREL
+
+ IF(IPAMDL(13).GT.0) THEN
+
+C DPMJET call with x limitations
+ ECM2 = SQRT((EE2-PZ2)*(EE2+PZ2)-PX2**2-PY2**2)
+ IF(ABS(ECM1-ECM2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,1P,2E12.4)')
+ & 'PHO_CHECK: c.m. energy conservation violated',
+ & 'initial/final energy:',ECM1,ECM2
+ IDEV = 1
+ ENDIF
+
+ ELSE
+
+C standard call
+ IF(ABS(EE1-EE2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,1P,2E12.4)')
+ & 'PHO_CHECK: energy conservation violated',
+ & 'initial/final energy:',EE1,EE2
+ IDEV = 1
+ ENDIF
+ IF(ABS(PX1-PX2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,1P,2E12.4)')
+ & 'PHO_CHECK: x-momentum conservation violated',
+ & 'initial/final x-momentum:',PX1,PX2
+ IDEV = 1
+ ENDIF
+ IF(ABS(PY1-PY2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,1P,2E12.4)')
+ & 'PHO_CHECK: y-momentum conservation violated',
+ & 'initial/final y-momentum:',PY1,PY2
+ IDEV = 1
+ ENDIF
+ IF(ABS(PZ1-PZ2).GT.ESC) THEN
+ WRITE(LO,'(1X,A,/,5X,A,1P,2E12.4)')
+ & 'PHO_CHECK: z-momentum conservation violated',
+ & 'initial/final z-momentum:',PZ1,PZ2
+ IDEV = 1
+ ENDIF
+
+C check of quantum number conservation
+
+ ICH1 = IPHO_CHR3(1,2) + IPHO_CHR3(2,2)
+ IBA1 = IPHO_BAR3(1,2) + IPHO_BAR3(2,2)
+
+ IF(ICH1.NE.ICH2) THEN
+ WRITE(LO,'(1X,A,/,5X,A,2I5)')
+ & 'PHO_CHECK: charge conservation violated',
+ & 'initial/final charge sum',ICH1,ICH2
+ IDEV = 1
+ ENDIF
+ IF(IBA1.NE.IBA2) THEN
+ WRITE(LO,'(1X,2A,/,5X,A,2I5)') 'PHO_CHECK: ',
+ & 'baryonic charge conservation violated',
+ & 'initial/final baryonic charge sum',IBA1,IBA2
+ IDEV = 1
+ ENDIF
+
+ ENDIF
+
+C perform detailed checks in case of deviations
+ IF((IDEB(20).GE.0).AND.(IDEV.NE.0)) THEN
+ IF(IPAMDL(13).GT.0) THEN
+ GOTO 55
+ ELSE
+ DDREL = DDREL/2.D0
+ DDABS = DDABS/2.D0
+ WRITE(LO,'(/1X,2A,2E12.4)') 'PHO_CHECK: ',
+ & 'increasing precision of tests to',DDREL,DDABS
+ GOTO 50
+ ENDIF
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_ABORT
+ SUBROUTINE PHO_ABORT
+C**********************************************************************
+C
+C top MC event generation due to fatal error,
+C print all information of event generation and history
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+C light-cone x fractions and c.m. momenta of soft cut string ends
+ INTEGER MAXSOF
+ PARAMETER ( MAXSOF = 50 )
+ INTEGER IJSI2,IJSI1
+ DOUBLE PRECISION XS1,XS2,PSOFT1,PSOFT2
+ COMMON /POSOFT/ XS1(MAXSOF),XS2(MAXSOF),
+ & PSOFT1(4,MAXSOF),PSOFT2(4,MAXSOF),
+ & IJSI1(MAXSOF),IJSI2(MAXSOF)
+C hard scattering data
+ INTEGER MSCAHD
+ PARAMETER ( MSCAHD = 50 )
+ INTEGER LSCAHD,LSC1HD,LSIDX,
+ & NINHD,N0INHD,NIVAL,N0IVAL,NOUTHD,NBRAHD,NPROHD
+ DOUBLE PRECISION PPH,PTHD,ETAHD,Q2SCA,PDFVA,XHD,VHD,X0HD
+ COMMON /POHSLT/ LSCAHD,LSC1HD,LSIDX(MSCAHD),
+ & PPH(8*MSCAHD,2),PTHD(MSCAHD),ETAHD(MSCAHD,2),
+ & Q2SCA(MSCAHD,2),PDFVA(MSCAHD,2),
+ & XHD(MSCAHD,2),VHD(MSCAHD),X0HD(MSCAHD,2),
+ & NINHD(MSCAHD,2),N0INHD(MSCAHD,2),
+ & NIVAL(MSCAHD,2),N0IVAL(MSCAHD,2),
+ & NOUTHD(MSCAHD,2),NBRAHD(MSCAHD,2),NPROHD(MSCAHD)
+
+ WRITE(LO,'(//,1X,A,/,1X,A)')
+ & 'PHO_ABORT: program execution stopped',
+ & '===================================='
+ WRITE(LO,'(/,1X,A,/,1X,A)') 'listing of available data follows:'
+C
+ CALL PHO_SETMDL(0,0,-2)
+ CALL PHO_PREVNT(-1)
+ CALL PHO_ACTPDF(0,-2)
+C print selected parton flavours
+ WRITE(LO,'(1X,A,I4)') 'selected soft flavours: ',KSOFT
+ DO 700 I=1,KSOFT
+ WRITE(LO,'(10X,2I5)') IJSI1(I),IJSI2(I)
+ 700 CONTINUE
+ WRITE(LO,'(1X,A,I4)') 'selected hard flavours: ',KHARD
+ DO 750 K=1,KHARD
+ I = LSIDX(K)
+ WRITE(LO,'(10X,A,I5)') 'process:',NPROHD(I)
+ WRITE(LO,'(10X,A,2I4,7X,A,2I4)') 'initial:',NINHD(I,1),
+ & NINHD(I,2),'final:',NOUTHD(I,1),NOUTHD(I,2)
+ 750 CONTINUE
+C print selected parton momenta
+ WRITE(LO,'(1X,A,I4)') 'selected soft momenta: ',KSOFT
+ DO 300 I=1,KSOFT
+ WRITE(LO,'(10X,A,4E12.3)') 'par.1',(PSOFT1(II,I),II=1,4)
+ WRITE(LO,'(10X,A,4E12.3)') 'par.2',(PSOFT2(II,I),II=1,4)
+ 300 CONTINUE
+ WRITE(LO,'(1X,A,I4)') 'selected hard momenta: ',KHARD
+ DO 350 K=1,KHARD
+ I = LSIDX(K)
+ I3 = 8*I-4
+ WRITE(LO,'(10X,A,4E12.3)') 'par.1',(PPH(I3+II,1),II=1,4)
+ WRITE(LO,'(10X,A,4E12.3)') 'par.2',(PPH(I3+II,2),II=1,4)
+ 350 CONTINUE
+
+C print /POEVT1/
+ CALL PHO_PREVNT(0)
+
+C fragmentation process
+ IF(ISTR.GT.0) THEN
+C print /POSTRG/
+ CALL PHO_PRSTRG
+
+ IF(ISWMDL(6).GE.0) CALL PYLIST(1)
+
+ ENDIF
+
+C last message
+ WRITE(LO,'(////5X,A,///5X,A,///)')
+ & 'PHO_ABORT: execution terminated due to fatal error',
+ &'*** Simulating division by zero to get traceback information ***'
+ ISTR = 100/IPAMDL(100)
+
+ END
+
+CDECK ID>, PHO_TRACE
+ SUBROUTINE PHO_TRACE(ISTART,ISWI,LEVEL)
+C**********************************************************************
+C
+C trace program subroutines according to level,
+C original output levels will be saved
+C
+C input: ISTART first event to trace
+C ISWI number of events to trace
+C 0 loop call, use old values
+C -1 restore original output levels
+C 1 store level and wait for event
+C LEVEL desired output level
+C 0 standard output
+C 3 internal rejections
+C 5 cross sections, slopes etc.
+C 10 parameter of subroutines and
+C results
+C 20 huge amount of debug output
+C 30 maximal possible output
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+ DIMENSION IMEM(NMAXD)
+
+C protect ISWI
+ ISW = ISWI
+ 10 CONTINUE
+ IF(ISW.EQ.0) THEN
+ IF(KEVENT.LT.ION) THEN
+ RETURN
+ ELSE IF(KEVENT.EQ.ION) THEN
+ WRITE(LO,'(///,1X,A,///)')
+ & 'PHO_TRACE: trace mode switched on'
+ DO 100 I=1,NMAXD
+ IMEM(I) = IDEB(I)
+ IDEB(I) = MAX(ILEVEL,IMEM(I))
+ 100 CONTINUE
+ ELSE IF(KEVENT.EQ.IOFF) THEN
+ WRITE(LO,'(//,1X,A,///)')
+ & 'PHO_TRACE: trace mode switched off'
+ DO 200 I=1,NMAXD
+ IDEB(I) = IMEM(I)
+ 200 CONTINUE
+ ENDIF
+ ELSE IF(ISW.EQ.-1) THEN
+ DO 300 I=1,NMAXD
+ IDEB(I) = IMEM(I)
+ 300 CONTINUE
+ ELSE
+C save information
+ ION = ISTART
+ IOFF = ISTART+ISW
+ ILEVEL = LEVEL
+ ENDIF
+C check coincidence
+ IF(ISW.GT.0) THEN
+ ISW=0
+ ILEVEL = LEVEL
+ GOTO 10
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_PRSTRG
+ SUBROUTINE PHO_PRSTRG
+C**********************************************************************
+C
+C print information of /POSTRG/
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C color string configurations including collapsed strings and hadrons
+ INTEGER MSTR
+ PARAMETER (MSTR=500)
+ INTEGER NPOS,NCODE,IPAR1,IPAR2,IPAR3,IPAR4,NNCH,IBHAD
+ COMMON /POSTRG/ NPOS(4,MSTR),NCODE(MSTR),
+ & IPAR1(MSTR),IPAR2(MSTR),IPAR3(MSTR),IPAR4(MSTR),
+ & NNCH(MSTR),IBHAD(MSTR),ISTR
+
+ WRITE(LO,'(/,1X,A,I5)')
+ & 'PHO_PRSTRG: number of strings soft+hard:',ISTR
+ WRITE(LO,'(/,1X,A/,1X,A)') 'COMMON /POSTRG/:',
+ & ' NOBAM ID1 ID2 ID3 ID4 NPO1/2/3/4 MASS'
+ WRITE(LO,'(1X,A)')
+ & ' ======================================================='
+ DO 800 I=1,ISTR
+ WRITE(LO,'(1X,9I5,1P,E11.3)')
+ & NCODE(I),IPAR1(I),IPAR2(I),IPAR3(I),IPAR4(I),NPOS(1,I),
+ & NPOS(2,I),NPOS(3,I),NPOS(4,I),PHEP(5,NPOS(1,I))
+ 800 CONTINUE
+
+ END
+
+CDECK ID>, PHO_PREVNT
+ SUBROUTINE PHO_PREVNT(NPART)
+C**********************************************************************
+C
+C print all information of event generation and history
+C
+C input: NPART -1 minimal output: process IDs
+C 0 additional output of /POEVT1/
+C 1 additional output of /POSTRG/
+C 2 additional output of /HEPEVT/
+C (call LULIST(1))
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C general process information
+ INTEGER IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON
+ COMMON /POPRCS/ IPROCE,IDNODF,IDIFR1,IDIFR2,IDDPOM,IPRON(15,4)
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+
+ CHARACTER*15 PHO_PNAME
+
+ IF(NPART.GE.0) WRITE(LO,'(/)')
+ WRITE(LO,'(1X,A,1PE10.3)')
+ & 'PHO_PREVNT: c.m. energy',ECM
+ CALL PHO_SETPAR(-2,IH,NPART,0.D0)
+ WRITE(LO,'(6X,A,A,/1X,I10,10I6)')
+ & 'EV-CALL,ISPOM,IHPOM,ISREG,IHDIR,KSTRG,',
+ & 'KHTRG,KSLOO,KHLOO,KSDPO,KHDPO',
+ & KEVENT,KSPOM,KHPOM,KSREG,KHDIR,KSTRG,KHTRG,KSLOO,KHLOO,KSDPO,
+ & KHDPO
+ WRITE(LO,'(6X,A,I4,4I3)')
+ & 'PROCESS-ID,IDNODF,IDIFF1,IDIFF2,IDDPOM',IPROCE,IDNODF,IDIFR1,
+ & IDIFR2,IDDPOM
+
+ IF(IPAMDL(13).GT.0) THEN
+ WRITE(LO,'(1X,A)') 'PHO_PREVNT: DPMJET special settings:'
+ WRITE(LO,'(5X,A,1P,4E11.3)') 'ECMN,PCMN,SECM,SPCM',
+ & ECMN,PCMN,SECM,SPCM
+ WRITE(LO,'(5X,A,1P,2E11.3)') 'XPSUB,XTSUB',XPSUB,XTSUB
+ ENDIF
+
+ IF(NPART.LT.0) RETURN
+
+ IF(NPART.GE.1) CALL PHO_PRSTRG
+
+ WRITE(LO,'(/1X,A)') 'COMMON /POEVT1/:'
+ ICHAS = 0
+ IBARFS = 0
+ IMULC = 0
+ IMUL = 0
+ WRITE(LO,'(/1X,A,A,/,1X,A,A)')
+ & ' NO IST NAME MO-1 MO-2 DA-1 DA-2 CHA BAR',
+ & ' IH1 IH2 CO1 CO2',
+ & '========================================================',
+ & '===================='
+ DO 20 IH=1,NHEP
+ CH = DBLE(IPHO_CHR3(IH,2)/3.D0)
+ BA = DBLE(IPHO_BAR3(IH,2)/3.D0)
+ WRITE(LO,'(1X,2I5,1X,A15,4I5,2F5.1,2I5,2I5)')
+ & IH,ISTHEP(IH),PHO_PNAME(IH,2),
+ & JMOHEP(1,IH),JMOHEP(2,IH),JDAHEP(1,IH),JDAHEP(2,IH),
+ & CH,BA,IPHIST(1,IH),IPHIST(2,IH),
+ & ICOLOR(1,IH),ICOLOR(2,IH)
+ IF(ABS(ISTHEP(IH)).EQ.1) THEN
+ ICHAS = ICHAS + IPHO_CHR3(IH,2)
+ IBARFS = IBARFS + IPHO_BAR3(IH,2)
+ ENDIF
+ IF(ABS(ISTHEP(IH)).EQ.1) THEN
+ IF(IPHO_CHR3(IH,2).NE.0) IMULC = IMULC+1
+ IMUL = IMUL+1
+ ENDIF
+ 20 CONTINUE
+ WRITE(LO,'(1X,2(3X,A,I3),2X,2(5X,A,I5))') 'sum charge:',ICHAS/3,
+ & 'baryon:',IBARFS/3,'chr.mult:',IMULC,'tot.mult:',IMUL
+
+ WRITE(LO,7)
+ PXS = 0.D0
+ PYS = 0.D0
+ PZS = 0.D0
+ P0S = 0.D0
+ DO 30 IN=1,NHEP
+ IF( (ABS(PHEP(3,IN)).LT.99999.D0)
+ & .AND.(PHEP(4,IN).LT.99999.D0)) THEN
+ WRITE(LO,8) IN,ISTHEP(IN),PHO_PNAME(IN,2),
+ & (PHEP(J,IN),J=1,5),SQRT(PHEP(1,IN)**2+PHEP(2,IN)**2)
+ ELSE
+ WRITE(LO,11) IN,ISTHEP(IN),PHO_PNAME(IN,2),
+ & (PHEP(J,IN),J=1,5),SQRT(PHEP(1,IN)**2+PHEP(2,IN)**2)
+ ENDIF
+ IF(ABS(ISTHEP(IN)).EQ.1) THEN
+ PXS = PXS + PHEP(1,IN)
+ PYS = PYS + PHEP(2,IN)
+ PZS = PZS + PHEP(3,IN)
+ P0S = P0S + PHEP(4,IN)
+ ENDIF
+ 30 CONTINUE
+ AMFS = P0S**2-PXS**2-PYS**2-PZS**2
+ AMFS = SIGN(SQRT(ABS(AMFS)),AMFS)
+ IF(P0S.LT.99999.D0) THEN
+ WRITE(LO,10) ' sum: ',PXS,PYS,PZS,P0S,AMFS
+ ELSE
+ WRITE(LO,12) ' sum: ',PXS,PYS,PZS,P0S,AMFS
+ ENDIF
+ WRITE(LO,'(//)')
+
+ 5 FORMAT(2X,8H NUMBER ,8H STATUS ,8H IDENT. ,
+ & 8H 1.MOTH.,8H 2.MOTH.,8H 1.DAUG.,8H L.DAUG.,
+ & 8H CHARGE ,8H BARYON ,/)
+ 6 FORMAT(7I8,2F8.3)
+ 7 FORMAT(/,2X,' NR STAT NAME X-MOMENTA',
+ & ' Y-MOMENTA Z-MOMENTA ENERGY MASS PT',/,
+ & 2X,'-------------------------------',
+ & '--------------------------------------------')
+ 8 FORMAT(I5,I4,1X,A15,2F8.3,3F10.3,F8.3)
+ 9 FORMAT(I10,14X,5F10.3)
+ 10 FORMAT(10X,A14,1X,2F8.3,3F10.3)
+ 11 FORMAT(I5,I4,1X,A15,2F8.2,2F10.1,F10.3,F8.3)
+ 12 FORMAT(10X,A14,1X,2F8.2,2F10.1,F10.3)
+
+ IF(NPART.GE.2) CALL PYLIST(1)
+
+ END
+
+CDECK ID>, PHO_LTRHEP
+ SUBROUTINE PHO_LTRHEP(I1,I2,COD,SID,COF,SIF,GAM,BGX,BGY,BGZ)
+C*******************************************************************
+C
+C Lorentz transformation of entries I1 to I2 in /POEVT1/
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER ( DIFF = 0.001D0,
+ & EPS = 1.D-5 )
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+
+C standard particle data interface
+ INTEGER NMXHEP
+
+ PARAMETER (NMXHEP=4000)
+
+ INTEGER NEVHEP,NHEP,ISTHEP,IDHEP,JMOHEP,JDAHEP
+ DOUBLE PRECISION PHEP,VHEP
+ COMMON /POEVT1/ NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ & JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),
+ & VHEP(4,NMXHEP)
+C extension to standard particle data interface (PHOJET specific)
+ INTEGER IMPART,IPHIST,ICOLOR
+ COMMON /POEVT2/ IMPART(NMXHEP),IPHIST(2,NMXHEP),ICOLOR(2,NMXHEP)
+
+ DO 100 I=I1,MIN(I2,NHEP)
+ IF((ABS(ISTHEP(I)).LE.10).OR.(ISTHEP(I).EQ.21)) THEN
+ CALL PHO_TRANS(PHEP(1,I),PHEP(2,I),PHEP(3,I),COD,SID,COF,SIF,
+ & XX,YY,ZZ)
+ EE=PHEP(4,I)
+ CALL PHO_ALTRA(GAM,BGX,BGY,BGZ,XX,YY,ZZ,EE,PTOT,
+ & PHEP(1,I),PHEP(2,I),PHEP(3,I),PHEP(4,I))
+ ELSE IF(ISTHEP(I).EQ.20) THEN
+ EE=SQRT(PHEP(1,I)**2+PHEP(2,I)**2+PHEP(3,I)**2)
+ CALL PHO_TRANS(PHEP(1,I),PHEP(2,I),PHEP(3,I),COD,SID,COF,SIF,
+ & XX,YY,ZZ)
+ CALL PHO_ALTRA(GAM,BGX,BGY,BGZ,XX,YY,ZZ,EE,PTOT,
+ & PHEP(1,I),PHEP(2,I),PHEP(3,I),PMASS)
+ ENDIF
+ 100 CONTINUE
+
+C debug precision
+ IF(IDEB(70).LT.1) RETURN
+ DO 200 I=I1,MIN(NHEP,I2)
+ IF(ABS(ISTHEP(I)).GT.10) GOTO 190
+ PMASS = PHEP(4,I)**2-PHEP(1,I)**2-PHEP(2,I)**2-PHEP(3,I)**2
+ PMASS = SIGN(SQRT(ABS(PMASS)),PMASS)
+ IF((ABS(PMASS-PHEP(5,I))/MAX(PHEP(5,I),1.D0)).GT.DIFF) THEN
+ WRITE(LO,'(1X,A,I5,2E13.4)')
+ & 'PHO_LTRHEP: inconsistent masses:',I,PMASS,PHEP(5,I)
+ ENDIF
+ 190 CONTINUE
+ 200 CONTINUE
+
+ END
+
+CDECK ID>, PHO_PECMS
+ SUBROUTINE PHO_PECMS(ID,PMASS1,PMASS2,ECM,PP,EE)
+C*******************************************************************
+C
+C calculation of cms momentum and energy of massive particle
+C (ID= 1 using PMASS1, 2 using PMASS2)
+C
+C output: PP cms momentum
+C EE energy in CMS of particle ID
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ S=ECM**2
+ PM1 = SIGN(PMASS1**2,PMASS1)
+ PM2 = SIGN(PMASS2**2,PMASS2)
+ PP = SQRT(S**2 - 2.D0*PM1*S - 2.D0*PM2*S - 2.D0*PM1*PM2
+ & + PM1**2 + PM2**2)/(2.D0*ECM)
+
+ IF(ID.EQ.1) THEN
+ EE = SQRT( PM1 + PP**2 )
+ ELSE IF(ID.EQ.2) THEN
+ EE = SQRT( PM2 + PP**2 )
+ ELSE
+ WRITE(LO,'(/1X,A,I3,/)')
+ & 'PHO_PECMS:ERROR: invalid ID number:',ID
+ EE = PP
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_FRAINI
+ SUBROUTINE PHO_FRAINI(IDEFAU)
+C***********************************************************************
+C
+C initialization of fragmentation packages
+C (currently LUND JETSET)
+C
+C initialization for JETSET call in DTUNUC 1.04 (J.R. 6/93)
+C changed to work in PHOJET (R.E. 1/94)
+C
+C input: IDEFAU 0 no hadronization at all
+C 1 do not touch any parameter of JETSET
+C 2 default parameters kept, decay length 10mm to
+C define stable particles
+C 3 load tuned parameters for JETSET 7.3
+C neg. value: prevent strange/charm hadrons from decaying
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ PARAMETER (EPS=1.D-10)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ INTEGER N,NPAD,K
+ DOUBLE PRECISION P,V
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+
+ INTEGER MSTU,MSTJ
+ DOUBLE PRECISION PARU,PARJ
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+
+ INTEGER KCHG
+ DOUBLE PRECISION PMAS,PARF,VCKM
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+
+ INTEGER MDCY,MDME,KFDP
+ DOUBLE PRECISION BRAT
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+
+ INTEGER PYCOMP
+
+ IDEFAB = ABS(IDEFAU)
+
+ IF(IDEFAB.EQ.0) THEN
+ WRITE(LO,'(/1X,A)') 'PHO_FRAINI: hadronization switched off'
+ RETURN
+ ENDIF
+C defaults
+ DEF2 = PARJ(2)
+ IDEF12 = MSTJ(12)
+ DEF19 = PARJ(19)
+ DEF41 = PARJ(41)
+ DEF42 = PARJ(42)
+ DEF21 = PARJ(21)
+
+C declare stable particles
+ IF(IDEFAB.GE.2) MSTJ(22) = 2
+
+C load optimized parameters
+ IF(IDEFAB.GE.3) THEN
+
+* PARJ(19)=0.19
+C Lund a-parameter
+C (default=0.3)
+ PARJ(41)=0.3
+C Lund b-parameter
+C (default=1.0)
+ PARJ(42)=1.0
+C Lund sigma parameter in pt distribution
+C (default=0.36)
+ PARJ(21)=0.36
+ ENDIF
+C
+C prevent particles decaying
+ IF(IDEFAU.LT.0) THEN
+C K0S
+
+ KC=PYCOMP(310)
+
+ MDCY(KC,1)=0
+C PI0
+
+ KC=PYCOMP(111)
+
+ MDCY(KC,1)=0
+C LAMBDA
+
+ KC=PYCOMP(3122)
+
+ MDCY(KC,1)=0
+C ALAMBDA
+
+ KC=PYCOMP(-3122)
+
+ MDCY(KC,1)=0
+C SIG+
+
+ KC=PYCOMP(3222)
+
+ MDCY(KC,1)=0
+C ASIG+
+
+ KC=PYCOMP(-3222)
+
+ MDCY(KC,1)=0
+C SIG-
+
+ KC=PYCOMP(3112)
+
+ MDCY(KC,1)=0
+C ASIG-
+
+ KC=PYCOMP(-3112)
+
+ MDCY(KC,1)=0
+C SIG0
+
+ KC=PYCOMP(3212)
+
+ MDCY(KC,1)=0
+C ASIG0
+
+ KC=PYCOMP(-3212)
+
+ MDCY(KC,1)=0
+C TET0
+
+ KC=PYCOMP(3322)
+
+ MDCY(KC,1)=0
+C ATET0
+
+ KC=PYCOMP(-3322)
+
+ MDCY(KC,1)=0
+C TET-
+
+ KC=PYCOMP(3312)
+
+ MDCY(KC,1)=0
+C ATET-
+
+ KC=PYCOMP(-3312)
+
+ MDCY(KC,1)=0
+C OMEGA-
+
+ KC=PYCOMP(3334)
+
+ MDCY(KC,1)=0
+C AOMEGA-
+
+ KC=PYCOMP(-3334)
+
+ MDCY(KC,1)=0
+C D+
+
+ KC=PYCOMP(411)
+
+ MDCY(KC,1)=0
+C D-
+
+ KC=PYCOMP(-411)
+
+ MDCY(KC,1)=0
+C D0
+
+ KC=PYCOMP(421)
+
+ MDCY(KC,1)=0
+C A-D0
+
+ KC=PYCOMP(-421)
+
+ MDCY(KC,1)=0
+C DS+
+
+ KC=PYCOMP(431)
+
+ MDCY(KC,1)=0
+C A-DS+
+
+ KC=PYCOMP(-431)
+
+ MDCY(KC,1)=0
+C ETAC
+
+ KC=PYCOMP(441)
+
+ MDCY(KC,1)=0
+C LAMBDAC+
+
+ KC=PYCOMP(4122)
+
+ MDCY(KC,1)=0
+C A-LAMBDAC+
+
+ KC=PYCOMP(-4122)
+
+ MDCY(KC,1)=0
+C SIGMAC++
+
+ KC=PYCOMP(4222)
+
+ MDCY(KC,1)=0
+C SIGMAC+
+
+ KC=PYCOMP(4212)
+
+ MDCY(KC,1)=0
+C SIGMAC0
+
+ KC=PYCOMP(4112)
+
+ MDCY(KC,1)=0
+C A-SIGMAC++
+
+ KC=PYCOMP(-4222)
+
+ MDCY(KC,1)=0
+C A-SIGMAC+
+
+ KC=PYCOMP(-4212)
+
+ MDCY(KC,1)=0
+C A-SIGMAC0
+
+ KC=PYCOMP(-4112)
+
+ MDCY(KC,1)=0
+C KSIC+
+
+ KC=PYCOMP(4232)
+
+ MDCY(KC,1)=0
+C KSIC0
+
+ KC=PYCOMP(4132)
+
+ MDCY(KC,1)=0
+C A-KSIC+
+
+ KC=PYCOMP(-4232)
+
+ MDCY(KC,1)=0
+C A-KSIC0
+
+ KC=PYCOMP(-4132)
+
+ MDCY(KC,1)=0
+ ENDIF
+
+C *** Commented by Chiara
+C WRITE(LO,2355) IDEFAU,DEF2,PARJ(2),IDEF12,MSTJ(12),
+C & DEF19,PARJ(19),DEF41,PARJ(41),DEF42,PARJ(42),DEF21,PARJ(21)
+C 2355 FORMAT(/' PHO_FRAINI: fragmentation initialization ISWMDL(6)',I3/,
+C & ' --------------------------------------------------',/,
+C & 5X,'parameter description default / current',/,
+C & 5X,'PARJ( 2) strangeness suppression : ',2F7.3,/,
+C & 5X,'MSTJ(12) popcorn : ',2I7,/,
+C & 5X,'PARJ(19) popcorn : ',2F7.3,/,
+C & 5X,'PARJ(41) Lund a : ',2F7.3,/,
+C & 5X,'PARJ(42) Lund b : ',2F7.3,/,
+C & 5X,'PARJ(21) sigma in pt distribution: ',2F7.3,/)
+
+ END
+
+CDECK ID>, PHO_SETPAR
+ SUBROUTINE pho_setpar(Iside,IDpdg,IDcpc,Pvir)
+C**********************************************************************
+C
+C assign a particle to either side 1 or 2
+C (including special treatment for remnants)
+C
+C input: Iside 1,2 side selected for the particle
+C -2 output of current settings
+C IDpdg PDG number
+C IDcpc CPC number
+C 0 CPC determination in subroutine
+C -1 special particle remnant, IDPDG
+C is the particle number the remnant
+C corresponds to (see /POHDFL/)
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ integer Iside,IDpdg,IDcpc
+ double precision Pvir
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C event debugging information
+ INTEGER NMAXD
+ PARAMETER (NMAXD=100)
+ INTEGER IDEB,KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,KHTRG,KSLOO,
+ & KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+ COMMON /PODEBG/ IDEB(NMAXD),KSPOM,KHPOM,KSREG,KHDIR,KACCEP,KSTRG,
+ & KHTRG,KSLOO,KHLOO,KSDPO,KHDPO,KEVENT,KSOFT,KHARD
+C global event kinematics and particle IDs
+ INTEGER IFPAP,IFPAB
+ DOUBLE PRECISION ECM,PCM,PMASS,PVIRT
+ COMMON /POGCMS/ ECM,PCM,PMASS(2),PVIRT(2),IFPAP(2),IFPAB(2)
+C nucleon-nucleus / nucleus-nucleus interface to DPMJET
+ INTEGER IDEQP,IDEQB,IHFLD,IHFLS
+ DOUBLE PRECISION ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB
+ COMMON /POHDFL/ ECMN,PCMN,SECM,SPCM,XPSUB,XTSUB,
+ & IDEQP(2),IDEQB(2),IHFLD(2,2),IHFLS(2)
+C particle ID translation table
+ integer ID_pdg_list,ID_list,ID_pdg_max
+ character*12 name_list
+ COMMON /POPAR1/ ID_pdg_list(300),ID_list(577),name_list(300),
+ & ID_pdg_max
+C general particle data
+ double precision xm_list,tau_list,gam_list,
+ & xm_psm2_list,xm_vem2_list,xm_b82_list,xm_b102_list,
+ & xm_bb82_list,xm_bb102_list
+ integer ich3_list,iba3_list,iq_list,
+ & id_psm_list,id_vem_list,id_b8_list,id_b10_list
+ COMMON /POPAR2/ xm_list(300),tau_list(300),gam_list(300),
+ & xm_psm2_list(6,6),xm_vem2_list(6,6),
+ & xm_b82_list(6,6,6),xm_b102_list(6,6,6),
+ & xm_bb82_list(6,6,6,6),xm_bb102_list(6,6,6,6),
+ & ich3_list(300),iba3_list(300),iq_list(3,300),
+ & id_psm_list(6,6),id_vem_list(6,6),
+ & id_b8_list(6,6,6),id_b10_list(6,6,6)
+C particle decay data
+ double precision wg_sec_list
+ integer idec_list,isec_list
+ COMMON /POPAR3/ wg_sec_list(500),idec_list(3,300),
+ & isec_list(3,500)
+
+C external functions
+ integer ipho_pdg2id,ipho_chr3,ipho_bar3
+ double precision pho_pmass
+
+C local variables
+ integer i,IDcpcN,IDcpcR,IDpdgN,IDpdgR,IDB,IFL1,IFL2,IFL3
+
+ IF((Iside.EQ.1).OR.(Iside.EQ.2)) THEN
+ IDcpcN = IDcpc
+C remnant?
+ IF(IDcpc.EQ.-1) THEN
+ IF(Iside.EQ.1) THEN
+ IDpdgR = 81
+ ELSE
+ IDpdgR = 82
+ ENDIF
+ IDcpcR = ipho_pdg2id(IDpdgR)
+ IDEQB(Iside) = ipho_pdg2id(IDpdg)
+ IDEQP(Iside) = IDpdg
+C copy particle properties
+ IDB = abs(IDEQB(Iside))
+ xm_list(IDcpcR) = xm_list(IDB)
+ tau_list(IDcpcR) = tau_list(IDB)
+ gam_list(IDcpcR) = gam_list(IDB)
+ IF(IHFLS(Iside).EQ.1) THEN
+ ich3_list(IDcpcR) = ipho_chr3(IDEQB(Iside),0)
+ iba3_list(IDcpcR) = ipho_bar3(IDEQB(Iside),0)
+ ELSE
+ ich3_list(IDcpcR) = 0
+ iba3_list(IDcpcR) = 0
+ ENDIF
+C quark content
+ IFL1 = IHFLD(Iside,1)
+ IFL2 = IHFLD(Iside,2)
+ IFL3 = 0
+ IF(IHFLS(Iside).EQ.1) THEN
+ IF(ABS(IHFLD(Iside,1)).GT.1000) THEN
+ IFL1 = IHFLD(Iside,1)/1000
+ IFL2 = MOD(IHFLD(Iside,1)/100,10)
+ IFL3 = IHFLD(Iside,2)
+ ELSE IF(ABS(IHFLD(Iside,2)).GT.1000) THEN
+ IFL1 = IHFLD(Iside,1)
+ IFL2 = IHFLD(Iside,2)/1000
+ IFL3 = MOD(IHFLD(Iside,2)/100,10)
+ ENDIF
+ ENDIF
+ iq_list(1,IDcpcR) = IFL1
+ iq_list(2,IDcpcR) = IFL2
+ iq_list(3,IDcpcR) = IFL3
+
+ IDcpcN = IDcpcR
+ IDPDGN = IDPDGR
+
+ IF(IDEB(87).GE.5) THEN
+ WRITE(LO,'(1X,A,I2,/5X,A,I7,4I6)')
+ & 'pho_setpar: remnant assignment side',Iside,
+ & 'IDPDG,IFL1,2,3,IVAL',IDPDGN,IFL1,IFL2,IFL3,IHFLS(Iside)
+ ENDIF
+ ELSE IF(IDcpc.EQ.0) THEN
+C ordinary hadron
+ IHFLS(Iside) = 1
+ IHFLD(Iside,1) = 0
+ IHFLD(Iside,2) = 0
+ IDcpcN = ipho_pdg2id(IDpdg)
+ IDpdgN = IDpdg
+ ENDIF
+
+C initialize /POGCMS/
+ IFPAP(Iside) = IDpdgN
+ IFPAB(Iside) = IDcpcN
+ PMASS(Iside) = pho_pmass(IDcpcN,0)
+ IF(IFPAP(Iside).EQ.22) THEN
+ PVIRT(Iside) = ABS(PVIR)
+ ELSE
+ PVIRT(Iside) = 0.D0
+ ENDIF
+
+ ELSE IF(Iside.EQ.-2) THEN
+C output of current settings
+ DO 100 I=1,2
+ WRITE(LO,'(1X,A,I2,1X,A,I7,I4,1X,1P2E10.3)')
+ & 'PHO_SETPAR: side',
+ & I,'IDPDG,IDcpc,PMASS,PVIRT',IFPAP(I),IFPAB(I),PMASS(I),
+ & PVIRT(I)
+ IF((IFPAP(I).EQ.81).OR.(IFPAP(I).EQ.82)) THEN
+ WRITE(LO,'(5X,A,I7,I4,I2,3I5)')
+ & 'remnant:IDPDG,IDcpc,IVAL,IFLA1,2',IDEQP(I),IDEQB(I),
+ & IHFLS(I),IHFLD(I,1),IHFLD(I,2)
+ ENDIF
+ 100 CONTINUE
+ ELSE
+ WRITE(LO,'(/1X,A,I8)')
+ & 'pho_setpar: invalid argument (Iside)',Iside
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_XLAM
+ DOUBLE PRECISION FUNCTION PHO_XLAM(X,Y,Z)
+C**********************************************************************
+C
+C auxiliary function for two/three particle decay mode
+C (standard LAMBDA**(1/2) function)
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+C
+ YZ=Y-Z
+ XLAM=X*X-2.D0*X*(Y+Z)+YZ*YZ
+ IF(XLAM.LT.0.D0) XLAM=-XLAM
+ PHO_XLAM=SQRT(XLAM)
+ END
+
+CDECK ID>, PHO_BESSJ0
+ DOUBLE PRECISION FUNCTION PHO_BESSJ0(DX)
+C**********************************************************************
+C
+C CERN (KERN) LIB function C312
+C
+C modified by R. Engel (03/02/93)
+C
+C**********************************************************************
+ DOUBLE PRECISION DX
+ DOUBLE PRECISION X,Y,V,H,ALFA,EIGHT
+ DOUBLE PRECISION PI1,PI2,C1(0:14),C2(0:9),C3(0:10),B0,B1,B2,P,Q,R
+ SAVE
+
+ DATA EIGHT /8.0D0/
+ DATA PI1 /0.79788 45608 0287D0/, PI2 /0.78539 81633 9745D0/
+
+ DATA C1( 0) /+0.15772 79714 7489D0/
+ DATA C1( 1) /-0.00872 34423 5285D0/
+ DATA C1( 2) /+0.26517 86132 0334D0/
+ DATA C1( 3) /-0.37009 49938 7265D0/
+ DATA C1( 4) /+0.15806 71023 3210D0/
+ DATA C1( 5) /-0.03489 37694 1141D0/
+ DATA C1( 6) /+0.00481 91800 6947D0/
+ DATA C1( 7) /-0.00046 06261 6621D0/
+ DATA C1( 8) /+0.00003 24603 2882D0/
+ DATA C1( 9) /-0.00000 17619 4691D0/
+ DATA C1(10) /+0.00000 00760 8164D0/
+ DATA C1(11) /-0.00000 00026 7925D0/
+ DATA C1(12) /+0.00000 00000 7849D0/
+ DATA C1(13) /-0.00000 00000 0194D0/
+ DATA C1(14) /+0.00000 00000 0004D0/
+
+ DATA C2( 0) /+0.99946 03493 4752D0/
+ DATA C2( 1) /-0.00053 65220 4681D0/
+ DATA C2( 2) /+0.00000 30751 8479D0/
+ DATA C2( 3) /-0.00000 00517 0595D0/
+ DATA C2( 4) /+0.00000 00016 3065D0/
+ DATA C2( 5) /-0.00000 00000 7864D0/
+ DATA C2( 6) /+0.00000 00000 0517D0/
+ DATA C2( 7) /-0.00000 00000 0043D0/
+ DATA C2( 8) /+0.00000 00000 0004D0/
+ DATA C2( 9) /-0.00000 00000 0001D0/
+
+ DATA C3( 0) /-0.01555 58546 05337D0/
+ DATA C3( 1) /+0.00006 83851 99426D0/
+ DATA C3( 2) /-0.00000 07414 49841D0/
+ DATA C3( 3) /+0.00000 00179 72457D0/
+ DATA C3( 4) /-0.00000 00007 27192D0/
+ DATA C3( 5) /+0.00000 00000 42201D0/
+ DATA C3( 6) /-0.00000 00000 03207D0/
+ DATA C3( 7) /+0.00000 00000 00301D0/
+ DATA C3( 8) /-0.00000 00000 00033D0/
+ DATA C3( 9) /+0.00000 00000 00004D0/
+ DATA C3(10) /-0.00000 00000 00001D0/
+
+ X=DX
+ V=ABS(X)
+ IF(V .LT. EIGHT) THEN
+ Y=V/EIGHT
+ H=2.D0*Y**2-1.D0
+ ALFA=-2.D0*H
+ B1=0.D0
+ B2=0.D0
+ DO 1 I = 14,0,-1
+ B0=C1(I)-ALFA*B1-B2
+ B2=B1
+ 1 B1=B0
+ B1=B0-H*B2
+ ELSE
+ R=1.D0/V
+ Y=EIGHT*R
+ H=2.D0*Y**2-1.D0
+ ALFA=-2.D0*H
+ B1=0.D0
+ B2=0.D0
+ DO 2 I = 9,0,-1
+ B0=C2(I)-ALFA*B1-B2
+ B2=B1
+ 2 B1=B0
+ P=B0-H*B2
+ B1=0.D0
+ B2=0.D0
+ DO 3 I = 10,0,-1
+ B0=C3(I)-ALFA*B1-B2
+ B2=B1
+ 3 B1=B0
+ Q=Y*(B0-H*B2)
+ B0=V-PI2
+ B1=PI1*SQRT(R)*(P*COS(B0)-Q*SIN(B0))
+ ENDIF
+ PHO_BESSJ0=B1
+ RETURN
+ END
+
+CDECK ID>, PHO_BESSI0
+ DOUBLE PRECISION FUNCTION PHO_BESSI0(X)
+C**********************************************************************
+C
+C Bessel Function I0
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ AX = ABS(X)
+ IF (AX .LT. 3.75D0) THEN
+ Y = (X/3.75D0)**2
+ PHO_BESSI0 =
+ & 1.0D0+Y*(3.5156229D0+Y*(3.0899424D0+Y*(1.2067492D0
+ & +Y*(0.2659732D0+Y*(0.360768D-1+Y*0.45813D-2)))))
+ ELSE
+ Y = 3.75D0/AX
+ PHO_BESSI0 =
+ & (EXP(AX)/SQRT(AX))*(0.39894228D0+Y*(0.1328592D-1
+ & +Y*(0.225319D-2+Y*(-0.157565D-2+Y*(0.916281D-2
+ & +Y*(-0.2057706D-1+Y*(0.2635537D-1+Y*(-0.1647633D-1
+ & +Y*0.392377D-2))))))))
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_BESSI1
+ DOUBLE PRECISION FUNCTION PHO_BESSI1(X)
+C**********************************************************************
+C
+C Bessel Function I1
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ AX = ABS(X)
+
+ IF (AX .LT. 3.75D0) THEN
+ Y = (X/3.75D0)**2
+ BESLI1 =
+ & AX*(0.5D0+Y*(0.87890594D0+Y*(0.51498869D0+Y*(0.15084934D0
+ & +Y*(0.2658733D-1+Y*(0.301532D-2+Y*0.32411D-3))))))
+ ELSE
+ Y = 3.75D0/AX
+ BESLI1 =
+ & 0.2282967D-1+Y*(-0.2895312D-1+Y*(0.1787654D-1
+ & -Y*0.420059D-2))
+ BESLI1 =
+ & 0.39894228D0+Y*(-0.3988024D-1+Y*(-0.362018D-2
+ & +Y*(0.163801D-2+Y*(-0.1031555D-1+Y*BESLI1))))
+ BESLI1 = BESLI1 * EXP(AX)/SQRT(AX)
+ ENDIF
+ IF (X .LT. 0.D0) BESLI1 = -BESLI1
+
+ PHO_BESSI1 = BESLI1
+
+ END
+
+CDECK ID>, PHO_BESSK0
+ DOUBLE PRECISION FUNCTION PHO_BESSK0(X)
+C**********************************************************************
+C
+C Modified Bessel Function K0
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ IF (X .LT. 2.D0) THEN
+ Y = X**2/4.D0
+ PHO_BESSK0 =
+ & (-LOG(X/2.D0)*PHO_BESSI0(X))+(-.57721566D0+Y*(0.42278420D0
+ & +Y*(0.23069756D0+Y*(0.3488590D-1+Y*(0.262698D-2
+ & +Y*(0.10750D-3+Y*0.740D-5))))))
+ ELSE
+ Y = 2.D0/X
+ PHO_BESSK0 =
+ & (EXP(-X)/SQRT(X))*(1.25331414D0+Y*(-0.7832358D-1
+ & +Y*(0.2189568D-1+Y*(-0.1062446D-1+Y*(0.587872D-2
+ & +Y*(-0.251540D-2+Y*0.53208D-3))))))
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_BESSK1
+ DOUBLE PRECISION FUNCTION PHO_BESSK1(X)
+C**********************************************************************
+C
+C Modified Bessel Function K1
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ IF (X .LT. 2.D0) THEN
+ Y = X**2/4.D0
+ PHO_BESSK1 =
+ & (LOG(X/2.D0)*PHO_BESSI1(X))+(1.D0/X)*(1.D0+Y*(0.15443144D0
+ & +Y*(-0.67278579D0+Y*(-0.18156897D0+Y*(-0.1919402D-1
+ & +Y*(-0.110404D-2+Y*(-0.4686D-4)))))))
+ ELSE
+ Y=2.D0/X
+ PHO_BESSK1 =
+ & (EXP(-X)/SQRT(X))*(1.25331414D0+Y*(0.23498619D0
+ & +Y*(-0.3655620D-1+Y*(0.1504268D-1+Y*(-0.780353D-2
+ & +Y*(0.325614D-2+Y*(-0.68245D-3)))))))
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_GAUSET
+ SUBROUTINE PHO_GAUSET(AX,BX,NX,Z,W)
+C********************************************************************
+C
+C N-point gauss zeros and weights for the interval (AX,BX) are
+C stored in arrays Z and W respectively.
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ COMMON /POGDAT/A(273),X(273),KTAB(96)
+ DIMENSION Z(NX),W(NX)
+
+ ALPHA=0.5*(BX+AX)
+ BETA=0.5*(BX-AX)
+ N=NX
+
+C the N=1 case:
+ IF(N.NE.1) GO TO 1
+ Z(1)=ALPHA
+ W(1)=BX-AX
+ RETURN
+
+C the Gauss cases:
+ 1 IF((N.LE.16).AND.(N.GT.1)) GO TO 2
+ IF(N.EQ.20) GO TO 2
+ IF(N.EQ.24) GO TO 2
+ IF(N.EQ.32) GO TO 2
+ IF(N.EQ.40) GO TO 2
+ IF(N.EQ.48) GO TO 2
+ IF(N.EQ.64) GO TO 2
+ IF(N.EQ.80) GO TO 2
+ IF(N.EQ.96) GO TO 2
+
+C the extended Gauss cases:
+ IF((N/96)*96.EQ.N) GO TO 3
+
+C jump to center of intervall intrgration:
+ GO TO 100
+
+C get Gauss point array
+
+ 2 CALL PHO_GAUDAT
+C extract real points
+ K=KTAB(N)
+ M=N/2
+ DO 21 J=1,M
+C extract values from big array
+ JTAB=K-1+J
+ WTEMP=BETA*A(JTAB)
+ DELTA=BETA*X(JTAB)
+C store them backward
+ Z(J)=ALPHA-DELTA
+ W(J)=WTEMP
+C store them forward
+ JP=N+1-J
+ Z(JP)=ALPHA+DELTA
+ W(JP)=WTEMP
+ 21 CONTINUE
+C store central point (odd N)
+ IF((N-M-M).EQ.0) RETURN
+ Z(M+1)=ALPHA
+ JMID=K+M
+ W(M+1)=BETA*A(JMID)
+ RETURN
+
+C get ND96 times chained 96 Gauss point array
+
+ 3 CALL PHO_GAUDAT
+C print out message
+C -extract real points
+ K=KTAB(96)
+ ND96=N/96
+ DO 31 J=1,48
+C extract values from big array
+ JTAB=K-1+J
+ WTEMP=BETA*A(JTAB)
+ DELTA=BETA*X(JTAB)
+ WTeMP=WTEMP/ND96
+ DeLTA=DELTA/ND96
+ DO 32 JD96=0,ND96-1
+ ZCNTR= (ALPHA-BETA)+ BETA*FLOAT(2*JD96+1)/FLOAT(ND96)
+C store them backward
+ Z(J+JD96*96)=ZCNTR-DELTA
+ W(J+JD96*96)=WTEMP
+C store them forward
+ JP=96+1-J
+ Z(JP+JD96*96)=ZCNTR+DELTA
+ W(JP+JD96*96)=WTEMP
+ 32 CONTINUE
+ 31 CONTINUE
+ RETURN
+
+C the center of intervall cases:
+ 100 CONTINUE
+C put in constant weight and equally spaced central points
+ N=IABS(N)
+ DO 111 IN=1,N
+ WIN=(BX-AX)/FLOAT(N)
+ Z(IN)=AX + (FLOAT(IN)-.5)*WIN
+ 111 W(IN)=WIN
+
+ END
+
+CDECK ID>, PHO_GAUDAT
+ SUBROUTINE PHO_GAUDAT
+C*********************************************************************
+C
+C store big arrays needed for Gauss integral, CERNLIB D106BD
+C (arrays A,X,ITAB copied on B,Y,LTAB)
+C
+C*********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+
+ SAVE
+ COMMON /POGDAT/ B(273),Y(273),LTAB(96)
+ DIMENSION A(273),X(273),KTAB(96)
+
+C-----TABLE OF INITIAL SUBSCRIPTS FOR N=2(1)16(4)96
+ DATA KTAB(2)/1/
+ DATA KTAB(3)/2/
+ DATA KTAB(4)/4/
+ DATA KTAB(5)/6/
+ DATA KTAB(6)/9/
+ DATA KTAB(7)/12/
+ DATA KTAB(8)/16/
+ DATA KTAB(9)/20/
+ DATA KTAB(10)/25/
+ DATA KTAB(11)/30/
+ DATA KTAB(12)/36/
+ DATA KTAB(13)/42/
+ DATA KTAB(14)/49/
+ DATA KTAB(15)/56/
+ DATA KTAB(16)/64/
+ DATA KTAB(20)/72/
+ DATA KTAB(24)/82/
+ DATA KTAB(28)/82/
+ DATA KTAB(32)/94/
+ DATA KTAB(36)/94/
+ DATA KTAB(40)/110/
+ DATA KTAB(44)/110/
+ DATA KTAB(48)/130/
+ DATA KTAB(52)/130/
+ DATA KTAB(56)/130/
+ DATA KTAB(60)/130/
+ DATA KTAB(64)/154/
+ DATA KTAB(68)/154/
+ DATA KTAB(72)/154/
+ DATA KTAB(76)/154/
+ DATA KTAB(80)/186/
+ DATA KTAB(84)/186/
+ DATA KTAB(88)/186/
+ DATA KTAB(92)/186/
+ DATA KTAB(96)/226/
+C
+C-----TABLE OF ABSCISSAE (X) AND WEIGHTS (A) FOR INTERVAL (-1,+1).
+C
+C-----N=2
+ DATA X(1)/0.577350269189626D0 /, A(1)/1.000000000000000D0 /
+C-----N=3
+ DATA X(2)/0.774596669241483D0 /, A(2)/0.555555555555556D0 /
+ DATA X(3)/0.000000000000000D0 /, A(3)/0.888888888888889D0 /
+C-----N=4
+ DATA X(4)/0.861136311594053D0 /, A(4)/0.347854845137454D0 /
+ DATA X(5)/0.339981043584856D0 /, A(5)/0.652145154862546D0 /
+C-----N=5
+ DATA X(6)/0.906179845938664D0 /, A(6)/0.236926885056189D0 /
+ DATA X(7)/0.538469310105683D0 /, A(7)/0.478628670499366D0 /
+ DATA X(8)/0.000000000000000D0 /, A(8)/0.568888888888889D0 /
+C-----N=6
+ DATA X(9)/0.932469514203152D0 /, A(9)/0.171324492379170D0 /
+ DATA X(10)/0.661209386466265D0 /, A(10)/0.360761573048139D0 /
+ DATA X(11)/0.238619186083197D0 /, A(11)/0.467913934572691D0 /
+C-----N=7
+ DATA X(12)/0.949107912342759D0 /, A(12)/0.129484966168870D0 /
+ DATA X(13)/0.741531185599394D0 /, A(13)/0.279705391489277D0 /
+ DATA X(14)/0.405845151377397D0 /, A(14)/0.381830050505119D0 /
+ DATA X(15)/0.000000000000000D0 /, A(15)/0.417959183673469D0 /
+C-----N=8
+ DATA X(16)/0.960289856497536D0 /, A(16)/0.101228536290376D0 /
+ DATA X(17)/0.796666477413627D0 /, A(17)/0.222381034453374D0 /
+ DATA X(18)/0.525532409916329D0 /, A(18)/0.313706645877887D0 /
+ DATA X(19)/0.183434642495650D0 /, A(19)/0.362683783378362D0 /
+C-----N=9
+ DATA X(20)/0.968160239507626D0 /, A(20)/0.081274388361574D0 /
+ DATA X(21)/0.836031107326636D0 /, A(21)/0.180648160694857D0 /
+ DATA X(22)/0.613371432700590D0 /, A(22)/0.260610696402935D0 /
+ DATA X(23)/0.324253423403809D0 /, A(23)/0.312347077040003D0 /
+ DATA X(24)/0.000000000000000D0 /, A(24)/0.330239355001260D0 /
+C-----N=10
+ DATA X(25)/0.973906528517172D0 /, A(25)/0.066671344308688D0 /
+ DATA X(26)/0.865063366688985D0 /, A(26)/0.149451349150581D0 /
+ DATA X(27)/0.679409568299024D0 /, A(27)/0.219086362515982D0 /
+ DATA X(28)/0.433395394129247D0 /, A(28)/0.269266719309996D0 /
+ DATA X(29)/0.148874338981631D0 /, A(29)/0.295524224714753D0 /
+C-----N=11
+ DATA X(30)/0.978228658146057D0 /, A(30)/0.055668567116174D0 /
+ DATA X(31)/0.887062599768095D0 /, A(31)/0.125580369464905D0 /
+ DATA X(32)/0.730152005574049D0 /, A(32)/0.186290210927734D0 /
+ DATA X(33)/0.519096129206812D0 /, A(33)/0.233193764591990D0 /
+ DATA X(34)/0.269543155952345D0 /, A(34)/0.262804544510247D0 /
+ DATA X(35)/0.000000000000000D0 /, A(35)/0.272925086777901D0 /
+C-----N=12
+ DATA X(36)/0.981560634246719D0 /, A(36)/0.047175336386512D0 /
+ DATA X(37)/0.904117256370475D0 /, A(37)/0.106939325995318D0 /
+ DATA X(38)/0.769902674194305D0 /, A(38)/0.160078328543346D0 /
+ DATA X(39)/0.587317954286617D0 /, A(39)/0.203167426723066D0 /
+ DATA X(40)/0.367831498998180D0 /, A(40)/0.233492536538355D0 /
+ DATA X(41)/0.125233408511469D0 /, A(41)/0.249147045813403D0 /
+C-----N=13
+ DATA X(42)/0.984183054718588D0 /, A(42)/0.040484004765316D0 /
+ DATA X(43)/0.917598399222978D0 /, A(43)/0.092121499837728D0 /
+ DATA X(44)/0.801578090733310D0 /, A(44)/0.138873510219787D0 /
+ DATA X(45)/0.642349339440340D0 /, A(45)/0.178145980761946D0 /
+ DATA X(46)/0.448492751036447D0 /, A(46)/0.207816047536889D0 /
+ DATA X(47)/0.230458315955135D0 /, A(47)/0.226283180262897D0 /
+ DATA X(48)/0.000000000000000D0 /, A(48)/0.232551553230874D0 /
+C-----N=14
+ DATA X(49)/0.986283808696812D0 /, A(49)/0.035119460331752D0 /
+ DATA X(50)/0.928434883663574D0 /, A(50)/0.080158087159760D0 /
+ DATA X(51)/0.827201315069765D0 /, A(51)/0.121518570687903D0 /
+ DATA X(52)/0.687292904811685D0 /, A(52)/0.157203167158194D0 /
+ DATA X(53)/0.515248636358154D0 /, A(53)/0.185538397477938D0 /
+ DATA X(54)/0.319112368927890D0 /, A(54)/0.205198463721296D0 /
+ DATA X(55)/0.108054948707344D0 /, A(55)/0.215263853463158D0 /
+C-----N=15
+ DATA X(56)/0.987992518020485D0 /, A(56)/0.030753241996117D0 /
+ DATA X(57)/0.937273392400706D0 /, A(57)/0.070366047488108D0 /
+ DATA X(58)/0.848206583410427D0 /, A(58)/0.107159220467172D0 /
+ DATA X(59)/0.724417731360170D0 /, A(59)/0.139570677926154D0 /
+ DATA X(60)/0.570972172608539D0 /, A(60)/0.166269205816994D0 /
+ DATA X(61)/0.394151347077563D0 /, A(61)/0.186161000015562D0 /
+ DATA X(62)/0.201194093997435D0 /, A(62)/0.198431485327111D0 /
+ DATA X(63)/0.000000000000000D0 /, A(63)/0.202578241925561D0 /
+C-----N=16
+ DATA X(64)/0.989400934991650D0 /, A(64)/0.027152459411754D0 /
+ DATA X(65)/0.944575023073233D0 /, A(65)/0.062253523938648D0 /
+ DATA X(66)/0.865631202387832D0 /, A(66)/0.095158511682493D0 /
+ DATA X(67)/0.755404408355003D0 /, A(67)/0.124628971255534D0 /
+ DATA X(68)/0.617876244402644D0 /, A(68)/0.149595988816577D0 /
+ DATA X(69)/0.458016777657227D0 /, A(69)/0.169156519395003D0 /
+ DATA X(70)/0.281603550779259D0 /, A(70)/0.182603415044924D0 /
+ DATA X(71)/0.095012509837637D0 /, A(71)/0.189450610455069D0 /
+C-----N=20
+ DATA X(72)/0.993128599185094D0 /, A(72)/0.017614007139152D0 /
+ DATA X(73)/0.963971927277913D0 /, A(73)/0.040601429800386D0 /
+ DATA X(74)/0.912234428251325D0 /, A(74)/0.062672048334109D0 /
+ DATA X(75)/0.839116971822218D0 /, A(75)/0.083276741576704D0 /
+ DATA X(76)/0.746331906460150D0 /, A(76)/0.101930119817240D0 /
+ DATA X(77)/0.636053680726515D0 /, A(77)/0.118194531961518D0 /
+ DATA X(78)/0.510867001950827D0 /, A(78)/0.131688638449176D0 /
+ DATA X(79)/0.373706088715419D0 /, A(79)/0.142096109318382D0 /
+ DATA X(80)/0.227785851141645D0 /, A(80)/0.149172986472603D0 /
+ DATA X(81)/0.076526521133497D0 /, A(81)/0.152753387130725D0 /
+C-----N=24
+ DATA X(82)/0.995187219997021D0 /, A(82)/0.012341229799987D0 /
+ DATA X(83)/0.974728555971309D0 /, A(83)/0.028531388628933D0 /
+ DATA X(84)/0.938274552002732D0 /, A(84)/0.044277438817419D0 /
+ DATA X(85)/0.886415527004401D0 /, A(85)/0.059298584915436D0 /
+ DATA X(86)/0.820001985973902D0 /, A(86)/0.073346481411080D0 /
+ DATA X(87)/0.740124191578554D0 /, A(87)/0.086190161531953D0 /
+ DATA X(88)/0.648093651936975D0 /, A(88)/0.097618652104113D0 /
+ DATA X(89)/0.545421471388839D0 /, A(89)/0.107444270115965D0 /
+ DATA X(90)/0.433793507626045D0 /, A(90)/0.115505668053725D0 /
+ DATA X(91)/0.315042679696163D0 /, A(91)/0.121670472927803D0 /
+ DATA X(92)/0.191118867473616D0 /, A(92)/0.125837456346828D0 /
+ DATA X(93)/0.064056892862605D0 /, A(93)/0.127938195346752D0 /
+C-----N=32
+ DATA X(94)/0.997263861849481D0 /, A(94)/0.007018610009470D0 /
+ DATA X(95)/0.985611511545268D0 /, A(95)/0.016274394730905D0 /
+ DATA X(96)/0.964762255587506D0 /, A(96)/0.025392065309262D0 /
+ DATA X(97)/0.934906075937739D0 /, A(97)/0.034273862913021D0 /
+ DATA X(98)/0.896321155766052D0 /, A(98)/0.042835898022226D0 /
+ DATA X(99)/0.849367613732569D0 /, A(99)/0.050998059262376D0 /
+ DATA X(100)/0.794483795967942D0/, A(100)/0.058684093478535D0/
+ DATA X(101)/0.732182118740289D0/, A(101)/0.065822222776361D0/
+ DATA X(102)/0.663044266930215D0/, A(102)/0.072345794108848D0/
+ DATA X(103)/0.587715757240762D0/, A(103)/0.078193895787070D0/
+ DATA X(104)/0.506899908932229D0/, A(104)/0.083311924226946D0/
+ DATA X(105)/0.421351276130635D0/, A(105)/0.087652093004403D0/
+ DATA X(106)/0.331868602282127D0/, A(106)/0.091173878695763D0/
+ DATA X(107)/0.239287362252137D0/, A(107)/0.093844399080804D0/
+ DATA X(108)/0.144471961582796D0/, A(108)/0.095638720079274D0/
+ DATA X(109)/0.048307665687738D0/, A(109)/0.096540088514727D0/
+C-----N=40
+ DATA X(110)/0.998237709710559D0/, A(110)/0.004521277098533D0/
+ DATA X(111)/0.990726238699457D0/, A(111)/0.010498284531152D0/
+ DATA X(112)/0.977259949983774D0/, A(112)/0.016421058381907D0/
+ DATA X(113)/0.957916819213791D0/, A(113)/0.022245849194166D0/
+ DATA X(114)/0.932812808278676D0/, A(114)/0.027937006980023D0/
+ DATA X(115)/0.902098806968874D0/, A(115)/0.033460195282547D0/
+ DATA X(116)/0.865959503212259D0/, A(116)/0.038782167974472D0/
+ DATA X(117)/0.824612230833311D0/, A(117)/0.043870908185673D0/
+ DATA X(118)/0.778305651426519D0/, A(118)/0.048695807635072D0/
+ DATA X(119)/0.727318255189927D0/, A(119)/0.053227846983936D0/
+ DATA X(120)/0.671956684614179D0/, A(120)/0.057439769099391D0/
+ DATA X(121)/0.612553889667980D0/, A(121)/0.061306242492928D0/
+ DATA X(122)/0.549467125095128D0/, A(122)/0.064804013456601D0/
+ DATA X(123)/0.483075801686178D0/, A(123)/0.067912045815233D0/
+ DATA X(124)/0.413779204371605D0/, A(124)/0.070611647391286D0/
+ DATA X(125)/0.341994090825758D0/, A(125)/0.072886582395804D0/
+ DATA X(126)/0.268152185007253D0/, A(126)/0.074723169057968D0/
+ DATA X(127)/0.192697580701371D0/, A(127)/0.076110361900626D0/
+ DATA X(128)/0.116084070675255D0/, A(128)/0.077039818164247D0/
+ DATA X(129)/0.038772417506050D0/, A(129)/0.077505947978424D0/
+C-----N=48
+ DATA X(130)/0.998771007252426D0/, A(130)/0.003153346052305D0/
+ DATA X(131)/0.993530172266350D0/, A(131)/0.007327553901276D0/
+ DATA X(132)/0.984124583722826D0/, A(132)/0.011477234579234D0/
+ DATA X(133)/0.970591592546247D0/, A(133)/0.015579315722943D0/
+ DATA X(134)/0.952987703160430D0/, A(134)/0.019616160457355D0/
+ DATA X(135)/0.931386690706554D0/, A(135)/0.023570760839324D0/
+ DATA X(136)/0.905879136715569D0/, A(136)/0.027426509708356D0/
+ DATA X(137)/0.876572020274247D0/, A(137)/0.031167227832798D0/
+ DATA X(138)/0.843588261624393D0/, A(138)/0.034777222564770D0/
+ DATA X(139)/0.807066204029442D0/, A(139)/0.038241351065830D0/
+ DATA X(140)/0.767159032515740D0/, A(140)/0.041545082943464D0/
+ DATA X(141)/0.724034130923814D0/, A(141)/0.044674560856694D0/
+ DATA X(142)/0.677872379632663D0/, A(142)/0.047616658492490D0/
+ DATA X(143)/0.628867396776513D0/, A(143)/0.050359035553854D0/
+ DATA X(144)/0.577224726083972D0/, A(144)/0.052890189485193D0/
+ DATA X(145)/0.523160974722233D0/, A(145)/0.055199503699984D0/
+ DATA X(146)/0.466902904750958D0/, A(146)/0.057277292100403D0/
+ DATA X(147)/0.408686481990716D0/, A(147)/0.059114839698395D0/
+ DATA X(148)/0.348755886292160D0/, A(148)/0.060704439165893D0/
+ DATA X(149)/0.287362487355455D0/, A(149)/0.062039423159892D0/
+ DATA X(150)/0.224763790394689D0/, A(150)/0.063114192286254D0/
+ DATA X(151)/0.161222356068891D0/, A(151)/0.063924238584648D0/
+ DATA X(152)/0.097004699209462D0/, A(152)/0.064466164435950D0/
+ DATA X(153)/0.032380170962869D0/, A(153)/0.064737696812683D0/
+C-----N=64
+ DATA X(154)/0.999305041735772D0/, A(154)/0.001783280721696D0/
+ DATA X(155)/0.996340116771955D0/, A(155)/0.004147033260562D0/
+ DATA X(156)/0.991013371476744D0/, A(156)/0.006504457968978D0/
+ DATA X(157)/0.983336253884625D0/, A(157)/0.008846759826363D0/
+ DATA X(158)/0.973326827789910D0/, A(158)/0.011168139460131D0/
+ DATA X(159)/0.961008799652053D0/, A(159)/0.013463047896718D0/
+ DATA X(160)/0.946411374858402D0/, A(160)/0.015726030476024D0/
+ DATA X(161)/0.929569172131939D0/, A(161)/0.017951715775697D0/
+ DATA X(162)/0.910522137078502D0/, A(162)/0.020134823153530D0/
+ DATA X(163)/0.889315445995114D0/, A(163)/0.022270173808383D0/
+ DATA X(164)/0.865999398154092D0/, A(164)/0.024352702568710D0/
+ DATA X(165)/0.840629296252580D0/, A(165)/0.026377469715054D0/
+ DATA X(166)/0.813265315122797D0/, A(166)/0.028339672614259D0/
+ DATA X(167)/0.783972358943341D0/, A(167)/0.030234657072402D0/
+ DATA X(168)/0.752819907260531D0/, A(168)/0.032057928354851D0/
+ DATA X(169)/0.719881850171610D0/, A(169)/0.033805161837141D0/
+ DATA X(170)/0.685236313054233D0/, A(170)/0.035472213256882D0/
+ DATA X(171)/0.648965471254657D0/, A(171)/0.037055128540240D0/
+ DATA X(172)/0.611155355172393D0/, A(172)/0.038550153178615D0/
+ DATA X(173)/0.571895646202634D0/, A(173)/0.039953741132720D0/
+ DATA X(174)/0.531279464019894D0/, A(174)/0.041262563242623D0/
+ DATA X(175)/0.489403145707052D0/, A(175)/0.042473515123653D0/
+ DATA X(176)/0.446366017253464D0/, A(176)/0.043583724529323D0/
+ DATA X(177)/0.402270157963991D0/, A(177)/0.044590558163756D0/
+ DATA X(178)/0.357220158337668D0/, A(178)/0.045491627927418D0/
+ DATA X(179)/0.311322871990210D0/, A(179)/0.046284796581314D0/
+ DATA X(180)/0.264687162208767D0/, A(180)/0.046968182816210D0/
+ DATA X(181)/0.217423643740007D0/, A(181)/0.047540165714830D0/
+ DATA X(182)/0.169644420423992D0/, A(182)/0.047999388596458D0/
+ DATA X(183)/0.121462819296120D0/, A(183)/0.048344762234802D0/
+ DATA X(184)/0.072993121787799D0/, A(184)/0.048575467441503D0/
+ DATA X(185)/0.024350292663424D0/, A(185)/0.048690957009139D0/
+C-----N=80
+ DATA X(186)/0.999553822651630D0/, A(186)/0.001144950003186D0/
+ DATA X(187)/0.997649864398237D0/, A(187)/0.002663533589512D0/
+ DATA X(188)/0.994227540965688D0/, A(188)/0.004180313124694D0/
+ DATA X(189)/0.989291302499755D0/, A(189)/0.005690922451403D0/
+ DATA X(190)/0.982848572738629D0/, A(190)/0.007192904768117D0/
+ DATA X(191)/0.974909140585727D0/, A(191)/0.008683945269260D0/
+ DATA X(192)/0.965485089043799D0/, A(192)/0.010161766041103D0/
+ DATA X(193)/0.954590766343634D0/, A(193)/0.011624114120797D0/
+ DATA X(194)/0.942242761309872D0/, A(194)/0.013068761592401D0/
+ DATA X(195)/0.928459877172445D0/, A(195)/0.014493508040509D0/
+ DATA X(196)/0.913263102571757D0/, A(196)/0.015896183583725D0/
+ DATA X(197)/0.896675579438770D0/, A(197)/0.017274652056269D0/
+ DATA X(198)/0.878722567678213D0/, A(198)/0.018626814208299D0/
+ DATA X(199)/0.859431406663111D0/, A(199)/0.019950610878141D0/
+ DATA X(200)/0.838831473580255D0/, A(200)/0.021244026115782D0/
+ DATA X(201)/0.816954138681463D0/, A(201)/0.022505090246332D0/
+ DATA X(202)/0.793832717504605D0/, A(202)/0.023731882865930D0/
+ DATA X(203)/0.769502420135041D0/, A(203)/0.024922535764115D0/
+ DATA X(204)/0.744000297583597D0/, A(204)/0.026075235767565D0/
+ DATA X(205)/0.717365185362099D0/, A(205)/0.027188227500486D0/
+ DATA X(206)/0.689637644342027D0/, A(206)/0.028259816057276D0/
+ DATA X(207)/0.660859898986119D0/, A(207)/0.029288369583267D0/
+ DATA X(208)/0.631075773046871D0/, A(208)/0.030272321759557D0/
+ DATA X(209)/0.600330622829751D0/, A(209)/0.031210174188114D0/
+ DATA X(210)/0.568671268122709D0/, A(210)/0.032100498673487D0/
+ DATA X(211)/0.536145920897131D0/, A(211)/0.032941939397645D0/
+ DATA X(212)/0.502804111888784D0/, A(212)/0.033733214984611D0/
+ DATA X(213)/0.468696615170544D0/, A(213)/0.034473120451753D0/
+ DATA X(214)/0.433875370831756D0/, A(214)/0.035160529044747D0/
+ DATA X(215)/0.398393405881969D0/, A(215)/0.035794393953416D0/
+ DATA X(216)/0.362304753499487D0/, A(216)/0.036373749905835D0/
+ DATA X(217)/0.325664370747701D0/, A(217)/0.036897714638276D0/
+ DATA X(218)/0.288528054884511D0/, A(218)/0.037365490238730D0/
+ DATA X(219)/0.250952358392272D0/, A(219)/0.037776364362001D0/
+ DATA X(220)/0.212994502857666D0/, A(220)/0.038129711314477D0/
+ DATA X(221)/0.174712291832646D0/, A(221)/0.038424993006959D0/
+ DATA X(222)/0.136164022809143D0/, A(222)/0.038661759774076D0/
+ DATA X(223)/0.097408398441584D0/, A(223)/0.038839651059051D0/
+ DATA X(224)/0.058504437152420D0/, A(224)/0.038958395962769D0/
+ DATA X(225)/0.019511383256793D0/, A(225)/0.039017813656306D0/
+C-----N=96
+ DATA X(226)/0.999689503883230D0/, A(226)/0.000796792065552D0/
+ DATA X(227)/0.998364375863181D0/, A(227)/0.001853960788946D0/
+ DATA X(228)/0.995981842987209D0/, A(228)/0.002910731817934D0/
+ DATA X(229)/0.992543900323762D0/, A(229)/0.003964554338444D0/
+ DATA X(230)/0.988054126329623D0/, A(230)/0.005014202742927D0/
+ DATA X(231)/0.982517263563014D0/, A(231)/0.006058545504235D0/
+ DATA X(232)/0.975939174585136D0/, A(232)/0.007096470791153D0/
+ DATA X(233)/0.968326828463264D0/, A(233)/0.008126876925698D0/
+ DATA X(234)/0.959688291448742D0/, A(234)/0.009148671230783D0/
+ DATA X(235)/0.950032717784437D0/, A(235)/0.010160770535008D0/
+ DATA X(236)/0.939370339752755D0/, A(236)/0.011162102099838D0/
+ DATA X(237)/0.927712456722308D0/, A(237)/0.012151604671088D0/
+ DATA X(238)/0.915071423120898D0/, A(238)/0.013128229566961D0/
+ DATA X(239)/0.901460635315852D0/, A(239)/0.014090941772314D0/
+ DATA X(240)/0.886894517402420D0/, A(240)/0.015038721026994D0/
+ DATA X(241)/0.871388505909296D0/, A(241)/0.015970562902562D0/
+ DATA X(242)/0.854959033434601D0/, A(242)/0.016885479864245D0/
+ DATA X(243)/0.837623511228187D0/, A(243)/0.017782502316045D0/
+ DATA X(244)/0.819400310737931D0/, A(244)/0.018660679627411D0/
+ DATA X(245)/0.800308744139140D0/, A(245)/0.019519081140145D0/
+ DATA X(246)/0.780369043867433D0/, A(246)/0.020356797154333D0/
+ DATA X(247)/0.759602341176647D0/, A(247)/0.021172939892191D0/
+ DATA X(248)/0.738030643744400D0/, A(248)/0.021966644438744D0/
+ DATA X(249)/0.715676812348967D0/, A(249)/0.022737069658329D0/
+ DATA X(250)/0.692564536642171D0/, A(250)/0.023483399085926D0/
+ DATA X(251)/0.668718310043916D0/, A(251)/0.024204841792364D0/
+ DATA X(252)/0.644163403784967D0/, A(252)/0.024900633222483D0/
+ DATA X(253)/0.618925840125468D0/, A(253)/0.025570036005349D0/
+ DATA X(254)/0.593032364777572D0/, A(254)/0.026212340735672D0/
+ DATA X(255)/0.566510418561397D0/, A(255)/0.026826866725591D0/
+ DATA X(256)/0.539388108324357D0/, A(256)/0.027412962726029D0/
+ DATA X(257)/0.511694177154667D0/, A(257)/0.027970007616848D0/
+ DATA X(258)/0.483457973920596D0/, A(258)/0.028497411065085D0/
+ DATA X(259)/0.454709422167743D0/, A(259)/0.028994614150555D0/
+ DATA X(260)/0.425478988407300D0/, A(260)/0.029461089958167D0/
+ DATA X(261)/0.395797649828908D0/, A(261)/0.029896344136328D0/
+ DATA X(262)/0.365696861472313D0/, A(262)/0.030299915420827D0/
+ DATA X(263)/0.335208522892625D0/, A(263)/0.030671376123669D0/
+ DATA X(264)/0.304364944354496D0/, A(264)/0.031010332586313D0/
+ DATA X(265)/0.273198812591049D0/, A(265)/0.031316425596861D0/
+ DATA X(266)/0.241743156163840D0/, A(266)/0.031589330770727D0/
+ DATA X(267)/0.210031310460567D0/, A(267)/0.031828758894411D0/
+ DATA X(268)/0.178096882367618D0/, A(268)/0.032034456231992D0/
+ DATA X(269)/0.145973714654896D0/, A(269)/0.032206204794030D0/
+ DATA X(270)/0.113695850110665D0/, A(270)/0.032343822568575D0/
+ DATA X(271)/0.081297495464425D0/, A(271)/0.032447163714064D0/
+ DATA X(272)/0.048812985136049D0/, A(272)/0.032516118713868D0/
+ DATA X(273)/0.016276744849602D0/, A(273)/0.032550614492363D0/
+ DATA IBD/0/
+ IF(IBD.NE.0) RETURN
+ IBD=1
+ DO 10 I=1,273
+ B(I) = A(I)
+ Y(I) = X(I)
+ 10 CONTINUE
+ DO 20 I=1,96
+ LTAB(I) = KTAB(I)
+ 20 CONTINUE
+ END
+
+CDECK ID>, PHO_DZEROX
+ DOUBLE PRECISION FUNCTION PHO_DZEROX(A0,B0,EPS,MAXF,F,MODE)
+C**********************************************************************
+C
+C Based on
+C
+C J.C.P. Bus and T.J. Dekker, Two Efficient Algorithms with
+C Guaranteed Convergence for Finding a Zero of a Function,
+C ACM Trans. Math. Software 1 (1975) 330-345.
+C
+C (MODE = 1: Algorithm M; MODE = 2: Algorithm R)
+C
+C CERNLIB C200
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ CHARACTER NAME*(*)
+ PARAMETER (NAME = 'PHO_DZEROX')
+ LOGICAL LMT
+ DIMENSION IM1(2),IM2(2),LMT(2)
+ EXTERNAL F
+
+ PARAMETER (Z1 = 1, HALF = Z1/2)
+
+ DATA IM1 /2,3/, IM2 /-1,3/
+
+ IF(MODE .NE. 1 .AND. MODE .NE. 2) THEN
+ C=-2D+10
+ WRITE(LO,100) NAME,MODE
+ GO TO 99
+ ENDIF
+ FA=F(B0)
+ FB=F(A0)
+ IF(FA*FB .GT. 0) THEN
+ C=-3D+10
+ WRITE(LO,101) NAME
+ GO TO 99
+ ENDIF
+ ATL=ABS(EPS)
+ B=A0
+ A=B0
+ LMT(2)=.TRUE.
+ MF=2
+ 1 C=A
+ FC=FA
+ 2 IE=0
+ 3 IF(ABS(FC) .LT. ABS(FB)) THEN
+ IF(C .NE. A) THEN
+ D=A
+ FD=FA
+ END IF
+ A=B
+ B=C
+ C=A
+ FA=FB
+ FB=FC
+ FC=FA
+ END IF
+ TOL=ATL*(1+ABS(C))
+ H=HALF*(C+B)
+ HB=H-B
+ IF(ABS(HB) .GT. TOL) THEN
+ IF(IE .GT. IM1(MODE)) THEN
+ W=HB
+ ELSE
+ TOL=TOL*SIGN(Z1,HB)
+ P=(B-A)*FB
+ LMT(1)=IE .LE. 1
+ IF(LMT(MODE)) THEN
+ Q=FA-FB
+ LMT(2)=.FALSE.
+ ELSE
+ FDB=(FD-FB)/(D-B)
+ FDA=(FD-FA)/(D-A)
+ P=FDA*P
+ Q=FDB*FA-FDA*FB
+ END IF
+ IF(P .LT. 0) THEN
+ P=-P
+ Q=-Q
+ END IF
+ IF(IE .EQ. IM2(MODE)) P=P+P
+ IF(P .EQ. 0 .OR. P .LE. Q*TOL) THEN
+ W=TOL
+ ELSEIF(P .LT. HB*Q) THEN
+ W=P/Q
+ ELSE
+ W=HB
+ END IF
+ END IF
+ D=A
+ A=B
+ FD=FA
+ FA=FB
+ B=B+W
+ MF=MF+1
+ IF(MF .GT. MAXF) THEN
+ WRITE(LO,102) NAME
+ GO TO 99
+ ENDIF
+ FB=F(B)
+ IF(FB .EQ. 0 .OR. SIGN(Z1,FC) .EQ. SIGN(Z1,FB)) GO TO 1
+ IF(W .EQ. HB) GO TO 2
+ IE=IE+1
+ GO TO 3
+ END IF
+ 99 CONTINUE
+ PHO_DZEROX=C
+ RETURN
+ 100 FORMAT(1X,A,': mode = ',I3,' illegal')
+ 101 FORMAT(1X,A,': F(A) and F(B) have the same sign')
+ 102 FORMAT(1X,A,': too many function calls')
+
+ END
+
+CDECK ID>, PHO_EXPINT
+ DOUBLE PRECISION FUNCTION PHO_EXPINT(RXM)
+C***********************************************************************
+C
+C function to calculate E_i(x) = -E_1(-x)
+C
+C based on CERNLIB C337 (changed by R.Engel 10/1993)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DOUBLE PRECISION P1(5),Q1(5),P2(7),Q2(7),P3(6),Q3(6),P4(8),Q4(8)
+ DOUBLE PRECISION A1(8),B1(8),A2(8),B2(8),A3(6),B3(6),XL(6)
+ DOUBLE PRECISION X,Y,AP,BP,DP,AQ,BQ,DQ,X0,V
+
+ DATA X0 /0.37250 74107 8137D0/
+ DATA XL /-24.0D0,-12.0D0,-6.0D0,0.0D0,1.0D0,4.0D0/
+ DATA P1
+ 1/+4.29312 52343 210D+0, +3.98941 53870 321D+1,
+ 2 +2.92525 18866 921D+2, +4.25696 82638 592D+2,
+ 3 -4.34981 43832 952D+2/
+ DATA Q1
+ 1/+1.00000 00000 000D+0, +1.88992 88395 003D+1,
+ 2 +1.50950 38744 251D+2, +5.68052 52718 987D+2,
+ 3 +7.53585 64359 843D+2/
+ DATA P2
+ 1/+4.30967 83946 939D-1, +6.90522 52278 444D+0,
+ 2 +2.30192 55939 133D+1, +2.43784 08879 132D+1,
+ 3 +9.04161 55694 633D+0, +9.99979 57705 159D-1,
+ 4 +4.65627 10797 510D-7/
+ DATA Q2
+ 1/+1.03400 13040 487D-1, +3.31909 21359 330D+0,
+ 2 +2.04494 78501 379D+1, +4.12807 84189 142D+1,
+ 3 +3.24264 21069 514D+1, +1.00411 64382 905D+1,
+ 4 +1.00000 00000 000D+0/
+ DATA P3
+ 1/-2.39099 64453 136D+0, -1.47982 19500 504D+2,
+ 2 -2.54376 33976 890D+2, -1.19557 61038 372D+2,
+ 3 -1.96304 08535 939D+1, -9.99999 99990 360D-1/
+ DATA Q3
+ 1/+1.77600 70940 351D+2, +5.30685 09610 812D+2,
+ 2 +4.62230 27156 148D+2, +1.56818 43364 539D+2,
+ 3 +2.16304 08494 238D+1, +1.00000 00000 000D+0/
+ DATA P4
+ 1/-8.66937 33995 107D+0, -5.49142 26552 109D+2,
+ 2 -4.21001 61535 707D+3, -2.49301 39345 865D+5,
+ 3 -1.19623 66934 925D+5, -2.21744 62775 885D+7,
+ 4 +3.89280 42131 120D+6, -3.91546 07380 910D+8/
+ DATA Q4
+ 1/+3.41718 75000 000D+1, -1.60708 92658 722D+3,
+ 2 +3.57300 29805 851D+4, -4.83547 43616 216D+5,
+ 3 +4.28559 62461 175D+6, -2.49033 37574 054D+7,
+ 4 +8.91925 76757 561D+7, -1.65254 29972 521D+8/
+ DATA A1
+ 1/-2.18086 38152 072D+0, -2.19010 23385 488D+1,
+ 2 +9.30816 38566 217D+0, +2.50762 81129 356D+1,
+ 3 -3.31842 53199 722D+1, +6.01217 99083 008D+1,
+ 4 -4.32531 13287 813D+1, +1.00443 10922 808D+0/
+ DATA B1
+ 1/+0.00000 00000 000D+0, +3.93707 70185 272D+0,
+ 2 +3.00892 64837 292D+2, -6.25041 16167 188D+0,
+ 3 +1.00367 43951 673D+3, +1.43256 73812 194D+1,
+ 4 +2.73624 11988 933D+3, +5.27468 85196 291D-1/
+ DATA A2
+ 1/-3.48334 65360 285D+0, -1.86545 45488 340D+1,
+ 2 -8.28561 99414 064D+0, -3.23467 33030 540D+1,
+ 3 +1.79601 68876 925D+1, +1.75656 31546 961D+0,
+ 4 -1.95022 32128 966D+0, +9.99994 29607 471D-1/
+ DATA B2
+ 1/+0.00000 00000 000D+0, +6.95000 65588 743D+1,
+ 2 +5.72837 19383 732D+1, +2.57776 38423 844D+1,
+ 3 +7.60761 14800 773D+2, +2.89516 72792 514D+1,
+ 4 -3.43942 26689 987D+0, +1.00083 86740 264D+0/
+ DATA A3
+ 1/-2.77809 28934 438D+1, -1.01047 90815 760D+1,
+ 2 -9.14830 08216 736D+0, -5.02233 17461 851D+0,
+ 3 -3.00000 77799 358D+0, +1.00000 00000 704D+0/
+ DATA B3
+ 1/+0.00000 00000 000D+0, +1.22399 93926 823D+2,
+ 2 +2.72761 00778 779D+0, -7.18975 18395 045D+0,
+ 3 -2.99901 18065 262D+0, +1.99999 99428 260D+0/
+C
+C conversion to E_i function
+ X = -RXM
+C
+ IF(X .LE. XL(1)) THEN
+ AP=A3(1)-X
+ DO 1 I = 2,5
+ 1 AP=A3(I)-X+B3(I)/AP
+ Y=(EXP(-X)/X)*(1.D0-(A3(6)+B3(6)/AP)/X)
+ ELSEIF(X .LE. XL(2)) THEN
+ AP=A2(1)-X
+ DO 2 I = 2,7
+ 2 AP=A2(I)-X+B2(I)/AP
+ Y=(EXP(-X)/X)*(A2(8)+B2(8)/AP)
+ ELSEIF(X .LE. XL(3)) THEN
+ AP=A1(1)-X
+ DO 3 I = 2,7
+ 3 AP=A1(I)-X+B1(I)/AP
+ Y=(EXP(-X)/X)*(A1(8)+B1(8)/AP)
+ ELSEIF(X .LT. XL(4)) THEN
+ V=-2.D0*(X/3.D0+1.D0)
+ BP=0.D0
+ DP=P4(1)
+ DO 4 I = 2,8
+ AP=BP
+ BP=DP
+ 4 DP=P4(I)-AP+V*BP
+ BQ=0.D0
+ DQ=Q4(1)
+ DO 14 I = 2,8
+ AQ=BQ
+ BQ=DQ
+ 14 DQ=Q4(I)-AQ+V*BQ
+ Y=-LOG(-X/X0)+(X+X0)*(DP-AP)/(DQ-AQ)
+ ELSEIF(X .EQ. XL(4)) THEN
+* CALL KERMTR('C337.1',LGFILE,MFLAG,RFLAG)
+* IF(MFLAG) THEN
+* IF(LGFILE .EQ. 0) THEN
+* WRITE(LO,100) ENAME
+* ELSE
+* WRITE(LGFILE,100) ENAME
+* ENDIF
+* ENDIF
+* IF(.NOT.RFLAG) CALL ABEND
+ PHO_EXPINT=0.D0
+ RETURN
+ ELSEIF(X .LT. XL(5)) THEN
+ AP=P1(1)
+ AQ=Q1(1)
+ DO 5 I = 2,5
+ AP=P1(I)+X*AP
+ 5 AQ=Q1(I)+X*AQ
+ Y=-LOG(X)+AP/AQ
+ ELSEIF(X .LE. XL(6)) THEN
+ Y=1.D0/X
+ AP=P2(1)
+ AQ=Q2(1)
+ DO 6 I = 2,7
+ AP=P2(I)+Y*AP
+ 6 AQ=Q2(I)+Y*AQ
+ Y=EXP(-X)*AP/AQ
+ ELSE
+ Y=1.D0/X
+ AP=P3(1)
+ AQ=Q3(1)
+ DO 7 I = 2,6
+ AP=P3(I)+Y*AP
+ 7 AQ=Q3(I)+Y*AQ
+ Y=EXP(-X)*Y*(1.D0+Y*AP/AQ)
+ ENDIF
+C sign conversion to E_i
+ PHO_EXPINT=-Y
+
+ END
+
+CDECK ID>, PHO_RNDBET
+ DOUBLE PRECISION FUNCTION PHO_RNDBET(GAM,ETA)
+C********************************************************************
+C
+C RANDOM NUMBER GENERATION FROM BETA
+C DISTRIBUTION IN REGION 0 < X < 1.
+C F(X) = X**(GAM-1.)*(1.-X)**(ETA-1)*GAMM(ETA+GAM) / (GAMM(GAM
+C *GAMM(ETA))
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ Y = PHO_RNDGAM(1.D0,GAM)
+ Z = PHO_RNDGAM(1.D0,ETA)
+
+ PHO_RNDBET = Y/(Y+Z)
+
+ END
+
+CDECK ID>, PHO_RNDGAM
+ DOUBLE PRECISION FUNCTION PHO_RNDGAM(ALAM,ETA)
+C********************************************************************
+C
+C RANDOM NUMBER SELECTION FROM GAMMA DISTRIBUTION
+C F(X) = ALAM**ETA*X**(ETA-1)*EXP(-ALAM*X) / GAM(ETA)
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+C
+ NCOU=0
+ N = ETA
+ F = ETA - N
+ IF(F.EQ.0.D0) GOTO 20
+ 10 R = DT_RNDM(ETA)
+ NCOU=NCOU+1
+ IF (NCOU.GE.11) GOTO 20
+ IF(R.LT.F/(F+2.71828D0)) GOTO 30
+ YYY=LOG(DT_RNDM(F)+1.0D-9)/F
+ IF(ABS(YYY).GT.50.D0) GOTO 20
+ Y = EXP(YYY)
+ IF(LOG(DT_RNDM(Y)+1.0D-9).GT.-Y) GOTO 10
+ GOTO 40
+ 20 Y = 0.D0
+ GOTO 50
+ 30 Y = 1.D0-LOG(DT_RNDM(R)+1.0D-9)
+ IF(DT_RNDM(Y).GT.Y**(F-1.D0)) GOTO 10
+ 40 IF(N.EQ.0) GOTO 70
+ 50 Z = 1.D0
+ DO 60 I = 1,N
+ 60 Z = Z*DT_RNDM(Y)
+ Y = Y-LOG(Z+1.0D-9)
+ 70 PHO_RNDGAM = Y/ALAM
+ RETURN
+ END
+
+CDECK ID>, PHO_SFECFE
+ SUBROUTINE PHO_SFECFE(SFE,CFE)
+C**********************************************************************
+C
+C fast random SIN(X) COS(X) selection
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+C
+ 1 CONTINUE
+ X=DT_RNDM(XX)
+ Y=DT_RNDM(YY)
+ XX=X*X
+ YY=Y*Y
+ XY=XX+YY
+ IF(XY.GT.1.D0) GOTO 1
+ CFE=(XX-YY)/XY
+ SFE=2.D0*X*Y/XY
+ IF(DT_RNDM(XY).LT.0.5D0) THEN
+ SFE=-SFE
+ ENDIF
+ END
+
+CDECK ID>, PHO_SWAPD
+ SUBROUTINE PHO_SWAPD(D1,D2)
+C********************************************************************
+C
+C exchange of argument values (double precision)
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ D = D1
+ D1 = D2
+ D2 = D
+ END
+
+CDECK ID>, PHO_SWAPI
+ SUBROUTINE PHO_SWAPI(I1,I2)
+C********************************************************************
+C
+C exchange of argument values (integer)
+C
+C********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ K = I1
+ I1 = I2
+ I2 = K
+ END
+
+CDECK ID>, PHO_HADCSL
+ SUBROUTINE PHO_HADCSL(ID1,ID2,ECM,PLAB,IMODE,
+ & SIGTOT,SIGEL,SIGDIF,SLOPE,RHO)
+C***********************************************************************
+C
+C low-energy cross section parametrizations
+C
+C input: ID1,ID2 PDG IDs of particles (meson first)
+C ECM c.m. energy (GeV)
+C PLAB lab. momentum (second particle at rest)
+C IMODE 1 ECM given, PLAB ignored
+C 2 PLAB given, ECM ignored
+C
+C output: SIGTOT total cross section (mb)
+C SIGEL elastic cross section (mb)
+C SIGDIF diffracive cross section (sd-1,sd-2,dd), (mb)
+C SLOPE forward elastic slope (GeV**-2)
+C RHO real/imaginary part of elastic amplitude
+C
+C comments:
+C
+C - low-energy data interpolation uses PDG fits from 1992 issue
+C - high-energy extrapolation by Donnachie-Landshoff like fit made
+C by PDG 1996
+C - analytic extension of amplitude to calculate rho
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ INTEGER ID1,ID2,IMODE
+ DOUBLE PRECISION ECM,PLAB,SIGTOT,SIGEL,SIGDIF(3),SLOPE,RHO
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+C model switches and parameters
+ CHARACTER*8 MDLNA
+ INTEGER ISWMDL,IPAMDL
+ DOUBLE PRECISION PARMDL
+ COMMON /POMDLS/ MDLNA(50),ISWMDL(50),PARMDL(400),IPAMDL(400)
+
+ INTEGER K
+ DOUBLE PRECISION SIGTO1,SIGTO2,SIGEL1,SIGEL2,
+ & SS,PL,PLL,E1,XP,YP,YM,PHR,PHP,X1,X2
+
+ DOUBLE PRECISION TPDG92(7,2,6),TPDG96(9,6),BURQ83(3,6),XMA(6)
+
+ DATA TPDG92 /
+ & 3.D0, 2100.D0, 48.D0, 0.D0, 1.D0, 0.522D0, -4.51D0,
+ & 3.D0, 2100.D0, 11.9D0, 26.9D0, -1.21D0, 0.169D0, -1.85D0,
+ & 5.D0, 2100.D0, 38.4D0, 77.6D0, -0.64D0, 0.26D0, -1.2D0,
+ & 5.D0, 2100.D0, 10.2D0, 52.7D0, -1.16D0, 0.125D0, -1.28D0,
+ & 4.D0, 340.D0, 16.4D0, 19.3D0, -0.42D0, 0.19D0, 0.D0,
+ & 4.D0, 340.D0, 0.D0, 11.4D0, -0.4D0, 0.079D0, 0.D0,
+ & 2.5D0, 370.D0, 33.D0, 14.D0, -1.36D0, 0.456D0, -4.03D0,
+ & 2.5D0, 370.D0, 1.76D0, 11.2D0, -0.64D0, 0.043D0, 0.D0,
+ & 2.D0, 310.D0, 18.1D0, 0.D0, 1.D0, 0.26D0, -1.D0,
+ & 2.D0, 310.D0, 5.D0, 8.1D0, -1.8D0, 0.16D0, -1.3D0,
+ & 3.D0, 310.D0, 32.1D0, 0.D0, 1.D0, 0.66D0, -5.6D0,
+ & 3.D0, 310.D0, 7.3D0, 0.D0, 1.D0, 0.29D0, -2.4D0 /
+
+ DATA TPDG96 /
+ & 50.D0, 22.D0,0.079D0,0.25D0,0.D0,
+ & 77.15D0,-21.05D0,0.46D0,0.9D0,
+ & 50.D0, 22.D0,0.079D0,0.25D0,0.D0,
+ & 77.15D0,21.05D0,0.46D0,0.9D0,
+ & 10.D0, 13.70,0.079D0,0.25D0,0.D0,
+ & 31.85D0,-4.05D0,0.45D0,0.9D0,
+ & 10.D0, 13.70,0.079D0,0.25D0,0.D0,
+ & 31.85D0,4.05D0,0.45D0,0.9D0,
+ & 10.D0, 12.20,0.079D0,0.25D0,0.D0,
+ & 17.35D0,-9.05D0,0.50D0,0.9D0,
+ & 10.D0, 12.20,0.079D0,0.25D0,0.D0,
+ & 17.35D0,9.05D0,0.50D0,0.9D0 /
+
+ DATA BURQ83 /
+ & 11.13D0, -6.21D0, 0.30D0,
+ & 11.13D0, 7.23D0, 0.30D0,
+ & 9.11D0, -0.73D0, 0.28D0,
+ & 9.11D0, 0.65D0, 0.28D0,
+ & 8.55D0, -5.98D0, 0.28D0,
+ & 8.55D0, 1.60D0, 0.28D0 /
+
+ DATA XMA /
+ & 2*0.93956563D0, 2*0.13956995D0, 2*0.493677D0 /
+
+C find index
+ IF(ID2.NE.2212) THEN
+ GOTO 100
+ ELSE IF(ID1.EQ.2212) THEN
+ K = 1
+ ELSE IF(ID1.EQ.-2212) THEN
+ K = 2
+ ELSE IF(ID1.EQ.211) THEN
+ K = 3
+ ELSE IF(ID1.EQ.-211) THEN
+ K = 4
+ ELSE IF(ID1.EQ.321) THEN
+ K = 5
+ ELSE IF(ID1.EQ.-321) THEN
+ K = 6
+ ELSE
+ GOTO 100
+ ENDIF
+
+C calculate lab momentum
+ IF(IMODE.EQ.1) THEN
+ SS = ECM**2
+ E1 = 0.5D0/XMA(1)*(SS-XMA(1)**2-XMA(K)**2)
+ PL = SQRT(E1*E1-XMA(K)**2)
+ ELSE IF(IMODE.EQ.2) THEN
+ PL = PLAB
+ SS = XMA(1)**2+XMA(K)**2+2.D0*XMA(1)*SQRT(PL**2+XMA(K)**2)
+ ECM = SQRT(SS)
+ ELSE
+ WRITE(LO,'(1X,A,I5)') 'PHO_HADCSL:ERROR: invalid IMODE: ',IMODE
+ RETURN
+ ENDIF
+ PLL = LOG(PL)
+
+C check against lower limit
+ IF(ECM.LE.XMA(1)+XMA(K)) GOTO 200
+
+ XP = TPDG96(2,K)*SS**TPDG96(3,K)
+ YP = TPDG96(6,K)/SS**TPDG96(8,K)
+ YM = TPDG96(7,K)/SS**TPDG96(8,K)
+
+ PHR = TAN(PI/2.D0*(1.-TPDG96(8,K)))
+ PHP = TAN(PI/2.D0*(1.+TPDG96(3,K)))
+ RHO = (-YP/PHR + YM*PHR - XP/PHP)/(YP+YM+XP)
+ SLOPE = BURQ83(1,K)+BURQ83(2,K)/SQRT(PL)+BURQ83(3,K)*PLL
+
+C select energy range and interpolation method
+ IF(PL.LT.TPDG96(1,K)) THEN
+ SIGTOT = TPDG92(3,1,K)+TPDG92(4,1,K)*PL**TPDG92(5,1,K)
+ & + TPDG92(6,1,K)*PLL**2+TPDG92(7,1,K)*PLL
+ SIGEL = TPDG92(3,2,K)+TPDG92(4,2,K)*PL**TPDG92(5,2,K)
+ & + TPDG92(6,2,K)*PLL**2+TPDG92(7,2,K)*PLL
+ ELSE IF(PL.LT.TPDG92(2,1,K)) THEN
+ SIGTO1 = TPDG92(3,1,K)+TPDG92(4,1,K)*PL**TPDG92(5,1,K)
+ & + TPDG92(6,1,K)*PLL**2+TPDG92(7,1,K)*PLL
+ SIGEL1 = TPDG92(3,2,K)+TPDG92(4,2,K)*PL**TPDG92(5,2,K)
+ & + TPDG92(6,2,K)*PLL**2+TPDG92(7,2,K)*PLL
+ SIGTO2 = YP+YM+XP
+ SIGEL2 = SIGTO2**2/(16.D0*PI*SLOPE*GEV2MB)*(1.D0+RHO**2)
+ X2 = LOG(PL/TPDG96(1,K))/LOG(TPDG92(2,1,K)/TPDG96(1,K))
+ X1 = 1.D0 - X2
+ SIGTOT = SIGTO2*X2 + SIGTO1*X1
+ SIGEL = SIGEL2*X2 + SIGEL1*X1
+ ELSE
+ SIGTOT = YP+YM+XP
+ SIGEL = SIGTOT**2/(16.D0*PI*SLOPE*GEV2MB)*(1.D0+RHO**2)
+ ENDIF
+
+C no parametrization of diffraction implemented
+ SIGDIF(1) = -1.D0
+ SIGDIF(2) = -1.D0
+ SIGDIF(3) = -1.D0
+
+ RETURN
+
+ 100 CONTINUE
+ WRITE(LO,'(1X,2A,2I7)') 'PHO_HADCSL:ERROR: ',
+ & 'invalid particle combination: ',ID1,ID2
+ RETURN
+
+ 200 CONTINUE
+ WRITE(LO,'(1X,2A,1P,2E12.4)') 'PHO_HADCSL:ERROR: ',
+ & 'energy too small (Ecm,Plab): ',ECM,PLAB
+
+ END
+
+CDECK ID>, PHO_CSDIFF
+ SUBROUTINE PHO_CSDIFF(Id1,Id2,SS,Xi_min,Xi_max,
+ & sig_sd1,sig_sd2,sig_dd)
+C***********************************************************************
+C
+C cross section for diffraction dissociation according to
+C Goulianos' parametrization (Ref: PL B358 (1995) 379)
+C
+C in addition rescaling for different particles is applied using
+C internal rescaling tables (not implemented yet)
+C
+C input: Id1/2 PDG ID's of incoming particles
+C SS squared c.m. energy (GeV**2)
+C Xi_min min. diff mass (squared) = Xi_min*SS
+C Xi_max max. diff mass (squared) = Xi_max*SS
+C
+C output: sig_sd1 cross section for diss. of particle 1 (mb)
+C sig_sd2 cross section for diss. of particle 2 (mb)
+C sig_dd cross section for diss. of both particles
+C
+C***********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+ INTEGER Id1,Id2
+ DOUBLE PRECISION SS,Xi_min,Xi_max,sig_sd1,sig_sd2,sig_dd
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+C some constants
+ DOUBLE PRECISION PI,PI2,PI4,GEV2MB,Q_ch,Q_ch2,Q_ch4
+ COMMON /POCONS/ PI,PI2,PI4,GEV2MB,
+ & Q_ch(-6:6),Q_ch2(-6:6),Q_ch4(-6:6)
+
+ DOUBLE PRECISION xpos1(96),xwgh1(96),xpos2(96),xwgh2(96)
+ DOUBLE PRECISION delta,alphap,beta0,gpom0,xm_p,x_rad2,xm4_p2,
+ & fac,tt,t1,t2,tl,tu,Xnorm,xi,xil,xiu,w_xi,alpha_t,f2_t,
+ & xms_1,xms_2,CSdiff
+
+ INTEGER Ngau1,Ngau2,i1,i2
+
+C model parameters
+
+ DATA delta / 0.104d0 /
+ DATA alphap / 0.25d0 /
+ DATA beta0 / 6.56d0 /
+ DATA gpom0 / 1.21d0 /
+ DATA xm_p / 0.938d0 /
+ DATA x_rad2 / 0.71d0 /
+
+C integration precision
+
+ DATA Ngau1 / 96 /
+ DATA Ngau2 / 96 /
+
+ sig_sd1 = 0.d0
+ sig_sd2 = 0.d0
+ sig_dd = 0.d0
+
+ IF ((ABS(id1).EQ.2212).AND.(ABS(id2).EQ.2212)) THEN
+
+ xm4_p2 = 4.D0*xm_p**2
+ fac = beta0**2/(16.D0*PI)
+
+ t1 = -5.D0
+ t2 = 0.D0
+ tl = x_rad2/3.D0/(1.D0-t1/x_rad2)**3
+ tu = x_rad2/3.D0/(1.D0-t2/x_rad2)**3
+
+C flux renormalization and cross section
+
+ Xnorm = 0.d0
+
+ xil = log(1.5d0/SS)
+ xiu = log(0.1d0)
+
+ IF(xiu.LE.xil) goto 1000
+
+ CALL PHO_GAUSET(xil,xiu,Ngau1,xpos1,xwgh1)
+ CALL PHO_GAUSET(tl,tu,Ngau2,xpos2,xwgh2)
+
+ do i1=1,Ngau1
+
+ xi = exp(xpos1(i1))
+ w_xi = Xwgh1(i1)
+
+ do i2=1,Ngau2
+
+ tt = x_rad2-x_rad2*(x_rad2/(3.D0*xpos2(i2)))**(1.D0/3.D0)
+
+ alpha_t = 1.D0+delta+alphap*tt
+ f2_t = ((xm4_p2-2.8D0*tt)/(xm4_p2-tt))**2
+
+ Xnorm = Xnorm
+ & + f2_t*xi**(2.D0-2.d0*alpha_t)*Xwgh2(i2)*w_xi
+
+ enddo
+ enddo
+
+ Xnorm = Xnorm*fac
+
+ 1000 continue
+
+ XIL = LOG(Xi_min)
+ XIU = LOG(Xi_max)
+
+ T1 = -5.D0
+ T2 = 0.D0
+
+ TL = x_rad2/3.D0/(1.D0-t1/x_rad2)**3
+ TU = x_rad2/3.D0/(1.D0-t2/x_rad2)**3
+
+C single diffraction diss. cross section
+
+ CSdiff = 0.d0
+
+ IF(XIU.LE.XIL) goto 2000
+
+ CALL PHO_GAUSET(XIL,XIU,NGAU1,XPOS1,XWGH1)
+ CALL PHO_GAUSET(TL,TU,NGAU2,XPOS2,XWGH2)
+
+ do i1=1,Ngau1
+
+ xi = exp(xpos1(i1))
+ w_xi = Xwgh1(i1)*beta0*gpom0*(xi*ss)**delta
+
+ do i2=1,Ngau2
+
+ tt = x_rad2-x_rad2*(x_rad2/(3.D0*xpos2(i2)))**(1.D0/3.D0)
+
+ alpha_t = 1.D0+delta+alphap*tt
+ f2_t = ((xm4_p2-2.8D0*tt)/(xm4_p2-tt))**2
+
+ CSdiff = CSdiff
+ & + f2_t*xi**(2.D0-2.d0*alpha_t)*Xwgh2(i2)*w_xi
+
+ enddo
+ enddo
+
+ CSdiff = CSdiff*fac*GEV2MB/MAX(1.d0,Xnorm)
+
+* WRITE(LO,'(1x,1p,4e14.3)')
+* & sqrt(SS),Xnorm,2.*CSdiff*MAX(1.d0,Xnorm),2.*CSdiff
+
+ sig_sd1 = CSdiff
+ sig_sd2 = CSdiff
+
+ 2000 continue
+
+C double diffraction dissociation cross section
+
+ CSdiff = 0.d0
+
+ xil = log(1.5d0/SS)
+ xiu = log(Xi_max/1.5d0)
+
+ IF(xiu.LE.xil) goto 3000
+
+ fac = (beta0*gpom0*SS**delta
+ & /(4.d0*sqrt(PI)*MAX(1.d0,Xnorm)))**2
+ & /(2.d0*alphap)
+
+ CALL PHO_GAUSET(xil,xiu,ngau1,xpos1,xwgh1)
+
+ do i1=1,Ngau1
+
+ xi = exp(xpos1(i1))
+ xms_1 = xi*SS
+
+ xiu = log(Xi_max/(xi*SS))
+
+ if(xil.lt.xiu) then
+
+ CALL PHO_GAUSET(xil,xiu,Ngau2,xpos2,xwgh2)
+
+ do i2=1,Ngau2
+
+ xms_2 = exp(xpos2(i2))*SS
+ CSdiff = CSdiff
+ & + 1.d0/((xms_1*xms_2)**delta*log(SS/(xms_1*xms_2)))
+ & *xwgh1(i1)*xwgh2(i2)
+
+ enddo
+
+ endif
+
+ enddo
+
+ sig_dd = CSdiff*fac*GEV2MB
+
+ 3000 continue
+
+ ELSE
+
+ WRITE(LO,'(1x,2a,2I8)') 'PHO_CSDIFF: ',
+ & 'invalid particle combination (Id1/2)',Id1,Id2
+
+ ENDIF
+
+ END
+
+CDECK ID>, PHO_ALLM97
+ DOUBLE PRECISION FUNCTION PHO_ALLM97(Q2,W)
+C**********************************************************************
+C
+C ALLM97 parametrization for gamma*-p cross section
+C (for F2 see comments, code adapted from V. Shekelyan, H1)
+C
+C**********************************************************************
+
+ IMPLICIT NONE
+
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DOUBLE PRECISION Q2,W
+ DOUBLE PRECISION M02,M12,LAM2,M22
+ DOUBLE PRECISION S11,S12,S13,A11,A12,A13,B11,B12,B13
+ DOUBLE PRECISION S21,S22,S23,A21,A22,A23,B21,B22,B23
+ DOUBLE PRECISION ALFA,XMP2,W2,Q02,S,T,T0,Z,CIN,
+ & AP,BP,AR,BR,XP,XR,SR,SP,F2P,F2R
+ DATA ALFA,XMP2 /112.2D0 , .8802D0 /
+
+ W2=W*W
+ PHO_ALLM97 = 0.D0
+
+C pomeron
+ S11 = 0.28067D0
+ S12 = 0.22291D0
+ S13 = 2.1979D0
+ A11 = -0.0808D0
+ A12 = -0.44812D0
+ A13 = 1.1709D0
+ B11 = 0.60243D0
+ B12 = 1.3754D0
+ B13 = 1.8439D0
+ M12 = 49.457D0
+
+C reggeon
+ S21 = 0.80107D0
+ S22 = 0.97307D0
+ S23 = 3.4942D0
+ A21 = 0.58400D0
+ A22 = 0.37888D0
+ A23 = 2.6063D0
+ B21 = 0.10711D0
+ B22 = 1.9386D0
+ B23 = 0.49338D0
+ M22 = 0.15052D0
+C
+ M02 = 0.31985D0
+ LAM2 = 0.065270D0
+ Q02 = 0.46017D0 +LAM2
+
+C
+ S=0.
+ T=LOG((Q2+Q02)/LAM2)
+ T0=LOG(Q02/LAM2)
+ IF(Q2.GT.0.D0) S=LOG(T/T0)
+ Z=1.D0
+
+ IF(Q2.GT.0.D0) Z=(W2-XMP2)/(Q2+W2-XMP2)
+
+ IF(S.LT.0.01D0) THEN
+
+C pomeron part
+
+ XP=1.D0 /(1.D0 +(W2-XMP2)/(Q2+M12))
+
+ AP=A11
+ BP=B11**2
+
+ SP=S11
+ F2P=SP*XP**AP*Z**BP
+
+C reggeon part
+
+ XR=1.D0 /(1.D0 +(W2-XMP2)/(Q2+M22))
+
+ AR=A21
+ BR=B21**2
+
+ SR=S21
+ F2R=SR*XR**AR*Z**BR
+
+ ELSE
+
+C pomeron part
+
+ XP=1.D0 /(1.D0 +(W2-XMP2)/(Q2+M12))
+
+ AP=A11+(A11-A12)*(1.D0 /(1.D0 +S**A13)-1.D0 )
+
+ BP=B11**2+B12**2*S**B13
+
+ SP=S11+(S11-S12)*(1.D0 /(1.D0 +S**S13)-1.D0 )
+
+ F2P=SP*XP**AP*Z**BP
+
+C reggeon part
+
+ XR=1.D0 /(1.D0 +(W2-XMP2)/(Q2+M22))
+
+ AR=A21+A22*S**A23
+ BR=B21**2+B22**2*S**B23
+
+ SR=S21+S22*S**S23
+ F2R=SR*XR**AR*Z**BR
+
+ ENDIF
+
+* F2 = (F2P+F2R)*Q2/(Q2+M02)
+
+ CIN=ALFA/(Q2+M02)*(1.D0 +4.D0*XMP2*Q2/(Q2+W2-XMP2)**2)/Z
+ PHO_ALLM97 = CIN*(F2P+F2R)
+
+ END
+
+CDECK ID>, PHO_DOR98LO
+ SUBROUTINE PHO_DOR98LO (Xinp, Q2inp, UV, DV, US, DS, SS, GL)
+C***********************************************************************
+C
+C GRV98 parton densities, leading order set
+C
+C For a detailed explanation see
+C M. Glueck, E. Reya, A. Vogt :
+C hep-ph/9806404 = DO-TH 98/07 = WUE-ITP-98-019
+C (To appear in Eur. Phys. J. C)
+C
+C interpolation routine based on the original GRV98PA routine,
+C adapted to define interpolation table as DATA statements
+C
+C (R.Engel, 09/98)
+C
+C
+C INPUT: X = Bjorken-x (between 1.E-9 and 1.)
+C Q2 = scale in GeV**2 (between 0.8 and 1.E6)
+C
+C OUTPUT: UV = u - u(bar), DV = d - d(bar), US = u(bar),
+C DS = d(bar), SS = s = s(bar), GL = gluon.
+C Always x times the distribution is returned.
+C
+C******************************************************i****************
+ IMPLICIT DOUBLE PRECISION (A-H, O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ PARAMETER (NPART=6, NX=68, NQ=27, NARG=2)
+ DIMENSION XUVF(NX,NQ), XDVF(NX,NQ), XDEF(NX,NQ), XUDF(NX,NQ),
+ 1 XSF(NX,NQ), XGF(NX,NQ),
+ 2 XT(NARG), NA(NARG), ARRF(NX+NQ)
+
+ DIMENSION XUVF_L(NX*NQ), XDVF_L(NX*NQ), XDEF_L(NX*NQ),
+ & XUDF_L(NX*NQ), XSF_L(NX*NQ), XGF_L(NX*NQ)
+
+ EQUIVALENCE (XUVF(1,1),XUVF_L(1))
+ EQUIVALENCE (XDVF(1,1),XDVF_L(1))
+ EQUIVALENCE (XDEF(1,1),XDEF_L(1))
+ EQUIVALENCE (XUDF(1,1),XUDF_L(1))
+ EQUIVALENCE (XSF(1,1),XSF_L(1))
+ EQUIVALENCE (XGF(1,1),XGF_L(1))
+
+ DATA (ARRF(K),K= 1, 95) /
+ & -2.0723E+01,-2.0135E+01,-1.9560E+01,-1.8983E+01,-1.8421E+01,
+ & -1.7833E+01,-1.7258E+01,-1.6680E+01,-1.6118E+01,-1.5530E+01,
+ & -1.4955E+01,-1.4378E+01,-1.3816E+01,-1.3479E+01,-1.3122E+01,
+ & -1.2717E+01,-1.2311E+01,-1.1913E+01,-1.1513E+01,-1.1176E+01,
+ & -1.0820E+01,-1.0414E+01,-1.0009E+01,-9.6108E+00,-9.2103E+00,
+ & -8.8739E+00,-8.5172E+00,-8.1117E+00,-7.7063E+00,-7.3082E+00,
+ & -6.9078E+00,-6.5713E+00,-6.2146E+00,-5.8091E+00,-5.4037E+00,
+ & -5.0056E+00,-4.6052E+00,-4.2687E+00,-3.9120E+00,-3.5066E+00,
+ & -3.1011E+00,-2.8134E+00,-2.5257E+00,-2.3026E+00,-2.0794E+00,
+ & -1.8971E+00,-1.7430E+00,-1.6094E+00,-1.4917E+00,-1.3863E+00,
+ & -1.2910E+00,-1.2040E+00,-1.1239E+00,-1.0498E+00,-9.8083E-01,
+ & -9.1629E-01,-7.9851E-01,-6.9315E-01,-5.9784E-01,-5.1083E-01,
+ & -4.3078E-01,-3.5667E-01,-2.8768E-01,-2.2314E-01,-1.6252E-01,
+ & -1.0536E-01,-5.1293E-02, 0.0000E+00,-2.2314E-01, 0.0000E+00,
+ & 2.6236E-01, 5.8779E-01, 9.9325E-01, 1.3863E+00, 1.8563E+00,
+ & 2.3026E+00, 2.7726E+00, 3.2189E+00, 3.6889E+00, 4.1589E+00,
+ & 4.6052E+00, 5.1930E+00, 5.7683E+00, 6.3456E+00, 6.9078E+00,
+ & 7.4955E+00, 8.0709E+00, 8.6482E+00, 9.2103E+00, 9.9988E+00,
+ & 1.0736E+01, 1.1513E+01, 1.2301E+01, 1.3039E+01, 1.3816E+01/
+ DATA (XUVF_L(K),K= 1, 114) /
+ &2.3186E+00,2.2915E+00,2.2645E+00,2.2385E+00,2.2140E+00,2.1876E+00,
+ &2.1623E+00,2.1366E+00,2.1121E+00,2.0862E+00,2.0612E+00,2.0358E+00,
+ &2.0110E+00,1.9963E+00,1.9806E+00,1.9624E+00,1.9446E+00,1.9263E+00,
+ &1.9072E+00,1.8904E+00,1.8724E+00,1.8515E+00,1.8294E+00,1.8085E+00,
+ &1.7865E+00,1.7680E+00,1.7483E+00,1.7249E+00,1.6993E+00,1.6715E+00,
+ &1.6385E+00,1.6141E+00,1.5884E+00,1.5597E+00,1.5337E+00,1.5121E+00,
+ &1.4985E+00,1.4980E+00,1.5116E+00,1.5555E+00,1.6432E+00,1.7434E+00,
+ &1.8861E+00,2.0327E+00,2.2174E+00,2.4015E+00,2.5849E+00,2.7671E+00,
+ &2.9488E+00,3.1308E+00,3.3142E+00,3.4998E+00,3.6885E+00,3.8826E+00,
+ &4.0815E+00,4.2069E+00,4.5481E+00,4.8830E+00,5.2116E+00,5.5351E+00,
+ &5.8553E+00,6.1665E+00,6.4745E+00,6.7767E+00,7.0735E+00,7.3628E+00,
+ &7.6283E+00,0.0000E+00,2.3948E+00,2.3665E+00,2.3388E+00,2.3126E+00,
+ &2.2860E+00,2.2592E+00,2.2327E+00,2.2065E+00,2.1810E+00,2.1541E+00,
+ &2.1284E+00,2.1020E+00,2.0760E+00,2.0605E+00,2.0443E+00,2.0259E+00,
+ &2.0068E+00,1.9873E+00,1.9676E+00,1.9500E+00,1.9312E+00,1.9081E+00,
+ &1.8860E+00,1.8635E+00,1.8406E+00,1.8221E+00,1.8007E+00,1.7764E+00,
+ &1.7489E+00,1.7195E+00,1.6855E+00,1.6600E+00,1.6332E+00,1.6031E+00,
+ &1.5760E+00,1.5532E+00,1.5397E+00,1.5376E+00,1.5507E+00,1.5929E+00,
+ &1.6784E+00,1.7759E+00,1.9129E+00,2.0531E+00,2.2292E+00,2.4032E+00/
+ DATA (XUVF_L(K),K= 115, 228) /
+ &2.5752E+00,2.7449E+00,2.9135E+00,3.0810E+00,3.2491E+00,3.4183E+00,
+ &3.5898E+00,3.7650E+00,3.9437E+00,4.0443E+00,4.3402E+00,4.6262E+00,
+ &4.9009E+00,5.1640E+00,5.4156E+00,5.6530E+00,5.8759E+00,6.0779E+00,
+ &6.2540E+00,6.3836E+00,6.4062E+00,0.0000E+00,2.4808E+00,2.4513E+00,
+ &2.4236E+00,2.3948E+00,2.3680E+00,2.3397E+00,2.3127E+00,2.2853E+00,
+ &2.2585E+00,2.2307E+00,2.2026E+00,2.1762E+00,2.1490E+00,2.1332E+00,
+ &2.1164E+00,2.0964E+00,2.0766E+00,2.0565E+00,2.0353E+00,2.0171E+00,
+ &1.9969E+00,1.9738E+00,1.9501E+00,1.9258E+00,1.9026E+00,1.8821E+00,
+ &1.8594E+00,1.8330E+00,1.8046E+00,1.7734E+00,1.7378E+00,1.7112E+00,
+ &1.6829E+00,1.6514E+00,1.6228E+00,1.5994E+00,1.5840E+00,1.5808E+00,
+ &1.5927E+00,1.6334E+00,1.7157E+00,1.8093E+00,1.9406E+00,2.0735E+00,
+ &2.2394E+00,2.4019E+00,2.5615E+00,2.7178E+00,2.8718E+00,3.0246E+00,
+ &3.1766E+00,3.3284E+00,3.4820E+00,3.6370E+00,3.7952E+00,3.8716E+00,
+ &4.1225E+00,4.3580E+00,4.5798E+00,4.7847E+00,4.9730E+00,5.1395E+00,
+ &5.2832E+00,5.3945E+00,5.4634E+00,5.4612E+00,5.2940E+00,0.0000E+00,
+ &2.5823E+00,2.5527E+00,2.5226E+00,2.4928E+00,2.4650E+00,2.4358E+00,
+ &2.4071E+00,2.3783E+00,2.3505E+00,2.3212E+00,2.2928E+00,2.2636E+00,
+ &2.2360E+00,2.2185E+00,2.2005E+00,2.1801E+00,2.1591E+00,2.1376E+00,
+ &2.1153E+00,2.0960E+00,2.0747E+00,2.0505E+00,2.0247E+00,1.9991E+00/
+ DATA (XUVF_L(K),K= 229, 342) /
+ &1.9746E+00,1.9523E+00,1.9287E+00,1.9000E+00,1.8693E+00,1.8361E+00,
+ &1.7994E+00,1.7711E+00,1.7409E+00,1.7076E+00,1.6772E+00,1.6517E+00,
+ &1.6345E+00,1.6302E+00,1.6408E+00,1.6789E+00,1.7574E+00,1.8457E+00,
+ &1.9692E+00,2.0939E+00,2.2474E+00,2.3969E+00,2.5419E+00,2.6837E+00,
+ &2.8216E+00,2.9573E+00,3.0915E+00,3.2246E+00,3.3583E+00,3.4917E+00,
+ &3.6273E+00,3.6791E+00,3.8823E+00,4.0673E+00,4.2350E+00,4.3813E+00,
+ &4.5072E+00,4.6083E+00,4.6757E+00,4.7055E+00,4.6825E+00,4.5674E+00,
+ &4.2566E+00,0.0000E+00,2.7025E+00,2.6705E+00,2.6393E+00,2.6093E+00,
+ &2.5790E+00,2.5484E+00,2.5184E+00,2.4880E+00,2.4590E+00,2.4277E+00,
+ &2.3971E+00,2.3669E+00,2.3380E+00,2.3200E+00,2.3002E+00,2.2782E+00,
+ &2.2557E+00,2.2331E+00,2.2092E+00,2.1887E+00,2.1660E+00,2.1400E+00,
+ &2.1126E+00,2.0859E+00,2.0586E+00,2.0351E+00,2.0094E+00,1.9786E+00,
+ &1.9453E+00,1.9096E+00,1.8707E+00,1.8406E+00,1.8084E+00,1.7728E+00,
+ &1.7392E+00,1.7128E+00,1.6933E+00,1.6875E+00,1.6949E+00,1.7295E+00,
+ &1.8023E+00,1.8845E+00,1.9991E+00,2.1134E+00,2.2525E+00,2.3868E+00,
+ &2.5160E+00,2.6405E+00,2.7609E+00,2.8781E+00,2.9929E+00,3.1059E+00,
+ &3.2180E+00,3.3292E+00,3.4407E+00,3.4675E+00,3.6225E+00,3.7573E+00,
+ &3.8710E+00,3.9617E+00,4.0270E+00,4.0642E+00,4.0675E+00,4.0263E+00,
+ &3.9240E+00,3.7262E+00,3.3217E+00,0.0000E+00,2.8135E+00,2.7813E+00/
+ DATA (XUVF_L(K),K= 343, 456) /
+ &2.7489E+00,2.7166E+00,2.6850E+00,2.6527E+00,2.6212E+00,2.5898E+00,
+ &2.5592E+00,2.5267E+00,2.4943E+00,2.4636E+00,2.4320E+00,2.4129E+00,
+ &2.3929E+00,2.3695E+00,2.3453E+00,2.3211E+00,2.2959E+00,2.2740E+00,
+ &2.2496E+00,2.2221E+00,2.1931E+00,2.1653E+00,2.1356E+00,2.1112E+00,
+ &2.0830E+00,2.0503E+00,2.0147E+00,1.9766E+00,1.9361E+00,1.9037E+00,
+ &1.8696E+00,1.8318E+00,1.7966E+00,1.7677E+00,1.7459E+00,1.7378E+00,
+ &1.7430E+00,1.7738E+00,1.8407E+00,1.9169E+00,2.0223E+00,2.1273E+00,
+ &2.2537E+00,2.3742E+00,2.4892E+00,2.5990E+00,2.7043E+00,2.8056E+00,
+ &2.9038E+00,3.0000E+00,3.0936E+00,3.1864E+00,3.2782E+00,3.2867E+00,
+ &3.4021E+00,3.4971E+00,3.5691E+00,3.6188E+00,3.6422E+00,3.6335E+00,
+ &3.5908E+00,3.5036E+00,3.3552E+00,3.1085E+00,2.6634E+00,0.0000E+00,
+ &2.9406E+00,2.9062E+00,2.8726E+00,2.8385E+00,2.8060E+00,2.7720E+00,
+ &2.7392E+00,2.7058E+00,2.6734E+00,2.6399E+00,2.6057E+00,2.5722E+00,
+ &2.5390E+00,2.5194E+00,2.4975E+00,2.4728E+00,2.4471E+00,2.4216E+00,
+ &2.3945E+00,2.3712E+00,2.3458E+00,2.3152E+00,2.2856E+00,2.2545E+00,
+ &2.2237E+00,2.1966E+00,2.1672E+00,2.1312E+00,2.0926E+00,2.0521E+00,
+ &2.0093E+00,1.9748E+00,1.9384E+00,1.8975E+00,1.8601E+00,1.8275E+00,
+ &1.8036E+00,1.7924E+00,1.7948E+00,1.8206E+00,1.8808E+00,1.9499E+00,
+ &2.0450E+00,2.1390E+00,2.2512E+00,2.3570E+00,2.4564E+00,2.5501E+00/
+ DATA (XUVF_L(K),K= 457, 570) /
+ &2.6391E+00,2.7240E+00,2.8053E+00,2.8834E+00,2.9590E+00,3.0326E+00,
+ &3.1042E+00,3.0942E+00,3.1727E+00,3.2289E+00,3.2628E+00,3.2739E+00,
+ &3.2574E+00,3.2103E+00,3.1297E+00,3.0047E+00,2.8211E+00,2.5467E+00,
+ &2.0897E+00,0.0000E+00,3.0557E+00,3.0193E+00,2.9840E+00,2.9497E+00,
+ &2.9150E+00,2.8801E+00,2.8454E+00,2.8109E+00,2.7771E+00,2.7412E+00,
+ &2.7065E+00,2.6716E+00,2.6360E+00,2.6149E+00,2.5923E+00,2.5663E+00,
+ &2.5395E+00,2.5120E+00,2.4834E+00,2.4589E+00,2.4330E+00,2.4011E+00,
+ &2.3676E+00,2.3363E+00,2.3027E+00,2.2736E+00,2.2422E+00,2.2040E+00,
+ &2.1629E+00,2.1194E+00,2.0750E+00,2.0384E+00,1.9996E+00,1.9565E+00,
+ &1.9160E+00,1.8811E+00,1.8541E+00,1.8409E+00,1.8399E+00,1.8611E+00,
+ &1.9143E+00,1.9764E+00,2.0622E+00,2.1459E+00,2.2457E+00,2.3385E+00,
+ &2.4249E+00,2.5051E+00,2.5806E+00,2.6515E+00,2.7182E+00,2.7823E+00,
+ &2.8427E+00,2.9008E+00,2.9564E+00,2.9332E+00,2.9828E+00,3.0094E+00,
+ &3.0142E+00,2.9955E+00,2.9537E+00,2.8796E+00,2.7735E+00,2.6260E+00,
+ &2.4242E+00,2.1388E+00,1.6900E+00,0.0000E+00,3.1718E+00,3.1348E+00,
+ &3.0971E+00,3.0610E+00,3.0260E+00,2.9896E+00,2.9533E+00,2.9173E+00,
+ &2.8818E+00,2.8449E+00,2.8072E+00,2.7709E+00,2.7340E+00,2.7121E+00,
+ &2.6877E+00,2.6605E+00,2.6319E+00,2.6032E+00,2.5732E+00,2.5471E+00,
+ &2.5180E+00,2.4851E+00,2.4511E+00,2.4170E+00,2.3817E+00,2.3505E+00/
+ DATA (XUVF_L(K),K= 571, 684) /
+ &2.3172E+00,2.2762E+00,2.2328E+00,2.1868E+00,2.1400E+00,2.1012E+00,
+ &2.0601E+00,2.0136E+00,1.9704E+00,1.9335E+00,1.9035E+00,1.8868E+00,
+ &1.8827E+00,1.8990E+00,1.9452E+00,2.0005E+00,2.0763E+00,2.1507E+00,
+ &2.2377E+00,2.3179E+00,2.3917E+00,2.4592E+00,2.5218E+00,2.5799E+00,
+ &2.6336E+00,2.6843E+00,2.7314E+00,2.7753E+00,2.8166E+00,2.7824E+00,
+ &2.8054E+00,2.8081E+00,2.7893E+00,2.7474E+00,2.6818E+00,2.5888E+00,
+ &2.4646E+00,2.3032E+00,2.0902E+00,1.8025E+00,1.3740E+00,0.0000E+00,
+ &3.2793E+00,3.2385E+00,3.2014E+00,3.1643E+00,3.1270E+00,3.0888E+00,
+ &3.0517E+00,3.0141E+00,2.9773E+00,2.9392E+00,2.9009E+00,2.8610E+00,
+ &2.8230E+00,2.8000E+00,2.7754E+00,2.7459E+00,2.7163E+00,2.6858E+00,
+ &2.6545E+00,2.6270E+00,2.5962E+00,2.5617E+00,2.5271E+00,2.4903E+00,
+ &2.4527E+00,2.4207E+00,2.3851E+00,2.3421E+00,2.2960E+00,2.2476E+00,
+ &2.1987E+00,2.1578E+00,2.1146E+00,2.0670E+00,2.0202E+00,1.9796E+00,
+ &1.9468E+00,1.9282E+00,1.9203E+00,1.9319E+00,1.9712E+00,2.0197E+00,
+ &2.0872E+00,2.1524E+00,2.2288E+00,2.2981E+00,2.3606E+00,2.4177E+00,
+ &2.4692E+00,2.5159E+00,2.5591E+00,2.5981E+00,2.6339E+00,2.6669E+00,
+ &2.6962E+00,2.6528E+00,2.6566E+00,2.6395E+00,2.6028E+00,2.5437E+00,
+ &2.4622E+00,2.3555E+00,2.2200E+00,2.0488E+00,1.8335E+00,1.5506E+00,
+ &1.1442E+00,0.0000E+00,3.3868E+00,3.3470E+00,3.3075E+00,3.2689E+00/
+ DATA (XUVF_L(K),K= 685, 798) /
+ &3.2300E+00,3.1909E+00,3.1517E+00,3.1129E+00,3.0747E+00,3.0335E+00,
+ &2.9946E+00,2.9537E+00,2.9140E+00,2.8896E+00,2.8638E+00,2.8337E+00,
+ &2.8021E+00,2.7705E+00,2.7373E+00,2.7075E+00,2.6767E+00,2.6403E+00,
+ &2.6031E+00,2.5649E+00,2.5258E+00,2.4917E+00,2.4537E+00,2.4080E+00,
+ &2.3597E+00,2.3091E+00,2.2580E+00,2.2150E+00,2.1692E+00,2.1186E+00,
+ &2.0701E+00,2.0257E+00,1.9901E+00,1.9679E+00,1.9571E+00,1.9629E+00,
+ &1.9955E+00,2.0378E+00,2.0963E+00,2.1529E+00,2.2178E+00,2.2766E+00,
+ &2.3287E+00,2.3749E+00,2.4162E+00,2.4529E+00,2.4850E+00,2.5140E+00,
+ &2.5392E+00,2.5617E+00,2.5798E+00,2.5298E+00,2.5151E+00,2.4811E+00,
+ &2.4282E+00,2.3561E+00,2.2611E+00,2.1439E+00,2.0005E+00,1.8252E+00,
+ &1.6091E+00,1.3345E+00,9.5375E-01,0.0000E+00,3.4912E+00,3.4507E+00,
+ &3.4100E+00,3.3696E+00,3.3310E+00,3.2893E+00,3.2496E+00,3.2088E+00,
+ &3.1686E+00,3.1278E+00,3.0865E+00,3.0438E+00,3.0020E+00,2.9766E+00,
+ &2.9494E+00,2.9180E+00,2.8850E+00,2.8520E+00,2.8174E+00,2.7877E+00,
+ &2.7550E+00,2.7169E+00,2.6762E+00,2.6369E+00,2.5958E+00,2.5594E+00,
+ &2.5195E+00,2.4721E+00,2.4211E+00,2.3680E+00,2.3145E+00,2.2695E+00,
+ &2.2214E+00,2.1684E+00,2.1154E+00,2.0706E+00,2.0303E+00,2.0058E+00,
+ &1.9909E+00,1.9920E+00,2.0177E+00,2.0531E+00,2.1031E+00,2.1511E+00,
+ &2.2060E+00,2.2548E+00,2.2972E+00,2.3339E+00,2.3655E+00,2.3927E+00/
+ DATA (XUVF_L(K),K= 799, 912) /
+ &2.4159E+00,2.4357E+00,2.4520E+00,2.4644E+00,2.4735E+00,2.4171E+00,
+ &2.3878E+00,2.3397E+00,2.2743E+00,2.1907E+00,2.0861E+00,1.9611E+00,
+ &1.8128E+00,1.6351E+00,1.4227E+00,1.1584E+00,8.0371E-01,0.0000E+00,
+ &3.5892E+00,3.5473E+00,3.5055E+00,3.4637E+00,3.4230E+00,3.3809E+00,
+ &3.3396E+00,3.2976E+00,3.2571E+00,3.2126E+00,3.1696E+00,3.1272E+00,
+ &3.0840E+00,3.0569E+00,3.0286E+00,2.9959E+00,2.9619E+00,2.9273E+00,
+ &2.8910E+00,2.8598E+00,2.8266E+00,2.7863E+00,2.7448E+00,2.7029E+00,
+ &2.6598E+00,2.6219E+00,2.5804E+00,2.5305E+00,2.4773E+00,2.4214E+00,
+ &2.3662E+00,2.3191E+00,2.2698E+00,2.2126E+00,2.1577E+00,2.1092E+00,
+ &2.0674E+00,2.0393E+00,2.0210E+00,2.0173E+00,2.0367E+00,2.0654E+00,
+ &2.1076E+00,2.1485E+00,2.1942E+00,2.2338E+00,2.2678E+00,2.2959E+00,
+ &2.3193E+00,2.3386E+00,2.3539E+00,2.3660E+00,2.3738E+00,2.3789E+00,
+ &2.3799E+00,2.3197E+00,2.2776E+00,2.2186E+00,2.1426E+00,2.0495E+00,
+ &1.9397E+00,1.8097E+00,1.6583E+00,1.4814E+00,1.2736E+00,1.0200E+00,
+ &6.8880E-01,0.0000E+00,3.7157E+00,3.6699E+00,3.6275E+00,3.5842E+00,
+ &3.5420E+00,3.4972E+00,3.4542E+00,3.4107E+00,3.3678E+00,3.3234E+00,
+ &3.2774E+00,3.2332E+00,3.1870E+00,3.1600E+00,3.1297E+00,3.0952E+00,
+ &3.0595E+00,3.0231E+00,2.9850E+00,2.9534E+00,2.9160E+00,2.8740E+00,
+ &2.8312E+00,2.7872E+00,2.7408E+00,2.7014E+00,2.6568E+00,2.6045E+00/
+ DATA (XUVF_L(K),K= 913, 1026) /
+ &2.5481E+00,2.4895E+00,2.4315E+00,2.3817E+00,2.3283E+00,2.2697E+00,
+ &2.2106E+00,2.1591E+00,2.1128E+00,2.0807E+00,2.0578E+00,2.0477E+00,
+ &2.0583E+00,2.0796E+00,2.1122E+00,2.1433E+00,2.1777E+00,2.2069E+00,
+ &2.2299E+00,2.2483E+00,2.2618E+00,2.2718E+00,2.2778E+00,2.2803E+00,
+ &2.2797E+00,2.2749E+00,2.2668E+00,2.2019E+00,2.1468E+00,2.0761E+00,
+ &1.9902E+00,1.8883E+00,1.7711E+00,1.6370E+00,1.4847E+00,1.3103E+00,
+ &1.1091E+00,8.7047E-01,5.6856E-01,0.0000E+00,3.8327E+00,3.7877E+00,
+ &3.7424E+00,3.6981E+00,3.6540E+00,3.6083E+00,3.5637E+00,3.5184E+00,
+ &3.4753E+00,3.4271E+00,3.3800E+00,3.3325E+00,3.2860E+00,3.2564E+00,
+ &3.2258E+00,3.1893E+00,3.1519E+00,3.1135E+00,3.0738E+00,3.0389E+00,
+ &3.0010E+00,2.9580E+00,2.9118E+00,2.8654E+00,2.8178E+00,2.7758E+00,
+ &2.7289E+00,2.6738E+00,2.6146E+00,2.5530E+00,2.4924E+00,2.4399E+00,
+ &2.3845E+00,2.3213E+00,2.2605E+00,2.2040E+00,2.1540E+00,2.1186E+00,
+ &2.0908E+00,2.0749E+00,2.0772E+00,2.0914E+00,2.1145E+00,2.1368E+00,
+ &2.1613E+00,2.1804E+00,2.1941E+00,2.2037E+00,2.2088E+00,2.2101E+00,
+ &2.2083E+00,2.2031E+00,2.1942E+00,2.1826E+00,2.1665E+00,2.0987E+00,
+ &2.0321E+00,1.9516E+00,1.8571E+00,1.7497E+00,1.6281E+00,1.4923E+00,
+ &1.3406E+00,1.1697E+00,9.7635E-01,7.5209E-01,4.7638E-01,0.0000E+00,
+ &3.9497E+00,3.9009E+00,3.8555E+00,3.8080E+00,3.7630E+00,3.7163E+00/
+ DATA (XUVF_L(K),K= 1027, 1140) /
+ &3.6699E+00,3.6231E+00,3.5765E+00,3.5285E+00,3.4807E+00,3.4305E+00,
+ &3.3810E+00,3.3511E+00,3.3185E+00,3.2805E+00,3.2414E+00,3.2016E+00,
+ &3.1598E+00,3.1244E+00,3.0837E+00,3.0383E+00,2.9908E+00,2.9424E+00,
+ &2.8919E+00,2.8477E+00,2.7990E+00,2.7403E+00,2.6784E+00,2.6142E+00,
+ &2.5507E+00,2.4960E+00,2.4362E+00,2.3710E+00,2.3058E+00,2.2463E+00,
+ &2.1931E+00,2.1539E+00,2.1216E+00,2.0996E+00,2.0940E+00,2.1012E+00,
+ &2.1154E+00,2.1294E+00,2.1444E+00,2.1543E+00,2.1597E+00,2.1610E+00,
+ &2.1585E+00,2.1523E+00,2.1432E+00,2.1307E+00,2.1155E+00,2.0964E+00,
+ &2.0742E+00,2.0035E+00,1.9273E+00,1.8396E+00,1.7387E+00,1.6273E+00,
+ &1.5032E+00,1.3665E+00,1.2164E+00,1.0501E+00,8.6515E-01,6.5470E-01,
+ &4.0284E-01,0.0000E+00,4.0572E+00,4.0093E+00,3.9616E+00,3.9140E+00,
+ &3.8670E+00,3.8185E+00,3.7706E+00,3.7224E+00,3.6746E+00,3.6251E+00,
+ &3.5744E+00,3.5233E+00,3.4720E+00,3.4406E+00,3.4062E+00,3.3671E+00,
+ &3.3263E+00,3.2847E+00,3.2414E+00,3.2046E+00,3.1620E+00,3.1150E+00,
+ &3.0653E+00,3.0145E+00,2.9619E+00,2.9153E+00,2.8641E+00,2.8032E+00,
+ &2.7388E+00,2.6715E+00,2.6056E+00,2.5481E+00,2.4880E+00,2.4171E+00,
+ &2.3496E+00,2.2862E+00,2.2282E+00,2.1865E+00,2.1502E+00,2.1217E+00,
+ &2.1086E+00,2.1086E+00,2.1149E+00,2.1216E+00,2.1275E+00,2.1295E+00,
+ &2.1273E+00,2.1212E+00,2.1119E+00,2.0992E+00,2.0837E+00,2.0653E+00/
+ DATA (XUVF_L(K),K= 1141, 1254) /
+ &2.0442E+00,2.0194E+00,1.9912E+00,1.9193E+00,1.8359E+00,1.7412E+00,
+ &1.6366E+00,1.5214E+00,1.3956E+00,1.2594E+00,1.1115E+00,9.5033E-01,
+ &7.7356E-01,5.7585E-01,3.4506E-01,0.0000E+00,4.1710E+00,4.1201E+00,
+ &4.0712E+00,4.0213E+00,3.9730E+00,3.9228E+00,3.8734E+00,3.8233E+00,
+ &3.7726E+00,3.7217E+00,3.6699E+00,3.6160E+00,3.5640E+00,3.5311E+00,
+ &3.4960E+00,3.4549E+00,3.4121E+00,3.3689E+00,3.3237E+00,3.2848E+00,
+ &3.2425E+00,3.1917E+00,3.1399E+00,3.0866E+00,3.0319E+00,2.9838E+00,
+ &2.9306E+00,2.8668E+00,2.7992E+00,2.7291E+00,2.6605E+00,2.6007E+00,
+ &2.5375E+00,2.4631E+00,2.3919E+00,2.3261E+00,2.2643E+00,2.2183E+00,
+ &2.1772E+00,2.1426E+00,2.1222E+00,2.1155E+00,2.1135E+00,2.1130E+00,
+ &2.1102E+00,2.1039E+00,2.0941E+00,2.0815E+00,2.0652E+00,2.0466E+00,
+ &2.0251E+00,2.0014E+00,1.9746E+00,1.9450E+00,1.9116E+00,1.8381E+00,
+ &1.7481E+00,1.6484E+00,1.5404E+00,1.4225E+00,1.2963E+00,1.1611E+00,
+ &1.0161E+00,8.6047E-01,6.9193E-01,5.0691E-01,2.9581E-01,0.0000E+00,
+ &4.2754E+00,4.2238E+00,4.1737E+00,4.1233E+00,4.0740E+00,4.0219E+00,
+ &3.9713E+00,3.9196E+00,3.8675E+00,3.8160E+00,3.7618E+00,3.7060E+00,
+ &3.6510E+00,3.6173E+00,3.5808E+00,3.5380E+00,3.4941E+00,3.4493E+00,
+ &3.4027E+00,3.3623E+00,3.3163E+00,3.2647E+00,3.2114E+00,3.1563E+00,
+ &3.0989E+00,3.0489E+00,2.9929E+00,2.9263E+00,2.8563E+00,2.7837E+00/
+ DATA (XUVF_L(K),K= 1255, 1368) /
+ &2.7122E+00,2.6501E+00,2.5825E+00,2.5073E+00,2.4327E+00,2.3623E+00,
+ &2.2962E+00,2.2474E+00,2.2020E+00,2.1616E+00,2.1335E+00,2.1209E+00,
+ &2.1113E+00,2.1034E+00,2.0929E+00,2.0795E+00,2.0634E+00,2.0439E+00,
+ &2.0222E+00,1.9982E+00,1.9716E+00,1.9428E+00,1.9113E+00,1.8773E+00,
+ &1.8394E+00,1.7649E+00,1.6692E+00,1.5658E+00,1.4547E+00,1.3360E+00,
+ &1.2095E+00,1.0761E+00,9.3485E-01,7.8430E-01,6.2380E-01,4.5010E-01,
+ &2.5625E-01,0.0000E+00,4.3798E+00,4.3275E+00,4.2762E+00,4.2239E+00,
+ &4.1730E+00,4.1196E+00,4.0674E+00,4.0143E+00,3.9623E+00,3.9056E+00,
+ &3.8502E+00,3.7935E+00,3.7370E+00,3.7018E+00,3.6642E+00,3.6200E+00,
+ &3.5742E+00,3.5277E+00,3.4786E+00,3.4371E+00,3.3901E+00,3.3359E+00,
+ &3.2800E+00,3.2235E+00,3.1639E+00,3.1115E+00,3.0537E+00,2.9847E+00,
+ &2.9116E+00,2.8364E+00,2.7623E+00,2.6973E+00,2.6275E+00,2.5497E+00,
+ &2.4705E+00,2.3972E+00,2.3281E+00,2.2747E+00,2.2253E+00,2.1793E+00,
+ &2.1444E+00,2.1253E+00,2.1081E+00,2.0939E+00,2.0755E+00,2.0555E+00,
+ &2.0332E+00,2.0081E+00,1.9814E+00,1.9522E+00,1.9205E+00,1.8875E+00,
+ &1.8520E+00,1.8139E+00,1.7725E+00,1.6968E+00,1.5976E+00,1.4911E+00,
+ &1.3772E+00,1.2577E+00,1.1320E+00,1.0005E+00,8.6242E-01,7.1750E-01,
+ &5.6466E-01,4.0150E-01,2.2333E-01,0.0000E+00,4.4809E+00,4.4265E+00,
+ &4.3735E+00,4.3193E+00,4.2670E+00,4.2128E+00,4.1585E+00,4.1039E+00/
+ DATA (XUVF_L(K),K= 1369, 1482) /
+ &4.0509E+00,3.9928E+00,3.9351E+00,3.8769E+00,3.8180E+00,3.7821E+00,
+ &3.7434E+00,3.6974E+00,3.6501E+00,3.6019E+00,3.5513E+00,3.5093E+00,
+ &3.4594E+00,3.4035E+00,3.3456E+00,3.2870E+00,3.2250E+00,3.1715E+00,
+ &3.1110E+00,3.0396E+00,2.9639E+00,2.8863E+00,2.8096E+00,2.7429E+00,
+ &2.6702E+00,2.5884E+00,2.5068E+00,2.4296E+00,2.3560E+00,2.3003E+00,
+ &2.2464E+00,2.1951E+00,2.1530E+00,2.1283E+00,2.1045E+00,2.0843E+00,
+ &2.0591E+00,2.0328E+00,2.0047E+00,1.9749E+00,1.9429E+00,1.9096E+00,
+ &1.8740E+00,1.8369E+00,1.7978E+00,1.7560E+00,1.7116E+00,1.6360E+00,
+ &1.5322E+00,1.4233E+00,1.3084E+00,1.1885E+00,1.0637E+00,9.3449E-01,
+ &7.9961E-01,6.6020E-01,5.1453E-01,3.6103E-01,1.9641E-01,0.0000E+00,
+ &4.6169E+00,4.5608E+00,4.5060E+00,4.4504E+00,4.3960E+00,4.3395E+00,
+ &4.2837E+00,4.2262E+00,4.1710E+00,4.1106E+00,4.0517E+00,3.9908E+00,
+ &3.9300E+00,3.8920E+00,3.8509E+00,3.8030E+00,3.7538E+00,3.7035E+00,
+ &3.6494E+00,3.6055E+00,3.5556E+00,3.4966E+00,3.4351E+00,3.3738E+00,
+ &3.3090E+00,3.2518E+00,3.1888E+00,3.1141E+00,3.0348E+00,2.9533E+00,
+ &2.8730E+00,2.8020E+00,2.7264E+00,2.6400E+00,2.5551E+00,2.4732E+00,
+ &2.3941E+00,2.3329E+00,2.2742E+00,2.2147E+00,2.1644E+00,2.1317E+00,
+ &2.0986E+00,2.0700E+00,2.0363E+00,2.0021E+00,1.9668E+00,1.9299E+00,
+ &1.8922E+00,1.8532E+00,1.8125E+00,1.7704E+00,1.7270E+00,1.6809E+00/
+ DATA (XUVF_L(K),K= 1483, 1596) /
+ &1.6327E+00,1.5570E+00,1.4497E+00,1.3373E+00,1.2215E+00,1.1020E+00,
+ &9.7897E-01,8.5304E-01,7.2349E-01,5.9074E-01,4.5411E-01,3.1307E-01,
+ &1.6547E-01,0.0000E+00,4.7403E+00,4.6834E+00,4.6262E+00,4.5696E+00,
+ &4.5140E+00,4.4557E+00,4.3978E+00,4.3393E+00,4.2817E+00,4.2191E+00,
+ &4.1578E+00,4.0941E+00,4.0310E+00,3.9917E+00,3.9492E+00,3.8995E+00,
+ &3.8481E+00,3.7958E+00,3.7411E+00,3.6937E+00,3.6405E+00,3.5806E+00,
+ &3.5171E+00,3.4520E+00,3.3840E+00,3.3254E+00,3.2596E+00,3.1812E+00,
+ &3.0985E+00,3.0137E+00,2.9301E+00,2.8556E+00,2.7782E+00,2.6879E+00,
+ &2.5974E+00,2.5119E+00,2.4281E+00,2.3629E+00,2.2982E+00,2.2324E+00,
+ &2.1730E+00,2.1332E+00,2.0922E+00,2.0570E+00,2.0152E+00,1.9739E+00,
+ &1.9323E+00,1.8902E+00,1.8474E+00,1.8039E+00,1.7589E+00,1.7129E+00,
+ &1.6654E+00,1.6163E+00,1.5652E+00,1.4896E+00,1.3789E+00,1.2649E+00,
+ &1.1487E+00,1.0300E+00,9.0896E-01,7.8619E-01,6.6149E-01,5.3498E-01,
+ &4.0654E-01,2.7586E-01,1.4208E-01,0.0000E+00,4.8699E+00,4.8107E+00,
+ &4.7518E+00,4.6928E+00,4.6350E+00,4.5750E+00,4.5152E+00,4.4524E+00,
+ &4.3956E+00,4.3299E+00,4.2674E+00,4.2014E+00,4.1350E+00,4.0939E+00,
+ &4.0503E+00,3.9982E+00,3.9448E+00,3.8905E+00,3.8328E+00,3.7846E+00,
+ &3.7300E+00,3.6664E+00,3.5991E+00,3.5326E+00,3.4620E+00,3.3998E+00,
+ &3.3311E+00,3.2494E+00,3.1632E+00,3.0752E+00,2.9881E+00,2.9120E+00/
+ DATA (XUVF_L(K),K= 1597, 1710) /
+ &2.8299E+00,2.7339E+00,2.6398E+00,2.5493E+00,2.4611E+00,2.3911E+00,
+ &2.3215E+00,2.2482E+00,2.1812E+00,2.1342E+00,2.0854E+00,2.0427E+00,
+ &1.9932E+00,1.9453E+00,1.8978E+00,1.8504E+00,1.8030E+00,1.7545E+00,
+ &1.7059E+00,1.6565E+00,1.6056E+00,1.5535E+00,1.4989E+00,1.4245E+00,
+ &1.3108E+00,1.1959E+00,1.0798E+00,9.6219E-01,8.4358E-01,7.2422E-01,
+ &6.0451E-01,4.8425E-01,3.6380E-01,2.4286E-01,1.2189E-01,0.0000E+00,
+ &4.9964E+00,4.9356E+00,4.8755E+00,4.8147E+00,4.7550E+00,4.6935E+00,
+ &4.6315E+00,4.5697E+00,4.5062E+00,4.4406E+00,4.3752E+00,4.3061E+00,
+ &4.2380E+00,4.1962E+00,4.1500E+00,4.0963E+00,4.0405E+00,3.9832E+00,
+ &3.9245E+00,3.8728E+00,3.8172E+00,3.7504E+00,3.6811E+00,3.6108E+00,
+ &3.5381E+00,3.4734E+00,3.4018E+00,3.3164E+00,3.2269E+00,3.1352E+00,
+ &3.0446E+00,2.9657E+00,2.8794E+00,2.7800E+00,2.6821E+00,2.5867E+00,
+ &2.4930E+00,2.4184E+00,2.3433E+00,2.2634E+00,2.1877E+00,2.1342E+00,
+ &2.0772E+00,2.0279E+00,1.9713E+00,1.9172E+00,1.8642E+00,1.8120E+00,
+ &1.7600E+00,1.7076E+00,1.6553E+00,1.6027E+00,1.5491E+00,1.4938E+00,
+ &1.4374E+00,1.3637E+00,1.2481E+00,1.1325E+00,1.0166E+00,9.0047E-01,
+ &7.8428E-01,6.6889E-01,5.5381E-01,4.3953E-01,3.2652E-01,2.1461E-01,
+ &1.0498E-01,0.0000E+00,5.1134E+00,5.0511E+00,4.9886E+00,4.9273E+00,
+ &4.8660E+00,4.8016E+00,4.7382E+00,4.6744E+00,4.6106E+00,4.5420E+00/
+ DATA (XUVF_L(K),K= 1711, 1824) /
+ &4.4742E+00,4.4028E+00,4.3320E+00,4.2892E+00,4.2413E+00,4.1858E+00,
+ &4.1281E+00,4.0682E+00,4.0067E+00,3.9556E+00,3.8955E+00,3.8271E+00,
+ &3.7556E+00,3.6829E+00,3.6071E+00,3.5401E+00,3.4662E+00,3.3777E+00,
+ &3.2849E+00,3.1898E+00,3.0960E+00,3.0140E+00,2.9244E+00,2.8224E+00,
+ &2.7183E+00,2.6191E+00,2.5219E+00,2.4431E+00,2.3628E+00,2.2767E+00,
+ &2.1931E+00,2.1332E+00,2.0695E+00,2.0145E+00,1.9514E+00,1.8920E+00,
+ &1.8340E+00,1.7775E+00,1.7215E+00,1.6664E+00,1.6108E+00,1.5553E+00,
+ &1.4995E+00,1.4421E+00,1.3839E+00,1.3103E+00,1.1944E+00,1.0782E+00,
+ &9.6271E-01,8.4822E-01,7.3481E-01,6.2240E-01,5.1184E-01,4.0291E-01,
+ &2.9618E-01,1.9206E-01,9.1846E-02,0.0000E+00,5.2367E+00,5.1713E+00,
+ &5.1071E+00,5.0425E+00,4.9800E+00,4.9141E+00,4.8489E+00,4.7833E+00,
+ &4.7181E+00,4.6457E+00,4.5768E+00,4.5034E+00,4.4300E+00,4.3847E+00,
+ &4.3353E+00,4.2782E+00,4.2182E+00,4.1570E+00,4.0921E+00,4.0385E+00,
+ &3.9782E+00,3.9074E+00,3.8331E+00,3.7575E+00,3.6781E+00,3.6086E+00,
+ &3.5313E+00,3.4401E+00,3.3439E+00,3.2455E+00,3.1483E+00,3.0623E+00,
+ &2.9694E+00,2.8629E+00,2.7561E+00,2.6527E+00,2.5508E+00,2.4669E+00,
+ &2.3816E+00,2.2887E+00,2.1979E+00,2.1317E+00,2.0613E+00,2.0002E+00,
+ &1.9307E+00,1.8659E+00,1.8033E+00,1.7426E+00,1.6834E+00,1.6247E+00,
+ &1.5668E+00,1.5085E+00,1.4504E+00,1.3916E+00,1.3311E+00,1.2591E+00/
+ DATA (XUVF_L(K),K= 1825, 1836) /
+ &1.1415E+00,1.0256E+00,9.1107E-01,7.9840E-01,6.8736E-01,5.7902E-01,
+ &4.7260E-01,3.6895E-01,2.6838E-01,1.7161E-01,8.0264E-02,0.0000E+00/
+ DATA (XDVF_L(K),K= 1, 114) /
+ &1.4230E+00,1.4064E+00,1.3903E+00,1.3749E+00,1.3590E+00,1.3424E+00,
+ &1.3271E+00,1.3114E+00,1.2962E+00,1.2803E+00,1.2647E+00,1.2492E+00,
+ &1.2340E+00,1.2246E+00,1.2155E+00,1.2044E+00,1.1927E+00,1.1814E+00,
+ &1.1695E+00,1.1589E+00,1.1479E+00,1.1347E+00,1.1214E+00,1.1080E+00,
+ &1.0944E+00,1.0824E+00,1.0700E+00,1.0544E+00,1.0371E+00,1.0188E+00,
+ &9.9884E-01,9.8287E-01,9.6563E-01,9.4645E-01,9.2847E-01,9.1313E-01,
+ &9.0246E-01,8.9955E-01,9.0461E-01,9.2737E-01,9.7648E-01,1.0343E+00,
+ &1.1168E+00,1.2030E+00,1.3129E+00,1.4240E+00,1.5357E+00,1.6492E+00,
+ &1.7643E+00,1.8818E+00,2.0016E+00,2.1253E+00,2.2535E+00,2.3853E+00,
+ &2.5225E+00,2.5620E+00,2.7906E+00,3.0230E+00,3.2574E+00,3.4983E+00,
+ &3.7459E+00,4.0062E+00,4.2803E+00,4.5790E+00,4.9150E+00,5.3263E+00,
+ &5.9228E+00,0.0000E+00,1.4698E+00,1.4526E+00,1.4360E+00,1.4199E+00,
+ &1.4030E+00,1.3864E+00,1.3702E+00,1.3542E+00,1.3386E+00,1.3221E+00,
+ &1.3059E+00,1.2896E+00,1.2740E+00,1.2644E+00,1.2544E+00,1.2425E+00,
+ &1.2309E+00,1.2185E+00,1.2061E+00,1.1953E+00,1.1836E+00,1.1697E+00,
+ &1.1558E+00,1.1417E+00,1.1275E+00,1.1154E+00,1.1011E+00,1.0844E+00,
+ &1.0663E+00,1.0471E+00,1.0261E+00,1.0092E+00,9.9133E-01,9.7103E-01,
+ &9.5184E-01,9.3560E-01,9.2380E-01,9.1922E-01,9.2378E-01,9.4563E-01,
+ &9.9235E-01,1.0474E+00,1.1262E+00,1.2078E+00,1.3110E+00,1.4146E+00/
+ DATA (XDVF_L(K),K= 115, 228) /
+ &1.5192E+00,1.6241E+00,1.7298E+00,1.8375E+00,1.9471E+00,2.0592E+00,
+ &2.1741E+00,2.2925E+00,2.4144E+00,2.4425E+00,2.6407E+00,2.8375E+00,
+ &3.0361E+00,3.2345E+00,3.4343E+00,3.6388E+00,3.8488E+00,4.0682E+00,
+ &4.3043E+00,4.5737E+00,4.9280E+00,0.0000E+00,1.5226E+00,1.5047E+00,
+ &1.4874E+00,1.4702E+00,1.4530E+00,1.4363E+00,1.4193E+00,1.4023E+00,
+ &1.3860E+00,1.3690E+00,1.3520E+00,1.3351E+00,1.3190E+00,1.3083E+00,
+ &1.2983E+00,1.2858E+00,1.2733E+00,1.2606E+00,1.2476E+00,1.2362E+00,
+ &1.2237E+00,1.2092E+00,1.1943E+00,1.1795E+00,1.1645E+00,1.1509E+00,
+ &1.1365E+00,1.1185E+00,1.0994E+00,1.0784E+00,1.0566E+00,1.0388E+00,
+ &1.0195E+00,9.9801E-01,9.7765E-01,9.6019E-01,9.4712E-01,9.4158E-01,
+ &9.4524E-01,9.6454E-01,1.0088E+00,1.0604E+00,1.1346E+00,1.2112E+00,
+ &1.3076E+00,1.4038E+00,1.4995E+00,1.5957E+00,1.6918E+00,1.7888E+00,
+ &1.8877E+00,1.9877E+00,2.0896E+00,2.1940E+00,2.2999E+00,2.3168E+00,
+ &2.4844E+00,2.6497E+00,2.8098E+00,2.9678E+00,3.1219E+00,3.2743E+00,
+ &3.4260E+00,3.5742E+00,3.7237E+00,3.8717E+00,4.0300E+00,0.0000E+00,
+ &1.5849E+00,1.5662E+00,1.5482E+00,1.5298E+00,1.5130E+00,1.4944E+00,
+ &1.4769E+00,1.4593E+00,1.4423E+00,1.4243E+00,1.4066E+00,1.3894E+00,
+ &1.3720E+00,1.3607E+00,1.3499E+00,1.3366E+00,1.3237E+00,1.3101E+00,
+ &1.2963E+00,1.2840E+00,1.2709E+00,1.2553E+00,1.2396E+00,1.2232E+00/
+ DATA (XDVF_L(K),K= 229, 342) /
+ &1.2075E+00,1.1932E+00,1.1776E+00,1.1584E+00,1.1377E+00,1.1152E+00,
+ &1.0922E+00,1.0729E+00,1.0524E+00,1.0294E+00,1.0074E+00,9.8843E-01,
+ &9.7377E-01,9.6751E-01,9.6901E-01,9.8606E-01,1.0264E+00,1.0745E+00,
+ &1.1435E+00,1.2136E+00,1.3018E+00,1.3894E+00,1.4758E+00,1.5619E+00,
+ &1.6474E+00,1.7332E+00,1.8194E+00,1.9063E+00,1.9941E+00,2.0832E+00,
+ &2.1725E+00,2.1789E+00,2.3166E+00,2.4460E+00,2.5708E+00,2.6884E+00,
+ &2.7987E+00,2.9025E+00,2.9974E+00,3.0823E+00,3.1538E+00,3.2013E+00,
+ &3.2043E+00,0.0000E+00,1.6586E+00,1.6391E+00,1.6202E+00,1.6014E+00,
+ &1.5830E+00,1.5638E+00,1.5457E+00,1.5267E+00,1.5087E+00,1.4899E+00,
+ &1.4711E+00,1.4517E+00,1.4340E+00,1.4224E+00,1.4107E+00,1.3972E+00,
+ &1.3827E+00,1.3684E+00,1.3535E+00,1.3404E+00,1.3263E+00,1.3096E+00,
+ &1.2927E+00,1.2758E+00,1.2575E+00,1.2422E+00,1.2250E+00,1.2046E+00,
+ &1.1821E+00,1.1579E+00,1.1331E+00,1.1127E+00,1.0905E+00,1.0655E+00,
+ &1.0415E+00,1.0207E+00,1.0042E+00,9.9612E-01,9.9507E-01,1.0089E+00,
+ &1.0451E+00,1.0887E+00,1.1514E+00,1.2146E+00,1.2936E+00,1.3711E+00,
+ &1.4469E+00,1.5220E+00,1.5960E+00,1.6694E+00,1.7428E+00,1.8159E+00,
+ &1.8894E+00,1.9620E+00,2.0344E+00,2.0313E+00,2.1357E+00,2.2333E+00,
+ &2.3215E+00,2.4009E+00,2.4706E+00,2.5292E+00,2.5750E+00,2.6036E+00,
+ &2.6096E+00,2.5783E+00,2.4673E+00,0.0000E+00,1.7269E+00,1.7065E+00/
+ DATA (XDVF_L(K),K= 343, 456) /
+ &1.6866E+00,1.6676E+00,1.6480E+00,1.6279E+00,1.6089E+00,1.5891E+00,
+ &1.5701E+00,1.5502E+00,1.5307E+00,1.5113E+00,1.4910E+00,1.4799E+00,
+ &1.4673E+00,1.4526E+00,1.4373E+00,1.4221E+00,1.4060E+00,1.3922E+00,
+ &1.3771E+00,1.3596E+00,1.3414E+00,1.3234E+00,1.3045E+00,1.2879E+00,
+ &1.2689E+00,1.2468E+00,1.2227E+00,1.1966E+00,1.1706E+00,1.1487E+00,
+ &1.1248E+00,1.0980E+00,1.0724E+00,1.0495E+00,1.0310E+00,1.0212E+00,
+ &1.0181E+00,1.0291E+00,1.0609E+00,1.1002E+00,1.1563E+00,1.2136E+00,
+ &1.2840E+00,1.3528E+00,1.4201E+00,1.4854E+00,1.5492E+00,1.6125E+00,
+ &1.6751E+00,1.7368E+00,1.7981E+00,1.8579E+00,1.9157E+00,1.9057E+00,
+ &1.9875E+00,2.0577E+00,2.1190E+00,2.1700E+00,2.2094E+00,2.2370E+00,
+ &2.2484E+00,2.2403E+00,2.2047E+00,2.1261E+00,1.9567E+00,0.0000E+00,
+ &1.8047E+00,1.7833E+00,1.7626E+00,1.7418E+00,1.7220E+00,1.7009E+00,
+ &1.6810E+00,1.6603E+00,1.6403E+00,1.6193E+00,1.5986E+00,1.5775E+00,
+ &1.5570E+00,1.5441E+00,1.5309E+00,1.5156E+00,1.4991E+00,1.4828E+00,
+ &1.4658E+00,1.4510E+00,1.4350E+00,1.4160E+00,1.3966E+00,1.3772E+00,
+ &1.3565E+00,1.3386E+00,1.3184E+00,1.2942E+00,1.2680E+00,1.2404E+00,
+ &1.2125E+00,1.1887E+00,1.1631E+00,1.1342E+00,1.1064E+00,1.0813E+00,
+ &1.0608E+00,1.0480E+00,1.0426E+00,1.0500E+00,1.0774E+00,1.1111E+00,
+ &1.1608E+00,1.2107E+00,1.2719E+00,1.3315E+00,1.3886E+00,1.4445E+00/
+ DATA (XDVF_L(K),K= 457, 570) /
+ &1.4984E+00,1.5505E+00,1.6020E+00,1.6524E+00,1.7009E+00,1.7480E+00,
+ &1.7926E+00,1.7763E+00,1.8327E+00,1.8794E+00,1.9154E+00,1.9405E+00,
+ &1.9531E+00,1.9537E+00,1.9362E+00,1.8986E+00,1.8325E+00,1.7203E+00,
+ &1.5163E+00,0.0000E+00,1.8755E+00,1.8533E+00,1.8314E+00,1.8106E+00,
+ &1.7890E+00,1.7672E+00,1.7464E+00,1.7248E+00,1.7038E+00,1.6817E+00,
+ &1.6601E+00,1.6385E+00,1.6160E+00,1.6033E+00,1.5889E+00,1.5721E+00,
+ &1.5552E+00,1.5380E+00,1.5199E+00,1.5042E+00,1.4871E+00,1.4670E+00,
+ &1.4463E+00,1.4249E+00,1.4036E+00,1.3843E+00,1.3630E+00,1.3364E+00,
+ &1.3086E+00,1.2791E+00,1.2500E+00,1.2245E+00,1.1971E+00,1.1662E+00,
+ &1.1361E+00,1.1090E+00,1.0858E+00,1.0721E+00,1.0641E+00,1.0676E+00,
+ &1.0898E+00,1.1195E+00,1.1627E+00,1.2069E+00,1.2603E+00,1.3118E+00,
+ &1.3607E+00,1.4079E+00,1.4534E+00,1.4968E+00,1.5392E+00,1.5794E+00,
+ &1.6181E+00,1.6552E+00,1.6888E+00,1.6690E+00,1.7073E+00,1.7353E+00,
+ &1.7530E+00,1.7595E+00,1.7531E+00,1.7338E+00,1.6988E+00,1.6428E+00,
+ &1.5583E+00,1.4293E+00,1.2136E+00,0.0000E+00,1.9470E+00,1.9238E+00,
+ &1.9021E+00,1.8782E+00,1.8570E+00,1.8343E+00,1.8123E+00,1.7898E+00,
+ &1.7680E+00,1.7449E+00,1.7222E+00,1.6994E+00,1.6760E+00,1.6624E+00,
+ &1.6469E+00,1.6299E+00,1.6118E+00,1.5933E+00,1.5742E+00,1.5574E+00,
+ &1.5392E+00,1.5179E+00,1.4955E+00,1.4738E+00,1.4506E+00,1.4300E+00/
+ DATA (XDVF_L(K),K= 571, 684) /
+ &1.4069E+00,1.3792E+00,1.3492E+00,1.3178E+00,1.2868E+00,1.2597E+00,
+ &1.2307E+00,1.1976E+00,1.1654E+00,1.1363E+00,1.1108E+00,1.0945E+00,
+ &1.0840E+00,1.0845E+00,1.1017E+00,1.1268E+00,1.1637E+00,1.2016E+00,
+ &1.2473E+00,1.2910E+00,1.3324E+00,1.3719E+00,1.4090E+00,1.4450E+00,
+ &1.4784E+00,1.5109E+00,1.5404E+00,1.5681E+00,1.5925E+00,1.5689E+00,
+ &1.5916E+00,1.6043E+00,1.6067E+00,1.5981E+00,1.5779E+00,1.5449E+00,
+ &1.4949E+00,1.4262E+00,1.3303E+00,1.1932E+00,9.7657E-01,0.0000E+00,
+ &2.0122E+00,1.9881E+00,1.9640E+00,1.9418E+00,1.9190E+00,1.8954E+00,
+ &1.8721E+00,1.8492E+00,1.8262E+00,1.8024E+00,1.7784E+00,1.7550E+00,
+ &1.7300E+00,1.7157E+00,1.6999E+00,1.6818E+00,1.6627E+00,1.6435E+00,
+ &1.6233E+00,1.6058E+00,1.5866E+00,1.5643E+00,1.5417E+00,1.5178E+00,
+ &1.4926E+00,1.4705E+00,1.4465E+00,1.4174E+00,1.3856E+00,1.3527E+00,
+ &1.3198E+00,1.2914E+00,1.2605E+00,1.2257E+00,1.1915E+00,1.1601E+00,
+ &1.1326E+00,1.1142E+00,1.1016E+00,1.0982E+00,1.1114E+00,1.1321E+00,
+ &1.1637E+00,1.1958E+00,1.2352E+00,1.2722E+00,1.3071E+00,1.3397E+00,
+ &1.3704E+00,1.3995E+00,1.4267E+00,1.4516E+00,1.4736E+00,1.4942E+00,
+ &1.5100E+00,1.4848E+00,1.4955E+00,1.4964E+00,1.4873E+00,1.4675E+00,
+ &1.4366E+00,1.3933E+00,1.3349E+00,1.2585E+00,1.1565E+00,1.0171E+00,
+ &8.0601E-01,0.0000E+00,2.0789E+00,2.0539E+00,2.0294E+00,2.0053E+00/
+ DATA (XDVF_L(K),K= 685, 798) /
+ &1.9820E+00,1.9581E+00,1.9336E+00,1.9096E+00,1.8860E+00,1.8609E+00,
+ &1.8367E+00,1.8106E+00,1.7860E+00,1.7706E+00,1.7543E+00,1.7350E+00,
+ &1.7150E+00,1.6945E+00,1.6735E+00,1.6550E+00,1.6349E+00,1.6112E+00,
+ &1.5864E+00,1.5617E+00,1.5356E+00,1.5128E+00,1.4868E+00,1.4555E+00,
+ &1.4224E+00,1.3876E+00,1.3532E+00,1.3231E+00,1.2904E+00,1.2536E+00,
+ &1.2173E+00,1.1838E+00,1.1545E+00,1.1338E+00,1.1185E+00,1.1113E+00,
+ &1.1199E+00,1.1362E+00,1.1627E+00,1.1895E+00,1.2222E+00,1.2529E+00,
+ &1.2813E+00,1.3080E+00,1.3324E+00,1.3546E+00,1.3756E+00,1.3938E+00,
+ &1.4103E+00,1.4232E+00,1.4319E+00,1.4055E+00,1.4052E+00,1.3959E+00,
+ &1.3768E+00,1.3480E+00,1.3084E+00,1.2576E+00,1.1928E+00,1.1110E+00,
+ &1.0066E+00,8.6804E-01,6.6615E-01,0.0000E+00,2.1434E+00,2.1178E+00,
+ &2.0930E+00,2.0676E+00,2.0440E+00,2.0184E+00,1.9935E+00,1.9686E+00,
+ &1.9439E+00,1.9179E+00,1.8915E+00,1.8663E+00,1.8400E+00,1.8239E+00,
+ &1.8067E+00,1.7863E+00,1.7654E+00,1.7440E+00,1.7219E+00,1.7025E+00,
+ &1.6814E+00,1.6565E+00,1.6311E+00,1.6045E+00,1.5766E+00,1.5526E+00,
+ &1.5250E+00,1.4925E+00,1.4574E+00,1.4213E+00,1.3849E+00,1.3532E+00,
+ &1.3191E+00,1.2800E+00,1.2418E+00,1.2062E+00,1.1743E+00,1.1517E+00,
+ &1.1338E+00,1.1237E+00,1.1272E+00,1.1399E+00,1.1608E+00,1.1828E+00,
+ &1.2092E+00,1.2341E+00,1.2570E+00,1.2774E+00,1.2962E+00,1.3135E+00/
+ DATA (XDVF_L(K),K= 799, 912) /
+ &1.3280E+00,1.3406E+00,1.3511E+00,1.3588E+00,1.3613E+00,1.3335E+00,
+ &1.3246E+00,1.3067E+00,1.2801E+00,1.2441E+00,1.1985E+00,1.1418E+00,
+ &1.0724E+00,9.8806E-01,8.8293E-01,7.4746E-01,5.5665E-01,0.0000E+00,
+ &2.2035E+00,2.1769E+00,2.1514E+00,2.1259E+00,2.1000E+00,2.0743E+00,
+ &2.0488E+00,2.0226E+00,1.9973E+00,1.9702E+00,1.9428E+00,1.9166E+00,
+ &1.8890E+00,1.8729E+00,1.8548E+00,1.8337E+00,1.8116E+00,1.7895E+00,
+ &1.7662E+00,1.7461E+00,1.7239E+00,1.6980E+00,1.6714E+00,1.6436E+00,
+ &1.6146E+00,1.5889E+00,1.5604E+00,1.5266E+00,1.4895E+00,1.4515E+00,
+ &1.4138E+00,1.3806E+00,1.3448E+00,1.3040E+00,1.2638E+00,1.2261E+00,
+ &1.1920E+00,1.1669E+00,1.1469E+00,1.1341E+00,1.1335E+00,1.1420E+00,
+ &1.1583E+00,1.1760E+00,1.1971E+00,1.2168E+00,1.2343E+00,1.2501E+00,
+ &1.2640E+00,1.2762E+00,1.2866E+00,1.2942E+00,1.2996E+00,1.3020E+00,
+ &1.3003E+00,1.2725E+00,1.2557E+00,1.2312E+00,1.1982E+00,1.1569E+00,
+ &1.1068E+00,1.0465E+00,9.7460E-01,8.8884E-01,7.8459E-01,6.5333E-01,
+ &4.7359E-01,0.0000E+00,2.2800E+00,2.2524E+00,2.2256E+00,2.1987E+00,
+ &2.1730E+00,2.1459E+00,2.1192E+00,2.0922E+00,2.0656E+00,2.0374E+00,
+ &2.0100E+00,1.9802E+00,1.9520E+00,1.9346E+00,1.9156E+00,1.8937E+00,
+ &1.8706E+00,1.8475E+00,1.8228E+00,1.8017E+00,1.7783E+00,1.7509E+00,
+ &1.7221E+00,1.6937E+00,1.6627E+00,1.6354E+00,1.6050E+00,1.5688E+00/
+ DATA (XDVF_L(K),K= 913, 1026) /
+ &1.5301E+00,1.4898E+00,1.4503E+00,1.4150E+00,1.3772E+00,1.3339E+00,
+ &1.2911E+00,1.2510E+00,1.2138E+00,1.1866E+00,1.1637E+00,1.1458E+00,
+ &1.1403E+00,1.1441E+00,1.1548E+00,1.1669E+00,1.1817E+00,1.1950E+00,
+ &1.2065E+00,1.2163E+00,1.2249E+00,1.2313E+00,1.2355E+00,1.2379E+00,
+ &1.2379E+00,1.2348E+00,1.2275E+00,1.1987E+00,1.1744E+00,1.1427E+00,
+ &1.1035E+00,1.0570E+00,1.0018E+00,9.3862E-01,8.6494E-01,7.7913E-01,
+ &6.7747E-01,5.5266E-01,3.8741E-01,0.0000E+00,2.3524E+00,2.3243E+00,
+ &2.2963E+00,2.2689E+00,2.2420E+00,2.2137E+00,2.1858E+00,2.1579E+00,
+ &2.1301E+00,2.1011E+00,2.0718E+00,2.0424E+00,2.0120E+00,1.9937E+00,
+ &1.9743E+00,1.9509E+00,1.9267E+00,1.9020E+00,1.8763E+00,1.8541E+00,
+ &1.8295E+00,1.8006E+00,1.7713E+00,1.7402E+00,1.7077E+00,1.6794E+00,
+ &1.6475E+00,1.6087E+00,1.5679E+00,1.5259E+00,1.4840E+00,1.4470E+00,
+ &1.4072E+00,1.3615E+00,1.3163E+00,1.2738E+00,1.2336E+00,1.2045E+00,
+ &1.1783E+00,1.1563E+00,1.1459E+00,1.1457E+00,1.1504E+00,1.1577E+00,
+ &1.1662E+00,1.1742E+00,1.1807E+00,1.1857E+00,1.1886E+00,1.1902E+00,
+ &1.1899E+00,1.1878E+00,1.1830E+00,1.1751E+00,1.1633E+00,1.1345E+00,
+ &1.1039E+00,1.0667E+00,1.0230E+00,9.7228E-01,9.1417E-01,8.4905E-01,
+ &7.7478E-01,6.9004E-01,5.9155E-01,4.7371E-01,3.2191E-01,0.0000E+00,
+ &2.4233E+00,2.3947E+00,2.3653E+00,2.3365E+00,2.3090E+00,2.2800E+00/
+ DATA (XDVF_L(K),K= 1027, 1140) /
+ &2.2512E+00,2.2220E+00,2.1934E+00,2.1628E+00,2.1319E+00,2.1007E+00,
+ &2.0700E+00,2.0512E+00,2.0301E+00,2.0057E+00,1.9809E+00,1.9549E+00,
+ &1.9281E+00,1.9049E+00,1.8791E+00,1.8497E+00,1.8175E+00,1.7854E+00,
+ &1.7507E+00,1.7209E+00,1.6878E+00,1.6474E+00,1.6047E+00,1.5603E+00,
+ &1.5164E+00,1.4777E+00,1.4358E+00,1.3879E+00,1.3403E+00,1.2952E+00,
+ &1.2523E+00,1.2206E+00,1.1913E+00,1.1661E+00,1.1505E+00,1.1462E+00,
+ &1.1460E+00,1.1481E+00,1.1518E+00,1.1545E+00,1.1559E+00,1.1562E+00,
+ &1.1548E+00,1.1523E+00,1.1478E+00,1.1414E+00,1.1331E+00,1.1212E+00,
+ &1.1055E+00,1.0763E+00,1.0405E+00,9.9877E-01,9.5130E-01,8.9815E-01,
+ &8.3813E-01,7.7188E-01,6.9792E-01,6.1492E-01,5.2020E-01,4.0920E-01,
+ &2.7020E-01,0.0000E+00,2.4906E+00,2.4607E+00,2.4307E+00,2.4014E+00,
+ &2.3730E+00,2.3427E+00,2.3127E+00,2.2828E+00,2.2528E+00,2.2213E+00,
+ &2.1903E+00,2.1577E+00,2.1250E+00,2.1053E+00,2.0839E+00,2.0583E+00,
+ &2.0318E+00,2.0051E+00,1.9771E+00,1.9527E+00,1.9259E+00,1.8935E+00,
+ &1.8607E+00,1.8269E+00,1.7917E+00,1.7606E+00,1.7253E+00,1.6833E+00,
+ &1.6387E+00,1.5925E+00,1.5465E+00,1.5061E+00,1.4624E+00,1.4121E+00,
+ &1.3623E+00,1.3152E+00,1.2700E+00,1.2349E+00,1.2036E+00,1.1745E+00,
+ &1.1544E+00,1.1457E+00,1.1410E+00,1.1389E+00,1.1378E+00,1.1357E+00,
+ &1.1332E+00,1.1290E+00,1.1244E+00,1.1176E+00,1.1099E+00,1.0996E+00/
+ DATA (XDVF_L(K),K= 1141, 1254) /
+ &1.0875E+00,1.0729E+00,1.0538E+00,1.0249E+00,9.8511E-01,9.3994E-01,
+ &8.8948E-01,8.3410E-01,7.7332E-01,7.0681E-01,6.3377E-01,5.5280E-01,
+ &4.6214E-01,3.5755E-01,2.2965E-01,0.0000E+00,2.5589E+00,2.5291E+00,
+ &2.4979E+00,2.4676E+00,2.4370E+00,2.4060E+00,2.3753E+00,2.3443E+00,
+ &2.3135E+00,2.2809E+00,2.2486E+00,2.2146E+00,2.1810E+00,2.1602E+00,
+ &2.1376E+00,2.1114E+00,2.0841E+00,2.0557E+00,2.0265E+00,2.0011E+00,
+ &1.9730E+00,1.9392E+00,1.9055E+00,1.8697E+00,1.8327E+00,1.8003E+00,
+ &1.7635E+00,1.7197E+00,1.6727E+00,1.6246E+00,1.5770E+00,1.5346E+00,
+ &1.4890E+00,1.4363E+00,1.3841E+00,1.3341E+00,1.2867E+00,1.2492E+00,
+ &1.2151E+00,1.1824E+00,1.1578E+00,1.1451E+00,1.1356E+00,1.1298E+00,
+ &1.1233E+00,1.1169E+00,1.1105E+00,1.1027E+00,1.0940E+00,1.0840E+00,
+ &1.0726E+00,1.0592E+00,1.0444E+00,1.0265E+00,1.0045E+00,9.7613E-01,
+ &9.3249E-01,8.8451E-01,8.3193E-01,7.7510E-01,7.1373E-01,6.4749E-01,
+ &5.7554E-01,4.9725E-01,4.1072E-01,3.1254E-01,1.9551E-01,0.0000E+00,
+ &2.6244E+00,2.5927E+00,2.5615E+00,2.5299E+00,2.4990E+00,2.4671E+00,
+ &2.4356E+00,2.4034E+00,2.3717E+00,2.3377E+00,2.3034E+00,2.2689E+00,
+ &2.2340E+00,2.2126E+00,2.1892E+00,2.1616E+00,2.1331E+00,2.1040E+00,
+ &2.0736E+00,2.0471E+00,2.0180E+00,1.9830E+00,1.9472E+00,1.9112E+00,
+ &1.8717E+00,1.8375E+00,1.7996E+00,1.7538E+00,1.7053E+00,1.6548E+00/
+ DATA (XDVF_L(K),K= 1255, 1368) /
+ &1.6053E+00,1.5612E+00,1.5138E+00,1.4590E+00,1.4045E+00,1.3516E+00,
+ &1.3023E+00,1.2626E+00,1.2251E+00,1.1889E+00,1.1601E+00,1.1441E+00,
+ &1.1302E+00,1.1201E+00,1.1098E+00,1.0996E+00,1.0888E+00,1.0782E+00,
+ &1.0659E+00,1.0531E+00,1.0388E+00,1.0228E+00,1.0047E+00,9.8480E-01,
+ &9.6040E-01,9.3234E-01,8.8589E-01,8.3563E-01,7.8162E-01,7.2366E-01,
+ &6.6215E-01,5.9658E-01,5.2617E-01,4.5043E-01,3.6787E-01,2.7575E-01,
+ &1.6826E-01,0.0000E+00,2.6886E+00,2.6564E+00,2.6234E+00,2.5908E+00,
+ &2.5600E+00,2.5268E+00,2.4943E+00,2.4612E+00,2.4283E+00,2.3924E+00,
+ &2.3582E+00,2.3219E+00,2.2860E+00,2.2642E+00,2.2394E+00,2.2113E+00,
+ &2.1817E+00,2.1512E+00,2.1198E+00,2.0920E+00,2.0618E+00,2.0268E+00,
+ &1.9890E+00,1.9503E+00,1.9098E+00,1.8739E+00,1.8343E+00,1.7867E+00,
+ &1.7365E+00,1.6843E+00,1.6329E+00,1.5870E+00,1.5377E+00,1.4807E+00,
+ &1.4239E+00,1.3692E+00,1.3169E+00,1.2751E+00,1.2350E+00,1.1954E+00,
+ &1.1624E+00,1.1425E+00,1.1247E+00,1.1110E+00,1.0963E+00,1.0827E+00,
+ &1.0687E+00,1.0547E+00,1.0396E+00,1.0240E+00,1.0070E+00,9.8853E-01,
+ &9.6834E-01,9.4569E-01,9.1962E-01,8.9220E-01,8.4321E-01,7.9105E-01,
+ &7.3592E-01,6.7777E-01,6.1620E-01,5.5143E-01,4.8272E-01,4.0962E-01,
+ &3.3102E-01,2.4455E-01,1.4574E-01,0.0000E+00,2.7496E+00,2.7153E+00,
+ &2.6835E+00,2.6504E+00,2.6180E+00,2.5834E+00,2.5502E+00,2.5161E+00/
+ DATA (XDVF_L(K),K= 1369, 1482) /
+ &2.4824E+00,2.4466E+00,2.4095E+00,2.3736E+00,2.3360E+00,2.3124E+00,
+ &2.2875E+00,2.2580E+00,2.2274E+00,2.1960E+00,2.1631E+00,2.1347E+00,
+ &2.1032E+00,2.0670E+00,2.0277E+00,1.9882E+00,1.9458E+00,1.9086E+00,
+ &1.8675E+00,1.8179E+00,1.7658E+00,1.7122E+00,1.6586E+00,1.6112E+00,
+ &1.5600E+00,1.5010E+00,1.4420E+00,1.3855E+00,1.3294E+00,1.2858E+00,
+ &1.2435E+00,1.2006E+00,1.1641E+00,1.1410E+00,1.1193E+00,1.1023E+00,
+ &1.0837E+00,1.0664E+00,1.0496E+00,1.0329E+00,1.0157E+00,9.9745E-01,
+ &9.7803E-01,9.5735E-01,9.3539E-01,9.1075E-01,8.8302E-01,8.5608E-01,
+ &8.0509E-01,7.5168E-01,6.9580E-01,6.3743E-01,5.7619E-01,5.1233E-01,
+ &4.4547E-01,3.7496E-01,2.9995E-01,2.1862E-01,1.2745E-01,0.0000E+00,
+ &2.8331E+00,2.7978E+00,2.7648E+00,2.7299E+00,2.6960E+00,2.6609E+00,
+ &2.6263E+00,2.5910E+00,2.5561E+00,2.5197E+00,2.4802E+00,2.4424E+00,
+ &2.4030E+00,2.3791E+00,2.3526E+00,2.3216E+00,2.2897E+00,2.2570E+00,
+ &2.2225E+00,2.1925E+00,2.1595E+00,2.1199E+00,2.0799E+00,2.0383E+00,
+ &1.9938E+00,1.9551E+00,1.9121E+00,1.8601E+00,1.8054E+00,1.7494E+00,
+ &1.6932E+00,1.6435E+00,1.5898E+00,1.5280E+00,1.4659E+00,1.4056E+00,
+ &1.3471E+00,1.3010E+00,1.2550E+00,1.2078E+00,1.1652E+00,1.1383E+00,
+ &1.1114E+00,1.0902E+00,1.0668E+00,1.0451E+00,1.0248E+00,1.0039E+00,
+ &9.8353E-01,9.6205E-01,9.4076E-01,9.1705E-01,8.9229E-01,8.6577E-01/
+ DATA (XDVF_L(K),K= 1483, 1596) /
+ &8.3604E-01,8.0985E-01,7.5687E-01,7.0190E-01,6.4516E-01,5.8700E-01,
+ &5.2660E-01,4.6452E-01,3.9995E-01,3.3310E-01,2.6289E-01,1.8826E-01,
+ &1.0655E-01,0.0000E+00,2.9096E+00,2.8732E+00,2.8390E+00,2.8027E+00,
+ &2.7690E+00,2.7325E+00,2.6961E+00,2.6597E+00,2.6231E+00,2.5833E+00,
+ &2.5456E+00,2.5047E+00,2.4650E+00,2.4391E+00,2.4120E+00,2.3799E+00,
+ &2.3462E+00,2.3123E+00,2.2763E+00,2.2451E+00,2.2108E+00,2.1692E+00,
+ &2.1276E+00,2.0835E+00,2.0378E+00,1.9974E+00,1.9525E+00,1.8983E+00,
+ &1.8413E+00,1.7827E+00,1.7243E+00,1.6725E+00,1.6166E+00,1.5520E+00,
+ &1.4872E+00,1.4244E+00,1.3627E+00,1.3136E+00,1.2649E+00,1.2130E+00,
+ &1.1663E+00,1.1352E+00,1.1040E+00,1.0787E+00,1.0514E+00,1.0264E+00,
+ &1.0021E+00,9.7883E-01,9.5548E-01,9.3171E-01,9.0763E-01,8.8283E-01,
+ &8.5596E-01,8.2732E-01,7.9601E-01,7.7056E-01,7.1598E-01,6.6027E-01,
+ &6.0340E-01,5.4514E-01,4.8601E-01,4.2556E-01,3.6359E-01,2.9984E-01,
+ &2.3396E-01,1.6486E-01,9.0844E-02,0.0000E+00,2.9880E+00,2.9510E+00,
+ &2.9150E+00,2.8782E+00,2.8430E+00,2.8048E+00,2.7677E+00,2.7301E+00,
+ &2.6924E+00,2.6517E+00,2.6110E+00,2.5696E+00,2.5280E+00,2.5017E+00,
+ &2.4728E+00,2.4393E+00,2.4042E+00,2.3687E+00,2.3313E+00,2.2988E+00,
+ &2.2631E+00,2.2204E+00,2.1768E+00,2.1312E+00,2.0828E+00,2.0405E+00,
+ &1.9928E+00,1.9364E+00,1.8772E+00,1.8164E+00,1.7558E+00,1.7018E+00/
+ DATA (XDVF_L(K),K= 1597, 1710) /
+ &1.6434E+00,1.5762E+00,1.5084E+00,1.4432E+00,1.3783E+00,1.3261E+00,
+ &1.2741E+00,1.2182E+00,1.1669E+00,1.1315E+00,1.0961E+00,1.0671E+00,
+ &1.0360E+00,1.0071E+00,9.7992E-01,9.5371E-01,9.2801E-01,9.0200E-01,
+ &8.7588E-01,8.4862E-01,8.2038E-01,7.9020E-01,7.5770E-01,7.3298E-01,
+ &6.7721E-01,6.2090E-01,5.6394E-01,5.0631E-01,4.4841E-01,3.8970E-01,
+ &3.3019E-01,2.6973E-01,2.0791E-01,1.4420E-01,7.7416E-02,0.0000E+00,
+ &3.0661E+00,3.0288E+00,2.9911E+00,2.9537E+00,2.9160E+00,2.8778E+00,
+ &2.8392E+00,2.8000E+00,2.7610E+00,2.7200E+00,2.6782E+00,2.6345E+00,
+ &2.5900E+00,2.5625E+00,2.5329E+00,2.4982E+00,2.4617E+00,2.4247E+00,
+ &2.3857E+00,2.3518E+00,2.3145E+00,2.2697E+00,2.2245E+00,2.1764E+00,
+ &2.1269E+00,2.0819E+00,2.0331E+00,1.9746E+00,1.9126E+00,1.8497E+00,
+ &1.7862E+00,1.7303E+00,1.6696E+00,1.5995E+00,1.5285E+00,1.4608E+00,
+ &1.3929E+00,1.3377E+00,1.2826E+00,1.2228E+00,1.1669E+00,1.1279E+00,
+ &1.0882E+00,1.0555E+00,1.0205E+00,9.8876E-01,9.5876E-01,9.2969E-01,
+ &9.0171E-01,8.7356E-01,8.4551E-01,8.1668E-01,7.8701E-01,7.5564E-01,
+ &7.2196E-01,6.9797E-01,6.4121E-01,5.8469E-01,5.2810E-01,4.7131E-01,
+ &4.1460E-01,3.5783E-01,3.0063E-01,2.4338E-01,1.8544E-01,1.2660E-01,
+ &6.6270E-02,0.0000E+00,3.1379E+00,3.0995E+00,3.0600E+00,3.0213E+00,
+ &2.9840E+00,2.9442E+00,2.9047E+00,2.8641E+00,2.8239E+00,2.7813E+00/
+ DATA (XDVF_L(K),K= 1711, 1824) /
+ &2.7383E+00,2.6928E+00,2.6470E+00,2.6191E+00,2.5880E+00,2.5519E+00,
+ &2.5145E+00,2.4761E+00,2.4357E+00,2.4004E+00,2.3615E+00,2.3153E+00,
+ &2.2678E+00,2.2180E+00,2.1669E+00,2.1208E+00,2.0699E+00,2.0087E+00,
+ &1.9447E+00,1.8795E+00,1.8139E+00,1.7558E+00,1.6930E+00,1.6205E+00,
+ &1.5467E+00,1.4759E+00,1.4054E+00,1.3484E+00,1.2895E+00,1.2267E+00,
+ &1.1663E+00,1.1242E+00,1.0808E+00,1.0449E+00,1.0065E+00,9.7194E-01,
+ &9.3967E-01,9.0840E-01,8.7834E-01,8.4891E-01,8.1928E-01,7.8930E-01,
+ &7.5803E-01,7.2562E-01,6.9124E-01,6.6796E-01,6.1058E-01,5.5392E-01,
+ &4.9752E-01,4.4176E-01,3.8633E-01,3.3127E-01,2.7648E-01,2.2186E-01,
+ &1.6735E-01,1.1268E-01,5.7652E-02,0.0000E+00,3.2129E+00,3.1726E+00,
+ &3.1325E+00,3.0928E+00,3.0540E+00,3.0127E+00,2.9717E+00,2.9303E+00,
+ &2.8887E+00,2.8449E+00,2.8001E+00,2.7537E+00,2.7060E+00,2.6766E+00,
+ &2.6453E+00,2.6073E+00,2.5683E+00,2.5286E+00,2.4866E+00,2.4501E+00,
+ &2.4107E+00,2.3628E+00,2.3125E+00,2.2620E+00,2.2079E+00,2.1597E+00,
+ &2.1067E+00,2.0440E+00,1.9778E+00,1.9097E+00,1.8421E+00,1.7819E+00,
+ &1.7169E+00,1.6416E+00,1.5664E+00,1.4922E+00,1.4189E+00,1.3583E+00,
+ &1.2971E+00,1.2300E+00,1.1652E+00,1.1200E+00,1.0729E+00,1.0343E+00,
+ &9.9254E-01,9.5513E-01,9.2006E-01,8.8711E-01,8.5555E-01,8.2426E-01,
+ &7.9305E-01,7.6193E-01,7.2963E-01,6.9636E-01,6.6128E-01,6.3868E-01/
+ DATA (XDVF_L(K),K= 1825, 1836) /
+ &5.8093E-01,5.2428E-01,4.6858E-01,4.1372E-01,3.5972E-01,3.0648E-01,
+ &2.5392E-01,2.0208E-01,1.5083E-01,1.0018E-01,5.0068E-02,0.0000E+00/
+ DATA (XDEF_L(K),K= 1, 114) /
+ &4.3007E-01,4.2474E-01,4.1967E-01,4.1458E-01,4.0970E-01,4.0443E-01,
+ &3.9925E-01,3.9397E-01,3.8864E-01,3.8302E-01,3.7707E-01,3.7100E-01,
+ &3.6470E-01,3.6080E-01,3.5639E-01,3.5109E-01,3.4531E-01,3.3914E-01,
+ &3.3238E-01,3.2609E-01,3.1913E-01,3.1062E-01,3.0152E-01,2.9176E-01,
+ &2.8100E-01,2.7114E-01,2.5952E-01,2.4467E-01,2.2784E-01,2.0937E-01,
+ &1.9117E-01,1.7470E-01,1.5685E-01,1.3678E-01,1.1825E-01,1.0349E-01,
+ &9.4854E-02,9.5054E-02,1.0589E-01,1.3527E-01,1.8584E-01,2.3426E-01,
+ &2.9021E-01,3.3527E-01,3.7670E-01,4.0255E-01,4.1326E-01,4.0880E-01,
+ &3.8831E-01,3.5045E-01,2.9287E-01,2.1298E-01,1.0773E-01,0.0000E+00,
+ &0.0000E+00,2.0644E-01,1.5422E-01,1.0950E-01,7.3614E-02,4.6726E-02,
+ &2.7433E-02,1.4144E-02,6.5080E-03,2.4719E-03,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,4.4398E-01,4.3864E-01,4.3346E-01,4.2809E-01,
+ &4.2290E-01,4.1747E-01,4.1205E-01,4.0650E-01,4.0098E-01,3.9480E-01,
+ &3.8873E-01,3.8226E-01,3.7560E-01,3.7145E-01,3.6678E-01,3.6108E-01,
+ &3.5488E-01,3.4833E-01,3.4123E-01,3.3464E-01,3.2718E-01,3.1811E-01,
+ &3.0838E-01,2.9811E-01,2.8670E-01,2.7630E-01,2.6412E-01,2.4861E-01,
+ &2.3110E-01,2.1209E-01,1.9355E-01,1.7681E-01,1.5878E-01,1.3870E-01,
+ &1.2044E-01,1.0620E-01,9.8341E-02,9.9345E-02,1.1086E-01,1.4055E-01,
+ &1.9033E-01,2.3696E-01,2.8983E-01,3.3137E-01,3.6834E-01,3.8982E-01/
+ DATA (XDEF_L(K),K= 115, 228) /
+ &3.9672E-01,3.8896E-01,3.6609E-01,3.2678E-01,2.6933E-01,1.9181E-01,
+ &9.1683E-02,0.0000E+00,0.0000E+00,1.8955E-01,1.4041E-01,9.8873E-02,
+ &6.5928E-02,4.1462E-02,2.3905E-02,1.2324E-02,5.6113E-03,2.1050E-03,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,4.5980E-01,4.5420E-01,
+ &4.4884E-01,4.4319E-01,4.3780E-01,4.3208E-01,4.2642E-01,4.2053E-01,
+ &4.1457E-01,4.0824E-01,4.0181E-01,3.9484E-01,3.8780E-01,3.8328E-01,
+ &3.7831E-01,3.7223E-01,3.6559E-01,3.5853E-01,3.5072E-01,3.4400E-01,
+ &3.3590E-01,3.2633E-01,3.1598E-01,3.0508E-01,2.9301E-01,2.8197E-01,
+ &2.6915E-01,2.5289E-01,2.3470E-01,2.1511E-01,1.9623E-01,1.7918E-01,
+ &1.6098E-01,1.4092E-01,1.2294E-01,1.0928E-01,1.0224E-01,1.0401E-01,
+ &1.1623E-01,1.4620E-01,1.9488E-01,2.3948E-01,2.8894E-01,3.2681E-01,
+ &3.5905E-01,3.7613E-01,3.7908E-01,3.6817E-01,3.4299E-01,3.0266E-01,
+ &2.4596E-01,1.7115E-01,7.6792E-02,0.0000E+00,0.0000E+00,1.7267E-01,
+ &1.2670E-01,8.8446E-02,5.8458E-02,3.6380E-02,2.0551E-02,1.0608E-02,
+ &4.7732E-03,1.7670E-03,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &4.7845E-01,4.7258E-01,4.6687E-01,4.6107E-01,4.5540E-01,4.4938E-01,
+ &4.4336E-01,4.3728E-01,4.3070E-01,4.2403E-01,4.1702E-01,4.0968E-01,
+ &4.0210E-01,3.9723E-01,3.9181E-01,3.8522E-01,3.7808E-01,3.7047E-01,
+ &3.6211E-01,3.5469E-01,3.4619E-01,3.3582E-01,3.2478E-01,3.1314E-01/
+ DATA (XDEF_L(K),K= 229, 342) /
+ &3.0021E-01,2.8848E-01,2.7488E-01,2.5781E-01,2.3886E-01,2.1865E-01,
+ &1.9932E-01,1.8196E-01,1.6359E-01,1.4359E-01,1.2596E-01,1.1295E-01,
+ &1.0678E-01,1.0933E-01,1.2234E-01,1.5242E-01,1.9969E-01,2.4187E-01,
+ &2.8742E-01,3.2112E-01,3.4825E-01,3.6067E-01,3.5959E-01,3.4546E-01,
+ &3.1813E-01,2.7719E-01,2.2151E-01,1.5037E-01,6.2862E-02,0.0000E+00,
+ &0.0000E+00,1.5516E-01,1.1270E-01,7.7856E-02,5.0916E-02,3.1337E-02,
+ &1.7279E-02,8.9355E-03,3.9672E-03,1.4465E-03,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,5.0059E-01,4.9450E-01,4.8826E-01,4.8213E-01,
+ &4.7610E-01,4.6972E-01,4.6326E-01,4.5655E-01,4.4999E-01,4.4265E-01,
+ &4.3505E-01,4.2703E-01,4.1870E-01,4.1345E-01,4.0758E-01,4.0034E-01,
+ &3.9260E-01,3.8434E-01,3.7539E-01,3.6725E-01,3.5804E-01,3.4696E-01,
+ &3.3492E-01,3.2231E-01,3.0852E-01,2.9601E-01,2.8154E-01,2.6348E-01,
+ &2.4363E-01,2.2272E-01,2.0295E-01,1.8526E-01,1.6669E-01,1.4678E-01,
+ &1.2956E-01,1.1726E-01,1.1212E-01,1.1548E-01,1.2910E-01,1.5906E-01,
+ &2.0458E-01,2.4395E-01,2.8508E-01,3.1418E-01,3.3593E-01,3.4343E-01,
+ &3.3827E-01,3.2104E-01,2.9189E-01,2.5067E-01,1.9688E-01,1.3016E-01,
+ &5.0498E-02,0.0000E+00,0.0000E+00,1.3742E-01,9.8602E-02,6.7357E-02,
+ &4.3555E-02,2.6444E-02,1.4175E-02,7.3561E-03,3.2181E-03,1.1530E-03,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,5.2114E-01,5.1454E-01/
+ DATA (XDEF_L(K),K= 343, 456) /
+ &5.0806E-01,5.0160E-01,4.9520E-01,4.8843E-01,4.8165E-01,4.7456E-01,
+ &4.6738E-01,4.5962E-01,4.5149E-01,4.4293E-01,4.3400E-01,4.2833E-01,
+ &4.2194E-01,4.1420E-01,4.0580E-01,3.9678E-01,3.8741E-01,3.7848E-01,
+ &3.6878E-01,3.5682E-01,3.4416E-01,3.3062E-01,3.1602E-01,3.0269E-01,
+ &2.8749E-01,2.6857E-01,2.4798E-01,2.2641E-01,2.0626E-01,1.8828E-01,
+ &1.6960E-01,1.4976E-01,1.3293E-01,1.2126E-01,1.1684E-01,1.2099E-01,
+ &1.3505E-01,1.6471E-01,2.0841E-01,2.4521E-01,2.8248E-01,3.0770E-01,
+ &3.2484E-01,3.2845E-01,3.1999E-01,3.0047E-01,2.7030E-01,2.2924E-01,
+ &1.7739E-01,1.1482E-01,4.2174E-02,0.0000E+00,0.0000E+00,1.2330E-01,
+ &8.7586E-02,5.9211E-02,3.7890E-02,2.2733E-02,1.1877E-02,6.1865E-03,
+ &2.6713E-03,9.4247E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &5.4423E-01,5.3740E-01,5.3068E-01,5.2385E-01,5.1700E-01,5.0982E-01,
+ &5.0256E-01,4.9509E-01,4.8731E-01,4.7895E-01,4.7023E-01,4.6094E-01,
+ &4.5130E-01,4.4506E-01,4.3820E-01,4.2973E-01,4.2069E-01,4.1108E-01,
+ &4.0069E-01,3.9131E-01,3.8063E-01,3.6796E-01,3.5430E-01,3.3991E-01,
+ &3.2433E-01,3.1014E-01,2.9407E-01,2.7418E-01,2.5281E-01,2.3056E-01,
+ &2.0999E-01,1.9171E-01,1.7291E-01,1.5321E-01,1.3677E-01,1.2578E-01,
+ &1.2220E-01,1.2696E-01,1.4132E-01,1.7056E-01,2.1212E-01,2.4603E-01,
+ &2.7912E-01,3.0023E-01,3.1274E-01,3.1234E-01,3.0087E-01,2.7925E-01/
+ DATA (XDEF_L(K),K= 457, 570) /
+ &2.4820E-01,2.0782E-01,1.5841E-01,1.0056E-01,3.5470E-02,0.0000E+00,
+ &0.0000E+00,1.0941E-01,7.6864E-02,5.1391E-02,3.2506E-02,1.9250E-02,
+ &9.7741E-03,5.1192E-03,2.1775E-03,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,5.6542E-01,5.5814E-01,5.5101E-01,5.4385E-01,
+ &5.3670E-01,5.2913E-01,5.2140E-01,5.1352E-01,5.0533E-01,4.9639E-01,
+ &4.8702E-01,4.7710E-01,4.6670E-01,4.6011E-01,4.5270E-01,4.4365E-01,
+ &4.3394E-01,4.2383E-01,4.1271E-01,4.0253E-01,3.9137E-01,3.7783E-01,
+ &3.6325E-01,3.4810E-01,3.3163E-01,3.1674E-01,2.9988E-01,2.7922E-01,
+ &2.5706E-01,2.3429E-01,2.1333E-01,1.9484E-01,1.7592E-01,1.5634E-01,
+ &1.4028E-01,1.2985E-01,1.2692E-01,1.3218E-01,1.4678E-01,1.7535E-01,
+ &2.1492E-01,2.4628E-01,2.7582E-01,2.9349E-01,3.0215E-01,2.9865E-01,
+ &2.8479E-01,2.6176E-01,2.3025E-01,1.9073E-01,1.4372E-01,9.0030E-02,
+ &3.1431E-02,0.0000E+00,0.0000E+00,9.8561E-02,6.8571E-02,4.5400E-02,
+ &2.8439E-02,1.6650E-02,8.2414E-03,4.3377E-03,1.8226E-03,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,5.8660E-01,5.7912E-01,
+ &5.7170E-01,5.6412E-01,5.5660E-01,5.4858E-01,5.4040E-01,5.3194E-01,
+ &5.2336E-01,5.1383E-01,5.0381E-01,4.9326E-01,4.8220E-01,4.7515E-01,
+ &4.6719E-01,4.5756E-01,4.4719E-01,4.3619E-01,4.2441E-01,4.1376E-01,
+ &4.0188E-01,3.8750E-01,3.7220E-01,3.5617E-01,3.3884E-01,3.2317E-01/
+ DATA (XDEF_L(K),K= 571, 684) /
+ &3.0561E-01,2.8413E-01,2.6132E-01,2.3801E-01,2.1667E-01,1.9794E-01,
+ &1.7898E-01,1.5951E-01,1.4381E-01,1.3395E-01,1.3154E-01,1.3722E-01,
+ &1.5183E-01,1.7978E-01,2.1726E-01,2.4615E-01,2.7227E-01,2.8668E-01,
+ &2.9185E-01,2.8560E-01,2.6981E-01,2.4566E-01,2.1405E-01,1.7560E-01,
+ &1.3093E-01,8.1317E-02,2.8821E-02,0.0000E+00,0.0000E+00,8.9016E-02,
+ &6.1335E-02,4.0241E-02,2.4960E-02,1.4451E-02,6.9787E-03,3.6912E-03,
+ &1.5320E-03,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &6.0621E-01,5.9821E-01,5.9043E-01,5.8253E-01,5.7470E-01,5.6625E-01,
+ &5.5768E-01,5.4870E-01,5.3948E-01,5.2962E-01,5.1919E-01,5.0796E-01,
+ &4.9620E-01,4.8867E-01,4.8027E-01,4.7003E-01,4.5907E-01,4.4740E-01,
+ &4.3484E-01,4.2392E-01,4.1127E-01,3.9627E-01,3.8010E-01,3.6326E-01,
+ &3.4524E-01,3.2900E-01,3.1064E-01,2.8853E-01,2.6510E-01,2.4135E-01,
+ &2.1970E-01,2.0080E-01,1.8175E-01,1.6242E-01,1.4701E-01,1.3753E-01,
+ &1.3572E-01,1.4160E-01,1.5623E-01,1.8343E-01,2.1902E-01,2.4571E-01,
+ &2.6885E-01,2.8059E-01,2.8292E-01,2.7441E-01,2.5704E-01,2.3223E-01,
+ &2.0062E-01,1.6317E-01,1.2079E-01,7.4733E-02,2.7461E-02,0.0000E+00,
+ &0.0000E+00,8.1334E-02,5.5577E-02,3.6150E-02,2.2243E-02,1.2749E-02,
+ &6.0264E-03,3.2009E-03,1.3143E-03,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,6.2581E-01,6.1778E-01,6.0953E-01,6.0134E-01/
+ DATA (XDEF_L(K),K= 685, 798) /
+ &5.9310E-01,5.8428E-01,5.7523E-01,5.6587E-01,5.5625E-01,5.4565E-01,
+ &5.3457E-01,5.2280E-01,5.1030E-01,5.0236E-01,4.9350E-01,4.8267E-01,
+ &4.7104E-01,4.5899E-01,4.4560E-01,4.3381E-01,4.2066E-01,4.0485E-01,
+ &3.8801E-01,3.7047E-01,3.5165E-01,3.3476E-01,3.1574E-01,2.9293E-01,
+ &2.6889E-01,2.4469E-01,2.2279E-01,2.0369E-01,1.8458E-01,1.6537E-01,
+ &1.5025E-01,1.4125E-01,1.3980E-01,1.4589E-01,1.6046E-01,1.8686E-01,
+ &2.2052E-01,2.4502E-01,2.6530E-01,2.7444E-01,2.7406E-01,2.6361E-01,
+ &2.4491E-01,2.1954E-01,1.8819E-01,1.5193E-01,1.1170E-01,6.9146E-02,
+ &2.6829E-02,0.0000E+00,0.0000E+00,7.4387E-02,5.0398E-02,3.2529E-02,
+ &1.9840E-02,1.1260E-02,5.2109E-03,2.7796E-03,1.1291E-03,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,6.4510E-01,6.3663E-01,
+ &6.2809E-01,6.1948E-01,6.1090E-01,6.0165E-01,5.9256E-01,5.8263E-01,
+ &5.7237E-01,5.6121E-01,5.4960E-01,5.3710E-01,5.2390E-01,5.1555E-01,
+ &5.0615E-01,4.9474E-01,4.8273E-01,4.6980E-01,4.5603E-01,4.4343E-01,
+ &4.2983E-01,4.1325E-01,3.9561E-01,3.7731E-01,3.5765E-01,3.4017E-01,
+ &3.2063E-01,2.9709E-01,2.7258E-01,2.4795E-01,2.2572E-01,2.0647E-01,
+ &1.8735E-01,1.6824E-01,1.5339E-01,1.4470E-01,1.4366E-01,1.4990E-01,
+ &1.6437E-01,1.8986E-01,2.2169E-01,2.4408E-01,2.6175E-01,2.6863E-01,
+ &2.6585E-01,2.5363E-01,2.3397E-01,2.0813E-01,1.7714E-01,1.4205E-01/
+ DATA (XDEF_L(K),K= 799, 912) /
+ &1.0396E-01,6.4602E-02,2.6785E-02,0.0000E+00,0.0000E+00,6.8343E-02,
+ &4.5962E-02,2.9434E-02,1.7812E-02,1.0015E-02,4.5458E-03,2.4331E-03,
+ &9.7866E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &6.6281E-01,6.5407E-01,6.4523E-01,6.3631E-01,6.2740E-01,6.1775E-01,
+ &6.0821E-01,5.9770E-01,5.8724E-01,5.7535E-01,5.6321E-01,5.5021E-01,
+ &5.3640E-01,5.2763E-01,5.1775E-01,5.0583E-01,4.9310E-01,4.7946E-01,
+ &4.6520E-01,4.5225E-01,4.3811E-01,4.2074E-01,4.0247E-01,3.8355E-01,
+ &3.6315E-01,3.4516E-01,3.2502E-01,3.0091E-01,2.7589E-01,2.5090E-01,
+ &2.2842E-01,2.0903E-01,1.8987E-01,1.7087E-01,1.5631E-01,1.4790E-01,
+ &1.4709E-01,1.5345E-01,1.6771E-01,1.9243E-01,2.2253E-01,2.4307E-01,
+ &2.5846E-01,2.6327E-01,2.5857E-01,2.4493E-01,2.2441E-01,1.9832E-01,
+ &1.6773E-01,1.3380E-01,9.7606E-02,6.1077E-02,2.7123E-02,4.1687E-04,
+ &0.0000E+00,6.3316E-02,4.2290E-02,2.6899E-02,1.6166E-02,9.0143E-03,
+ &4.0214E-03,2.1587E-03,8.6042E-04,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,6.8558E-01,6.7623E-01,6.6716E-01,6.5776E-01,
+ &6.4840E-01,6.3825E-01,6.2778E-01,6.1697E-01,6.0589E-01,5.9350E-01,
+ &5.8071E-01,5.6677E-01,5.5220E-01,5.4293E-01,5.3246E-01,5.1980E-01,
+ &5.0630E-01,4.9221E-01,4.7690E-01,4.6348E-01,4.4839E-01,4.3024E-01,
+ &4.1112E-01,3.9125E-01,3.7016E-01,3.5134E-01,3.3054E-01,3.0571E-01/
+ DATA (XDEF_L(K),K= 913, 1026) /
+ &2.8005E-01,2.5463E-01,2.3186E-01,2.1230E-01,1.9311E-01,1.7422E-01,
+ &1.5985E-01,1.5187E-01,1.5138E-01,1.5783E-01,1.7178E-01,1.9543E-01,
+ &2.2331E-01,2.4162E-01,2.5415E-01,2.5666E-01,2.4964E-01,2.3438E-01,
+ &2.1293E-01,1.8681E-01,1.5680E-01,1.2430E-01,9.0488E-02,5.7352E-02,
+ &2.7942E-02,7.0995E-03,2.4780E-03,5.7612E-02,3.8138E-02,2.4057E-02,
+ &1.4329E-02,7.9111E-03,3.4566E-03,1.8603E-03,7.3347E-04,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,7.0709E-01,6.9744E-01,
+ &6.8784E-01,6.7803E-01,6.6830E-01,6.5763E-01,6.4678E-01,6.3540E-01,
+ &6.2360E-01,6.1071E-01,5.9715E-01,5.8240E-01,5.6710E-01,5.5722E-01,
+ &5.4625E-01,5.3291E-01,5.1856E-01,5.0380E-01,4.8797E-01,4.7363E-01,
+ &4.5801E-01,4.3900E-01,4.1917E-01,3.9846E-01,3.7656E-01,3.5717E-01,
+ &3.3564E-01,3.1017E-01,2.8397E-01,2.5816E-01,2.3508E-01,2.1538E-01,
+ &1.9615E-01,1.7737E-01,1.6324E-01,1.5559E-01,1.5535E-01,1.6175E-01,
+ &1.7537E-01,1.9793E-01,2.2384E-01,2.4005E-01,2.5009E-01,2.5051E-01,
+ &2.4150E-01,2.2495E-01,2.0291E-01,1.7668E-01,1.4739E-01,1.1625E-01,
+ &8.4583E-02,5.4470E-02,2.9013E-02,1.3147E-02,1.4553E-02,5.2777E-02,
+ &3.4672E-02,2.1686E-02,1.2821E-02,7.0105E-03,3.0093E-03,1.6226E-03,
+ &6.3321E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &7.2796E-01,7.1795E-01,7.0799E-01,6.9776E-01,6.8760E-01,6.7649E-01/
+ DATA (XDEF_L(K),K= 1027, 1140) /
+ &6.6523E-01,6.5299E-01,6.4099E-01,6.2720E-01,6.1289E-01,5.9763E-01,
+ &5.8140E-01,5.7108E-01,5.5954E-01,5.4555E-01,5.3082E-01,5.1501E-01,
+ &4.9841E-01,4.8352E-01,4.6718E-01,4.4758E-01,4.2678E-01,4.0543E-01,
+ &3.8267E-01,3.6267E-01,3.4052E-01,3.1445E-01,2.8771E-01,2.6154E-01,
+ &2.3817E-01,2.1835E-01,1.9910E-01,1.8043E-01,1.6662E-01,1.5905E-01,
+ &1.5900E-01,1.6548E-01,1.7871E-01,2.0015E-01,2.2403E-01,2.3835E-01,
+ &2.4610E-01,2.4469E-01,2.3394E-01,2.1634E-01,1.9372E-01,1.6761E-01,
+ &1.3910E-01,1.0920E-01,7.9530E-02,5.2165E-02,3.0250E-02,1.8723E-02,
+ &2.5275E-02,4.8575E-02,3.1676E-02,1.9677E-02,1.1540E-02,6.2533E-03,
+ &2.6411E-03,1.4253E-03,5.5072E-04,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,7.4788E-01,7.3751E-01,7.2708E-01,7.1644E-01,
+ &7.0580E-01,6.9430E-01,6.8256E-01,6.6975E-01,6.5712E-01,6.4276E-01,
+ &6.2791E-01,6.1180E-01,5.9490E-01,5.8409E-01,5.7199E-01,5.5739E-01,
+ &5.4166E-01,5.2544E-01,5.0821E-01,4.9288E-01,4.7590E-01,4.5544E-01,
+ &4.3393E-01,4.1178E-01,3.8837E-01,3.6775E-01,3.4513E-01,3.1844E-01,
+ &2.9125E-01,2.6472E-01,2.4110E-01,2.2115E-01,2.0189E-01,1.8330E-01,
+ &1.6955E-01,1.6237E-01,1.6243E-01,1.6875E-01,1.8164E-01,2.0201E-01,
+ &2.2410E-01,2.3665E-01,2.4236E-01,2.3927E-01,2.2710E-01,2.0852E-01,
+ &1.8563E-01,1.5962E-01,1.3170E-01,1.0314E-01,7.5292E-02,5.0347E-02/
+ DATA (XDEF_L(K),K= 1141, 1254) /
+ &3.1513E-02,2.3688E-02,3.4520E-02,4.4988E-02,2.9140E-02,1.7975E-02,
+ &1.0472E-02,5.6268E-03,2.3442E-03,1.2646E-03,4.8432E-04,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,7.6812E-01,7.5731E-01,
+ &7.4653E-01,7.3551E-01,7.2440E-01,7.1234E-01,6.9989E-01,6.8692E-01,
+ &6.7357E-01,6.5855E-01,6.4312E-01,6.2624E-01,6.0850E-01,5.9719E-01,
+ &5.8457E-01,5.6934E-01,5.5297E-01,5.3626E-01,5.1802E-01,5.0223E-01,
+ &4.8440E-01,4.6329E-01,4.4109E-01,4.1826E-01,3.9408E-01,3.7291E-01,
+ &3.4966E-01,3.2243E-01,2.9475E-01,2.6790E-01,2.4406E-01,2.2399E-01,
+ &2.0470E-01,1.8621E-01,1.7262E-01,1.6558E-01,1.6576E-01,1.7201E-01,
+ &1.8441E-01,2.0372E-01,2.2403E-01,2.3482E-01,2.3856E-01,2.3398E-01,
+ &2.2040E-01,2.0103E-01,1.7782E-01,1.5205E-01,1.2492E-01,9.7540E-02,
+ &7.1452E-02,4.8817E-02,3.2832E-02,2.8412E-02,4.3068E-02,4.1684E-02,
+ &2.6819E-02,1.6431E-02,9.5049E-03,5.0674E-03,2.0840E-03,1.1231E-03,
+ &4.2643E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &7.8709E-01,7.7617E-01,7.6509E-01,7.5353E-01,7.4210E-01,7.2955E-01,
+ &7.1666E-01,7.0326E-01,6.8906E-01,6.7364E-01,6.5743E-01,6.3988E-01,
+ &6.2140E-01,6.0962E-01,5.9645E-01,5.8083E-01,5.6382E-01,5.4630E-01,
+ &5.2750E-01,5.1079E-01,4.9267E-01,4.7078E-01,4.4780E-01,4.2425E-01,
+ &3.9948E-01,3.7773E-01,3.5398E-01,3.2619E-01,2.9811E-01,2.7093E-01/
+ DATA (XDEF_L(K),K= 1255, 1368) /
+ &2.4686E-01,2.2668E-01,2.0735E-01,1.8888E-01,1.7555E-01,1.6865E-01,
+ &1.6887E-01,1.7500E-01,1.8693E-01,2.0522E-01,2.2377E-01,2.3300E-01,
+ &2.3501E-01,2.2902E-01,2.1428E-01,1.9427E-01,1.7084E-01,1.4533E-01,
+ &1.1889E-01,9.2655E-02,6.8174E-02,4.7575E-02,3.4123E-02,3.2605E-02,
+ &5.0454E-02,3.8820E-02,2.4822E-02,1.5113E-02,8.6857E-03,4.5962E-03,
+ &1.8704E-03,1.0050E-03,3.7856E-04,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,8.0606E-01,7.9455E-01,7.8312E-01,7.7128E-01,
+ &7.5940E-01,7.4610E-01,7.3287E-01,7.1917E-01,7.0456E-01,6.8825E-01,
+ &6.7140E-01,6.5313E-01,6.3390E-01,6.2170E-01,6.0798E-01,5.9180E-01,
+ &5.7419E-01,5.5596E-01,5.3636E-01,5.1934E-01,5.0050E-01,4.7790E-01,
+ &4.5436E-01,4.3012E-01,4.0458E-01,3.8238E-01,3.5808E-01,3.2984E-01,
+ &3.0133E-01,2.7388E-01,2.4957E-01,2.2930E-01,2.0996E-01,1.9168E-01,
+ &1.7832E-01,1.7159E-01,1.7177E-01,1.7770E-01,1.8921E-01,2.0651E-01,
+ &2.2344E-01,2.3117E-01,2.3152E-01,2.2426E-01,2.0844E-01,1.8790E-01,
+ &1.6440E-01,1.3914E-01,1.1342E-01,8.8280E-02,6.5276E-02,4.6578E-02,
+ &3.5360E-02,3.6411E-02,5.6986E-02,3.6256E-02,2.3040E-02,1.3948E-02,
+ &7.9676E-03,4.1856E-03,1.6876E-03,9.0394E-04,3.3789E-04,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,8.2409E-01,8.1223E-01,
+ &8.0027E-01,7.8810E-01,7.7580E-01,7.6250E-01,7.4852E-01,7.3383E-01/
+ DATA (XDEF_L(K),K= 1369, 1482) /
+ &7.1879E-01,7.0216E-01,6.8466E-01,6.6571E-01,6.4580E-01,6.3303E-01,
+ &6.1887E-01,6.0161E-01,5.8362E-01,5.6485E-01,5.4490E-01,5.2736E-01,
+ &5.0788E-01,4.8465E-01,4.6048E-01,4.3549E-01,4.0949E-01,3.8678E-01,
+ &3.6198E-01,3.3325E-01,3.0435E-01,2.7667E-01,2.5212E-01,2.3179E-01,
+ &2.1241E-01,1.9410E-01,1.8093E-01,1.7428E-01,1.7445E-01,1.8022E-01,
+ &1.9133E-01,2.0758E-01,2.2299E-01,2.2941E-01,2.2823E-01,2.1990E-01,
+ &2.0319E-01,1.8211E-01,1.5852E-01,1.3371E-01,1.0856E-01,8.4430E-02,
+ &6.2776E-02,4.5758E-02,3.6514E-02,3.9756E-02,6.2597E-02,3.4019E-02,
+ &2.1502E-02,1.2943E-02,7.3506E-03,3.8366E-03,1.5351E-03,8.1923E-04,
+ &3.0383E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &8.4844E-01,8.3627E-01,8.2378E-01,8.1114E-01,7.9820E-01,7.8411E-01,
+ &7.6977E-01,7.5436E-01,7.3871E-01,7.2101E-01,7.0269E-01,6.8280E-01,
+ &6.6180E-01,6.4849E-01,6.3365E-01,6.1605E-01,5.9682E-01,5.7721E-01,
+ &5.5628E-01,5.3805E-01,5.1772E-01,4.9378E-01,4.6868E-01,4.4295E-01,
+ &4.1599E-01,3.9262E-01,3.6722E-01,3.3788E-01,3.0847E-01,2.8040E-01,
+ &2.5562E-01,2.3513E-01,2.1572E-01,1.9746E-01,1.8447E-01,1.7787E-01,
+ &1.7810E-01,1.8358E-01,1.9394E-01,2.0894E-01,2.2227E-01,2.2689E-01,
+ &2.2385E-01,2.1408E-01,1.9620E-01,1.7461E-01,1.5108E-01,1.2667E-01,
+ &1.0243E-01,7.9635E-02,5.9715E-02,4.4804E-02,3.7997E-02,4.3894E-02/
+ DATA (XDEF_L(K),K= 1483, 1596) /
+ &6.9391E-02,3.1240E-02,1.9603E-02,1.1712E-02,6.6036E-03,3.4150E-03,
+ &1.3549E-03,7.1812E-04,2.6373E-04,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,8.7089E-01,8.5819E-01,8.4535E-01,8.3207E-01,
+ &8.1860E-01,8.0424E-01,7.8877E-01,7.7320E-01,7.5642E-01,7.3822E-01,
+ &7.1895E-01,6.9816E-01,6.7640E-01,6.6244E-01,6.4701E-01,6.2817E-01,
+ &6.0860E-01,5.8841E-01,5.6672E-01,5.4767E-01,5.2667E-01,5.0182E-01,
+ &4.7599E-01,4.4955E-01,4.2190E-01,3.9787E-01,3.7196E-01,3.4199E-01,
+ &3.1220E-01,2.8382E-01,2.5874E-01,2.3816E-01,2.1874E-01,2.0063E-01,
+ &1.8770E-01,1.8107E-01,1.8121E-01,1.8638E-01,1.9622E-01,2.0994E-01,
+ &2.2156E-01,2.2456E-01,2.1986E-01,2.0892E-01,1.9015E-01,1.6817E-01,
+ &1.4465E-01,1.2070E-01,9.7309E-02,7.5665E-02,5.7234E-02,4.4095E-02,
+ &3.9289E-02,4.7307E-02,7.4739E-02,2.8958E-02,1.8046E-02,1.0716E-02,
+ &6.0010E-03,3.0801E-03,1.2145E-03,6.3833E-04,2.3251E-04,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,8.9366E-01,8.8058E-01,
+ &8.6727E-01,8.5353E-01,8.3950E-01,8.2436E-01,8.0890E-01,7.9205E-01,
+ &7.7476E-01,7.5566E-01,7.3557E-01,7.1393E-01,6.9120E-01,6.7672E-01,
+ &6.6059E-01,6.4145E-01,6.2086E-01,5.9962E-01,5.7716E-01,5.5756E-01,
+ &5.3584E-01,5.1022E-01,4.8344E-01,4.5615E-01,4.2780E-01,4.0320E-01,
+ &3.7671E-01,3.4621E-01,3.1594E-01,2.8727E-01,2.6196E-01,2.4126E-01/
+ DATA (XDEF_L(K),K= 1597, 1710) /
+ &2.2177E-01,2.0361E-01,1.9078E-01,1.8427E-01,1.8432E-01,1.8918E-01,
+ &1.9834E-01,2.1079E-01,2.2065E-01,2.2210E-01,2.1587E-01,2.0383E-01,
+ &1.8424E-01,1.6197E-01,1.3849E-01,1.1505E-01,9.2463E-02,7.1949E-02,
+ &5.4952E-02,4.3474E-02,4.0525E-02,5.0376E-02,7.9517E-02,2.6835E-02,
+ &1.6616E-02,9.8004E-03,5.4489E-03,2.7768E-03,1.0900E-03,5.6728E-04,
+ &2.0489E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &9.1643E-01,9.0298E-01,8.8901E-01,8.7472E-01,8.6030E-01,8.4449E-01,
+ &8.2790E-01,8.1090E-01,7.9278E-01,7.7287E-01,7.5201E-01,7.2942E-01,
+ &7.0580E-01,6.9067E-01,6.7395E-01,6.5357E-01,6.3264E-01,6.1082E-01,
+ &5.8728E-01,5.6718E-01,5.4478E-01,5.1825E-01,4.9075E-01,4.6263E-01,
+ &4.3360E-01,4.0844E-01,3.8138E-01,3.5032E-01,3.1963E-01,2.9065E-01,
+ &2.6511E-01,2.4428E-01,2.2479E-01,2.0678E-01,1.9385E-01,1.8735E-01,
+ &1.8722E-01,1.9179E-01,2.0029E-01,2.1158E-01,2.1961E-01,2.1971E-01,
+ &2.1194E-01,1.9894E-01,1.7862E-01,1.5609E-01,1.3279E-01,1.0972E-01,
+ &8.8007E-02,6.8578E-02,5.2905E-02,4.2942E-02,4.1624E-02,5.3065E-02,
+ &8.3506E-02,2.4920E-02,1.5334E-02,8.9876E-03,4.9653E-03,2.5112E-03,
+ &9.8300E-04,5.0629E-04,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,9.3762E-01,9.2325E-01,9.0916E-01,8.9432E-01,
+ &8.7930E-01,8.6312E-01,8.4579E-01,8.2807E-01,8.0954E-01,7.8866E-01/
+ DATA (XDEF_L(K),K= 1711, 1824) /
+ &7.6704E-01,7.4360E-01,7.1911E-01,7.0343E-01,6.8612E-01,6.6512E-01,
+ &6.4349E-01,6.2048E-01,5.9676E-01,5.7574E-01,5.5261E-01,5.2556E-01,
+ &4.9731E-01,4.6862E-01,4.3881E-01,4.1318E-01,3.8556E-01,3.5408E-01,
+ &3.2299E-01,2.9375E-01,2.6794E-01,2.4706E-01,2.2744E-01,2.0939E-01,
+ &1.9662E-01,1.9016E-01,1.8990E-01,1.9412E-01,2.0192E-01,2.1208E-01,
+ &2.1863E-01,2.1745E-01,2.0845E-01,1.9458E-01,1.7365E-01,1.5094E-01,
+ &1.2783E-01,1.0526E-01,8.4228E-02,6.5746E-02,5.1203E-02,4.2521E-02,
+ &4.2531E-02,5.5238E-02,8.6619E-02,2.3321E-02,1.4266E-02,8.3142E-03,
+ &4.5684E-03,2.2945E-03,8.9721E-04,4.5700E-04,0.0000E+00,0.0000E+00,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,9.5912E-01,9.4446E-01,
+ &9.2967E-01,9.1446E-01,8.9890E-01,8.8176E-01,8.6424E-01,8.4567E-01,
+ &8.2630E-01,8.0492E-01,7.8242E-01,7.5817E-01,7.3271E-01,7.1653E-01,
+ &6.9849E-01,6.7725E-01,6.5433E-01,6.3091E-01,6.0625E-01,5.8456E-01,
+ &5.6088E-01,5.3305E-01,5.0402E-01,4.7461E-01,4.4411E-01,4.1800E-01,
+ &3.8988E-01,3.5790E-01,3.2644E-01,2.9690E-01,2.7087E-01,2.4987E-01,
+ &2.3039E-01,2.1219E-01,1.9955E-01,1.9298E-01,1.9248E-01,1.9636E-01,
+ &2.0355E-01,2.1258E-01,2.1752E-01,2.1512E-01,2.0490E-01,1.9021E-01,
+ &1.6876E-01,1.4586E-01,1.2296E-01,1.0090E-01,8.0587E-02,6.3034E-02,
+ &4.9591E-02,4.2122E-02,4.3355E-02,5.7203E-02,8.9336E-02,2.1802E-02/
+ DATA (XDEF_L(K),K= 1825, 1836) /
+ &1.3258E-02,7.6843E-03,4.1967E-03,2.0952E-03,8.1932E-04,4.1202E-04,
+ &0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00,0.0000E+00/
+ DATA (XUDF_L(K),K= 1, 114) /
+ &1.8987E-02,1.9947E-02,2.0980E-02,2.2068E-02,2.3225E-02,2.4540E-02,
+ &2.5957E-02,2.7526E-02,2.9229E-02,3.1232E-02,3.3453E-02,3.6003E-02,
+ &3.8855E-02,4.0763E-02,4.2980E-02,4.5778E-02,4.8895E-02,5.2320E-02,
+ &5.6174E-02,5.9765E-02,6.3980E-02,6.9315E-02,7.5299E-02,8.1888E-02,
+ &8.9292E-02,9.6162E-02,1.0414E-01,1.1410E-01,1.2505E-01,1.3674E-01,
+ &1.4937E-01,1.6060E-01,1.7296E-01,1.8730E-01,2.0166E-01,2.1531E-01,
+ &2.2821E-01,2.3833E-01,2.4848E-01,2.6049E-01,2.7586E-01,2.9166E-01,
+ &3.1456E-01,3.3942E-01,3.7230E-01,4.0597E-01,4.3921E-01,4.7071E-01,
+ &4.9846E-01,5.2057E-01,5.3433E-01,5.3610E-01,5.2141E-01,4.8433E-01,
+ &4.1719E-01,6.3794E-01,6.7411E-01,7.2040E-01,7.8812E-01,8.9495E-01,
+ &1.0702E+00,1.3629E+00,1.8763E+00,2.8399E+00,4.8968E+00,1.0506E+01,
+ &3.7793E+01,0.0000E+00,3.1111E-02,3.2336E-02,3.3580E-02,3.4906E-02,
+ &3.6247E-02,3.7773E-02,3.9337E-02,4.1056E-02,4.2876E-02,4.5001E-02,
+ &4.7299E-02,4.9897E-02,5.2761E-02,5.4666E-02,5.6867E-02,5.9620E-02,
+ &6.2679E-02,6.6018E-02,6.9775E-02,7.3275E-02,7.7353E-02,8.2522E-02,
+ &8.8327E-02,9.4694E-02,1.0184E-01,1.0846E-01,1.1615E-01,1.2575E-01,
+ &1.3628E-01,1.4752E-01,1.5964E-01,1.7036E-01,1.8215E-01,1.9580E-01,
+ &2.0933E-01,2.2213E-01,2.3411E-01,2.4341E-01,2.5275E-01,2.6387E-01,
+ &2.7831E-01,2.9333E-01,3.1510E-01,3.3876E-01,3.6995E-01,4.0170E-01/
+ DATA (XUDF_L(K),K= 115, 228) /
+ &4.3298E-01,4.6172E-01,4.8742E-01,5.0700E-01,5.1856E-01,5.1873E-01,
+ &5.0352E-01,4.6746E-01,4.0418E-01,6.1801E-01,6.5339E-01,6.9923E-01,
+ &7.6627E-01,8.7125E-01,1.0408E+00,1.3199E+00,1.8020E+00,2.6920E+00,
+ &4.5574E+00,9.5310E+00,3.2877E+01,0.0000E+00,5.1176E-02,5.2640E-02,
+ &5.4100E-02,5.5603E-02,5.7095E-02,5.8737E-02,6.0416E-02,6.2154E-02,
+ &6.4016E-02,6.6046E-02,6.8273E-02,7.0765E-02,7.3444E-02,7.5182E-02,
+ &7.7263E-02,7.9781E-02,8.2626E-02,8.5707E-02,8.9176E-02,9.2402E-02,
+ &9.6182E-02,1.0098E-01,1.0635E-01,1.1227E-01,1.1893E-01,1.2513E-01,
+ &1.3230E-01,1.4128E-01,1.5115E-01,1.6164E-01,1.7300E-01,1.8301E-01,
+ &1.9397E-01,2.0660E-01,2.1907E-01,2.3072E-01,2.4154E-01,2.4985E-01,
+ &2.5817E-01,2.6810E-01,2.8136E-01,2.9535E-01,3.1585E-01,3.3824E-01,
+ &3.6743E-01,3.9701E-01,4.2565E-01,4.5205E-01,4.7460E-01,4.9184E-01,
+ &5.0110E-01,4.9954E-01,4.8363E-01,4.4878E-01,3.8940E-01,5.9452E-01,
+ &6.2820E-01,6.7181E-01,7.3612E-01,8.3598E-01,9.9560E-01,1.2543E+00,
+ &1.6953E+00,2.4947E+00,4.1415E+00,8.4275E+00,2.7797E+01,0.0000E+00,
+ &8.6266E-02,8.7847E-02,8.9380E-02,9.0869E-02,9.2337E-02,9.3826E-02,
+ &9.5315E-02,9.6842E-02,9.8333E-02,1.0003E-01,1.0178E-01,1.0370E-01,
+ &1.0575E-01,1.0710E-01,1.0872E-01,1.1075E-01,1.1295E-01,1.1538E-01,
+ &1.1821E-01,1.2088E-01,1.2396E-01,1.2796E-01,1.3252E-01,1.3756E-01/
+ DATA (XUDF_L(K),K= 229, 342) /
+ &1.4331E-01,1.4870E-01,1.5500E-01,1.6291E-01,1.7166E-01,1.8100E-01,
+ &1.9111E-01,2.0002E-01,2.0977E-01,2.2095E-01,2.3189E-01,2.4200E-01,
+ &2.5123E-01,2.5821E-01,2.6512E-01,2.7351E-01,2.8514E-01,2.9789E-01,
+ &3.1683E-01,3.3731E-01,3.6424E-01,3.9124E-01,4.1697E-01,4.4030E-01,
+ &4.6002E-01,4.7419E-01,4.8085E-01,4.7740E-01,4.6086E-01,4.2728E-01,
+ &3.7241E-01,5.6656E-01,5.9684E-01,6.3694E-01,6.9622E-01,7.8804E-01,
+ &9.3343E-01,1.1653E+00,1.5545E+00,2.2504E+00,3.6537E+00,7.2124E+00,
+ &2.2653E+01,0.0000E+00,1.4838E-01,1.4960E-01,1.5068E-01,1.5161E-01,
+ &1.5242E-01,1.5316E-01,1.5373E-01,1.5426E-01,1.5470E-01,1.5511E-01,
+ &1.5554E-01,1.5602E-01,1.5660E-01,1.5698E-01,1.5750E-01,1.5830E-01,
+ &1.5923E-01,1.6034E-01,1.6181E-01,1.6324E-01,1.6509E-01,1.6746E-01,
+ &1.7054E-01,1.7402E-01,1.7811E-01,1.8208E-01,1.8687E-01,1.9296E-01,
+ &1.9986E-01,2.0734E-01,2.1554E-01,2.2281E-01,2.3075E-01,2.3983E-01,
+ &2.4863E-01,2.5660E-01,2.6366E-01,2.6883E-01,2.7387E-01,2.8026E-01,
+ &2.8982E-01,3.0088E-01,3.1780E-01,3.3626E-01,3.6021E-01,3.8399E-01,
+ &4.0666E-01,4.2682E-01,4.4278E-01,4.5386E-01,4.5774E-01,4.5230E-01,
+ &4.3509E-01,4.0314E-01,3.5321E-01,5.3325E-01,5.5916E-01,5.9448E-01,
+ &6.4707E-01,7.2797E-01,8.5557E-01,1.0563E+00,1.3882E+00,1.9717E+00,
+ &3.1223E+00,5.9601E+00,1.7750E+01,0.0000E+00,2.3139E-01,2.3138E-01/
+ DATA (XUDF_L(K),K= 343, 456) /
+ &2.3120E-01,2.3076E-01,2.3006E-01,2.2907E-01,2.2788E-01,2.2645E-01,
+ &2.2489E-01,2.2308E-01,2.2120E-01,2.1929E-01,2.1743E-01,2.1630E-01,
+ &2.1526E-01,2.1411E-01,2.1311E-01,2.1231E-01,2.1171E-01,2.1148E-01,
+ &2.1150E-01,2.1182E-01,2.1271E-01,2.1412E-01,2.1601E-01,2.1822E-01,
+ &2.2096E-01,2.2496E-01,2.2961E-01,2.3481E-01,2.4086E-01,2.4622E-01,
+ &2.5214E-01,2.5891E-01,2.6537E-01,2.7104E-01,2.7588E-01,2.7922E-01,
+ &2.8235E-01,2.8664E-01,2.9413E-01,3.0352E-01,3.1845E-01,3.3481E-01,
+ &3.5617E-01,3.7737E-01,3.9689E-01,4.1403E-01,4.2736E-01,4.3558E-01,
+ &4.3712E-01,4.3016E-01,4.1245E-01,3.8197E-01,3.3645E-01,5.0322E-01,
+ &5.2507E-01,5.5559E-01,6.0172E-01,6.7286E-01,7.8413E-01,9.5797E-01,
+ &1.2422E+00,1.7341E+00,2.6883E+00,4.9868E+00,1.4177E+01,0.0000E+00,
+ &3.6389E-01,3.6098E-01,3.5780E-01,3.5400E-01,3.5016E-01,3.4553E-01,
+ &3.4044E-01,3.3521E-01,3.2971E-01,3.2369E-01,3.1755E-01,3.1120E-01,
+ &3.0494E-01,3.0120E-01,2.9724E-01,2.9287E-01,2.8855E-01,2.8449E-01,
+ &2.8072E-01,2.7770E-01,2.7469E-01,2.7175E-01,2.6933E-01,2.6740E-01,
+ &2.6613E-01,2.6556E-01,2.6563E-01,2.6631E-01,2.6763E-01,2.6975E-01,
+ &2.7268E-01,2.7539E-01,2.7857E-01,2.8224E-01,2.8565E-01,2.8841E-01,
+ &2.9040E-01,2.9139E-01,2.9220E-01,2.9395E-01,2.9888E-01,3.0633E-01,
+ &3.1877E-01,3.3296E-01,3.5147E-01,3.6947E-01,3.8604E-01,3.9986E-01/
+ DATA (XUDF_L(K),K= 457, 570) /
+ &4.1008E-01,4.1548E-01,4.1467E-01,4.0620E-01,3.8830E-01,3.5965E-01,
+ &3.1902E-01,4.7020E-01,4.8772E-01,5.1303E-01,5.5185E-01,6.1224E-01,
+ &7.0699E-01,8.5323E-01,1.0903E+00,1.4950E+00,2.2640E+00,4.0723E+00,
+ &0.0000E+00,0.0000E+00,5.2666E-01,5.1909E-01,5.1100E-01,5.0238E-01,
+ &4.9333E-01,4.8312E-01,4.7293E-01,4.6180E-01,4.5066E-01,4.3890E-01,
+ &4.2692E-01,4.1467E-01,4.0262E-01,3.9542E-01,3.8784E-01,3.7925E-01,
+ &3.7080E-01,3.6267E-01,3.5482E-01,3.4841E-01,3.4190E-01,3.3492E-01,
+ &3.2852E-01,3.2287E-01,3.1768E-01,3.1409E-01,3.1066E-01,3.0785E-01,
+ &3.0564E-01,3.0446E-01,3.0380E-01,3.0388E-01,3.0402E-01,3.0458E-01,
+ &3.0488E-01,3.0475E-01,3.0386E-01,3.0263E-01,3.0116E-01,3.0045E-01,
+ &3.0296E-01,3.0852E-01,3.1888E-01,3.3085E-01,3.4677E-01,3.6222E-01,
+ &3.7600E-01,3.8707E-01,3.9488E-01,3.9799E-01,3.9530E-01,3.8568E-01,
+ &3.6791E-01,3.4080E-01,3.0424E-01,4.4195E-01,4.5570E-01,4.7648E-01,
+ &5.0935E-01,5.6099E-01,6.4225E-01,7.6680E-01,9.6736E-01,1.3053E+00,
+ &1.9393E+00,3.3976E+00,0.0000E+00,0.0000E+00,7.4015E-01,7.2498E-01,
+ &7.0940E-01,6.9297E-01,6.7620E-01,6.5800E-01,6.3935E-01,6.2047E-01,
+ &6.0114E-01,5.8076E-01,5.6065E-01,5.4030E-01,5.2035E-01,5.0839E-01,
+ &4.9583E-01,4.8167E-01,4.6773E-01,4.5434E-01,4.4113E-01,4.3035E-01,
+ &4.1922E-01,4.0719E-01,3.9582E-01,3.8536E-01,3.7557E-01,3.6805E-01/
+ DATA (XUDF_L(K),K= 571, 684) /
+ &3.6079E-01,3.5336E-01,3.4710E-01,3.4173E-01,3.3719E-01,3.3400E-01,
+ &3.3124E-01,3.2819E-01,3.2494E-01,3.2158E-01,3.1765E-01,3.1400E-01,
+ &3.1011E-01,3.0684E-01,3.0682E-01,3.1046E-01,3.1856E-01,3.2861E-01,
+ &3.4189E-01,3.5475E-01,3.6597E-01,3.7463E-01,3.8003E-01,3.8108E-01,
+ &3.7681E-01,3.6631E-01,3.4865E-01,3.2327E-01,2.9078E-01,4.1488E-01,
+ &4.2529E-01,4.4193E-01,4.6945E-01,5.1322E-01,5.8236E-01,6.8846E-01,
+ &8.5739E-01,1.1394E+00,1.6617E+00,2.8395E+00,0.0000E+00,0.0000E+00,
+ &9.8501E-01,9.5975E-01,9.3420E-01,9.0757E-01,8.8092E-01,8.5237E-01,
+ &8.2383E-01,7.9445E-01,7.6556E-01,7.3524E-01,7.0484E-01,6.7495E-01,
+ &6.4547E-01,6.2798E-01,6.0969E-01,5.8904E-01,5.6882E-01,5.4932E-01,
+ &5.3014E-01,5.1443E-01,4.9826E-01,4.8058E-01,4.6380E-01,4.4815E-01,
+ &4.3330E-01,4.2167E-01,4.1020E-01,3.9827E-01,3.8748E-01,3.7784E-01,
+ &3.6931E-01,3.6303E-01,3.5669E-01,3.4992E-01,3.4358E-01,3.3710E-01,
+ &3.3025E-01,3.2429E-01,3.1817E-01,3.1242E-01,3.1001E-01,3.1195E-01,
+ &3.1802E-01,3.2610E-01,3.3719E-01,3.4770E-01,3.5674E-01,3.6357E-01,
+ &3.6695E-01,3.6631E-01,3.6075E-01,3.4960E-01,3.3214E-01,3.0855E-01,
+ &2.7931E-01,3.9198E-01,3.9931E-01,4.1263E-01,4.3550E-01,4.7310E-01,
+ &5.3259E-01,6.2375E-01,7.6876E-01,1.0087E+00,1.4464E+00,2.4185E+00,
+ &0.0000E+00,0.0000E+00,1.2917E+00,1.2523E+00,1.2128E+00,1.1722E+00/
+ DATA (XUDF_L(K),K= 685, 798) /
+ &1.1321E+00,1.0894E+00,1.0473E+00,1.0044E+00,9.6262E-01,9.1838E-01,
+ &8.7565E-01,8.3283E-01,7.9186E-01,7.6734E-01,7.4146E-01,7.1300E-01,
+ &6.8484E-01,6.5787E-01,6.3134E-01,6.0963E-01,5.8730E-01,5.6294E-01,
+ &5.3947E-01,5.1767E-01,4.9689E-01,4.8039E-01,4.6398E-01,4.4675E-01,
+ &4.3087E-01,4.1650E-01,4.0371E-01,3.9342E-01,3.8361E-01,3.7293E-01,
+ &3.6284E-01,3.5305E-01,3.4307E-01,3.3468E-01,3.2613E-01,3.1788E-01,
+ &3.1306E-01,3.1309E-01,3.1715E-01,3.2346E-01,3.3232E-01,3.4066E-01,
+ &3.4779E-01,3.5251E-01,3.5401E-01,3.5184E-01,3.4519E-01,3.3347E-01,
+ &3.1650E-01,2.9433E-01,2.6872E-01,3.6968E-01,3.7446E-01,3.8477E-01,
+ &4.0368E-01,4.3551E-01,4.8654E-01,5.6457E-01,6.8832E-01,8.9135E-01,
+ &1.2583E+00,2.0601E+00,0.0000E+00,0.0000E+00,1.6499E+00,1.5928E+00,
+ &1.5356E+00,1.4773E+00,1.4202E+00,1.3601E+00,1.3009E+00,1.2413E+00,
+ &1.1836E+00,1.1235E+00,1.0650E+00,1.0076E+00,9.5212E-01,9.1919E-01,
+ &8.8569E-01,8.4733E-01,8.1006E-01,7.7436E-01,7.3955E-01,7.1104E-01,
+ &6.8173E-01,6.4966E-01,6.1893E-01,5.9026E-01,5.6287E-01,5.4114E-01,
+ &5.1941E-01,4.9621E-01,4.7490E-01,4.5564E-01,4.3786E-01,4.2408E-01,
+ &4.1024E-01,3.9562E-01,3.8175E-01,3.6853E-01,3.5541E-01,3.4455E-01,
+ &3.3366E-01,3.2286E-01,3.1565E-01,3.1397E-01,3.1618E-01,3.2069E-01,
+ &3.2744E-01,3.3383E-01,3.3911E-01,3.4194E-01,3.4194E-01,3.3844E-01/
+ DATA (XUDF_L(K),K= 799, 912) /
+ &3.3088E-01,3.1887E-01,3.0224E-01,2.8177E-01,2.5901E-01,3.4945E-01,
+ &3.5200E-01,3.5959E-01,3.7518E-01,4.0212E-01,4.4590E-01,5.1305E-01,
+ &6.1934E-01,7.9273E-01,1.1025E+00,1.7693E+00,0.0000E+00,0.0000E+00,
+ &2.0413E+00,1.9626E+00,1.8840E+00,1.8053E+00,1.7284E+00,1.6480E+00,
+ &1.5697E+00,1.4911E+00,1.4157E+00,1.3375E+00,1.2620E+00,1.1875E+00,
+ &1.1168E+00,1.0751E+00,1.0321E+00,9.8410E-01,9.3682E-01,8.9196E-01,
+ &8.4816E-01,8.1245E-01,7.7582E-01,7.3576E-01,6.9745E-01,6.6154E-01,
+ &6.2742E-01,6.0036E-01,5.7319E-01,5.4409E-01,5.1721E-01,4.9291E-01,
+ &4.7049E-01,4.5284E-01,4.3541E-01,4.1671E-01,3.9926E-01,3.8274E-01,
+ &3.6660E-01,3.5348E-01,3.4035E-01,3.2727E-01,3.1788E-01,3.1459E-01,
+ &3.1499E-01,3.1792E-01,3.2291E-01,3.2764E-01,3.3124E-01,3.3250E-01,
+ &3.3120E-01,3.2663E-01,3.1834E-01,3.0608E-01,2.8998E-01,2.7085E-01,
+ &2.5085E-01,3.3191E-01,3.3258E-01,3.3808E-01,3.5072E-01,3.7379E-01,
+ &4.1182E-01,4.7005E-01,5.6257E-01,7.1233E-01,9.7788E-01,1.5412E+00,
+ &0.0000E+00,0.0000E+00,2.6325E+00,2.5188E+00,2.4060E+00,2.2942E+00,
+ &2.1863E+00,2.0740E+00,1.9650E+00,1.8571E+00,1.7537E+00,1.6473E+00,
+ &1.5453E+00,1.4458E+00,1.3515E+00,1.2965E+00,1.2394E+00,1.1767E+00,
+ &1.1150E+00,1.0560E+00,9.9927E-01,9.5301E-01,9.0565E-01,8.5400E-01,
+ &8.0462E-01,7.5858E-01,7.1481E-01,6.7994E-01,6.4502E-01,6.0799E-01/
+ DATA (XUDF_L(K),K= 913, 1026) /
+ &5.7349E-01,5.4206E-01,5.1299E-01,4.9028E-01,4.6789E-01,4.4387E-01,
+ &4.2168E-01,4.0096E-01,3.8070E-01,3.6457E-01,3.4857E-01,3.3249E-01,
+ &3.2026E-01,3.1503E-01,3.1326E-01,3.1423E-01,3.1703E-01,3.1974E-01,
+ &3.2120E-01,3.2086E-01,3.1799E-01,3.1221E-01,3.0315E-01,2.9072E-01,
+ &2.7522E-01,2.5796E-01,2.4114E-01,3.1079E-01,3.0956E-01,3.1267E-01,
+ &3.2223E-01,3.4089E-01,3.7246E-01,4.2134E-01,4.9853E-01,6.2305E-01,
+ &8.4191E-01,1.2983E+00,0.0000E+00,0.0000E+00,3.2997E+00,3.1427E+00,
+ &2.9900E+00,2.8374E+00,2.6927E+00,2.5421E+00,2.3973E+00,2.2549E+00,
+ &2.1191E+00,1.9809E+00,1.8488E+00,1.7209E+00,1.6001E+00,1.5300E+00,
+ &1.4576E+00,1.3771E+00,1.2999E+00,1.2268E+00,1.1551E+00,1.0975E+00,
+ &1.0385E+00,9.7437E-01,9.1327E-01,8.5649E-01,8.0236E-01,7.5952E-01,
+ &7.1667E-01,6.7091E-01,6.2847E-01,5.9005E-01,5.5422E-01,5.2636E-01,
+ &4.9890E-01,4.6976E-01,4.4269E-01,4.1752E-01,3.9377E-01,3.7477E-01,
+ &3.5594E-01,3.3710E-01,3.2226E-01,3.1511E-01,3.1131E-01,3.1067E-01,
+ &3.1132E-01,3.1227E-01,3.1198E-01,3.1021E-01,3.0606E-01,2.9926E-01,
+ &2.8958E-01,2.7716E-01,2.6233E-01,2.4655E-01,2.3275E-01,2.9229E-01,
+ &2.8941E-01,2.9061E-01,2.9753E-01,3.1273E-01,3.3909E-01,3.8034E-01,
+ &4.4548E-01,5.5028E-01,7.3256E-01,1.1074E+00,0.0000E+00,0.0000E+00,
+ &4.0557E+00,3.8486E+00,3.6460E+00,3.4480E+00,3.2579E+00,3.0626E+00/
+ DATA (XUDF_L(K),K= 1027, 1140) /
+ &2.8756E+00,2.6929E+00,2.5196E+00,2.3441E+00,2.1778E+00,2.0170E+00,
+ &1.8670E+00,1.7797E+00,1.6902E+00,1.5909E+00,1.4960E+00,1.4058E+00,
+ &1.3191E+00,1.2484E+00,1.1764E+00,1.0991E+00,1.0253E+00,9.5689E-01,
+ &8.9197E-01,8.4046E-01,7.8904E-01,7.3442E-01,6.8367E-01,6.3780E-01,
+ &5.9520E-01,5.6218E-01,5.2934E-01,4.9500E-01,4.6300E-01,4.3370E-01,
+ &4.0611E-01,3.8431E-01,3.6284E-01,3.4121E-01,3.2389E-01,3.1494E-01,
+ &3.0926E-01,3.0697E-01,3.0594E-01,3.0501E-01,3.0330E-01,3.0019E-01,
+ &2.9492E-01,2.8734E-01,2.7718E-01,2.6476E-01,2.5057E-01,2.3646E-01,
+ &2.2503E-01,2.7558E-01,2.7132E-01,2.7089E-01,2.7569E-01,2.8794E-01,
+ &3.1000E-01,3.4491E-01,4.0016E-01,4.8886E-01,6.4191E-01,9.5232E-01,
+ &0.0000E+00,0.0000E+00,4.8799E+00,4.6116E+00,4.3560E+00,4.1035E+00,
+ &3.8608E+00,3.6163E+00,3.3822E+00,3.1557E+00,2.9412E+00,2.7247E+00,
+ &2.5209E+00,2.3248E+00,2.1421E+00,2.0368E+00,1.9287E+00,1.8094E+00,
+ &1.6955E+00,1.5877E+00,1.4841E+00,1.4003E+00,1.3154E+00,1.2237E+00,
+ &1.1368E+00,1.0563E+00,9.8015E-01,9.2005E-01,8.5978E-01,7.9615E-01,
+ &7.3715E-01,6.8369E-01,6.3441E-01,5.9609E-01,5.5830E-01,5.1865E-01,
+ &4.8192E-01,4.4872E-01,4.1747E-01,3.9300E-01,3.6895E-01,3.4483E-01,
+ &3.2508E-01,3.1459E-01,3.0709E-01,3.0328E-01,3.0056E-01,2.9840E-01,
+ &2.9543E-01,2.9107E-01,2.8485E-01,2.7655E-01,2.6610E-01,2.5368E-01/
+ DATA (XUDF_L(K),K= 1141, 1254) /
+ &2.4019E-01,2.2736E-01,2.1837E-01,2.6080E-01,2.5542E-01,2.5362E-01,
+ &2.5693E-01,2.6661E-01,2.8505E-01,3.1490E-01,3.6226E-01,4.3798E-01,
+ &5.6769E-01,8.2836E-01,0.0000E+00,0.0000E+00,5.8340E+00,5.4940E+00,
+ &5.1700E+00,4.8532E+00,4.5515E+00,4.2463E+00,3.9559E+00,3.6752E+00,
+ &3.4138E+00,3.1496E+00,2.9022E+00,2.6648E+00,2.4450E+00,2.3189E+00,
+ &2.1896E+00,2.0476E+00,1.9120E+00,1.7843E+00,1.6621E+00,1.5639E+00,
+ &1.4648E+00,1.3569E+00,1.2556E+00,1.1618E+00,1.0734E+00,1.0037E+00,
+ &9.3416E-01,8.6065E-01,7.9257E-01,7.3145E-01,6.7463E-01,6.3082E-01,
+ &5.8786E-01,5.4262E-01,5.0118E-01,4.6374E-01,4.2883E-01,4.0146E-01,
+ &3.7490E-01,3.4814E-01,3.2612E-01,3.1397E-01,3.0482E-01,2.9958E-01,
+ &2.9536E-01,2.9178E-01,2.8756E-01,2.8208E-01,2.7504E-01,2.6611E-01,
+ &2.5539E-01,2.4319E-01,2.3031E-01,2.1877E-01,2.1195E-01,2.4673E-01,
+ &2.4036E-01,2.3746E-01,2.3912E-01,2.4677E-01,2.6223E-01,2.8748E-01,
+ &3.2792E-01,3.9255E-01,5.0271E-01,7.2095E-01,0.0000E+00,0.0000E+00,
+ &6.8578E+00,6.4388E+00,6.0380E+00,5.6501E+00,5.2825E+00,4.9103E+00,
+ &4.5613E+00,4.2230E+00,3.9070E+00,3.5911E+00,3.2966E+00,3.0156E+00,
+ &2.7567E+00,2.6078E+00,2.4563E+00,2.2905E+00,2.1319E+00,1.9837E+00,
+ &1.8421E+00,1.7287E+00,1.6141E+00,1.4902E+00,1.3730E+00,1.2663E+00,
+ &1.1652E+00,1.0858E+00,1.0067E+00,9.2337E-01,8.4648E-01,7.7710E-01/
+ DATA (XUDF_L(K),K= 1255, 1368) /
+ &7.1333E-01,6.6392E-01,6.1566E-01,5.6531E-01,5.1904E-01,4.7761E-01,
+ &4.3908E-01,4.0927E-01,3.8022E-01,3.5109E-01,3.2686E-01,3.1318E-01,
+ &3.0244E-01,2.9602E-01,2.9031E-01,2.8538E-01,2.8024E-01,2.7382E-01,
+ &2.6607E-01,2.5668E-01,2.4571E-01,2.3364E-01,2.2155E-01,2.1116E-01,
+ &2.0617E-01,2.3421E-01,2.2704E-01,2.2320E-01,2.2366E-01,2.2952E-01,
+ &2.4241E-01,2.6402E-01,2.9884E-01,3.5437E-01,4.4860E-01,6.3331E-01,
+ &0.0000E+00,0.0000E+00,7.9784E+00,7.4673E+00,6.9820E+00,6.5121E+00,
+ &6.0712E+00,5.6250E+00,5.2080E+00,4.8065E+00,4.4309E+00,4.0590E+00,
+ &3.7131E+00,3.3843E+00,3.0816E+00,2.9094E+00,2.7332E+00,2.5420E+00,
+ &2.3595E+00,2.1895E+00,2.0271E+00,1.8966E+00,1.7658E+00,1.6248E+00,
+ &1.4933E+00,1.3718E+00,1.2579E+00,1.1683E+00,1.0795E+00,9.8589E-01,
+ &8.9996E-01,8.2253E-01,7.5153E-01,6.9648E-01,6.4287E-01,5.8736E-01,
+ &5.3655E-01,4.9109E-01,4.4891E-01,4.1655E-01,3.8518E-01,3.5367E-01,
+ &3.2738E-01,3.1221E-01,3.0006E-01,2.9246E-01,2.8544E-01,2.7940E-01,
+ &2.7319E-01,2.6601E-01,2.5763E-01,2.4782E-01,2.3676E-01,2.2486E-01,
+ &2.1329E-01,2.0405E-01,2.0083E-01,2.2267E-01,2.1489E-01,2.1027E-01,
+ &2.0967E-01,2.1409E-01,2.2473E-01,2.4320E-01,2.7316E-01,3.2113E-01,
+ &4.0209E-01,5.5899E-01,0.0000E+00,0.0000E+00,9.1575E+00,8.5458E+00,
+ &7.9700E+00,7.4123E+00,6.8876E+00,6.3653E+00,5.8736E+00,5.4042E+00/
+ DATA (XUDF_L(K),K= 1369, 1482) /
+ &4.9684E+00,4.5359E+00,4.1366E+00,3.7576E+00,3.4110E+00,3.2138E+00,
+ &3.0122E+00,2.7943E+00,2.5871E+00,2.3944E+00,2.2102E+00,2.0646E+00,
+ &1.9163E+00,1.7581E+00,1.6109E+00,1.4753E+00,1.3483E+00,1.2486E+00,
+ &1.1500E+00,1.0462E+00,9.5130E-01,8.6585E-01,7.8770E-01,7.2741E-01,
+ &6.6891E-01,6.0781E-01,5.5266E-01,5.0342E-01,4.5788E-01,4.2322E-01,
+ &3.8960E-01,3.5594E-01,3.2768E-01,3.1125E-01,2.9779E-01,2.8890E-01,
+ &2.8091E-01,2.7385E-01,2.6670E-01,2.5886E-01,2.4989E-01,2.3976E-01,
+ &2.2861E-01,2.1703E-01,2.0604E-01,1.9777E-01,1.9598E-01,2.1238E-01,
+ &2.0408E-01,1.9879E-01,1.9735E-01,2.0048E-01,2.0933E-01,2.2523E-01,
+ &2.5120E-01,2.9296E-01,3.6305E-01,4.9711E-01,0.0000E+00,0.0000E+00,
+ &1.0956E+01,1.0188E+01,9.4660E+00,8.7704E+00,8.1209E+00,7.4727E+00,
+ &6.8721E+00,6.2972E+00,5.7646E+00,5.2434E+00,4.7595E+00,4.3051E+00,
+ &3.8911E+00,3.6559E+00,3.4174E+00,3.1598E+00,2.9153E+00,2.6889E+00,
+ &2.4732E+00,2.3031E+00,2.1311E+00,1.9475E+00,1.7771E+00,1.6202E+00,
+ &1.4748E+00,1.3609E+00,1.2481E+00,1.1301E+00,1.0222E+00,9.2549E-01,
+ &8.3728E-01,7.6947E-01,7.0373E-01,6.3561E-01,5.7438E-01,5.1959E-01,
+ &4.6984E-01,4.3187E-01,3.9529E-01,3.5864E-01,3.2783E-01,3.0967E-01,
+ &2.9444E-01,2.8428E-01,2.7469E-01,2.6638E-01,2.5813E-01,2.4942E-01,
+ &2.3986E-01,2.2937E-01,2.1819E-01,2.0682E-01,1.9665E-01,1.8966E-01/
+ DATA (XUDF_L(K),K= 1483, 1596) /
+ &1.8971E-01,1.9926E-01,1.9036E-01,1.8442E-01,1.8192E-01,1.8362E-01,
+ &1.9037E-01,2.0318E-01,2.2459E-01,2.5904E-01,3.1665E-01,4.2407E-01,
+ &0.0000E+00,0.0000E+00,1.2798E+01,1.1861E+01,1.0986E+01,1.0144E+01,
+ &9.3643E+00,8.5887E+00,7.8706E+00,7.1866E+00,6.5568E+00,5.9419E+00,
+ &5.3754E+00,4.8419E+00,4.3593E+00,4.0864E+00,3.8109E+00,3.5127E+00,
+ &3.2315E+00,2.9714E+00,2.7252E+00,2.5309E+00,2.3356E+00,2.1269E+00,
+ &1.9338E+00,1.7578E+00,1.5939E+00,1.4656E+00,1.3394E+00,1.2075E+00,
+ &1.0875E+00,9.8023E-01,8.8256E-01,8.0772E-01,7.3533E-01,6.6054E-01,
+ &5.9364E-01,5.3423E-01,4.8009E-01,4.3930E-01,4.0003E-01,3.6079E-01,
+ &3.2768E-01,3.0809E-01,2.9130E-01,2.7993E-01,2.6898E-01,2.5976E-01,
+ &2.5062E-01,2.4123E-01,2.3116E-01,2.2040E-01,2.0917E-01,1.9814E-01,
+ &1.8865E-01,1.8272E-01,1.8428E-01,1.8820E-01,1.7883E-01,1.7238E-01,
+ &1.6914E-01,1.6979E-01,1.7482E-01,1.8534E-01,2.0325E-01,2.3214E-01,
+ &2.8022E-01,3.6659E-01,0.0000E+00,0.0000E+00,1.4900E+01,1.3767E+01,
+ &1.2708E+01,1.1700E+01,1.0766E+01,9.8403E+00,8.9832E+00,8.1757E+00,
+ &7.4366E+00,6.7121E+00,6.0486E+00,5.4300E+00,4.8704E+00,4.5555E+00,
+ &4.2371E+00,3.8955E+00,3.5734E+00,3.2760E+00,2.9952E+00,2.7738E+00,
+ &2.5528E+00,2.3175E+00,2.1001E+00,1.9012E+00,1.7176E+00,1.5750E+00,
+ &1.4344E+00,1.2880E+00,1.1547E+00,1.0364E+00,9.2859E-01,8.4652E-01/
+ DATA (XUDF_L(K),K= 1597, 1710) /
+ &7.6723E-01,6.8578E-01,6.1255E-01,5.4848E-01,4.9034E-01,4.4649E-01,
+ &4.0456E-01,3.6275E-01,3.2738E-01,3.0624E-01,2.8805E-01,2.7544E-01,
+ &2.6343E-01,2.5315E-01,2.4318E-01,2.3314E-01,2.2263E-01,2.1166E-01,
+ &2.0051E-01,1.8983E-01,1.8102E-01,1.7610E-01,1.7901E-01,1.7764E-01,
+ &1.6791E-01,1.6102E-01,1.5715E-01,1.5684E-01,1.6056E-01,1.6899E-01,
+ &1.8376E-01,2.0786E-01,2.4776E-01,3.1470E-01,0.0000E+00,0.0000E+00,
+ &1.7212E+01,1.5853E+01,1.4590E+01,1.3390E+01,1.2283E+01,1.1191E+01,
+ &1.0185E+01,9.2395E+00,8.3762E+00,7.5315E+00,6.7670E+00,6.0503E+00,
+ &5.4086E+00,5.0481E+00,4.6843E+00,4.2940E+00,3.9280E+00,3.5917E+00,
+ &3.2752E+00,3.0252E+00,2.7768E+00,2.5132E+00,2.2690E+00,2.0490E+00,
+ &1.8445E+00,1.6857E+00,1.5301E+00,1.3685E+00,1.2219E+00,1.0920E+00,
+ &9.7438E-01,8.8478E-01,7.9825E-01,7.1007E-01,6.3111E-01,5.6196E-01,
+ &5.0016E-01,4.5321E-01,4.0867E-01,3.6435E-01,3.2686E-01,3.0431E-01,
+ &2.8470E-01,2.7109E-01,2.5789E-01,2.4674E-01,2.3605E-01,2.2547E-01,
+ &2.1459E-01,2.0348E-01,1.9237E-01,1.8201E-01,1.7376E-01,1.6982E-01,
+ &1.7398E-01,1.6789E-01,1.5795E-01,1.5065E-01,1.4630E-01,1.4521E-01,
+ &1.4773E-01,1.5443E-01,1.6659E-01,1.8664E-01,2.1966E-01,2.6878E-01,
+ &0.0000E+00,0.0000E+00,1.9526E+01,1.7951E+01,1.6470E+01,1.5074E+01,
+ &1.3790E+01,1.2527E+01,1.1370E+01,1.0282E+01,9.2958E+00,8.3330E+00/
+ DATA (XUDF_L(K),K= 1711, 1824) /
+ &7.4603E+00,6.6536E+00,5.9285E+00,5.5219E+00,5.1141E+00,4.6768E+00,
+ &4.2681E+00,3.8926E+00,3.5402E+00,3.2626E+00,2.9882E+00,2.6963E+00,
+ &2.4284E+00,2.1851E+00,1.9619E+00,1.7885E+00,1.6187E+00,1.4429E+00,
+ &1.2838E+00,1.1431E+00,1.0159E+00,9.1924E-01,8.2663E-01,7.3180E-01,
+ &6.4793E-01,5.7429E-01,5.0828E-01,4.5904E-01,4.1215E-01,3.6558E-01,
+ &3.2620E-01,3.0238E-01,2.8167E-01,2.6700E-01,2.5302E-01,2.4098E-01,
+ &2.2975E-01,2.1873E-01,2.0756E-01,1.9633E-01,1.8532E-01,1.7533E-01,
+ &1.6763E-01,1.6450E-01,1.6959E-01,1.5953E-01,1.4943E-01,1.4185E-01,
+ &1.3716E-01,1.3545E-01,1.3705E-01,1.4238E-01,1.5258E-01,1.6945E-01,
+ &1.9705E-01,2.3049E-01,0.0000E+00,0.0000E+00,2.2141E+01,2.0286E+01,
+ &1.8570E+01,1.6948E+01,1.5466E+01,1.4010E+01,1.2679E+01,1.1431E+01,
+ &1.0303E+01,9.2106E+00,8.2239E+00,7.3077E+00,6.4926E+00,6.0348E+00,
+ &5.5765E+00,5.0879E+00,4.6321E+00,4.2138E+00,3.8233E+00,3.5162E+00,
+ &3.2122E+00,2.8907E+00,2.5960E+00,2.3300E+00,2.0856E+00,1.8954E+00,
+ &1.7110E+00,1.5199E+00,1.3476E+00,1.1955E+00,1.0584E+00,9.5478E-01,
+ &8.5531E-01,7.5417E-01,6.6439E-01,5.8623E-01,5.1682E-01,4.6468E-01,
+ &4.1541E-01,3.6662E-01,3.2538E-01,3.0035E-01,2.7843E-01,2.6291E-01,
+ &2.4798E-01,2.3522E-01,2.2346E-01,2.1203E-01,2.0062E-01,1.8935E-01,
+ &1.7843E-01,1.6874E-01,1.6163E-01,1.5920E-01,1.6520E-01,1.5147E-01/
+ DATA (XUDF_L(K),K= 1825, 1836) /
+ &1.4120E-01,1.3349E-01,1.2844E-01,1.2620E-01,1.2701E-01,1.3118E-01,
+ &1.3954E-01,1.5369E-01,1.7631E-01,1.9416E-01,0.0000E+00,0.0000E+00/
+ DATA (XSF_L(K),K= 1, 114) /
+ &8.9277E-03,9.2838E-03,9.6380E-03,9.9960E-03,1.0349E-02,1.0719E-02,
+ &1.1082E-02,1.1442E-02,1.1792E-02,1.2148E-02,1.2489E-02,1.2817E-02,
+ &1.3124E-02,1.3295E-02,1.3474E-02,1.3661E-02,1.3835E-02,1.3985E-02,
+ &1.4121E-02,1.4217E-02,1.4303E-02,1.4379E-02,1.4419E-02,1.4434E-02,
+ &1.4412E-02,1.4366E-02,1.4286E-02,1.4158E-02,1.3991E-02,1.3790E-02,
+ &1.3553E-02,1.3335E-02,1.3094E-02,1.2821E-02,1.2580E-02,1.2410E-02,
+ &1.2357E-02,1.2459E-02,1.2790E-02,1.3571E-02,1.5018E-02,1.6665E-02,
+ &1.9113E-02,2.1832E-02,2.5587E-02,2.9818E-02,3.4535E-02,3.9813E-02,
+ &4.5737E-02,5.2358E-02,5.9765E-02,6.8021E-02,7.7185E-02,8.7258E-02,
+ &9.8198E-02,1.1073E-01,1.4216E-01,1.8364E-01,2.3959E-01,3.1758E-01,
+ &4.3050E-01,6.0203E-01,8.8214E-01,1.3845E+00,2.4294E+00,5.2463E+00,
+ &1.8903E+01,0.0000E+00,1.4987E-02,1.5468E-02,1.5936E-02,1.6403E-02,
+ &1.6855E-02,1.7319E-02,1.7760E-02,1.8194E-02,1.8600E-02,1.9008E-02,
+ &1.9382E-02,1.9730E-02,2.0033E-02,2.0199E-02,2.0359E-02,2.0523E-02,
+ &2.0654E-02,2.0760E-02,2.0831E-02,2.0870E-02,2.0886E-02,2.0858E-02,
+ &2.0798E-02,2.0680E-02,2.0523E-02,2.0363E-02,2.0127E-02,1.9825E-02,
+ &1.9464E-02,1.9060E-02,1.8607E-02,1.8200E-02,1.7750E-02,1.7240E-02,
+ &1.6759E-02,1.6362E-02,1.6103E-02,1.6050E-02,1.6240E-02,1.6916E-02,
+ &1.8336E-02,2.0030E-02,2.2586E-02,2.5447E-02,2.9418E-02,3.3874E-02/
+ DATA (XSF_L(K),K= 115, 228) /
+ &3.8821E-02,4.4375E-02,5.0509E-02,5.7343E-02,6.4974E-02,7.3385E-02,
+ &8.2640E-02,9.2732E-02,1.0354E-01,1.1667E-01,1.4809E-01,1.8910E-01,
+ &2.4387E-01,3.1940E-01,4.2764E-01,5.9054E-01,8.5228E-01,1.3150E+00,
+ &2.2623E+00,4.7596E+00,1.6445E+01,0.0000E+00,2.5010E-02,2.5616E-02,
+ &2.6180E-02,2.6758E-02,2.7279E-02,2.7792E-02,2.8274E-02,2.8729E-02,
+ &2.9134E-02,2.9513E-02,2.9836E-02,3.0110E-02,3.0324E-02,3.0417E-02,
+ &3.0492E-02,3.0537E-02,3.0551E-02,3.0517E-02,3.0432E-02,3.0326E-02,
+ &3.0181E-02,2.9954E-02,2.9663E-02,2.9316E-02,2.8913E-02,2.8508E-02,
+ &2.8021E-02,2.7422E-02,2.6741E-02,2.5997E-02,2.5204E-02,2.4500E-02,
+ &2.3734E-02,2.2858E-02,2.2019E-02,2.1281E-02,2.0698E-02,2.0402E-02,
+ &2.0365E-02,2.0844E-02,2.2137E-02,2.3807E-02,2.6404E-02,2.9338E-02,
+ &3.3433E-02,3.8036E-02,4.3135E-02,4.8799E-02,5.5061E-02,6.1999E-02,
+ &6.9633E-02,7.8024E-02,8.7156E-02,9.6998E-02,1.0742E-01,1.2099E-01,
+ &1.5162E-01,1.9121E-01,2.4363E-01,3.1510E-01,4.1638E-01,5.6669E-01,
+ &8.0557E-01,1.2216E+00,2.0572E+00,4.2084E+00,1.3911E+01,0.0000E+00,
+ &4.2554E-02,4.3210E-02,4.3820E-02,4.4379E-02,4.4862E-02,4.5317E-02,
+ &4.5708E-02,4.6037E-02,4.6300E-02,4.6434E-02,4.6540E-02,4.6530E-02,
+ &4.6426E-02,4.6317E-02,4.6155E-02,4.5919E-02,4.5622E-02,4.5267E-02,
+ &4.4833E-02,4.4425E-02,4.3932E-02,4.3298E-02,4.2582E-02,4.1785E-02/
+ DATA (XSF_L(K),K= 229, 342) /
+ &4.0903E-02,4.0097E-02,3.9179E-02,3.8047E-02,3.6815E-02,3.5547E-02,
+ &3.4199E-02,3.3020E-02,3.1748E-02,3.0298E-02,2.8905E-02,2.7644E-02,
+ &2.6563E-02,2.5882E-02,2.5485E-02,2.5614E-02,2.6651E-02,2.8199E-02,
+ &3.0731E-02,3.3652E-02,3.7768E-02,4.2390E-02,4.7530E-02,5.3188E-02,
+ &5.9436E-02,6.6257E-02,7.3734E-02,8.1918E-02,9.0696E-02,1.0004E-01,
+ &1.0978E-01,1.2357E-01,1.5274E-01,1.8999E-01,2.3888E-01,3.0452E-01,
+ &3.9656E-01,5.3136E-01,7.4246E-01,1.1043E+00,1.8158E+00,3.6023E+00,
+ &0.0000E+00,0.0000E+00,7.3602E-02,7.4085E-02,7.4460E-02,7.4729E-02,
+ &7.4904E-02,7.4982E-02,7.4902E-02,7.4713E-02,7.4446E-02,7.3972E-02,
+ &7.3397E-02,7.2626E-02,7.1803E-02,7.1200E-02,7.0479E-02,6.9610E-02,
+ &6.8654E-02,6.7624E-02,6.6495E-02,6.5467E-02,6.4313E-02,6.2898E-02,
+ &6.1380E-02,5.9788E-02,5.8079E-02,5.6557E-02,5.4876E-02,5.2866E-02,
+ &5.0733E-02,4.8592E-02,4.6341E-02,4.4415E-02,4.2370E-02,4.0073E-02,
+ &3.7825E-02,3.5778E-02,3.3956E-02,3.2702E-02,3.1749E-02,3.1334E-02,
+ &3.1922E-02,3.3216E-02,3.5534E-02,3.8322E-02,4.2321E-02,4.6830E-02,
+ &5.1816E-02,5.7335E-02,6.3369E-02,6.9947E-02,7.7109E-02,8.4752E-02,
+ &9.2948E-02,1.0153E-01,1.1031E-01,1.2405E-01,1.5100E-01,1.8509E-01,
+ &2.2905E-01,2.8761E-01,3.6847E-01,4.8537E-01,6.6543E-01,9.6831E-01,
+ &1.5524E+00,2.9766E+00,0.0000E+00,0.0000E+00,1.1509E-01,1.1500E-01/
+ DATA (XSF_L(K),K= 343, 456) /
+ &1.1474E-01,1.1430E-01,1.1371E-01,1.1292E-01,1.1196E-01,1.1079E-01,
+ &1.0948E-01,1.0791E-01,1.0620E-01,1.0426E-01,1.0215E-01,1.0076E-01,
+ &9.9224E-02,9.7466E-02,9.5472E-02,9.3507E-02,9.1346E-02,8.9460E-02,
+ &8.7382E-02,8.4914E-02,8.2326E-02,7.9663E-02,7.6874E-02,7.4459E-02,
+ &7.1794E-02,6.8694E-02,6.5489E-02,6.2266E-02,5.8964E-02,5.6164E-02,
+ &5.3226E-02,4.9916E-02,4.6721E-02,4.3794E-02,4.1128E-02,3.9225E-02,
+ &3.7654E-02,3.6613E-02,3.6666E-02,3.7626E-02,3.9655E-02,4.2227E-02,
+ &4.6000E-02,5.0288E-02,5.5044E-02,6.0308E-02,6.6020E-02,7.2218E-02,
+ &7.8943E-02,8.6079E-02,9.3611E-02,1.0141E-01,1.0925E-01,1.2274E-01,
+ &1.4748E-01,1.7840E-01,2.1791E-01,2.6997E-01,3.4109E-01,4.4280E-01,
+ &5.9706E-01,8.5325E-01,1.3371E+00,2.4909E+00,0.0000E+00,0.0000E+00,
+ &1.8131E-01,1.7986E-01,1.7802E-01,1.7597E-01,1.7372E-01,1.7110E-01,
+ &1.6825E-01,1.6515E-01,1.6187E-01,1.5820E-01,1.5428E-01,1.5016E-01,
+ &1.4582E-01,1.4314E-01,1.4017E-01,1.3677E-01,1.3315E-01,1.2951E-01,
+ &1.2571E-01,1.2248E-01,1.1891E-01,1.1472E-01,1.1045E-01,1.0615E-01,
+ &1.0173E-01,9.7944E-02,9.3854E-02,8.9131E-02,8.4347E-02,7.9597E-02,
+ &7.4799E-02,7.0788E-02,6.6599E-02,6.1932E-02,5.7438E-02,5.3307E-02,
+ &4.9546E-02,4.6816E-02,4.4417E-02,4.2536E-02,4.1862E-02,4.2361E-02,
+ &4.3960E-02,4.6198E-02,4.9612E-02,5.3553E-02,5.7974E-02,6.2830E-02/
+ DATA (XSF_L(K),K= 457, 570) /
+ &6.8141E-02,7.3865E-02,7.9970E-02,8.6422E-02,9.3160E-02,1.0006E-01,
+ &1.0685E-01,1.1989E-01,1.4199E-01,1.6937E-01,2.0407E-01,2.4925E-01,
+ &3.1029E-01,3.9635E-01,5.2529E-01,7.3579E-01,1.1263E+00,2.0347E+00,
+ &0.0000E+00,0.0000E+00,2.6278E-01,2.5883E-01,2.5460E-01,2.5007E-01,
+ &2.4526E-01,2.3995E-01,2.3437E-01,2.2848E-01,2.2242E-01,2.1578E-01,
+ &2.0894E-01,2.0181E-01,1.9465E-01,1.9018E-01,1.8540E-01,1.7984E-01,
+ &1.7415E-01,1.6846E-01,1.6261E-01,1.5768E-01,1.5234E-01,1.4615E-01,
+ &1.3987E-01,1.3368E-01,1.2736E-01,1.2199E-01,1.1628E-01,1.0975E-01,
+ &1.0321E-01,9.6788E-02,9.0380E-02,8.5059E-02,7.9532E-02,7.3436E-02,
+ &6.7594E-02,6.2243E-02,5.7363E-02,5.3720E-02,5.0502E-02,4.7772E-02,
+ &4.6346E-02,4.6358E-02,4.7497E-02,4.9377E-02,5.2401E-02,5.5965E-02,
+ &6.0009E-02,6.4489E-02,6.9334E-02,7.4546E-02,8.0117E-02,8.5936E-02,
+ &9.1972E-02,9.8056E-02,1.0398E-01,1.1644E-01,1.3628E-01,1.6068E-01,
+ &1.9127E-01,2.3085E-01,2.8377E-01,3.5756E-01,4.6698E-01,6.4315E-01,
+ &9.6485E-01,1.6969E+00,0.0000E+00,0.0000E+00,3.6944E-01,3.6187E-01,
+ &3.5380E-01,3.4525E-01,3.3659E-01,3.2716E-01,3.1761E-01,3.0767E-01,
+ &2.9759E-01,2.8675E-01,2.7586E-01,2.6462E-01,2.5339E-01,2.4660E-01,
+ &2.3933E-01,2.3101E-01,2.2257E-01,2.1415E-01,2.0571E-01,1.9854E-01,
+ &1.9083E-01,1.8216E-01,1.7338E-01,1.6480E-01,1.5613E-01,1.4885E-01/
+ DATA (XSF_L(K),K= 571, 684) /
+ &1.4115E-01,1.3244E-01,1.2380E-01,1.1542E-01,1.0713E-01,1.0031E-01,
+ &9.3226E-02,8.5515E-02,7.8171E-02,7.1449E-02,6.5307E-02,6.0723E-02,
+ &5.6523E-02,5.2878E-02,5.0622E-02,5.0109E-02,5.0720E-02,5.2187E-02,
+ &5.4770E-02,5.7950E-02,6.1582E-02,6.5595E-02,6.9997E-02,7.4716E-02,
+ &7.9677E-02,8.4886E-02,9.0221E-02,9.5543E-02,1.0065E-01,1.1245E-01,
+ &1.3012E-01,1.5166E-01,1.7859E-01,2.1305E-01,2.5881E-01,3.2188E-01,
+ &4.1454E-01,5.6186E-01,8.2718E-01,1.4188E+00,0.0000E+00,0.0000E+00,
+ &4.9195E-01,4.7916E-01,4.6620E-01,4.5277E-01,4.3908E-01,4.2463E-01,
+ &4.0985E-01,3.9491E-01,3.7975E-01,3.6377E-01,3.4790E-01,3.3178E-01,
+ &3.1592E-01,3.0640E-01,2.9622E-01,2.8462E-01,2.7303E-01,2.6160E-01,
+ &2.5012E-01,2.4047E-01,2.3023E-01,2.1867E-01,2.0717E-01,1.9597E-01,
+ &1.8477E-01,1.7546E-01,1.6568E-01,1.5468E-01,1.4387E-01,1.3343E-01,
+ &1.2319E-01,1.1482E-01,1.0622E-01,9.6828E-02,8.7978E-02,7.9884E-02,
+ &7.2526E-02,6.6973E-02,6.1948E-02,5.7359E-02,5.4304E-02,5.3263E-02,
+ &5.3381E-02,5.4456E-02,5.6601E-02,5.9380E-02,6.2613E-02,6.6252E-02,
+ &7.0174E-02,7.4432E-02,7.8943E-02,8.3559E-02,8.8282E-02,9.2963E-02,
+ &9.7382E-02,1.0858E-01,1.2441E-01,1.4363E-01,1.6745E-01,1.9778E-01,
+ &2.3771E-01,2.9246E-01,3.7200E-01,4.9738E-01,7.2010E-01,1.2083E+00,
+ &0.0000E+00,0.0000E+00,6.4521E-01,6.2534E-01,6.0540E-01,5.8499E-01/
+ DATA (XSF_L(K),K= 685, 798) /
+ &5.6467E-01,5.4301E-01,5.2143E-01,4.9951E-01,4.7813E-01,4.5538E-01,
+ &4.3325E-01,4.1083E-01,3.8899E-01,3.7591E-01,3.6210E-01,3.4648E-01,
+ &3.3091E-01,3.1578E-01,3.0062E-01,2.8797E-01,2.7469E-01,2.5979E-01,
+ &2.4501E-01,2.3066E-01,2.1649E-01,2.0481E-01,1.9252E-01,1.7884E-01,
+ &1.6549E-01,1.5274E-01,1.4029E-01,1.3018E-01,1.1985E-01,1.0865E-01,
+ &9.8135E-02,8.8550E-02,7.9829E-02,7.3318E-02,6.7269E-02,6.1748E-02,
+ &5.7838E-02,5.6250E-02,5.5826E-02,5.6474E-02,5.8181E-02,6.0533E-02,
+ &6.3373E-02,6.6563E-02,7.0085E-02,7.3865E-02,7.7842E-02,8.1937E-02,
+ &8.6092E-02,9.0169E-02,9.3962E-02,1.0448E-01,1.1858E-01,1.3561E-01,
+ &1.5663E-01,1.8318E-01,2.1803E-01,2.6529E-01,3.3349E-01,4.3985E-01,
+ &6.2661E-01,1.0291E+00,0.0000E+00,0.0000E+00,8.2462E-01,7.9558E-01,
+ &7.6680E-01,7.3764E-01,7.0860E-01,6.7834E-01,6.4822E-01,6.1798E-01,
+ &5.8880E-01,5.5792E-01,5.2800E-01,4.9801E-01,4.6912E-01,4.5197E-01,
+ &4.3393E-01,4.1360E-01,3.9348E-01,3.7394E-01,3.5462E-01,3.3856E-01,
+ &3.2180E-01,3.0303E-01,2.8460E-01,2.6681E-01,2.4932E-01,2.3502E-01,
+ &2.2005E-01,2.0359E-01,1.8747E-01,1.7224E-01,1.5746E-01,1.4551E-01,
+ &1.3337E-01,1.2028E-01,1.0805E-01,9.6986E-02,8.6877E-02,7.9334E-02,
+ &7.2326E-02,6.5799E-02,6.1060E-02,5.8911E-02,5.7957E-02,5.8189E-02,
+ &5.9441E-02,6.1387E-02,6.3834E-02,6.6632E-02,6.9732E-02,7.3070E-02/
+ DATA (XSF_L(K),K= 799, 912) /
+ &7.6595E-02,8.0190E-02,8.3816E-02,8.7358E-02,9.0631E-02,1.0046E-01,
+ &1.1304E-01,1.2815E-01,1.4670E-01,1.7006E-01,2.0049E-01,2.4154E-01,
+ &3.0039E-01,3.9121E-01,5.4894E-01,8.8378E-01,0.0000E+00,0.0000E+00,
+ &1.0199E+00,9.8025E-01,9.4100E-01,9.0151E-01,8.6283E-01,8.2243E-01,
+ &7.8262E-01,7.4321E-01,7.0465E-01,6.6494E-01,6.2647E-01,5.8811E-01,
+ &5.5152E-01,5.2985E-01,5.0721E-01,4.8183E-01,4.5681E-01,4.3274E-01,
+ &4.0883E-01,3.8916E-01,3.6878E-01,3.4589E-01,3.2366E-01,3.0238E-01,
+ &2.8152E-01,2.6437E-01,2.4685E-01,2.2733E-01,2.0858E-01,1.9085E-01,
+ &1.7375E-01,1.6000E-01,1.4607E-01,1.3115E-01,1.1722E-01,1.0469E-01,
+ &9.3284E-02,8.4739E-02,7.6803E-02,6.9420E-02,6.3844E-02,6.1178E-02,
+ &5.9720E-02,5.9561E-02,6.0398E-02,6.1984E-02,6.4051E-02,6.6494E-02,
+ &6.9202E-02,7.2161E-02,7.5274E-02,7.8453E-02,8.1651E-02,8.4728E-02,
+ &8.7564E-02,9.6777E-02,1.0806E-01,1.2157E-01,1.3806E-01,1.5882E-01,
+ &1.8566E-01,2.2170E-01,2.7301E-01,3.5168E-01,4.8696E-01,7.7010E-01,
+ &0.0000E+00,0.0000E+00,1.3158E+00,1.2585E+00,1.2024E+00,1.1462E+00,
+ &1.0919E+00,1.0352E+00,9.8042E-01,9.2608E-01,8.7345E-01,8.1987E-01,
+ &7.6814E-01,7.1724E-01,6.6882E-01,6.4053E-01,6.1093E-01,5.7796E-01,
+ &5.4572E-01,5.1470E-01,4.8433E-01,4.5934E-01,4.3358E-01,4.0495E-01,
+ &3.7717E-01,3.5082E-01,3.2513E-01,3.0408E-01,2.8258E-01,2.5918E-01/
+ DATA (XSF_L(K),K= 913, 1026) /
+ &2.3648E-01,2.1538E-01,1.9510E-01,1.7888E-01,1.6255E-01,1.4508E-01,
+ &1.2895E-01,1.1443E-01,1.0131E-01,9.1507E-02,8.2387E-02,7.3778E-02,
+ &6.7147E-02,6.3813E-02,6.1721E-02,6.1065E-02,6.1373E-02,6.2475E-02,
+ &6.4105E-02,6.6079E-02,6.8362E-02,7.0856E-02,7.3440E-02,7.6143E-02,
+ &7.8812E-02,8.1388E-02,8.3726E-02,9.2167E-02,1.0190E-01,1.1355E-01,
+ &1.2780E-01,1.4554E-01,1.6841E-01,1.9900E-01,2.4223E-01,3.0775E-01,
+ &4.1920E-01,6.4849E-01,0.0000E+00,0.0000E+00,1.6483E+00,1.5703E+00,
+ &1.4940E+00,1.4180E+00,1.3449E+00,1.2694E+00,1.1966E+00,1.1250E+00,
+ &1.0566E+00,9.8644E-01,9.1985E-01,8.5482E-01,7.9312E-01,7.5722E-01,
+ &7.1986E-01,6.7849E-01,6.3821E-01,5.9972E-01,5.6214E-01,5.3143E-01,
+ &4.9987E-01,4.6500E-01,4.3136E-01,3.9956E-01,3.6875E-01,3.4379E-01,
+ &3.1832E-01,2.9044E-01,2.6397E-01,2.3923E-01,2.1580E-01,1.9706E-01,
+ &1.7829E-01,1.5838E-01,1.3999E-01,1.2356E-01,1.0875E-01,9.7664E-02,
+ &8.7392E-02,7.7645E-02,7.0035E-02,6.6062E-02,6.3365E-02,6.2239E-02,
+ &6.2062E-02,6.2731E-02,6.3942E-02,6.5526E-02,6.7390E-02,6.9436E-02,
+ &7.1635E-02,7.3891E-02,7.6122E-02,7.8246E-02,8.0196E-02,8.7884E-02,
+ &9.6357E-02,1.0648E-01,1.1880E-01,1.3413E-01,1.5386E-01,1.7993E-01,
+ &2.1655E-01,2.7189E-01,3.6486E-01,5.5332E-01,0.0000E+00,0.0000E+00,
+ &2.0271E+00,1.9234E+00,1.8224E+00,1.7226E+00,1.6272E+00,1.5293E+00/
+ DATA (XSF_L(K),K= 1027, 1140) /
+ &1.4356E+00,1.3438E+00,1.2568E+00,1.1682E+00,1.0841E+00,1.0026E+00,
+ &9.2625E-01,8.8207E-01,8.3568E-01,7.8523E-01,7.3607E-01,6.8926E-01,
+ &6.4385E-01,6.0685E-01,5.6892E-01,5.2730E-01,4.8731E-01,4.4961E-01,
+ &4.1331E-01,3.8417E-01,3.5441E-01,3.2210E-01,2.9168E-01,2.6323E-01,
+ &2.3631E-01,2.1500E-01,1.9374E-01,1.7129E-01,1.5067E-01,1.3231E-01,
+ &1.1579E-01,1.0349E-01,9.2080E-02,8.1205E-02,7.2626E-02,6.8039E-02,
+ &6.4761E-02,6.3188E-02,6.2549E-02,6.2795E-02,6.3617E-02,6.4835E-02,
+ &6.6329E-02,6.8017E-02,6.9809E-02,7.1667E-02,7.3520E-02,7.5270E-02,
+ &7.6864E-02,8.3899E-02,9.1206E-02,1.0002E-01,1.1070E-01,1.2399E-01,
+ &1.4094E-01,1.6341E-01,1.9474E-01,2.4163E-01,3.1971E-01,4.7587E-01,
+ &0.0000E+00,0.0000E+00,2.4392E+00,2.3049E+00,2.1760E+00,2.0502E+00,
+ &1.9296E+00,1.8065E+00,1.6895E+00,1.5750E+00,1.4674E+00,1.3585E+00,
+ &1.2554E+00,1.1565E+00,1.0638E+00,1.0103E+00,9.5527E-01,8.9449E-01,
+ &8.3572E-01,7.8018E-01,7.2635E-01,6.8280E-01,6.3819E-01,5.8948E-01,
+ &5.4299E-01,4.9923E-01,4.5740E-01,4.2371E-01,3.8978E-01,3.5296E-01,
+ &3.1832E-01,2.8629E-01,2.5599E-01,2.3212E-01,2.0840E-01,1.8346E-01,
+ &1.6065E-01,1.4043E-01,1.2229E-01,1.0880E-01,9.6294E-02,8.4335E-02,
+ &7.4905E-02,6.9717E-02,6.5897E-02,6.3914E-02,6.2851E-02,6.2731E-02,
+ &6.3183E-02,6.4075E-02,6.5225E-02,6.6597E-02,6.8048E-02,6.9577E-02/
+ DATA (XSF_L(K),K= 1141, 1254) /
+ &7.1093E-02,7.2525E-02,7.3842E-02,8.0241E-02,8.6615E-02,9.4292E-02,
+ &1.0360E-01,1.1517E-01,1.2992E-01,1.4936E-01,1.7633E-01,2.1652E-01,
+ &2.8294E-01,4.1389E-01,0.0000E+00,0.0000E+00,2.9162E+00,2.7470E+00,
+ &2.5840E+00,2.4244E+00,2.2743E+00,2.1215E+00,1.9764E+00,1.8358E+00,
+ &1.7035E+00,1.5708E+00,1.4463E+00,1.3268E+00,1.2152E+00,1.1514E+00,
+ &1.0857E+00,1.0132E+00,9.4449E-01,8.7867E-01,8.1556E-01,7.6453E-01,
+ &7.1252E-01,6.5602E-01,6.0218E-01,5.5192E-01,5.0387E-01,4.6545E-01,
+ &4.2679E-01,3.8521E-01,3.4602E-01,3.1005E-01,2.7623E-01,2.4962E-01,
+ &2.2332E-01,1.9577E-01,1.7070E-01,1.4856E-01,1.2874E-01,1.1402E-01,
+ &1.0040E-01,8.7343E-02,7.6984E-02,7.1254E-02,6.6892E-02,6.4508E-02,
+ &6.3019E-02,6.2518E-02,6.2667E-02,6.3211E-02,6.4031E-02,6.5064E-02,
+ &6.6243E-02,6.7458E-02,6.8679E-02,6.9830E-02,7.0885E-02,7.6672E-02,
+ &8.2192E-02,8.8844E-02,9.6930E-02,1.0696E-01,1.1972E-01,1.3654E-01,
+ &1.5978E-01,1.9411E-01,2.5048E-01,3.6023E-01,0.0000E+00,0.0000E+00,
+ &3.4281E+00,3.2194E+00,3.0180E+00,2.8239E+00,2.6400E+00,2.4537E+00,
+ &2.2781E+00,2.1087E+00,1.9503E+00,1.7915E+00,1.6433E+00,1.5021E+00,
+ &1.3711E+00,1.2958E+00,1.2191E+00,1.1350E+00,1.0536E+00,9.7846E-01,
+ &9.0526E-01,8.4668E-01,7.8697E-01,7.2243E-01,6.6110E-01,6.0402E-01,
+ &5.4971E-01,5.0652E-01,4.6307E-01,4.1647E-01,3.7287E-01,3.3288E-01/
+ DATA (XSF_L(K),K= 1255, 1368) /
+ &2.9545E-01,2.6636E-01,2.3751E-01,2.0740E-01,1.8012E-01,1.5611E-01,
+ &1.3467E-01,1.1881E-01,1.0414E-01,9.0105E-02,7.8839E-02,7.2563E-02,
+ &6.7703E-02,6.4930E-02,6.3070E-02,6.2241E-02,6.2071E-02,6.2347E-02,
+ &6.2882E-02,6.3645E-02,6.4526E-02,6.5473E-02,6.6427E-02,6.7333E-02,
+ &6.8194E-02,7.3430E-02,7.8217E-02,8.3974E-02,9.1017E-02,9.9745E-02,
+ &1.1088E-01,1.2552E-01,1.4563E-01,1.7528E-01,2.2351E-01,3.1636E-01,
+ &0.0000E+00,0.0000E+00,3.9892E+00,3.7328E+00,3.4900E+00,3.2549E+00,
+ &3.0344E+00,2.8108E+00,2.6014E+00,2.4001E+00,2.2123E+00,2.0253E+00,
+ &1.8518E+00,1.6860E+00,1.5339E+00,1.4463E+00,1.3575E+00,1.2608E+00,
+ &1.1678E+00,1.0809E+00,9.9767E-01,9.3087E-01,8.6314E-01,7.8996E-01,
+ &7.2083E-01,6.5671E-01,5.9602E-01,5.4775E-01,4.9935E-01,4.4773E-01,
+ &3.9951E-01,3.5571E-01,3.1467E-01,2.8272E-01,2.5135E-01,2.1871E-01,
+ &1.8923E-01,1.6331E-01,1.4031E-01,1.2332E-01,1.0762E-01,9.2560E-02,
+ &8.0473E-02,7.3714E-02,6.8385E-02,6.5246E-02,6.3019E-02,6.1878E-02,
+ &6.1420E-02,6.1413E-02,6.1734E-02,6.2226E-02,6.2861E-02,6.3564E-02,
+ &6.4288E-02,6.4985E-02,6.5657E-02,7.0367E-02,7.4522E-02,7.9506E-02,
+ &8.5651E-02,9.3297E-02,1.0298E-01,1.1572E-01,1.3323E-01,1.5884E-01,
+ &2.0039E-01,2.7925E-01,0.0000E+00,0.0000E+00,4.5788E+00,4.2729E+00,
+ &3.9840E+00,3.7039E+00,3.4438E+00,3.1812E+00,2.9349E+00,2.6996E+00/
+ DATA (XSF_L(K),K= 1369, 1482) /
+ &2.4810E+00,2.2644E+00,2.0633E+00,1.8732E+00,1.6979E+00,1.5988E+00,
+ &1.4974E+00,1.3865E+00,1.2812E+00,1.1834E+00,1.0891E+00,1.0143E+00,
+ &9.3839E-01,8.5662E-01,7.7948E-01,7.0838E-01,6.4106E-01,5.8780E-01,
+ &5.3454E-01,4.7781E-01,4.2528E-01,3.7737E-01,3.3289E-01,2.9818E-01,
+ &2.6446E-01,2.2932E-01,1.9770E-01,1.7005E-01,1.4552E-01,1.2746E-01,
+ &1.1078E-01,9.4770E-02,8.1957E-02,7.4689E-02,6.8915E-02,6.5457E-02,
+ &6.2902E-02,6.1493E-02,6.0768E-02,6.0515E-02,6.0585E-02,6.0863E-02,
+ &6.1298E-02,6.1789E-02,6.2311E-02,6.2835E-02,6.3340E-02,6.7601E-02,
+ &7.1162E-02,7.5516E-02,8.0878E-02,8.7566E-02,9.6095E-02,1.0725E-01,
+ &1.2258E-01,1.4495E-01,1.8090E-01,2.4841E-01,0.0000E+00,0.0000E+00,
+ &5.4774E+00,5.0929E+00,4.7320E+00,4.3841E+00,4.0592E+00,3.7350E+00,
+ &3.4329E+00,3.1454E+00,2.8799E+00,2.6172E+00,2.3747E+00,2.1466E+00,
+ &1.9383E+00,1.8195E+00,1.6996E+00,1.5689E+00,1.4457E+00,1.3301E+00,
+ &1.2211E+00,1.1339E+00,1.0456E+00,9.5119E-01,8.6259E-01,7.8097E-01,
+ &7.0419E-01,6.4380E-01,5.8358E-01,5.1955E-01,4.6051E-01,4.0719E-01,
+ &3.5768E-01,3.1962E-01,2.8220E-01,2.4360E-01,2.0909E-01,1.7895E-01,
+ &1.5240E-01,1.3282E-01,1.1484E-01,9.7655E-02,8.3739E-02,7.5857E-02,
+ &6.9509E-02,6.5616E-02,6.2633E-02,6.0853E-02,5.9819E-02,5.9271E-02,
+ &5.9038E-02,5.9046E-02,5.9192E-02,5.9432E-02,5.9709E-02,6.0008E-02/
+ DATA (XSF_L(K),K= 1483, 1596) /
+ &6.0340E-02,6.4032E-02,6.6851E-02,7.0446E-02,7.4870E-02,8.0457E-02,
+ &8.7554E-02,9.6862E-02,1.0964E-01,1.2821E-01,1.5779E-01,2.1189E-01,
+ &0.0000E+00,0.0000E+00,6.3982E+00,5.9307E+00,5.4920E+00,5.0710E+00,
+ &4.6822E+00,4.2915E+00,3.9337E+00,3.5898E+00,3.2756E+00,2.9660E+00,
+ &2.6817E+00,2.4150E+00,2.1724E+00,2.0348E+00,1.8961E+00,1.7457E+00,
+ &1.6034E+00,1.4714E+00,1.3471E+00,1.2473E+00,1.1476E+00,1.0408E+00,
+ &9.4083E-01,8.4932E-01,7.6350E-01,6.9606E-01,6.2897E-01,5.5833E-01,
+ &4.9315E-01,4.3444E-01,3.8044E-01,3.3861E-01,2.9817E-01,2.5642E-01,
+ &2.1917E-01,1.8685E-01,1.5838E-01,1.3752E-01,1.1831E-01,9.9987E-02,
+ &8.5224E-02,7.6762E-02,6.9910E-02,6.5655E-02,6.2297E-02,6.0213E-02,
+ &5.8897E-02,5.8096E-02,5.7624E-02,5.7400E-02,5.7322E-02,5.7351E-02,
+ &5.7432E-02,5.7560E-02,5.7758E-02,6.0939E-02,6.3212E-02,6.6167E-02,
+ &6.9884E-02,7.4560E-02,8.0552E-02,8.8432E-02,9.9242E-02,1.1491E-01,
+ &1.3966E-01,1.8320E-01,0.0000E+00,0.0000E+00,7.4490E+00,6.8826E+00,
+ &6.3540E+00,5.8477E+00,5.3805E+00,4.9187E+00,4.4884E+00,4.0843E+00,
+ &3.7147E+00,3.3516E+00,3.0193E+00,2.7088E+00,2.4279E+00,2.2696E+00,
+ &2.1091E+00,1.9368E+00,1.7739E+00,1.6237E+00,1.4821E+00,1.3692E+00,
+ &1.2557E+00,1.1358E+00,1.0238E+00,9.2133E-01,8.2567E-01,7.5070E-01,
+ &6.7656E-01,5.9850E-01,5.2688E-01,4.6263E-01,4.0371E-01,3.5842E-01/
+ DATA (XSF_L(K),K= 1597, 1710) /
+ &3.1427E-01,2.6933E-01,2.2930E-01,1.9466E-01,1.6427E-01,1.4208E-01,
+ &1.2168E-01,1.0226E-01,8.6560E-02,7.7553E-02,7.0202E-02,6.5576E-02,
+ &6.1860E-02,5.9487E-02,5.7920E-02,5.6852E-02,5.6166E-02,5.5736E-02,
+ &5.5458E-02,5.5289E-02,5.5193E-02,5.5163E-02,5.5243E-02,5.7935E-02,
+ &5.9740E-02,6.2111E-02,6.5158E-02,6.9050E-02,7.4078E-02,8.0683E-02,
+ &8.9776E-02,1.0288E-01,1.2351E-01,1.5725E-01,0.0000E+00,0.0000E+00,
+ &8.6044E+00,7.9255E+00,7.2940E+00,6.6940E+00,6.1391E+00,5.5940E+00,
+ &5.0907E+00,4.6180E+00,4.1841E+00,3.7622E+00,3.3775E+00,3.0195E+00,
+ &2.6967E+00,2.5153E+00,2.3331E+00,2.1364E+00,1.9521E+00,1.7815E+00,
+ &1.6211E+00,1.4944E+00,1.3683E+00,1.2334E+00,1.1084E+00,9.9465E-01,
+ &8.8864E-01,8.0585E-01,7.2432E-01,6.3866E-01,5.6038E-01,4.9058E-01,
+ &4.2648E-01,3.7768E-01,3.3036E-01,2.8189E-01,2.3907E-01,2.0214E-01,
+ &1.6987E-01,1.4635E-01,1.2479E-01,1.0428E-01,8.7748E-02,7.8203E-02,
+ &7.0386E-02,6.5431E-02,6.1373E-02,5.8719E-02,5.6916E-02,5.5642E-02,
+ &5.4751E-02,5.4118E-02,5.3653E-02,5.3314E-02,5.3067E-02,5.2897E-02,
+ &5.2861E-02,5.5140E-02,5.6493E-02,5.8378E-02,6.0860E-02,6.4090E-02,
+ &6.8261E-02,7.3828E-02,8.1439E-02,9.2423E-02,1.0952E-01,1.3424E-01,
+ &0.0000E+00,0.0000E+00,9.7645E+00,8.9701E+00,8.2340E+00,7.5357E+00,
+ &6.8926E+00,6.2607E+00,5.6834E+00,5.1374E+00,4.6459E+00,4.1625E+00/
+ DATA (XSF_L(K),K= 1711, 1824) /
+ &3.7261E+00,3.3206E+00,2.9567E+00,2.7529E+00,2.5476E+00,2.3274E+00,
+ &2.1217E+00,1.9320E+00,1.7541E+00,1.6131E+00,1.4740E+00,1.3257E+00,
+ &1.1879E+00,1.0631E+00,9.4732E-01,8.5726E-01,7.6844E-01,6.7586E-01,
+ &5.9131E-01,5.1597E-01,4.4748E-01,3.9504E-01,3.4470E-01,2.9317E-01,
+ &2.4779E-01,2.0880E-01,1.7478E-01,1.5007E-01,1.2748E-01,1.0600E-01,
+ &8.8713E-02,7.8704E-02,7.0472E-02,6.5220E-02,6.0885E-02,5.7993E-02,
+ &5.5967E-02,5.4536E-02,5.3470E-02,5.2665E-02,5.2054E-02,5.1577E-02,
+ &5.1203E-02,5.0930E-02,5.0809E-02,5.2731E-02,5.3716E-02,5.5192E-02,
+ &5.7203E-02,5.9902E-02,6.3412E-02,6.8123E-02,7.4602E-02,8.3905E-02,
+ &9.8185E-02,1.1515E-01,0.0000E+00,0.0000E+00,1.1069E+01,1.0141E+01,
+ &9.2840E+00,8.4741E+00,7.7316E+00,7.0038E+00,6.3364E+00,5.7137E+00,
+ &5.1475E+00,4.6031E+00,4.1059E+00,3.6477E+00,3.2381E+00,3.0086E+00,
+ &2.7788E+00,2.5333E+00,2.3033E+00,2.0926E+00,1.8951E+00,1.7404E+00,
+ &1.5854E+00,1.4229E+00,1.2715E+00,1.1352E+00,1.0089E+00,9.1089E-01,
+ &8.1457E-01,7.1424E-01,6.2332E-01,5.4229E-01,4.6872E-01,4.1295E-01,
+ &3.5903E-01,3.0454E-01,2.5654E-01,2.1539E-01,1.7965E-01,1.5373E-01,
+ &1.3011E-01,1.0766E-01,8.9530E-02,7.9108E-02,7.0483E-02,6.4943E-02,
+ &6.0331E-02,5.7203E-02,5.4990E-02,5.3395E-02,5.2144E-02,5.1206E-02,
+ &5.0454E-02,4.9840E-02,4.9351E-02,4.8978E-02,4.8801E-02,5.0351E-02/
+ DATA (XSF_L(K),K= 1825, 1836) /
+ &5.1017E-02,5.2127E-02,5.3737E-02,5.5934E-02,5.8835E-02,6.2800E-02,
+ &6.8260E-02,7.6135E-02,8.7873E-02,0.0000E+00,0.0000E+00,0.0000E+00/
+ DATA (XGF_L(K),K= 1, 114) /
+ &1.0646E+00,1.0934E+00,1.1214E+00,1.1484E+00,1.1741E+00,1.1999E+00,
+ &1.2242E+00,1.2466E+00,1.2676E+00,1.2873E+00,1.3042E+00,1.3194E+00,
+ &1.3313E+00,1.3376E+00,1.3430E+00,1.3472E+00,1.3502E+00,1.3504E+00,
+ &1.3501E+00,1.3478E+00,1.3430E+00,1.3356E+00,1.3267E+00,1.3149E+00,
+ &1.3003E+00,1.2857E+00,1.2680E+00,1.2451E+00,1.2189E+00,1.1899E+00,
+ &1.1575E+00,1.1282E+00,1.0947E+00,1.0543E+00,1.0121E+00,9.6983E-01,
+ &9.2809E-01,8.9556E-01,8.6663E-01,8.4606E-01,8.4971E-01,8.7714E-01,
+ &9.3569E-01,1.0140E+00,1.1325E+00,1.2706E+00,1.4268E+00,1.6005E+00,
+ &1.7918E+00,2.0014E+00,2.2301E+00,2.4791E+00,2.7490E+00,3.0404E+00,
+ &3.3541E+00,3.5718E+00,4.2579E+00,5.0478E+00,5.9674E+00,7.0458E+00,
+ &8.3375E+00,9.9284E+00,1.1949E+01,1.4650E+01,1.8560E+01,2.5096E+01,
+ &4.0067E+01,0.0000E+00,1.6404E+00,1.6723E+00,1.7014E+00,1.7287E+00,
+ &1.7533E+00,1.7768E+00,1.7973E+00,1.8152E+00,1.8297E+00,1.8417E+00,
+ &1.8498E+00,1.8540E+00,1.8544E+00,1.8526E+00,1.8489E+00,1.8424E+00,
+ &1.8335E+00,1.8221E+00,1.8091E+00,1.7949E+00,1.7784E+00,1.7555E+00,
+ &1.7310E+00,1.7034E+00,1.6713E+00,1.6428E+00,1.6093E+00,1.5680E+00,
+ &1.5230E+00,1.4754E+00,1.4241E+00,1.3785E+00,1.3278E+00,1.2681E+00,
+ &1.2068E+00,1.1462E+00,1.0867E+00,1.0400E+00,9.9665E-01,9.6041E-01,
+ &9.4923E-01,9.6563E-01,1.0117E+00,1.0781E+00,1.1816E+00,1.3028E+00/
+ DATA (XGF_L(K),K= 115, 228) /
+ &1.4397E+00,1.5912E+00,1.7573E+00,1.9376E+00,2.1326E+00,2.3425E+00,
+ &2.5677E+00,2.8078E+00,3.0611E+00,3.2398E+00,3.7904E+00,4.4126E+00,
+ &5.1162E+00,5.9322E+00,6.8841E+00,8.0278E+00,9.4403E+00,1.1276E+01,
+ &1.3844E+01,1.7948E+01,2.6821E+01,0.0000E+00,2.5295E+00,2.5563E+00,
+ &2.5800E+00,2.5995E+00,2.6174E+00,2.6286E+00,2.6363E+00,2.6395E+00,
+ &2.6379E+00,2.6306E+00,2.6184E+00,2.6000E+00,2.5768E+00,2.5598E+00,
+ &2.5397E+00,2.5137E+00,2.4839E+00,2.4516E+00,2.4161E+00,2.3833E+00,
+ &2.3459E+00,2.3000E+00,2.2499E+00,2.1966E+00,2.1407E+00,2.0900E+00,
+ &2.0320E+00,1.9647E+00,1.8929E+00,1.8190E+00,1.7411E+00,1.6734E+00,
+ &1.5997E+00,1.5142E+00,1.4279E+00,1.3438E+00,1.2617E+00,1.1967E+00,
+ &1.1353E+00,1.0800E+00,1.0501E+00,1.0526E+00,1.0849E+00,1.1369E+00,
+ &1.2228E+00,1.3250E+00,1.4410E+00,1.5691E+00,1.7085E+00,1.8587E+00,
+ &2.0200E+00,2.1915E+00,2.3728E+00,2.5633E+00,2.7603E+00,2.9047E+00,
+ &3.3315E+00,3.8026E+00,4.3243E+00,4.9121E+00,5.5828E+00,6.3648E+00,
+ &7.3038E+00,8.4817E+00,1.0068E+01,1.2484E+01,1.7398E+01,0.0000E+00,
+ &3.9781E+00,3.9859E+00,3.9880E+00,3.9845E+00,3.9763E+00,3.9582E+00,
+ &3.9337E+00,3.9028E+00,3.8636E+00,3.8159E+00,3.7613E+00,3.6984E+00,
+ &3.6287E+00,3.5836E+00,3.5326E+00,3.4703E+00,3.4046E+00,3.3350E+00,
+ &3.2612E+00,3.1962E+00,3.1248E+00,3.0388E+00,2.9485E+00,2.8565E+00/
+ DATA (XGF_L(K),K= 229, 342) /
+ &2.7591E+00,2.6752E+00,2.5823E+00,2.4756E+00,2.3627E+00,2.2510E+00,
+ &2.1352E+00,2.0365E+00,1.9308E+00,1.8097E+00,1.6896E+00,1.5737E+00,
+ &1.4618E+00,1.3735E+00,1.2886E+00,1.2087E+00,1.1551E+00,1.1411E+00,
+ &1.1545E+00,1.1903E+00,1.2550E+00,1.3356E+00,1.4282E+00,1.5306E+00,
+ &1.6419E+00,1.7606E+00,1.8869E+00,2.0194E+00,2.1574E+00,2.2992E+00,
+ &2.4432E+00,2.5568E+00,2.8674E+00,3.2008E+00,3.5626E+00,3.9572E+00,
+ &4.3932E+00,4.8857E+00,5.4544E+00,6.1386E+00,7.0188E+00,8.2895E+00,
+ &1.0709E+01,0.0000E+00,6.3697E+00,6.3265E+00,6.2740E+00,6.2091E+00,
+ &6.1391E+00,6.0517E+00,5.9560E+00,5.8525E+00,5.7367E+00,5.6106E+00,
+ &5.4709E+00,5.3235E+00,5.1695E+00,5.0724E+00,4.9662E+00,4.8411E+00,
+ &4.7105E+00,4.5784E+00,4.4412E+00,4.3226E+00,4.1943E+00,4.0442E+00,
+ &3.8903E+00,3.7360E+00,3.5773E+00,3.4420E+00,3.2967E+00,3.1301E+00,
+ &2.9593E+00,2.7916E+00,2.6229E+00,2.4802E+00,2.3301E+00,2.1613E+00,
+ &1.9957E+00,1.8382E+00,1.6875E+00,1.5691E+00,1.4545E+00,1.3433E+00,
+ &1.2614E+00,1.2264E+00,1.2177E+00,1.2342E+00,1.2749E+00,1.3313E+00,
+ &1.3987E+00,1.4740E+00,1.5559E+00,1.6431E+00,1.7346E+00,1.8295E+00,
+ &1.9260E+00,2.0232E+00,2.1174E+00,2.2034E+00,2.4118E+00,2.6289E+00,
+ &2.8563E+00,3.0948E+00,3.3486E+00,3.6231E+00,3.9250E+00,4.2677E+00,
+ &4.6847E+00,5.2492E+00,6.2650E+00,0.0000E+00,9.3778E+00,9.2428E+00/
+ DATA (XGF_L(K),K= 343, 456) /
+ &9.0960E+00,8.9365E+00,8.7665E+00,8.5746E+00,8.3714E+00,8.1544E+00,
+ &7.9343E+00,7.6882E+00,7.4352E+00,7.1724E+00,6.9027E+00,6.7360E+00,
+ &6.5571E+00,6.3494E+00,6.1374E+00,5.9260E+00,5.7093E+00,5.5249E+00,
+ &5.3270E+00,5.0995E+00,4.8700E+00,4.6419E+00,4.4114E+00,4.2173E+00,
+ &4.0129E+00,3.7786E+00,3.5451E+00,3.3173E+00,3.0900E+00,2.9004E+00,
+ &2.7040E+00,2.4853E+00,2.2734E+00,2.0742E+00,1.8851E+00,1.7372E+00,
+ &1.5941E+00,1.4536E+00,1.3433E+00,1.2893E+00,1.2607E+00,1.2587E+00,
+ &1.2792E+00,1.3153E+00,1.3616E+00,1.4149E+00,1.4736E+00,1.5361E+00,
+ &1.6012E+00,1.6677E+00,1.7344E+00,1.7990E+00,1.8589E+00,1.9261E+00,
+ &2.0646E+00,2.2044E+00,2.3456E+00,2.4882E+00,2.6342E+00,2.7823E+00,
+ &2.9370E+00,3.1022E+00,3.2902E+00,3.5288E+00,3.9528E+00,0.0000E+00,
+ &1.3926E+01,1.3617E+01,1.3298E+01,1.2959E+01,1.2612E+01,1.2230E+01,
+ &1.1845E+01,1.1442E+01,1.1036E+01,1.0599E+01,1.0158E+01,9.7041E+00,
+ &9.2562E+00,8.9827E+00,8.6974E+00,8.3632E+00,8.0255E+00,7.6946E+00,
+ &7.3614E+00,7.0802E+00,6.7814E+00,6.4439E+00,6.1064E+00,5.7775E+00,
+ &5.4468E+00,5.1723E+00,4.8858E+00,4.5617E+00,4.2425E+00,3.9361E+00,
+ &3.6353E+00,3.3874E+00,3.1301E+00,2.8506E+00,2.5816E+00,2.3318E+00,
+ &2.0965E+00,1.9136E+00,1.7368E+00,1.5622E+00,1.4211E+00,1.3452E+00,
+ &1.2937E+00,1.2737E+00,1.2719E+00,1.2868E+00,1.3119E+00,1.3437E+00/
+ DATA (XGF_L(K),K= 457, 570) /
+ &1.3799E+00,1.4189E+00,1.4596E+00,1.5003E+00,1.5401E+00,1.5761E+00,
+ &1.6073E+00,1.6574E+00,1.7377E+00,1.8158E+00,1.8902E+00,1.9601E+00,
+ &2.0263E+00,2.0884E+00,2.1452E+00,2.1990E+00,2.2512E+00,2.3118E+00,
+ &2.4354E+00,0.0000E+00,1.9256E+01,1.8699E+01,1.8142E+01,1.7563E+01,
+ &1.6980E+01,1.6355E+01,1.5725E+01,1.5081E+01,1.4443E+01,1.3769E+01,
+ &1.3097E+01,1.2422E+01,1.1755E+01,1.1358E+01,1.0937E+01,1.0454E+01,
+ &9.9818E+00,9.5167E+00,9.0465E+00,8.6570E+00,8.2473E+00,7.7870E+00,
+ &7.3320E+00,6.8911E+00,6.4569E+00,6.0969E+00,5.7223E+00,5.3051E+00,
+ &4.8992E+00,4.5131E+00,4.1351E+00,3.8285E+00,3.5148E+00,3.1749E+00,
+ &2.8517E+00,2.5534E+00,2.2748E+00,2.0598E+00,1.8527E+00,1.6465E+00,
+ &1.4780E+00,1.3832E+00,1.3129E+00,1.2758E+00,1.2566E+00,1.2544E+00,
+ &1.2628E+00,1.2778E+00,1.2971E+00,1.3186E+00,1.3412E+00,1.3637E+00,
+ &1.3845E+00,1.4021E+00,1.4142E+00,1.4518E+00,1.4945E+00,1.5327E+00,
+ &1.5661E+00,1.5941E+00,1.6160E+00,1.6309E+00,1.6386E+00,1.6381E+00,
+ &1.6291E+00,1.6176E+00,1.6271E+00,0.0000E+00,2.5945E+01,2.5063E+01,
+ &2.4160E+01,2.3234E+01,2.2336E+01,2.1370E+01,2.0417E+01,1.9450E+01,
+ &1.8508E+01,1.7517E+01,1.6548E+01,1.5580E+01,1.4645E+01,1.4085E+01,
+ &1.3496E+01,1.2836E+01,1.2181E+01,1.1547E+01,1.0921E+01,1.0404E+01,
+ &9.8614E+00,9.2547E+00,8.6616E+00,8.0926E+00,7.5352E+00,7.0774E+00/
+ DATA (XGF_L(K),K= 571, 684) /
+ &6.6043E+00,6.0842E+00,5.5816E+00,5.1040E+00,4.6450E+00,4.2749E+00,
+ &3.8995E+00,3.4941E+00,3.1134E+00,2.7651E+00,2.4423E+00,2.1941E+00,
+ &1.9564E+00,1.7198E+00,1.5241E+00,1.4112E+00,1.3220E+00,1.2705E+00,
+ &1.2348E+00,1.2175E+00,1.2113E+00,1.2119E+00,1.2167E+00,1.2238E+00,
+ &1.2321E+00,1.2398E+00,1.2460E+00,1.2491E+00,1.2470E+00,1.2752E+00,
+ &1.2894E+00,1.2998E+00,1.3055E+00,1.3049E+00,1.2991E+00,1.2860E+00,
+ &1.2655E+00,1.2370E+00,1.1998E+00,1.1564E+00,1.1181E+00,0.0000E+00,
+ &3.3362E+01,3.2051E+01,3.0740E+01,2.9429E+01,2.8133E+01,2.6758E+01,
+ &2.5422E+01,2.4082E+01,2.2784E+01,2.1435E+01,2.0130E+01,1.8839E+01,
+ &1.7597E+01,1.6865E+01,1.6098E+01,1.5241E+01,1.4397E+01,1.3587E+01,
+ &1.2791E+01,1.2130E+01,1.1444E+01,1.0687E+01,9.9507E+00,9.2501E+00,
+ &8.5659E+00,8.0104E+00,7.4390E+00,6.8118E+00,6.2125E+00,5.6506E+00,
+ &5.1096E+00,4.6780E+00,4.2434E+00,3.7769E+00,3.3424E+00,2.9475E+00,
+ &2.5842E+00,2.3061E+00,2.0409E+00,1.7770E+00,1.5572E+00,1.4290E+00,
+ &1.3248E+00,1.2609E+00,1.2112E+00,1.1814E+00,1.1636E+00,1.1530E+00,
+ &1.1469E+00,1.1433E+00,1.1407E+00,1.1378E+00,1.1337E+00,1.1269E+00,
+ &1.1152E+00,1.1360E+00,1.1320E+00,1.1243E+00,1.1127E+00,1.0960E+00,
+ &1.0739E+00,1.0461E+00,1.0122E+00,9.7100E-01,9.2292E-01,8.6909E-01,
+ &8.1432E-01,0.0000E+00,4.2364E+01,4.0483E+01,3.8640E+01,3.6792E+01/
+ DATA (XGF_L(K),K= 685, 798) /
+ &3.4991E+01,3.3112E+01,3.1295E+01,2.9487E+01,2.7748E+01,2.5953E+01,
+ &2.4235E+01,2.2543E+01,2.0935E+01,1.9990E+01,1.9011E+01,1.7921E+01,
+ &1.6852E+01,1.5830E+01,1.4831E+01,1.4013E+01,1.3165E+01,1.2236E+01,
+ &1.1337E+01,1.0485E+01,9.6616E+00,8.9943E+00,8.3137E+00,7.5711E+00,
+ &6.8670E+00,6.2090E+00,5.5842E+00,5.0866E+00,4.5873E+00,4.0564E+00,
+ &3.5646E+00,3.1234E+00,2.7185E+00,2.4107E+00,2.1172E+00,1.8273E+00,
+ &1.5836E+00,1.4407E+00,1.3211E+00,1.2459E+00,1.1839E+00,1.1433E+00,
+ &1.1153E+00,1.0949E+00,1.0794E+00,1.0667E+00,1.0555E+00,1.0443E+00,
+ &1.0317E+00,1.0172E+00,9.9883E-01,1.0131E+00,9.9503E-01,9.7446E-01,
+ &9.5064E-01,9.2316E-01,8.9156E-01,8.5528E-01,8.1439E-01,7.6837E-01,
+ &7.1718E-01,6.6210E-01,6.0243E-01,0.0000E+00,5.2603E+01,5.0038E+01,
+ &4.7540E+01,4.5053E+01,4.2652E+01,4.0175E+01,3.7784E+01,3.5407E+01,
+ &3.3154E+01,3.0851E+01,2.8651E+01,2.6507E+01,2.4488E+01,2.3310E+01,
+ &2.2084E+01,2.0735E+01,1.9418E+01,1.8166E+01,1.6951E+01,1.5960E+01,
+ &1.4935E+01,1.3817E+01,1.2742E+01,1.1732E+01,1.0759E+01,9.9749E+00,
+ &9.1794E+00,8.3186E+00,7.5044E+00,6.7510E+00,6.0386E+00,5.4762E+00,
+ &4.9137E+00,4.3200E+00,3.7728E+00,3.2842E+00,2.8391E+00,2.5026E+00,
+ &2.1835E+00,1.8677E+00,1.6033E+00,1.4461E+00,1.3138E+00,1.2277E+00,
+ &1.1557E+00,1.1057E+00,1.0689E+00,1.0407E+00,1.0176E+00,9.9768E-01/
+ DATA (XGF_L(K),K= 799, 912) /
+ &9.7951E-01,9.6199E-01,9.4331E-01,9.2359E-01,9.0058E-01,9.0921E-01,
+ &8.8156E-01,8.5244E-01,8.2081E-01,7.8702E-01,7.5025E-01,7.1005E-01,
+ &6.6667E-01,6.1984E-01,5.6969E-01,5.1748E-01,4.5895E-01,0.0000E+00,
+ &6.3459E+01,6.0127E+01,5.6900E+01,5.3695E+01,5.0615E+01,4.7464E+01,
+ &4.4440E+01,4.1483E+01,3.8684E+01,3.5826E+01,3.3122E+01,3.0500E+01,
+ &2.8040E+01,2.6617E+01,2.5143E+01,2.3518E+01,2.1950E+01,2.0455E+01,
+ &1.9011E+01,1.7842E+01,1.6646E+01,1.5337E+01,1.4094E+01,1.2920E+01,
+ &1.1799E+01,1.0903E+01,9.9940E+00,9.0166E+00,8.0967E+00,7.2512E+00,
+ &6.4551E+00,5.8279E+00,5.2081E+00,4.5519E+00,3.9568E+00,3.4237E+00,
+ &2.9425E+00,2.5798E+00,2.2371E+00,1.8995E+00,1.6161E+00,1.4477E+00,
+ &1.3046E+00,1.2096E+00,1.1285E+00,1.0709E+00,1.0274E+00,9.9290E-01,
+ &9.6399E-01,9.3860E-01,9.1550E-01,8.9324E-01,8.7036E-01,8.4674E-01,
+ &8.2129E-01,8.2506E-01,7.9094E-01,7.5633E-01,7.2031E-01,6.8307E-01,
+ &6.4387E-01,6.0237E-01,5.5907E-01,5.1344E-01,4.6618E-01,4.1810E-01,
+ &3.6329E-01,0.0000E+00,7.9498E+01,7.4941E+01,7.0580E+01,6.6266E+01,
+ &6.2169E+01,5.8002E+01,5.4045E+01,5.0164E+01,4.6539E+01,4.2847E+01,
+ &3.9386E+01,3.6065E+01,3.2968E+01,3.1180E+01,2.9347E+01,2.7330E+01,
+ &2.5394E+01,2.3566E+01,2.1811E+01,2.0388E+01,1.8944E+01,1.7368E+01,
+ &1.5877E+01,1.4488E+01,1.3164E+01,1.2111E+01,1.1051E+01,9.9162E+00/
+ DATA (XGF_L(K),K= 913, 1026) /
+ &8.8542E+00,7.8839E+00,6.9777E+00,6.2689E+00,5.5695E+00,4.8410E+00,
+ &4.1789E+00,3.5909E+00,3.0635E+00,2.6689E+00,2.2973E+00,1.9324E+00,
+ &1.6270E+00,1.4446E+00,1.2882E+00,1.1839E+00,1.0926E+00,1.0266E+00,
+ &9.7585E-01,9.3473E-01,8.9976E-01,8.6898E-01,8.4068E-01,8.1374E-01,
+ &7.8714E-01,7.6011E-01,7.3262E-01,7.3148E-01,6.9170E-01,6.5270E-01,
+ &6.1357E-01,5.7426E-01,5.3417E-01,4.9316E-01,4.5166E-01,4.0914E-01,
+ &3.6649E-01,3.2429E-01,2.7651E-01,0.0000E+00,9.7091E+01,9.1127E+01,
+ &8.5440E+01,7.9869E+01,7.4603E+01,6.9275E+01,6.4220E+01,5.9343E+01,
+ &5.4780E+01,5.0195E+01,4.5912E+01,4.1816E+01,3.8028E+01,3.5857E+01,
+ &3.3637E+01,3.1205E+01,2.8880E+01,2.6695E+01,2.4601E+01,2.2923E+01,
+ &2.1219E+01,1.9374E+01,1.7634E+01,1.6009E+01,1.4488E+01,1.3276E+01,
+ &1.2064E+01,1.0772E+01,9.5709E+00,8.4795E+00,7.4649E+00,6.6775E+00,
+ &5.9046E+00,5.1015E+00,4.3733E+00,3.7372E+00,3.1677E+00,2.7434E+00,
+ &2.3459E+00,1.9566E+00,1.6317E+00,1.4368E+00,1.2699E+00,1.1572E+00,
+ &1.0581E+00,9.8558E-01,9.2913E-01,8.8297E-01,8.4349E-01,8.0862E-01,
+ &7.7667E-01,7.4686E-01,7.1760E-01,6.8906E-01,6.6005E-01,6.5493E-01,
+ &6.1209E-01,5.7080E-01,5.3038E-01,4.9085E-01,4.5137E-01,4.1231E-01,
+ &3.7316E-01,3.3442E-01,2.9613E-01,2.5928E-01,2.1912E-01,0.0000E+00,
+ &1.1660E+02,1.0899E+02,1.0178E+02,9.4752E+01,8.8142E+01,8.1480E+01/
+ DATA (XGF_L(K),K= 1027, 1140) /
+ &7.5219E+01,6.9198E+01,6.3578E+01,5.7986E+01,5.2800E+01,4.7867E+01,
+ &4.3328E+01,4.0736E+01,3.8088E+01,3.5213E+01,3.2469E+01,2.9907E+01,
+ &2.7451E+01,2.5501E+01,2.3516E+01,2.1392E+01,1.9391E+01,1.7546E+01,
+ &1.5800E+01,1.4426E+01,1.3057E+01,1.1607E+01,1.0266E+01,9.0517E+00,
+ &7.9294E+00,7.0617E+00,6.2165E+00,5.3397E+00,4.5572E+00,3.8687E+00,
+ &3.2598E+00,2.8078E+00,2.3859E+00,1.9745E+00,1.6317E+00,1.4267E+00,
+ &1.2497E+00,1.1305E+00,1.0247E+00,9.4657E-01,8.8556E-01,8.3542E-01,
+ &7.9253E-01,7.5465E-01,7.2037E-01,6.8840E-01,6.5775E-01,6.2793E-01,
+ &5.9852E-01,5.9015E-01,5.4553E-01,5.0339E-01,4.6306E-01,4.2411E-01,
+ &3.8622E-01,3.4909E-01,3.1294E-01,2.7773E-01,2.4373E-01,2.1150E-01,
+ &1.7848E-01,0.0000E+00,1.3738E+02,1.2796E+02,1.1904E+02,1.1042E+02,
+ &1.0233E+02,9.4222E+01,8.6662E+01,7.9409E+01,7.2655E+01,6.6001E+01,
+ &5.9833E+01,5.4007E+01,4.8672E+01,4.5642E+01,4.2552E+01,3.9214E+01,
+ &3.6040E+01,3.3082E+01,3.0272E+01,2.8026E+01,2.5779E+01,2.3361E+01,
+ &2.1093E+01,1.9009E+01,1.7062E+01,1.5526E+01,1.4003E+01,1.2396E+01,
+ &1.0916E+01,9.5845E+00,8.3611E+00,7.4188E+00,6.5021E+00,5.5589E+00,
+ &4.7169E+00,3.9865E+00,3.3389E+00,2.8617E+00,2.4178E+00,1.9872E+00,
+ &1.6283E+00,1.4143E+00,1.2296E+00,1.1049E+00,9.9315E-01,9.1079E-01,
+ &8.4623E-01,7.9317E-01,7.4768E-01,7.0802E-01,6.7178E-01,6.3836E-01/
+ DATA (XGF_L(K),K= 1141, 1254) /
+ &6.0703E-01,5.7658E-01,5.4733E-01,5.3630E-01,4.9100E-01,4.4879E-01,
+ &4.0920E-01,3.7138E-01,3.3521E-01,3.0054E-01,2.6721E-01,2.3523E-01,
+ &2.0485E-01,1.7634E-01,1.4852E-01,0.0000E+00,1.6103E+02,1.4938E+02,
+ &1.3848E+02,1.2798E+02,1.1818E+02,1.0840E+02,9.9309E+01,9.0651E+01,
+ &8.2647E+01,7.4733E+01,6.7469E+01,6.0672E+01,5.4433E+01,5.0913E+01,
+ &4.7343E+01,4.3482E+01,3.9833E+01,3.6452E+01,3.3242E+01,3.0689E+01,
+ &2.8134E+01,2.5404E+01,2.2863E+01,2.0531E+01,1.8362E+01,1.6652E+01,
+ &1.4967E+01,1.3197E+01,1.1573E+01,1.0120E+01,8.7877E+00,7.7679E+00,
+ &6.7819E+00,5.7685E+00,4.8731E+00,4.0967E+00,3.4122E+00,2.9097E+00,
+ &2.4451E+00,1.9953E+00,1.6222E+00,1.3995E+00,1.2076E+00,1.0771E+00,
+ &9.6151E-01,8.7563E-01,8.0819E-01,7.5269E-01,7.0548E-01,6.6395E-01,
+ &6.2666E-01,5.9253E-01,5.6034E-01,5.3005E-01,5.0122E-01,4.8790E-01,
+ &4.4273E-01,4.0115E-01,3.6251E-01,3.2632E-01,2.9224E-01,2.5988E-01,
+ &2.2931E-01,2.0039E-01,1.7324E-01,1.4805E-01,1.2201E-01,0.0000E+00,
+ &1.8591E+02,1.7193E+02,1.5886E+02,1.4632E+02,1.3469E+02,1.2310E+02,
+ &1.1237E+02,1.0218E+02,9.2839E+01,8.3643E+01,7.5256E+01,6.7382E+01,
+ &6.0231E+01,5.6204E+01,5.2127E+01,4.7743E+01,4.3601E+01,3.9784E+01,
+ &3.6172E+01,3.3310E+01,3.0455E+01,2.7410E+01,2.4579E+01,2.2009E+01,
+ &1.9599E+01,1.7727E+01,1.5886E+01,1.3956E+01,1.2193E+01,1.0620E+01/
+ DATA (XGF_L(K),K= 1255, 1368) /
+ &9.1866E+00,8.0925E+00,7.0383E+00,5.9623E+00,5.0119E+00,4.1917E+00,
+ &3.4750E+00,2.9503E+00,2.4663E+00,1.9999E+00,1.6141E+00,1.3840E+00,
+ &1.1856E+00,1.0518E+00,9.3192E-01,8.4324E-01,7.7348E-01,7.1642E-01,
+ &6.6779E-01,6.2531E-01,5.8732E-01,5.5231E-01,5.2039E-01,4.9037E-01,
+ &4.6218E-01,4.4711E-01,4.0225E-01,3.6159E-01,3.2438E-01,2.8982E-01,
+ &2.5765E-01,2.2765E-01,1.9954E-01,1.7331E-01,1.4889E-01,1.2621E-01,
+ &9.6984E-02,0.0000E+00,2.1269E+02,1.9609E+02,1.8060E+02,1.6582E+02,
+ &1.5214E+02,1.3863E+02,1.2613E+02,1.1431E+02,1.0351E+02,9.2957E+01,
+ &8.3294E+01,7.4318E+01,6.6188E+01,6.1617E+01,5.7019E+01,5.2073E+01,
+ &4.7428E+01,4.3153E+01,3.9122E+01,3.5941E+01,3.2764E+01,2.9404E+01,
+ &2.6282E+01,2.3458E+01,2.0836E+01,1.8796E+01,1.6786E+01,1.4693E+01,
+ &1.2792E+01,1.1101E+01,9.5678E+00,8.4010E+00,7.2773E+00,6.1402E+00,
+ &5.1403E+00,4.2791E+00,3.5311E+00,2.9851E+00,2.4835E+00,2.0017E+00,
+ &1.6039E+00,1.3677E+00,1.1646E+00,1.0265E+00,9.0375E-01,8.1271E-01,
+ &7.4135E-01,6.8280E-01,6.3328E-01,5.9018E-01,5.5184E-01,5.1677E-01,
+ &4.8494E-01,4.5537E-01,4.2797E-01,4.1146E-01,3.6736E-01,3.2788E-01,
+ &2.9207E-01,2.5923E-01,2.2901E-01,2.0110E-01,1.7527E-01,1.5131E-01,
+ &1.2926E-01,1.0839E-01,6.9776E-02,0.0000E+00,2.4043E+02,2.2104E+02,
+ &2.0300E+02,1.8582E+02,1.7003E+02,1.5443E+02,1.4007E+02,1.2658E+02/
+ DATA (XGF_L(K),K= 1369, 1482) /
+ &1.1426E+02,1.0227E+02,9.1332E+01,8.1197E+01,7.2119E+01,6.6989E+01,
+ &6.1846E+01,5.6342E+01,5.1188E+01,4.6448E+01,4.2002E+01,3.8498E+01,
+ &3.5016E+01,3.1335E+01,2.7931E+01,2.4848E+01,2.2009E+01,1.9797E+01,
+ &1.7637E+01,1.5389E+01,1.3354E+01,1.1550E+01,9.9187E+00,8.6824E+00,
+ &7.4988E+00,6.3022E+00,5.2549E+00,4.3589E+00,3.5788E+00,3.0139E+00,
+ &2.4962E+00,2.0005E+00,1.5931E+00,1.3514E+00,1.1435E+00,1.0028E+00,
+ &8.7751E-01,7.8479E-01,7.1218E-01,6.5272E-01,6.0250E-01,5.5920E-01,
+ &5.2061E-01,4.8590E-01,4.5422E-01,4.2519E-01,3.9858E-01,3.8094E-01,
+ &3.3789E-01,2.9975E-01,2.6524E-01,2.3401E-01,2.0560E-01,1.7956E-01,
+ &1.5565E-01,1.3374E-01,1.1354E-01,9.4096E-02,3.9275E-02,0.0000E+00,
+ &2.8195E+02,2.5830E+02,2.3640E+02,2.1554E+02,1.9645E+02,1.7774E+02,
+ &1.6058E+02,1.4448E+02,1.2990E+02,1.1575E+02,1.0299E+02,9.1121E+01,
+ &8.0574E+01,7.4642E+01,6.8724E+01,6.2402E+01,5.6498E+01,5.1101E+01,
+ &4.6042E+01,4.2081E+01,3.8152E+01,3.4014E+01,3.0201E+01,2.6780E+01,
+ &2.3611E+01,2.1171E+01,1.8789E+01,1.6329E+01,1.4107E+01,1.2148E+01,
+ &1.0386E+01,9.0557E+00,7.7874E+00,6.5118E+00,5.4006E+00,4.4539E+00,
+ &3.6370E+00,3.0467E+00,2.5088E+00,1.9959E+00,1.5762E+00,1.3274E+00,
+ &1.1142E+00,9.7065E-01,8.4265E-01,7.4825E-01,6.7451E-01,6.1445E-01,
+ &5.6374E-01,5.2024E-01,4.8166E-01,4.4741E-01,4.1643E-01,3.8830E-01/
+ DATA (XGF_L(K),K= 1483, 1596) /
+ &3.6282E-01,3.4411E-01,3.0249E-01,2.6607E-01,2.3369E-01,2.0474E-01,
+ &1.7852E-01,1.5489E-01,1.3341E-01,1.1384E-01,9.5862E-02,7.7509E-02,
+ &0.0000E+00,0.0000E+00,3.2379E+02,2.9556E+02,2.6960E+02,2.4513E+02,
+ &2.2265E+02,2.0073E+02,1.8071E+02,1.6202E+02,1.4515E+02,1.2887E+02,
+ &1.1419E+02,1.0071E+02,8.8650E+01,8.1931E+01,7.5233E+01,6.8140E+01,
+ &6.1510E+01,5.5467E+01,4.9832E+01,4.5419E+01,4.1070E+01,3.6493E+01,
+ &3.2295E+01,2.8536E+01,2.5086E+01,2.2426E+01,1.9846E+01,1.7175E+01,
+ &1.4781E+01,1.2681E+01,1.0797E+01,9.3831E+00,8.0380E+00,6.6897E+00,
+ &5.5221E+00,4.5337E+00,3.6831E+00,3.0714E+00,2.5159E+00,1.9884E+00,
+ &1.5586E+00,1.3048E+00,1.0886E+00,9.4191E-01,8.1217E-01,7.1679E-01,
+ &6.4238E-01,5.8194E-01,5.3136E-01,4.8766E-01,4.4965E-01,4.1594E-01,
+ &3.8570E-01,3.5847E-01,3.3403E-01,3.1456E-01,2.7454E-01,2.3977E-01,
+ &2.0922E-01,1.8216E-01,1.5795E-01,1.3622E-01,1.1669E-01,9.9012E-02,
+ &8.2668E-02,6.4604E-02,0.0000E+00,0.0000E+00,3.7071E+02,3.3727E+02,
+ &3.0660E+02,2.7790E+02,2.5169E+02,2.2608E+02,2.0283E+02,1.8123E+02,
+ &1.6179E+02,1.4311E+02,1.2635E+02,1.1097E+02,9.7357E+01,8.9759E+01,
+ &8.2263E+01,7.4239E+01,6.6821E+01,6.0073E+01,5.3813E+01,4.8927E+01,
+ &4.4114E+01,3.9072E+01,3.4471E+01,3.0351E+01,2.6592E+01,2.3699E+01,
+ &2.0903E+01,1.8031E+01,1.5459E+01,1.3211E+01,1.1204E+01,9.7024E+00/
+ DATA (XGF_L(K),K= 1597, 1710) /
+ &8.2828E+00,6.8644E+00,5.6367E+00,4.6059E+00,3.7241E+00,3.0915E+00,
+ &2.5189E+00,1.9786E+00,1.5396E+00,1.2816E+00,1.0611E+00,9.1306E-01,
+ &7.8207E-01,6.8594E-01,6.1118E-01,5.5075E-01,5.0031E-01,4.5732E-01,
+ &4.1996E-01,3.8671E-01,3.5732E-01,3.3101E-01,3.0775E-01,2.8769E-01,
+ &2.4931E-01,2.1637E-01,1.8763E-01,1.6241E-01,1.4002E-01,1.2013E-01,
+ &1.0238E-01,8.6311E-02,7.1348E-02,5.2982E-02,0.0000E+00,0.0000E+00,
+ &4.2142E+02,3.8237E+02,3.4660E+02,3.1292E+02,2.8259E+02,2.5300E+02,
+ &2.2626E+02,2.0148E+02,1.7927E+02,1.5797E+02,1.3896E+02,1.2163E+02,
+ &1.0632E+02,9.7858E+01,8.9366E+01,8.0488E+01,7.2234E+01,6.4771E+01,
+ &5.7843E+01,5.2468E+01,4.7182E+01,4.1663E+01,3.6633E+01,3.2165E+01,
+ &2.8082E+01,2.4971E+01,2.1960E+01,1.8866E+01,1.6118E+01,1.3723E+01,
+ &1.1595E+01,1.0008E+01,8.5101E+00,7.0232E+00,5.7443E+00,4.6705E+00,
+ &3.7584E+00,3.1066E+00,2.5189E+00,1.9659E+00,1.5193E+00,1.2575E+00,
+ &1.0346E+00,8.8517E-01,7.5338E-01,6.5695E-01,5.8219E-01,5.2200E-01,
+ &4.7218E-01,4.2954E-01,3.9258E-01,3.6043E-01,3.3190E-01,3.0663E-01,
+ &2.8431E-01,2.6413E-01,2.2746E-01,1.9612E-01,1.6912E-01,1.4557E-01,
+ &1.2488E-01,1.0660E-01,9.0362E-02,7.5731E-02,6.1890E-02,4.2720E-02,
+ &0.0000E+00,0.0000E+00,4.7166E+02,4.2676E+02,3.8580E+02,3.4749E+02,
+ &3.1273E+02,2.7927E+02,2.4899E+02,2.2108E+02,1.9611E+02,1.7230E+02/
+ DATA (XGF_L(K),K= 1711, 1824) /
+ &1.5107E+02,1.3178E+02,1.1483E+02,1.0548E+02,9.6179E+01,8.6383E+01,
+ &7.7331E+01,6.9156E+01,6.1613E+01,5.5763E+01,5.0019E+01,4.4056E+01,
+ &3.8633E+01,3.3819E+01,2.9446E+01,2.6108E+01,2.2889E+01,1.9617E+01,
+ &1.6706E+01,1.4179E+01,1.1938E+01,1.0276E+01,8.7112E+00,7.1630E+00,
+ &5.8345E+00,4.7275E+00,3.7856E+00,3.1171E+00,2.5164E+00,1.9532E+00,
+ &1.4997E+00,1.2350E+00,1.0108E+00,8.6027E-01,7.2804E-01,6.3166E-01,
+ &5.5726E-01,4.9745E-01,4.4802E-01,4.0623E-01,3.7002E-01,3.3850E-01,
+ &3.1081E-01,2.8644E-01,2.6509E-01,2.4476E-01,2.0951E-01,1.7979E-01,
+ &1.5426E-01,1.3217E-01,1.1290E-01,9.5951E-02,8.0975E-02,6.7483E-02,
+ &5.4483E-02,3.4309E-02,0.0000E+00,0.0000E+00,5.2745E+02,4.7595E+02,
+ &4.2900E+02,3.8543E+02,3.4589E+02,3.0795E+02,2.7377E+02,2.4235E+02,
+ &2.1434E+02,1.8771E+02,1.6408E+02,1.4266E+02,1.2392E+02,1.1358E+02,
+ &1.0335E+02,9.2593E+01,8.2702E+01,7.3780E+01,6.5553E+01,5.9207E+01,
+ &5.2983E+01,4.6535E+01,4.0700E+01,3.5531E+01,3.0842E+01,2.7278E+01,
+ &2.3855E+01,2.0386E+01,1.7301E+01,1.4635E+01,1.2282E+01,1.0538E+01,
+ &8.9065E+00,7.2932E+00,5.9178E+00,4.7769E+00,3.8086E+00,3.1240E+00,
+ &2.5114E+00,1.9387E+00,1.4794E+00,1.2125E+00,9.8604E-01,8.3538E-01,
+ &7.0309E-01,6.0683E-01,5.3289E-01,4.7378E-01,4.2493E-01,3.8387E-01,
+ &3.4846E-01,3.1778E-01,2.9097E-01,2.6744E-01,2.4699E-01,2.2688E-01/
+ DATA (XGF_L(K),K= 1825, 1836) /
+ &1.9308E-01,1.6489E-01,1.4079E-01,1.2009E-01,1.0214E-01,8.6447E-02,
+ &7.2603E-02,6.0131E-02,4.7893E-02,2.6613E-02,0.0000E+00,0.0000E+00/
+
+*
+ X = Xinp
+*...CHECK OF X AND Q2 VALUES :
+ IF ( (X.LT.0.99D-9) .OR. (X.GT.1.D0) ) THEN
+* WRITE(LO,91) X
+ 91 FORMAT (2X,'GRV98: x out of range',1p,E12.4)
+ X = 0.99D-9
+* STOP
+ ENDIF
+
+ Q2 = Q2inp
+ IF ( (Q2.LT.0.799) .OR. (Q2.GT.1.E6) ) THEN
+* WRITE(LO,92) Q2
+ 92 FORMAT (2X,'GRV98: Q2 out of range',1p,E12.4)
+ Q2 = 0.99E6
+* STOP
+ ENDIF
+
+*
+*...INTERPOLATION :
+ NA(1) = NX
+ NA(2) = NQ
+ XT(1) = DLOG(X)
+ XT(2) = DLOG(Q2)
+ X1 = 1.- X
+ XV = X**0.5
+ XS = X**(-0.2)
+ UV = PHO_DBFINT(NARG,XT,NA,ARRF,XUVF) * X1**3 * XV
+ DV = PHO_DBFINT(NARG,XT,NA,ARRF,XDVF) * X1**4 * XV
+ DE = PHO_DBFINT(NARG,XT,NA,ARRF,XDEF) * X1**7 * XV
+ UD = PHO_DBFINT(NARG,XT,NA,ARRF,XUDF) * X1**7 * XS
+ US = 0.5 * (UD - DE)
+ DS = 0.5 * (UD + DE)
+ SS = PHO_DBFINT(NARG,XT,NA,ARRF,XSF) * X1**7 * XS
+ GL = PHO_DBFINT(NARG,XT,NA,ARRF,XGF) * X1**5 * XS
+
+ END
+
+CDECK ID>, PHO_DOR98SC
+ SUBROUTINE PHO_DOR98SC (Xinp, Q2inp, UV, DV, US, DS, SS, GL)
+C***********************************************************************
+C
+C GRV98 parton densities, leading order set
+C
+C For a detailed explanation see
+C M. Glueck, E. Reya, A. Vogt :
+C hep-ph/9806404 = DO-TH 98/07 = WUE-ITP-98-019
+C (To appear in Eur. Phys. J. C)
+C
+C interpolation routine based on the original GRV98PA routine,
+C adapted to define interpolation table as DATA statements
+C
+C (R.Engel, 09/98)
+C
+C CAUTION: this is a version with gluon shadowing corrections
+C (R.Engel, 09/99)
+C
+C
+C INPUT: X = Bjorken-x (between 1.E-9 and 1.)
+C Q2 = scale in GeV**2 (between 0.8 and 1.E6)
+C
+C OUTPUT: UV = u - u(bar), DV = d - d(bar), US = u(bar),
+C DS = d(bar), SS = s = s(bar), GL = gluon.
+C Always x times the distribution is returned.
+C
+C******************************************************i****************
+ IMPLICIT DOUBLE PRECISION (A-H, O-Z)
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ PARAMETER (NPART=6, NX=68, NQ=27, NARG=2)
+ DIMENSION XUVF(NX,NQ), XDVF(NX,NQ), XDEF(NX,NQ), XUDF(NX,NQ),
+ 1 XSF(NX,NQ), XGF(NX,NQ),
+ 2 XT(NARG), NA(NARG), ARRF(NX+NQ)
+
+ DIMENSION XUVF_L(NX*NQ), XDVF_L(NX*NQ), XDEF_L(NX*NQ),
+ & XUDF_L(NX*NQ), XSF_L(NX*NQ), XGF_L(NX*NQ)
+
+ EQUIVALENCE (XUVF(1,1),XUVF_L(1))
+ EQUIVALENCE (XDVF(1,1),XDVF_L(1))
+ EQUIVALENCE (XDEF(1,1),XDEF_L(1))
+ EQUIVALENCE (XUDF(1,1),XUDF_L(1))
+ EQUIVALENCE (XSF(1,1),XSF_L(1))
+ EQUIVALENCE (XGF(1,1),XGF_L(1))
+
+*#################### data statements for shadowed LO PDF ##############
+C ... deleted ...
+*#######################################################################
+
+ X = Xinp
+*...CHECK OF X AND Q2 VALUES :
+ IF ( (X.LT.0.99D-9) .OR. (X.GT.1.D0) ) THEN
+* WRITE(LO,91) X
+ 91 FORMAT (2X,'GRV98_SC: x out of range',1p,E12.4)
+ X = 0.99D-9
+* STOP
+ ENDIF
+
+ Q2 = Q2inp
+ IF ( (Q2.LT.0.799) .OR. (Q2.GT.1.E6) ) THEN
+* WRITE(LO,92) Q2
+ 92 FORMAT (2X,'GRV98_SC: Q2 out of range',1p,E12.4)
+ Q2 = 0.99E6
+* STOP
+ ENDIF
+
+*
+*...INTERPOLATION :
+ NA(1) = NX
+ NA(2) = NQ
+ XT(1) = DLOG(X)
+ XT(2) = DLOG(Q2)
+ X1 = 1.- X
+ XV = X**0.5
+ XS = X**(-0.2)
+ UV = PHO_DBFINT(NARG,XT,NA,ARRF,XUVF) * X1**3 * XV
+ DV = PHO_DBFINT(NARG,XT,NA,ARRF,XDVF) * X1**4 * XV
+ DE = PHO_DBFINT(NARG,XT,NA,ARRF,XDEF) * X1**7 * XV
+ UD = PHO_DBFINT(NARG,XT,NA,ARRF,XUDF) * X1**7 * XS
+ US = 0.5 * (UD - DE)
+ DS = 0.5 * (UD + DE)
+ SS = PHO_DBFINT(NARG,XT,NA,ARRF,XSF) * X1**7 * XS
+ GL = PHO_DBFINT(NARG,XT,NA,ARRF,XGF) * X1**5 * XS
+
+ END
+
+CDECK ID>, PHO_DOR94LO
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* *
+* G R V - P R O T O N - P A R A M E T R I Z A T I O N S *
+* *
+* 1994 UPDATE *
+* *
+* FOR A DETAILED EXPLANATION SEE *
+* M. GLUECK, E.REYA, A.VOGT : *
+* DO-TH 94/24 = DESY 94-206 *
+* (TO APPEAR IN Z. PHYS. C) *
+* *
+* THE PARAMETRIZATIONS ARE FITTED TO THE EVOLVED PARTONS FOR *
+* Q**2 / GEV**2 BETWEEN 0.4 AND 1.E6 *
+* X BETWEEN 1.E-5 AND 1. *
+* LARGE-X REGIONS, WHERE THE DISTRIBUTION UNDER CONSIDERATION *
+* IS NEGLIGIBLY SMALL, WERE EXCLUDED FROM THE FIT. *
+* *
+* HEAVY QUARK THRESHOLDS Q(H) = M(H) IN THE BETA FUNCTION : *
+* M(C) = 1.5, M(B) = 4.5 *
+* CORRESPONDING LAMBDA(F) VALUES IN GEV FOR Q**2 > M(H)**2 : *
+* LO : LAMBDA(3) = 0.232, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.153, *
+* NLO : LAMBDA(3) = 0.248, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.131. *
+* THE NUMBER OF ACTIVE QUARK FLAVOURS IS NF = 3 EVERYWHERE *
+* EXCEPT IN THE BETA FUNCTION, I.E. THE HEAVY QUARKS C,B,... *
+* ARE NOT PRESENT AS PARTONS IN THE Q2-EVOLUTION. *
+* IF NEEDED, HEAVY QUARK DENSITIES CAN BE TAKEN FROM THE 1991 *
+* GRV PARAMETRIZATION. *
+* *
+* NLO DISTRIBUTIONS ARE GIVEN IN MS-BAR FACTORIZATION SCHEME *
+* (SUBROUTINE GRV94HO) AS WELL AS IN THE DIS SCHEME (GRV94DI), *
+* THE LEADING ORDER PARAMETRIZATION IS PROVIDED BY "GRV94LO". *
+* *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*
+*...INPUT PARAMETERS :
+*
+* X = MOMENTUM FRACTION
+* Q2 = SCALE Q**2 IN GEV**2
+*
+*...OUTPUT (ALWAYS X TIMES THE DISTRIBUTION) :
+*
+* UV = U(VAL) = U - U(BAR)
+* DV = D(VAL) = D - D(BAR)
+* DEL = D(BAR) - U(BAR)
+* UDB = U(BAR) + D(BAR)
+* SB = S = S(BAR)
+* GL = GLUON
+*
+*...LO PARAMETRIZATION :
+*
+ SUBROUTINE PHO_DOR94LO (X, Q2, UV, DV, DEL, UDB, SB, GL)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.23
+ LAM2 = 0.2322 * 0.2322
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+*...UV :
+ NU = 2.284 + 0.802 * S + 0.055 * S2
+ AKU = 0.590 - 0.024 * S
+ BKU = 0.131 + 0.063 * S
+ AU = -0.449 - 0.138 * S - 0.076 * S2
+ BU = 0.213 + 2.669 * S - 0.728 * S2
+ CU = 8.854 - 9.135 * S + 1.979 * S2
+ DU = 2.997 + 0.753 * S - 0.076 * S2
+ UV = PHO_DOR94FV (X, NU, AKU, BKU, AU, BU, CU, DU)
+*...DV :
+ ND = 0.371 + 0.083 * S + 0.039 * S2
+ AKD = 0.376
+ BKD = 0.486 + 0.062 * S
+ AD = -0.509 + 3.310 * S - 1.248 * S2
+ BD = 12.41 - 10.52 * S + 2.267 * S2
+ CD = 6.373 - 6.208 * S + 1.418 * S2
+ DD = 3.691 + 0.799 * S - 0.071 * S2
+ DV = PHO_DOR94FV (X, ND, AKD, BKD, AD, BD, CD, DD)
+*...DEL :
+ NE = 0.082 + 0.014 * S + 0.008 * S2
+ AKE = 0.409 - 0.005 * S
+ BKE = 0.799 + 0.071 * S
+ AE = -38.07 + 36.13 * S - 0.656 * S2
+ BE = 90.31 - 74.15 * S + 7.645 * S2
+ CE = 0.0
+ DE = 7.486 + 1.217 * S - 0.159 * S2
+ DEL = PHO_DOR94FV (X, NE, AKE, BKE, AE, BE, CE, DE)
+*...UDB :
+ ALX = 1.451
+ BEX = 0.271
+ AKX = 0.410 - 0.232 * S
+ BKX = 0.534 - 0.457 * S
+ AGX = 0.890 - 0.140 * S
+ BGX = -0.981
+ CX = 0.320 + 0.683 * S
+ DX = 4.752 + 1.164 * S + 0.286 * S2
+ EX = 4.119 + 1.713 * S
+ ESX = 0.682 + 2.978 * S
+ UDB = PHO_DOR94FW(X,S,ALX,BEX,AKX,BKX,AGX,BGX,CX,DX,EX,ESX)
+*...SB :
+ ALS = 0.914
+ BES = 0.577
+ AKS = 1.798 - 0.596 * S
+ AS = -5.548 + 3.669 * DS - 0.616 * S
+ BS = 18.92 - 16.73 * DS + 5.168 * S
+ DST = 6.379 - 0.350 * S + 0.142 * S2
+ EST = 3.981 + 1.638 * S
+ ESS = 6.402
+ SB = PHO_DOR94FS (X, S, ALS, BES, AKS, AS, BS, DST, EST, ESS)
+*...GL :
+ ALG = 0.524
+ BEG = 1.088
+ AKG = 1.742 - 0.930 * S
+ BKG = - 0.399 * S2
+ AG = 7.486 - 2.185 * S
+ BG = 16.69 - 22.74 * S + 5.779 * S2
+ CG = -25.59 + 29.71 * S - 7.296 * S2
+ DG = 2.792 + 2.215 * S + 0.422 * S2 - 0.104 * S3
+ EG = 0.807 + 2.005 * S
+ ESG = 3.841 + 0.316 * S
+ GL = PHO_DOR94FW(X,S,ALG,BEG,AKG,BKG,AG,BG,CG,DG,EG,ESG)
+
+ END
+
+*
+*...NLO PARAMETRIZATION (MS(BAR)) :
+*
+CDECK ID>, PHO_DOR94HO
+ SUBROUTINE PHO_DOR94HO (X, Q2, UV, DV, DEL, UDB, SB, GL)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.34
+ LAM2 = 0.248 * 0.248
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+*...UV :
+ NU = 1.304 + 0.863 * S
+ AKU = 0.558 - 0.020 * S
+ BKU = 0.183 * S
+ AU = -0.113 + 0.283 * S - 0.321 * S2
+ BU = 6.843 - 5.089 * S + 2.647 * S2 - 0.527 * S3
+ CU = 7.771 - 10.09 * S + 2.630 * S2
+ DU = 3.315 + 1.145 * S - 0.583 * S2 + 0.154 * S3
+ UV = PHO_DOR94FV (X, NU, AKU, BKU, AU, BU, CU, DU)
+*...DV :
+ ND = 0.102 - 0.017 * S + 0.005 * S2
+ AKD = 0.270 - 0.019 * S
+ BKD = 0.260
+ AD = 2.393 + 6.228 * S - 0.881 * S2
+ BD = 46.06 + 4.673 * S - 14.98 * S2 + 1.331 * S3
+ CD = 17.83 - 53.47 * S + 21.24 * S2
+ DD = 4.081 + 0.976 * S - 0.485 * S2 + 0.152 * S3
+ DV = PHO_DOR94FV (X, ND, AKD, BKD, AD, BD, CD, DD)
+*...DEL :
+ NE = 0.070 + 0.042 * S - 0.011 * S2 + 0.004 * S3
+ AKE = 0.409 - 0.007 * S
+ BKE = 0.782 + 0.082 * S
+ AE = -29.65 + 26.49 * S + 5.429 * S2
+ BE = 90.20 - 74.97 * S + 4.526 * S2
+ CE = 0.0
+ DE = 8.122 + 2.120 * S - 1.088 * S2 + 0.231 * S3
+ DEL = PHO_DOR94FV (X, NE, AKE, BKE, AE, BE, CE, DE)
+*...UDB :
+ ALX = 0.877
+ BEX = 0.561
+ AKX = 0.275
+ BKX = 0.0
+ AGX = 0.997
+ BGX = 3.210 - 1.866 * S
+ CX = 7.300
+ DX = 9.010 + 0.896 * DS + 0.222 * S2
+ EX = 3.077 + 1.446 * S
+ ESX = 3.173 - 2.445 * DS + 2.207 * S
+ UDB = PHO_DOR94FW(X,S,ALX,BEX,AKX,BKX,AGX,BGX,CX,DX,EX,ESX)
+*...SB :
+ ALS = 0.756
+ BES = 0.216
+ AKS = 1.690 + 0.650 * DS - 0.922 * S
+ AS = -4.329 + 1.131 * S
+ BS = 9.568 - 1.744 * S
+ DST = 9.377 + 1.088 * DS - 1.320 * S + 0.130 * S2
+ EST = 3.031 + 1.639 * S
+ ESS = 5.837 + 0.815 * S
+ SB = PHO_DOR94FS (X, S, ALS, BES, AKS, AS, BS, DST, EST, ESS)
+*...GL :
+ ALG = 1.014
+ BEG = 1.738
+ AKG = 1.724 + 0.157 * S
+ BKG = 0.800 + 1.016 * S
+ AG = 7.517 - 2.547 * S
+ BG = 34.09 - 52.21 * DS + 17.47 * S
+ CG = 4.039 + 1.491 * S
+ DG = 3.404 + 0.830 * S
+ EG = -1.112 + 3.438 * S - 0.302 * S2
+ ESG = 3.256 - 0.436 * S
+ GL = PHO_DOR94FW(X,S,ALG,BEG,AKG,BKG,AG,BG,CG,DG,EG,ESG)
+
+ END
+
+CDECK ID>, PHO_DOR94DI
+*
+*...NLO PARAMETRIZATION (DIS) :
+*
+ SUBROUTINE PHO_DOR94DI (X, Q2, UV, DV, DEL, UDB, SB, GL)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.34
+ LAM2 = 0.248 * 0.248
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+*...UV :
+ NU = 2.484 + 0.116 * S + 0.093 * S2
+ AKU = 0.563 - 0.025 * S
+ BKU = 0.054 + 0.154 * S
+ AU = -0.326 - 0.058 * S - 0.135 * S2
+ BU = -3.322 + 8.259 * S - 3.119 * S2 + 0.291 * S3
+ CU = 11.52 - 12.99 * S + 3.161 * S2
+ DU = 2.808 + 1.400 * S - 0.557 * S2 + 0.119 * S3
+ UV = PHO_DOR94FV (X, NU, AKU, BKU, AU, BU, CU, DU)
+*...DV :
+ ND = 0.156 - 0.017 * S
+ AKD = 0.299 - 0.022 * S
+ BKD = 0.259 - 0.015 * S
+ AD = 3.445 + 1.278 * S + 0.326 * S2
+ BD = -6.934 + 37.45 * S - 18.95 * S2 + 1.463 * S3
+ CD = 55.45 - 69.92 * S + 20.78 * S2
+ DD = 3.577 + 1.441 * S - 0.683 * S2 + 0.179 * S3
+ DV = PHO_DOR94FV (X, ND, AKD, BKD, AD, BD, CD, DD)
+*...DEL :
+ NE = 0.099 + 0.019 * S + 0.002 * S2
+ AKE = 0.419 - 0.013 * S
+ BKE = 1.064 - 0.038 * S
+ AE = -44.00 + 98.70 * S - 14.79 * S2
+ BE = 28.59 - 40.94 * S - 13.66 * S2 + 2.523 * S3
+ CE = 84.57 - 108.8 * S + 31.52 * S2
+ DE = 7.469 + 2.480 * S - 0.866 * S2
+ DEL = PHO_DOR94FV (X, NE, AKE, BKE, AE, BE, CE, DE)
+*...UDB :
+ ALX = 1.215
+ BEX = 0.466
+ AKX = 0.326 + 0.150 * S
+ BKX = 0.956 + 0.405 * S
+ AGX = 0.272
+ BGX = 3.794 - 2.359 * DS
+ CX = 2.014
+ DX = 7.941 + 0.534 * DS - 0.940 * S + 0.410 * S2
+ EX = 3.049 + 1.597 * S
+ ESX = 4.396 - 4.594 * DS + 3.268 * S
+ UDB = PHO_DOR94FW(X,S,ALX,BEX,AKX,BKX,AGX,BGX,CX,DX,EX,ESX)
+*...SB :
+ ALS = 0.175
+ BES = 0.344
+ AKS = 1.415 - 0.641 * DS
+ AS = 0.580 - 9.763 * DS + 6.795 * S - 0.558 * S2
+ BS = 5.617 + 5.709 * DS - 3.972 * S
+ DST = 13.78 - 9.581 * S + 5.370 * S2 - 0.996 * S3
+ EST = 4.546 + 0.372 * S2
+ ESS = 5.053 - 1.070 * S + 0.805 * S2
+ SB = PHO_DOR94FS (X, S, ALS, BES, AKS, AS, BS, DST, EST, ESS)
+*...GL :
+ ALG = 1.258
+ BEG = 1.846
+ AKG = 2.423
+ BKG = 2.427 + 1.311 * S - 0.153 * S2
+ AG = 25.09 - 7.935 * S
+ BG = -14.84 - 124.3 * DS + 72.18 * S
+ CG = 590.3 - 173.8 * S
+ DG = 5.196 + 1.857 * S
+ EG = -1.648 + 3.988 * S - 0.432 * S2
+ ESG = 3.232 - 0.542 * S
+ GL = PHO_DOR94FW(X,S,ALG,BEG,AKG,BKG,AG,BG,CG,DG,EG,ESG)
+
+ END
+
+*
+*...FUNCTIONAL FORMS OF THE PARAMETRIZATIONS :
+*
+CDECK ID>, PHO_DOR94FV
+ DOUBLE PRECISION FUNCTION PHO_DOR94FV (X,N,AK,BK,A,B,C,D)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ DX = SQRT (X)
+ PHO_DOR94FV = N*X**AK*(1.D0+A*X**BK+X*(B+C*DX))*(1.D0-X)**D
+
+ END
+
+CDECK ID>, PHO_DOR94FW
+ DOUBLE PRECISION FUNCTION PHO_DOR94FW(X,S,AL,BE,AK,BK,
+ & A,B,C,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ LX = LOG (1./X)
+ PHO_DOR94FW = (X**AK * (A + X * (B + X*C)) * LX**BK + S**AL
+ 1 * DEXP (-E + SQRT (ES * S**BE * LX))) * (1.- X)**D
+
+ END
+
+CDECK ID>, PHO_DOR94FS
+ DOUBLE PRECISION FUNCTION PHO_DOR94FS (X,S,AL,BE,AK,AG,B,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ DX = SQRT (X)
+ LX = LOG (1./X)
+ PHO_DOR94FS = S**AL / LX**AK * (1.+ AG*DX + B*X) * (1.- X)**D
+ 1 * DEXP (-E + SQRT (ES * S**BE * LX))
+
+ END
+
+CDECK ID>, PHO_DOR92LO
+*
+*
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* *
+* G R V - P R O T O N - P A R A M E T R I Z A T I O N S *
+* *
+* FOR A DETAILED EXPLANATION SEE : *
+* M. GLUECK, E.REYA, A.VOGT: DO-TH 91/07 *
+* *
+* THE PARAMETRIZATIONS ARE FITTED TO THE PARTON DISTRIBUTIONS *
+* FOR Q ** 2 BETWEEN MU ** 2 (= 0.25 / 0.30 GEV ** 2 IN LO *
+* / HO) AND 1.E8 GEV ** 2 AND FOR X BETWEEN 1.E-5 AND 1. *
+* REGIONS, WHERE THE DISTRIBUTION UNDER CONSIDERATION IS NEG- *
+* LIGIBLE, I.E. BELOW ABOUT 1.E-4, WERE EXCLUDED FROM THE FIT. *
+* *
+* HEAVY QUARK THRESHOLDS Q(H) = M(H) : *
+* M(C) = 1.5, M(B) = 4.5, M(T) = 100 GEV *
+* *
+* CORRESPONDING LAMBDA(F) VALUES FOR F ACTIVE FLAVOURS : *
+* LO : LAMBDA(3) = 0.232, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.153, LAMBDA(6) = 0.082 GEV *
+* HO : LAMBDA(3) = 0.248, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.131, LAMBDA(6) = 0.053 GEV *
+* *
+* HO DISTRIBUTION REFER TO THE MS-BAR SCHEME OF BARDEEN ET AL. *
+* *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+C
+ SUBROUTINE PHO_DOR92LO (X, Q2, UDV, DV, GL, UDB, SB, CB, BB)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.25
+ LAM2 = 0.232 * 0.232
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ S2 = S * S
+ S3 = S2 * S
+C...X * (UV + DV) :
+ NUD = 0.663 + 0.191 * S - 0.041 * S2 + 0.031 * S3
+ AKUD = 0.326
+ AGUD = -1.97 + 6.74 * S - 1.96 * S2
+ BUD = 24.4 - 20.7 * S + 4.08 * S2
+ DUD = 2.86 + 0.70 * S - 0.02 * S2
+ UDV = PHO_DOR92FV (X, NUD, AKUD, AGUD, BUD, DUD)
+C...X * DV :
+ ND = 0.579 + 0.283 * S + 0.047 * S2
+ AKD = 0.523 - 0.015 * S
+ AGD = 2.22 - 0.59 * S - 0.27 * S2
+ BD = 5.95 - 6.19 * S + 1.55 * S2
+ DD = 3.57 + 0.94 * S - 0.16 * S2
+ DV = PHO_DOR92FV (X,ND,AKD,AGD,BD,DD)
+C...X * G :
+ ALG = 0.558
+ BEG = 1.218
+ AKG = 1.00 - 0.17 * S
+ BKG = 0.0
+ AGG = 0.0 + 4.879 * S - 1.383 * S2
+ BGG = 25.92 - 28.97 * S + 5.596 * S2
+ CG = -25.69 + 23.68 * S - 1.975 * S2
+ DG = 2.537 + 1.718 * S + 0.353 * S2
+ EG = 0.595 + 2.138 * S
+ ESG = 4.066
+ GL = PHO_DOR92FW(X,S,ALG,BEG,AKG,BKG,AGG,BGG,CG,DG,EG,ESG)
+C...X * UBAR = X * DBAR :
+ ALU = 1.396
+ BEU = 1.331
+ AKU = 0.412 - 0.171 * S
+ BKU = 0.566 - 0.496 * S
+ AGU = 0.363
+ BGU = -1.196
+ CU = 1.029 + 1.785 * S - 0.459 * S2
+ DU = 4.696 + 2.109 * S
+ EU = 3.838 + 1.944 * S
+ ESU = 2.845
+ UDB = PHO_DOR92FW(X,S,ALU,BEU,AKU,BKU,AGU,BGU,CU,DU,EU,ESU)
+C...X * SBAR = X * S :
+ SS = 0.0
+ ALS = 0.803
+ BES = 0.563
+ AKS = 2.082 - 0.577 * S
+ AGS = -3.055 + 1.024 * S ** 0.67
+ BS = 27.4 - 20.0 * S ** 0.154
+ DS = 6.22
+ EST = 4.33 + 1.408 * S
+ ESS = 8.27 - 0.437 * S
+ SB = PHO_DOR92FS(X,S,SS,ALS,BES,AKS,AGS,BS,DS,EST,ESS)
+C...X * CBAR = X * C :
+ SC = 0.888
+ ALC = 1.01
+ BEC = 0.37
+ AKC = 0.0
+ AGC = 0.0
+ BC = 4.24 - 0.804 * S
+ DC = 3.46 + 1.076 * S
+ EC = 4.61 + 1.490 * S
+ ESC = 2.555 + 1.961 * S
+ CB = PHO_DOR92FS(X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+C...X * BBAR = X * B :
+ SBO = 1.351
+ ALB = 1.00
+ BEB = 0.51
+ AKB = 0.0
+ AGB = 0.0
+ BBO = 1.848
+ DB = 2.929 + 1.396 * S
+ EB = 4.71 + 1.514 * S
+ ESB = 4.02 + 1.239 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+
+ END
+
+CDECK ID>, PHO_DOR92HO
+ SUBROUTINE PHO_DOR92HO (X, Q2, UDV, DV, GL, UDB, SB, CB, BB)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.3
+ LAM2 = 0.248 * 0.248
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+C...X * (UV + DV) :
+ NUD = 0.330 + 0.151 * S - 0.059 * S2 + 0.027 * S3
+ AKUD = 0.285
+ AGUD = -2.28 + 15.73 * S - 4.58 * S2
+ BUD = 56.7 - 53.6 * S + 11.21 * S2
+ DUD = 3.17 + 1.17 * S - 0.47 * S2 + 0.09 * S3
+ UDV = PHO_DOR92FV (X, NUD, AKUD, AGUD, BUD, DUD)
+C...X * DV :
+ ND = 0.459 + 0.315 * DS + 0.515 * S
+ AKD = 0.624 - 0.031 * S
+ AGD = 8.13 - 6.77 * DS + 0.46 * S
+ BD = 6.59 - 12.83 * DS + 5.65 * S
+ DD = 3.98 + 1.04 * S - 0.34 * S2
+ DV = PHO_DOR92FV (X, ND, AKD, AGD, BD, DD)
+C...X * G :
+ ALG = 1.128
+ BEG = 1.575
+ AKG = 0.323 + 1.653 * S
+ BKG = 0.811 + 2.044 * S
+ AGG = 0.0 + 1.963 * S - 0.519 * S2
+ BGG = 0.078 + 6.24 * S
+ CG = 30.77 - 24.19 * S
+ DG = 3.188 + 0.720 * S
+ EG = -0.881 + 2.687 * S
+ ESG = 2.466
+ GL = PHO_DOR92FW(X,S,ALG,BEG,AKG,BKG,AGG,BGG,CG,DG,EG,ESG)
+C...X * UBAR = X * DBAR :
+ ALU = 0.594
+ BEU = 0.614
+ AKU = 0.636 - 0.084 * S
+ BKU = 0.0
+ AGU = 1.121 - 0.193 * S
+ BGU = 0.751 - 0.785 * S
+ CU = 8.57 - 1.763 * S
+ DU = 10.22 + 0.668 * S
+ EU = 3.784 + 1.280 * S
+ ESU = 1.808 + 0.980 * S
+ UDB = PHO_DOR92FW(X,S,ALU,BEU,AKU,BKU,AGU,BGU,CU,DU,EU,ESU)
+C...X * SBAR = X * S :
+ SS = 0.0
+ ALS = 0.756
+ BES = 0.101
+ AKS = 2.942 - 1.016 * S
+ AGS = -4.60 + 1.167 * S
+ BS = 9.31 - 1.324 * S
+ DS = 11.49 - 1.198 * S + 0.053 * S2
+ EST = 2.630 + 1.729 * S
+ ESS = 8.12
+ SB = PHO_DOR92FS (X,S,SS,ALS,BES,AKS,AGS,BS,DS,EST,ESS)
+C...X * CBAR = X * C :
+ SC = 0.820
+ ALC = 0.98
+ BEC = 0.0
+ AKC = -0.625 - 0.523 * S
+ AGC = 0.0
+ BC = 1.896 + 1.616 * S
+ DC = 4.12 + 0.683 * S
+ EC = 4.36 + 1.328 * S
+ ESC = 0.677 + 0.679 * S
+ CB = PHO_DOR92FS (X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+C...X * BBAR = X * B :
+ SBO = 1.297
+ ALB = 0.99
+ BEB = 0.0
+ AKB = 0.0 - 0.193 * S
+ AGB = 0.0
+ BBO = 0.0
+ DB = 3.447 + 0.927 * S
+ EB = 4.68 + 1.259 * S
+ ESB = 1.892 + 2.199 * S
+ BB = PHO_DOR92FS(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+
+ END
+
+CDECK ID>, PHO_DOR92FV
+ DOUBLE PRECISION FUNCTION PHO_DOR92FV(X,N,AK,AG,B,D)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+ DX = SQRT (X)
+ PHO_DOR92FV = N * X**AK * (1.+ AG*DX + B*X) * (1.- X)**D
+
+ END
+
+CDECK ID>, PHO_DOR92FW
+ DOUBLE PRECISION FUNCTION PHO_DOR92FW(X,S,
+ & AL,BE,AK,BK,AG,BG,C,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+ LX = LOG (1./X)
+ PHO_DOR92FW = (X**AK * (AG + X * (BG + X*C)) * LX**BK + S**AL
+ 1 * EXP (-E + SQRT (ES * S**BE * LX))) * (1.- X)**D
+
+ END
+
+CDECK ID>, PHO_DOR92FS
+ DOUBLE PRECISION FUNCTION PHO_DOR92FS(X,S,ST,AL,BE,AK,AG,B,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ DX = SQRT (X)
+ LX = LOG (1./X)
+ IF (S .LE. ST) THEN
+ PHO_DOR92FS = 0.D0
+ ELSE
+ PHO_DOR92FS = (S-ST)**AL/LX**AK*(1.D0+AG*DX+B*X)*(1.D0-X)**D
+ 1 * EXP (-E + SQRT (ES * S**BE * LX))
+ END IF
+
+ END
+
+CDECK ID>, PHO_DORPLO
+*
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* *
+* G R V - P I O N - P A R A M E T R I Z A T I O N S *
+* *
+* FOR A DETAILED EXPLANATION SEE : *
+* M. GLUECK, E.REYA, A.VOGT: DO-TH 91/16 *
+* *
+* THE PARAMETRIZATIONS ARE FITTED TO THE PARTON DISTRIBUTIONS *
+* FOR Q ** 2 BETWEEN MU ** 2 (= 0.25 / 0.30 GEV ** 2 IN LO *
+* / HO) AND 1.E8 GEV ** 2 AND FOR X BETWEEN 1.E-5 AND 1. *
+* REGIONS, WHERE THE DISTRIBUTION UNDER CONSIDERATION IS NEG- *
+* LIGIBLE, I.E. BELOW ABOUT 1.E-4, WERE EXCLUDED FROM THE FIT. *
+* *
+* HEAVY QUARK THRESHOLDS Q(H) = M(H) : *
+* M(C) = 1.5, M(B) = 4.5, M(T) = 100 GEV *
+* *
+* CORRESPONDING LAMBDA(F) VALUES FOR F ACTIVE FLAVOURS : *
+* LO : LAMBDA(3) = 0.232, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.153, LAMBDA(6) = 0.082 GEV *
+* HO : LAMBDA(3) = 0.248, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.131, LAMBDA(6) = 0.053 GEV *
+* *
+* HO DISTRIBUTION REFER TO THE MS-BAR SCHEME OF BARDEEN ET AL. *
+* *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+C
+ SUBROUTINE PHO_DORPLO (X, Q2, VAP, GLP, QBP, CBP, BBP)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.25
+ LAM2 = 0.232 * 0.232
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+C...X * VALENCE :
+ NV = 0.519 + 0.180 * S - 0.011 * S2
+ AKV = 0.499 - 0.027 * S
+ AGV = 0.381 - 0.419 * S
+ DV = 0.367 + 0.563 * S
+ VAP = PHO_DORFVP (X, NV, AKV, AGV, DV)
+C...X * GLUON :
+ ALG = 0.599
+ BEG = 1.263
+ AKG = 0.482 + 0.341 * DS
+ BKG = 0.0
+ AGG = 0.678 + 0.877 * S - 0.175 * S2
+ BGG = 0.338 - 1.597 * S
+ CG = 0.0 - 0.233 * S + 0.406 * S2
+ DG = 0.390 + 1.053 * S
+ EG = 0.618 + 2.070 * S
+ ESG = 3.676
+ GLP = PHO_DORFGP(X,S,ALG,BEG,AKG,BKG,AGG,BGG,CG,DG,EG,ESG)
+C...X * QBAR (SU(3)-SYMMETRIC SEA) :
+ SL = 0.0
+ ALS = 0.55
+ BES = 0.56
+ AKS = 2.538 - 0.763 * S
+ AGS = -0.748
+ BS = 0.313 + 0.935 * S
+ DS = 3.359
+ EST = 4.433 + 1.301 * S
+ ESS = 9.30 - 0.887 * S
+ QBP = PHO_DORFQP (X,S,SL,ALS,BES,AKS,AGS,BS,DS,EST,ESS)
+C...X * CBAR = X * C :
+ SC = 0.888
+ ALC = 1.02
+ BEC = 0.39
+ AKC = 0.0
+ AGC = 0.0
+ BC = 1.008
+ DC = 1.208 + 0.771 * S
+ EC = 4.40 + 1.493 * S
+ ESC = 2.032 + 1.901 * S
+ CBP = PHO_DORFQP (X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+C...X * BBAR = X * B :
+ SBO = 1.351
+ ALB = 1.03
+ BEB = 0.39
+ AKB = 0.0
+ AGB = 0.0
+ BBO = 0.0
+ DB = 0.697 + 0.855 * S
+ EB = 4.51 + 1.490 * S
+ ESB = 3.056 + 1.694 * S
+ BBP = PHO_DORFQP(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+
+ END
+
+CDECK ID>, PHO_DORPHO
+ SUBROUTINE PHO_DORPHO (X, Q2, VAP, GLP, QBP, CBP, BBP)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.3
+ LAM2 = 0.248 * 0.248
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+C...X * VALENCE :
+ NV = 0.456 + 0.150 * DS + 0.112 * S - 0.019 * S2
+ AKV = 0.505 - 0.033 * S
+ AGV = 0.748 - 0.669 * DS - 0.133 * S
+ DV = 0.365 + 0.197 * DS + 0.394 * S
+ VAP = PHO_DORFVP (X, NV, AKV, AGV, DV)
+C...X * GLUON :
+ ALG = 1.096
+ BEG = 1.371
+ AKG = 0.437 - 0.689 * DS
+ BKG = -0.631
+ AGG = 1.324 - 0.441 * DS - 0.130 * S
+ BGG = -0.955 + 0.259 * S
+ CG = 1.075 - 0.302 * S
+ DG = 1.158 + 1.229 * S
+ EG = 0.0 + 2.510 * S
+ ESG = 2.604 + 0.165 * S
+ GLP = PHO_DORFGP(X,S,ALG,BEG,AKG,BKG,AGG,BGG,CG,DG,EG,ESG)
+C...X * QBAR (SU(3)-SYMMETRIC SEA) :
+ SL = 0.0
+ ALS = 0.85
+ BES = 0.96
+ AKS = -0.350 + 0.806 * S
+ AGS = -1.663
+ BS = 3.148
+ DS = 2.273 + 1.438 * S
+ EST = 3.214 + 1.545 * S
+ ESS = 1.341 + 1.938 * S
+ QBP = PHO_DORFQP (X,S,SL,ALS,BES,AKS,AGS,BS,DS,EST,ESS)
+C...X * CBAR = X * C :
+ SC = 0.820
+ ALC = 0.98
+ BEC = 0.0
+ AKC = 0.0 - 0.457 * S
+ AGC = 0.0
+ BC = -1.00 + 1.40 * S
+ DC = 1.318 + 0.584 * S
+ EC = 4.45 + 1.235 * S
+ ESC = 1.496 + 1.010 * S
+ CBP = PHO_DORFQP (X,S,SC,ALC,BEC,AKC,AGC,BC,DC,EC,ESC)
+C...X * BBAR = X * B :
+ SBO = 1.297
+ ALB = 0.99
+ BEB = 0.0
+ AKB = 0.0 - 0.172 * S
+ AGB = 0.0
+ BBO = 0.0
+ DB = 1.447 + 0.485 * S
+ EB = 4.79 + 1.164 * S
+ ESB = 1.724 + 2.121 * S
+ BBP = PHO_DORFQP(X,S,SBO,ALB,BEB,AKB,AGB,BBO,DB,EB,ESB)
+
+ END
+
+CDECK ID>, PHO_DORFVP
+ DOUBLE PRECISION FUNCTION PHO_DORFVP(X,N,AK,AG,D)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ DX = SQRT (X)
+ PHO_DORFVP = N * X**AK * (1.+ AG*DX) * (1.- X)**D
+
+ END
+
+CDECK ID>, PHO_DORFGP
+ DOUBLE PRECISION FUNCTION PHO_DORFGP(X,S,AL,BE,AK,BK,AG,
+ & BG,C,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ DX = SQRT (X)
+ LX = LOG (1./X)
+ PHO_DORFGP = (X**AK * (AG + BG*DX + C*X) * LX**BK + S**AL
+ 1 * EXP (-E + SQRT (ES * S**BE * LX))) * (1.- X)**D
+
+ END
+
+CDECK ID>, PHO_DORFQP
+ DOUBLE PRECISION FUNCTION PHO_DORFQP(X,S,ST,AL,BE,AK,AG,B,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ DX = SQRT (X)
+ LX = LOG (1./X)
+ IF (S .LE. ST) THEN
+ PHO_DORFQP = 0.0
+ ELSE
+ PHO_DORFQP = (S-ST)**AL/LX**AK*(1.D0+AG*DX+B*X)*(1.D0-X)**D
+ 1 * EXP (-E + SQRT (ES * S**BE * LX))
+ END IF
+
+ END
+
+CDECK ID>, PHO_DORGLO
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* *
+* G R V - P H O T O N - P A R A M E T R I Z A T I O N S *
+* *
+* FOR A DETAILED EXPLANATION SEE : *
+* M. GLUECK, E.REYA, A.VOGT: DO-TH 91/31 *
+* *
+* THE OUTPUT IS ALWAYS 1./ ALPHA(EM) * X * PARTON DENSITY *
+* *
+* THE PARAMETRIZATIONS ARE FITTED TO THE PARTON DISTRIBUTIONS *
+* FOR Q ** 2 BETWEEN MU ** 2 (= 0.25 / 0.30 GEV ** 2 IN LO *
+* / HO) AND 1.E6 GEV ** 2 AND FOR X BETWEEN 1.E-5 AND 1. *
+* *
+* HEAVY QUARK THRESHOLDS Q(H) = M(H) : *
+* M(C) = 1.5, M(B) = 4.5, M(T) = 100 GEV *
+* *
+* CORRESPONDING LAMBDA(F) VALUES FOR F ACTIVE FLAVOURS : *
+* LO : LAMBDA(3) = 0.232, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.153, LAMBDA(6) = 0.082 GEV *
+* HO : LAMBDA(3) = 0.248, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.131, LAMBDA(6) = 0.053 GEV *
+* *
+* HO DISTRIBUTIONS REFER TO THE DIS(GAMMA) SCHEME, SEE : *
+* M. GLUECK, E.REYA, A.VOGT: DO-TH 91/26 *
+* *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+C
+ SUBROUTINE PHO_DORGLO (X, Q2, UL, DL, SL, CL, BL, GL)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.25
+ LAM2 = 0.232 * 0.232
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ SS = SQRT (S)
+ S2 = S * S
+C...X * U = X * UBAR :
+ AL = 1.717
+ BE = 0.641
+ AK = 0.500 - 0.176 * S
+ BK = 15.00 - 5.687 * SS - 0.552 * S2
+ AG = 0.235 + 0.046 * SS
+ BG = 0.082 - 0.051 * S + 0.168 * S2
+ C = 0.0 + 0.459 * S
+ D = 0.354 - 0.061 * S
+ E = 4.899 + 1.678 * S
+ ES = 2.046 + 1.389 * S
+ UL = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * D = X * DBAR :
+ AL = 1.549
+ BE = 0.782
+ AK = 0.496 + 0.026 * S
+ BK = 0.685 - 0.580 * SS + 0.608 * S2
+ AG = 0.233 + 0.302 * S
+ BG = 0.0 - 0.818 * S + 0.198 * S2
+ C = 0.114 + 0.154 * S
+ D = 0.405 - 0.195 * S + 0.046 * S2
+ E = 4.807 + 1.226 * S
+ ES = 2.166 + 0.664 * S
+ DL = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * G :
+ AL = 0.676
+ BE = 1.089
+ AK = 0.462 - 0.524 * SS
+ BK = 5.451 - 0.804 * S2
+ AG = 0.535 - 0.504 * SS + 0.288 * S2
+ BG = 0.364 - 0.520 * S
+ C = -0.323 + 0.115 * S2
+ D = 0.233 + 0.790 * S - 0.139 * S2
+ E = 0.893 + 1.968 * S
+ ES = 3.432 + 0.392 * S
+ GL = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * S = X * SBAR :
+ SF = 0.0
+ AL = 1.609
+ BE = 0.962
+ AK = 0.470 - 0.099 * S2
+ BK = 3.246
+ AG = 0.121 - 0.068 * SS
+ BG = -0.090 + 0.074 * S
+ C = 0.062 + 0.034 * S
+ D = 0.0 + 0.226 * S - 0.060 * S2
+ E = 4.288 + 1.707 * S
+ ES = 2.122 + 0.656 * S
+ SL = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * C = X * CBAR :
+ SF = 0.888
+ AL = 0.970
+ BE = 0.545
+ AK = 1.254 - 0.251 * S
+ BK = 3.932 - 0.327 * S2
+ AG = 0.658 + 0.202 * S
+ BG = -0.699
+ C = 0.965
+ D = 0.0 + 0.141 * S - 0.027 * S2
+ E = 4.911 + 0.969 * S
+ ES = 2.796 + 0.952 * S
+ CL = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * B = X * BBAR :
+ SF = 1.351
+ AL = 1.016
+ BE = 0.338
+ AK = 1.961 - 0.370 * S
+ BK = 0.923 + 0.119 * S
+ AG = 0.815 + 0.207 * S
+ BG = -2.275
+ C = 1.480
+ D = -0.223 + 0.173 * S
+ E = 5.426 + 0.623 * S
+ ES = 3.819 + 0.901 * S
+ BL = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+
+ END
+
+CDECK ID>, PHO_DORGHO
+ SUBROUTINE PHO_DORGHO (X, Q2, UH, DH, SH, CH, BH, GH)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.3
+ LAM2 = 0.248 * 0.248
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ SS = SQRT (S)
+ S2 = S * S
+C...X * U = X * UBAR :
+ AL = 0.583
+ BE = 0.688
+ AK = 0.449 - 0.025 * S - 0.071 * S2
+ BK = 5.060 - 1.116 * SS
+ AG = 0.103
+ BG = 0.319 + 0.422 * S
+ C = 1.508 + 4.792 * S - 1.963 * S2
+ D = 1.075 + 0.222 * SS - 0.193 * S2
+ E = 4.147 + 1.131 * S
+ ES = 1.661 + 0.874 * S
+ UH = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * D = X * DBAR :
+ AL = 0.591
+ BE = 0.698
+ AK = 0.442 - 0.132 * S - 0.058 * S2
+ BK = 5.437 - 1.916 * SS
+ AG = 0.099
+ BG = 0.311 - 0.059 * S
+ C = 0.800 + 0.078 * S - 0.100 * S2
+ D = 0.862 + 0.294 * SS - 0.184 * S2
+ E = 4.202 + 1.352 * S
+ ES = 1.841 + 0.990 * S
+ DH = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * G :
+ AL = 1.161
+ BE = 1.591
+ AK = 0.530 - 0.742 * SS + 0.025 * S2
+ BK = 5.662
+ AG = 0.533 - 0.281 * SS + 0.218 * S2
+ BG = 0.025 - 0.518 * S + 0.156 * S2
+ C = -0.282 + 0.209 * S2
+ D = 0.107 + 1.058 * S - 0.218 * S2
+ E = 0.0 + 2.704 * S
+ ES = 3.071 - 0.378 * S
+ GH = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * S = X * SBAR :
+ SF = 0.0
+ AL = 0.635
+ BE = 0.456
+ AK = 1.770 - 0.735 * SS - 0.079 * S2
+ BK = 3.832
+ AG = 0.084 - 0.023 * S
+ BG = 0.136
+ C = 2.119 - 0.942 * S + 0.063 * S2
+ D = 1.271 + 0.076 * S - 0.190 * S2
+ E = 4.604 + 0.737 * S
+ ES = 1.641 + 0.976 * S
+ SH = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * C = X * CBAR :
+ SF = 0.820
+ AL = 0.926
+ BE = 0.152
+ AK = 1.142 - 0.175 * S
+ BK = 3.276
+ AG = 0.504 + 0.317 * S
+ BG = -0.433
+ C = 3.334
+ D = 0.398 + 0.326 * S - 0.107 * S2
+ E = 5.493 + 0.408 * S
+ ES = 2.426 + 1.277 * S
+ CH = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * B = X * BBAR :
+ SF = 1.297
+ AL = 0.969
+ BE = 0.266
+ AK = 1.953 - 0.391 * S
+ BK = 1.657 - 0.161 * S
+ AG = 1.076 + 0.034 * S
+ BG = -2.015
+ C = 1.662
+ D = 0.353 + 0.016 * S
+ E = 5.713 + 0.249 * S
+ ES = 3.456 + 0.673 * S
+ BH = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+
+ END
+
+CDECK ID>, PHO_DORGH0
+ SUBROUTINE PHO_DORGH0 (X, Q2, U0, D0, S0, C0, B0, G0)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ MU2 = 0.3
+ LAM2 = 0.248 * 0.248
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ SS = SQRT (S)
+ S2 = S * S
+C...X * U = X * UBAR :
+ AL = 1.447
+ BE = 0.848
+ AK = 0.527 + 0.200 * S - 0.107 * S2
+ BK = 7.106 - 0.310 * SS - 0.786 * S2
+ AG = 0.197 + 0.533 * S
+ BG = 0.062 - 0.398 * S + 0.109 * S2
+ C = 0.755 * S - 0.112 * S2
+ D = 0.318 - 0.059 * S
+ E = 4.225 + 1.708 * S
+ ES = 1.752 + 0.866 * S
+ U0 = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * D = X * DBAR :
+ AL = 1.424
+ BE = 0.770
+ AK = 0.500 + 0.067 * SS - 0.055 * S2
+ BK = 0.376 - 0.453 * SS + 0.405 * S2
+ AG = 0.156 + 0.184 * S
+ BG = 0.0 - 0.528 * S + 0.146 * S2
+ C = 0.121 + 0.092 * S
+ D = 0.379 - 0.301 * S + 0.081 * S2
+ E = 4.346 + 1.638 * S
+ ES = 1.645 + 1.016 * S
+ D0 = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * G :
+ AL = 0.661
+ BE = 0.793
+ AK = 0.537 - 0.600 * SS
+ BK = 6.389 - 0.953 * S2
+ AG = 0.558 - 0.383 * SS + 0.261 * S2
+ BG = 0.0 - 0.305 * S
+ C = -0.222 + 0.078 * S2
+ D = 0.153 + 0.978 * S - 0.209 * S2
+ E = 1.429 + 1.772 * S
+ ES = 3.331 + 0.806 * S
+ G0 = PHO_DORGF (X, S, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * S = X * SBAR :
+ SF = 0.0
+ AL = 1.578
+ BE = 0.863
+ AK = 0.622 + 0.332 * S - 0.300 * S2
+ BK = 2.469
+ AG = 0.211 - 0.064 * SS - 0.018 * S2
+ BG = -0.215 + 0.122 * S
+ C = 0.153
+ D = 0.0 + 0.253 * S - 0.081 * S2
+ E = 3.990 + 2.014 * S
+ ES = 1.720 + 0.986 * S
+ S0 = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * C = X * CBAR :
+ SF = 0.820
+ AL = 0.929
+ BE = 0.381
+ AK = 1.228 - 0.231 * S
+ BK = 3.806 - 0.337 * S2
+ AG = 0.932 + 0.150 * S
+ BG = -0.906
+ C = 1.133
+ D = 0.0 + 0.138 * S - 0.028 * S2
+ E = 5.588 + 0.628 * S
+ ES = 2.665 + 1.054 * S
+ C0 = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+C...X * B = X * BBAR :
+ SF = 1.297
+ AL = 0.970
+ BE = 0.207
+ AK = 1.719 - 0.292 * S
+ BK = 0.928 + 0.096 * S
+ AG = 0.845 + 0.178 * S
+ BG = -2.310
+ C = 1.558
+ D = -0.191 + 0.151 * S
+ E = 6.089 + 0.282 * S
+ ES = 3.379 + 1.062 * S
+ B0 = PHO_DORGFS (X, S, SF, AL, BE, AK, BK, AG, BG, C, D, E, ES)
+
+ END
+
+CDECK ID>, PHO_DORGF
+ DOUBLE PRECISION FUNCTION PHO_DORGF(X,S,AL,BE,AK,BK,
+ & AG,BG,C,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ SX = SQRT (X)
+ LX = LOG (1./X)
+ PHO_DORGF = (X**AK * (AG + BG * SX + C * X**BK) + S**AL
+ 1 * EXP (-E + SQRT (ES * S**BE * LX))) * (1.- X)**D
+
+ END
+
+CDECK ID>, PHO_DORGFS
+ DOUBLE PRECISION FUNCTION PHO_DORGFS(X,S,SF,AL,BE,AK,BK,AG,BG,
+ & C,D,E,ES)
+ IMPLICIT DOUBLE PRECISION (A - Z)
+ SAVE
+
+ IF (S .LE. SF) THEN
+ PHO_DORGFS = 0.0
+ ELSE
+ SX = SQRT (X)
+ LX = LOG (1./X)
+ DS = S - SF
+ PHO_DORGFS = (DS * X**AK * (AG + BG * SX + C * X**BK) + DS**AL
+ 1 * EXP (-E + SQRT (ES * S**BE * LX))) * (1.- X)**D
+ END IF
+
+ END
+
+CDECK ID>, PHO_DORGLV
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* *
+* G R S - LO - VIRTUAL PHOTON PARAMETRIZATIONS *
+* *
+* FOR A DETAILED EXPLANATION SEE *
+* M. GLUECK, E.REYA, M. STRATMANN : *
+* PHYS. REV. D51 (1995) 3220 *
+* *
+* THE PARAMETRIZATIONS ARE FITTED TO THE EVOLVED PARTONS FOR *
+* Q**2 / GEV**2 BETWEEN 0.6 AND 5.E4 *
+* AND (!) Q**2 > 5 P**2 *
+* P**2 / GEV**2 BETWEEN 0.0 AND 10. *
+* P**2 = 0 <=> REAL PHOTON *
+* X BETWEEN 1.E-4 AND 1. *
+* *
+* HEAVY QUARK THRESHOLDS Q(H) = M(H) IN THE BETA FUNCTION : *
+* M(C) = 1.5, M(B) = 4.5 *
+* CORRESPONDING LAMBDA(F) VALUES IN GEV FOR Q**2 > M(H)**2 : *
+* LO : LAMBDA(3) = 0.232, LAMBDA(4) = 0.200, *
+* LAMBDA(5) = 0.153, *
+* THE NUMBER OF ACTIVE QUARK FLAVOURS IS NF = 3 EVERYWHERE *
+* EXCEPT IN THE BETA FUNCTION, I.E. THE HEAVY QUARKS C,B,... *
+* ARE NOT PRESENT AS PARTONS IN THE Q2-EVOLUTION. *
+* *
+* PLEASE REPORT ANY STRANGE BEHAVIOUR TO : *
+* Marco.Stratmann@durham.ac.uk *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*
+*...INPUT PARAMETERS :
+*
+* X = MOMENTUM FRACTION
+* Q2 = SCALE Q**2 IN GEV**2
+* P2 = VIRTUALITY OF THE PHOTON IN GEV**2
+*
+*...OUTPUT (ALWAYS X TIMES THE DISTRIBUTION DIVIDED BY ALPHA_EM) :
+*
+********************************************************
+* subroutine grspar(x,q2,p2,ugam,dgam,sgam,ggam)
+ subroutine PHO_DORGLV(x,q2,p2,ugam,dgam,sgam,ggam)
+ implicit double precision (a-z)
+ save
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ integer check
+c
+c check limits :
+c
+ check=0
+ if(x.lt.0.0001d0) check=1
+ if((q2.lt.0.6d0).or.(q2.gt.50000.d0)) check=1
+ if(q2.lt.5.d0*p2) check=1
+c
+c calculate distributions
+c
+ if(check.eq.0) then
+ call PHO_grscalc(x,q2,p2,ugam,dgam,sgam,ggam)
+ else
+ WRITE(LO,*) 'GRS PDF parametrization: x/q2/p2 limits exceeded'
+ WRITE(LO,'(1X,A,1P,3E12.3)') 'current X, Q2, P2:',x,q2,p2
+ endif
+
+ end
+
+CDECK ID>, PHO_grscalc
+ subroutine PHO_grscalc(x,q2,p2,ugam,dgam,sgam,ggam)
+ implicit double precision (a-z)
+ save
+
+ dimension u1(40),ds1(40),g1(40)
+ dimension ud2(20),s2(20),g2(20)
+ dimension up0(20),dsp0(20),gp0(20)
+ save u1,ds1,g1,ud2,s2,g2,up0,dsp0,gp0
+c
+ data u1/-0.139d0,0.783d0,0.132d0,0.087d0,0.003d0,-0.0134d0,
+ & 0.009d0,-0.017d0,0.092d0,-0.516d0,-0.085d0,0.439d0,
+ & 0.013d0,0.108d0,-0.019d0,-0.272d0,-0.167d0,0.138d0,
+ & 0.076d0,0.026d0,-0.013d0,0.27d0,0.107d0,-0.097d0,0.04d0,
+ & 0.064d0,0.011d0,0.002d0,0.057d0,-0.057d0,0.162d0,
+ & -0.172d0,0.124d0,-0.016d0,-0.065d0,0.044d0,-1.009d0,
+ & 0.622d0,0.227d0,-0.184d0/
+ data ds1/0.033d0,0.007d0,-0.0516d0,0.12d0,0.001d0,-0.013d0,
+ & 0.018d0,-0.028d0,0.102d0,-0.595d0,-0.114d0,0.669d0,
+ & 0.022d0,0.001d0,-0.003d0,-0.0583d0,-0.041d0,0.035d0,
+ & 0.009d0,0.009d0,0.004d0,0.054d0,0.025d0,-0.02d0,
+ & 0.007d0,0.021d0,0.01d0,0.004d0,-0.067d0,0.06d0,-0.148d0,
+ & 0.13d0,0.032d0,-0.009d0,-0.06d0,0.036d0,-0.39d0,0.033d0,
+ & 0.245d0,-0.171d0/
+ data g1/0.025d0,0.d0,-0.018d0,0.112d0,-0.025d0,0.177d0,
+ & -0.022d0,0.024d0,0.001d0,-0.0104d0,0.d0,0.d0,-1.082d0,
+ & -1.666d0,0.d0,0.086d0,0.d0,0.053d0,0.005d0,-0.058d0,
+ & 0.034d0,0.073d0,1.08d0,1.63d0,-0.0256d0,-0.088d0,0.d0,
+ & 0.d0,-0.004d0,0.016d0,0.007d0,-0.012d0,0.01d0,-0.673d0,
+ & 0.126d0,-0.167d0,0.032d0,-0.227d0,0.086d0,-0.159d0/
+ data ud2/0.756d0,0.187d0,0.109d0,-0.163d0,0.002d0,0.004d0,
+ & 0.054d0,-0.039d0,22.53d0,-21.02d0,5.608d0,0.332d0,
+ & -0.008d0,-0.021d0,0.381d0,0.572d0,4.774d0,1.436d0,
+ & -0.614d0,3.548d0/
+ data s2/0.902d0,0.182d0,0.271d0,-0.346d0,0.017d0,-0.01d0,
+ & -0.011d0,0.0065d0,17.1d0,-13.29d0,6.519d0,0.031d0,
+ & -0.0176d0,0.003d0,1.243d0,0.804d0,4.709d0,1.499d0,
+ & -0.48d0,3.401d0/
+ data g2/0.364d0,1.31d0,0.86d0,-0.254d0,0.611d0,0.008d0,
+ & -0.097d0,-2.412d0,-0.843d0,2.248d0,-0.201d0,1.33d0,
+ & 0.572d0,0.44d0,1.233d0,0.009d0,0.954d0,1.862d0,3.791d0,
+ & -0.079d0/
+ data up0/1.551d0,0.105d0,1.089d0,-0.172d0,3.822d0,-2.162d0,
+ & 0.533d0,-0.467d0,-0.412d0,0.2d0,0.377d0,0.299d0,0.487d0,
+ & 0.0766d0,0.119d0,0.063d0,7.605d0,0.234d0,-0.567d0,
+ & 2.294d0/
+ data dsp0/2.484d0,1.214d0,1.088d0,-0.1735d0,4.293d0,
+ & -2.802d0,0.5975d0,-0.1193d0,-0.0872d0,0.0418d0,0.128d0,
+ & 0.0337d0,0.127d0,0.0135d0,0.14d0,0.0423d0,6.946d0,
+ & 0.814d0,1.531d0,0.124d0/
+ data gp0/1.682d0,1.1d0,0.5888d0,-0.4714d0,0.5362d0,0.0127d0,
+ & -2.438d0,0.03399d0,0.07825d0,0.05842d0,0.08393d0,2.348d0,
+ & -0.07182d0,1.084d0,0.3098d0,-0.07514d0,3.327d0,1.1d0,
+ & 2.264d0,0.2675d0/
+c
+ mu2=0.25d0
+ lam2=0.232d0*0.232d0
+c
+ if(p2.le.0.25d0) then
+ s=log(log(q2/lam2)/log(mu2/lam2))
+ lp1=0.d0
+ lp2=0.d0
+ else
+ s=log(log(q2/lam2)/log(p2/lam2))
+ lp1=log(p2/mu2)*log(p2/mu2)
+ lp2=log(p2/mu2+log(p2/mu2))
+ endif
+c
+ alp=up0(1)+lp1*u1(1)+lp2*u1(2)
+ bet=up0(2)+lp1*u1(3)+lp2*u1(4)
+ a=up0(3)+lp1*u1(5)+lp2*u1(6)+
+ & (up0(4)+lp1*u1(7)+lp2*u1(8))*s
+ b=up0(5)+lp1*u1(9)+lp2*u1(10)+
+ & (up0(6)+lp1*u1(11)+lp2*u1(12))*s**0.5+
+ & (up0(7)+lp1*u1(13)+lp2*u1(14))*s**2
+ gb=up0(8)+lp1*u1(15)+lp2*u1(16)+
+ & (up0(9)+lp1*u1(17)+lp2*u1(18))*s+
+ & (up0(10)+lp1*u1(19)+lp2*u1(20))*s**2
+ ga=up0(11)+lp1*u1(21)+lp2*u1(22)+
+ & (up0(12)+lp1*u1(23)+lp2*u1(24))*s**0.5
+ gc=up0(13)+lp1*u1(25)+lp2*u1(33)+
+ & (up0(14)+lp1*u1(26)+lp2*u1(34))*s
+ gd=up0(15)+lp1*u1(27)+lp2*u1(35)+
+ & (up0(16)+lp1*u1(28)+lp2*u1(36))*s
+ ge=up0(17)+lp1*u1(29)+lp2*u1(37)+
+ & (up0(18)+lp1*u1(30)+lp2*u1(38))*s
+ gep=up0(19)+lp1*u1(31)+lp2*u1(39)+
+ & (up0(20)+lp1*u1(32)+lp2*u1(40))*s
+ upart1=PHO_grsf2(x,s,alp,bet,a,b,ga,gb,gc,gd,ge,gep)
+c
+ alp=dsp0(1)+lp1*ds1(1)+lp2*ds1(2)
+ bet=dsp0(2)+lp1*ds1(3)+lp2*ds1(4)
+ a=dsp0(3)+lp1*ds1(5)+lp2*ds1(6)+
+ & (dsp0(4)+lp1*ds1(7)+lp2*ds1(8))*s
+ b=dsp0(5)+lp1*ds1(9)+lp2*ds1(10)+
+ & (dsp0(6)+lp1*ds1(11)+lp2*ds1(12))*s**0.5+
+ & (dsp0(7)+lp1*ds1(13)+lp2*ds1(14))*s**2
+ gb=dsp0(8)+lp1*ds1(15)+lp2*ds1(16)+
+ & (dsp0(9)+lp1*ds1(17)+lp2*ds1(18))*s+
+ & (dsp0(10)+lp1*ds1(19)+lp2*ds1(20))*s**2
+ ga=dsp0(11)+lp1*ds1(21)+lp2*ds1(22)+
+ & (dsp0(12)+lp1*ds1(23)+lp2*ds1(24))*s
+ gc=dsp0(13)+lp1*ds1(25)+lp2*ds1(33)+
+ & (dsp0(14)+lp1*ds1(26)+lp2*ds1(34))*s
+ gd=dsp0(15)+lp1*ds1(27)+lp2*ds1(35)+
+ & (dsp0(16)+lp1*ds1(28)+lp2*ds1(36))*s
+ ge=dsp0(17)+lp1*ds1(29)+lp2*ds1(37)+
+ & (dsp0(18)+lp1*ds1(30)+lp2*ds1(38))*s
+ gep=dsp0(19)+lp1*ds1(31)+lp2*ds1(39)+
+ & (dsp0(20)+lp1*ds1(32)+lp2*ds1(40))*s
+ dspart1=PHO_grsf2(x,s,alp,bet,a,b,ga,gb,gc,gd,ge,gep)
+c
+ alp=gp0(1)+lp1*g1(1)+lp2*g1(2)
+ bet=gp0(2)+lp1*g1(3)+lp2*g1(4)
+ a=gp0(3)+lp1*g1(5)+lp2*g1(6)+
+ & (gp0(4)+lp1*g1(7)+lp2*g1(8))*s**0.5
+ b=gp0(5)+lp1*g1(9)+lp2*g1(10)+
+ & (gp0(6)+lp1*g1(11)+lp2*g1(12))*s**2
+ gb=gp0(7)+lp1*g1(13)+lp2*g1(14)+
+ & (gp0(8)+lp1*g1(15)+lp2*g1(16))*s
+ ga=gp0(9)+lp1*g1(17)+lp2*g1(18)+
+ & (gp0(10)+lp1*g1(19)+lp2*g1(20))*s**0.5+
+ & (gp0(11)+lp1*g1(21)+lp2*g1(22))*s**2
+ gc=gp0(12)+lp1*g1(23)+lp2*g1(24)+
+ & (gp0(13)+lp1*g1(25)+lp2*g1(26))*s**2
+ gd=gp0(14)+lp1*g1(27)+lp2*g1(28)+
+ & (gp0(15)+lp1*g1(29)+lp2*g1(30))*s+
+ & (gp0(16)+lp1*g1(31)+lp2*g1(32))*s**2
+ ge=gp0(17)+lp1*g1(33)+lp2*g1(34)+
+ & (gp0(18)+lp1*g1(35)+lp2*g1(36))*s
+ gep=gp0(19)+lp1*g1(37)+lp2*g1(38)+
+ & (gp0(20)+lp1*g1(39)+lp2*g1(40))*s
+ gpart1=PHO_grsf2(x,s,alp,bet,a,b,ga,gb,gc,gd,ge,gep)
+c
+ s=log(log(q2/lam2)/log(mu2/lam2))
+ suppr=1.d0/(1.d0+p2/0.59d0)**2
+c
+ alp=ud2(1)
+ bet=ud2(2)
+ a=ud2(3)+ud2(4)*s
+ ga=ud2(5)+ud2(6)*s**0.5
+ gc=ud2(7)+ud2(8)*s
+ b=ud2(9)+ud2(10)*s+ud2(11)*s**2
+ gb=ud2(12)+ud2(13)*s+ud2(14)*s**2
+ gd=ud2(15)+ud2(16)*s
+ ge=ud2(17)+ud2(18)*s
+ gep=ud2(19)+ud2(20)*s
+ udpart2=suppr*PHO_grsf1(x,s,alp,bet,a,b,ga,gb,gc,gd,ge,gep)
+c
+ alp=s2(1)
+ bet=s2(2)
+ a=s2(3)+s2(4)*s
+ ga=s2(5)+s2(6)*s**0.5
+ gc=s2(7)+s2(8)*s
+ b=s2(9)+s2(10)*s+s2(11)*s**2
+ gb=s2(12)+s2(13)*s+s2(14)*s**2
+ gd=s2(15)+s2(16)*s
+ ge=s2(17)+s2(18)*s
+ gep=s2(19)+s2(20)*s
+ spart2=suppr*PHO_grsf2(x,s,alp,bet,a,b,ga,gb,gc,gd,ge,gep)
+c
+ alp=g2(1)
+ bet=g2(2)
+ a=g2(3)+g2(4)*s**0.5
+ b=g2(5)+g2(6)*s**2
+ gb=g2(7)+g2(8)*s
+ ga=g2(9)+g2(10)*s**0.5+g2(11)*s**2
+ gc=g2(12)+g2(13)*s**2
+ gd=g2(14)+g2(15)*s+g2(16)*s**2
+ ge=g2(17)+g2(18)*s
+ gep=g2(19)+g2(20)*s
+ gpart2=suppr*PHO_grsf1(x,s,alp,bet,a,b,ga,gb,gc,gd,ge,gep)
+c
+ ugam=upart1+udpart2
+ dgam=dspart1+udpart2
+ sgam=dspart1+spart2
+ ggam=gpart1+gpart2
+c
+ end
+
+CDECK ID>, PHO_grsf1
+ DOUBLE PRECISION FUNCTION PHO_grsf1(x,s,alp,bet,a,b,ga,gb,gc,gd,
+ & ge,gep)
+ implicit double precision (a-z)
+ save
+
+ PHO_grsf1=(x**a*(ga+gb*sqrt(x)+gc*x**b)+
+ & s**alp*exp(-ge+sqrt(gep*s**bet*log(1.d0/x))))*
+ & (1.d0-x)**gd
+
+ end
+
+CDECK ID>, PHO_grsf2
+ DOUBLE PRECISION FUNCTION PHO_grsf2(x,s,alp,bet,a,b,ga,gb,gc,gd,
+ & ge,gep)
+ implicit double precision (a-z)
+ save
+
+ PHO_grsf2=(s*x**a*(ga+gb*sqrt(x)+gc*x**b)+
+ & s**alp*exp(-ge+sqrt(gep*s**bet*log(1.d0/x))))*
+ & (1.d0-x)**gd
+
+ end
+
+CDECK ID>, PHO_CKMTPA
+ SUBROUTINE PHO_CKMTPA(IPA,XMI,XMA,ALA,Q2MI,Q2MA,PDFNA)
+C**********************************************************************
+C
+C PDF based on Regge theory, evolved with .... by ....
+C
+C input: IPAR 2212 proton (not installed)
+C 990 Pomeron
+C
+C output: parameters of parametrization
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ CHARACTER*8 PDFNA
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ REAL PROP(40),POMP(40)
+ DATA PROP /
+ & .230000E+00, .200000E+01, .150200E+00, .120000E+01, .263100E+00,
+ & .645200E+00, .354890E+01, .111700E+01, .415000E+00, .768400E-01,
+ & .100000E+00, .330000E-01, .352102E-01, .200000E+01, .200000E+01,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .100000E+00, .200000E+01, .100000E+09/
+ DATA POMP /
+ & .230000E+00, .500000E+01, .150200E+00, .120000E+01, .263100E+00,
+ & .645200E+00, .354890E+01, .111700E+01, .415000E+00, .768400E-01,
+ & .700000E-01, .700000E-01, .137161E+00, .300000E+01, .200000E+01,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .100000E+00, .500000E+01, .100000E+09/
+
+ IF(IPA.EQ.2212) THEN
+ ALA =PROP(1)
+ Q2MI = PROP(39)
+ Q2MA = PROP(40)
+ PDFNA = 'CKMT-PRO'
+ ELSE IF(IPA.EQ.990) THEN
+ ALA = POMP(1)
+ Q2MI = POMP(39)
+ Q2MA = POMP(40)
+ PDFNA = 'CKMT-POM'
+ ELSE
+ WRITE(LO,'(1X,A,I7)')
+ & 'PHO_CKMTPA:ERROR: invalid particle code',IPA
+ STOP
+ ENDIF
+ XMI = 1.D-4
+ XMA = 1.D0
+ END
+
+CDECK ID>, PHO_CKMTPD
+ SUBROUTINE PHO_CKMTPD(IPAR,X,SCALE2,PD)
+C**********************************************************************
+C
+C PDF based on Regge theory, evolved with .... by ....
+C
+C input: IPAR 2212 proton (not installed)
+C 990 Pomeron
+C
+C output: PD(-6:6) x*f(x) parton distribution functions
+C (PDFLIB convention: d = PD(1), u = PD(2) )
+C
+C**********************************************************************
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DOUBLE PRECISION X,SCALE2,PD(-6:6),CDN,CUP
+ DIMENSION QQ(7)
+
+ Q2=SNGL(SCALE2)
+ Q1S=Q2
+ XX=SNGL(X)
+C QCD lambda for evolution
+ OWLAM = 0.23D0
+ OWLAM2=OWLAM**2
+C Q0**2 for evolution
+ Q02 = 2.D0
+C
+C
+C the conventions are : q(1)=x*u, q(2)=x*d, q(3)=q(4)=x*sbar=x*ubar=...
+C q(6)=x*charm, q(7)=x*gluon
+C
+ SB=0.
+ IF(Q2-Q02) 1,1,2
+ 2 SB=LOG(LOG(Q2/OWLAM2)/LOG(Q02/OWLAM2))
+ 1 CONTINUE
+ IF(IPAR.EQ.2212) THEN
+* CALL PHO_CKMTPR(XX,SB,QQ
+ WRITE(LO,'(/1X,A,I6)') 'PHO_CKMTPD:ERROR: invalid particle',IPAR
+ CALL PHO_ABORT
+ ELSE
+ CALL PHO_CKMTPO(XX,SB,QQ)
+ ENDIF
+C
+ PD(-6) = 0.D0
+ PD(-5) = 0.D0
+ PD(-4) = DBLE(QQ(6))
+ PD(-3) = DBLE(QQ(3))
+ PD(-2) = DBLE(QQ(4))
+ PD(-1) = DBLE(QQ(5))
+ PD(0) = DBLE(QQ(7))
+ PD(1) = DBLE(QQ(2))
+ PD(2) = DBLE(QQ(1))
+ PD(3) = DBLE(QQ(3))
+ PD(4) = DBLE(QQ(6))
+ PD(5) = 0.D0
+ PD(6) = 0.D0
+ IF(IPAR.EQ.990) THEN
+ CDN = (PD(1)-PD(-1))/2.D0
+ CUP = (PD(2)-PD(-2))/2.D0
+ PD(-1) = PD(-1) + CDN
+ PD(-2) = PD(-2) + CUP
+ PD(1) = PD(-1)
+ PD(2) = PD(-2)
+ ENDIF
+ END
+
+CDECK ID>, PHO_CKMTPO
+ SUBROUTINE PHO_CKMTPO(X,S,QQ)
+C**********************************************************************
+C
+C calculation partons in Pomeron
+C
+C**********************************************************************
+ SAVE
+
+ DIMENSION QQ(7)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DIMENSION F1(25),F2(25),GF(8,20,25),DL(4000)
+ EQUIVALENCE (GF(1,1,1),DL(1))
+ DATA DELTA/.10/
+
+C RNG= -.5
+C DEU.NORM. QUARKS,GLUONS,NEW NORM .6223E+00 .2754E+00 .1372E+01
+C POM.NORM. QUARKS,GLUONS,ALL .132E+00 .275E+00 .407E+00
+ DATA (DL(K),K= 1, 85) /
+ & .324159E-01, .324159E-01, .298895E-01, .298895E-01, .298895E-01,
+ & .298895E-01, .486150E+00,-.867362E-18, .362035E-01, .362035E-01,
+ & .335142E-01, .335151E-01, .335151E-01, .335142E-01, .745381E+00,
+ & .399157E-02, .417146E-01, .417146E-01, .388545E-01, .388564E-01,
+ & .388564E-01, .388545E-01, .107588E+01, .969559E-02, .493208E-01,
+ & .493208E-01, .462819E-01, .462849E-01, .462849E-01, .462819E-01,
+ & .148168E+01, .174837E-01, .593251E-01, .593251E-01, .560991E-01,
+ & .561035E-01, .561035E-01, .560991E-01, .196422E+01, .276588E-01,
+ & .720220E-01, .720220E-01, .686007E-01, .686065E-01, .686065E-01,
+ & .686007E-01, .252331E+01, .405154E-01, .876695E-01, .876695E-01,
+ & .840445E-01, .840520E-01, .840520E-01, .840445E-01, .315730E+01,
+ & .563115E-01, .106489E+00, .106489E+00, .102652E+00, .102662E+00,
+ & .102662E+00, .102652E+00, .386313E+01, .752690E-01, .128662E+00,
+ & .128662E+00, .124605E+00, .124616E+00, .124616E+00, .124605E+00,
+ & .463661E+01, .975686E-01, .154326E+00, .154326E+00, .150039E+00,
+ & .150053E+00, .150053E+00, .150039E+00, .547247E+01, .123348E+00,
+ & .183571E+00, .183571E+00, .179048E+00, .179063E+00, .179063E+00/
+ DATA (DL(K),K= 86, 170) /
+ & .179048E+00, .636464E+01, .152698E+00, .216445E+00, .216445E+00,
+ & .211676E+00, .211694E+00, .211694E+00, .211676E+00, .730631E+01,
+ & .185666E+00, .252948E+00, .252948E+00, .247925E+00, .247946E+00,
+ & .247946E+00, .247925E+00, .829017E+01, .222252E+00, .293037E+00,
+ & .293037E+00, .287752E+00, .287776E+00, .287776E+00, .287752E+00,
+ & .930850E+01, .262414E+00, .336625E+00, .336625E+00, .331070E+00,
+ & .331097E+00, .331097E+00, .331070E+00, .103534E+02, .306065E+00,
+ & .383587E+00, .383587E+00, .377754E+00, .377785E+00, .377785E+00,
+ & .377754E+00, .114166E+02, .353079E+00, .433760E+00, .433760E+00,
+ & .427641E+00, .427675E+00, .427675E+00, .427641E+00, .124903E+02,
+ & .403294E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .296507E-01, .296507E-01, .258624E-01, .258624E-01, .258624E-01,
+ & .258624E-01, .422709E+00,-.173472E-17, .330029E-01, .330029E-01/
+ DATA (DL(K),K= 171, 255) /
+ & .289773E-01, .289787E-01, .289787E-01, .289773E-01, .642996E+00,
+ & .344499E-02, .377610E-01, .377610E-01, .334880E-01, .334910E-01,
+ & .334910E-01, .334880E-01, .914159E+00, .828363E-02, .441590E-01,
+ & .441590E-01, .396285E-01, .396333E-01, .396333E-01, .396285E-01,
+ & .123635E+01, .147501E-01, .523710E-01, .523710E-01, .475730E-01,
+ & .475798E-01, .475798E-01, .475730E-01, .160820E+01, .230185E-01,
+ & .625514E-01, .625514E-01, .574758E-01, .574848E-01, .574848E-01,
+ & .574758E-01, .202705E+01, .332433E-01, .748195E-01, .748195E-01,
+ & .694563E-01, .694678E-01, .694678E-01, .694563E-01, .248945E+01,
+ & .455440E-01, .892611E-01, .892611E-01, .836006E-01, .836147E-01,
+ & .836147E-01, .836006E-01, .299114E+01, .600067E-01, .105928E+00,
+ & .105928E+00, .999607E-01, .999776E-01, .999776E-01, .999607E-01,
+ & .352735E+01, .766833E-01, .124839E+00, .124839E+00, .118555E+00,
+ & .118575E+00, .118575E+00, .118555E+00, .409288E+01, .955921E-01,
+ & .145978E+00, .145978E+00, .139368E+00, .139391E+00, .139391E+00,
+ & .139368E+00, .468226E+01, .116719E+00, .169300E+00, .169300E+00,
+ & .162355E+00, .162382E+00, .162382E+00, .162355E+00, .528987E+01/
+ DATA (DL(K),K= 256, 340) /
+ & .140017E+00, .194730E+00, .194730E+00, .187441E+00, .187471E+00,
+ & .187471E+00, .187441E+00, .591007E+01, .165413E+00, .222167E+00,
+ & .222167E+00, .214525E+00, .214559E+00, .214559E+00, .214525E+00,
+ & .653724E+01, .192806E+00, .251486E+00, .251486E+00, .243482E+00,
+ & .243521E+00, .243521E+00, .243482E+00, .716591E+01, .222070E+00,
+ & .282539E+00, .282539E+00, .274165E+00, .274208E+00, .274208E+00,
+ & .274165E+00, .779082E+01, .253058E+00, .315161E+00, .315161E+00,
+ & .306410E+00, .306458E+00, .306458E+00, .306410E+00, .840695E+01,
+ & .285608E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .279581E-01, .279581E-01, .222797E-01, .222797E-01, .222797E-01,
+ & .222797E-01, .367732E+00, .867362E-18, .309604E-01, .309604E-01,
+ & .249419E-01, .249441E-01, .249441E-01, .249419E-01, .552053E+00,
+ & .296633E-02, .350831E-01, .350831E-01, .287126E-01, .287173E-01/
+ DATA (DL(K),K= 341, 425) /
+ & .287173E-01, .287126E-01, .770476E+00, .704001E-02, .404554E-01,
+ & .404554E-01, .337212E-01, .337286E-01, .337286E-01, .337212E-01,
+ & .102096E+01, .123504E-01, .471588E-01, .471588E-01, .400495E-01,
+ & .400599E-01, .400599E-01, .400495E-01, .130079E+01, .189795E-01,
+ & .552518E-01, .552518E-01, .477564E-01, .477700E-01, .477700E-01,
+ & .477564E-01, .160637E+01, .269860E-01, .647649E-01, .647649E-01,
+ & .568725E-01, .568897E-01, .568897E-01, .568725E-01, .193388E+01,
+ & .364007E-01, .757021E-01, .757021E-01, .674022E-01, .674232E-01,
+ & .674232E-01, .674022E-01, .227916E+01, .472280E-01, .880430E-01,
+ & .880430E-01, .793257E-01, .793507E-01, .793507E-01, .793257E-01,
+ & .263802E+01, .594481E-01, .101745E+00, .101745E+00, .926005E-01,
+ & .926297E-01, .926297E-01, .926005E-01, .300628E+01, .730184E-01,
+ & .116745E+00, .116745E+00, .107164E+00, .107198E+00, .107198E+00,
+ & .107164E+00, .337982E+01, .878765E-01, .132961E+00, .132961E+00,
+ & .122936E+00, .122974E+00, .122974E+00, .122936E+00, .375469E+01,
+ & .103942E+00, .150298E+00, .150298E+00, .139820E+00, .139863E+00,
+ & .139863E+00, .139820E+00, .412714E+01, .121118E+00, .168645E+00/
+ DATA (DL(K),K= 426, 510) /
+ & .168645E+00, .157706E+00, .157754E+00, .157754E+00, .157706E+00,
+ & .449366E+01, .139296E+00, .187883E+00, .187883E+00, .176476E+00,
+ & .176529E+00, .176529E+00, .176476E+00, .485100E+01, .158356E+00,
+ & .207882E+00, .207882E+00, .196000E+00, .196059E+00, .196059E+00,
+ & .196000E+00, .519622E+01, .178170E+00, .228506E+00, .228506E+00,
+ & .216145E+00, .216209E+00, .216209E+00, .216145E+00, .552665E+01,
+ & .198603E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .275294E-01, .275294E-01, .190245E-01, .190245E-01, .190245E-01,
+ & .190245E-01, .320228E+00, .000000E+00, .302671E-01, .302671E-01,
+ & .212851E-01, .212884E-01, .212884E-01, .212851E-01, .470861E+00,
+ & .255059E-02, .338703E-01, .338703E-01, .243988E-01, .244059E-01,
+ & .244059E-01, .243988E-01, .642452E+00, .595399E-02, .383922E-01,
+ & .383922E-01, .284195E-01, .284305E-01, .284305E-01, .284195E-01/
+ DATA (DL(K),K= 511, 595) /
+ & .831913E+00, .102638E-01, .438519E-01, .438519E-01, .333669E-01,
+ & .333821E-01, .333821E-01, .333669E-01, .103618E+01, .155000E-01,
+ & .502475E-01, .502475E-01, .392399E-01, .392595E-01, .392595E-01,
+ & .392399E-01, .125172E+01, .216612E-01, .575580E-01, .575580E-01,
+ & .460181E-01, .460425E-01, .460425E-01, .460181E-01, .147519E+01,
+ & .287272E-01, .657445E-01, .657445E-01, .536635E-01, .536929E-01,
+ & .536929E-01, .536635E-01, .170330E+01, .366597E-01, .747539E-01,
+ & .747539E-01, .621238E-01, .621582E-01, .621582E-01, .621238E-01,
+ & .193297E+01, .454066E-01, .845205E-01, .845205E-01, .713340E-01,
+ & .713738E-01, .713738E-01, .713340E-01, .216133E+01, .549027E-01,
+ & .949687E-01, .949687E-01, .812194E-01, .812646E-01, .812646E-01,
+ & .812194E-01, .238578E+01, .650733E-01, .106015E+00, .106015E+00,
+ & .916972E-01, .917480E-01, .917480E-01, .916972E-01, .260395E+01,
+ & .758355E-01, .117569E+00, .117569E+00, .102678E+00, .102735E+00,
+ & .102735E+00, .102678E+00, .281373E+01, .871004E-01, .129537E+00,
+ & .129537E+00, .114070E+00, .114133E+00, .114133E+00, .114070E+00,
+ & .301327E+01, .987750E-01, .141824E+00, .141824E+00, .125777E+00/
+ DATA (DL(K),K= 596, 680) /
+ & .125846E+00, .125846E+00, .125777E+00, .320098E+01, .110764E+00,
+ & .154331E+00, .154331E+00, .137703E+00, .137778E+00, .137778E+00,
+ & .137703E+00, .337553E+01, .122970E+00, .166962E+00, .166962E+00,
+ & .149753E+00, .149833E+00, .149833E+00, .149753E+00, .353582E+01,
+ & .135299E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .286766E-01, .286766E-01, .159579E-01, .159579E-01, .159579E-01,
+ & .159579E-01, .279430E+00,-.867362E-18, .312327E-01, .312327E-01,
+ & .178644E-01, .178691E-01, .178691E-01, .178644E-01, .399186E+00,
+ & .219459E-02, .344289E-01, .344289E-01, .204015E-01, .204111E-01,
+ & .204111E-01, .204015E-01, .529978E+00, .501953E-02, .382657E-01,
+ & .382657E-01, .235713E-01, .235860E-01, .235860E-01, .235713E-01,
+ & .668515E+00, .847682E-02, .427243E-01, .427243E-01, .273559E-01,
+ & .273758E-01, .273758E-01, .273559E-01, .812075E+00, .125486E-01/
+ DATA (DL(K),K= 681, 765) /
+ & .477691E-01, .477691E-01, .317212E-01, .317465E-01, .317465E-01,
+ & .317212E-01, .957801E+00, .172006E-01, .533547E-01, .533547E-01,
+ & .366231E-01, .366539E-01, .366539E-01, .366231E-01, .110327E+01,
+ & .223886E-01, .594259E-01, .594259E-01, .420076E-01, .420441E-01,
+ & .420441E-01, .420076E-01, .124628E+01, .280584E-01, .659213E-01,
+ & .659213E-01, .478149E-01, .478570E-01, .478570E-01, .478149E-01,
+ & .138496E+01, .341502E-01, .727749E-01, .727749E-01, .539803E-01,
+ & .540280E-01, .540280E-01, .539803E-01, .151767E+01, .405990E-01,
+ & .799178E-01, .799178E-01, .604361E-01, .604895E-01, .604895E-01,
+ & .604361E-01, .164304E+01, .473372E-01, .872796E-01, .872796E-01,
+ & .671134E-01, .671724E-01, .671724E-01, .671134E-01, .175992E+01,
+ & .542955E-01, .947896E-01, .947896E-01, .739429E-01, .740075E-01,
+ & .740075E-01, .739429E-01, .186739E+01, .614047E-01, .102378E+00,
+ & .102378E+00, .808565E-01, .809266E-01, .809266E-01, .808565E-01,
+ & .196473E+01, .685965E-01, .109978E+00, .109978E+00, .877881E-01,
+ & .878637E-01, .878637E-01, .877881E-01, .205141E+01, .758045E-01,
+ & .117525E+00, .117525E+00, .946745E-01, .947553E-01, .947553E-01/
+ DATA (DL(K),K= 766, 850) /
+ & .946745E-01, .212709E+01, .829655E-01, .124958E+00, .124958E+00,
+ & .101456E+00, .101542E+00, .101542E+00, .101456E+00, .219159E+01,
+ & .900196E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .318691E-01, .318691E-01, .129081E-01, .129081E-01, .129081E-01,
+ & .129081E-01, .244842E+00,-.867362E-18, .343104E-01, .343104E-01,
+ & .145076E-01, .145124E-01, .145124E-01, .145076E-01, .337040E+00,
+ & .189443E-02, .371900E-01, .371900E-01, .165461E-01, .165557E-01,
+ & .165557E-01, .165461E-01, .433081E+00, .422691E-02, .404763E-01,
+ & .404763E-01, .189941E-01, .190085E-01, .190085E-01, .189941E-01,
+ & .530109E+00, .696769E-02, .441304E-01, .441304E-01, .218150E-01,
+ & .218342E-01, .218342E-01, .218150E-01, .626129E+00, .100799E-01,
+ & .481031E-01, .481031E-01, .249615E-01, .249853E-01, .249853E-01,
+ & .249615E-01, .719221E+00, .135159E-01, .523426E-01, .523426E-01/
+ DATA (DL(K),K= 851, 935) /
+ & .283837E-01, .284122E-01, .284122E-01, .283837E-01, .807951E+00,
+ & .172259E-01, .567940E-01, .567940E-01, .320288E-01, .320619E-01,
+ & .320619E-01, .320288E-01, .891154E+00, .211568E-01, .614022E-01,
+ & .614022E-01, .358436E-01, .358811E-01, .358811E-01, .358436E-01,
+ & .967928E+00, .252549E-01, .661122E-01, .661122E-01, .397750E-01,
+ & .398169E-01, .398169E-01, .397750E-01, .103759E+01, .294673E-01,
+ & .708708E-01, .708708E-01, .437716E-01, .438176E-01, .438176E-01,
+ & .437716E-01, .109966E+01, .337422E-01, .756269E-01, .756269E-01,
+ & .477840E-01, .478342E-01, .478342E-01, .477840E-01, .115380E+01,
+ & .380302E-01, .803322E-01, .803322E-01, .517659E-01, .518200E-01,
+ & .518200E-01, .517659E-01, .119986E+01, .422846E-01, .849423E-01,
+ & .849423E-01, .556743E-01, .557322E-01, .557322E-01, .556743E-01,
+ & .123782E+01, .464624E-01, .894164E-01, .894164E-01, .594701E-01,
+ & .595315E-01, .595315E-01, .594701E-01, .126777E+01, .505242E-01,
+ & .937178E-01, .937178E-01, .631181E-01, .631829E-01, .631829E-01,
+ & .631181E-01, .128993E+01, .544348E-01, .978144E-01, .978144E-01,
+ & .665876E-01, .666556E-01, .666556E-01, .665876E-01, .130457E+01/
+ DATA (DL(K),K= 936, 1020) /
+ & .581632E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .377668E-01, .377668E-01, .968304E-02, .968304E-02, .968304E-02,
+ & .968304E-02, .216392E+00,-.130104E-17, .401066E-01, .401066E-01,
+ & .110266E-01, .110291E-01, .110291E-01, .110266E-01, .284113E+00,
+ & .164283E-02, .426983E-01, .426983E-01, .126461E-01, .126510E-01,
+ & .126510E-01, .126461E-01, .350879E+00, .355790E-02, .454940E-01,
+ & .454940E-01, .144965E-01, .145039E-01, .145039E-01, .144965E-01,
+ & .414611E+00, .570002E-02, .484493E-01, .484493E-01, .165364E-01,
+ & .165462E-01, .165462E-01, .165364E-01, .474149E+00, .802739E-02,
+ & .515153E-01, .515153E-01, .187191E-01, .187313E-01, .187313E-01,
+ & .187191E-01, .528511E+00, .104932E-01, .546458E-01, .546458E-01,
+ & .210009E-01, .210154E-01, .210154E-01, .210009E-01, .577107E+00,
+ & .130535E-01, .577962E-01, .577962E-01, .233395E-01, .233563E-01/
+ DATA (DL(K),K= 1021, 1105) /
+ & .233563E-01, .233395E-01, .619574E+00, .156658E-01, .609249E-01,
+ & .609249E-01, .256954E-01, .257143E-01, .257143E-01, .256954E-01,
+ & .655725E+00, .182905E-01, .639938E-01, .639938E-01, .280322E-01,
+ & .280532E-01, .280532E-01, .280322E-01, .685523E+00, .208909E-01,
+ & .669681E-01, .669681E-01, .303170E-01, .303399E-01, .303399E-01,
+ & .303170E-01, .709053E+00, .234341E-01, .698172E-01, .698172E-01,
+ & .325206E-01, .325454E-01, .325454E-01, .325206E-01, .726501E+00,
+ & .258907E-01, .725141E-01, .725141E-01, .346176E-01, .346442E-01,
+ & .346442E-01, .346176E-01, .738139E+00, .282352E-01, .750364E-01,
+ & .750364E-01, .365866E-01, .366148E-01, .366148E-01, .365866E-01,
+ & .744304E+00, .304461E-01, .773653E-01, .773653E-01, .384099E-01,
+ & .384396E-01, .384396E-01, .384099E-01, .745388E+00, .325056E-01,
+ & .794860E-01, .794860E-01, .400736E-01, .401046E-01, .401046E-01,
+ & .400736E-01, .741819E+00, .343996E-01, .813873E-01, .813873E-01,
+ & .415670E-01, .415993E-01, .415993E-01, .415670E-01, .734051E+00,
+ & .361177E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 1106, 1190) /
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .433773E-01, .433773E-01, .745094E-02, .745094E-02, .745094E-02,
+ & .745094E-02, .201612E+00,-.130104E-17, .455998E-01, .455998E-01,
+ & .866239E-02, .866443E-02, .866443E-02, .866239E-02, .255046E+00,
+ & .149977E-02, .479569E-01, .479569E-01, .100584E-01, .100624E-01,
+ & .100624E-01, .100584E-01, .305549E+00, .317779E-02, .503976E-01,
+ & .503976E-01, .115911E-01, .115970E-01, .115970E-01, .115911E-01,
+ & .351606E+00, .498612E-02, .528804E-01, .528804E-01, .132216E-01,
+ & .132293E-01, .132293E-01, .132216E-01, .392560E+00, .688553E-02,
+ & .553621E-01, .553621E-01, .149087E-01, .149181E-01, .149181E-01,
+ & .149087E-01, .427948E+00, .883486E-02, .578049E-01, .578049E-01,
+ & .166165E-01, .166276E-01, .166276E-01, .166165E-01, .457612E+00,
+ & .107980E-01, .601739E-01, .601739E-01, .183120E-01, .183246E-01,
+ & .183246E-01, .183120E-01, .481565E+00, .127419E-01, .624390E-01,
+ & .624390E-01, .199661E-01, .199801E-01, .199801E-01, .199661E-01/
+ DATA (DL(K),K= 1191, 1275) /
+ & .499943E+00, .146375E-01, .645736E-01, .645736E-01, .215535E-01,
+ & .215688E-01, .215688E-01, .215535E-01, .512983E+00, .164593E-01,
+ & .665556E-01, .665556E-01, .230528E-01, .230693E-01, .230693E-01,
+ & .230528E-01, .520995E+00, .181859E-01, .683669E-01, .683669E-01,
+ & .244463E-01, .244639E-01, .244639E-01, .244463E-01, .524347E+00,
+ & .197998E-01, .699932E-01, .699932E-01, .257201E-01, .257387E-01,
+ & .257387E-01, .257201E-01, .523447E+00, .212869E-01, .714240E-01,
+ & .714240E-01, .268637E-01, .268832E-01, .268832E-01, .268637E-01,
+ & .518729E+00, .226367E-01, .726523E-01, .726523E-01, .278697E-01,
+ & .278900E-01, .278900E-01, .278697E-01, .510641E+00, .238420E-01,
+ & .736741E-01, .736741E-01, .287338E-01, .287547E-01, .287547E-01,
+ & .287338E-01, .499630E+00, .248984E-01, .744886E-01, .744886E-01,
+ & .294542E-01, .294757E-01, .294757E-01, .294542E-01, .486140E+00,
+ & .258043E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 1276, 1360) /
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .499162E-01, .499162E-01, .534441E-02, .534441E-02, .534441E-02,
+ & .534441E-02, .191108E+00,-.151788E-17, .519197E-01, .519197E-01,
+ & .646285E-02, .646402E-02, .646402E-02, .646285E-02, .232539E+00,
+ & .137669E-02, .539504E-01, .539504E-01, .769150E-02, .769377E-02,
+ & .769377E-02, .769150E-02, .269907E+00, .285489E-02, .559598E-01,
+ & .559598E-01, .898389E-02, .898721E-02, .898721E-02, .898389E-02,
+ & .302186E+00, .438814E-02, .579130E-01, .579130E-01, .103061E-01,
+ & .103104E-01, .103104E-01, .103061E-01, .329124E+00, .594258E-02,
+ & .597754E-01, .597754E-01, .116245E-01, .116297E-01, .116297E-01,
+ & .116245E-01, .350643E+00, .748452E-02, .615191E-01, .615191E-01,
+ & .129113E-01, .129174E-01, .129174E-01, .129113E-01, .366890E+00,
+ & .898645E-02, .631204E-01, .631204E-01, .141428E-01, .141497E-01,
+ & .141497E-01, .141428E-01, .378134E+00, .104247E-01, .645601E-01,
+ & .645601E-01, .152995E-01, .153071E-01, .153071E-01, .152995E-01,
+ & .384719E+00, .117798E-01, .658236E-01, .658236E-01, .163657E-01,
+ & .163739E-01, .163739E-01, .163657E-01, .387045E+00, .130362E-01/
+ DATA (DL(K),K= 1361, 1445) /
+ & .669000E-01, .669000E-01, .173294E-01, .173381E-01, .173381E-01,
+ & .173294E-01, .385547E+00, .141821E-01, .677824E-01, .677824E-01,
+ & .181820E-01, .181912E-01, .181912E-01, .181820E-01, .380677E+00,
+ & .152091E-01, .684672E-01, .684672E-01, .189180E-01, .189277E-01,
+ & .189277E-01, .189180E-01, .372894E+00, .161119E-01, .689539E-01,
+ & .689539E-01, .195349E-01, .195449E-01, .195449E-01, .195349E-01,
+ & .362650E+00, .168880E-01, .692447E-01, .692447E-01, .200324E-01,
+ & .200427E-01, .200427E-01, .200324E-01, .350383E+00, .175374E-01,
+ & .693442E-01, .693442E-01, .204123E-01, .204229E-01, .204229E-01,
+ & .204123E-01, .336505E+00, .180622E-01, .692590E-01, .692590E-01,
+ & .206783E-01, .206891E-01, .206891E-01, .206783E-01, .321403E+00,
+ & .184661E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .554152E-01, .554152E-01, .386683E-02, .386683E-02, .386683E-02/
+ DATA (DL(K),K= 1446, 1530) /
+ & .386683E-02, .185844E+00,-.151788E-17, .571372E-01, .571372E-01,
+ & .493623E-02, .493704E-02, .493704E-02, .493623E-02, .219342E+00,
+ & .129037E-02, .588098E-01, .588098E-01, .606768E-02, .606924E-02,
+ & .606924E-02, .606768E-02, .248288E+00, .263296E-02, .603896E-01,
+ & .603896E-01, .721747E-02, .721973E-02, .721973E-02, .721747E-02,
+ & .271974E+00, .398431E-02, .618484E-01, .618484E-01, .835658E-02,
+ & .835949E-02, .835949E-02, .835658E-02, .290397E+00, .531560E-02,
+ & .631600E-01, .631600E-01, .945726E-02, .946074E-02, .946074E-02,
+ & .945726E-02, .303702E+00, .659930E-02, .643051E-01, .643051E-01,
+ & .104983E-01, .105023E-01, .105023E-01, .104983E-01, .312209E+00,
+ & .781443E-02, .652691E-01, .652691E-01, .114624E-01, .114669E-01,
+ & .114669E-01, .114624E-01, .316328E+00, .894407E-02, .660416E-01,
+ & .660416E-01, .123367E-01, .123416E-01, .123416E-01, .123367E-01,
+ & .316509E+00, .997546E-02, .666169E-01, .666169E-01, .131119E-01,
+ & .131171E-01, .131171E-01, .131119E-01, .313229E+00, .108996E-01,
+ & .669925E-01, .669925E-01, .137818E-01, .137874E-01, .137874E-01,
+ & .137818E-01, .306974E+00, .117107E-01, .671695E-01, .671695E-01/
+ DATA (DL(K),K= 1531, 1615) /
+ & .143437E-01, .143495E-01, .143495E-01, .143437E-01, .298224E+00,
+ & .124061E-01, .671517E-01, .671517E-01, .147970E-01, .148031E-01,
+ & .148031E-01, .147970E-01, .287441E+00, .129858E-01, .669454E-01,
+ & .669454E-01, .151437E-01, .151499E-01, .151499E-01, .151437E-01,
+ & .275064E+00, .134517E-01, .665590E-01, .665590E-01, .153872E-01,
+ & .153935E-01, .153935E-01, .153872E-01, .261497E+00, .138078E-01,
+ & .660023E-01, .660023E-01, .155327E-01, .155391E-01, .155391E-01,
+ & .155327E-01, .247105E+00, .140595E-01, .652865E-01, .652865E-01,
+ & .155864E-01, .155929E-01, .155929E-01, .155864E-01, .232218E+00,
+ & .142131E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .601098E-01, .601098E-01, .278641E-02, .278641E-02, .278641E-02,
+ & .278641E-02, .183460E+00, .130104E-17, .614949E-01, .614949E-01,
+ & .382710E-02, .382771E-02, .382771E-02, .382710E-02, .211150E+00/
+ DATA (DL(K),K= 1616, 1700) /
+ & .122320E-02, .627722E-01, .627722E-01, .489465E-02, .489580E-02,
+ & .489580E-02, .489465E-02, .234040E+00, .246333E-02, .639042E-01,
+ & .639042E-01, .594825E-02, .594990E-02, .594990E-02, .594825E-02,
+ & .251649E+00, .367998E-02, .648697E-01, .648697E-01, .696315E-02,
+ & .696526E-02, .696526E-02, .696315E-02, .264143E+00, .484875E-02,
+ & .656502E-01, .656502E-01, .791658E-02, .791907E-02, .791907E-02,
+ & .791658E-02, .271822E+00, .594722E-02, .662343E-01, .662343E-01,
+ & .879236E-02, .879520E-02, .879520E-02, .879236E-02, .275124E+00,
+ & .695957E-02, .666152E-01, .666152E-01, .957846E-02, .958160E-02,
+ & .958160E-02, .957846E-02, .274549E+00, .787413E-02, .667905E-01,
+ & .667905E-01, .102668E-01, .102702E-01, .102702E-01, .102668E-01,
+ & .270615E+00, .868318E-02, .667616E-01, .667616E-01, .108528E-01,
+ & .108564E-01, .108564E-01, .108528E-01, .263847E+00, .938250E-02,
+ & .665331E-01, .665331E-01, .113349E-01, .113387E-01, .113387E-01,
+ & .113349E-01, .254756E+00, .997082E-02, .661123E-01, .661123E-01,
+ & .117139E-01, .117179E-01, .117179E-01, .117139E-01, .243828E+00,
+ & .104494E-01, .655090E-01, .655090E-01, .119931E-01, .119971E-01/
+ DATA (DL(K),K= 1701, 1785) /
+ & .119971E-01, .119931E-01, .231518E+00, .108217E-01, .647345E-01,
+ & .647345E-01, .121770E-01, .121811E-01, .121811E-01, .121770E-01,
+ & .218237E+00, .110927E-01, .638017E-01, .638017E-01, .122717E-01,
+ & .122759E-01, .122759E-01, .122717E-01, .204353E+00, .112689E-01,
+ & .627241E-01, .627241E-01, .122842E-01, .122884E-01, .122884E-01,
+ & .122842E-01, .190187E+00, .113573E-01, .615161E-01, .615161E-01,
+ & .122221E-01, .122262E-01, .122262E-01, .122221E-01, .176012E+00,
+ & .113659E-01, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .641221E-01, .641221E-01, .198544E-02, .198544E-02, .198544E-02,
+ & .198544E-02, .183018E+00, .184314E-17, .651208E-01, .651208E-01,
+ & .300778E-02, .300823E-02, .300823E-02, .300778E-02, .206180E+00,
+ & .116844E-02, .659664E-01, .659664E-01, .402903E-02, .402989E-02,
+ & .402989E-02, .402903E-02, .224390E+00, .232648E-02, .666277E-01/
+ DATA (DL(K),K= 1786, 1870) /
+ & .666277E-01, .501117E-02, .501238E-02, .501238E-02, .501117E-02,
+ & .237332E+00, .343657E-02, .670904E-01, .670904E-01, .593321E-02,
+ & .593473E-02, .593473E-02, .593321E-02, .245310E+00, .447818E-02,
+ & .673435E-01, .673435E-01, .677663E-02, .677843E-02, .677843E-02,
+ & .677663E-02, .248743E+00, .543320E-02, .673832E-01, .673832E-01,
+ & .752958E-02, .753161E-02, .753161E-02, .752958E-02, .248162E+00,
+ & .629021E-02, .672099E-01, .672099E-01, .818432E-02, .818655E-02,
+ & .818655E-02, .818432E-02, .244140E+00, .704188E-02, .668281E-01,
+ & .668281E-01, .873688E-02, .873927E-02, .873927E-02, .873688E-02,
+ & .237247E+00, .768463E-02, .662457E-01, .662457E-01, .918650E-02,
+ & .918903E-02, .918903E-02, .918650E-02, .228043E+00, .821808E-02,
+ & .654734E-01, .654734E-01, .953502E-02, .953766E-02, .953766E-02,
+ & .953502E-02, .217054E+00, .864446E-02, .645238E-01, .645238E-01,
+ & .978645E-02, .978915E-02, .978915E-02, .978645E-02, .204766E+00,
+ & .896811E-02, .634114E-01, .634114E-01, .994639E-02, .994915E-02,
+ & .994915E-02, .994639E-02, .191614E+00, .919500E-02, .621515E-01,
+ & .621515E-01, .100217E-01, .100245E-01, .100245E-01, .100217E-01/
+ DATA (DL(K),K= 1871, 1955) /
+ & .177983E+00, .933229E-02, .607602E-01, .607602E-01, .100200E-01,
+ & .100228E-01, .100228E-01, .100200E-01, .164201E+00, .938793E-02,
+ & .592539E-01, .592539E-01, .994938E-02, .995217E-02, .995217E-02,
+ & .994938E-02, .150544E+00, .937032E-02, .576488E-01, .576488E-01,
+ & .981814E-02, .982091E-02, .982091E-02, .981814E-02, .137234E+00,
+ & .928803E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .675167E-01, .675167E-01, .139130E-02, .139130E-02, .139130E-02,
+ & .139130E-02, .184090E+00, .113841E-17, .680840E-01, .680840E-01,
+ & .240061E-02, .240097E-02, .240097E-02, .240061E-02, .203559E+00,
+ & .112278E-02, .684634E-01, .684634E-01, .338513E-02, .338580E-02,
+ & .338580E-02, .338513E-02, .217944E+00, .221249E-02, .686304E-01,
+ & .686304E-01, .430938E-02, .431032E-02, .431032E-02, .430938E-02,
+ & .227068E+00, .323420E-02, .685779E-01, .685779E-01, .515589E-02/
+ DATA (DL(K),K= 1956, 2040) /
+ & .515707E-02, .515707E-02, .515589E-02, .231353E+00, .417091E-02,
+ & .683023E-01, .683023E-01, .591002E-02, .591140E-02, .591140E-02,
+ & .591002E-02, .231327E+00, .500843E-02, .678068E-01, .678068E-01,
+ & .656383E-02, .656537E-02, .656537E-02, .656383E-02, .227606E+00,
+ & .573925E-02, .670989E-01, .670989E-01, .711344E-02, .711513E-02,
+ & .711513E-02, .711344E-02, .220833E+00, .635992E-02, .661895E-01,
+ & .661895E-01, .755852E-02, .756031E-02, .756031E-02, .755852E-02,
+ & .211624E+00, .687048E-02, .650923E-01, .650923E-01, .790162E-02,
+ & .790350E-02, .790350E-02, .790162E-02, .200567E+00, .727387E-02,
+ & .638232E-01, .638232E-01, .814753E-02, .814946E-02, .814946E-02,
+ & .814753E-02, .188197E+00, .757524E-02, .623994E-01, .623994E-01,
+ & .830271E-02, .830469E-02, .830469E-02, .830271E-02, .174994E+00,
+ & .778139E-02, .608390E-01, .608390E-01, .837482E-02, .837682E-02,
+ & .837682E-02, .837482E-02, .161373E+00, .790029E-02, .591605E-01,
+ & .591605E-01, .837226E-02, .837426E-02, .837426E-02, .837226E-02,
+ & .147685E+00, .794065E-02, .573824E-01, .573824E-01, .830376E-02,
+ & .830575E-02, .830575E-02, .830376E-02, .134218E+00, .791148E-02/
+ DATA (DL(K),K= 2041, 2125) /
+ & .555224E-01, .555224E-01, .817811E-02, .818008E-02, .818008E-02,
+ & .817811E-02, .121200E+00, .782185E-02, .535980E-01, .535980E-01,
+ & .800390E-02, .800584E-02, .800584E-02, .800390E-02, .108803E+00,
+ & .768059E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .703249E-01, .703249E-01, .953926E-03, .953926E-03, .953926E-03,
+ & .953926E-03, .186497E+00, .108420E-18, .704188E-01, .704188E-01,
+ & .195267E-02, .195297E-02, .195297E-02, .195267E-02, .202831E+00,
+ & .108414E-02, .702995E-01, .702995E-01, .290528E-02, .290582E-02,
+ & .290582E-02, .290528E-02, .213933E+00, .211514E-02, .699499E-01,
+ & .699499E-01, .377873E-02, .377950E-02, .377950E-02, .377873E-02,
+ & .219748E+00, .306054E-02, .693699E-01, .693699E-01, .455903E-02,
+ & .455997E-02, .455997E-02, .455903E-02, .220821E+00, .390679E-02,
+ & .685634E-01, .685634E-01, .523531E-02, .523640E-02, .523640E-02/
+ DATA (DL(K),K= 2126, 2210) /
+ & .523531E-02, .217787E+00, .464347E-02, .675406E-01, .675406E-01,
+ & .580340E-02, .580462E-02, .580462E-02, .580340E-02, .211353E+00,
+ & .526681E-02, .663155E-01, .663155E-01, .626315E-02, .626446E-02,
+ & .626446E-02, .626315E-02, .202230E+00, .577705E-02, .649052E-01,
+ & .649052E-01, .661759E-02, .661897E-02, .661897E-02, .661759E-02,
+ & .191081E+00, .617758E-02, .633285E-01, .633285E-01, .687230E-02,
+ & .687373E-02, .687373E-02, .687230E-02, .178518E+00, .647434E-02,
+ & .616058E-01, .616058E-01, .703464E-02, .703611E-02, .703611E-02,
+ & .703464E-02, .165082E+00, .667499E-02, .597580E-01, .597580E-01,
+ & .711320E-02, .711468E-02, .711468E-02, .711320E-02, .151241E+00,
+ & .678842E-02, .578059E-01, .578059E-01, .711723E-02, .711872E-02,
+ & .711872E-02, .711723E-02, .137382E+00, .682417E-02, .557702E-01,
+ & .557702E-01, .705628E-02, .705776E-02, .705776E-02, .705628E-02,
+ & .123821E+00, .679205E-02, .536704E-01, .536704E-01, .693979E-02,
+ & .694125E-02, .694125E-02, .693979E-02, .110798E+00, .670173E-02,
+ & .515252E-01, .515252E-01, .677689E-02, .677832E-02, .677832E-02,
+ & .677689E-02, .984933E-01, .656256E-02, .493519E-01, .493519E-01/
+ DATA (DL(K),K= 2211, 2295) /
+ & .657614E-02, .657753E-02, .657753E-02, .657614E-02, .870270E-01,
+ & .638332E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .725555E-01, .725555E-01, .636424E-03, .636424E-03, .636424E-03,
+ & .636424E-03, .190200E+00,-.271051E-17, .721364E-01, .721364E-01,
+ & .162522E-02, .162546E-02, .162546E-02, .162522E-02, .203770E+00,
+ & .105090E-02, .714881E-01, .714881E-01, .254763E-02, .254807E-02,
+ & .254807E-02, .254763E-02, .211914E+00, .202976E-02, .706012E-01,
+ & .706012E-01, .337323E-02, .337384E-02, .337384E-02, .337323E-02,
+ & .214704E+00, .290668E-02, .694832E-01, .694832E-01, .409164E-02,
+ & .409240E-02, .409240E-02, .409164E-02, .212817E+00, .367169E-02,
+ & .681454E-01, .681454E-01, .469593E-02, .469679E-02, .469679E-02,
+ & .469593E-02, .207013E+00, .431823E-02, .666048E-01, .666048E-01,
+ & .518578E-02, .518673E-02, .518673E-02, .518578E-02, .198095E+00/
+ DATA (DL(K),K= 2296, 2380) /
+ & .484637E-02, .648819E-01, .648819E-01, .556473E-02, .556575E-02,
+ & .556575E-02, .556473E-02, .186850E+00, .525997E-02, .629989E-01,
+ & .629989E-01, .583908E-02, .584014E-02, .584014E-02, .583908E-02,
+ & .173986E+00, .556566E-02, .609795E-01, .609795E-01, .601725E-02,
+ & .601834E-02, .601834E-02, .601725E-02, .160140E+00, .577215E-02,
+ & .588474E-01, .588474E-01, .610889E-02, .611000E-02, .611000E-02,
+ & .610889E-02, .145850E+00, .588934E-02, .566261E-01, .566261E-01,
+ & .612435E-02, .612547E-02, .612547E-02, .612435E-02, .131564E+00,
+ & .592785E-02, .543385E-01, .543385E-01, .607415E-02, .607526E-02,
+ & .607526E-02, .607415E-02, .117636E+00, .589841E-02, .520060E-01,
+ & .520060E-01, .596861E-02, .596970E-02, .596970E-02, .596861E-02,
+ & .104336E+00, .581156E-02, .496485E-01, .496485E-01, .581753E-02,
+ & .581860E-02, .581860E-02, .581753E-02, .918563E-01, .567728E-02,
+ & .472842E-01, .472842E-01, .563002E-02, .563105E-02, .563105E-02,
+ & .563002E-02, .803205E-01, .550487E-02, .449295E-01, .449295E-01,
+ & .541435E-02, .541535E-02, .541535E-02, .541435E-02, .697975E-01,
+ & .530276E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 2381, 2465) /
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .742000E-01, .742000E-01, .410482E-03, .410482E-03, .410482E-03,
+ & .410482E-03, .195273E+00,-.143657E-17, .732296E-01, .732296E-01,
+ & .138854E-02, .138874E-02, .138874E-02, .138854E-02, .206298E+00,
+ & .102151E-02, .720241E-01, .720241E-01, .228017E-02, .228054E-02,
+ & .228054E-02, .228017E-02, .211639E+00, .195225E-02, .705820E-01,
+ & .705820E-01, .305794E-02, .305844E-02, .305844E-02, .305794E-02,
+ & .211509E+00, .276522E-02, .689187E-01, .689187E-01, .371549E-02,
+ & .371609E-02, .371609E-02, .371549E-02, .206745E+00, .345441E-02,
+ & .670527E-01, .670527E-01, .425016E-02, .425084E-02, .425084E-02,
+ & .425016E-02, .198254E+00, .401749E-02, .650080E-01, .650080E-01,
+ & .466572E-02, .466647E-02, .466647E-02, .466572E-02, .186950E+00,
+ & .445856E-02, .628107E-01, .628107E-01, .496948E-02, .497027E-02,
+ & .497027E-02, .496948E-02, .173701E+00, .478517E-02, .604878E-01/
+ DATA (DL(K),K= 2466, 2550) /
+ & .604878E-01, .517094E-02, .517175E-02, .517175E-02, .517094E-02,
+ & .159263E+00, .500709E-02, .580665E-01, .580665E-01, .528116E-02,
+ & .528199E-02, .528199E-02, .528116E-02, .144287E+00, .513562E-02,
+ & .555730E-01, .555730E-01, .531181E-02, .531265E-02, .531265E-02,
+ & .531181E-02, .129304E+00, .518264E-02, .530325E-01, .530325E-01,
+ & .527468E-02, .527550E-02, .527550E-02, .527468E-02, .114731E+00,
+ & .516012E-02, .504682E-01, .504682E-01, .518116E-02, .518198E-02,
+ & .518198E-02, .518116E-02, .100877E+00, .507964E-02, .479014E-01,
+ & .479014E-01, .504198E-02, .504278E-02, .504278E-02, .504198E-02,
+ & .879578E-01, .495209E-02, .453511E-01, .453511E-01, .486695E-02,
+ & .486772E-02, .486772E-02, .486695E-02, .761077E-01, .478741E-02,
+ & .428340E-01, .428340E-01, .466486E-02, .466560E-02, .466560E-02,
+ & .466486E-02, .653932E-01, .459453E-02, .403645E-01, .403645E-01,
+ & .444342E-02, .444413E-02, .444413E-02, .444342E-02, .558281E-01,
+ & .438128E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 2551, 2635) /
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .752337E-01, .752337E-01, .253875E-03, .253875E-03, .253875E-03,
+ & .253875E-03, .201902E+00,-.159920E-17, .736752E-01, .736752E-01,
+ & .121909E-02, .121925E-02, .121925E-02, .121909E-02, .210465E+00,
+ & .994282E-03, .718865E-01, .718865E-01, .207747E-02, .207776E-02,
+ & .207776E-02, .207747E-02, .212997E+00, .187854E-02, .698746E-01,
+ & .698746E-01, .280521E-02, .280560E-02, .280560E-02, .280521E-02,
+ & .209895E+00, .262933E-02, .676629E-01, .676629E-01, .340063E-02,
+ & .340109E-02, .340109E-02, .340063E-02, .202191E+00, .324527E-02,
+ & .652775E-01, .652775E-01, .386588E-02, .386641E-02, .386641E-02,
+ & .386588E-02, .190971E+00, .372876E-02, .627483E-01, .627483E-01,
+ & .420910E-02, .420967E-02, .420967E-02, .420910E-02, .177278E+00,
+ & .408818E-02, .601066E-01, .601066E-01, .444148E-02, .444208E-02,
+ & .444208E-02, .444148E-02, .162071E+00, .433493E-02, .573831E-01,
+ & .573831E-01, .457564E-02, .457625E-02, .457625E-02, .457564E-02,
+ & .146148E+00, .448183E-02, .546072E-01, .546072E-01, .462506E-02/
+ DATA (DL(K),K= 2636, 2720) /
+ & .462567E-02, .462567E-02, .462506E-02, .130166E+00, .454252E-02,
+ & .518065E-01, .518065E-01, .460307E-02, .460368E-02, .460368E-02,
+ & .460307E-02, .114632E+00, .453052E-02, .490062E-01, .490062E-01,
+ & .452252E-02, .452312E-02, .452312E-02, .452252E-02, .999175E-01,
+ & .445880E-02, .462287E-01, .462287E-01, .439529E-02, .439588E-02,
+ & .439588E-02, .439529E-02, .862750E-01, .433936E-02, .434937E-01,
+ & .434937E-01, .423211E-02, .423268E-02, .423268E-02, .423211E-02,
+ & .738542E-01, .418306E-02, .408180E-01, .408180E-01, .404245E-02,
+ & .404299E-02, .404299E-02, .404245E-02, .627228E-01, .399946E-02,
+ & .382157E-01, .382157E-01, .383446E-02, .383498E-02, .383498E-02,
+ & .383446E-02, .528847E-01, .379682E-02, .356980E-01, .356980E-01,
+ & .361508E-02, .361557E-02, .361557E-02, .361508E-02, .442963E-01,
+ & .358213E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 2721, 2805) /
+ & .756149E-01, .756149E-01, .148956E-03, .148956E-03, .148956E-03,
+ & .148956E-03, .210410E+00,-.149078E-18, .734321E-01, .734321E-01,
+ & .109779E-02, .109791E-02, .109791E-02, .109779E-02, .216444E+00,
+ & .967243E-03, .710369E-01, .710369E-01, .191860E-02, .191882E-02,
+ & .191882E-02, .191860E-02, .215992E+00, .180426E-02, .684452E-01,
+ & .684452E-01, .259230E-02, .259259E-02, .259259E-02, .259230E-02,
+ & .209697E+00, .249224E-02, .656884E-01, .656884E-01, .312270E-02,
+ & .312305E-02, .312305E-02, .312270E-02, .198844E+00, .303522E-02,
+ & .627994E-01, .627994E-01, .351747E-02, .351786E-02, .351786E-02,
+ & .351747E-02, .184740E+00, .344105E-02, .598138E-01, .598138E-01,
+ & .378940E-02, .378981E-02, .378981E-02, .378940E-02, .168578E+00,
+ & .372269E-02, .567666E-01, .567666E-01, .395362E-02, .395405E-02,
+ & .395405E-02, .395362E-02, .151409E+00, .389544E-02, .536907E-01,
+ & .536907E-01, .402569E-02, .402613E-02, .402613E-02, .402569E-02,
+ & .134065E+00, .397499E-02, .506163E-01, .506163E-01, .402117E-02,
+ & .402161E-02, .402161E-02, .402117E-02, .117191E+00, .397702E-02,
+ & .475706E-01, .475706E-01, .395467E-02, .395511E-02, .395511E-02/
+ DATA (DL(K),K= 2806, 2890) /
+ & .395467E-02, .101250E+00, .391626E-02, .445771E-01, .445771E-01,
+ & .383961E-02, .384003E-02, .384003E-02, .383961E-02, .865500E-01,
+ & .380621E-02, .416559E-01, .416559E-01, .368789E-02, .368830E-02,
+ & .368830E-02, .368789E-02, .732657E-01, .365888E-02, .388235E-01,
+ & .388235E-01, .350985E-02, .351025E-02, .351025E-02, .350985E-02,
+ & .614686E-01, .348466E-02, .360931E-01, .360931E-01, .331425E-02,
+ & .331462E-02, .331462E-02, .331425E-02, .511511E-01, .329240E-02,
+ & .334751E-01, .334751E-01, .310835E-02, .310870E-02, .310870E-02,
+ & .310835E-02, .422485E-01, .308941E-02, .309768E-01, .309768E-01,
+ & .289805E-02, .289838E-02, .289838E-02, .289805E-02, .346590E-01,
+ & .288164E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .752796E-01, .752796E-01, .816906E-04, .816906E-04, .816906E-04,
+ & .816906E-04, .221322E+00, .298156E-18, .724376E-01, .724376E-01/
+ DATA (DL(K),K= 2891, 2975) /
+ & .100884E-02, .100894E-02, .100894E-02, .100884E-02, .224569E+00,
+ & .938046E-03, .694166E-01, .694166E-01, .178592E-02, .178609E-02,
+ & .178609E-02, .178592E-02, .220745E+00, .172460E-02, .662414E-01,
+ & .662414E-01, .240001E-02, .240024E-02, .240024E-02, .240001E-02,
+ & .210839E+00, .234694E-02, .629511E-01, .629511E-01, .286144E-02,
+ & .286171E-02, .286171E-02, .286144E-02, .196463E+00, .281556E-02,
+ & .595849E-01, .595849E-01, .318412E-02, .318441E-02, .318441E-02,
+ & .318412E-02, .179204E+00, .314448E-02, .561822E-01, .561822E-01,
+ & .338573E-02, .338605E-02, .338605E-02, .338573E-02, .160420E+00,
+ & .335151E-02, .527801E-01, .527801E-01, .348530E-02, .348562E-02,
+ & .348562E-02, .348530E-02, .141254E+00, .345578E-02, .494117E-01,
+ & .494117E-01, .350098E-02, .350131E-02, .350131E-02, .350098E-02,
+ & .122547E+00, .347555E-02, .461061E-01, .461061E-01, .344994E-02,
+ & .345026E-02, .345026E-02, .344994E-02, .104908E+00, .342804E-02,
+ & .428876E-01, .428876E-01, .334753E-02, .334784E-02, .334784E-02,
+ & .334753E-02, .887264E-01, .332868E-02, .397764E-01, .397764E-01,
+ & .320718E-02, .320748E-02, .320748E-02, .320718E-02, .742160E-01/
+ DATA (DL(K),K= 2976, 3060) /
+ & .319097E-02, .367882E-01, .367882E-01, .304033E-02, .304062E-02,
+ & .304062E-02, .304033E-02, .614556E-01, .302641E-02, .339348E-01,
+ & .339348E-01, .285650E-02, .285677E-02, .285677E-02, .285650E-02,
+ & .504214E-01, .284454E-02, .312247E-01, .312247E-01, .266337E-02,
+ & .266363E-02, .266363E-02, .266337E-02, .410205E-01, .265311E-02,
+ & .286629E-01, .286629E-01, .246705E-02, .246730E-02, .246730E-02,
+ & .246705E-02, .331166E-01, .245826E-02, .262521E-01, .262521E-01,
+ & .227226E-02, .227248E-02, .227248E-02, .227226E-02, .265498E-01,
+ & .226473E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .741335E-01, .741335E-01, .409835E-04, .409835E-04, .409835E-04,
+ & .409835E-04, .235495E+00,-.158395E-17, .705990E-01, .705990E-01,
+ & .938808E-03, .938883E-03, .938883E-03, .938808E-03, .235413E+00,
+ & .903728E-03, .669383E-01, .669383E-01, .166382E-02, .166395E-02/
+ DATA (DL(K),K= 3061, 3145) /
+ & .166395E-02, .166382E-02, .227523E+00, .163381E-02, .631853E-01,
+ & .631853E-01, .221128E-02, .221145E-02, .221145E-02, .221128E-02,
+ & .213316E+00, .218562E-02, .593855E-01, .593855E-01, .259911E-02,
+ & .259931E-02, .259931E-02, .259911E-02, .194833E+00, .257720E-02,
+ & .555825E-01, .555825E-01, .284819E-02, .284841E-02, .284841E-02,
+ & .284819E-02, .174012E+00, .282950E-02, .518174E-01, .518174E-01,
+ & .298117E-02, .298140E-02, .298140E-02, .298117E-02, .152385E+00,
+ & .296523E-02, .481268E-01, .481268E-01, .302067E-02, .302090E-02,
+ & .302090E-02, .302067E-02, .131168E+00, .300708E-02, .445413E-01,
+ & .445413E-01, .298689E-02, .298712E-02, .298712E-02, .298689E-02,
+ & .111177E+00, .297532E-02, .410859E-01, .410859E-01, .289793E-02,
+ & .289815E-02, .289815E-02, .289793E-02, .929352E-01, .288809E-02,
+ & .377798E-01, .377798E-01, .276920E-02, .276941E-02, .276941E-02,
+ & .276920E-02, .767178E-01, .276084E-02, .346372E-01, .346372E-01,
+ & .261353E-02, .261373E-02, .261373E-02, .261353E-02, .626102E-01,
+ & .260643E-02, .316676E-01, .316676E-01, .244134E-02, .244154E-02,
+ & .244154E-02, .244134E-02, .505665E-01, .243531E-02, .288765E-01/
+ DATA (DL(K),K= 3146, 3230) /
+ & .288765E-01, .226087E-02, .226105E-02, .226105E-02, .226087E-02,
+ & .404527E-01, .225576E-02, .262660E-01, .262660E-01, .207845E-02,
+ & .207862E-02, .207862E-02, .207845E-02, .320820E-01, .207412E-02,
+ & .238351E-01, .238351E-01, .189881E-02, .189897E-02, .189897E-02,
+ & .189881E-02, .252422E-01, .189514E-02, .215808E-01, .215808E-01,
+ & .172536E-02, .172551E-02, .172551E-02, .172536E-02, .197186E-01,
+ & .172225E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .720339E-01, .720339E-01, .181946E-04, .181946E-04, .181946E-04,
+ & .181946E-04, .254393E+00, .469256E-18, .677768E-01, .677768E-01,
+ & .875835E-03, .875888E-03, .875888E-03, .875835E-03, .249966E+00,
+ & .860480E-03, .634725E-01, .634725E-01, .153792E-02, .153801E-02,
+ & .153801E-02, .153792E-02, .236824E+00, .152496E-02, .591619E-01,
+ & .591619E-01, .201036E-02, .201048E-02, .201048E-02, .201036E-02/
+ DATA (DL(K),K= 3231, 3315) /
+ & .217211E+00, .199944E-02, .548948E-01, .548948E-01, .231978E-02,
+ & .231992E-02, .231992E-02, .231978E-02, .193739E+00, .231058E-02,
+ & .507162E-01, .507162E-01, .249460E-02, .249475E-02, .249475E-02,
+ & .249460E-02, .168773E+00, .248686E-02, .466653E-01, .466653E-01,
+ & .256217E-02, .256232E-02, .256232E-02, .256217E-02, .144012E+00,
+ & .255566E-02, .427744E-01, .427744E-01, .254804E-02, .254820E-02,
+ & .254820E-02, .254804E-02, .120695E+00, .254258E-02, .390676E-01,
+ & .390676E-01, .247365E-02, .247380E-02, .247380E-02, .247365E-02,
+ & .995452E-01, .246906E-02, .355626E-01, .355626E-01, .235710E-02,
+ & .235725E-02, .235725E-02, .235710E-02, .809281E-01, .235325E-02,
+ & .322703E-01, .322703E-01, .221303E-02, .221317E-02, .221317E-02,
+ & .221303E-02, .649429E-01, .220980E-02, .291963E-01, .291963E-01,
+ & .205294E-02, .205307E-02, .205307E-02, .205294E-02, .515039E-01,
+ & .205024E-02, .263419E-01, .263419E-01, .188569E-02, .188581E-02,
+ & .188581E-02, .188569E-02, .404102E-01, .188343E-02, .237044E-01,
+ & .237044E-01, .171783E-02, .171795E-02, .171795E-02, .171783E-02,
+ & .313959E-01, .171594E-02, .212782E-01, .212782E-01, .155409E-02/
+ DATA (DL(K),K= 3316, 3400) /
+ & .155419E-02, .155419E-02, .155409E-02, .241750E-01, .155251E-02,
+ & .190555E-01, .190555E-01, .139767E-02, .139777E-02, .139777E-02,
+ & .139767E-02, .184646E-01, .139635E-02, .170270E-01, .170270E-01,
+ & .125065E-02, .125074E-02, .125074E-02, .125065E-02, .139996E-01,
+ & .124955E-02, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .687547E-01, .687547E-01, .676181E-05, .676181E-05, .676181E-05,
+ & .676181E-05, .280728E+00,-.145838E-17, .637529E-01, .637529E-01,
+ & .808781E-03, .808818E-03, .808818E-03, .808781E-03, .270033E+00,
+ & .803169E-03, .588180E-01, .588180E-01, .139388E-02, .139394E-02,
+ & .139394E-02, .139388E-02, .249568E+00, .138922E-02, .539945E-01,
+ & .539945E-01, .178168E-02, .178176E-02, .178176E-02, .178168E-02,
+ & .222743E+00, .177782E-02, .493317E-01, .493317E-01, .200838E-02,
+ & .200848E-02, .200848E-02, .200838E-02, .192919E+00, .200519E-02/
+ DATA (DL(K),K= 3401, 3485) /
+ & .448709E-01, .448709E-01, .211009E-02, .211019E-02, .211019E-02,
+ & .211009E-02, .162975E+00, .210745E-02, .406433E-01, .406433E-01,
+ & .211805E-02, .211815E-02, .211815E-02, .211805E-02, .134716E+00,
+ & .211586E-02, .366716E-01, .366716E-01, .205957E-02, .205968E-02,
+ & .205968E-02, .205957E-02, .109289E+00, .205776E-02, .329687E-01,
+ & .329687E-01, .195606E-02, .195616E-02, .195616E-02, .195606E-02,
+ & .871955E-01, .195457E-02, .295400E-01, .295400E-01, .182447E-02,
+ & .182456E-02, .182456E-02, .182447E-02, .685399E-01, .182323E-02,
+ & .263849E-01, .263849E-01, .167765E-02, .167774E-02, .167774E-02,
+ & .167765E-02, .531615E-01, .167663E-02, .234975E-01, .234975E-01,
+ & .152505E-02, .152514E-02, .152514E-02, .152505E-02, .407334E-01,
+ & .152421E-02, .208683E-01, .208683E-01, .137342E-02, .137350E-02,
+ & .137350E-02, .137342E-02, .308674E-01, .137273E-02, .184852E-01,
+ & .184852E-01, .122732E-02, .122739E-02, .122739E-02, .122732E-02,
+ & .231578E-01, .122675E-02, .163340E-01, .163340E-01, .108968E-02,
+ & .108975E-02, .108975E-02, .108968E-02, .172149E-01, .108921E-02,
+ & .143996E-01, .143996E-01, .962198E-03, .962260E-03, .962260E-03/
+ DATA (DL(K),K= 3486, 3570) /
+ & .962198E-03, .126908E-01, .961815E-03, .126661E-01, .126661E-01,
+ & .845675E-03, .845732E-03, .845732E-03, .845675E-03, .928555E-02,
+ & .845361E-03, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .639050E-01, .639050E-01, .189600E-05, .189600E-05, .189600E-05,
+ & .189600E-05, .320203E+00, .545701E-18, .581555E-01, .581555E-01,
+ & .725861E-03, .725886E-03, .725886E-03, .725861E-03, .299305E+00,
+ & .724320E-03, .526376E-01, .526376E-01, .121568E-02, .121572E-02,
+ & .121572E-02, .121568E-02, .267591E+00, .121442E-02, .473911E-01,
+ & .473911E-01, .150820E-02, .150825E-02, .150825E-02, .150820E-02,
+ & .230364E+00, .150718E-02, .424558E-01, .424558E-01, .164949E-02,
+ & .164955E-02, .164955E-02, .164949E-02, .191972E+00, .164867E-02,
+ & .378600E-01, .378600E-01, .168256E-02, .168262E-02, .168262E-02,
+ & .168256E-02, .155818E+00, .168189E-02, .336181E-01, .336181E-01/
+ DATA (DL(K),K= 3571, 3655) /
+ & .164080E-02, .164086E-02, .164086E-02, .164080E-02, .123609E+00,
+ & .164026E-02, .297349E-01, .297349E-01, .155136E-02, .155142E-02,
+ & .155142E-02, .155136E-02, .961680E-01, .155092E-02, .262052E-01,
+ & .262052E-01, .143382E-02, .143388E-02, .143388E-02, .143382E-02,
+ & .735522E-01, .143346E-02, .230171E-01, .230171E-01, .130247E-02,
+ & .130253E-02, .130253E-02, .130247E-02, .553916E-01, .130218E-02,
+ & .201539E-01, .201539E-01, .116733E-02, .116739E-02, .116739E-02,
+ & .116733E-02, .411453E-01, .116710E-02, .175955E-01, .175955E-01,
+ & .103505E-02, .103510E-02, .103510E-02, .103505E-02, .301858E-01,
+ & .103486E-02, .153199E-01, .153199E-01, .909828E-03, .909880E-03,
+ & .909880E-03, .909828E-03, .218957E-01, .909677E-03, .133043E-01,
+ & .133043E-01, .794097E-03, .794146E-03, .794146E-03, .794097E-03,
+ & .157204E-01, .793976E-03, .115259E-01, .115259E-01, .689012E-03,
+ & .689057E-03, .689057E-03, .689012E-03, .111816E-01, .688913E-03,
+ & .996208E-02, .996208E-02, .594880E-03, .594922E-03, .594922E-03,
+ & .594880E-03, .788559E-02, .594801E-03, .859151E-02, .859151E-02,
+ & .511455E-03, .511493E-03, .511493E-03, .511455E-03, .551865E-02/
+ DATA (DL(K),K= 3656, 3740) /
+ & .511392E-03, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .567030E-01, .567030E-01, .317692E-06, .317692E-06, .317692E-06,
+ & .317692E-06, .387655E+00,-.196551E-18, .502560E-01, .502560E-01,
+ & .611827E-03, .611838E-03, .611838E-03, .611827E-03, .346975E+00,
+ & .611576E-03, .442838E-01, .442838E-01, .981907E-03, .981929E-03,
+ & .981929E-03, .981907E-03, .295290E+00, .981708E-03, .388018E-01,
+ & .388018E-01, .116826E-02, .116829E-02, .116829E-02, .116826E-02,
+ & .241157E+00, .116810E-02, .338227E-01, .338227E-01, .122537E-02,
+ & .122541E-02, .122541E-02, .122537E-02, .190062E+00, .122525E-02,
+ & .293442E-01, .293442E-01, .120047E-02, .120052E-02, .120052E-02,
+ & .120047E-02, .145706E+00, .120037E-02, .253494E-01, .253494E-01,
+ & .112580E-02, .112585E-02, .112585E-02, .112580E-02, .109110E+00,
+ & .112572E-02, .218132E-01, .218132E-01, .102498E-02, .102503E-02/
+ DATA (DL(K),K= 3741, 3825) /
+ & .102503E-02, .102498E-02, .800661E-01, .102492E-02, .187030E-01,
+ & .187030E-01, .913395E-03, .913450E-03, .913450E-03, .913395E-03,
+ & .577342E-01, .913348E-03, .159833E-01, .159833E-01, .800935E-03,
+ & .800990E-03, .800990E-03, .800935E-03, .409782E-01, .800898E-03,
+ & .136172E-01, .136172E-01, .693698E-03, .693751E-03, .693751E-03,
+ & .693698E-03, .286780E-01, .693669E-03, .115681E-01, .115681E-01,
+ & .595013E-03, .595064E-03, .595064E-03, .595013E-03, .198197E-01,
+ & .594990E-03, .980105E-02, .980105E-02, .506423E-03, .506471E-03,
+ & .506471E-03, .506423E-03, .135410E-01, .506405E-03, .828286E-02,
+ & .828286E-02, .428323E-03, .428368E-03, .428368E-03, .428323E-03,
+ & .915498E-02, .428309E-03, .698303E-02, .698303E-02, .360397E-03,
+ & .360439E-03, .360439E-03, .360397E-03, .613133E-02, .360386E-03,
+ & .587373E-02, .587373E-02, .301934E-03, .301973E-03, .301973E-03,
+ & .301934E-03, .407092E-02, .301925E-03, .492985E-02, .492985E-02,
+ & .252029E-03, .252064E-03, .252064E-03, .252029E-03, .268179E-02,
+ & .252022E-03, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 3826, 3910) /
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .450567E-01, .450567E-01, .151200E-07, .151200E-07, .151200E-07,
+ & .151200E-07, .542258E+00,-.767310E-18, .381624E-01, .381624E-01,
+ & .438685E-03, .438751E-03, .438751E-03, .438685E-03, .447480E+00,
+ & .438674E-03, .321250E-01, .321250E-01, .653465E-03, .653574E-03,
+ & .653574E-03, .653465E-03, .347952E+00, .653456E-03, .268827E-01,
+ & .268827E-01, .724735E-03, .724868E-03, .724868E-03, .724735E-03,
+ & .258636E+00, .724728E-03, .223751E-01, .223751E-01, .709421E-03,
+ & .709567E-03, .709567E-03, .709421E-03, .185088E+00, .709417E-03,
+ & .185359E-01, .185359E-01, .650478E-03, .650626E-03, .650626E-03,
+ & .650478E-03, .128686E+00, .650474E-03, .152906E-01, .152906E-01,
+ & .572423E-03, .572567E-03, .572567E-03, .572423E-03, .873875E-01,
+ & .572420E-03, .125654E-01, .125654E-01, .490165E-03, .490302E-03,
+ & .490302E-03, .490165E-03, .581141E-01, .490163E-03, .102901E-01,
+ & .102901E-01, .411740E-03, .411866E-03, .411866E-03, .411740E-03/
+ DATA (DL(K),K= 3911, 3995) /
+ & .379596E-01, .411738E-03, .839975E-02, .839975E-02, .340986E-03,
+ & .341101E-03, .341101E-03, .340986E-03, .244073E-01, .340985E-03,
+ & .683634E-02, .683634E-02, .279417E-03, .279520E-03, .279520E-03,
+ & .279417E-03, .154717E-01, .279416E-03, .554846E-02, .554846E-02,
+ & .227114E-03, .227204E-03, .227204E-03, .227114E-03, .968450E-02,
+ & .227113E-03, .449143E-02, .449143E-02, .183425E-03, .183504E-03,
+ & .183504E-03, .183425E-03, .599306E-02, .183425E-03, .362676E-02,
+ & .362676E-02, .147387E-03, .147455E-03, .147455E-03, .147387E-03,
+ & .366977E-02, .147387E-03, .292164E-02, .292164E-02, .117936E-03,
+ & .117995E-03, .117995E-03, .117936E-03, .222583E-02, .117936E-03,
+ & .234830E-02, .234830E-02, .940414E-04, .940914E-04, .940914E-04,
+ & .940414E-04, .133844E-02, .940412E-04, .188339E-02, .188339E-02,
+ & .747651E-04, .748074E-04, .748074E-04, .747651E-04, .798451E-03,
+ & .747649E-04, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00,
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+ DATA (DL(K),K= 3996, 4000) /
+ & .000000E+00, .000000E+00, .000000E+00, .000000E+00, .000000E+00/
+
+ DO 10 I=1,7
+ QQ(I) = 0.
+ 10 CONTINUE
+ IF(X.GT.0.9985) RETURN
+
+ IS = S/DELTA+1
+ IS = MIN(IS,19)
+ IS1 = IS+1
+ DO 20 I=1,7
+ IF(I.EQ.3.AND.X.GT.0.95) GOTO 19
+ IF(I.EQ.8.AND.X.GT.0.95) GOTO 19
+ DO 30 L=1,25
+ F1(L)=GF(I,IS,L)
+ F2(L)=GF(I,IS1,L)
+ 30 CONTINUE
+ S1=(IS-1)*DELTA
+ S2=S1+DELTA
+ A1 = PHO_CKMTFV(X,F1)
+ A2 = PHO_CKMTFV(X,F2)
+ QQ(I)=A1*(S2-S)/DELTA+A2*(S-S1)/DELTA
+ 19 CONTINUE
+ 20 CONTINUE
+
+ END
+
+CDECK ID>, PHO_CKMTFV
+ REAL FUNCTION PHO_CKMTFV(X,FVL)
+C**********************************************************************
+C
+C LOGARITHMIC INTERPOLATOR - WATCH OUT FOR NEGATIVE
+C FUNCTIONS AND/OR X VALUES OUTSIDE THE RANGE 0 TO 1.
+C NOTE: DIMENSION OF FVL IS OVERWRITTEN BY VALUE USED
+C IN MAIN ROUTINE.
+C
+C**********************************************************************
+ SAVE
+
+ DIMENSION FVL(25),XGRID(25)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DATA NX,XGRID/25,.001,.002,.004,.008,.016,.032,.064,.1,.15,
+ *.2,.25,.3,.35,.4,.45,.5,.55,.6,.65,.7,.75,.8,.85,.9,.95/
+
+ PHO_CKMTFV=0.
+ DO 1 I=1,NX
+ IF(X.LT.XGRID(I)) GO TO 2
+ 1 CONTINUE
+ 2 I=I-1
+ IF(I.EQ.0) THEN
+ I=I+1
+ ELSE IF(I.GT.23) THEN
+ I=23
+ ENDIF
+ J=I+1
+ K=J+1
+ AXI=LOG(XGRID(I))
+ BXI=LOG(1.-XGRID(I))
+ AXJ=LOG(XGRID(J))
+ BXJ=LOG(1.-XGRID(J))
+ AXK=LOG(XGRID(K))
+ BXK=LOG(1.-XGRID(K))
+ FI=LOG(ABS(FVL(I)) +1.E-15)
+ FJ=LOG(ABS(FVL(J)) +1.E-16)
+ FK=LOG(ABS(FVL(K)) +1.E-17)
+ DET=AXI*(BXJ-BXK)+AXJ*(BXK-BXI)+AXK*(BXI-BXJ)
+ ALOGA=(FI*(AXJ*BXK-AXK*BXJ)+FJ*(AXK*BXI-AXI*BXK)+FK*(AXI*BXJ-AXJ*
+ $ BXI))/DET
+ ALPHA=(FI*(BXJ-BXK)+FJ*(BXK-BXI)+FK*(BXI-BXJ))/DET
+ BETA=(FI*(AXK-AXJ)+FJ*(AXI-AXK)+FK*(AXJ-AXI))/DET
+ IF(ABS(ALPHA).GT.99..OR.ABS(BETA).GT.99..OR.ABS(ALOGA).GT.99.)
+ 1RETURN
+C IF(ALPHA.GT.50..OR.BETA.GT.50.) THEN
+C WRITE(LO,2001) X,FVL
+C 2001 FORMAT(8E12.4)
+C WRITE(LO,2001) ALPHA,BETA,ALOGA,DET
+C ENDIF
+ PHO_CKMTFV=EXP(ALOGA)*X**ALPHA*(1.-X)**BETA
+
+ END
+
+CDECK ID>, PHO_SASGAM
+C***********************************************************************
+C...SaSgam version 2 - parton distributions of the photon
+C...by Gerhard A. Schuler and Torbjorn Sjostrand
+C...For further information see Z. Phys. C68 (1995) 607
+C...and Phys. Lett. B376 (1996) 193.
+
+C...18 January 1996: original code.
+C...22 July 1996: calculation of BETA moved in SASBEH.
+
+C!!!Note that one further call parameter - IP2 - has been added
+C!!!to the SASGAM argument list compared with version 1.
+
+C...The user should only need to call the SASGAM routine,
+C...which in turn calls the auxiliary routines SASVMD, SASANO,
+C...SASBEH and SASDIR. The package is self-contained.
+
+C...One particular aspect of these parametrizations is that F2 for
+C...the photon is not obtained just as the charge-squared-weighted
+C...sum of quark distributions, but differ in the treatment of
+C...heavy flavours (in F2 the DIS relation W2 = Q2*(1-x)/x restricts
+C...the kinematics range of heavy-flavour production, but the same
+C...kinematics is not relevant e.g. for jet production) and, for the
+C...'MSbar' fits, in the addition of a Cgamma term related to the
+C...separation of direct processes. Schematically:
+C...PDF = VMD (rho, omega, phi) + anomalous (d, u, s, c, b).
+C...F2 = VMD (rho, omega, phi) + anomalous (d, u, s) +
+C... Bethe-Heitler (c, b) (+ Cgamma (d, u, s)).
+C...The J/psi and Upsilon states have not been included in the VMD sum,
+C...but low c and b masses in the other components should compensate
+C...for this in a duality sense.
+
+C...The calling sequence is the following:
+C CALL SASGAM(ISET,X,Q2,P2,IP2,F2GM,XPDFGM)
+C...with the following declaration statement:
+C DIMENSION XPDFGM(-6:6)
+C...and, optionally, further information in:
+C COMMON/SASCOM/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
+C &XPDIR(-6:6)
+C COMMON/SASVAL/VXPVMD(-6:6),VXPANL(-6:6),VXPANH(-6:6),VXPDGM(-6:6)
+C...Input: ISET = 1 : SaS set 1D ('DIS', Q0 = 0.6 GeV)
+C = 2 : SaS set 1M ('MSbar', Q0 = 0.6 GeV)
+C = 3 : SaS set 2D ('DIS', Q0 = 2 GeV)
+C = 4 : SaS set 2M ('MSbar', Q0 = 2 GeV)
+C X : x value.
+C Q2 : Q2 value.
+C P2 : P2 value; should be = 0. for an on-shell photon.
+C IP2 : scheme used to evaluate off-shell anomalous component.
+C = 0 : recommended default, see = 7.
+C = 1 : dipole dampening by integration; very time-consuming.
+C = 2 : P_0^2 = max( Q_0^2, P^2 )
+C = 3 : P_0^2 = Q_0^2 + P^2.
+C = 4 : P_{eff} that preserves momentum sum.
+C = 5 : P_{int} that preserves momentum and average
+C evolution range.
+C = 6 : P_{eff}, matched to P_0 in P2 -> Q2 limit.
+C = 7 : P_{eff}, matched to P_0 in P2 -> Q2 limit.
+C...Output: F2GM : F2 value of the photon (including factors of alpha_em).
+C XPFDGM : x times parton distribution functions of the photon,
+C with elements 0 = g, 1 = d, 2 = u, 3 = s, 4 = c, 5 = b,
+C 6 = t (always empty!), - for antiquarks (result is same).
+C...The breakdown by component is stored in the commonblock SASCOM,
+C with elements as above.
+C XPVMD : rho, omega, phi VMD part only of output.
+C XPANL : d, u, s anomalous part only of output.
+C XPANH : c, b anomalous part only of output.
+C XPBEH : c, b Bethe-Heitler part only of output.
+C XPDIR : Cgamma (direct contribution) part only of output.
+C...The above arrays do not distinguish valence and sea contributions,
+C...although this information is available internally. The additional
+C...commonblock SASVAL provides the valence part only of the above
+C...distributions. Array names VXPVMD, VXPANL and VXPANH correspond
+C...to XPVMD, XPANL and XPANH, while XPBEH and XPDIR are valence only
+C...and therefore not given doubly. VXPDGM gives the sum of valence
+C...parts, and so matches XPDFGM. The difference, i.e. XPVMD-VXPVMD
+C...and so on, gives the sea part only.
+C***********************************************************************
+
+ SUBROUTINE PHO_SASGAM(ISET,X,Q2,P2,IP2,F2GM,XPDFGM)
+C...Purpose: to construct the F2 and parton distributions of the photon
+C...by summing homogeneous (VMD) and inhomogeneous (anomalous) terms.
+C...For F2, c and b are included by the Bethe-Heitler formula;
+C...in the 'MSbar' scheme additionally a Cgamma term is added.
+ SAVE
+ DIMENSION XPDFGM(-6:6)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ COMMON/SASCOM/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
+ &XPDIR(-6:6)
+ COMMON/SASVAL/VXPVMD(-6:6),VXPANL(-6:6),VXPANH(-6:6),VXPDGM(-6:6)
+ SAVE /SASCOM/,/SASVAL/
+
+C...Temporary array.
+ DIMENSION XPGA(-6:6), VXPGA(-6:6)
+C...Charm and bottom masses (low to compensate for J/psi etc.).
+ DATA PMC/1.3/, PMB/4.6/
+C...alpha_em and alpha_em/(2*pi).
+ DATA AEM/0.007297/, AEM2PI/0.0011614/
+C...Lambda value for 4 flavours.
+ DATA ALAM/0.20/
+C...Mixture u/(u+d), = 0.5 for incoherent and = 0.8 for coherent sum.
+ DATA FRACU/0.8/
+C...VMD couplings f_V**2/(4*pi).
+ DATA FRHO/2.20/, FOMEGA/23.6/, FPHI/18.4/
+C...Masses for rho (=omega) and phi.
+ DATA PMRHO/0.770/, PMPHI/1.020/
+C...Number of points in integration for IP2=1.
+ DATA NSTEP/100/
+
+C...Reset output.
+ F2GM=0.
+ DO 100 KFL=-6,6
+ XPDFGM(KFL)=0.
+ XPVMD(KFL)=0.
+ XPANL(KFL)=0.
+ XPANH(KFL)=0.
+ XPBEH(KFL)=0.
+ XPDIR(KFL)=0.
+ VXPVMD(KFL)=0.
+ VXPANL(KFL)=0.
+ VXPANH(KFL)=0.
+ VXPDGM(KFL)=0.
+ 100 CONTINUE
+
+C...Check that input sensible.
+ IF(ISET.LE.0.OR.ISET.GE.5) THEN
+ WRITE(LO,*) ' FATAL ERROR: SaSgam called for unknown set'
+ WRITE(LO,*) ' ISET = ',ISET
+ STOP
+ ENDIF
+ IF(X.LE.0..OR.X.GT.1.) THEN
+ WRITE(LO,*) ' FATAL ERROR: SaSgam called for unphysical x'
+ WRITE(LO,*) ' X = ',X
+ STOP
+ ENDIF
+
+C...Set Q0 cut-off parameter as function of set used.
+ IF(ISET.LE.2) THEN
+ Q0=0.6
+ ELSE
+ Q0=2.
+ ENDIF
+ Q02=Q0**2
+
+C...Scale choice for off-shell photon; common factors.
+ Q2A=Q2
+ FACNOR=1.
+ IF(IP2.EQ.1) THEN
+ P2MX=P2+Q02
+ Q2A=Q2+P2*Q02/MAX(Q02,Q2)
+ FACNOR=LOG(Q2/Q02)/NSTEP
+ ELSEIF(IP2.EQ.2) THEN
+ P2MX=MAX(P2,Q02)
+ ELSEIF(IP2.EQ.3) THEN
+ P2MX=P2+Q02
+ Q2A=Q2+P2*Q02/MAX(Q02,Q2)
+ ELSEIF(IP2.EQ.4) THEN
+ P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ ELSEIF(IP2.EQ.5) THEN
+ P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ P2MX=Q0*SQRT(P2MXA)
+ FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MX)
+ ELSEIF(IP2.EQ.6) THEN
+ P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ P2MX=MAX(0.,1.-P2/Q2)*P2MX+MIN(1.,P2/Q2)*MAX(P2,Q02)
+ ELSE
+ P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ P2MX=Q0*SQRT(P2MXA)
+ P2MXB=P2MX
+ P2MX=MAX(0.,1.-P2/Q2)*P2MX+MIN(1.,P2/Q2)*MAX(P2,Q02)
+ P2MXB=MAX(0.,1.-P2/Q2)*P2MXB+MIN(1.,P2/Q2)*P2MXA
+ FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MXB)
+ ENDIF
+
+C...Call VMD parametrization for d quark and use to give rho, omega,
+C...phi. Note dipole dampening for off-shell photon.
+ CALL PHO_SASVMD(ISET,1,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ XFVAL=VXPGA(1)
+ XPGA(1)=XPGA(2)
+ XPGA(-1)=XPGA(-2)
+ FACUD=AEM*(1./FRHO+1./FOMEGA)*(PMRHO**2/(PMRHO**2+P2))**2
+ FACS=AEM*(1./FPHI)*(PMPHI**2/(PMPHI**2+P2))**2
+ DO 110 KFL=-5,5
+ XPVMD(KFL)=(FACUD+FACS)*XPGA(KFL)
+ 110 CONTINUE
+ XPVMD(1)=XPVMD(1)+(1.-FRACU)*FACUD*XFVAL
+ XPVMD(2)=XPVMD(2)+FRACU*FACUD*XFVAL
+ XPVMD(3)=XPVMD(3)+FACS*XFVAL
+ XPVMD(-1)=XPVMD(-1)+(1.-FRACU)*FACUD*XFVAL
+ XPVMD(-2)=XPVMD(-2)+FRACU*FACUD*XFVAL
+ XPVMD(-3)=XPVMD(-3)+FACS*XFVAL
+ VXPVMD(1)=(1.-FRACU)*FACUD*XFVAL
+ VXPVMD(2)=FRACU*FACUD*XFVAL
+ VXPVMD(3)=FACS*XFVAL
+ VXPVMD(-1)=(1.-FRACU)*FACUD*XFVAL
+ VXPVMD(-2)=FRACU*FACUD*XFVAL
+ VXPVMD(-3)=FACS*XFVAL
+
+ IF(IP2.NE.1) THEN
+C...Anomalous parametrizations for different strategies
+C...for off-shell photons; except full integration.
+
+C...Call anomalous parametrization for d + u + s.
+ CALL PHO_SASANO(-3,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ DO 120 KFL=-5,5
+ XPANL(KFL)=FACNOR*XPGA(KFL)
+ VXPANL(KFL)=FACNOR*VXPGA(KFL)
+ 120 CONTINUE
+
+C...Call anomalous parametrization for c and b.
+ CALL PHO_SASANO(4,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ DO 130 KFL=-5,5
+ XPANH(KFL)=FACNOR*XPGA(KFL)
+ VXPANH(KFL)=FACNOR*VXPGA(KFL)
+ 130 CONTINUE
+ CALL PHO_SASANO(5,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ DO 140 KFL=-5,5
+ XPANH(KFL)=XPANH(KFL)+FACNOR*XPGA(KFL)
+ VXPANH(KFL)=VXPANH(KFL)+FACNOR*VXPGA(KFL)
+ 140 CONTINUE
+
+ ELSE
+C...Special option: loop over flavours and integrate over k2.
+ DO 170 KF=1,5
+ DO 160 ISTEP=1,NSTEP
+ Q2STEP=Q02*(Q2/Q02)**((ISTEP-0.5)/NSTEP)
+ IF((KF.EQ.4.AND.Q2STEP.LT.PMC**2).OR.
+ & (KF.EQ.5.AND.Q2STEP.LT.PMB**2)) GOTO 160
+ CALL PHO_SASVMD(0,KF,X,Q2,Q2STEP,ALAM,XPGA,VXPGA)
+ FACQ=AEM2PI*(Q2STEP/(Q2STEP+P2))**2*FACNOR
+ IF(MOD(KF,2).EQ.0) FACQ=FACQ*(8./9.)
+ IF(MOD(KF,2).EQ.1) FACQ=FACQ*(2./9.)
+ DO 150 KFL=-5,5
+ IF(KF.LE.3) XPANL(KFL)=XPANL(KFL)+FACQ*XPGA(KFL)
+ IF(KF.GE.4) XPANH(KFL)=XPANH(KFL)+FACQ*XPGA(KFL)
+ IF(KF.LE.3) VXPANL(KFL)=VXPANL(KFL)+FACQ*VXPGA(KFL)
+ IF(KF.GE.4) VXPANH(KFL)=VXPANH(KFL)+FACQ*VXPGA(KFL)
+ 150 CONTINUE
+ 160 CONTINUE
+ 170 CONTINUE
+ ENDIF
+
+C...Call Bethe-Heitler term expression for charm and bottom.
+ CALL PHO_SASBEH(4,X,Q2,P2,PMC**2,XPBH)
+ XPBEH(4)=XPBH
+ XPBEH(-4)=XPBH
+ CALL PHO_SASBEH(5,X,Q2,P2,PMB**2,XPBH)
+ XPBEH(5)=XPBH
+ XPBEH(-5)=XPBH
+
+C...For MSbar subtraction call C^gamma term expression for d, u, s.
+ IF(ISET.EQ.2.OR.ISET.EQ.4) THEN
+ CALL PHO_SASDIR(X,Q2,P2,Q02,XPGA)
+ DO 180 KFL=-5,5
+ XPDIR(KFL)=XPGA(KFL)
+ 180 CONTINUE
+ ENDIF
+
+C...Store result in output array.
+ DO 190 KFL=-5,5
+ CHSQ=1./9.
+ IF(IABS(KFL).EQ.2.OR.IABS(KFL).EQ.4) CHSQ=4./9.
+ XPF2=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
+ IF(KFL.NE.0) F2GM=F2GM+CHSQ*XPF2
+ XPDFGM(KFL)=XPVMD(KFL)+XPANL(KFL)+XPANH(KFL)
+ VXPDGM(KFL)=VXPVMD(KFL)+VXPANL(KFL)+VXPANH(KFL)
+ 190 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+CDECK ID>, PHO_SASVMD
+ SUBROUTINE PHO_SASVMD(ISET,KF,X,Q2,P2,ALAM,XPGA,VXPGA)
+C...Purpose: to evaluate the VMD parton distributions of a photon,
+C...evolved homogeneously from an initial scale P2 to Q2.
+C...Does not include dipole suppression factor.
+C...ISET is parton distribution set, see above;
+C...additionally ISET=0 is used for the evolution of an anomalous photon
+C...which branched at a scale P2 and then evolved homogeneously to Q2.
+C...ALAM is the 4-flavour Lambda, which is automatically converted
+C...to 3- and 5-flavour equivalents as needed.
+ SAVE
+ DIMENSION XPGA(-6:6), VXPGA(-6:6)
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DATA PMC/1.3/, PMB/4.6/, AEM/0.007297/, AEM2PI/0.0011614/
+
+C...Reset output.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0.
+ VXPGA(KFL)=0.
+ 100 CONTINUE
+ KFA=IABS(KF)
+
+C...Calculate Lambda; protect against unphysical Q2 and P2 input.
+ ALAM3=ALAM*(PMC/ALAM)**(2./27.)
+ ALAM5=ALAM*(ALAM/PMB)**(2./23.)
+ P2EFF=MAX(P2,1.2*ALAM3**2)
+ IF(KFA.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
+ IF(KFA.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
+ Q2EFF=MAX(Q2,P2EFF)
+
+C...Find number of flavours at lower and upper scale.
+ NFP=4
+ IF(P2EFF.LT.PMC**2) NFP=3
+ IF(P2EFF.GT.PMB**2) NFP=5
+ NFQ=4
+ IF(Q2EFF.LT.PMC**2) NFQ=3
+ IF(Q2EFF.GT.PMB**2) NFQ=5
+
+C...Find s as sum of 3-, 4- and 5-flavour parts.
+ S=0.
+ IF(NFP.EQ.3) THEN
+ Q2DIV=PMC**2
+ IF(NFQ.EQ.3) Q2DIV=Q2EFF
+ S=S+(6./27.)*LOG(LOG(Q2DIV/ALAM3**2)/LOG(P2EFF/ALAM3**2))
+ ENDIF
+ IF(NFP.LE.4.AND.NFQ.GE.4) THEN
+ P2DIV=P2EFF
+ IF(NFP.EQ.3) P2DIV=PMC**2
+ Q2DIV=Q2EFF
+ IF(NFQ.EQ.5) Q2DIV=PMB**2
+ S=S+(6./25.)*LOG(LOG(Q2DIV/ALAM**2)/LOG(P2DIV/ALAM**2))
+ ENDIF
+ IF(NFQ.EQ.5) THEN
+ P2DIV=PMB**2
+ IF(NFP.EQ.5) P2DIV=P2EFF
+ S=S+(6./23.)*LOG(LOG(Q2EFF/ALAM5**2)/LOG(P2DIV/ALAM5**2))
+ ENDIF
+
+C...Calculate frequent combinations of x and s.
+ X1=1.-X
+ XL=-LOG(X)
+ S2=S**2
+ S3=S**3
+ S4=S**4
+
+C...Evaluate homogeneous anomalous parton distributions below or
+C...above threshold.
+ IF(ISET.EQ.0) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ &(KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = X * 1.5 * (X**2+X1**2)
+ XGLU = 0.
+ XSEA = 0.
+ ELSE
+ XVAL = (1.5/(1.-0.197*S+4.33*S2)*X**2 + (1.5+2.10*S)/
+ & (1.+3.29*S)*X1**2 + 5.23*S/(1.+1.17*S+19.9*S3)*X*X1) *
+ & X**(1./(1.+1.5*S)) * (1.-X**2)**(2.667*S)
+ XGLU = 4.*S/(1.+4.76*S+15.2*S2+29.3*S4) *
+ & X**(-2.03*S/(1.+2.44*S)) * (X1*XL)**(1.333*S) *
+ & ((4.*X**2+7.*X+4.)*X1/3. - 2.*X*(1.+X)*XL)
+ XSEA = S2/(1.+4.54*S+8.19*S2+8.05*S3) *
+ & X**(-1.54*S/(1.+1.29*S)) * X1**(2.667*S) *
+ & ((8.-73.*X+62.*X**2)*X1/9. + (3.-8.*X**2/3.)*X*XL +
+ & (2.*X-1.)*X*XL**2)
+ ENDIF
+
+C...Evaluate set 1D parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.1) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ &(KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = 1.294 * X**0.80 * X1**0.76
+ XGLU = 1.273 * X**0.40 * X1**1.76
+ XSEA = 0.100 * X1**3.76
+ ELSE
+ XVAL = 1.294/(1.+0.252*S+3.079*S2) * X**(0.80-0.13*S) *
+ & X1**(0.76+0.667*S) * XL**(2.*S)
+ XGLU = 7.90*S/(1.+5.50*S) * EXP(-5.16*S) *
+ & X**(-1.90*S/(1.+3.60*S)) * X1**1.30 * XL**(0.50+3.*S) +
+ & 1.273 * EXP(-10.*S) * X**0.40 * X1**(1.76+3.*S)
+ XSEA = (0.1-0.397*S2+1.121*S3)/(1.+5.61*S2+5.26*S3) *
+ & X**(-7.32*S2/(1.+10.3*S2)) *
+ & X1**((3.76+15.*S+12.*S2)/(1.+4.*S))
+ XSEA0 = 0.100 * X1**3.76
+ ENDIF
+
+C...Evaluate set 1M parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.2) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ &(KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = 0.8477 * X**0.51 * X1**1.37
+ XGLU = 3.42 * X**0.255 * X1**2.37
+ XSEA = 0.
+ ELSE
+ XVAL = 0.8477/(1.+1.37*S+2.18*S2+3.73*S3) * X**(0.51+0.21*S)
+ & * X1**1.37 * XL**(2.667*S)
+ XGLU = 24.*S/(1.+9.6*S+0.92*S2+14.34*S3) * EXP(-5.94*S) *
+ & X**((-0.013-1.80*S)/(1.+3.14*S)) * X1**(2.37+0.4*S) *
+ & XL**(0.32+3.6*S) + 3.42 * EXP(-12.*S) * X**0.255 *
+ & X1**(2.37+3.*S)
+ XSEA = 0.842*S/(1.+21.3*S-33.2*S2+229.*S3) *
+ & X**((0.13-2.90*S)/(1.+5.44*S)) * X1**(3.45+0.5*S) *
+ & XL**(2.8*S)
+ XSEA0 = 0.
+ ENDIF
+
+C...Evaluate set 2D parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.3) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ &(KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = X**0.46 * X1**0.64 + 0.76 * X
+ XGLU = 1.925 * X1**2
+ XSEA = 0.242 * X1**4
+ ELSE
+ XVAL = (1.+0.186*S)/(1.-0.209*S+1.495*S2) * X**(0.46+0.25*S)
+ & * X1**((0.64+0.14*S+5.*S2)/(1.+S)) * XL**(1.9*S) +
+ & (0.76+0.4*S) * X * X1**(2.667*S)
+ XGLU = (1.925+5.55*S+147.*S2)/(1.-3.59*S+3.32*S2) *
+ & EXP(-18.67*S) * X**((-5.81*S-5.34*S2)/(1.+29.*S-4.26*S2))
+ & * X1**((2.-5.9*S)/(1.+1.7*S)) * XL**(9.3*S/(1.+1.7*S))
+ XSEA = (0.242-0.252*S+1.19*S2)/(1.-0.607*S+21.95*S2) *
+ & X**(-12.1*S2/(1.+2.62*S+16.7*S2)) * X1**4 * XL**S
+ XSEA0 = 0.242 * X1**4
+ ENDIF
+
+C...Evaluate set 2M parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.4) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ &(KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = 1.168 * X**0.50 * X1**2.60 + 0.965 * X
+ XGLU = 1.808 * X1**2
+ XSEA = 0.209 * X1**4
+ ELSE
+ XVAL = (1.168+1.771*S+29.35*S2) * EXP(-5.776*S) *
+ & X**((0.5+0.208*S)/(1.-0.794*S+1.516*S2)) *
+ & X1**((2.6+7.6*S)/(1.+5.*S)) * XL**(5.15*S/(1.+2.*S)) +
+ & (0.965+22.35*S)/(1.+18.4*S) * X * X1**(2.667*S)
+ XGLU = (1.808+29.9*S)/(1.+26.4*S) * EXP(-5.28*S) *
+ & X**((-5.35*S-10.11*S2)/(1.+31.71*S)) *
+ & X1**((2.-7.3*S+4.*S2)/(1.+2.5*S)) *
+ & XL**(10.9*S/(1.+2.5*S))
+ XSEA = (0.209+0.644*S2)/(1.+0.319*S+17.6*S2) *
+ & X**((-0.373*S-7.71*S2)/(1.+0.815*S+11.0*S2)) *
+ & X1**(4.+S) * XL**(0.45*S)
+ XSEA0 = 0.209 * X1**4
+ ENDIF
+ ENDIF
+
+C...Threshold factors for c and b sea.
+ SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
+ XCHM=0.
+ IF(Q2.GT.PMC**2.AND.Q2.GT.1.001*P2EFF) THEN
+ SCH=MAX(0.,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ IF(ISET.EQ.0) THEN
+ XCHM=XSEA*(1.-(SCH/SLL)**2)
+ ELSE
+ XCHM=MAX(0.,XSEA-XSEA0*X1**(2.667*S))*(1.-SCH/SLL)
+ ENDIF
+ ENDIF
+ XBOT=0.
+ IF(Q2.GT.PMB**2.AND.Q2.GT.1.001*P2EFF) THEN
+ SBT=MAX(0.,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ IF(ISET.EQ.0) THEN
+ XBOT=XSEA*(1.-(SBT/SLL)**2)
+ ELSE
+ XBOT=MAX(0.,XSEA-XSEA0*X1**(2.667*S))*(1.-SBT/SLL)
+ ENDIF
+ ENDIF
+
+C...Fill parton distributions.
+ XPGA(0)=XGLU
+ XPGA(1)=XSEA
+ XPGA(2)=XSEA
+ XPGA(3)=XSEA
+ XPGA(4)=XCHM
+ XPGA(5)=XBOT
+ XPGA(KFA)=XPGA(KFA)+XVAL
+ DO 110 KFL=1,5
+ XPGA(-KFL)=XPGA(KFL)
+ 110 CONTINUE
+ VXPGA(KFA)=XVAL
+ VXPGA(-KFA)=XVAL
+
+ RETURN
+ END
+
+C*********************************************************************
+
+CDECK ID>, PHO_SASANO
+ SUBROUTINE PHO_SASANO(KF,X,Q2,P2,ALAM,XPGA,VXPGA)
+C...Purpose: to evaluate the parton distributions of the anomalous
+C...photon, inhomogeneously evolved from a scale P2 (where it vanishes)
+C...to Q2.
+C...KF=0 gives the sum over (up to) 5 flavours,
+C...KF<0 limits to flavours up to abs(KF),
+C...KF>0 is for flavour KF only.
+C...ALAM is the 4-flavour Lambda, which is automatically converted
+C...to 3- and 5-flavour equivalents as needed.
+ SAVE
+
+C input/output channels
+ INTEGER LI,LO
+ COMMON /POINOU/ LI,LO
+
+ DIMENSION XPGA(-6:6), VXPGA(-6:6), ALAMSQ(3:5)
+ DATA PMC/1.3/, PMB/4.6/, AEM/0.007297/, AEM2PI/0.0011614/
+
+C...Reset output.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0.
+ VXPGA(KFL)=0.
+ 100 CONTINUE
+ IF(Q2.LE.P2) RETURN
+ KFA=IABS(KF)
+
+C...Calculate Lambda; protect against unphysical Q2 and P2 input.
+ ALAMSQ(3)=(ALAM*(PMC/ALAM)**(2./27.))**2
+ ALAMSQ(4)=ALAM**2
+ ALAMSQ(5)=(ALAM*(ALAM/PMB)**(2./23.))**2
+ P2EFF=MAX(P2,1.2*ALAMSQ(3))
+ IF(KF.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
+ IF(KF.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
+ Q2EFF=MAX(Q2,P2EFF)
+ XL=-LOG(X)
+
+C...Find number of flavours at lower and upper scale.
+ NFP=4
+ IF(P2EFF.LT.PMC**2) NFP=3
+ IF(P2EFF.GT.PMB**2) NFP=5
+ NFQ=4
+ IF(Q2EFF.LT.PMC**2) NFQ=3
+ IF(Q2EFF.GT.PMB**2) NFQ=5
+
+C...Define range of flavour loop.
+ IF(KF.EQ.0) THEN
+ KFLMN=1
+ KFLMX=5
+ ELSEIF(KF.LT.0) THEN
+ KFLMN=1
+ KFLMX=KFA
+ ELSE
+ KFLMN=KFA
+ KFLMX=KFA
+ ENDIF
+
+C...Loop over flavours the photon can branch into.
+ DO 110 KFL=KFLMN,KFLMX
+
+C...Light flavours: calculate t range and (approximate) s range.
+ IF(KFL.LE.3.AND.(KFL.EQ.1.OR.KFL.EQ.KF)) THEN
+ TDIFF=LOG(Q2EFF/P2EFF)
+ S=(6./(33.-2.*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ IF(NFQ.GT.NFP) THEN
+ Q2DIV=PMB**2
+ IF(NFQ.EQ.4) Q2DIV=PMC**2
+ SNFQ=(6./(33.-2.*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ SNFP=(6./(33.-2.*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
+ & LOG(P2EFF/ALAMSQ(NFQ-1)))
+ S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
+ ENDIF
+ IF(NFQ.EQ.5.AND.NFP.EQ.3) THEN
+ Q2DIV=PMC**2
+ SNF4=(6./(33.-2.*4))*LOG(LOG(Q2DIV/ALAMSQ(4))/
+ & LOG(P2EFF/ALAMSQ(4)))
+ SNF3=(6./(33.-2.*3))*LOG(LOG(Q2DIV/ALAMSQ(3))/
+ & LOG(P2EFF/ALAMSQ(3)))
+ S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNF3-SNF4)
+ ENDIF
+
+C...u and s quark do not need a separate treatment when d has been done.
+ ELSEIF(KFL.EQ.2.OR.KFL.EQ.3) THEN
+
+C...Charm: as above, but only include range above c threshold.
+ ELSEIF(KFL.EQ.4) THEN
+ IF(Q2.LE.PMC**2) GOTO 110
+ P2EFF=MAX(P2EFF,PMC**2)
+ Q2EFF=MAX(Q2EFF,P2EFF)
+ TDIFF=LOG(Q2EFF/P2EFF)
+ S=(6./(33.-2.*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ IF(NFQ.EQ.5.AND.NFP.EQ.4) THEN
+ Q2DIV=PMB**2
+ SNFQ=(6./(33.-2.*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ SNFP=(6./(33.-2.*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
+ & LOG(P2EFF/ALAMSQ(NFQ-1)))
+ S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
+ ENDIF
+
+C...Bottom: as above, but only include range above b threshold.
+ ELSEIF(KFL.EQ.5) THEN
+ IF(Q2.LE.PMB**2) GOTO 110
+ P2EFF=MAX(P2EFF,PMB**2)
+ Q2EFF=MAX(Q2,P2EFF)
+ TDIFF=LOG(Q2EFF/P2EFF)
+ S=(6./(33.-2.*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ ENDIF
+
+C...Evaluate flavour-dependent prefactor (charge^2 etc.).
+ CHSQ=1./9.
+ IF(KFL.EQ.2.OR.KFL.EQ.4) CHSQ=4./9.
+ FAC=AEM2PI*2.*CHSQ*TDIFF
+
+C...Evaluate parton distributions (normalized to unit momentum sum).
+ IF(KFL.EQ.1.OR.KFL.EQ.4.OR.KFL.EQ.5.OR.KFL.EQ.KF) THEN
+ XVAL= ((1.5+2.49*S+26.9*S**2)/(1.+32.3*S**2)*X**2 +
+ & (1.5-0.49*S+7.83*S**2)/(1.+7.68*S**2)*(1.-X)**2 +
+ & 1.5*S/(1.-3.2*S+7.*S**2)*X*(1.-X)) *
+ & X**(1./(1.+0.58*S)) * (1.-X**2)**(2.5*S/(1.+10.*S))
+ XGLU= 2.*S/(1.+4.*S+7.*S**2) *
+ & X**(-1.67*S/(1.+2.*S)) * (1.-X**2)**(1.2*S) *
+ & ((4.*X**2+7.*X+4.)*(1.-X)/3. - 2.*X*(1.+X)*XL)
+ XSEA= 0.333*S**2/(1.+4.90*S+4.69*S**2+21.4*S**3) *
+ & X**(-1.18*S/(1.+1.22*S)) * (1.-X)**(1.2*S) *
+ & ((8.-73.*X+62.*X**2)*(1.-X)/9. + (3.-8.*X**2/3.)*X*XL +
+ & (2.*X-1.)*X*XL**2)
+
+C...Threshold factors for c and b sea.
+ SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
+ XCHM=0.
+ IF(Q2.GT.PMC**2.AND.Q2.GT.1.001*P2EFF) THEN
+ SCH=MAX(0.,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ XCHM=XSEA*(1.-(SCH/SLL)**3)
+ ENDIF
+ XBOT=0.
+ IF(Q2.GT.PMB**2.AND.Q2.GT.1.001*P2EFF) THEN
+ SBT=MAX(0.,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ XBOT=XSEA*(1.-(SBT/SLL)**3)
+ ENDIF
+ ENDIF
+
+C...Add contribution of each valence flavour.
+ XPGA(0)=XPGA(0)+FAC*XGLU
+ XPGA(1)=XPGA(1)+FAC*XSEA
+ XPGA(2)=XPGA(2)+FAC*XSEA
+ XPGA(3)=XPGA(3)+FAC*XSEA
+ XPGA(4)=XPGA(4)+FAC*XCHM
+ XPGA(5)=XPGA(5)+FAC*XBOT
+ XPGA(KFL)=XPGA(KFL)+FAC*XVAL
+ VXPGA(KFL)=VXPGA(KFL)+FAC*XVAL
+ 110 CONTINUE
+ DO 120 KFL=1,5
+ XPGA(-KFL)=XPGA(KFL)
+ VXPGA(-KFL)=VXPGA(KFL)
+ 120 CONTINUE
+
+ END
+
+C*********************************************************************
+
+CDECK ID>, PHO_SASBEH
+ SUBROUTINE PHO_SASBEH(KF,X,Q2,P2,PM2,XPBH)
+C...Purpose: to evaluate the Bethe-Heitler cross section for
+C...heavy flavour production.
+ SAVE
+ DATA AEM2PI/0.0011614/
+
+C...Reset output.
+ XPBH=0.
+ SIGBH=0.
+
+C...Check kinematics limits.
+ IF(X.GE.Q2/(4.*PM2+Q2+P2)) RETURN
+ W2=Q2*(1.-X)/X-P2
+ BETA2=1.-4.*PM2/W2
+ IF(BETA2.LT.1E-10) RETURN
+ BETA=SQRT(BETA2)
+ RMQ=4.*PM2/Q2
+
+C...Simple case: P2 = 0.
+ IF(P2.LT.1E-4) THEN
+ IF(BETA.LT.0.99) THEN
+ XBL=LOG((1.+BETA)/(1.-BETA))
+ ELSE
+ XBL=LOG((1.+BETA)**2*W2/(4.*PM2))
+ ENDIF
+ SIGBH=BETA*(8.*X*(1.-X)-1.-RMQ*X*(1.-X))+
+ & XBL*(X**2+(1.-X)**2+RMQ*X*(1.-3.*X)-0.5*RMQ**2*X**2)
+
+C...Complicated case: P2 > 0, based on approximation of
+C...C.T. Hill and G.G. Ross, Nucl. Phys. B148 (1979) 373
+ ELSE
+ RPQ=1.-4.*X**2*P2/Q2
+ IF(RPQ.GT.1E-10) THEN
+ RPBE=SQRT(RPQ*BETA2)
+ IF(RPBE.LT.0.99) THEN
+ XBL=LOG((1.+RPBE)/(1.-RPBE))
+ XBI=2.*RPBE/(1.-RPBE**2)
+ ELSE
+ RPBESN=4.*PM2/W2+(4.*X**2*P2/Q2)*BETA2
+ XBL=LOG((1.+RPBE)**2/RPBESN)
+ XBI=2.*RPBE/RPBESN
+ ENDIF
+ SIGBH=BETA*(6.*X*(1.-X)-1.)+
+ & XBL*(X**2+(1.-X)**2+RMQ*X*(1.-3.*X)-0.5*RMQ**2*X**2)+
+ & XBI*(2.*X/Q2)*(PM2*X*(2.-RMQ)-P2*X)
+ ENDIF
+ ENDIF
+
+C...Multiply by charge-squared etc. to get parton distribution.
+ CHSQ=1./9.
+ IF(IABS(KF).EQ.2.OR.IABS(KF).EQ.4) CHSQ=4./9.
+ XPBH=3.*CHSQ*AEM2PI*X*SIGBH
+
+ END
+
+C*********************************************************************
+
+CDECK ID>, PHO_SASDIR
+ SUBROUTINE PHO_SASDIR(X,Q2,P2,Q02,XPGA)
+C...Purpose: to evaluate the direct contribution, i.e. the C^gamma term,
+C...as needed in MSbar parametrizations.
+ SAVE
+ DIMENSION XPGA(-6:6)
+ DATA PMC/1.3/, PMB/4.6/, AEM2PI/0.0011614/
+
+C...Reset output.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0.
+ 100 CONTINUE
+
+C...Evaluate common x-dependent expression.
+ XTMP = (X**2+(1.-X)**2) * (-LOG(X)) - 1.
+ CGAM = 3.*AEM2PI*X * (XTMP*(1.+P2/(P2+Q02)) + 6.*X*(1.-X))
+
+C...d, u, s part by simple charge factor.
+ XPGA(1)=(1./9.)*CGAM
+ XPGA(2)=(4./9.)*CGAM
+ XPGA(3)=(1./9.)*CGAM
+
+C...Also fill for antiquarks.
+ DO 110 KF=1,5
+ XPGA(-KF)=XPGA(KF)
+ 110 CONTINUE
+
+ END
+
+CDECK ID>, PHO_PHGAL
+ SUBROUTINE PHO_PHGAL(X,Q2,XPDF)
+C***********************************************************************
+C
+C photon parton densities with built-in momentum sum rule and
+C Regge-based low-x behaviour
+C
+C H. Abramowicz, E. Gurvich, A. Levy: Phys.Lett.B420:104-108,1998
+C e-Print Archive: hep-ph/9711355
+C
+C code submitted by E.Gurvich, slightly modified (R.Engel, 09/1998)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ SAVE
+
+ PARAMETER(IX=100,IQ=7,NARG=2,NFUN=4)
+ DOUBLE PRECISION
+ & XT(IX),Q2T(IQ),ARG(NARG),ENT(IX+IQ),
+ & XPV(IX,IQ,0:NFUN),XPDF(-6:6)
+
+ DIMENSION NA(NARG)
+
+ DATA ZEROD/0.D0/
+
+C...100 x values; in (D-4,.77) log spaced (78 points)
+C... in (.78,.995) lineary spaced (22 points)
+ DATA Q2T/4.D0,10.D0,50.D0,1.D2,1.D3,1.D4,1.D5/
+ DATA XT/
+ &0.1000D-03,0.1123D-03,0.1262D-03,0.1417D-03,0.1592D-03,0.1789D-03,
+ &0.2009D-03,0.2257D-03,0.2535D-03,0.2848D-03,0.3199D-03,0.3593D-03,
+ &0.4037D-03,0.4534D-03,0.5093D-03,0.5722D-03,0.6427D-03,0.7220D-03,
+ &0.8110D-03,0.9110D-03,0.1023D-02,0.1150D-02,0.1291D-02,0.1451D-02,
+ &0.1629D-02,0.1830D-02,0.2056D-02,0.2310D-02,0.2594D-02,0.2914D-02,
+ &0.3274D-02,0.3677D-02,0.4131D-02,0.4640D-02,0.5212D-02,0.5855D-02,
+ &0.6577D-02,0.7388D-02,0.8299D-02,0.9323D-02,0.1047D-01,0.1176D-01,
+ &0.1321D-01,0.1484D-01,0.1667D-01,0.1873D-01,0.2104D-01,0.2363D-01,
+ &0.2655D-01,0.2982D-01,0.3350D-01,0.3763D-01,0.4227D-01,0.4748D-01,
+ &0.5334D-01,0.5992D-01,0.6731D-01,0.7560D-01,0.8493D-01,0.9540D-01,
+ &0.1072D+00,0.1204D+00,0.1352D+00,0.1519D+00,0.1706D+00,0.1917D+00,
+ &0.2153D+00,0.2419D+00,0.2717D+00,0.3052D+00,0.3428D+00,0.3851D+00,
+ &0.4326D+00,0.4859D+00,0.5458D+00,0.6131D+00,0.6887D+00,0.7737D+00,
+ &0.7837D+00,0.7937D+00,0.8037D+00,0.8137D+00,0.8237D+00,0.8337D+00,
+ &0.8437D+00,0.8537D+00,0.8637D+00,0.8737D+00,0.8837D+00,0.8937D+00,
+ &0.9037D+00,0.9137D+00,0.9237D+00,0.9337D+00,0.9437D+00,0.9537D+00,
+ &0.9637D+00,0.9737D+00,0.9837D+00,0.9937D+00/
+
+C...place for DATA blocks
+ DATA (XPV(I,1,0),I=1,100)/
+ &0.6632D-01,0.6536D-01,0.6390D-01,0.6196D-01,0.5952D-01,0.5663D-01,
+ &0.5339D-01,0.5124D-01,0.5029D-01,0.4893D-01,0.4718D-01,0.4505D-01,
+ &0.4259D-01,0.4038D-01,0.3966D-01,0.3860D-01,0.3721D-01,0.3551D-01,
+ &0.3354D-01,0.3206D-01,0.3134D-01,0.3031D-01,0.2902D-01,0.2747D-01,
+ &0.2608D-01,0.2543D-01,0.2451D-01,0.2335D-01,0.2202D-01,0.2132D-01,
+ &0.2051D-01,0.1950D-01,0.1851D-01,0.1783D-01,0.1696D-01,0.1609D-01,
+ &0.1539D-01,0.1454D-01,0.1386D-01,0.1310D-01,0.1242D-01,0.1169D-01,
+ &0.1104D-01,0.1036D-01,0.9694D-02,0.9046D-02,0.8400D-02,0.7792D-02,
+ &0.7173D-02,0.6573D-02,0.5978D-02,0.5411D-02,0.4853D-02,0.4307D-02,
+ &0.3791D-02,0.3292D-02,0.2818D-02,0.2382D-02,0.1976D-02,0.1606D-02,
+ &0.1275D-02,0.9866D-03,0.7403D-03,0.5351D-03,0.3713D-03,0.2450D-03,
+ &0.1524D-03,0.8849D-04,0.4730D-04,0.2278D-04,0.9707D-05,0.3518D-05,
+ &0.1041D-05,0.2356D-06,0.3682D-07,0.3365D-08,0.1333D-09,0.1188D-11,
+ &0.6095D-12,0.3031D-12,0.1457D-12,0.6733D-13,0.2986D-13,0.1262D-13,
+ &0.5060D-14,0.1912D-14,0.6734D-15,0.2199D-15,0.6498D-16,0.1729D-16,
+ &0.4059D-17,0.8091D-18,0.1324D-18,0.1691D-19,0.1518D-20,0.8785D-22,
+ &0.2519D-23,0.2197D-25,0.2840D-28,0.1908D-33/
+ DATA (XPV(I,1,1),I=1,100)/
+ &0.5848D-03,0.5838D-03,0.5793D-03,0.5713D-03,0.5597D-03,0.5447D-03,
+ &0.5270D-03,0.5167D-03,0.5143D-03,0.5087D-03,0.4998D-03,0.4879D-03,
+ &0.4731D-03,0.4599D-03,0.4584D-03,0.4538D-03,0.4461D-03,0.4355D-03,
+ &0.4223D-03,0.4133D-03,0.4109D-03,0.4053D-03,0.3970D-03,0.3859D-03,
+ &0.3763D-03,0.3739D-03,0.3686D-03,0.3605D-03,0.3504D-03,0.3473D-03,
+ &0.3426D-03,0.3355D-03,0.3286D-03,0.3253D-03,0.3196D-03,0.3138D-03,
+ &0.3102D-03,0.3047D-03,0.3014D-03,0.2971D-03,0.2939D-03,0.2901D-03,
+ &0.2875D-03,0.2849D-03,0.2824D-03,0.2805D-03,0.2787D-03,0.2780D-03,
+ &0.2772D-03,0.2771D-03,0.2773D-03,0.2784D-03,0.2799D-03,0.2820D-03,
+ &0.2850D-03,0.2886D-03,0.2930D-03,0.2985D-03,0.3050D-03,0.3126D-03,
+ &0.3215D-03,0.3316D-03,0.3432D-03,0.3564D-03,0.3714D-03,0.3883D-03,
+ &0.4073D-03,0.4287D-03,0.4526D-03,0.4794D-03,0.5092D-03,0.5425D-03,
+ &0.5796D-03,0.6207D-03,0.6664D-03,0.7171D-03,0.7733D-03,0.8356D-03,
+ &0.8429D-03,0.8502D-03,0.8574D-03,0.8647D-03,0.8719D-03,0.8791D-03,
+ &0.8863D-03,0.8935D-03,0.9007D-03,0.9079D-03,0.9151D-03,0.9222D-03,
+ &0.9294D-03,0.9365D-03,0.9436D-03,0.9508D-03,0.9579D-03,0.9650D-03,
+ &0.9720D-03,0.9791D-03,0.9862D-03,0.9932D-03/
+ DATA (XPV(I,1,2),I=1,100)/
+ &0.2339D-02,0.2335D-02,0.2317D-02,0.2285D-02,0.2239D-02,0.2179D-02,
+ &0.2108D-02,0.2067D-02,0.2057D-02,0.2035D-02,0.1999D-02,0.1951D-02,
+ &0.1892D-02,0.1840D-02,0.1833D-02,0.1815D-02,0.1784D-02,0.1742D-02,
+ &0.1689D-02,0.1653D-02,0.1643D-02,0.1621D-02,0.1588D-02,0.1544D-02,
+ &0.1505D-02,0.1496D-02,0.1474D-02,0.1442D-02,0.1402D-02,0.1389D-02,
+ &0.1370D-02,0.1342D-02,0.1314D-02,0.1301D-02,0.1278D-02,0.1255D-02,
+ &0.1241D-02,0.1219D-02,0.1205D-02,0.1188D-02,0.1176D-02,0.1160D-02,
+ &0.1150D-02,0.1139D-02,0.1130D-02,0.1122D-02,0.1115D-02,0.1112D-02,
+ &0.1109D-02,0.1108D-02,0.1109D-02,0.1114D-02,0.1120D-02,0.1128D-02,
+ &0.1140D-02,0.1154D-02,0.1172D-02,0.1194D-02,0.1220D-02,0.1251D-02,
+ &0.1286D-02,0.1326D-02,0.1373D-02,0.1426D-02,0.1485D-02,0.1553D-02,
+ &0.1629D-02,0.1715D-02,0.1811D-02,0.1917D-02,0.2037D-02,0.2170D-02,
+ &0.2318D-02,0.2483D-02,0.2666D-02,0.2868D-02,0.3093D-02,0.3342D-02,
+ &0.3372D-02,0.3401D-02,0.3430D-02,0.3459D-02,0.3488D-02,0.3517D-02,
+ &0.3545D-02,0.3574D-02,0.3603D-02,0.3632D-02,0.3660D-02,0.3689D-02,
+ &0.3717D-02,0.3746D-02,0.3775D-02,0.3803D-02,0.3831D-02,0.3860D-02,
+ &0.3888D-02,0.3916D-02,0.3945D-02,0.3973D-02/
+ DATA (XPV(I,1,3),I=1,100)/
+ &0.1755D-03,0.1751D-03,0.1738D-03,0.1714D-03,0.1679D-03,0.1634D-03,
+ &0.1581D-03,0.1550D-03,0.1543D-03,0.1526D-03,0.1499D-03,0.1464D-03,
+ &0.1419D-03,0.1380D-03,0.1375D-03,0.1361D-03,0.1338D-03,0.1306D-03,
+ &0.1267D-03,0.1240D-03,0.1233D-03,0.1216D-03,0.1191D-03,0.1158D-03,
+ &0.1129D-03,0.1122D-03,0.1106D-03,0.1082D-03,0.1051D-03,0.1042D-03,
+ &0.1028D-03,0.1006D-03,0.9857D-04,0.9759D-04,0.9587D-04,0.9414D-04,
+ &0.9305D-04,0.9140D-04,0.9041D-04,0.8912D-04,0.8817D-04,0.8702D-04,
+ &0.8626D-04,0.8546D-04,0.8472D-04,0.8415D-04,0.8362D-04,0.8339D-04,
+ &0.8317D-04,0.8312D-04,0.8318D-04,0.8352D-04,0.8398D-04,0.8459D-04,
+ &0.8550D-04,0.8658D-04,0.8789D-04,0.8956D-04,0.9151D-04,0.9379D-04,
+ &0.9644D-04,0.9948D-04,0.1030D-03,0.1069D-03,0.1114D-03,0.1165D-03,
+ &0.1222D-03,0.1286D-03,0.1358D-03,0.1438D-03,0.1528D-03,0.1628D-03,
+ &0.1739D-03,0.1862D-03,0.1999D-03,0.2151D-03,0.2320D-03,0.2507D-03,
+ &0.2529D-03,0.2551D-03,0.2572D-03,0.2594D-03,0.2616D-03,0.2637D-03,
+ &0.2659D-03,0.2681D-03,0.2702D-03,0.2724D-03,0.2745D-03,0.2767D-03,
+ &0.2788D-03,0.2810D-03,0.2831D-03,0.2852D-03,0.2874D-03,0.2895D-03,
+ &0.2916D-03,0.2937D-03,0.2959D-03,0.2980D-03/
+ DATA (XPV(I,1,4),I=1,100)/
+ &0.7018D-03,0.7006D-03,0.6951D-03,0.6855D-03,0.6716D-03,0.6537D-03,
+ &0.6324D-03,0.6200D-03,0.6172D-03,0.6104D-03,0.5998D-03,0.5854D-03,
+ &0.5677D-03,0.5519D-03,0.5500D-03,0.5445D-03,0.5353D-03,0.5226D-03,
+ &0.5068D-03,0.4960D-03,0.4930D-03,0.4864D-03,0.4764D-03,0.4631D-03,
+ &0.4516D-03,0.4487D-03,0.4423D-03,0.4326D-03,0.4205D-03,0.4167D-03,
+ &0.4111D-03,0.4026D-03,0.3943D-03,0.3903D-03,0.3835D-03,0.3765D-03,
+ &0.3722D-03,0.3656D-03,0.3616D-03,0.3565D-03,0.3527D-03,0.3481D-03,
+ &0.3450D-03,0.3418D-03,0.3389D-03,0.3366D-03,0.3345D-03,0.3336D-03,
+ &0.3327D-03,0.3325D-03,0.3327D-03,0.3341D-03,0.3359D-03,0.3383D-03,
+ &0.3420D-03,0.3463D-03,0.3516D-03,0.3582D-03,0.3660D-03,0.3752D-03,
+ &0.3858D-03,0.3979D-03,0.4118D-03,0.4277D-03,0.4456D-03,0.4660D-03,
+ &0.4887D-03,0.5145D-03,0.5432D-03,0.5752D-03,0.6111D-03,0.6510D-03,
+ &0.6955D-03,0.7448D-03,0.7997D-03,0.8605D-03,0.9280D-03,0.1003D-02,
+ &0.1011D-02,0.1020D-02,0.1029D-02,0.1038D-02,0.1046D-02,0.1055D-02,
+ &0.1064D-02,0.1072D-02,0.1081D-02,0.1089D-02,0.1098D-02,0.1107D-02,
+ &0.1115D-02,0.1124D-02,0.1132D-02,0.1141D-02,0.1149D-02,0.1158D-02,
+ &0.1166D-02,0.1175D-02,0.1183D-02,0.1192D-02/
+ DATA (XPV(I,2,0),I=1,100)/
+ &0.1024D+00,0.1007D+00,0.9821D-01,0.9497D-01,0.9093D-01,0.8617D-01,
+ &0.8086D-01,0.7731D-01,0.7566D-01,0.7338D-01,0.7048D-01,0.6700D-01,
+ &0.6300D-01,0.5939D-01,0.5814D-01,0.5638D-01,0.5410D-01,0.5135D-01,
+ &0.4819D-01,0.4580D-01,0.4460D-01,0.4293D-01,0.4087D-01,0.3843D-01,
+ &0.3624D-01,0.3517D-01,0.3372D-01,0.3192D-01,0.2988D-01,0.2879D-01,
+ &0.2755D-01,0.2602D-01,0.2454D-01,0.2352D-01,0.2224D-01,0.2097D-01,
+ &0.1995D-01,0.1875D-01,0.1779D-01,0.1673D-01,0.1580D-01,0.1480D-01,
+ &0.1393D-01,0.1305D-01,0.1218D-01,0.1136D-01,0.1055D-01,0.9801D-02,
+ &0.9052D-02,0.8337D-02,0.7641D-02,0.6989D-02,0.6357D-02,0.5747D-02,
+ &0.5179D-02,0.4637D-02,0.4127D-02,0.3663D-02,0.3232D-02,0.2840D-02,
+ &0.2487D-02,0.2174D-02,0.1901D-02,0.1662D-02,0.1459D-02,0.1285D-02,
+ &0.1137D-02,0.1010D-02,0.9006D-03,0.8023D-03,0.7126D-03,0.6276D-03,
+ &0.5458D-03,0.4661D-03,0.3876D-03,0.3101D-03,0.2334D-03,0.1570D-03,
+ &0.1486D-03,0.1404D-03,0.1322D-03,0.1242D-03,0.1162D-03,0.1084D-03,
+ &0.1007D-03,0.9304D-04,0.8554D-04,0.7817D-04,0.7086D-04,0.6372D-04,
+ &0.5670D-04,0.4982D-04,0.4307D-04,0.3647D-04,0.3005D-04,0.2382D-04,
+ &0.1781D-04,0.1208D-04,0.6720D-05,0.1928D-05/
+ DATA (XPV(I,2,1),I=1,100)/
+ &0.1449D-02,0.1433D-02,0.1407D-02,0.1370D-02,0.1324D-02,0.1268D-02,
+ &0.1204D-02,0.1163D-02,0.1147D-02,0.1123D-02,0.1089D-02,0.1048D-02,
+ &0.1000D-02,0.9567D-03,0.9446D-03,0.9250D-03,0.8981D-03,0.8642D-03,
+ &0.8244D-03,0.7951D-03,0.7821D-03,0.7623D-03,0.7362D-03,0.7043D-03,
+ &0.6759D-03,0.6640D-03,0.6459D-03,0.6223D-03,0.5945D-03,0.5817D-03,
+ &0.5660D-03,0.5455D-03,0.5256D-03,0.5132D-03,0.4963D-03,0.4794D-03,
+ &0.4669D-03,0.4510D-03,0.4394D-03,0.4261D-03,0.4151D-03,0.4031D-03,
+ &0.3934D-03,0.3838D-03,0.3747D-03,0.3666D-03,0.3591D-03,0.3533D-03,
+ &0.3477D-03,0.3433D-03,0.3397D-03,0.3376D-03,0.3364D-03,0.3361D-03,
+ &0.3375D-03,0.3399D-03,0.3437D-03,0.3492D-03,0.3562D-03,0.3648D-03,
+ &0.3751D-03,0.3871D-03,0.4009D-03,0.4167D-03,0.4344D-03,0.4543D-03,
+ &0.4760D-03,0.5003D-03,0.5268D-03,0.5558D-03,0.5876D-03,0.6226D-03,
+ &0.6610D-03,0.7035D-03,0.7509D-03,0.8041D-03,0.8638D-03,0.9294D-03,
+ &0.9367D-03,0.9440D-03,0.9511D-03,0.9581D-03,0.9648D-03,0.9714D-03,
+ &0.9776D-03,0.9836D-03,0.9891D-03,0.9942D-03,0.9987D-03,0.1003D-02,
+ &0.1006D-02,0.1008D-02,0.1008D-02,0.1007D-02,0.1004D-02,0.9977D-03,
+ &0.9868D-03,0.9681D-03,0.9347D-03,0.8678D-03/
+ DATA (XPV(I,2,2),I=1,100)/
+ &0.3175D-02,0.3156D-02,0.3117D-02,0.3057D-02,0.2976D-02,0.2876D-02,
+ &0.2760D-02,0.2689D-02,0.2666D-02,0.2625D-02,0.2566D-02,0.2489D-02,
+ &0.2398D-02,0.2316D-02,0.2299D-02,0.2266D-02,0.2217D-02,0.2152D-02,
+ &0.2073D-02,0.2018D-02,0.1998D-02,0.1962D-02,0.1911D-02,0.1847D-02,
+ &0.1791D-02,0.1773D-02,0.1739D-02,0.1692D-02,0.1636D-02,0.1614D-02,
+ &0.1586D-02,0.1545D-02,0.1506D-02,0.1485D-02,0.1452D-02,0.1420D-02,
+ &0.1398D-02,0.1368D-02,0.1348D-02,0.1324D-02,0.1306D-02,0.1285D-02,
+ &0.1271D-02,0.1256D-02,0.1243D-02,0.1233D-02,0.1224D-02,0.1220D-02,
+ &0.1217D-02,0.1217D-02,0.1220D-02,0.1227D-02,0.1237D-02,0.1249D-02,
+ &0.1267D-02,0.1288D-02,0.1313D-02,0.1345D-02,0.1381D-02,0.1422D-02,
+ &0.1469D-02,0.1522D-02,0.1582D-02,0.1648D-02,0.1722D-02,0.1804D-02,
+ &0.1893D-02,0.1992D-02,0.2099D-02,0.2216D-02,0.2345D-02,0.2486D-02,
+ &0.2641D-02,0.2812D-02,0.3002D-02,0.3216D-02,0.3455D-02,0.3718D-02,
+ &0.3748D-02,0.3777D-02,0.3806D-02,0.3833D-02,0.3861D-02,0.3887D-02,
+ &0.3912D-02,0.3936D-02,0.3958D-02,0.3978D-02,0.3996D-02,0.4012D-02,
+ &0.4024D-02,0.4032D-02,0.4035D-02,0.4031D-02,0.4018D-02,0.3993D-02,
+ &0.3949D-02,0.3875D-02,0.3741D-02,0.3474D-02/
+ DATA (XPV(I,2,3),I=1,100)/
+ &0.1046D-02,0.1031D-02,0.1008D-02,0.9768D-03,0.9381D-03,0.8923D-03,
+ &0.8410D-03,0.8074D-03,0.7928D-03,0.7720D-03,0.7450D-03,0.7121D-03,
+ &0.6741D-03,0.6398D-03,0.6287D-03,0.6123D-03,0.5906D-03,0.5640D-03,
+ &0.5332D-03,0.5101D-03,0.4988D-03,0.4827D-03,0.4624D-03,0.4380D-03,
+ &0.4161D-03,0.4059D-03,0.3914D-03,0.3732D-03,0.3524D-03,0.3416D-03,
+ &0.3290D-03,0.3133D-03,0.2981D-03,0.2878D-03,0.2747D-03,0.2616D-03,
+ &0.2515D-03,0.2392D-03,0.2296D-03,0.2191D-03,0.2100D-03,0.2004D-03,
+ &0.1923D-03,0.1842D-03,0.1764D-03,0.1694D-03,0.1627D-03,0.1571D-03,
+ &0.1517D-03,0.1469D-03,0.1427D-03,0.1394D-03,0.1367D-03,0.1345D-03,
+ &0.1333D-03,0.1327D-03,0.1329D-03,0.1340D-03,0.1360D-03,0.1387D-03,
+ &0.1424D-03,0.1469D-03,0.1522D-03,0.1584D-03,0.1654D-03,0.1733D-03,
+ &0.1819D-03,0.1915D-03,0.2019D-03,0.2132D-03,0.2257D-03,0.2396D-03,
+ &0.2553D-03,0.2737D-03,0.2956D-03,0.3227D-03,0.3570D-03,0.4009D-03,
+ &0.4064D-03,0.4119D-03,0.4175D-03,0.4231D-03,0.4287D-03,0.4344D-03,
+ &0.4400D-03,0.4457D-03,0.4512D-03,0.4567D-03,0.4621D-03,0.4673D-03,
+ &0.4723D-03,0.4769D-03,0.4811D-03,0.4848D-03,0.4875D-03,0.4891D-03,
+ &0.4888D-03,0.4853D-03,0.4756D-03,0.4518D-03/
+ DATA (XPV(I,2,4),I=1,100)/
+ &0.1564D-02,0.1548D-02,0.1521D-02,0.1483D-02,0.1434D-02,0.1375D-02,
+ &0.1308D-02,0.1265D-02,0.1249D-02,0.1223D-02,0.1188D-02,0.1145D-02,
+ &0.1094D-02,0.1048D-02,0.1035D-02,0.1015D-02,0.9868D-03,0.9509D-03,
+ &0.9086D-03,0.8776D-03,0.8644D-03,0.8436D-03,0.8161D-03,0.7822D-03,
+ &0.7521D-03,0.7400D-03,0.7212D-03,0.6963D-03,0.6669D-03,0.6538D-03,
+ &0.6377D-03,0.6163D-03,0.5956D-03,0.5832D-03,0.5658D-03,0.5486D-03,
+ &0.5363D-03,0.5203D-03,0.5091D-03,0.4962D-03,0.4859D-03,0.4746D-03,
+ &0.4661D-03,0.4578D-03,0.4502D-03,0.4441D-03,0.4387D-03,0.4355D-03,
+ &0.4329D-03,0.4318D-03,0.4320D-03,0.4342D-03,0.4379D-03,0.4429D-03,
+ &0.4503D-03,0.4594D-03,0.4704D-03,0.4839D-03,0.4996D-03,0.5177D-03,
+ &0.5383D-03,0.5613D-03,0.5869D-03,0.6152D-03,0.6462D-03,0.6802D-03,
+ &0.7167D-03,0.7565D-03,0.7995D-03,0.8461D-03,0.8972D-03,0.9538D-03,
+ &0.1018D-02,0.1092D-02,0.1181D-02,0.1290D-02,0.1428D-02,0.1604D-02,
+ &0.1626D-02,0.1649D-02,0.1671D-02,0.1694D-02,0.1716D-02,0.1739D-02,
+ &0.1762D-02,0.1784D-02,0.1806D-02,0.1828D-02,0.1850D-02,0.1871D-02,
+ &0.1891D-02,0.1909D-02,0.1926D-02,0.1941D-02,0.1952D-02,0.1958D-02,
+ &0.1957D-02,0.1943D-02,0.1905D-02,0.1811D-02/
+ DATA (XPV(I,3,0),I=1,100)/
+ &0.1761D+00,0.1728D+00,0.1680D+00,0.1619D+00,0.1544D+00,0.1456D+00,
+ &0.1358D+00,0.1292D+00,0.1260D+00,0.1218D+00,0.1165D+00,0.1101D+00,
+ &0.1029D+00,0.9643D-01,0.9409D-01,0.9087D-01,0.8680D-01,0.8192D-01,
+ &0.7638D-01,0.7217D-01,0.7000D-01,0.6708D-01,0.6352D-01,0.5934D-01,
+ &0.5561D-01,0.5375D-01,0.5129D-01,0.4829D-01,0.4491D-01,0.4309D-01,
+ &0.4104D-01,0.3857D-01,0.3618D-01,0.3454D-01,0.3252D-01,0.3053D-01,
+ &0.2896D-01,0.2712D-01,0.2565D-01,0.2407D-01,0.2268D-01,0.2123D-01,
+ &0.1997D-01,0.1870D-01,0.1748D-01,0.1634D-01,0.1523D-01,0.1422D-01,
+ &0.1321D-01,0.1227D-01,0.1137D-01,0.1053D-01,0.9723D-02,0.8952D-02,
+ &0.8241D-02,0.7563D-02,0.6926D-02,0.6345D-02,0.5801D-02,0.5298D-02,
+ &0.4833D-02,0.4407D-02,0.4017D-02,0.3657D-02,0.3327D-02,0.3021D-02,
+ &0.2735D-02,0.2469D-02,0.2217D-02,0.1976D-02,0.1746D-02,0.1522D-02,
+ &0.1307D-02,0.1098D-02,0.8959D-03,0.7002D-03,0.5112D-03,0.3292D-03,
+ &0.3097D-03,0.2906D-03,0.2718D-03,0.2534D-03,0.2354D-03,0.2178D-03,
+ &0.2005D-03,0.1836D-03,0.1672D-03,0.1511D-03,0.1354D-03,0.1203D-03,
+ &0.1055D-03,0.9128D-04,0.7756D-04,0.6440D-04,0.5185D-04,0.3998D-04,
+ &0.2891D-04,0.1876D-04,0.9776D-05,0.2464D-05/
+ DATA (XPV(I,3,1),I=1,100)/
+ &0.3351D-02,0.3297D-02,0.3217D-02,0.3112D-02,0.2981D-02,0.2828D-02,
+ &0.2656D-02,0.2543D-02,0.2493D-02,0.2422D-02,0.2332D-02,0.2223D-02,
+ &0.2097D-02,0.1984D-02,0.1946D-02,0.1892D-02,0.1821D-02,0.1734D-02,
+ &0.1635D-02,0.1560D-02,0.1523D-02,0.1471D-02,0.1406D-02,0.1329D-02,
+ &0.1260D-02,0.1228D-02,0.1182D-02,0.1126D-02,0.1061D-02,0.1028D-02,
+ &0.9902D-03,0.9426D-03,0.8967D-03,0.8664D-03,0.8274D-03,0.7890D-03,
+ &0.7596D-03,0.7240D-03,0.6969D-03,0.6671D-03,0.6417D-03,0.6149D-03,
+ &0.5928D-03,0.5708D-03,0.5502D-03,0.5317D-03,0.5144D-03,0.5002D-03,
+ &0.4867D-03,0.4753D-03,0.4655D-03,0.4582D-03,0.4526D-03,0.4487D-03,
+ &0.4475D-03,0.4480D-03,0.4506D-03,0.4559D-03,0.4632D-03,0.4729D-03,
+ &0.4849D-03,0.4991D-03,0.5155D-03,0.5343D-03,0.5552D-03,0.5783D-03,
+ &0.6033D-03,0.6307D-03,0.6600D-03,0.6915D-03,0.7256D-03,0.7626D-03,
+ &0.8031D-03,0.8482D-03,0.8993D-03,0.9582D-03,0.1026D-02,0.1099D-02,
+ &0.1107D-02,0.1115D-02,0.1122D-02,0.1129D-02,0.1136D-02,0.1142D-02,
+ &0.1148D-02,0.1152D-02,0.1156D-02,0.1159D-02,0.1161D-02,0.1161D-02,
+ &0.1160D-02,0.1156D-02,0.1150D-02,0.1141D-02,0.1127D-02,0.1107D-02,
+ &0.1078D-02,0.1036D-02,0.9685D-03,0.8413D-03/
+ DATA (XPV(I,3,2),I=1,100)/
+ &0.5039D-02,0.4982D-02,0.4889D-02,0.4761D-02,0.4597D-02,0.4401D-02,
+ &0.4179D-02,0.4036D-02,0.3979D-02,0.3893D-02,0.3777D-02,0.3634D-02,
+ &0.3466D-02,0.3315D-02,0.3273D-02,0.3206D-02,0.3114D-02,0.2997D-02,
+ &0.2860D-02,0.2760D-02,0.2717D-02,0.2650D-02,0.2562D-02,0.2454D-02,
+ &0.2359D-02,0.2321D-02,0.2262D-02,0.2184D-02,0.2092D-02,0.2052D-02,
+ &0.2003D-02,0.1938D-02,0.1875D-02,0.1839D-02,0.1787D-02,0.1736D-02,
+ &0.1700D-02,0.1653D-02,0.1622D-02,0.1585D-02,0.1557D-02,0.1526D-02,
+ &0.1504D-02,0.1483D-02,0.1464D-02,0.1450D-02,0.1438D-02,0.1433D-02,
+ &0.1430D-02,0.1432D-02,0.1438D-02,0.1450D-02,0.1466D-02,0.1487D-02,
+ &0.1515D-02,0.1547D-02,0.1585D-02,0.1631D-02,0.1683D-02,0.1742D-02,
+ &0.1808D-02,0.1880D-02,0.1960D-02,0.2048D-02,0.2142D-02,0.2245D-02,
+ &0.2354D-02,0.2471D-02,0.2596D-02,0.2729D-02,0.2872D-02,0.3025D-02,
+ &0.3193D-02,0.3378D-02,0.3587D-02,0.3827D-02,0.4100D-02,0.4397D-02,
+ &0.4429D-02,0.4461D-02,0.4490D-02,0.4519D-02,0.4545D-02,0.4570D-02,
+ &0.4592D-02,0.4611D-02,0.4627D-02,0.4639D-02,0.4646D-02,0.4647D-02,
+ &0.4642D-02,0.4628D-02,0.4604D-02,0.4566D-02,0.4510D-02,0.4431D-02,
+ &0.4317D-02,0.4147D-02,0.3877D-02,0.3370D-02/
+ DATA (XPV(I,3,3),I=1,100)/
+ &0.2958D-02,0.2904D-02,0.2827D-02,0.2727D-02,0.2604D-02,0.2461D-02,
+ &0.2301D-02,0.2195D-02,0.2146D-02,0.2079D-02,0.1995D-02,0.1894D-02,
+ &0.1778D-02,0.1674D-02,0.1637D-02,0.1586D-02,0.1520D-02,0.1440D-02,
+ &0.1349D-02,0.1280D-02,0.1245D-02,0.1197D-02,0.1138D-02,0.1068D-02,
+ &0.1005D-02,0.9742D-03,0.9325D-03,0.8812D-03,0.8233D-03,0.7922D-03,
+ &0.7568D-03,0.7138D-03,0.6722D-03,0.6438D-03,0.6084D-03,0.5735D-03,
+ &0.5460D-03,0.5138D-03,0.4883D-03,0.4609D-03,0.4371D-03,0.4123D-03,
+ &0.3912D-03,0.3704D-03,0.3507D-03,0.3327D-03,0.3158D-03,0.3012D-03,
+ &0.2873D-03,0.2751D-03,0.2641D-03,0.2551D-03,0.2474D-03,0.2410D-03,
+ &0.2365D-03,0.2334D-03,0.2318D-03,0.2321D-03,0.2339D-03,0.2372D-03,
+ &0.2421D-03,0.2485D-03,0.2562D-03,0.2652D-03,0.2755D-03,0.2870D-03,
+ &0.2995D-03,0.3131D-03,0.3278D-03,0.3438D-03,0.3615D-03,0.3814D-03,
+ &0.4046D-03,0.4328D-03,0.4682D-03,0.5142D-03,0.5747D-03,0.6529D-03,
+ &0.6625D-03,0.6722D-03,0.6819D-03,0.6916D-03,0.7012D-03,0.7107D-03,
+ &0.7200D-03,0.7292D-03,0.7380D-03,0.7464D-03,0.7544D-03,0.7617D-03,
+ &0.7681D-03,0.7735D-03,0.7776D-03,0.7798D-03,0.7796D-03,0.7761D-03,
+ &0.7676D-03,0.7510D-03,0.7195D-03,0.6522D-03/
+ DATA (XPV(I,3,4),I=1,100)/
+ &0.3464D-02,0.3410D-02,0.3329D-02,0.3222D-02,0.3090D-02,0.2933D-02,
+ &0.2758D-02,0.2643D-02,0.2593D-02,0.2521D-02,0.2430D-02,0.2318D-02,
+ &0.2190D-02,0.2075D-02,0.2037D-02,0.1982D-02,0.1910D-02,0.1821D-02,
+ &0.1720D-02,0.1643D-02,0.1607D-02,0.1554D-02,0.1489D-02,0.1410D-02,
+ &0.1340D-02,0.1308D-02,0.1262D-02,0.1205D-02,0.1140D-02,0.1108D-02,
+ &0.1070D-02,0.1023D-02,0.9772D-03,0.9482D-03,0.9103D-03,0.8732D-03,
+ &0.8458D-03,0.8121D-03,0.7877D-03,0.7607D-03,0.7388D-03,0.7157D-03,
+ &0.6981D-03,0.6812D-03,0.6662D-03,0.6540D-03,0.6438D-03,0.6377D-03,
+ &0.6331D-03,0.6316D-03,0.6326D-03,0.6376D-03,0.6453D-03,0.6560D-03,
+ &0.6708D-03,0.6887D-03,0.7102D-03,0.7361D-03,0.7656D-03,0.7991D-03,
+ &0.8365D-03,0.8777D-03,0.9226D-03,0.9714D-03,0.1024D-02,0.1080D-02,
+ &0.1138D-02,0.1201D-02,0.1267D-02,0.1338D-02,0.1415D-02,0.1501D-02,
+ &0.1599D-02,0.1717D-02,0.1863D-02,0.2051D-02,0.2296D-02,0.2612D-02,
+ &0.2650D-02,0.2689D-02,0.2729D-02,0.2767D-02,0.2806D-02,0.2844D-02,
+ &0.2882D-02,0.2919D-02,0.2954D-02,0.2988D-02,0.3020D-02,0.3049D-02,
+ &0.3075D-02,0.3097D-02,0.3114D-02,0.3123D-02,0.3122D-02,0.3108D-02,
+ &0.3074D-02,0.3008D-02,0.2881D-02,0.2614D-02/
+ DATA (XPV(I,4,0),I=1,100)/
+ &0.2113D+00,0.2071D+00,0.2012D+00,0.1936D+00,0.1844D+00,0.1736D+00,
+ &0.1616D+00,0.1536D+00,0.1497D+00,0.1445D+00,0.1380D+00,0.1303D+00,
+ &0.1215D+00,0.1136D+00,0.1108D+00,0.1069D+00,0.1019D+00,0.9605D-01,
+ &0.8939D-01,0.8432D-01,0.8171D-01,0.7821D-01,0.7395D-01,0.6897D-01,
+ &0.6452D-01,0.6231D-01,0.5938D-01,0.5583D-01,0.5185D-01,0.4969D-01,
+ &0.4728D-01,0.4438D-01,0.4158D-01,0.3967D-01,0.3731D-01,0.3500D-01,
+ &0.3318D-01,0.3105D-01,0.2936D-01,0.2754D-01,0.2595D-01,0.2429D-01,
+ &0.2285D-01,0.2141D-01,0.2003D-01,0.1874D-01,0.1749D-01,0.1635D-01,
+ &0.1523D-01,0.1418D-01,0.1317D-01,0.1223D-01,0.1134D-01,0.1048D-01,
+ &0.9692D-02,0.8938D-02,0.8227D-02,0.7578D-02,0.6967D-02,0.6398D-02,
+ &0.5867D-02,0.5377D-02,0.4922D-02,0.4497D-02,0.4101D-02,0.3730D-02,
+ &0.3379D-02,0.3048D-02,0.2732D-02,0.2429D-02,0.2139D-02,0.1858D-02,
+ &0.1588D-02,0.1328D-02,0.1077D-02,0.8361D-03,0.6052D-03,0.3850D-03,
+ &0.3616D-03,0.3387D-03,0.3162D-03,0.2943D-03,0.2728D-03,0.2518D-03,
+ &0.2314D-03,0.2114D-03,0.1919D-03,0.1731D-03,0.1546D-03,0.1369D-03,
+ &0.1197D-03,0.1032D-03,0.8729D-04,0.7214D-04,0.5778D-04,0.4429D-04,
+ &0.3179D-04,0.2044D-04,0.1053D-04,0.2601D-05/
+ DATA (XPV(I,4,1),I=1,100)/
+ &0.4299D-02,0.4223D-02,0.4115D-02,0.3974D-02,0.3799D-02,0.3595D-02,
+ &0.3367D-02,0.3216D-02,0.3148D-02,0.3054D-02,0.2934D-02,0.2790D-02,
+ &0.2625D-02,0.2476D-02,0.2426D-02,0.2353D-02,0.2260D-02,0.2147D-02,
+ &0.2018D-02,0.1920D-02,0.1871D-02,0.1804D-02,0.1720D-02,0.1620D-02,
+ &0.1532D-02,0.1489D-02,0.1431D-02,0.1359D-02,0.1277D-02,0.1234D-02,
+ &0.1185D-02,0.1125D-02,0.1067D-02,0.1028D-02,0.9791D-03,0.9308D-03,
+ &0.8936D-03,0.8491D-03,0.8150D-03,0.7777D-03,0.7459D-03,0.7125D-03,
+ &0.6849D-03,0.6575D-03,0.6318D-03,0.6088D-03,0.5872D-03,0.5693D-03,
+ &0.5524D-03,0.5380D-03,0.5254D-03,0.5159D-03,0.5084D-03,0.5028D-03,
+ &0.5003D-03,0.4998D-03,0.5017D-03,0.5066D-03,0.5139D-03,0.5237D-03,
+ &0.5360D-03,0.5508D-03,0.5679D-03,0.5875D-03,0.6093D-03,0.6334D-03,
+ &0.6593D-03,0.6876D-03,0.7177D-03,0.7500D-03,0.7848D-03,0.8225D-03,
+ &0.8639D-03,0.9103D-03,0.9634D-03,0.1025D-02,0.1097D-02,0.1174D-02,
+ &0.1183D-02,0.1191D-02,0.1199D-02,0.1206D-02,0.1212D-02,0.1219D-02,
+ &0.1224D-02,0.1229D-02,0.1232D-02,0.1235D-02,0.1236D-02,0.1235D-02,
+ &0.1232D-02,0.1227D-02,0.1219D-02,0.1207D-02,0.1190D-02,0.1167D-02,
+ &0.1133D-02,0.1085D-02,0.1009D-02,0.8680D-03/
+ DATA (XPV(I,4,2),I=1,100)/
+ &0.5972D-02,0.5895D-02,0.5773D-02,0.5610D-02,0.5402D-02,0.5156D-02,
+ &0.4878D-02,0.4698D-02,0.4623D-02,0.4513D-02,0.4369D-02,0.4191D-02,
+ &0.3984D-02,0.3798D-02,0.3743D-02,0.3659D-02,0.3544D-02,0.3402D-02,
+ &0.3235D-02,0.3113D-02,0.3058D-02,0.2976D-02,0.2870D-02,0.2740D-02,
+ &0.2626D-02,0.2578D-02,0.2507D-02,0.2414D-02,0.2305D-02,0.2257D-02,
+ &0.2198D-02,0.2121D-02,0.2046D-02,0.2003D-02,0.1942D-02,0.1882D-02,
+ &0.1840D-02,0.1786D-02,0.1749D-02,0.1707D-02,0.1674D-02,0.1639D-02,
+ &0.1613D-02,0.1589D-02,0.1567D-02,0.1551D-02,0.1538D-02,0.1533D-02,
+ &0.1530D-02,0.1533D-02,0.1540D-02,0.1554D-02,0.1573D-02,0.1597D-02,
+ &0.1628D-02,0.1665D-02,0.1709D-02,0.1760D-02,0.1818D-02,0.1884D-02,
+ &0.1957D-02,0.2038D-02,0.2125D-02,0.2221D-02,0.2324D-02,0.2434D-02,
+ &0.2551D-02,0.2676D-02,0.2807D-02,0.2946D-02,0.3095D-02,0.3254D-02,
+ &0.3428D-02,0.3621D-02,0.3839D-02,0.4092D-02,0.4382D-02,0.4698D-02,
+ &0.4731D-02,0.4764D-02,0.4795D-02,0.4824D-02,0.4851D-02,0.4876D-02,
+ &0.4898D-02,0.4917D-02,0.4931D-02,0.4941D-02,0.4945D-02,0.4943D-02,
+ &0.4933D-02,0.4913D-02,0.4881D-02,0.4833D-02,0.4766D-02,0.4671D-02,
+ &0.4538D-02,0.4344D-02,0.4039D-02,0.3475D-02/
+ DATA (XPV(I,4,3),I=1,100)/
+ &0.3908D-02,0.3834D-02,0.3728D-02,0.3592D-02,0.3425D-02,0.3231D-02,
+ &0.3015D-02,0.2871D-02,0.2804D-02,0.2714D-02,0.2600D-02,0.2464D-02,
+ &0.2309D-02,0.2169D-02,0.2119D-02,0.2050D-02,0.1962D-02,0.1855D-02,
+ &0.1735D-02,0.1643D-02,0.1596D-02,0.1532D-02,0.1453D-02,0.1361D-02,
+ &0.1278D-02,0.1237D-02,0.1183D-02,0.1116D-02,0.1040D-02,0.9992D-03,
+ &0.9531D-03,0.8972D-03,0.8434D-03,0.8065D-03,0.7608D-03,0.7159D-03,
+ &0.6806D-03,0.6392D-03,0.6067D-03,0.5717D-03,0.5414D-03,0.5098D-03,
+ &0.4831D-03,0.4567D-03,0.4317D-03,0.4090D-03,0.3877D-03,0.3693D-03,
+ &0.3517D-03,0.3363D-03,0.3224D-03,0.3109D-03,0.3010D-03,0.2928D-03,
+ &0.2869D-03,0.2826D-03,0.2801D-03,0.2799D-03,0.2814D-03,0.2848D-03,
+ &0.2899D-03,0.2967D-03,0.3051D-03,0.3151D-03,0.3263D-03,0.3390D-03,
+ &0.3528D-03,0.3678D-03,0.3841D-03,0.4018D-03,0.4214D-03,0.4437D-03,
+ &0.4700D-03,0.5022D-03,0.5431D-03,0.5965D-03,0.6670D-03,0.7574D-03,
+ &0.7684D-03,0.7795D-03,0.7905D-03,0.8015D-03,0.8124D-03,0.8230D-03,
+ &0.8335D-03,0.8436D-03,0.8533D-03,0.8624D-03,0.8708D-03,0.8784D-03,
+ &0.8849D-03,0.8901D-03,0.8934D-03,0.8945D-03,0.8925D-03,0.8863D-03,
+ &0.8739D-03,0.8517D-03,0.8113D-03,0.7282D-03/
+ DATA (XPV(I,4,4),I=1,100)/
+ &0.4411D-02,0.4336D-02,0.4226D-02,0.4084D-02,0.3907D-02,0.3700D-02,
+ &0.3469D-02,0.3316D-02,0.3248D-02,0.3153D-02,0.3032D-02,0.2886D-02,
+ &0.2718D-02,0.2567D-02,0.2516D-02,0.2444D-02,0.2349D-02,0.2235D-02,
+ &0.2103D-02,0.2004D-02,0.1956D-02,0.1888D-02,0.1804D-02,0.1703D-02,
+ &0.1613D-02,0.1571D-02,0.1514D-02,0.1441D-02,0.1359D-02,0.1317D-02,
+ &0.1269D-02,0.1210D-02,0.1153D-02,0.1116D-02,0.1069D-02,0.1022D-02,
+ &0.9882D-03,0.9465D-03,0.9161D-03,0.8828D-03,0.8558D-03,0.8276D-03,
+ &0.8060D-03,0.7854D-03,0.7672D-03,0.7526D-03,0.7404D-03,0.7330D-03,
+ &0.7277D-03,0.7261D-03,0.7277D-03,0.7338D-03,0.7434D-03,0.7565D-03,
+ &0.7745D-03,0.7963D-03,0.8222D-03,0.8532D-03,0.8886D-03,0.9283D-03,
+ &0.9728D-03,0.1021D-02,0.1074D-02,0.1131D-02,0.1192D-02,0.1257D-02,
+ &0.1325D-02,0.1397D-02,0.1473D-02,0.1554D-02,0.1642D-02,0.1739D-02,
+ &0.1852D-02,0.1988D-02,0.2158D-02,0.2377D-02,0.2664D-02,0.3029D-02,
+ &0.3074D-02,0.3119D-02,0.3163D-02,0.3207D-02,0.3251D-02,0.3294D-02,
+ &0.3336D-02,0.3377D-02,0.3416D-02,0.3452D-02,0.3486D-02,0.3517D-02,
+ &0.3543D-02,0.3564D-02,0.3578D-02,0.3582D-02,0.3574D-02,0.3549D-02,
+ &0.3500D-02,0.3411D-02,0.3249D-02,0.2916D-02/
+ DATA (XPV(I,5,0),I=1,100)/
+ &0.3395D+00,0.3321D+00,0.3219D+00,0.3090D+00,0.2933D+00,0.2751D+00,
+ &0.2550D+00,0.2414D+00,0.2348D+00,0.2261D+00,0.2153D+00,0.2025D+00,
+ &0.1881D+00,0.1751D+00,0.1704D+00,0.1640D+00,0.1559D+00,0.1464D+00,
+ &0.1357D+00,0.1276D+00,0.1233D+00,0.1178D+00,0.1110D+00,0.1032D+00,
+ &0.9616D-01,0.9268D-01,0.8813D-01,0.8262D-01,0.7648D-01,0.7317D-01,
+ &0.6948D-01,0.6506D-01,0.6083D-01,0.5795D-01,0.5442D-01,0.5097D-01,
+ &0.4827D-01,0.4513D-01,0.4265D-01,0.4000D-01,0.3769D-01,0.3529D-01,
+ &0.3322D-01,0.3117D-01,0.2920D-01,0.2737D-01,0.2561D-01,0.2402D-01,
+ &0.2245D-01,0.2098D-01,0.1958D-01,0.1829D-01,0.1704D-01,0.1585D-01,
+ &0.1476D-01,0.1370D-01,0.1270D-01,0.1178D-01,0.1090D-01,0.1007D-01,
+ &0.9286D-02,0.8547D-02,0.7848D-02,0.7182D-02,0.6551D-02,0.5949D-02,
+ &0.5372D-02,0.4823D-02,0.4298D-02,0.3794D-02,0.3314D-02,0.2852D-02,
+ &0.2413D-02,0.1995D-02,0.1599D-02,0.1223D-02,0.8693D-03,0.5397D-03,
+ &0.5052D-03,0.4716D-03,0.4388D-03,0.4068D-03,0.3757D-03,0.3454D-03,
+ &0.3160D-03,0.2875D-03,0.2599D-03,0.2332D-03,0.2073D-03,0.1825D-03,
+ &0.1587D-03,0.1359D-03,0.1142D-03,0.9370D-04,0.7445D-04,0.5655D-04,
+ &0.4018D-04,0.2553D-04,0.1296D-04,0.3149D-05/
+ DATA (XPV(I,5,1),I=1,100)/
+ &0.7886D-02,0.7728D-02,0.7505D-02,0.7221D-02,0.6873D-02,0.6469D-02,
+ &0.6022D-02,0.5723D-02,0.5585D-02,0.5398D-02,0.5164D-02,0.4885D-02,
+ &0.4568D-02,0.4283D-02,0.4181D-02,0.4041D-02,0.3864D-02,0.3650D-02,
+ &0.3408D-02,0.3225D-02,0.3131D-02,0.3005D-02,0.2850D-02,0.2668D-02,
+ &0.2506D-02,0.2427D-02,0.2321D-02,0.2191D-02,0.2045D-02,0.1968D-02,
+ &0.1880D-02,0.1774D-02,0.1672D-02,0.1604D-02,0.1519D-02,0.1435D-02,
+ &0.1371D-02,0.1295D-02,0.1236D-02,0.1172D-02,0.1118D-02,0.1062D-02,
+ &0.1015D-02,0.9690D-03,0.9257D-03,0.8867D-03,0.8503D-03,0.8197D-03,
+ &0.7906D-03,0.7655D-03,0.7432D-03,0.7255D-03,0.7107D-03,0.6987D-03,
+ &0.6911D-03,0.6864D-03,0.6850D-03,0.6876D-03,0.6934D-03,0.7025D-03,
+ &0.7147D-03,0.7300D-03,0.7482D-03,0.7692D-03,0.7926D-03,0.8187D-03,
+ &0.8465D-03,0.8768D-03,0.9089D-03,0.9431D-03,0.9801D-03,0.1020D-02,
+ &0.1065D-02,0.1116D-02,0.1177D-02,0.1250D-02,0.1336D-02,0.1431D-02,
+ &0.1441D-02,0.1451D-02,0.1460D-02,0.1468D-02,0.1476D-02,0.1483D-02,
+ &0.1489D-02,0.1494D-02,0.1497D-02,0.1499D-02,0.1499D-02,0.1497D-02,
+ &0.1492D-02,0.1483D-02,0.1471D-02,0.1454D-02,0.1430D-02,0.1398D-02,
+ &0.1354D-02,0.1291D-02,0.1195D-02,0.1022D-02/
+ DATA (XPV(I,5,2),I=1,100)/
+ &0.9523D-02,0.9362D-02,0.9127D-02,0.8821D-02,0.8442D-02,0.7997D-02,
+ &0.7501D-02,0.7174D-02,0.7029D-02,0.6828D-02,0.6569D-02,0.6258D-02,
+ &0.5901D-02,0.5579D-02,0.5475D-02,0.5323D-02,0.5125D-02,0.4884D-02,
+ &0.4606D-02,0.4399D-02,0.4301D-02,0.4162D-02,0.3986D-02,0.3776D-02,
+ &0.3590D-02,0.3508D-02,0.3391D-02,0.3242D-02,0.3073D-02,0.2992D-02,
+ &0.2897D-02,0.2777D-02,0.2663D-02,0.2592D-02,0.2499D-02,0.2408D-02,
+ &0.2344D-02,0.2263D-02,0.2207D-02,0.2144D-02,0.2095D-02,0.2043D-02,
+ &0.2005D-02,0.1970D-02,0.1939D-02,0.1917D-02,0.1898D-02,0.1891D-02,
+ &0.1887D-02,0.1891D-02,0.1901D-02,0.1921D-02,0.1948D-02,0.1981D-02,
+ &0.2025D-02,0.2076D-02,0.2134D-02,0.2204D-02,0.2281D-02,0.2367D-02,
+ &0.2463D-02,0.2566D-02,0.2678D-02,0.2798D-02,0.2925D-02,0.3060D-02,
+ &0.3199D-02,0.3347D-02,0.3500D-02,0.3659D-02,0.3827D-02,0.4007D-02,
+ &0.4203D-02,0.4424D-02,0.4679D-02,0.4981D-02,0.5336D-02,0.5723D-02,
+ &0.5764D-02,0.5803D-02,0.5840D-02,0.5875D-02,0.5906D-02,0.5934D-02,
+ &0.5959D-02,0.5978D-02,0.5992D-02,0.6000D-02,0.6000D-02,0.5991D-02,
+ &0.5971D-02,0.5938D-02,0.5890D-02,0.5821D-02,0.5726D-02,0.5597D-02,
+ &0.5419D-02,0.5166D-02,0.4781D-02,0.4089D-02/
+ DATA (XPV(I,5,3),I=1,100)/
+ &0.7505D-02,0.7347D-02,0.7127D-02,0.6848D-02,0.6508D-02,0.6113D-02,
+ &0.5677D-02,0.5385D-02,0.5248D-02,0.5065D-02,0.4837D-02,0.4566D-02,
+ &0.4259D-02,0.3982D-02,0.3881D-02,0.3744D-02,0.3571D-02,0.3365D-02,
+ &0.3131D-02,0.2953D-02,0.2861D-02,0.2738D-02,0.2589D-02,0.2414D-02,
+ &0.2257D-02,0.2179D-02,0.2077D-02,0.1952D-02,0.1812D-02,0.1736D-02,
+ &0.1651D-02,0.1549D-02,0.1451D-02,0.1384D-02,0.1302D-02,0.1222D-02,
+ &0.1159D-02,0.1086D-02,0.1028D-02,0.9666D-03,0.9136D-03,0.8587D-03,
+ &0.8123D-03,0.7666D-03,0.7236D-03,0.6846D-03,0.6479D-03,0.6163D-03,
+ &0.5861D-03,0.5595D-03,0.5354D-03,0.5152D-03,0.4975D-03,0.4824D-03,
+ &0.4710D-03,0.4620D-03,0.4558D-03,0.4530D-03,0.4527D-03,0.4552D-03,
+ &0.4601D-03,0.4675D-03,0.4771D-03,0.4889D-03,0.5026D-03,0.5181D-03,
+ &0.5351D-03,0.5540D-03,0.5746D-03,0.5972D-03,0.6228D-03,0.6525D-03,
+ &0.6882D-03,0.7329D-03,0.7908D-03,0.8669D-03,0.9668D-03,0.1092D-02,
+ &0.1106D-02,0.1121D-02,0.1136D-02,0.1150D-02,0.1164D-02,0.1178D-02,
+ &0.1191D-02,0.1203D-02,0.1214D-02,0.1225D-02,0.1234D-02,0.1242D-02,
+ &0.1247D-02,0.1250D-02,0.1251D-02,0.1247D-02,0.1239D-02,0.1224D-02,
+ &0.1199D-02,0.1159D-02,0.1093D-02,0.9633D-03/
+ DATA (XPV(I,5,4),I=1,100)/
+ &0.7997D-02,0.7838D-02,0.7615D-02,0.7329D-02,0.6980D-02,0.6573D-02,
+ &0.6123D-02,0.5823D-02,0.5684D-02,0.5497D-02,0.5261D-02,0.4981D-02,
+ &0.4662D-02,0.4375D-02,0.4274D-02,0.4134D-02,0.3955D-02,0.3741D-02,
+ &0.3497D-02,0.3313D-02,0.3221D-02,0.3095D-02,0.2940D-02,0.2758D-02,
+ &0.2596D-02,0.2518D-02,0.2414D-02,0.2285D-02,0.2140D-02,0.2065D-02,
+ &0.1981D-02,0.1877D-02,0.1779D-02,0.1715D-02,0.1634D-02,0.1555D-02,
+ &0.1497D-02,0.1427D-02,0.1376D-02,0.1320D-02,0.1276D-02,0.1229D-02,
+ &0.1194D-02,0.1161D-02,0.1131D-02,0.1108D-02,0.1089D-02,0.1077D-02,
+ &0.1069D-02,0.1067D-02,0.1070D-02,0.1080D-02,0.1095D-02,0.1116D-02,
+ &0.1144D-02,0.1178D-02,0.1218D-02,0.1265D-02,0.1318D-02,0.1378D-02,
+ &0.1444D-02,0.1516D-02,0.1594D-02,0.1677D-02,0.1764D-02,0.1858D-02,
+ &0.1954D-02,0.2056D-02,0.2162D-02,0.2275D-02,0.2398D-02,0.2536D-02,
+ &0.2696D-02,0.2890D-02,0.3134D-02,0.3450D-02,0.3859D-02,0.4365D-02,
+ &0.4425D-02,0.4485D-02,0.4544D-02,0.4602D-02,0.4658D-02,0.4713D-02,
+ &0.4765D-02,0.4815D-02,0.4861D-02,0.4903D-02,0.4940D-02,0.4970D-02,
+ &0.4993D-02,0.5007D-02,0.5008D-02,0.4994D-02,0.4961D-02,0.4900D-02,
+ &0.4801D-02,0.4642D-02,0.4373D-02,0.3853D-02/
+ DATA (XPV(I,6,0),I=1,100)/
+ &0.4823D+00,0.4713D+00,0.4562D+00,0.4371D+00,0.4141D+00,0.3874D+00,
+ &0.3580D+00,0.3381D+00,0.3284D+00,0.3157D+00,0.3000D+00,0.2816D+00,
+ &0.2609D+00,0.2422D+00,0.2354D+00,0.2262D+00,0.2147D+00,0.2012D+00,
+ &0.1860D+00,0.1744D+00,0.1685D+00,0.1606D+00,0.1511D+00,0.1401D+00,
+ &0.1304D+00,0.1255D+00,0.1192D+00,0.1116D+00,0.1031D+00,0.9852D-01,
+ &0.9345D-01,0.8740D-01,0.8162D-01,0.7769D-01,0.7289D-01,0.6822D-01,
+ &0.6457D-01,0.6033D-01,0.5700D-01,0.5343D-01,0.5035D-01,0.4714D-01,
+ &0.4439D-01,0.4166D-01,0.3905D-01,0.3663D-01,0.3429D-01,0.3219D-01,
+ &0.3012D-01,0.2819D-01,0.2634D-01,0.2464D-01,0.2300D-01,0.2142D-01,
+ &0.1997D-01,0.1857D-01,0.1723D-01,0.1600D-01,0.1482D-01,0.1370D-01,
+ &0.1263D-01,0.1162D-01,0.1065D-01,0.9734D-02,0.8858D-02,0.8020D-02,
+ &0.7218D-02,0.6455D-02,0.5727D-02,0.5031D-02,0.4372D-02,0.3743D-02,
+ &0.3148D-02,0.2587D-02,0.2059D-02,0.1563D-02,0.1101D-02,0.6756D-03,
+ &0.6315D-03,0.5886D-03,0.5468D-03,0.5062D-03,0.4667D-03,0.4284D-03,
+ &0.3913D-03,0.3553D-03,0.3206D-03,0.2871D-03,0.2547D-03,0.2238D-03,
+ &0.1942D-03,0.1660D-03,0.1392D-03,0.1139D-03,0.9030D-04,0.6843D-04,
+ &0.4849D-04,0.3074D-04,0.1557D-04,0.3784D-05/
+ DATA (XPV(I,6,1),I=1,100)/
+ &0.1205D-01,0.1178D-01,0.1142D-01,0.1096D-01,0.1041D-01,0.9763D-02,
+ &0.9053D-02,0.8577D-02,0.8354D-02,0.8057D-02,0.7688D-02,0.7251D-02,
+ &0.6756D-02,0.6310D-02,0.6149D-02,0.5929D-02,0.5654D-02,0.5325D-02,
+ &0.4953D-02,0.4670D-02,0.4526D-02,0.4332D-02,0.4097D-02,0.3822D-02,
+ &0.3577D-02,0.3456D-02,0.3297D-02,0.3102D-02,0.2885D-02,0.2769D-02,
+ &0.2639D-02,0.2483D-02,0.2333D-02,0.2232D-02,0.2107D-02,0.1985D-02,
+ &0.1891D-02,0.1781D-02,0.1696D-02,0.1604D-02,0.1526D-02,0.1445D-02,
+ &0.1377D-02,0.1310D-02,0.1248D-02,0.1192D-02,0.1139D-02,0.1094D-02,
+ &0.1052D-02,0.1015D-02,0.9816D-03,0.9544D-03,0.9311D-03,0.9114D-03,
+ &0.8975D-03,0.8872D-03,0.8810D-03,0.8801D-03,0.8830D-03,0.8899D-03,
+ &0.9007D-03,0.9151D-03,0.9330D-03,0.9541D-03,0.9781D-03,0.1005D-02,
+ &0.1034D-02,0.1065D-02,0.1099D-02,0.1135D-02,0.1174D-02,0.1217D-02,
+ &0.1266D-02,0.1323D-02,0.1392D-02,0.1478D-02,0.1581D-02,0.1696D-02,
+ &0.1708D-02,0.1720D-02,0.1731D-02,0.1741D-02,0.1751D-02,0.1759D-02,
+ &0.1766D-02,0.1772D-02,0.1776D-02,0.1778D-02,0.1778D-02,0.1775D-02,
+ &0.1769D-02,0.1759D-02,0.1744D-02,0.1723D-02,0.1695D-02,0.1657D-02,
+ &0.1604D-02,0.1530D-02,0.1417D-02,0.1218D-02/
+ DATA (XPV(I,6,2),I=1,100)/
+ &0.1365D-01,0.1339D-01,0.1302D-01,0.1254D-01,0.1195D-01,0.1127D-01,
+ &0.1051D-01,0.1001D-01,0.9777D-02,0.9465D-02,0.9073D-02,0.8604D-02,
+ &0.8069D-02,0.7589D-02,0.7425D-02,0.7195D-02,0.6900D-02,0.6544D-02,
+ &0.6138D-02,0.5834D-02,0.5686D-02,0.5481D-02,0.5226D-02,0.4925D-02,
+ &0.4658D-02,0.4536D-02,0.4367D-02,0.4157D-02,0.3918D-02,0.3801D-02,
+ &0.3667D-02,0.3499D-02,0.3340D-02,0.3241D-02,0.3112D-02,0.2987D-02,
+ &0.2897D-02,0.2787D-02,0.2709D-02,0.2624D-02,0.2557D-02,0.2487D-02,
+ &0.2436D-02,0.2387D-02,0.2346D-02,0.2315D-02,0.2290D-02,0.2279D-02,
+ &0.2273D-02,0.2277D-02,0.2289D-02,0.2313D-02,0.2346D-02,0.2387D-02,
+ &0.2441D-02,0.2503D-02,0.2575D-02,0.2660D-02,0.2755D-02,0.2859D-02,
+ &0.2974D-02,0.3099D-02,0.3232D-02,0.3374D-02,0.3523D-02,0.3680D-02,
+ &0.3841D-02,0.4010D-02,0.4183D-02,0.4363D-02,0.4552D-02,0.4754D-02,
+ &0.4976D-02,0.5229D-02,0.5526D-02,0.5885D-02,0.6313D-02,0.6782D-02,
+ &0.6832D-02,0.6879D-02,0.6924D-02,0.6966D-02,0.7004D-02,0.7038D-02,
+ &0.7067D-02,0.7091D-02,0.7108D-02,0.7117D-02,0.7116D-02,0.7105D-02,
+ &0.7081D-02,0.7041D-02,0.6982D-02,0.6899D-02,0.6786D-02,0.6631D-02,
+ &0.6421D-02,0.6123D-02,0.5672D-02,0.4871D-02/
+ DATA (XPV(I,6,3),I=1,100)/
+ &0.1167D-01,0.1141D-01,0.1105D-01,0.1060D-01,0.1005D-01,0.9414D-02,
+ &0.8715D-02,0.8245D-02,0.8024D-02,0.7730D-02,0.7367D-02,0.6937D-02,
+ &0.6451D-02,0.6013D-02,0.5853D-02,0.5637D-02,0.5366D-02,0.5044D-02,
+ &0.4680D-02,0.4403D-02,0.4259D-02,0.4069D-02,0.3839D-02,0.3571D-02,
+ &0.3331D-02,0.3212D-02,0.3055D-02,0.2866D-02,0.2654D-02,0.2540D-02,
+ &0.2413D-02,0.2260D-02,0.2114D-02,0.2014D-02,0.1892D-02,0.1773D-02,
+ &0.1680D-02,0.1572D-02,0.1488D-02,0.1398D-02,0.1320D-02,0.1240D-02,
+ &0.1173D-02,0.1106D-02,0.1044D-02,0.9874D-03,0.9342D-03,0.8881D-03,
+ &0.8442D-03,0.8052D-03,0.7698D-03,0.7399D-03,0.7134D-03,0.6903D-03,
+ &0.6722D-03,0.6574D-03,0.6463D-03,0.6397D-03,0.6365D-03,0.6368D-03,
+ &0.6405D-03,0.6473D-03,0.6570D-03,0.6695D-03,0.6844D-03,0.7019D-03,
+ &0.7213D-03,0.7431D-03,0.7673D-03,0.7943D-03,0.8253D-03,0.8617D-03,
+ &0.9063D-03,0.9627D-03,0.1036D-02,0.1133D-02,0.1259D-02,0.1412D-02,
+ &0.1430D-02,0.1448D-02,0.1465D-02,0.1482D-02,0.1499D-02,0.1514D-02,
+ &0.1529D-02,0.1543D-02,0.1556D-02,0.1567D-02,0.1576D-02,0.1583D-02,
+ &0.1587D-02,0.1588D-02,0.1586D-02,0.1578D-02,0.1563D-02,0.1539D-02,
+ &0.1504D-02,0.1448D-02,0.1358D-02,0.1189D-02/
+ DATA (XPV(I,6,4),I=1,100)/
+ &0.1216D-01,0.1189D-01,0.1153D-01,0.1107D-01,0.1051D-01,0.9868D-02,
+ &0.9154D-02,0.8677D-02,0.8454D-02,0.8157D-02,0.7787D-02,0.7349D-02,
+ &0.6851D-02,0.6404D-02,0.6244D-02,0.6025D-02,0.5749D-02,0.5420D-02,
+ &0.5047D-02,0.4764D-02,0.4621D-02,0.4429D-02,0.4195D-02,0.3920D-02,
+ &0.3677D-02,0.3559D-02,0.3402D-02,0.3211D-02,0.2996D-02,0.2884D-02,
+ &0.2759D-02,0.2608D-02,0.2463D-02,0.2369D-02,0.2251D-02,0.2138D-02,
+ &0.2053D-02,0.1952D-02,0.1879D-02,0.1800D-02,0.1736D-02,0.1670D-02,
+ &0.1619D-02,0.1572D-02,0.1531D-02,0.1498D-02,0.1470D-02,0.1454D-02,
+ &0.1442D-02,0.1439D-02,0.1442D-02,0.1455D-02,0.1475D-02,0.1502D-02,
+ &0.1539D-02,0.1584D-02,0.1637D-02,0.1699D-02,0.1769D-02,0.1847D-02,
+ &0.1934D-02,0.2027D-02,0.2128D-02,0.2235D-02,0.2348D-02,0.2468D-02,
+ &0.2591D-02,0.2721D-02,0.2857D-02,0.3001D-02,0.3158D-02,0.3333D-02,
+ &0.3538D-02,0.3788D-02,0.4102D-02,0.4506D-02,0.5022D-02,0.5648D-02,
+ &0.5720D-02,0.5792D-02,0.5862D-02,0.5931D-02,0.5997D-02,0.6060D-02,
+ &0.6120D-02,0.6176D-02,0.6226D-02,0.6271D-02,0.6308D-02,0.6337D-02,
+ &0.6354D-02,0.6359D-02,0.6348D-02,0.6316D-02,0.6257D-02,0.6163D-02,
+ &0.6019D-02,0.5797D-02,0.5436D-02,0.4755D-02/
+ DATA (XPV(I,7,0),I=1,100)/
+ &0.6367D+00,0.6216D+00,0.6010D+00,0.5752D+00,0.5440D+00,0.5081D+00,
+ &0.4686D+00,0.4418D+00,0.4287D+00,0.4116D+00,0.3907D+00,0.3662D+00,
+ &0.3385D+00,0.3137D+00,0.3045D+00,0.2923D+00,0.2772D+00,0.2594D+00,
+ &0.2393D+00,0.2241D+00,0.2163D+00,0.2060D+00,0.1936D+00,0.1792D+00,
+ &0.1665D+00,0.1602D+00,0.1520D+00,0.1421D+00,0.1311D+00,0.1252D+00,
+ &0.1187D+00,0.1109D+00,0.1035D+00,0.9842D-01,0.9228D-01,0.8630D-01,
+ &0.8164D-01,0.7624D-01,0.7200D-01,0.6747D-01,0.6355D-01,0.5948D-01,
+ &0.5601D-01,0.5255D-01,0.4926D-01,0.4620D-01,0.4326D-01,0.4061D-01,
+ &0.3801D-01,0.3557D-01,0.3324D-01,0.3109D-01,0.2903D-01,0.2705D-01,
+ &0.2521D-01,0.2344D-01,0.2175D-01,0.2018D-01,0.1868D-01,0.1725D-01,
+ &0.1589D-01,0.1460D-01,0.1337D-01,0.1219D-01,0.1107D-01,0.9999D-02,
+ &0.8975D-02,0.8003D-02,0.7079D-02,0.6199D-02,0.5369D-02,0.4581D-02,
+ &0.3839D-02,0.3144D-02,0.2492D-02,0.1883D-02,0.1320D-02,0.8054D-03,
+ &0.7523D-03,0.7006D-03,0.6504D-03,0.6016D-03,0.5543D-03,0.5084D-03,
+ &0.4640D-03,0.4210D-03,0.3796D-03,0.3397D-03,0.3011D-03,0.2644D-03,
+ &0.2292D-03,0.1957D-03,0.1640D-03,0.1342D-03,0.1063D-03,0.8046D-04,
+ &0.5699D-04,0.3611D-04,0.1829D-04,0.4453D-05/
+ DATA (XPV(I,7,1),I=1,100)/
+ &0.1667D-01,0.1629D-01,0.1577D-01,0.1511D-01,0.1431D-01,0.1340D-01,
+ &0.1239D-01,0.1171D-01,0.1139D-01,0.1097D-01,0.1045D-01,0.9835D-02,
+ &0.9139D-02,0.8514D-02,0.8286D-02,0.7979D-02,0.7594D-02,0.7137D-02,
+ &0.6621D-02,0.6230D-02,0.6029D-02,0.5762D-02,0.5438D-02,0.5061D-02,
+ &0.4726D-02,0.4560D-02,0.4342D-02,0.4078D-02,0.3784D-02,0.3626D-02,
+ &0.3451D-02,0.3240D-02,0.3038D-02,0.2902D-02,0.2735D-02,0.2572D-02,
+ &0.2446D-02,0.2299D-02,0.2185D-02,0.2064D-02,0.1960D-02,0.1852D-02,
+ &0.1762D-02,0.1673D-02,0.1591D-02,0.1516D-02,0.1446D-02,0.1386D-02,
+ &0.1329D-02,0.1278D-02,0.1233D-02,0.1195D-02,0.1162D-02,0.1134D-02,
+ &0.1113D-02,0.1096D-02,0.1084D-02,0.1078D-02,0.1077D-02,0.1081D-02,
+ &0.1090D-02,0.1103D-02,0.1119D-02,0.1140D-02,0.1164D-02,0.1191D-02,
+ &0.1220D-02,0.1253D-02,0.1288D-02,0.1325D-02,0.1367D-02,0.1413D-02,
+ &0.1466D-02,0.1530D-02,0.1609D-02,0.1708D-02,0.1830D-02,0.1967D-02,
+ &0.1981D-02,0.1995D-02,0.2008D-02,0.2021D-02,0.2032D-02,0.2042D-02,
+ &0.2051D-02,0.2058D-02,0.2063D-02,0.2066D-02,0.2066D-02,0.2063D-02,
+ &0.2057D-02,0.2045D-02,0.2029D-02,0.2005D-02,0.1973D-02,0.1929D-02,
+ &0.1869D-02,0.1784D-02,0.1655D-02,0.1427D-02/
+ DATA (XPV(I,7,2),I=1,100)/
+ &0.1825D-01,0.1787D-01,0.1734D-01,0.1666D-01,0.1584D-01,0.1488D-01,
+ &0.1382D-01,0.1312D-01,0.1280D-01,0.1236D-01,0.1182D-01,0.1117D-01,
+ &0.1044D-01,0.9780D-02,0.9550D-02,0.9233D-02,0.8830D-02,0.8348D-02,
+ &0.7799D-02,0.7387D-02,0.7184D-02,0.6906D-02,0.6565D-02,0.6163D-02,
+ &0.5808D-02,0.5642D-02,0.5418D-02,0.5140D-02,0.4827D-02,0.4670D-02,
+ &0.4493D-02,0.4274D-02,0.4067D-02,0.3936D-02,0.3769D-02,0.3607D-02,
+ &0.3489D-02,0.3347D-02,0.3246D-02,0.3136D-02,0.3050D-02,0.2959D-02,
+ &0.2893D-02,0.2830D-02,0.2777D-02,0.2736D-02,0.2703D-02,0.2687D-02,
+ &0.2678D-02,0.2680D-02,0.2693D-02,0.2720D-02,0.2757D-02,0.2805D-02,
+ &0.2867D-02,0.2940D-02,0.3024D-02,0.3123D-02,0.3233D-02,0.3355D-02,
+ &0.3489D-02,0.3632D-02,0.3785D-02,0.3948D-02,0.4118D-02,0.4297D-02,
+ &0.4479D-02,0.4668D-02,0.4863D-02,0.5063D-02,0.5274D-02,0.5499D-02,
+ &0.5750D-02,0.6038D-02,0.6381D-02,0.6800D-02,0.7306D-02,0.7864D-02,
+ &0.7924D-02,0.7980D-02,0.8034D-02,0.8085D-02,0.8131D-02,0.8172D-02,
+ &0.8208D-02,0.8236D-02,0.8258D-02,0.8270D-02,0.8271D-02,0.8259D-02,
+ &0.8233D-02,0.8188D-02,0.8122D-02,0.8027D-02,0.7897D-02,0.7721D-02,
+ &0.7480D-02,0.7139D-02,0.6624D-02,0.5709D-02/
+ DATA (XPV(I,7,3),I=1,100)/
+ &0.1630D-01,0.1592D-01,0.1540D-01,0.1475D-01,0.1396D-01,0.1305D-01,
+ &0.1205D-01,0.1138D-01,0.1107D-01,0.1065D-01,0.1013D-01,0.9526D-02,
+ &0.8839D-02,0.8222D-02,0.7995D-02,0.7690D-02,0.7310D-02,0.6860D-02,
+ &0.6352D-02,0.5966D-02,0.5766D-02,0.5502D-02,0.5183D-02,0.4813D-02,
+ &0.4483D-02,0.4318D-02,0.4103D-02,0.3844D-02,0.3555D-02,0.3399D-02,
+ &0.3225D-02,0.3018D-02,0.2820D-02,0.2685D-02,0.2521D-02,0.2360D-02,
+ &0.2235D-02,0.2091D-02,0.1978D-02,0.1857D-02,0.1754D-02,0.1647D-02,
+ &0.1557D-02,0.1468D-02,0.1385D-02,0.1310D-02,0.1239D-02,0.1177D-02,
+ &0.1118D-02,0.1066D-02,0.1018D-02,0.9774D-03,0.9411D-03,0.9091D-03,
+ &0.8835D-03,0.8619D-03,0.8450D-03,0.8338D-03,0.8268D-03,0.8242D-03,
+ &0.8257D-03,0.8312D-03,0.8403D-03,0.8529D-03,0.8686D-03,0.8875D-03,
+ &0.9087D-03,0.9331D-03,0.9605D-03,0.9915D-03,0.1028D-02,0.1070D-02,
+ &0.1124D-02,0.1191D-02,0.1279D-02,0.1395D-02,0.1545D-02,0.1725D-02,
+ &0.1746D-02,0.1766D-02,0.1786D-02,0.1805D-02,0.1823D-02,0.1841D-02,
+ &0.1857D-02,0.1872D-02,0.1886D-02,0.1897D-02,0.1907D-02,0.1913D-02,
+ &0.1916D-02,0.1915D-02,0.1909D-02,0.1897D-02,0.1877D-02,0.1846D-02,
+ &0.1799D-02,0.1729D-02,0.1618D-02,0.1411D-02/
+ DATA (XPV(I,7,4),I=1,100)/
+ &0.1678D-01,0.1640D-01,0.1587D-01,0.1522D-01,0.1442D-01,0.1350D-01,
+ &0.1249D-01,0.1181D-01,0.1149D-01,0.1107D-01,0.1055D-01,0.9935D-02,
+ &0.9238D-02,0.8611D-02,0.8385D-02,0.8078D-02,0.7694D-02,0.7237D-02,
+ &0.6721D-02,0.6331D-02,0.6132D-02,0.5867D-02,0.5545D-02,0.5170D-02,
+ &0.4837D-02,0.4676D-02,0.4462D-02,0.4202D-02,0.3912D-02,0.3761D-02,
+ &0.3592D-02,0.3388D-02,0.3194D-02,0.3068D-02,0.2911D-02,0.2759D-02,
+ &0.2646D-02,0.2513D-02,0.2415D-02,0.2310D-02,0.2226D-02,0.2139D-02,
+ &0.2072D-02,0.2010D-02,0.1955D-02,0.1911D-02,0.1875D-02,0.1852D-02,
+ &0.1836D-02,0.1830D-02,0.1833D-02,0.1848D-02,0.1872D-02,0.1905D-02,
+ &0.1950D-02,0.2004D-02,0.2069D-02,0.2145D-02,0.2231D-02,0.2327D-02,
+ &0.2432D-02,0.2547D-02,0.2669D-02,0.2800D-02,0.2937D-02,0.3082D-02,
+ &0.3232D-02,0.3389D-02,0.3553D-02,0.3727D-02,0.3917D-02,0.4130D-02,
+ &0.4378D-02,0.4681D-02,0.5061D-02,0.5547D-02,0.6163D-02,0.6897D-02,
+ &0.6981D-02,0.7063D-02,0.7144D-02,0.7221D-02,0.7296D-02,0.7367D-02,
+ &0.7433D-02,0.7494D-02,0.7548D-02,0.7595D-02,0.7632D-02,0.7658D-02,
+ &0.7671D-02,0.7667D-02,0.7644D-02,0.7595D-02,0.7513D-02,0.7388D-02,
+ &0.7203D-02,0.6923D-02,0.6476D-02,0.5646D-02/
+
+C..fetching pdfs
+ DO 5 IP=-6,6
+ XPDF(IP)=ZEROD
+ 5 CONTINUE
+ DO 2 I=1,IX
+ ENT(I)=LOG10(XT(I))
+ 2 CONTINUE
+ NA(1)=IX
+ NA(2)=IQ
+ DO 3 I=1,IQ
+ ENT(IX+I)=LOG10(Q2T(I))
+ 3 CONTINUE
+ ARG(1)=LOG10(X)
+ ARG(2)=LOG10(Q2)
+C..various flavours (u-->2,d-->1)
+ XPDF(0)=PHO_DBFINT(NARG,ARG,NA,ENT,XPV(1,1,0))
+ XPDF(1)=PHO_DBFINT(NARG,ARG,NA,ENT,XPV(1,1,1))
+ XPDF(2)=PHO_DBFINT(NARG,ARG,NA,ENT,XPV(1,1,2))
+ XPDF(3)=PHO_DBFINT(NARG,ARG,NA,ENT,XPV(1,1,3))
+ XPDF(4)=PHO_DBFINT(NARG,ARG,NA,ENT,XPV(1,1,4))
+ DO 21 JF=1,4
+ XPDF(-JF)=XPDF(JF)
+ 21 CONTINUE
+
+ END
+
+CDECK ID>, PHO_DBFINT
+ DOUBLE PRECISION FUNCTION PHO_DBFINT(NARG,ARG,NA,ENT,TABLE)
+C***********************************************************************
+C
+C routine based on CERN library E104
+C
+C multi-dimensional interpolation routine, needed for PHOJET
+C internal cross section tables and several PDF sets (GRV98 and AGL)
+C
+C changed to avoid recursive function calls (R.Engel, 09/98)
+C
+C***********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ INTEGER NA(NARG), INDEX(32)
+ DOUBLE PRECISION ARG(NARG),ENT(NARG),TABLE(*),WEIGHT(32)
+
+ DATA ZEROD/0.D0/
+ DATA ONED/1.D0/
+
+ DBFINT = ZEROD
+ PHO_DBFINT = ZEROD
+ IF(NARG .LT. 1 .OR. NARG .GT. 5) RETURN
+
+ LMAX = 0
+ ISTEP = 1
+ KNOTS = 1
+ INDEX(1) = 1
+ WEIGHT(1) = ONED
+ DO 100 N = 1, NARG
+ X = ARG(N)
+ NDIM = NA(N)
+ LOCA = LMAX
+ LMIN = LMAX + 1
+ LMAX = LMAX + NDIM
+ IF(NDIM .GT. 2) GOTO 10
+ IF(NDIM .EQ. 1) GOTO 100
+ H = X - ENT(LMIN)
+ IF(H .EQ. ZEROD) GOTO 90
+ ISHIFT = ISTEP
+ IF(X-ENT(LMIN+1) .EQ. ZEROD) GOTO 21
+ ISHIFT = 0
+ ETA = H / (ENT(LMIN+1) - ENT(LMIN))
+ GOTO 30
+ 10 LOCB = LMAX + 1
+ 11 LOCC = (LOCA+LOCB) / 2
+ IF(X-ENT(LOCC)) 12, 20, 13
+ 12 LOCB = LOCC
+ GOTO 14
+ 13 LOCA = LOCC
+ 14 IF(LOCB-LOCA .GT. 1) GOTO 11
+ LOCA = MIN ( MAX (LOCA,LMIN), LMAX-1 )
+ ISHIFT = (LOCA - LMIN) * ISTEP
+ ETA = (X - ENT(LOCA)) / (ENT(LOCA+1) - ENT(LOCA))
+ GOTO 30
+ 20 ISHIFT = (LOCC - LMIN) * ISTEP
+ 21 DO 22 K = 1, KNOTS
+ INDEX(K) = INDEX(K) + ISHIFT
+ 22 CONTINUE
+ GOTO 90
+ 30 DO 31 K = 1, KNOTS
+ INDEX(K) = INDEX(K) + ISHIFT
+ INDEX(K+KNOTS) = INDEX(K) + ISTEP
+ WEIGHT(K+KNOTS) = WEIGHT(K) * ETA
+ WEIGHT(K) = WEIGHT(K) - WEIGHT(K+KNOTS)
+ 31 CONTINUE
+ KNOTS = 2*KNOTS
+ 90 ISTEP = ISTEP * NDIM
+ 100 CONTINUE
+ DO 200 K = 1, KNOTS
+ I = INDEX(K)
+ DBFINT = DBFINT + WEIGHT(K) * TABLE(I)
+ 200 CONTINUE
+
+ PHO_DBFINT = DBFINT
+
+ END
+
+CDECK ID>, PHVAL
+ SUBROUTINE PHVAL(IGRP,ISET,XI,SCALE2,PD,IRET)
+C**********************************************************************
+C
+C dummy subroutine, remove to link PHOLIB
+C
+C**********************************************************************
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ DIMENSION PD(-6:6)
+ END
--- /dev/null
+C*********************************************************************
+C*********************************************************************
+C* **
+C* March 1997 **
+C* **
+C* The Lund Monte Carlo for Hadronic Processes **
+C* **
+C* PYTHIA version 6.1 **
+C* **
+C* Torbjorn Sjostrand **
+C* Department of Theoretical Physics 2 **
+C* Lund University **
+C* Solvegatan 14A, S-223 62 Lund, Sweden **
+C* phone +46 - 46 - 222 48 16 **
+C* E-mail torbjorn@thep.lu.se **
+C* **
+C* SUSY parts by **
+C* Stephen Mrenna **
+C* Argonne National Laboratory **
+C* 9700 South Cass Avenue, Argonne, IL 60439, USA **
+C* phone + 1 - 630 - 252 - 7615 **
+C* E-mail mrenna@hep.anl.gov **
+C* **
+C* Several parts are written by Hans-Uno Bengtsson **
+C* PYSHOW is written together with Mats Bengtsson **
+C* advanced popcorn baryon production written by Patrik Eden **
+C* CTEQ 3 parton distributions are by the CTEQ collaboration **
+C* GRV 94 parton distributions are by Glueck, Reya and Vogt **
+C* SaS photon parton distributions together with Gerhard Schuler **
+C* g + g and q + qbar -> t + tbar + H code by Zoltan Kunszt **
+C* MSSM Higgs mass calculation code by M. Carena, **
+C* J.R. Espinosa, M. Quiros and C.E.M. Wagner **
+C* PYGAUS adapted from CERN library (K.S. Kolbig) **
+C* **
+C* The latest program version and documentation is found on WWW **
+C* http://www.thep.lu.se/tf2/staff/torbjorn/Pythia.html **
+C* **
+C* Copyright Torbjorn Sjostrand, Lund 1997 **
+C* **
+C*********************************************************************
+C*********************************************************************
+C *
+C List of subprograms in order of appearance, with main purpose *
+C (S = subroutine, F = function, B = block data) *
+C *
+C B PYDATA to contain all default values *
+C S PYTEST to test the proper functioning of the package *
+C S PYHEPC to convert between /PYJETS/ and /HEPEVT/ records *
+C *
+C S PYINIT to administer the initialization procedure *
+C S PYEVNT to administer the generation of an event *
+C S PYSTAT to print cross-section and other information *
+C S PYINRE to initialize treatment of resonances *
+C S PYINBM to read in beam, target and frame choices *
+C S PYINKI to initialize kinematics of incoming particles *
+C S PYINPR to set up the selection of included processes *
+C S PYXTOT to give total, elastic and diffractive cross-sect. *
+C S PYMAXI to find differential cross-section maxima *
+C S PYPILE to select multiplicity of pileup events *
+C S PYSAVE to save alternatives for gamma-p and gamma-gamma *
+C S PYRAND to select subprocess and kinematics for event *
+C S PYSCAT to set up kinematics and colour flow of event *
+C S PYSSPA to simulate initial state spacelike showers *
+C S PYRESD to perform resonance decays *
+C S PYMULT to generate multiple interactions *
+C S PYREMN to add on target remnants *
+C S PYDIFF to set up kinematics for diffractive events *
+C S PYDOCU to compute cross-sections and handle documentation *
+C S PYFRAM to perform boosts between different frames *
+C S PYWIDT to calculate full and partial widths of resonances *
+C S PYOFSH to calculate partial width into off-shell channels *
+C S PYRECO to handle colour reconnection in W+W- events *
+C S PYKLIM to calculate borders of allowed kinematical region *
+C S PYKMAP to construct value of kinematical variable *
+C S PYSIGH to calculate differential cross-sections *
+C S PYPDFU to evaluate parton distributions *
+C S PYPDFL to evaluate parton distributions at low x and Q^2 *
+C S PYPDEL to evaluate electron parton distributions *
+C S PYPDGA to evaluate photon parton distributions (generic) *
+C S PYGGAM to evaluate photon parton distributions (SaS sets) *
+C S PYGVMD to evaluate VMD part of photon parton distributions *
+C S PYGANO to evaluate anomalous part of photon pdf's *
+C S PYGBEH to evaluate Bethe-Heitler part of photon pdf's *
+C S PYGDIR to evaluate direct contribution to photon pdf's *
+C S PYPDPI to evaluate pion parton distributions *
+C S PYPDPR to evaluate proton parton distributions *
+C F PYCTEQ to evaluate the CTEQ 3 proton parton distributions *
+C S PYGRVL to evaluate the GRV 94L pronton parton distributions *
+C S PYGRVM to evaluate the GRV 94M pronton parton distributions *
+C S PYGRVD to evaluate the GRV 94D pronton parton distributions *
+C F PYGRVV auxiliary to the PYGRV* routines *
+C F PYGRVW auxiliary to the PYGRV* routines *
+C F PYGRVS auxiliary to the PYGRV* routines *
+C F PYHFTH to evaluate threshold factor for heavy flavour *
+C S PYSPLI to find flavours left in hadron when one removed *
+C F PYGAMM to evaluate ordinary Gamma function Gamma(x) *
+C S PYWAUX to evaluate auxiliary functions W1(s) and W2(s) *
+C S PYI3AU to evaluate auxiliary function I3(s,t,u,v) *
+C F PYSPEN to evaluate Spence (dilogarithm) function Sp(x) *
+C S PYQQBH to evaluate matrix element for g + g -> Q + Qbar + H *
+C *
+C S PYMSIN to initialize the supersymmetry simulation *
+C S PYAPPS to determine MSSM parameters from SUGRA input *
+C F PYRNMQ to determine running quark masses *
+C F PYRNMT to determine running top mass *
+C S PYTHRG to calculate sfermion third-gen. mass eigenstates *
+C S PYINOM to calculate neutralino/chargino mass eigenstates *
+C F PYRNM3 to determine running M3, gluino mass *
+C S PYEIG4 to calculate eigenvalues and -vectors in 4*4 matrix *
+C S PYHGGM to determine Higgs mass spectrum *
+C S PYSUBH to determine Higgs masses in the MSSM *
+C S PYPOLE to determine Higgs masses in the MSSM *
+C S PYVACU to determine Higgs masses in the MSSM *
+C S PYRGHM auxiliary to PYVACU *
+C S PYGFXX auxiliary to PYRGHM *
+C F PYFINT auxiliary to PYVACU *
+C F PYFISB auxiliary to PYFINT *
+C S PYSFDC to calculate sfermion decay partial widths *
+C S PYGLUI to calculate gluino decay partial widths *
+C S PYTBBN to calculate 3-body decay of gluino to neutralino *
+C S PYTBBC to calculate 3-body decay of gluino to chargino *
+C S PYNJDC to calculate neutralino decay partial widths *
+C S PYCJDC to calculate chargino decay partial widths *
+C F PYXXZ5 auxiliary for neutralino 3-body decay *
+C F PYXXW5 auxiliary for ino charge change 3-body decay *
+C F PYXXGA auxiliary for ino -> ino + gamma decay *
+C F PYX2XG auxiliary for ino -> ino + gauge boson decay *
+C F PYX2XH auxiliary for ino -> ino + Higgs decay *
+C F PYXXZ2 auxiliary for chargino 3-body decay *
+C S PYHEXT to calculate non-SM Higgs decay partial widths *
+C F PYH2XX auxiliary for H -> ino + ino decay *
+C F PYGAUS to perform Gaussian integration *
+C F PYSIMP to perform Simpson integration *
+C F PYLAMF to evaluate the lambda kinematics function *
+C S PYTBDY to perform 3-body decay of gauginos *
+C *
+C S PY1ENT to fill one entry (= parton or particle) *
+C S PY2ENT to fill two entries *
+C S PY3ENT to fill three entries *
+C S PY4ENT to fill four entries *
+C S PYJOIN to connect entries with colour flow information *
+C S PYGIVE to fill (or query) commonblock variables *
+C S PYEXEC to administrate fragmentation and decay chain *
+C S PYPREP to rearrange showered partons along strings *
+C S PYSTRF to do string fragmentation of jet system *
+C S PYINDF to do independent fragmentation of one or many jets *
+C S PYDECY to do the decay of a particle *
+C S PYDCYK to select parton and hadron flavours in decays *
+C S PYKFDI to select parton and hadron flavours in fragm *
+C S PYNMES to select number of popcorn mesons *
+C S PYKFIN to calculate falvour prod. ratios from input params. *
+C S PYPTDI to select transverse momenta in fragm *
+C S PYZDIS to select longitudinal scaling variable in fragm *
+C S PYSHOW to do timelike parton shower evolution *
+C S PYBOEI to include Bose-Einstein effects (crudely) *
+C F PYMASS to give the mass of a particle or parton *
+C S PYNAME to give the name of a particle or parton *
+C F PYCHGE to give three times the electric charge *
+C F PYCOMP to compress standard KF flavour code to internal KC *
+C S PYERRM to write error messages and abort faulty run *
+C F PYALEM to give the alpha_electromagnetic value *
+C F PYALPS to give the alpha_strong value *
+C F PYANGL to give the angle from known x and y components *
+C F PYR to provide a random number generator *
+C S PYRGET to save the state of the random number generator *
+C S PYRSET to set the state of the random number generator *
+C S PYROBO to rotate and/or boost an event *
+C S PYEDIT to remove unwanted entries from record *
+C S PYLIST to list event record or particle data *
+C S PYLOGO to write a logo *
+C S PYUPDA to update particle data *
+C F PYK to provide integer-valued event information *
+C F PYP to provide real-valued event information *
+C S PYSPHE to perform sphericity analysis *
+C S PYTHRU to perform thrust analysis *
+C S PYCLUS to perform three-dimensional cluster analysis *
+C S PYCELL to perform cluster analysis in (eta, phi, E_T) *
+C S PYJMAS to give high and low jet mass of event *
+C S PYFOWO to give Fox-Wolfram moments *
+C S PYTABU to analyze events, with tabular output *
+C *
+C S PYEEVT to administrate the generation of an e+e- event *
+C S PYXTEE to give the total cross-section at given CM energy *
+C S PYRADK to generate initial state photon radiation *
+C S PYXKFL to select flavour of primary qqbar pair *
+C S PYXJET to select (matrix element) jet multiplicity *
+C S PYX3JT to select kinematics of three-jet event *
+C S PYX4JT to select kinematics of four-jet event *
+C S PYXDIF to select angular orientation of event *
+C S PYONIA to perform generation of onium decay to gluons *
+C *
+C S PYBOOK to book a histogram *
+C S PYFILL to fill an entry in a histogram *
+C S PYFACT to multiply histogram contents by a factor *
+C S PYOPER to perform operations between histograms *
+C S PYHIST to print and reset all histograms *
+C S PYPLOT to print a single histogram *
+C S PYNULL to reset contents of a single histogram *
+C S PYDUMP to dump histogram contents onto a file *
+C *
+C S PYKCUT dummy routine for user kinematical cuts *
+C S PYEVWT dummy routine for weighting events *
+C S PYUPIN dummy routine to initialize a user process *
+C S PYUPEV dummy routine to generate a user process event *
+C S PDFSET dummy routine to be removed when using PDFLIB *
+C S STRUCTM dummy routine to be removed when using PDFLIB *
+C S PYTAUD dummy routine for interface to tau decay libraries *
+C S PYTIME dummy routine for giving date and time *
+C *
+C*********************************************************************
+
+C...PYDATA
+C...Default values for switches and parameters,
+C...and particle, decay and process data.
+
+ BLOCK DATA PYDATA
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYDAT4/CHAF(500,2)
+ CHARACTER CHAF*16
+ COMMON/PYDATR/MRPY(6),RRPY(100)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT6/PROC(0:500)
+ CHARACTER PROC*28
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYDATR/,/PYSUBS/,
+ &/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,
+ &/PYINT6/,/PYINT7/,/PYMSSM/,/PYSSMT/,/PYBINS/
+
+C...PYDAT1, containing status codes and most parameters.
+ DATA MSTU/
+ & 0, 0, 0, 4000,10000, 500, 4000, 0, 0, 2,
+ 1 6, 1, 1, 0, 1, 1, 0, 0, 0, 0,
+ 2 2, 10, 0, 0, 1, 10, 0, 0, 0, 0,
+ 3 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4 2, 2, 1, 4, 2, 1, 1, 0, 0, 0,
+ 5 25, 24, 0, 1, 0, 0, 0, 0, 0, 0,
+ 6 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7 30*0,
+ 1 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2 1, 5, 3, 5, 0, 0, 0, 0, 0, 0,
+ & 80*0/
+ DATA PARU/
+ & 3.141592653589793D0, 6.283185307179586D0,
+ & 0.197327D0, 5.06773D0, 0.389380D0, 2.56819D0, 4*0D0,
+ 1 0.001D0, 0.09D0, 0.01D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 2 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 3 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 4 2.0D0, 1.0D0, 0.25D0, 2.5D0, 0.05D0,
+ 4 0D0, 0D0, 0.0001D0, 0D0, 0D0,
+ 5 2.5D0,1.5D0,7.0D0,1.0D0,0.5D0,2.0D0,3.2D0, 0D0, 0D0, 0D0,
+ 6 40*0D0,
+ & 0.00729735D0, 0.232D0, 0.007764D0, 1.0D0, 1.16639D-5,
+ & 0D0, 0D0, 0D0, 0D0, 0D0,
+ 1 0.20D0, 0.25D0, 1.0D0, 4.0D0, 10D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 2 -0.693D0, -1.0D0, 0.387D0, 1.0D0, -0.08D0,
+ 2 -1.0D0, 1.0D0, 1.0D0, 1.0D0, 0D0,
+ 3 1.0D0,-1.0D0, 1.0D0,-1.0D0, 1.0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 4 5.0D0, 1.0D0, 1.0D0, 0D0, 1.0D0, 1.0D0, 0D0, 0D0, 0D0, 0D0,
+ 5 1.0D0, 0D0, 0D0, 0D0, 1000D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0,0D0,
+ 6 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 7 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 0D0,0D0,0D0,
+ 8 1.0D0, 1.0D0, 1.0D0, 0.0D0, 0.0D0, 1.0D0, 1.0D0, 0D0,0D0,0D0,
+ 9 0D0, 0D0, 0D0, 0D0, 1.0D0, 0D0, 0D0, 0D0, 0D0, 0D0/
+ DATA MSTJ/
+ & 1, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1 4, 2, 0, 1, 0, 0, 0, 0, 0, 0,
+ 2 2, 1, 1, 2, 1, 2, 2, 0, 0, 0,
+ 3 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4 2, 2, 4, 2, 5, 3, 3, 0, 0, 3,
+ 5 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6 40*0,
+ & 5, 2, 7, 5, 1, 1, 0, 2, 0, 2,
+ 1 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
+ 2 80*0/
+ DATA PARJ/
+ & 0.10D0, 0.30D0, 0.40D0, 0.05D0, 0.50D0,
+ & 0.50D0, 0.50D0, 0.6D0, 1.2D0, 0.6D0,
+ 1 0.50D0,0.60D0,0.75D0, 0D0, 0D0, 0D0, 0D0, 1.0D0, 1.0D0, 0D0,
+ 2 0.36D0, 1.0D0,0.01D0, 2.0D0,1.0D0,0.4D0, 0D0, 0D0, 0D0, 0D0,
+ 3 0.10D0, 1.0D0, 0.8D0, 1.5D0,0D0,2.0D0,0.2D0,2.5D0,0.6D0,0D0,
+ 4 0.3D0, 0.58D0, 0.5D0, 0.9D0,0.5D0,1.0D0,1.0D0,1.0D0,0D0,0D0,
+ 5 0.77D0, 0.77D0, 0.77D0, -0.05D0, -0.005D0,
+ 5 -0.00001D0, -0.00001D0, -0.00001D0, 1.0D0, 0D0,
+ 6 4.5D0, 0.7D0, 0D0,0.003D0, 0.5D0, 0.5D0, 0D0, 0D0, 0D0, 0D0,
+ 7 10D0, 1000D0, 100D0, 1000D0, 0D0, 0.7D0,10D0, 0D0, 0D0, 0D0,
+ 8 0.29D0, 1.0D0, 1.0D0, 0D0, 10D0, 10D0, 0D0, 0D0, 0D0, 0D0,
+ 9 0.02D0, 1.0D0, 0.2D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ & 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 1 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 2 1.0D0, 0.25D0,91.187D0,2.489D0, 0.01D0,
+ 2 2.0D0, 1.0D0, 0.25D0,0.002D0, 0D0,
+ 3 0D0, 0D0, 0D0, 0D0, 0.01D0, 0.99D0, 0D0, 0D0, 0.2D0, 0D0,
+ 4 60*0D0/
+
+C...PYDAT2, with particle data and flavour treatment parameters.
+ DATA (KCHG(I,1),I= 1, 500)/-1,2,-1,2,-1,2,-1,2,2*0,-3,0,-3,0,
+ &-3,0,-3,6*0,3,9*0,3,2*0,3,0,-1,12*0,3,2*0,3,28*0,2,-1,20*0,4*3,
+ &8*0,3*3,4*0,3*3,3*0,3*3,7*0,3*3,3*0,3*3,3*0,-2,-3,2*1,3*0,4,3*3,
+ &6,2*-2,2*-3,0,2*1,2*0,2*3,-2,2*-3,2*0,-3,2*1,2*0,3,0,2*4,2*3,2*6,
+ &3,2*1,2*0,2*3,2*0,4,2*3,2*6,2*3,6,2*-2,2*-3,0,-3,0,2*1,2*0,2*3,0,
+ &3,2*-2,2*-3,2*0,2*-3,0,2*1,2*0,2*3,2*0,2*3,-2,2*-3,2*0,2*-3,2*0,
+ &-3,2*0,2*3,4*0,2*3,2*0,2*3,2*0,2*3,4*0,2*3,2*0,2*3,3*0,3,2*0,3,0,
+ &3,0,3,2*0,3,0,3,3*0,-1,2,-1,2,-1,2,-3,0,-3,0,-3,4*0,3,2*0,3,0,-1,
+ &2,-1,2,-1,2,-3,0,-3,0,-3,0,-1,2,-3,164*0/
+ DATA (KCHG(I,2),I= 1, 500)/8*1,12*0,2,16*0,2,1,113*0,-1,0,2*-1,
+ &3*0,-1,4*0,2*-1,3*0,2*-1,4*0,-1,5*0,2*-1,4*0,2*-1,5*0,2*-1,6*0,
+ &-1,7*0,2*-1,5*0,2*-1,6*0,2*-1,7*0,2*-1,8*0,-1,56*0,6*1,6*0,2,7*0,
+ &6*1,6*0,2*1,165*0/
+ DATA (KCHG(I,3),I= 1, 500)/8*1,2*0,8*1,5*0,1,9*0,1,2*0,1,0,2*1,
+ &11*0,1,2*0,1,26*0,1,0,2*1,20*0,4*1,5*0,6*1,4*0,9*1,4*0,12*1,3*0,
+ &102*1,2*0,2*1,2*0,4*1,2*0,6*1,2*0,8*1,3*0,1,0,2*1,0,3*1,0,4*1,
+ &3*0,12*1,3*0,1,2*0,1,0,16*1,163*0/
+ DATA (KCHG(I,4),I= 1, 293)/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+ &16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,
+ &37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,
+ &58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,
+ &79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,
+ &100,110,111,113,115,130,210,211,213,215,220,221,223,225,310,311,
+ &313,315,321,323,325,330,331,333,335,411,413,415,421,423,425,431,
+ &433,435,440,441,443,445,511,513,515,521,523,525,531,533,535,541,
+ &543,545,551,553,555,1103,1114,2101,2103,2110,2112,2114,2203,2210,
+ &2212,2214,2224,3101,3103,3112,3114,3122,3201,3203,3212,3214,3222,
+ &3224,3303,3312,3314,3322,3324,3334,4101,4103,4112,4114,4122,4132,
+ &4201,4203,4212,4214,4222,4224,4232,4301,4303,4312,4314,4322,4324,
+ &4332,4334,4403,4412,4414,4422,4424,4432,4434,4444,5101,5103,5112,
+ &5114,5122,5132,5142,5201,5203,5212,5214,5222,5224,5232,5242,5301,
+ &5303,5312,5314,5322,5324,5332,5334,5342,5401,5403,5412,5414,5422,
+ &5424,5432,5434,5442,5444,5503,5512,5514,5522,5524,5532,5534,5542,
+ &5544,5554,10111,10113,10211,10213,10221,10223,10311,10313,10321,
+ &10323,10331,10333,10411,10413,10421,10423,10431,10433,10441,
+ &10443,10511,10513,10521,10523,10531,10533,10541,10543,10551,
+ &10553,20113,20213,20223,20313,20323,20333,20413,20423,20433/
+ DATA (KCHG(I,4),I= 294, 500)/20443,20513,20523,20533,20543,20553,
+ &100443,100553,1000001,1000002,1000003,1000004,1000005,1000006,
+ &1000011,1000012,1000013,1000014,1000015,1000016,1000021,1000022,
+ &1000023,1000024,1000025,1000035,1000037,1000039,2000001,2000002,
+ &2000003,2000004,2000005,2000006,2000011,2000012,2000013,2000014,
+ &2000015,2000016,4000001,4000002,4000011,4000012,163*0/
+ DATA (PMAS(I,1),I= 1, 214)/0.0099D0,0.0056D0,0.199D0,1.35D0,
+ &5D0,175D0,2*400D0,2*0D0,0.00051D0,0D0,0.10566D0,0D0,1.777D0,0D0,
+ &400D0,5*0D0,91.187D0,80.33D0,80D0,6*0D0,500D0,900D0,500D0,
+ &3*300D0,350D0,200D0,5000D0,10*0D0,3*100D0,3*200D0,26*0D0,1D0,2D0,
+ &5D0,16*0D0,0.13498D0,0.7685D0,1.318D0,0.49767D0,0D0,0.13957D0,
+ &0.7669D0,1.318D0,0D0,0.54745D0,0.78194D0,1.275D0,2*0.49767D0,
+ &0.8961D0,1.432D0,0.4936D0,0.8916D0,1.425D0,0D0,0.95777D0,
+ &1.0194D0,1.525D0,1.8693D0,2.01D0,2.46D0,1.8645D0,2.0067D0,2.46D0,
+ &1.9685D0,2.1124D0,2.5735D0,0D0,2.9798D0,3.09688D0,3.5562D0,
+ &5.2792D0,5.3248D0,5.83D0,5.2789D0,5.3248D0,5.83D0,5.3693D0,
+ &5.4163D0,6.07D0,6.594D0,6.602D0,7.35D0,9.4D0,9.4603D0,9.9132D0,
+ &0.77133D0,1.234D0,0.57933D0,0.77133D0,0D0,0.93957D0,1.233D0,
+ &0.77133D0,0D0,0.93827D0,1.232D0,1.231D0,0.80473D0,0.92953D0,
+ &1.19744D0,1.3872D0,1.11568D0,0.80473D0,0.92953D0,1.19255D0,
+ &1.3837D0,1.18937D0,1.3828D0,1.09361D0,1.3213D0,1.535D0,1.3149D0,
+ &1.5318D0,1.67245D0,1.96908D0,2.00808D0,2.4521D0,2.5D0,2.2849D0,
+ &2.4703D0,1.96908D0,2.00808D0,2.4535D0,2.5D0,2.4529D0,2.5D0,
+ &2.4656D0,2.15432D0,2.17967D0,2.55D0,2.63D0,2.55D0,2.63D0,2.704D0,
+ &2.8D0,3.27531D0,3.59798D0,3.65648D0,3.59798D0,3.65648D0,
+ &3.78663D0,3.82466D0,4.91594D0,5.38897D0,5.40145D0,5.8D0,5.81D0/
+ DATA (PMAS(I,1),I= 215, 500)/5.641D0,5.84D0,7.00575D0,5.38897D0,
+ &5.40145D0,5.8D0,5.81D0,5.8D0,5.81D0,5.84D0,7.00575D0,5.56725D0,
+ &5.57536D0,5.96D0,5.97D0,5.96D0,5.97D0,6.12D0,6.13D0,7.19099D0,
+ &6.67143D0,6.67397D0,7.03724D0,7.0485D0,7.03724D0,7.0485D0,
+ &7.21101D0,7.219D0,8.30945D0,8.31325D0,10.07354D0,10.42272D0,
+ &10.44144D0,10.42272D0,10.44144D0,10.60209D0,10.61426D0,
+ &11.70767D0,11.71147D0,15.11061D0,0.9835D0,1.231D0,0.9835D0,
+ &1.231D0,1D0,1.17D0,1.429D0,1.29D0,1.429D0,1.29D0,2*1.4D0,2.272D0,
+ &2.424D0,2.272D0,2.424D0,2.5D0,2.536D0,3.4151D0,3.46D0,5.68D0,
+ &5.73D0,5.68D0,5.73D0,5.92D0,5.97D0,7.25D0,7.3D0,9.8598D0,9.875D0,
+ &2*1.23D0,1.282D0,2*1.402D0,1.427D0,2*2.372D0,2.56D0,3.5106D0,
+ &2*5.78D0,6.02D0,7.3D0,9.8919D0,3.686D0,10.0233D0,32*500D0,
+ &4*400D0,163*0D0/
+ DATA (PMAS(I,2),I= 1, 500)/5*0D0,1.4D0,16*0D0,2.47833D0,
+ &2.069D0,0.00295D0,6*0D0,14.67788D0,0D0,16.79392D0,8.45231D0,
+ &4.93534D0,5.80468D0,19.1898D0,0.39162D0,417.35283D0,62*0D0,
+ &0.151D0,0.107D0,3*0D0,0.149D0,0.107D0,2*0D0,0.00843D0,0.185D0,
+ &2*0D0,0.0505D0,0.109D0,0D0,0.0498D0,0.098D0,0D0,0.0002D0,
+ &0.00443D0,0.076D0,2*0D0,0.023D0,2*0D0,0.023D0,2*0D0,0.015D0,0D0,
+ &0.0013D0,0D0,0.002D0,2*0D0,0.02D0,2*0D0,0.02D0,2*0D0,0.02D0,
+ &2*0D0,0.02D0,4*0D0,0.12D0,4*0D0,0.12D0,3*0D0,2*0.12D0,3*0D0,
+ &0.0394D0,4*0D0,0.036D0,0D0,0.0358D0,2*0D0,0.0099D0,0D0,0.0091D0,
+ &74*0D0,0.06D0,0.142D0,0.06D0,0.142D0,0D0,0.36D0,0.287D0,0.09D0,
+ &0.287D0,0.09D0,0.25D0,0.08D0,0.05D0,0.02D0,0.05D0,0.02D0,0.05D0,
+ &0D0,0.014D0,0.01D0,8*0.05D0,0D0,0.01D0,2*0.4D0,0.025D0,2*0.174D0,
+ &0.053D0,3*0.05D0,0.0009D0,4*0.05D0,3*0D0,19*1D0,0D0,7*1D0,0D0,
+ &1D0,0D0,1D0,0D0,2.60511D0,2.60839D0,0.42904D0,0.41921D0,163*0D0/
+ DATA (PMAS(I,3),I= 1, 500)/5*0D0,14D0,16*0D0,24.78326D0,
+ &20.69D0,0.02954D0,6*0D0,146.77876D0,0D0,167.93924D0,84.52308D0,
+ &49.35344D0,58.04675D0,191.89803D0,3.91624D0,4173.5283D0,62*0D0,
+ &0.4D0,0.25D0,3*0D0,0.4D0,0.25D0,2*0D0,0.1D0,0.17D0,2*0D0,0.2D0,
+ &0.12D0,0D0,0.2D0,0.12D0,0D0,0.002D0,0.015D0,0.2D0,2*0D0,0.12D0,
+ &2*0D0,0.12D0,2*0D0,0.05D0,0D0,0.005D0,0D0,0.01D0,2*0D0,0.05D0,
+ &2*0D0,0.05D0,2*0D0,0.05D0,2*0D0,0.05D0,4*0D0,0.14D0,4*0D0,0.14D0,
+ &3*0D0,2*0.14D0,3*0D0,0.04D0,4*0D0,0.035D0,0D0,0.035D0,2*0D0,
+ &0.05D0,0D0,0.05D0,74*0D0,0.05D0,0.25D0,0.05D0,0.25D0,0D0,0.2D0,
+ &0.4D0,0.005D0,0.4D0,0.01D0,0.35D0,0.001D0,0.1D0,0.08D0,0.1D0,
+ &0.08D0,0.1D0,0D0,0.05D0,0.02D0,6*0.1D0,0.05D0,0.1D0,0D0,0.02D0,
+ &2*0.3D0,0.05D0,2*0.3D0,0.02D0,2*0.1D0,0.03D0,0.001D0,4*0.1D0,
+ &3*0D0,19*10D0,0.00001D0,7*10D0,0.00001D0,10D0,0.00001D0,10D0,
+ &0.00001D0,26.05109D0,26.08388D0,4.29043D0,4.19206D0,163*0D0/
+ DATA (PMAS(I,4),I= 1, 500)/12*0D0,658654D0,0D0,0.0872D0,68*0D0,
+ &0.1D0,0.387D0,16*0D0,0.00003D0,2*0D0,15500D0,0D0,7804.5D0,6*0D0,
+ &26.762D0,3*0D0,3709D0,6*0D0,0.317D0,2*0D0,0.1244D0,2*0D0,0.14D0,
+ &6*0D0,0.468D0,2*0D0,0.462D0,2*0D0,0.483D0,2*0D0,0.15D0,19*0D0,
+ &44.34D0,0D0,78.88D0,4*0D0,23.96D0,2*0D0,49.1D0,0D0,87.1D0,0D0,
+ &24.6D0,4*0D0,0.0618D0,0.029D0,6*0D0,0.106D0,6*0D0,0.019D0,2*0D0,
+ &7*0.1D0,4*0D0,0.342D0,2*0.387D0,6*0D0,2*0.387D0,6*0D0,0.387D0,
+ &0D0,0.387D0,2*0D0,8*0.387D0,0D0,9*0.387D0,83*0D0,163*0D0/
+ DATA PARF/
+ & 0.5D0,0.25D0, 0.5D0,0.25D0, 1D0, 0.5D0, 0D0, 0D0, 0D0, 0D0,
+ 1 0.5D0, 0D0, 0.5D0, 0D0, 1D0, 1D0, 0D0, 0D0, 0D0, 0D0,
+ 2 0.5D0, 0D0, 0.5D0, 0D0, 1D0, 1D0, 0D0, 0D0, 0D0, 0D0,
+ 3 0.5D0, 0D0, 0.5D0, 0D0, 1D0, 1D0, 0D0, 0D0, 0D0, 0D0,
+ 4 0.5D0, 0D0, 0.5D0, 0D0, 1D0, 1D0, 0D0, 0D0, 0D0, 0D0,
+ 5 0.5D0, 0D0, 0.5D0, 0D0, 1D0, 1D0, 0D0, 0D0, 0D0, 0D0,
+ 6 0.75D0, 0.5D0, 0D0,0.1667D0,0.0833D0,0.1667D0,0D0,0D0,0D0, 0D0,
+ 7 0D0, 0D0, 1D0,0.3333D0,0.6667D0,0.3333D0,0D0,0D0,0D0, 0D0,
+ 8 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 9 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ & 0.325D0,0.325D0,0.5D0,1.6D0, 5.0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 1 0D0,0.11D0,0.16D0,0.048D0,0.50D0,0.45D0,0.55D0,0.60D0,0D0,0D0,
+ 2 0.2D0, 0.1D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
+ 3 60*0D0,
+ 4 0.2D0, 0.5D0, 8*0D0,
+ 5 1800*0D0/
+ DATA ((VCKM(I,J),J=1,4),I=1,4)/
+ & 0.95113D0, 0.04884D0, 0.00003D0, 0.00000D0,
+ & 0.04884D0, 0.94940D0, 0.00176D0, 0.00000D0,
+ & 0.00003D0, 0.00176D0, 0.99821D0, 0.00000D0,
+ & 0.00000D0, 0.00000D0, 0.00000D0, 1.00000D0/
+
+C...PYDAT3, with particle decay parameters and data.
+ DATA (MDCY(I,1),I= 1, 500)/5*0,3*1,6*0,1,0,1,5*0,3*1,6*0,1,0,
+ &7*1,10*0,2*1,0,3*1,26*0,3*1,16*0,3*1,3*0,2*1,0,7*1,0,2*1,0,12*1,
+ &0,18*1,0,1,4*0,1,3*0,2*1,2*0,3*1,2*0,4*1,0,5*1,2*0,4*1,2*0,5*1,
+ &2*0,6*1,0,7*1,2*0,5*1,2*0,6*1,2*0,7*1,2*0,8*1,0,75*1,0,7*1,0,1,0,
+ &1,0,4*1,163*0/
+ DATA (MDCY(I,2),I= 1, 500)/1,9,17,25,33,41,54,64,2*0,74,78,80,
+ &85,87,141,143,148,2*0,151,160,172,188,208,6*0,287,0,309,332,414,
+ &494,521,524,525,10*0,534,539,0,544,564,588,26*0,606,607,611,16*0,
+ &620,622,627,636,0,645,647,649,0,656,664,670,679,681,683,686,696,
+ &702,705,0,716,722,733,739,802,805,813,874,876,884,917,919,0,923,
+ &924,927,929,965,966,974,1010,1011,1019,1058,1059,1063,1094,1095,
+ &1099,1100,1109,0,1111,4*0,1112,3*0,1115,1118,2*0,1119,1121,1124,
+ &2*0,1128,1129,1132,1135,0,1138,1143,1145,1148,1150,2*0,1154,1155,
+ &1156,1232,2*0,1236,1237,1238,1239,1240,2*0,1244,1245,1247,1248,
+ &1250,1254,0,1255,1259,1263,1267,1271,1275,1279,2*0,1283,1284,
+ &1285,1302,1311,2*0,1320,1321,1322,1323,1324,1333,2*0,1342,1343,
+ &1344,1345,1346,1355,1356,2*0,1365,1374,1383,1392,1401,1410,1419,
+ &1428,0,1437,1446,1455,1464,1473,1482,1491,1500,1509,1518,1519,
+ &1520,1521,1522,1527,1530,1532,1537,1539,1544,1551,1555,1557,1559,
+ &1561,1563,1565,1567,1569,1570,1572,1574,1576,1578,1580,1582,1584,
+ &1586,1588,1589,1591,1593,1607,1609,1611,1615,1617,1619,1621,1623,
+ &1625,1627,1629,1631,1633,1644,1658,1670,1682,1694,1706,1718,1731,
+ &1742,1753,1764,1775,1786,1797,1858,1863,1965,2021,2139,2273,0,
+ &2344,2360,2376,2392,2408,2424,2440,0,2455,0,2470,0,2485,2489,
+ &2493,2496,163*0/
+ DATA (MDCY(I,3),I= 1, 500)/5*8,13,2*10,2*0,4,2,5,2,54,2,5,3,
+ &2*0,9,12,16,20,79,6*0,22,0,23,82,80,27,3,1,9,10*0,2*5,0,20,24,18,
+ &26*0,1,4,9,16*0,2,5,2*9,0,2*2,7,0,8,6,9,2*2,3,10,6,3,11,0,6,11,6,
+ &63,3,8,61,2,8,33,2,4,0,1,3,2,36,1,8,36,1,8,39,1,4,31,1,4,1,9,2,0,
+ &1,4*0,3,3*0,3,1,2*0,2,3,4,2*0,1,3*3,0,5,2,3,2,4,2*0,2*1,76,4,2*0,
+ &4*1,4,2*0,1,2,1,2,4,1,0,7*4,2*0,2*1,17,2*9,2*0,4*1,2*9,2*0,4*1,9,
+ &1,9,2*0,8*9,0,9*9,4*1,5,3,2,5,2,5,7,4,7*2,1,9*2,1,2*2,14,2*2,4,
+ &9*2,11,14,5*12,13,6*11,61,5,102,56,118,134,71,0,6*16,15,0,15,0,
+ &15,0,2*4,3,2,163*0/
+ DATA (MDME(I,1),I= 1,4000)/6*1,-1,7*1,-1,7*1,-1,7*1,-1,7*1,-1,
+ &7*1,-1,1,-1,12*1,2*-1,8*1,2*-1,73*1,-1,2*1,-1,6*1,2*-1,7*1,2*-1,
+ &3*1,-1,6*1,2*-1,6*1,2*-1,3*1,-1,3*1,-1,3*1,5*-1,3*1,-1,85*1,2*-1,
+ &6*1,8*-1,3*1,-1,3*1,-1,3*1,5*-1,3*1,4*-1,197*1,2*-1,2*1,-1,20*1,
+ &2*-1,6*1,2*-1,7*1,-1,3*1,-1,3*1,5*-1,3*1,-1,1,-1,6*1,2*-1,6*1,
+ &2*-1,1892*1,1503*0/
+ DATA (MDME(I,2),I= 1,4000)/43*102,4*0,102,0,4*53,3*102,4*0,102,
+ &2*0,3*102,4*0,102,2*0,6*102,42,6*102,2*42,2*0,8*41,2*0,36*41,
+ &8*102,0,102,0,102,2*0,21*102,8*32,8*0,16*32,21*0,62*53,8*32,14*0,
+ &16*32,27*0,62*53,18*0,62*53,9*0,18*53,3*32,0,6*32,3*0,2*32,3*0,
+ &2*32,7*0,8*32,12*0,16*32,6*0,8*32,8*0,12,2*42,2*11,9*42,0,2,3,
+ &15*0,4*42,5*0,3,12*0,2,3*0,1,0,3,16*0,2*3,15*0,2*42,2*3,18*0,2*3,
+ &3*0,1,11*0,22*42,41*0,2*3,9*0,16*42,45*0,3,10*0,10*42,20*0,2*13,
+ &6*0,12,2*0,12,0,12,14*42,16*0,48,3*13,2*42,9*0,14*42,16*0,48,
+ &3*13,2*42,9*0,14*42,19*0,48,3*13,2*42,6*0,2*11,28*42,5*0,32,3*0,
+ &4*32,2*4,0,32,45*0,14*42,52*0,10*13,2*42,2*11,4*0,2*42,2*11,6*0,
+ &2*42,2*11,0,2*42,2*11,2*42,2*11,2*42,2*11,2*42,2*11,2*42,2*11,
+ &2*42,2*11,2*42,2*11,2*0,3*42,8*0,48,3*13,20*42,4*0,18*42,4*0,
+ &9*42,0,162*42,50*0,2*12,17*0,2*32,33*0,12,9*0,32,2*0,12,11*0,
+ &4*32,2*4,5*0,828*53,1515*0/
+ DATA (BRAT(I) ,I= 1, 418)/43*0D0,0.00003D0,0.00177D0,0.9982D0,
+ &33*0D0,1D0,6*0D0,0.1783D0,0.1735D0,0.1131D0,0.2494D0,0.003D0,
+ &0.09D0,0.0027D0,0.01D0,0.0014D0,0.0012D0,2*0.00025D0,0.0071D0,
+ &0.012D0,0.0004D0,0.00075D0,0.00006D0,2*0.00078D0,0.0034D0,0.08D0,
+ &0.011D0,0.0191D0,0.00006D0,0.005D0,0.0133D0,0.0067D0,0.0005D0,
+ &0.0035D0,0.0006D0,0.0015D0,0.00021D0,0.0002D0,0.00075D0,0.0001D0,
+ &0.0002D0,0.0011D0,3*0.0002D0,0.00022D0,0.0004D0,0.0001D0,
+ &2*0.00205D0,2*0.00069D0,0.00025D0,0.00051D0,0.00025D0,35*0D0,
+ &0.15403D0,0.11945D0,0.15402D0,0.11931D0,0.15215D0,3*0D0,
+ &0.03357D0,0.0668D0,0.03357D0,0.0668D0,0.0335D0,0.0668D0,2*0D0,
+ &0.32139D0,0.0165D0,2*0D0,0.0165D0,0.32067D0,2*0D0,0.00001D0,
+ &0.00059D0,6*0D0,2*0.10814D0,0.10806D0,3*0D0,0.00031D0,0.04438D0,
+ &0.88031D0,4*0D0,0.0002D0,0.05531D0,0D0,0.01838D0,0.00071D0,0D0,
+ &0.00009D0,0.00032D0,62*0D0,0.14449D0,0.11223D0,0.14449D0,
+ &0.11223D0,0.14443D0,0.05782D0,2*0D0,0.03172D0,0.06305D0,
+ &0.03172D0,0.06305D0,0.03172D0,0.06305D0,8*0D0,0.24928D0,0.0128D0,
+ &0.00001D0,0D0,0.0128D0,0.24882D0,0.00039D0,0D0,0.00001D0,
+ &0.00046D0,0.22153D0,5*0D0,2*0.08464D0,0.08463D0,7*0D0,0.00005D0,
+ &0.00097D0,5*0D0,0.00007D0,0D0,0.00049D0,0.00001D0,0.00006D0,
+ &0.30591D0,0.68863D0,0D0,0.0038D0,66*0D0,0.00008D0,0.00167D0/
+ DATA (BRAT(I) ,I= 419, 722)/5*0D0,0.00013D0,0D0,0.00294D0,
+ &0.00001D0,3*0D0,0.99517D0,63*0D0,0.00002D0,0.07231D0,2*0D0,
+ &0.00001D0,0.00269D0,0D0,0.92497D0,18*0D0,0.0024D0,0.99483D0,
+ &0.00278D0,1D0,3*0.21511D0,0.21478D0,2*0D0,2*0.06995D0,2*0D0,1D0,
+ &3*0D0,0.95D0,0.05D0,3*0D0,4*0.25D0,16*0D0,4*0.25D0,20*0D0,1D0,
+ &17*0D0,1D0,2*0.08D0,0.76D0,0.08D0,2*0.105D0,0.04D0,0.5D0,0.08D0,
+ &0.14D0,0.01D0,0.015D0,0.005D0,0.988D0,0.012D0,0.998739D0,
+ &0.00079D0,0.00038D0,0.000046D0,0.000045D0,2*0.34725D0,0.144D0,
+ &0.104D0,0.0245D0,2*0.01225D0,0.0028D0,0.0057D0,0.2112D0,0.1256D0,
+ &2*0.1939D0,2*0.1359D0,0.002D0,0.001D0,0.0006D0,0.999877D0,
+ &0.000123D0,0.99955D0,0.00045D0,2*0.34725D0,0.144D0,0.104D0,
+ &0.049D0,0.0028D0,0.0057D0,0.3923D0,0.321D0,0.2317D0,0.0478D0,
+ &0.0049D0,0.0013D0,0.0003D0,0.0007D0,0.89D0,0.08693D0,0.0221D0,
+ &0.00083D0,2*0.00007D0,0.564D0,0.282D0,0.072D0,0.028D0,0.023D0,
+ &2*0.0115D0,0.005D0,0.003D0,0.6861D0,0.3139D0,2*0.5D0,0.665D0,
+ &0.333D0,0.002D0,0.333D0,0.166D0,0.168D0,0.084D0,0.087D0,0.043D0,
+ &0.059D0,2*0.029D0,0.002D0,0.6352D0,0.2116D0,0.0559D0,0.0173D0,
+ &0.0482D0,0.0318D0,0.666D0,0.333D0,0.001D0,0.332D0,0.166D0,
+ &0.168D0,0.084D0,0.086D0,0.043D0,0.059D0,2*0.029D0,2*0.002D0,
+ &0.437D0,0.208D0,0.302D0,0.0302D0,0.0212D0,0.0016D0,0.48947D0/
+ DATA (BRAT(I) ,I= 723, 897)/0.34D0,3*0.043D0,0.027D0,0.0126D0,
+ &0.0013D0,0.0003D0,0.00025D0,0.00008D0,0.444D0,2*0.222D0,0.104D0,
+ &2*0.004D0,0.07D0,0.065D0,2*0.005D0,2*0.011D0,5*0.001D0,0.07D0,
+ &0.065D0,2*0.005D0,2*0.011D0,5*0.001D0,0.026D0,0.019D0,0.066D0,
+ &0.041D0,0.045D0,0.076D0,0.0073D0,2*0.0047D0,0.026D0,0.001D0,
+ &0.0006D0,0.0066D0,0.005D0,2*0.003D0,2*0.0006D0,2*0.001D0,0.006D0,
+ &0.005D0,0.012D0,0.0057D0,0.067D0,0.008D0,0.0022D0,0.027D0,
+ &0.004D0,0.019D0,0.012D0,0.002D0,0.009D0,0.0218D0,0.001D0,0.022D0,
+ &0.087D0,0.001D0,0.0019D0,0.0015D0,0.0028D0,0.683D0,0.306D0,
+ &0.011D0,0.3D0,0.15D0,0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,
+ &0.034D0,0.027D0,2*0.002D0,2*0.004D0,2*0.002D0,0.034D0,0.027D0,
+ &2*0.002D0,2*0.004D0,2*0.002D0,0.0365D0,0.045D0,0.073D0,0.062D0,
+ &3*0.021D0,0.0061D0,0.015D0,0.025D0,0.0088D0,0.074D0,0.0109D0,
+ &0.0041D0,0.002D0,0.0035D0,0.0011D0,0.001D0,0.0027D0,2*0.0016D0,
+ &0.0018D0,0.011D0,0.0063D0,0.0052D0,0.018D0,0.016D0,0.0034D0,
+ &0.0036D0,0.0009D0,0.0006D0,0.015D0,0.0923D0,0.018D0,0.022D0,
+ &0.0077D0,0.009D0,0.0075D0,0.024D0,0.0085D0,0.067D0,0.0511D0,
+ &0.017D0,0.0004D0,0.0028D0,0.619D0,0.381D0,0.3D0,0.15D0,0.16D0,
+ &0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,0.01D0,2*0.02D0,0.03D0,
+ &2*0.005D0,2*0.02D0,0.03D0,2*0.005D0,0.015D0,0.037D0,0.028D0/
+ DATA (BRAT(I) ,I= 898,1063)/0.079D0,0.095D0,0.052D0,0.0078D0,
+ &4*0.001D0,0.028D0,0.033D0,0.026D0,0.05D0,0.01D0,4*0.005D0,0.25D0,
+ &0.0952D0,0.94D0,0.06D0,2*0.4D0,2*0.1D0,1D0,0.0602D0,0.0601D0,
+ &0.8797D0,0.135D0,0.865D0,0.02D0,0.055D0,2*0.005D0,0.008D0,
+ &0.012D0,0.02D0,0.055D0,2*0.005D0,0.008D0,0.012D0,0.01D0,0.03D0,
+ &0.0035D0,0.011D0,0.0055D0,0.0042D0,0.009D0,0.018D0,0.015D0,
+ &0.0185D0,0.0135D0,0.025D0,0.0004D0,0.0007D0,0.0008D0,0.0014D0,
+ &0.0019D0,0.0025D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,
+ &1D0,0.3D0,0.15D0,0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,
+ &0.02D0,0.055D0,2*0.005D0,0.008D0,0.012D0,0.02D0,0.055D0,
+ &2*0.005D0,0.008D0,0.012D0,0.01D0,0.03D0,0.0035D0,0.011D0,
+ &0.0055D0,0.0042D0,0.009D0,0.018D0,0.015D0,0.0185D0,0.0135D0,
+ &0.025D0,0.0004D0,0.0007D0,0.0008D0,0.0014D0,0.0019D0,0.0025D0,
+ &0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,1D0,0.3D0,0.15D0,
+ &0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,0.02D0,0.055D0,
+ &2*0.005D0,0.008D0,0.012D0,0.02D0,0.055D0,2*0.005D0,0.008D0,
+ &0.012D0,0.01D0,0.03D0,0.0035D0,0.011D0,0.0055D0,0.0042D0,0.009D0,
+ &0.018D0,0.015D0,0.0185D0,0.0135D0,0.025D0,2*0.0002D0,0.0007D0,
+ &2*0.0004D0,0.0014D0,0.001D0,0.0009D0,0.0025D0,0.4291D0,0.08D0,
+ &0.07D0,0.02D0,0.015D0,0.005D0,1D0,2*0.3D0,2*0.2D0,0.047D0/
+ DATA (BRAT(I) ,I=1064,1254)/0.122D0,0.006D0,0.012D0,0.035D0,
+ &0.012D0,0.035D0,0.003D0,0.007D0,0.15D0,0.037D0,0.008D0,0.002D0,
+ &0.05D0,0.015D0,0.003D0,0.001D0,0.014D0,0.042D0,0.014D0,0.042D0,
+ &0.24D0,0.065D0,0.012D0,0.003D0,0.001D0,0.002D0,0.001D0,0.002D0,
+ &0.014D0,0.003D0,1D0,2*0.3D0,2*0.2D0,1D0,0.0252D0,0.0248D0,
+ &0.0267D0,0.015D0,0.045D0,0.015D0,0.045D0,0.7743D0,0.029D0,0.22D0,
+ &0.78D0,1D0,0.331D0,0.663D0,0.006D0,0.663D0,0.331D0,0.006D0,1D0,
+ &0.999D0,0.001D0,0.88D0,2*0.06D0,0.639D0,0.358D0,0.002D0,0.001D0,
+ &1D0,0.88D0,2*0.06D0,0.516D0,0.483D0,0.001D0,0.88D0,2*0.06D0,
+ &0.9988D0,0.0001D0,0.0006D0,0.0004D0,0.0001D0,0.667D0,0.333D0,
+ &0.9954D0,0.0011D0,0.0035D0,0.333D0,0.667D0,0.676D0,0.234D0,
+ &0.085D0,0.005D0,2*1D0,0.018D0,2*0.005D0,0.003D0,0.002D0,
+ &2*0.006D0,0.018D0,2*0.005D0,0.003D0,0.002D0,2*0.006D0,0.0066D0,
+ &0.025D0,0.016D0,0.0088D0,2*0.005D0,0.0058D0,0.005D0,0.0055D0,
+ &4*0.004D0,2*0.002D0,2*0.004D0,0.003D0,0.002D0,2*0.003D0,
+ &3*0.002D0,2*0.001D0,0.002D0,2*0.001D0,2*0.002D0,0.0013D0,
+ &0.0018D0,5*0.001D0,4*0.003D0,2*0.005D0,2*0.002D0,2*0.001D0,
+ &2*0.002D0,2*0.001D0,0.2432D0,0.057D0,2*0.035D0,0.15D0,2*0.075D0,
+ &0.03D0,2*0.015D0,2*0.08D0,0.76D0,0.08D0,4*1D0,2*0.08D0,0.76D0,
+ &0.08D0,1D0,2*0.5D0,1D0,2*0.5D0,2*0.08D0,0.76D0,0.08D0,1D0/
+ DATA (BRAT(I) ,I=1255,1447)/2*0.08D0,0.76D0,3*0.08D0,0.76D0,
+ &3*0.08D0,0.76D0,3*0.08D0,0.76D0,3*0.08D0,0.76D0,3*0.08D0,0.76D0,
+ &3*0.08D0,0.76D0,0.08D0,2*1D0,2*0.105D0,0.04D0,0.0077D0,0.02D0,
+ &0.0235D0,0.0285D0,0.0435D0,0.0011D0,0.0022D0,0.0044D0,0.4291D0,
+ &0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,
+ &0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,
+ &0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,4*1D0,2*0.105D0,0.04D0,
+ &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,
+ &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,4*1D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,1D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,
+ &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0/
+ DATA (BRAT(I) ,I=1448,1648)/0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,
+ &0.015D0,0.005D0,4*1D0,0.52D0,0.26D0,0.11D0,2*0.055D0,0.333D0,
+ &0.334D0,0.333D0,0.667D0,0.333D0,0.28D0,0.14D0,0.313D0,0.157D0,
+ &0.11D0,0.667D0,0.333D0,0.28D0,0.14D0,0.313D0,0.157D0,0.11D0,
+ &0.36D0,0.18D0,0.03D0,2*0.015D0,2*0.2D0,4*0.25D0,0.667D0,0.333D0,
+ &0.667D0,0.333D0,0.667D0,0.333D0,0.667D0,0.333D0,4*0.5D0,0.007D0,
+ &0.993D0,1D0,0.667D0,0.333D0,0.667D0,0.333D0,0.667D0,0.333D0,
+ &0.667D0,0.333D0,8*0.5D0,0.02D0,0.98D0,1D0,4*0.5D0,3*0.146D0,
+ &3*0.05D0,0.15D0,2*0.05D0,4*0.024D0,0.066D0,0.667D0,0.333D0,
+ &0.667D0,0.333D0,4*0.25D0,0.667D0,0.333D0,0.667D0,0.333D0,2*0.5D0,
+ &0.273D0,0.727D0,0.667D0,0.333D0,0.667D0,0.333D0,4*0.5D0,0.35D0,
+ &0.65D0,2*0.0083D0,0.1866D0,0.324D0,0.184D0,0.027D0,0.001D0,
+ &0.093D0,0.087D0,0.078D0,0.0028D0,3*0.014D0,0.008D0,0.024D0/
+ DATA (BRAT(I) ,I=1649,4000)/0.008D0,0.024D0,0.425D0,0.02D0,
+ &0.185D0,0.088D0,0.043D0,0.067D0,0.066D0,827*0D0,0.8516D0,
+ &0.00539D0,0.04483D0,0.09819D0,0.85053D0,0.02152D0,0.02989D0,
+ &0.09806D0,0.29439D0,0.10943D0,0.59618D0,0.38983D0,0.61017D0,
+ &1503*0D0/
+ DATA (KFDP(I,1),I= 1, 375)/21,22,23,4*-24,25,21,22,23,4*24,25,
+ &21,22,23,4*-24,25,21,22,23,4*24,25,21,22,23,4*-24,25,21,22,23,
+ &4*24,25,37,1000022,1000023,1000025,1000035,21,22,23,4*-24,25,
+ &2*-37,21,22,23,4*24,25,2*37,22,23,-24,25,23,24,-12,22,23,-24,25,
+ &23,24,-12,-14,48*16,22,23,-24,25,23,24,22,23,-24,25,-37,23,24,37,
+ &1,2,3,4,5,6,7,8,21,1,2,3,4,5,6,7,8,11,13,15,17,1,2,3,4,5,6,7,8,
+ &11,12,13,14,15,16,17,18,4*-1,4*-3,4*-5,4*-7,-11,-13,-15,-17,1,2,
+ &3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,1000022,2*1000023,
+ &3*1000025,4*1000035,2*1000024,2*1000037,1000001,2000001,1000001,
+ &-1000001,1000002,2000002,1000002,-1000002,1000003,2000003,
+ &1000003,-1000003,1000004,2000004,1000004,-1000004,1000005,
+ &2000005,1000005,-1000005,1000006,2000006,1000006,-1000006,
+ &1000011,2000011,1000011,-1000011,1000012,2000012,1000012,
+ &-1000012,1000013,2000013,1000013,-1000013,1000014,2000014,
+ &1000014,-1000014,1000015,2000015,1000015,-1000015,1000016,
+ &2000016,1000016,-1000016,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,
+ &24,37,2*23,25,35,4*-1,4*-3,4*-5,4*-7,-11,-13,-15,-17,3*24,1,2,3,
+ &4,5,6,7,8,11,13,15,17,21,2*22,23,24,23,25,36,1000022,2*1000023,
+ &3*1000025,4*1000035,2*1000024,2*1000037,1000001,2000001,1000001,
+ &-1000001,1000002,2000002,1000002,-1000002,1000003,2000003/
+ DATA (KFDP(I,1),I= 376, 606)/1000003,-1000003,1000004,2000004,
+ &1000004,-1000004,1000005,2000005,1000005,-1000005,1000006,
+ &2000006,1000006,-1000006,1000011,2000011,1000011,-1000011,
+ &1000012,2000012,1000012,-1000012,1000013,2000013,1000013,
+ &-1000013,1000014,2000014,1000014,-1000014,1000015,2000015,
+ &1000015,-1000015,1000016,2000016,1000016,-1000016,1,2,3,4,5,6,7,
+ &8,11,13,15,17,21,2*22,23,24,23,1000022,2*1000023,3*1000025,
+ &4*1000035,2*1000024,2*1000037,1000001,2000001,1000001,-1000001,
+ &1000002,2000002,1000002,-1000002,1000003,2000003,1000003,
+ &-1000003,1000004,2000004,1000004,-1000004,1000005,2000005,
+ &1000005,-1000005,1000006,2000006,1000006,-1000006,1000011,
+ &2000011,1000011,-1000011,1000012,2000012,1000012,-1000012,
+ &1000013,2000013,1000013,-1000013,1000014,2000014,1000014,
+ &-1000014,1000015,2000015,1000015,-1000015,1000016,2000016,
+ &1000016,-1000016,-1,-3,-5,-7,-11,-13,-15,-17,24,2*1000022,
+ &2*1000023,2*1000025,2*1000035,1000006,2000006,1000006,2000006,
+ &-1000001,-1000003,-1000011,-1000013,-1000015,-2000015,5,6,21,2,1,
+ &2,3,4,5,6,11,13,15,4,5,11,13,15,2*4,-11,-13,-15,2*24,2*52,1,2,3,
+ &4,5,6,7,8,11,12,13,14,15,16,17,18,2*24,2*52,4*-1,4*-3,4*-5,4*-7,
+ &-11,-13,-15,-17,22,23,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,82/
+ DATA (KFDP(I,1),I= 607,1001)/-11,-13,2*2,-12,-14,-16,2*-2,2*-4,
+ &-2,-4,2*22,211,111,221,13,11,213,-213,221,223,321,130,310,111,
+ &331,111,211,-12,12,-14,14,211,111,22,-13,-11,2*211,213,113,221,
+ &223,321,211,331,22,111,211,2*22,211,22,111,211,22,211,221,111,11,
+ &211,111,2*211,321,130,310,221,111,211,111,130,310,321,2*311,321,
+ &311,323,313,323,313,321,3*311,-13,3*211,12,14,311,2*321,311,321,
+ &313,323,313,323,311,4*321,211,111,3*22,111,321,130,-213,113,213,
+ &211,22,111,11,13,211,321,130,310,221,211,111,11*-11,11*-13,-311,
+ &-313,-311,-313,-20313,2*-311,-313,-311,-313,2*111,2*221,2*331,
+ &2*113,2*223,2*333,-311,-313,2*-321,211,-311,-321,333,-311,-313,
+ &-321,211,2*-321,2*-311,-321,211,113,421,2*411,421,411,423,413,
+ &423,413,421,411,8*-11,8*-13,-321,-323,-321,-323,-311,2*-313,-311,
+ &-313,2*-311,-321,-10323,-321,-323,-321,-311,2*-313,211,111,333,
+ &3*-321,-311,-313,-321,-313,310,333,211,2*-321,-311,-313,-311,211,
+ &-321,3*-311,211,113,321,2*421,411,421,413,423,413,423,411,421,
+ &-15,5*-11,5*-13,221,331,333,221,331,333,10221,211,213,211,213,
+ &321,323,321,323,2212,221,331,333,221,2*2,2*431,421,411,423,413,
+ &82,11,13,82,443,82,6*12,6*14,2*16,3*-411,3*-413,2*-411,2*-413,
+ &2*441,2*443,2*20443,2*2,2*4,2,4,511,521,511,523,513,523,513,521,
+ &511,6*12,6*14,2*16,3*-421,3*-423,2*-421,2*-423,2*441,2*443/
+ DATA (KFDP(I,1),I=1002,1428)/2*20443,2*2,2*4,2,4,521,511,521,513,
+ &523,513,523,511,521,6*12,6*14,2*16,3*-431,3*-433,2*-431,2*-433,
+ &3*441,3*443,3*20443,2*2,2*4,2,4,531,521,511,523,513,16,2*4,2*12,
+ &2*14,2*16,4*2,4*4,2*-11,2*-13,2*-1,2*-3,2*-11,2*-13,2*-1,541,511,
+ &521,513,523,21,11,13,15,1,2,3,4,21,22,553,21,2112,2212,2*2112,
+ &2212,2112,2*2212,2112,-12,3122,3212,3112,2212,2*2112,-12,2*3122,
+ &3222,3112,2212,2112,2212,3122,3222,3212,3122,3112,-12,-14,-12,
+ &3322,3312,2*3122,3212,3322,3312,3122,3322,3312,-12,2*4122,7*-11,
+ &7*-13,2*2224,2*2212,2*2214,2*3122,2*3212,2*3214,5*3222,4*3224,
+ &2*3322,3324,2*2224,7*2212,5*2214,2*2112,2*2114,2*3122,2*3212,
+ &2*3214,2*3222,2*3224,4*2,3,2*2,1,2*2,-11,-13,2*2,4*4122,-11,-13,
+ &2*2,3*4132,3*4232,-11,-13,2*2,4332,-11,-13,2*2,-11,-13,2*2,-11,
+ &-13,2*2,-11,-13,2*2,-11,-13,2*2,-11,-13,2*2,-11,-13,2*2,2*5122,
+ &-12,-14,-16,5*4122,441,443,20443,2*-2,2*-4,-2,-4,-12,-14,-16,
+ &2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,4*5122,-12,-14,-16,
+ &2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,2*5132,2*5232,-12,
+ &-14,-16,2*-2,2*-4,-2,-4,5332,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,
+ &-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,
+ &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,
+ &-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12/
+ DATA (KFDP(I,1),I=1429,1710)/-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,
+ &2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,
+ &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,
+ &-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,
+ &-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,221,223,221,
+ &223,211,111,321,130,310,213,113,-213,321,311,321,311,323,313,
+ &2*311,321,311,321,313,323,321,211,111,321,130,310,2*211,313,-313,
+ &323,-323,421,411,423,413,411,421,413,423,411,421,423,413,443,
+ &2*82,521,511,523,513,511,521,513,523,521,511,523,513,511,521,513,
+ &523,553,2*21,213,-213,113,213,10211,10111,-10211,2*221,213,2*113,
+ &-213,2*321,2*311,113,323,2*313,323,313,-313,323,-323,423,2*413,
+ &2*423,413,443,82,523,2*513,2*523,2*513,523,553,21,11,13,82,4*443,
+ &10441,20443,445,441,11,13,15,1,2,3,4,21,22,2*553,10551,20553,555,
+ &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,
+ &1000002,2000002,1000002,2000002,1000021,1000039,1000024,1000037,
+ &1000022,1000023,1000025,1000035,1000001,2000001,1000001,2000001,
+ &1000021,1000039,-1000024,-1000037,1000022,1000023,1000025,
+ &1000035,1000004,2000004,1000004,2000004,1000021,1000039,1000024,
+ &1000037,1000022,1000023,1000025,1000035,1000003,2000003,1000003,
+ &2000003,1000021,1000039,-1000024,-1000037,1000022,1000023/
+ DATA (KFDP(I,1),I=1711,1900)/1000025,1000035,1000006,2000006,
+ &1000006,2000006,1000021,1000039,1000024,1000037,1000022,1000023,
+ &1000025,1000035,1000005,2000005,1000005,2000005,1000021,1000022,
+ &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,
+ &1000012,2000012,1000012,2000012,1000039,1000024,1000037,1000022,
+ &1000023,1000025,1000035,1000011,2000011,1000011,2000011,1000039,
+ &-1000024,-1000037,1000022,1000023,1000025,1000035,1000014,
+ &2000014,1000014,2000014,1000039,1000024,1000037,1000022,1000023,
+ &1000025,1000035,1000013,2000013,1000013,2000013,1000039,-1000024,
+ &-1000037,1000022,1000023,1000025,1000035,1000016,2000016,1000016,
+ &2000016,1000039,1000024,1000037,1000022,1000023,1000025,1000035,
+ &1000015,2000015,1000015,2000015,1000039,1000001,-1000001,2000001,
+ &-2000001,1000002,-1000002,2000002,-2000002,1000003,-1000003,
+ &2000003,-2000003,1000004,-1000004,2000004,-2000004,1000005,
+ &-1000005,2000005,-2000005,1000006,-1000006,2000006,-2000006,
+ &6*1000022,6*1000023,6*1000025,6*1000035,1000024,-1000024,1000024,
+ &-1000024,1000024,-1000024,1000037,-1000037,1000037,-1000037,
+ &1000037,-1000037,10*1000039,16*1000022,1000024,-1000024,1000024,
+ &-1000024,1000024,-1000024,1000024,-1000024,1000024,-1000024,
+ &1000024,-1000024,1000037,-1000037,1000037,-1000037,1000037/
+ DATA (KFDP(I,1),I=1901,2095)/-1000037,1000037,-1000037,1000037,
+ &-1000037,1000037,-1000037,1000024,-1000024,1000037,-1000037,
+ &1000001,-1000001,2000001,-2000001,1000002,-1000002,2000002,
+ &-2000002,1000003,-1000003,2000003,-2000003,1000004,-1000004,
+ &2000004,-2000004,1000005,-1000005,2000005,-2000005,1000006,
+ &-1000006,2000006,-2000006,1000011,-1000011,2000011,-2000011,
+ &1000012,-1000012,2000012,-2000012,1000013,-1000013,2000013,
+ &-2000013,1000014,-1000014,2000014,-2000014,1000015,-1000015,
+ &2000015,-2000015,1000016,-1000016,2000016,-2000016,5*1000021,
+ &2*1000039,6*1000022,6*1000023,6*1000025,6*1000035,1000022,
+ &1000023,1000025,1000035,1000002,2000002,-1000001,-2000001,
+ &1000004,2000004,-1000003,-2000003,1000006,2000006,-1000005,
+ &-2000005,1000012,2000012,-1000011,-2000011,1000014,2000014,
+ &-1000013,-2000013,1000016,2000016,-1000015,-2000015,2*1000021,
+ &5*1000039,16*1000022,16*1000023,1000024,-1000024,1000024,
+ &-1000024,1000024,-1000024,1000024,-1000024,1000024,-1000024,
+ &1000024,-1000024,1000037,-1000037,1000037,-1000037,1000037,
+ &-1000037,1000037,-1000037,1000037,-1000037,1000037,-1000037,
+ &1000024,-1000024,1000037,-1000037,1000001,-1000001,2000001,
+ &-2000001,1000002,-1000002,2000002,-2000002,1000003,-1000003/
+ DATA (KFDP(I,1),I=2096,2323)/2000003,-2000003,1000004,-1000004,
+ &2000004,-2000004,1000005,-1000005,2000005,-2000005,1000006,
+ &-1000006,2000006,-2000006,1000011,-1000011,2000011,-2000011,
+ &1000012,-1000012,2000012,-2000012,1000013,-1000013,2000013,
+ &-2000013,1000014,-1000014,2000014,-2000014,1000015,-1000015,
+ &2000015,-2000015,1000016,-1000016,2000016,-2000016,5*1000021,
+ &5*1000039,16*1000022,16*1000023,16*1000025,1000024,-1000024,
+ &1000024,-1000024,1000024,-1000024,1000024,-1000024,1000024,
+ &-1000024,1000024,-1000024,1000037,-1000037,1000037,-1000037,
+ &1000037,-1000037,1000037,-1000037,1000037,-1000037,1000037,
+ &-1000037,1000024,-1000024,1000037,-1000037,1000001,-1000001,
+ &2000001,-2000001,1000002,-1000002,2000002,-2000002,1000003,
+ &-1000003,2000003,-2000003,1000004,-1000004,2000004,-2000004,
+ &1000005,-1000005,2000005,-2000005,1000006,-1000006,2000006,
+ &-2000006,1000011,-1000011,2000011,-2000011,1000012,-1000012,
+ &2000012,-2000012,1000013,-1000013,2000013,-2000013,1000014,
+ &-1000014,2000014,-2000014,1000015,-1000015,2000015,-2000015,
+ &1000016,-1000016,2000016,-2000016,5*1000021,2*1000039,15*1000024,
+ &6*1000022,6*1000023,6*1000025,6*1000035,1000022,1000023,1000025,
+ &1000035,1000002,2000002,-1000001,-2000001,1000004,2000004/
+ DATA (KFDP(I,1),I=2324,4000)/-1000003,-2000003,1000006,2000006,
+ &-1000005,-2000005,1000012,2000012,-1000011,-2000011,1000014,
+ &2000014,-1000013,-2000013,1000016,2000016,-1000015,-2000015,
+ &2*1000021,1000039,-1000024,-1000037,1000022,1000023,1000025,
+ &1000035,4*1000001,1000002,2000002,1000002,2000002,1000021,
+ &1000039,1000024,1000037,1000022,1000023,1000025,1000035,
+ &4*1000002,1000001,2000001,1000001,2000001,1000021,1000039,
+ &-1000024,-1000037,1000022,1000023,1000025,1000035,4*1000003,
+ &1000004,2000004,1000004,2000004,1000021,1000039,1000024,1000037,
+ &1000022,1000023,1000025,1000035,4*1000004,1000003,2000003,
+ &1000003,2000003,1000021,1000039,-1000024,-1000037,1000022,
+ &1000023,1000025,1000035,4*1000005,1000006,2000006,1000006,
+ &2000006,1000021,1000039,1000024,1000037,1000022,1000023,1000025,
+ &1000035,4*1000006,1000005,2000005,1000005,2000005,1000021,
+ &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,
+ &4*1000011,1000012,2000012,1000012,2000012,1000039,-1000024,
+ &-1000037,1000022,1000023,1000025,1000035,4*1000013,1000014,
+ &2000014,1000014,2000014,1000039,-1000024,-1000037,1000022,
+ &1000023,1000025,1000035,4*1000015,1000016,2000016,1000016,
+ &2000016,21,22,23,-24,21,22,23,24,22,23,-24,23,24,1503*0/
+ DATA (KFDP(I,2),I= 1, 337)/3*1,2,4,6,8,1,3*2,1,3,5,7,2,3*3,2,4,
+ &6,8,3,3*4,1,3,5,7,4,3*5,2,4,6,8,5,3*6,1,3,5,7,6,5,4*1000006,3*7,
+ &2,4,6,8,7,4,6,3*8,1,3,5,7,8,5,7,2*11,12,11,12,2*11,2*13,14,13,14,
+ &13,11,13,-211,-213,-211,-213,-211,-213,-211,-213,2*-211,-321,
+ &-323,-321,2*-323,3*-321,4*-211,-213,-211,-213,-211,-213,-211,
+ &-213,-211,-213,3*-211,-213,4*-211,-323,-321,2*-211,2*-321,3*-211,
+ &2*15,16,15,16,15,2*17,18,17,2*18,2*17,-1,-2,-3,-4,-5,-6,-7,-8,21,
+ &-1,-2,-3,-4,-5,-6,-7,-8,-11,-13,-15,-17,-1,-2,-3,-4,-5,-6,-7,-8,
+ &-11,-12,-13,-14,-15,-16,-17,-18,2,4,6,8,2,4,6,8,2,4,6,8,2,4,6,8,
+ &12,14,16,18,-1,-2,-3,-4,-5,-6,-7,-8,-11,-13,-15,-17,21,22,2*23,
+ &-24,2*1000022,1000023,1000022,1000023,1000025,1000022,1000023,
+ &1000025,1000035,-1000024,-1000037,-1000024,-1000037,-1000001,
+ &2*-2000001,2000001,-1000002,2*-2000002,2000002,-1000003,
+ &2*-2000003,2000003,-1000004,2*-2000004,2000004,-1000005,
+ &2*-2000005,2000005,-1000006,2*-2000006,2000006,-1000011,
+ &2*-2000011,2000011,-1000012,2*-2000012,2000012,-1000013,
+ &2*-2000013,2000013,-1000014,2*-2000014,2000014,-1000015,
+ &2*-2000015,2000015,-1000016,2*-2000016,2000016,-1,-2,-3,-4,-5,-6,
+ &-7,-8,-11,-12,-13,-14,-15,-16,-17,-18,-24,-37,22,25,2*36,2,4,6,8,
+ &2,4,6,8,2,4,6,8,2,4,6,8,12,14,16,18,23,22,25,-1,-2,-3,-4,-5,-6/
+ DATA (KFDP(I,2),I= 338, 524)/-7,-8,-11,-13,-15,-17,21,22,2*23,
+ &-24,2*25,36,2*1000022,1000023,1000022,1000023,1000025,1000022,
+ &1000023,1000025,1000035,-1000024,-1000037,-1000024,-1000037,
+ &-1000001,2*-2000001,2000001,-1000002,2*-2000002,2000002,-1000003,
+ &2*-2000003,2000003,-1000004,2*-2000004,2000004,-1000005,
+ &2*-2000005,2000005,-1000006,2*-2000006,2000006,-1000011,
+ &2*-2000011,2000011,-1000012,2*-2000012,2000012,-1000013,
+ &2*-2000013,2000013,-1000014,2*-2000014,2000014,-1000015,
+ &2*-2000015,2000015,-1000016,2*-2000016,2000016,-1,-2,-3,-4,-5,-6,
+ &-7,-8,-11,-13,-15,-17,21,22,2*23,-24,25,2*1000022,1000023,
+ &1000022,1000023,1000025,1000022,1000023,1000025,1000035,-1000024,
+ &-1000037,-1000024,-1000037,-1000001,2*-2000001,2000001,-1000002,
+ &2*-2000002,2000002,-1000003,2*-2000003,2000003,-1000004,
+ &2*-2000004,2000004,-1000005,2*-2000005,2000005,-1000006,
+ &2*-2000006,2000006,-1000011,2*-2000011,2000011,-1000012,
+ &2*-2000012,2000012,-1000013,2*-2000013,2000013,-1000014,
+ &2*-2000014,2000014,-1000015,2*-2000015,2000015,-1000016,
+ &2*-2000016,2000016,2,4,6,8,12,14,16,18,25,1000024,1000037,
+ &1000024,1000037,1000024,1000037,1000024,1000037,2*-1000005,
+ &2*-2000005,1000002,1000004,1000012,1000014,2*1000016,-5,-6,21,11/
+ DATA (KFDP(I,2),I= 525, 940)/-3,-4,-5,-6,-7,-8,-13,-15,-17,-4,-5,
+ &-11,-13,-15,-5,-3,12,14,16,-24,-52,-24,-52,-1,-2,-3,-4,-5,-6,-7,
+ &-8,-11,-12,-13,-14,-15,-16,-17,-18,23,51,23,51,2,4,6,8,2,4,6,8,2,
+ &4,6,8,2,4,6,8,12,14,16,18,2*51,-1,-2,-3,-4,-5,-6,-7,-8,-11,-12,
+ &-13,-14,-15,-16,-17,-18,-82,12,14,-1,-3,11,13,15,1,4,3,4,1,3,22,
+ &11,-211,2*22,-13,-11,-211,211,111,211,-321,130,310,22,2*111,-211,
+ &11,-11,13,-13,-211,111,22,14,12,111,22,111,3*211,-311,22,211,22,
+ &111,-211,211,11,-211,13,22,-211,111,-211,22,111,-11,-211,111,
+ &2*-211,-321,130,310,221,111,-211,111,2*0,-211,111,22,-211,111,
+ &-211,111,-211,211,-213,113,223,221,14,111,211,111,-11,-13,211,
+ &111,22,211,111,211,111,2*211,213,113,223,221,22,-211,111,113,223,
+ &22,111,-321,310,211,111,2*-211,221,22,-11,-13,-211,-321,130,310,
+ &221,-211,111,11*12,11*14,2*211,2*213,211,20213,2*321,2*323,211,
+ &213,211,213,211,213,211,213,211,213,211,213,3*211,213,211,2*321,
+ &8*211,2*113,3*211,111,22,211,111,211,111,4*211,8*12,8*14,2*211,
+ &2*213,2*111,221,2*113,223,333,20213,211,2*321,323,2*311,313,-211,
+ &111,113,2*211,321,2*211,311,321,310,211,-211,4*211,321,4*211,113,
+ &2*211,-321,111,22,-211,111,-211,111,-211,211,-211,211,16,5*12,
+ &5*14,3*211,3*213,211,2*111,2*113,2*-311,2*-313,-2112,3*321,323,
+ &2*-1,22,111,321,311,321,311,-82,-11,-13,-82,22,-82,6*-11,6*-13/
+ DATA (KFDP(I,2),I= 941,1318)/2*-15,211,213,20213,211,213,20213,
+ &431,433,431,433,311,313,311,313,311,313,-1,-4,-3,-4,-1,-3,22,
+ &-211,111,-211,111,-211,211,-211,211,6*-11,6*-13,2*-15,211,213,
+ &20213,211,213,20213,431,433,431,433,321,323,321,323,321,323,-1,
+ &-4,-3,-4,-1,-3,22,211,111,211,111,4*211,6*-11,6*-13,2*-15,211,
+ &213,20213,211,213,20213,431,433,431,433,221,331,333,221,331,333,
+ &221,331,333,-1,-4,-3,-4,-1,-3,22,-321,-311,-321,-311,-15,-3,-1,
+ &2*-11,2*-13,2*-15,-1,-4,-3,-4,-3,-4,-1,-4,2*12,2*14,2,3,2,3,2*12,
+ &2*14,2,1,22,411,421,411,421,21,-11,-13,-15,-1,-2,-3,-4,2*21,22,
+ &21,2*-211,111,22,111,211,22,211,-211,11,2*-211,111,-211,111,22,
+ &11,22,111,-211,211,111,211,22,211,111,211,-211,22,11,13,11,-211,
+ &2*111,2*22,111,211,-321,-211,111,11,2*-211,7*12,7*14,-321,-323,
+ &-311,-313,-311,-313,211,213,211,213,211,213,111,221,331,113,223,
+ &111,221,113,223,321,323,321,-211,-213,111,221,331,113,223,333,
+ &10221,111,221,331,113,223,211,213,211,213,321,323,321,323,321,
+ &323,311,313,311,313,2*-1,-3,-1,2203,3201,3203,2203,2101,2103,12,
+ &14,-1,-3,2*111,2*211,12,14,-1,-3,22,111,2*22,111,22,12,14,-1,-3,
+ &22,12,14,-1,-3,12,14,-1,-3,12,14,-1,-3,12,14,-1,-3,12,14,-1,-3,
+ &12,14,-1,-3,12,14,-1,-3,2*-211,11,13,15,-211,-213,-20213,-431,
+ &-433,3*3122,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1/
+ DATA (KFDP(I,2),I=1319,1774)/3,2*111,2*211,11,13,15,1,4,3,4,1,3,
+ &11,13,15,1,4,3,4,1,3,4*22,11,13,15,1,4,3,4,1,3,22,11,13,15,1,4,3,
+ &4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,
+ &1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,
+ &3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,
+ &11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,
+ &11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,
+ &11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,2*111,2*211,-211,111,
+ &-321,130,310,-211,111,211,-211,111,-213,113,-211,111,223,211,111,
+ &213,113,211,111,223,-211,111,-321,130,310,2*-211,-311,311,-321,
+ &321,211,111,211,111,-211,111,-211,111,311,2*321,311,22,2*-82,
+ &-211,111,-211,111,211,111,211,111,-321,-311,-321,-311,411,421,
+ &411,421,22,2*21,-211,2*211,111,-211,111,2*211,111,-211,211,111,
+ &211,-321,2*-311,-321,22,-211,111,211,111,-311,311,-321,321,211,
+ &111,-211,111,321,311,22,-82,-211,111,211,111,-321,-311,411,421,
+ &22,21,-11,-13,-82,211,111,221,111,4*22,-11,-13,-15,-1,-2,-3,-4,
+ &2*21,211,111,3*22,1,2*2,4*1,2*-24,2*-37,1,2,2*1,4*2,2*24,2*37,2,
+ &3,2*4,4*3,2*-24,2*-37,3,4,2*3,4*4,2*24,2*37,4,5,2*6,4*5,2*-24,
+ &2*-37,5,6,2*5,4*6,2*24,2*37,6,4,11,2*12,4*11,2*-24,2*-37,12,2*11,
+ &4*12,2*24,2*37,13,2*14,4*13,2*-24,2*-37,14,2*13,4*14,2*24,2*37/
+ DATA (KFDP(I,2),I=1775,2218)/15,2*16,4*15,2*-24,2*-37,16,2*15,
+ &4*16,2*24,2*37,21,-1,1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,4,-4,4,-5,5,
+ &-5,5,-6,6,-6,6,1,3,5,2,4,6,1,3,5,2,4,6,1,3,5,2,4,6,1,3,5,2,4,6,1,
+ &-1,3,-3,5,-5,1,-1,3,-3,5,-5,22,23,25,35,36,22,23,25,35,36,22,23,
+ &11,13,15,12,14,16,1,3,5,2,4,25,35,36,-24,24,11,-11,13,-13,15,-15,
+ &1,-1,3,-3,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-37,37,-37,37,-1,
+ &1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,4,-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,
+ &-11,11,-12,12,-12,12,-13,13,-13,13,-14,14,-14,14,-15,15,-15,15,
+ &-16,16,-16,16,1,3,5,2,4,24,37,24,-11,-13,-15,-1,-3,24,-11,-13,
+ &-15,-1,-3,24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,4*37,2*-1,
+ &2*2,2*-3,2*4,2*-5,2*6,2*-11,2*12,2*-13,2*14,2*-15,2*16,-1,-3,22,
+ &23,25,35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,35,36,22,23,11,
+ &13,15,12,14,16,1,3,5,2,4,25,35,36,-24,24,11,-11,13,-13,15,-15,1,
+ &-1,3,-3,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-37,37,-37,37,-1,1,
+ &-1,1,-2,2,-2,2,-3,3,-3,3,-4,4,-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,
+ &-11,11,-12,12,-12,12,-13,13,-13,13,-14,14,-14,14,-15,15,-15,15,
+ &-16,16,-16,16,1,3,5,2,4,22,23,25,35,36,22,23,11,13,15,12,14,16,1,
+ &3,5,2,4,25,35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,35,36,22,
+ &23,11,13,15,12,14,16,1,3,5,2,4,25,35,36,-24,24,11,-11,13,-13,15,
+ &-15,1,-1,3,-3,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-37,37,-37/
+ DATA (KFDP(I,2),I=2219,4000)/37,-1,1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,
+ &4,-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,-11,11,-12,12,-12,12,-13,13,
+ &-13,13,-14,14,-14,14,-15,15,-15,15,-16,16,-16,16,1,3,5,2,4,24,37,
+ &23,11,13,15,12,14,16,1,3,5,2,4,25,35,36,24,-11,-13,-15,-1,-3,24,
+ &-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,4*37,
+ &2*-1,2*2,2*-3,2*4,2*-5,2*6,2*-11,2*12,2*-13,2*14,2*-15,2*16,-1,
+ &-3,1,2*2,4*1,23,25,35,36,2*-24,2*-37,1,2,2*1,4*2,23,25,35,36,
+ &2*24,2*37,2,3,2*4,4*3,23,25,35,36,2*-24,2*-37,3,4,2*3,4*4,23,25,
+ &35,36,2*24,2*37,4,5,2*6,4*5,23,25,35,36,2*-24,2*-37,5,6,2*5,4*6,
+ &23,25,35,36,2*24,2*37,6,11,2*12,4*11,23,25,35,36,2*-24,2*-37,13,
+ &2*14,4*13,23,25,35,36,2*-24,2*-37,15,2*16,4*15,23,25,35,36,2*-24,
+ &2*-37,3*1,4*2,1,2*11,2*12,11,1503*0/
+ DATA (KFDP(I,3),I= 1,1087)/79*0,14,6*0,2*16,2*0,6*111,310,130,
+ &2*0,3*111,310,130,321,113,211,223,221,2*113,2*211,2*223,2*221,
+ &2*113,221,2*113,2*213,-213,113,2*111,310,130,310,130,2*310,130,
+ &470*0,4*3,4*4,1,4,3,2*2,0,-11,8*0,-211,5*0,2*111,211,-211,211,
+ &-211,10*0,111,4*0,2*111,-211,-11,11,-13,22,111,3*0,22,3*0,111,
+ &211,4*0,111,11*0,111,-211,6*0,-211,3*111,7*0,111,-211,5*0,2*221,
+ &3*0,111,5*0,111,11*0,-311,-313,-311,-321,-313,-323,111,221,331,
+ &113,223,-311,-313,-311,-321,-313,-323,111,221,331,113,223,22*0,
+ &111,113,2*211,-211,-311,211,111,3*211,-211,7*211,7*0,111,-211,
+ &111,-211,-321,-323,-311,-321,-313,-323,-211,-213,-321,-323,-311,
+ &-321,-313,-323,-211,-213,22*0,111,113,-311,2*-211,211,-211,310,
+ &-211,2*111,211,2*-211,-321,-211,2*211,-211,111,-211,2*211,6*0,
+ &111,-211,111,-211,0,221,331,333,321,311,221,331,333,321,311,20*0,
+ &3,13*0,-411,-413,-10413,-10411,-20413,-415,-411,-413,-10413,
+ &-10411,-20413,-415,-411,-413,16*0,-4,-1,-4,-3,2*-2,5*0,111,-211,
+ &111,-211,-421,-423,-10423,-10421,-20423,-425,-421,-423,-10423,
+ &-10421,-20423,-425,-421,-423,16*0,-4,-1,-4,-3,2*-2,5*0,111,-211,
+ &111,-211,-431,-433,-10433,-10431,-20433,-435,-431,-433,-10433,
+ &-10431,-20433,-435,-431,-433,19*0,-4,-1,-4,-3,2*-2,8*0,441,443,
+ &441,443,441,443,-4,-1,-4,-3,-4,-3,-4,-1,531,533,531,533,3,2,3,2/
+ DATA (KFDP(I,3),I=1088,2186)/511,513,511,513,1,2,13*0,2*21,11*0,
+ &2112,6*0,2212,12*0,2*3122,3212,10*0,3322,2*0,3122,3212,3214,2112,
+ &2114,2212,2112,3122,3212,3214,2112,2114,2212,2112,52*0,3*3,1,6*0,
+ &4*3,4*0,4*3,6*0,4*3,0,28*3,2*0,3*4122,8*0,4,1,4,3,2*2,4*4,1,4,3,
+ &2*2,4*4,1,4,3,2*2,4*0,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*0,4*4,1,4,3,
+ &2*2,0,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,
+ &4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,
+ &3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,
+ &4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,
+ &3,2*2,31*0,211,111,45*0,-211,2*111,-211,3*111,-211,111,211,30*0,
+ &-211,111,13*0,2*21,-211,111,167*0,-1,-3,-5,-2,-4,-6,-1,-3,-5,-2,
+ &-4,-6,-1,-3,-5,-2,-4,-6,-1,-3,-5,-2,-4,-6,-2,2,-4,4,-6,6,-2,2,-4,
+ &4,-6,6,12*0,-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0,-12,12,
+ &-14,14,-16,16,-2,2,-4,4,2*0,-12,12,-14,14,-16,16,-2,2,-4,4,52*0,
+ &-1,-3,-5,-2,-4,3*0,12,14,16,2,4,0,12,14,16,2,4,0,12,14,16,2,4,0,
+ &12,14,16,2,4,28*0,2,4,7*0,-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,
+ &5*0,-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0,-12,12,-14,14,-16,
+ &16,-2,2,-4,4,2*0,-12,12,-14,14,-16,16,-2,2,-4,4,52*0,-1,-3,-5,-2,
+ &-4,7*0,-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0,-11,-13,-15,
+ &-12,-14,-16,-1,-3,-5,-2,-4,5*0,-11,-13,-15,-12,-14,-16,-1,-3,-5/
+ DATA (KFDP(I,3),I=2187,4000)/-2,-4,5*0,-12,12,-14,14,-16,16,-2,2,
+ &-4,4,2*0,-12,12,-14,14,-16,16,-2,2,-4,4,52*0,-1,-3,-5,-2,-4,3*0,
+ &-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,4*0,12,14,16,2,4,0,12,14,
+ &16,2,4,0,12,14,16,2,4,0,12,14,16,2,4,28*0,2,4,1657*0/
+ DATA (KFDP(I,4),I= 1,4000)/92*0,4*111,6*0,111,2*0,-211,0,-211,
+ &3*0,111,2*-211,0,111,0,2*111,113,221,2*111,-213,-211,211,113,
+ &6*111,310,2*130,470*0,13*81,41*0,-11,10*0,111,-211,4*0,111,62*0,
+ &111,211,111,211,7*0,111,211,111,211,35*0,2*-211,2*111,211,111,
+ &-211,2*211,2*-211,13*0,-211,111,-211,111,4*0,-211,111,-211,111,
+ &34*0,111,-211,3*111,3*-211,2*111,3*-211,14*0,-321,-311,3*0,-321,
+ &-311,20*0,-3,43*0,6*1,39*0,6*2,42*0,6*3,14*0,8*4,4*0,4*-5,4*0,
+ &2*-5,67*0,-211,111,5*0,-211,111,52*0,2101,2103,2*2101,6*0,4*81,
+ &4*0,4*81,6*0,4*81,0,28*81,13*0,6*2101,18*81,4*0,18*81,4*0,9*81,0,
+ &162*81,31*0,-211,111,2450*0/
+ DATA (KFDP(I,5),I= 1,4000)/94*0,2*111,17*0,111,7*0,2*111,0,
+ &3*111,0,111,665*0,-211,2*111,-211,111,-211,111,65*0,111,-211,
+ &3*111,-211,111,3127*0/
+
+C...PYDAT4, with particle names (character strings).
+ DATA (CHAF(I,1),I= 1, 190)/'d','u','s','c','b','t','b''','t''',
+ &2*' ','e-','nu_e','mu-','nu_mu','tau-','nu_tau','tau''-',
+ &'nu''_tau',2*' ','g','gamma','Z0','W+','h0',2*' ','reggeon',
+ &'pomeron',2*' ','Z''0','Z"0','W''+','H0','A0','H+','eta_tech0',
+ &'LQ_ue','R0',10*' ','pi_tech0','pi_tech+','pi''_tech0',
+ &'rho_tech0','rho_tech+','omega_tech',24*' ','specflav',
+ &'rndmflav','phasespa','c-hadron','b-hadron',5*' ','cluster',
+ &'string','indep.','CMshower','SPHEaxis','THRUaxis','CLUSjet',
+ &'CELLjet','table',' ','rho_diff0','pi0','rho0','a_20','K_L0',
+ &'pi_diffr+','pi+','rho+','a_2+','omega_di','eta','omega','f_2',
+ &'K_S0','K0','K*0','K*_20','K+','K*+','K*_2+','phi_diff','eta''',
+ &'phi','f''_2','D+','D*+','D*_2+','D0','D*0','D*_20','D_s+',
+ &'D*_s+','D*_2s+','J/psi_di','eta_c','J/psi','chi_2c','B0','B*0',
+ &'B*_20','B+','B*+','B*_2+','B_s0','B*_s0','B*_2s0','B_c+',
+ &'B*_c+','B*_2c+','eta_b','Upsilon','chi_2b','dd_1','Delta-',
+ &'ud_0','ud_1','n_diffr0','n0','Delta0','uu_1','p_diffr+','p+',
+ &'Delta+','Delta++','sd_0','sd_1','Sigma-','Sigma*-','Lambda0',
+ &'su_0','su_1','Sigma0','Sigma*0','Sigma+','Sigma*+','ss_1','Xi-',
+ &'Xi*-','Xi0','Xi*0','Omega-','cd_0','cd_1','Sigma_c0',
+ &'Sigma*_c0','Lambda_c+','Xi_c0','cu_0','cu_1','Sigma_c+'/
+ DATA (CHAF(I,1),I= 191, 317)/'Sigma*_c+','Sigma_c++',
+ &'Sigma*_c++','Xi_c+','cs_0','cs_1','Xi''_c0','Xi*_c0','Xi''_c+',
+ &'Xi*_c+','Omega_c0','Omega*_c0','cc_1','Xi_cc+','Xi*_cc+',
+ &'Xi_cc++','Xi*_cc++','Omega_cc+','Omega*_cc+','Omega*_ccc++',
+ &'bd_0','bd_1','Sigma_b-','Sigma*_b-','Lambda_b0','Xi_b-',
+ &'Xi_bc0','bu_0','bu_1','Sigma_b0','Sigma*_b0','Sigma_b+',
+ &'Sigma*_b+','Xi_b0','Xi_bc+','bs_0','bs_1','Xi''_b-','Xi*_b-',
+ &'Xi''_b0','Xi*_b0','Omega_b-','Omega*_b-','Omega_bc0','bc_0',
+ &'bc_1','Xi''_bc0','Xi*_bc0','Xi''_bc+','Xi*_bc+','Omega''_bc0',
+ &'Omega*_bc0','Omega_bcc+','Omega*_bcc+','bb_1','Xi_bb-',
+ &'Xi*_bb-','Xi_bb0','Xi*_bb0','Omega_bb-','Omega*_bb-',
+ &'Omega_bbc0','Omega*_bbc0','Omega*_bbb-','a_00','b_10','a_0+',
+ &'b_1+','f_0','h_1','K*_00','K_10','K*_0+','K_1+','f''_0','h''_1',
+ &'D*_0+','D_1+','D*_00','D_10','D*_0s+','D_1s+','chi_0c','h_1c',
+ &'B*_00','B_10','B*_0+','B_1+','B*_0s0','B_1s0','B*_0c+','B_1c+',
+ &'chi_0b','h_1b','a_10','a_1+','f_1','K*_10','K*_1+','f''_1',
+ &'D*_1+','D*_10','D*_1s+','chi_1c','B*_10','B*_1+','B*_1s0',
+ &'B*_1c+','chi_1b','psi''','Upsilon''','~d_L','~u_L','~s_L',
+ &'~c_L','~b_1','~t_1','~e_L-','~nu_eL','~mu_L-','~nu_muL',
+ &'~tau_1-','~nu_tauL','~g','~chi_10','~chi_20','~chi_1+'/
+ DATA (CHAF(I,1),I= 318, 500)/'~chi_30','~chi_40','~chi_2+',
+ &'~gravitino','~d_R','~u_R','~s_R','~c_R','~b_2','~t_2','~e_R-',
+ &'~nu_eR','~mu_R-','~nu_muR','~tau_2-','~nu_tauR','d*','u*','e*-',
+ &'nu*_e0',163*' '/
+ DATA (CHAF(I,2),I= 1, 206)/'dbar','ubar','sbar','cbar','bbar',
+ &'tbar','b''bar','t''bar',2*' ','e+','nu_ebar','mu+','nu_mubar',
+ &'tau+','nu_taubar','tau''+','nu''_taubar',5*' ','W-',9*' ',
+ &'W''-',2*' ','H-',' ','LQ_uebar','Rbar0',11*' ','pi_tech-',2*' ',
+ &'rho_tech-',26*' ','rndmflavbar',' ','c-hadronbar','b-hadronbar',
+ &20*' ','pi_diffr-','pi-','rho-','a_2-',5*' ','Kbar0','K*bar0',
+ &'K*_2bar0','K-','K*-','K*_2-',4*' ','D-','D*-','D*_2-','Dbar0',
+ &'D*bar0','D*_2bar0','D_s-','D*_s-','D*_2s-',4*' ','Bbar0',
+ &'B*bar0','B*_2bar0','B-','B*-','B*_2-','B_sbar0','B*_sbar0',
+ &'B*_2sbar0','B_c-','B*_c-','B*_2c-',3*' ','dd_1bar','Deltabar+',
+ &'ud_0bar','ud_1bar','n_diffrbar0','nbar0','Deltabar0','uu_1bar',
+ &'p_diffrbar-','pbar-','Deltabar-','Deltabar--','sd_0bar',
+ &'sd_1bar','Sigmabar+','Sigma*bar+','Lambdabar0','su_0bar',
+ &'su_1bar','Sigmabar0','Sigma*bar0','Sigmabar-','Sigma*bar-',
+ &'ss_1bar','Xibar+','Xi*bar+','Xibar0','Xi*bar0','Omegabar+',
+ &'cd_0bar','cd_1bar','Sigma_cbar0','Sigma*_cbar0','Lambda_cbar-',
+ &'Xi_cbar0','cu_0bar','cu_1bar','Sigma_cbar-','Sigma*_cbar-',
+ &'Sigma_cbar--','Sigma*_cbar--','Xi_cbar-','cs_0bar','cs_1bar',
+ &'Xi''_cbar0','Xi*_cbar0','Xi''_cbar-','Xi*_cbar-','Omega_cbar0',
+ &'Omega*_cbar0','cc_1bar','Xi_ccbar-','Xi*_ccbar-','Xi_ccbar--'/
+ DATA (CHAF(I,2),I= 207, 324)/'Xi*_ccbar--','Omega_ccbar-',
+ &'Omega*_ccbar-','Omega*_cccbar-','bd_0bar','bd_1bar',
+ &'Sigma_bbar+','Sigma*_bbar+','Lambda_bbar0','Xi_bbar+',
+ &'Xi_bcbar0','bu_0bar','bu_1bar','Sigma_bbar0','Sigma*_bbar0',
+ &'Sigma_bbar-','Sigma*_bbar-','Xi_bbar0','Xi_bcbar-','bs_0bar',
+ &'bs_1bar','Xi''_bbar+','Xi*_bbar+','Xi''_bbar0','Xi*_bbar0',
+ &'Omega_bbar+','Omega*_bbar+','Omega_bcbar0','bc_0bar','bc_1bar',
+ &'Xi''_bcbar0','Xi*_bcbar0','Xi''_bcbar-','Xi*_bcbar-',
+ &'Omega''_bcba','Omega*_bcbar0','Omega_bccbar-','Omega*_bccbar-',
+ &'bb_1bar','Xi_bbbar+','Xi*_bbbar+','Xi_bbbar0','Xi*_bbbar0',
+ &'Omega_bbbar+','Omega*_bbbar+','Omega_bbcbar0','Omega*_bbcbar0',
+ &'Omega*_bbbbar+',2*' ','a_0-','b_1-',2*' ','K*_0bar0','K_1bar0',
+ &'K*_0-','K_1-',2*' ','D*_0-','D_1-','D*_0bar0','D_1bar0',
+ &'D*_0s-','D_1s-',2*' ','B*_0bar0','B_1bar0','B*_0-','B_1-',
+ &'B*_0sbar0','B_1sbar0','B*_0c-','B_1c-',3*' ','a_1-',' ',
+ &'K*_1bar0','K*_1-',' ','D*_1-','D*_1bar0','D*_1s-',' ',
+ &'B*_1bar0','B*_1-','B*_1sbar0','B*_1c-',3*' ','~d_Lbar',
+ &'~u_Lbar','~s_Lbar','~c_Lbar','~b_1bar','~t_1bar','~e_L+',
+ &'~nu_eLbar','~mu_L+','~nu_muLbar','~tau_1+','~nu_tauLbar',3*' ',
+ &'~chi_1-',2*' ','~chi_2-',' ','~d_Rbar','~u_Rbar','~s_Rbar'/
+ DATA (CHAF(I,2),I= 325, 500)/'~c_Rbar','~b_2bar','~t_2bar',
+ &'~e_R+','~nu_eRbar','~mu_R+','~nu_muRbar','~tau_2+',
+ &'~nu_tauRbar','d*bar','u*bar','e*bar+','nu*_ebar0',163*' '/
+
+C...PYDATR, with initial values for the random number generator.
+ DATA MRPY/19780503,0,0,97,33,0/
+
+C...Default values for allowed processes and kinematics constraints.
+ DATA MSEL/1/
+ DATA MSUB/500*0/
+ DATA ((KFIN(I,J),J=-40,40),I=1,2)/16*0,4*1,4*0,6*1,5*0,5*1,0,
+ &5*1,5*0,6*1,4*0,4*1,16*0,16*0,4*1,4*0,6*1,5*0,5*1,0,5*1,5*0,
+ &6*1,4*0,4*1,16*0/
+ DATA CKIN/
+ & 2.0D0, -1.0D0, 0.0D0, -1.0D0, 1.0D0,
+ & 1.0D0, -10D0, 10D0, -10D0, 10D0,
+ 1 -10D0, 10D0, -10D0, 10D0, -10D0,
+ 1 10D0, -1.0D0, 1.0D0, -1.0D0, 1.0D0,
+ 2 0.0D0, 1.0D0, 0.0D0, 1.0D0, -1.0D0,
+ 2 1.0D0, -1.0D0, 1.0D0, 0D0, 0D0,
+ 3 2.0D0, -1.0D0, 0D0, 0D0, 0.0D0,
+ 3 -1.0D0, 0.0D0, -1.0D0, 4.0D0, -1.0D0,
+ 4 12.0D0, -1.0D0, 12.0D0, -1.0D0, 12.0D0,
+ 4 -1.0D0, 12.0D0, -1.0D0, 0D0, 0D0,
+ 5 0.0D0, -1.0D0, 0.0D0, -1.0D0, 0.0D0,
+ 5 -1.0D0, 0D0, 0D0, 0D0, 0D0,
+ 6 140*0D0/
+
+C...Default values for main switches and parameters. Reset information.
+ DATA (MSTP(I),I=1,100)/
+ & 3, 1, 2, 0, 0, 0, 0, 0, 0, 0,
+ 1 1, 0, 1, 0, 5, 0, 0, 0, 0, 0,
+ 2 1, 0, 1, 0, 0, 0, 0, 0, 0, 1,
+ 3 1, 2, 0, 1, 0, 2, 1, 5, 2, 0,
+ 4 1, 1, 3, 7, 3, 1, 1, 0, 1, 0,
+ 5 4, 1, 3, 1, 5, 1, 1, 6, 1, 7,
+ 6 1, 3, 2, 2, 1, 1, 2, 0, 0, 0,
+ 7 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8 1, 1, 100, 0, 0, 0, 0, 0, 0, 0,
+ 9 1, 4, 1, 2, 0, 0, 0, 0, 0, 0/
+ DATA (MSTP(I),I=101,200)/
+ & 3, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 2 0, 1, 2, 1, 1, 50, 0, 0, 10, 0,
+ 3 0, 4, 0, 1, 0, 0, 0, 0, 0, 0,
+ 4 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 5 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 7 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8 6, 115, 1998, 01, 27, 0, 0, 0, 0, 0,
+ 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA (PARP(I),I=1,100)/
+ & 0.25D0, 10D0, 8*0D0,
+ 1 0D0, 0D0, 1.0D0, 0.01D0, 0.6D0, 1.0D0, 1.0D0, 3*0D0,
+ 2 10*0D0,
+ 3 1.5D0,2.0D0,0.075D0,1.0D0,0.2D0,0D0,2.0D0,0.70D0,0.006D0,0D0,
+ 4 0.02D0,2.0D0,0.10D0,1000D0,2054D0, 123D0, 246D0, 50D0, 2*0D0,
+ 5 1.0D0, 9*0D0,
+ 6 0.25D0, 1.0D0,0.25D0, 1.0D0, 2.0D0,1D-3, 4.0D0,1D-3,2*0D0,
+ 7 4.0D0, 0.25D0, 8*0D0,
+ 8 1.40D0,1.55D0,0.5D0, 0.2D0,0.33D0,0.66D0, 0.7D0, 0.5D0,2*0D0,
+ 9 0.44D0,0.20D0,2.0D0,1.0D0,0D0,3.0D0,1.0D0,0.75D0,0.44D0,2.0D0/
+ DATA (PARP(I),I=101,200)/
+ & 0.5D0, 0.28D0, 1.0D0, 0.8D0, 6*0D0,
+ 1 2.0D0, 3*0D0, 1.5D0, 0.5D0, 0.6D0, 2.5D0, 2.0D0, 1.0D0,
+ 2 1.0D0, 0.4D0, 8*0D0,
+ 3 0.01D0, 9*0D0,
+ 4 0.33333D0, 82D0, 1D0, 4D0, 200D0, 5*0D0,
+ 5 0D0, 0D0, 0D0, 0D0, 6*0D0,
+ 6 2.20D0, 23.6D0, 18.4D0, 11.5D0, 6*0D0,
+ 7 0D0, 0D0, 0D0, 1.0D0, 6*0D0,
+ 8 20*0D0/
+ DATA MSTI/200*0/
+ DATA PARI/200*0D0/
+ DATA MINT/400*0/
+ DATA VINT/400*0D0/
+
+C...Constants for the generation of the various processes.
+ DATA (ISET(I),I=1,100)/
+ & 1, 1, 1, -1, 3, -1, -1, 3, -2, 2,
+ 1 2, 2, 2, 2, 2, 2, -1, 2, 2, 2,
+ 2 -1, 2, 2, 2, 2, 2, -1, 2, 2, 2,
+ 3 2, -1, 2, 2, 2, 2, -1, -1, -1, -1,
+ 4 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 5 -1, -1, 2, 2, -1, -1, -1, 2, -1, -1,
+ 6 -1, -1, -1, -1, -1, -1, -1, 2, 2, 2,
+ 7 4, 4, 4, -1, -1, 4, 4, -1, -1, 2,
+ 8 2, 2, 2, 2, 2, 2, 2, 2, 2, -2,
+ 9 0, 0, 0, 0, 0, 9, -2, -2, -2, -2/
+ DATA (ISET(I),I=101,200)/
+ & -1, 1, 1, -2, -2, 2, 2, 2, -2, 2,
+ 1 2, 2, 2, 2, 2, -1, -1, -1, -2, -2,
+ 2 5, 5, 5, 5, -2, -2, -2, -2, -2, -2,
+ 3 -1, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+ 4 1, 1, 1, 1, 1, -2, 1, 1, 1, -2,
+ 5 1, 1, 1, -2, -2, 1, 1, 1, -2, -2,
+ 6 2, 2, 2, 2, 2, 2, 2, 2, -2, -2,
+ 7 2, 2, 5, 5, -2, 2, 2, 5, 5, -2,
+ 8 5, 5, -2, -2, -2, 5, 5, -2, -2, -2,
+ 9 1, 1, 1, 2, -2, -2, -2, -2, -2, -2/
+ DATA (ISET(I),I=201,300)/
+ & 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1 2, 2, 2, 2, -2, 2, 2, 2, 2, 2,
+ 2 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 4 2, 2, 2, 2, -1, 2, 2, 2, 2, 2,
+ 5 2, 2, 2, 2, -1, 2, -1, 2, 2, -2,
+ 6 2, 2, 2, 2, 2, -1, -1, -1, -1, -1,
+ 7 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 8 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
+ 9 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2/
+ DATA (ISET(I),I=301,500)/200*-2/
+ DATA ((KFPR(I,J),J=1,2),I=1,50)/
+ & 23, 0, 24, 0, 25, 0, 24, 0, 25, 0,
+ & 24, 0, 23, 0, 25, 0, 0, 0, 0, 0,
+ 1 0, 0, 0, 0, 21, 21, 21, 22, 21, 23,
+ 1 21, 24, 21, 25, 22, 22, 22, 23, 22, 24,
+ 2 22, 25, 23, 23, 23, 24, 23, 25, 24, 24,
+ 2 24, 25, 25, 25, 0, 21, 0, 22, 0, 23,
+ 3 0, 24, 0, 25, 0, 21, 0, 22, 0, 23,
+ 3 0, 24, 0, 25, 0, 21, 0, 22, 0, 23,
+ 4 0, 24, 0, 25, 0, 21, 0, 22, 0, 23,
+ 4 0, 24, 0, 25, 0, 21, 0, 22, 0, 23/
+ DATA ((KFPR(I,J),J=1,2),I=51,100)/
+ 5 0, 24, 0, 25, 0, 0, 0, 0, 0, 0,
+ 5 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6 0, 0, 0, 0, 21, 21, 24, 24, 23, 24,
+ 7 23, 23, 24, 24, 23, 24, 23, 25, 22, 22,
+ 7 23, 23, 24, 24, 24, 25, 25, 25, 0, 211,
+ 8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8 443, 21,10441, 21,20443, 21, 445, 21, 0, 0,
+ 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA ((KFPR(I,J),J=1,2),I=101,150)/
+ & 23, 0, 25, 0, 25, 0, 0, 0, 0, 0,
+ & 443, 22, 443, 21, 443, 22, 0, 0, 22, 25,
+ 1 21, 25, 0, 25, 21, 25, 22, 22, 21, 22,
+ 1 22, 23, 23, 23, 24, 24, 0, 0, 0, 0,
+ 2 25, 6, 25, 6, 25, 0, 25, 0, 0, 0,
+ 2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3 23, 5, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 4 32, 0, 34, 0, 37, 0, 40, 0, 39, 0,
+ 4 0, 0, 4000001, 0, 4000002, 0, 38, 0, 0, 0/
+ DATA ((KFPR(I,J),J=1,2),I=151,200)/
+ 5 35, 0, 35, 0, 35, 0, 0, 0, 0, 0,
+ 5 36, 0, 36, 0, 36, 0, 0, 0, 0, 0,
+ 6 6, 37, 39, 0, 39, 39, 39, 39, 11, 0,
+ 6 11, 0, 0, 4000001, 0, 4000002, 0, 0, 0, 0,
+ 7 23, 35, 24, 35, 35, 0, 35, 0, 0, 0,
+ 7 23, 36, 24, 36, 36, 0, 36, 0, 0, 0,
+ 8 35, 6, 35, 6, 0, 0, 0, 0, 0, 0,
+ 8 36, 6, 36, 6, 0, 0, 0, 0, 0, 0,
+ 9 54, 0, 55, 0, 56, 0, 11, 0, 0, 0,
+ 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/
+ DATA ((KFPR(I,J),J=1,2),I=201,240)/
+ & 1000011, 1000011, 2000011, 2000011, 1000011,
+ & 2000011, 1000013, 1000013, 2000013, 2000013,
+ & 1000013, 2000013, 1000015, 1000015, 2000015,
+ & 2000015, 1000015, 2000015, 1000011, 1000012,
+ 1 1000015, 1000016, 2000015, 1000016, 1000012,
+ 1 1000012, 1000016, 1000016, 0, 0,
+ 1 1000022, 1000022, 1000023, 1000023, 1000025,
+ 1 1000025, 1000035, 1000035, 1000022, 1000023,
+ 2 1000022, 1000025, 1000022, 1000035, 1000023,
+ 2 1000025, 1000023, 1000035, 1000025, 1000035,
+ 2 1000024, 1000024, 1000037, 1000037, 1000024,
+ 2 1000037, 1000022, 1000024, 1000023, 1000024,
+ 3 1000025, 1000024, 1000035, 1000024, 1000022,
+ 3 1000037, 1000023, 1000037, 1000025, 1000037,
+ 3 1000035, 1000037, 1000021, 1000022, 1000021,
+ 3 1000023, 1000021, 1000025, 1000021, 1000035/
+ DATA ((KFPR(I,J),J=1,2),I=241,280)/
+ 4 1000021, 1000024, 1000021, 1000037, 1000021,
+ 4 1000021, 1000021, 1000021, 0, 0,
+ 4 1000002, 1000022, 2000002, 1000022, 1000002,
+ 4 1000023, 2000002, 1000023, 1000002, 1000025,
+ 5 2000002, 1000025, 1000002, 1000035, 2000002,
+ 5 1000035, 1000001, 1000024, 2000005, 1000024,
+ 5 1000001, 1000037, 2000005, 1000037, 1000002,
+ 5 1000021, 2000002, 1000021, 0, 0,
+ 6 1000006, 1000006, 2000006, 2000006, 1000006,
+ 6 2000006, 1000006, 1000006, 2000006, 2000006,
+ 6 0, 0, 0, 0, 0,
+ 6 0, 0, 0, 0, 0,
+ 7 1000002, 1000002, 2000002, 2000002, 1000002,
+ 7 2000002, 1000002, 1000002, 2000002, 2000002,
+ 7 1000002, 2000002, 1000002, 1000002, 2000002,
+ 7 2000002, 1000002, 1000002, 2000002, 2000002/
+ DATA ((KFPR(I,J),J=1,2),I=281,500)/440*0/
+ DATA COEF/10000*0D0/
+ DATA (((ICOL(I,J,K),K=1,2),J=1,4),I=1,40)/
+ &4,0,3,0,2,0,1,0,3,0,4,0,1,0,2,0,2,0,0,1,4,0,0,3,3,0,0,4,1,0,0,2,
+ &3,0,0,4,1,4,3,2,4,0,0,3,4,2,1,3,2,0,4,1,4,0,2,3,4,0,3,4,2,0,1,2,
+ &3,2,1,0,1,4,3,0,4,3,3,0,2,1,1,0,3,2,1,4,1,0,0,2,2,4,3,1,2,0,0,1,
+ &3,2,1,4,1,4,3,2,4,2,1,3,4,2,1,3,3,4,4,3,1,2,2,1,2,0,3,1,2,0,0,0,
+ &4,2,1,0,0,0,1,0,3,0,0,3,1,2,0,0,4,0,0,4,0,0,1,2,2,0,0,1,4,4,3,3,
+ &2,2,1,1,4,4,3,3,3,3,4,4,1,1,2,2,3,2,1,3,1,2,0,0,4,2,1,4,0,0,1,2,
+ &4,0,0,0,4,0,1,3,0,0,3,0,2,4,3,0,3,4,0,0,1,0,0,1,0,0,3,4,2,0,0,2,
+ &3,0,0,0,1,0,0,0,0,0,3,0,2,0,0,0,2,0,3,1,2,0,0,0,3,2,1,0,1,0,0,0,
+ &4,4,3,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ &0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/
+
+C...Treatment of resonances.
+ DATA (MWID(I) ,I= 1, 500)/5*0,3*1,8*0,1,5*0,3*1,6*0,1,0,7*1,
+ &10*0,2*1,0,3*1,245*0,19*2,0,7*2,0,2,0,2,0,4*1,163*0/
+
+C...Character constants: name of processes.
+ DATA PROC(0)/ 'All included subprocesses '/
+ DATA (PROC(I),I=1,20)/
+ &'f + fbar -> gamma*/Z0 ', 'f + fbar'' -> W+/- ',
+ &'f + fbar -> h0 ', 'gamma + W+/- -> W+/- ',
+ &'Z0 + Z0 -> h0 ', 'Z0 + W+/- -> W+/- ',
+ &' ', 'W+ + W- -> h0 ',
+ &' ', 'f + f'' -> f + f'' (QFD) ',
+ 1'f + f'' -> f + f'' (QCD) ','f + fbar -> f'' + fbar'' ',
+ 1'f + fbar -> g + g ', 'f + fbar -> g + gamma ',
+ 1'f + fbar -> g + Z0 ', 'f + fbar'' -> g + W+/- ',
+ 1'f + fbar -> g + h0 ', 'f + fbar -> gamma + gamma ',
+ 1'f + fbar -> gamma + Z0 ', 'f + fbar'' -> gamma + W+/- '/
+ DATA (PROC(I),I=21,40)/
+ 2'f + fbar -> gamma + h0 ', 'f + fbar -> Z0 + Z0 ',
+ 2'f + fbar'' -> Z0 + W+/- ', 'f + fbar -> Z0 + h0 ',
+ 2'f + fbar -> W+ + W- ', 'f + fbar'' -> W+/- + h0 ',
+ 2'f + fbar -> h0 + h0 ', 'f + g -> f + g ',
+ 2'f + g -> f + gamma ', 'f + g -> f + Z0 ',
+ 3'f + g -> f'' + W+/- ', 'f + g -> f + h0 ',
+ 3'f + gamma -> f + g ', 'f + gamma -> f + gamma ',
+ 3'f + gamma -> f + Z0 ', 'f + gamma -> f'' + W+/- ',
+ 3'f + gamma -> f + h0 ', 'f + Z0 -> f + g ',
+ 3'f + Z0 -> f + gamma ', 'f + Z0 -> f + Z0 '/
+ DATA (PROC(I),I=41,60)/
+ 4'f + Z0 -> f'' + W+/- ', 'f + Z0 -> f + h0 ',
+ 4'f + W+/- -> f'' + g ', 'f + W+/- -> f'' + gamma ',
+ 4'f + W+/- -> f'' + Z0 ', 'f + W+/- -> f'' + W+/- ',
+ 4'f + W+/- -> f'' + h0 ', 'f + h0 -> f + g ',
+ 4'f + h0 -> f + gamma ', 'f + h0 -> f + Z0 ',
+ 5'f + h0 -> f'' + W+/- ', 'f + h0 -> f + h0 ',
+ 5'g + g -> f + fbar ', 'g + gamma -> f + fbar ',
+ 5'g + Z0 -> f + fbar ', 'g + W+/- -> f + fbar'' ',
+ 5'g + h0 -> f + fbar ', 'gamma + gamma -> f + fbar ',
+ 5'gamma + Z0 -> f + fbar ', 'gamma + W+/- -> f + fbar'' '/
+ DATA (PROC(I),I=61,80)/
+ 6'gamma + h0 -> f + fbar ', 'Z0 + Z0 -> f + fbar ',
+ 6'Z0 + W+/- -> f + fbar'' ', 'Z0 + h0 -> f + fbar ',
+ 6'W+ + W- -> f + fbar ', 'W+/- + h0 -> f + fbar'' ',
+ 6'h0 + h0 -> f + fbar ', 'g + g -> g + g ',
+ 6'gamma + gamma -> W+ + W- ', 'gamma + W+/- -> Z0 + W+/- ',
+ 7'Z0 + Z0 -> Z0 + Z0 ', 'Z0 + Z0 -> W+ + W- ',
+ 7'Z0 + W+/- -> Z0 + W+/- ', 'Z0 + Z0 -> Z0 + h0 ',
+ 7'W+ + W- -> gamma + gamma ', 'W+ + W- -> Z0 + Z0 ',
+ 7'W+/- + W+/- -> W+/- + W+/- ', 'W+/- + h0 -> W+/- + h0 ',
+ 7'h0 + h0 -> h0 + h0 ', 'q + gamma -> q'' + pi+/- '/
+ DATA (PROC(I),I=81,100)/
+ 8'q + qbar -> Q + Qbar, mass ', 'g + g -> Q + Qbar, massive ',
+ 8'f + q -> f'' + Q, massive ', 'g + gamma -> Q + Qbar, mass ',
+ 8'gamma + gamma -> F + Fbar, m', 'g + g -> J/Psi + g ',
+ 8'g + g -> chi_0c + g ', 'g + g -> chi_1c + g ',
+ 8'g + g -> chi_2c + g ', ' ',
+ 9'Elastic scattering ', 'Single diffractive (XB) ',
+ 9'Single diffractive (AX) ', 'Double diffractive ',
+ 9'Low-pT scattering ', 'Semihard QCD 2 -> 2 ',
+ 9' ', ' ',
+ 9' ', ' '/
+ DATA (PROC(I),I=101,120)/
+ &'g + g -> gamma*/Z0 ', 'g + g -> h0 ',
+ &'gamma + gamma -> h0 ', ' ',
+ &' ', 'g + g -> J/Psi + gamma ',
+ &'gamma + g -> J/Psi + g ', 'gamma+gamma -> J/Psi + gamma',
+ &' ', 'f + fbar -> gamma + h0 ',
+ 1'f + fbar -> g + h0 ', 'q + g -> q + h0 ',
+ 1'g + g -> g + h0 ', 'g + g -> gamma + gamma ',
+ 1'g + g -> g + gamma ', 'g + g -> gamma + Z0 ',
+ 1'g + g -> Z0 + Z0 ', 'g + g -> W+ + W- ',
+ 1' ', ' '/
+ DATA (PROC(I),I=121,140)/
+ 2'g + g -> Q + Qbar + h0 ', 'q + qbar -> Q + Qbar + h0 ',
+ 2'f + f'' -> f + f'' + h0 ',
+ 2'f + f'' -> f" + f"'' + h0 ',
+ 2' ', ' ',
+ 2' ', ' ',
+ 2' ', ' ',
+ 3'g + g -> Z0 + q + qbar ', ' ',
+ 3' ', ' ',
+ 3' ', ' ',
+ 3' ', ' ',
+ 3' ', ' '/
+ DATA (PROC(I),I=141,160)/
+ 4'f + fbar -> gamma*/Z0/Z''0 ', 'f + fbar'' -> W''+/- ',
+ 4'f + fbar'' -> H+/- ', 'f + fbar'' -> R ',
+ 4'q + l -> LQ ', ' ',
+ 4'd + g -> d* ', 'u + g -> u* ',
+ 4'g + g -> eta_techni ', ' ',
+ 5'f + fbar -> H0 ', 'g + g -> H0 ',
+ 5'gamma + gamma -> H0 ', ' ',
+ 5' ', 'f + fbar -> A0 ',
+ 5'g + g -> A0 ', 'gamma + gamma -> A0 ',
+ 5' ', ' '/
+ DATA (PROC(I),I=161,180)/
+ 6'f + g -> f'' + H+/- ', 'q + g -> LQ + lbar ',
+ 6'g + g -> LQ + LQbar ', 'q + qbar -> LQ + LQbar ',
+ 6'f + fbar -> f'' + fbar'' (g/Z)',
+ 6'f +fbar'' -> f" + fbar"'' (W) ',
+ 6'q + q'' -> q" + d* ', 'q + q'' -> q" + u* ',
+ 6' ', ' ',
+ 7'f + fbar -> Z0 + H0 ', 'f + fbar'' -> W+/- + H0 ',
+ 7'f + f'' -> f + f'' + H0 ',
+ 7'f + f'' -> f" + f"'' + H0 ',
+ 7' ', 'f + fbar -> Z0 + A0 ',
+ 7'f + fbar'' -> W+/- + A0 ',
+ 7'f + f'' -> f + f'' + A0 ',
+ 7'f + f'' -> f" + f"'' + A0 ',
+ 7' '/
+ DATA (PROC(I),I=181,200)/
+ 8'g + g -> Q + Qbar + H0 ', 'q + qbar -> Q + Qbar + H0 ',
+ 8' ', ' ',
+ 8' ', 'g + g -> Q + Qbar + A0 ',
+ 8'q + qbar -> Q + Qbar + A0 ', ' ',
+ 8' ', ' ',
+ 9'f + fbar -> rho_tech0 ', 'f + f'' -> rho_tech+/- ',
+ 9'f + fbar -> omega_tech0 ', 'f+fbar -> f''+fbar'' (technic)',
+ 9' ', ' ',
+ 9' ', ' ',
+ 9' ', ' '/
+ DATA (PROC(I),I=201,220)/
+ &'f + fbar -> ~e_L + ~e_Lbar ', 'f + fbar -> ~e_R + ~e_Rbar ',
+ &'f + fbar -> ~e_R + ~e_Lbar ', 'f + fbar -> ~mu_L + ~mu_Lbar',
+ &'f + fbar -> ~mu_R + ~mu_Rbar', 'f + fbar -> ~mu_L + ~mu_Rbar',
+ &'f+fbar -> ~tau_1 + ~tau_1bar', 'f+fbar -> ~tau_2 + ~tau_2bar',
+ &'f+fbar -> ~tau_1 + ~tau_2bar', 'q + qbar'' -> ~l_L + ~nulbar ',
+ 1'q+qbar''-> ~tau_1 + ~nutaubar', 'q+qbar''-> ~tau_2 + ~nutaubar',
+ 1'f + fbar -> ~nul + ~nulbar ', 'f+fbar -> ~nutau + ~nutaubar',
+ 1' ', 'f + fbar -> ~chi1 + ~chi1 ',
+ 1'f + fbar -> ~chi2 + ~chi2 ', 'f + fbar -> ~chi3 + ~chi3 ',
+ 1'f + fbar -> ~chi4 + ~chi4 ', 'f + fbar -> ~chi1 + ~chi2 '/
+ DATA (PROC(I),I=221,240)/
+ 2'f + fbar -> ~chi1 + ~chi3 ', 'f + fbar -> ~chi1 + ~chi4 ',
+ 2'f + fbar -> ~chi2 + ~chi3 ', 'f + fbar -> ~chi2 + ~chi4 ',
+ 2'f + fbar -> ~chi3 + ~chi4 ', 'f+fbar -> ~chi+-1 + ~chi-+1 ',
+ 2'f+fbar -> ~chi+-2 + ~chi-+2 ', 'f+fbar -> ~chi+-1 + ~chi-+2 ',
+ 2'q + qbar'' -> ~chi1 + ~chi+-1', 'q + qbar'' -> ~chi2 + ~chi+-1',
+ 3'q + qbar'' -> ~chi3 + ~chi+-1', 'q + qbar'' -> ~chi4 + ~chi+-1',
+ 3'q + qbar'' -> ~chi1 + ~chi+-2', 'q + qbar'' -> ~chi2 + ~chi+-2',
+ 3'q + qbar'' -> ~chi3 + ~chi+-2', 'q + qbar'' -> ~chi4 + ~chi+-2',
+ 3'q + qbar -> ~chi1 + ~g ', 'q + qbar -> ~chi2 + ~g ',
+ 3'q + qbar -> ~chi3 + ~g ', 'q + qbar -> ~chi4 + ~g '/
+ DATA (PROC(I),I=241,260)/
+ 4'q + qbar'' -> ~chi+-1 + ~g ', 'q + qbar'' -> ~chi+-2 + ~g ',
+ 4'q + qbar -> ~g + ~g ', 'g + g -> ~g + ~g ',
+ 4' ', 'qj + g -> ~qj_L + ~chi1 ',
+ 4'qj + g -> ~qj_R + ~chi1 ', 'qj + g -> ~qj_L + ~chi2 ',
+ 4'qj + g -> ~qj_R + ~chi2 ', 'qj + g -> ~qj_L + ~chi3 ',
+ 5'qj + g -> ~qj_R + ~chi3 ', 'qj + g -> ~qj_L + ~chi4 ',
+ 5'qj + g -> ~qj_R + ~chi4 ', 'qj + g -> ~qk_L + ~chi+-1 ',
+ 5'qj + g -> ~qk_R + ~chi+-1 ', 'qj + g -> ~qk_L + ~chi+-2 ',
+ 5'qj + g -> ~qk_R + ~chi+-2 ', 'qj + g -> ~qj_L + ~g ',
+ 5'qj + g -> ~qj_R + ~g ', ' '/
+ DATA (PROC(I),I=261,280)/
+ 6'f + fbar -> ~t_1 + ~t_1bar ', 'f + fbar -> ~t_2 + ~t_2bar ',
+ 6'f + fbar -> ~t_1 + ~t_2bar ', 'g + g -> ~t_1 + ~t_1bar ',
+ 6'g + g -> ~t_2 + ~t_2bar ', ' ',
+ 6' ', ' ',
+ 6' ', ' ',
+ 7'qi + qj -> ~qi_L + ~qj_L ', 'qi + qj -> ~qi_R + ~qj_R ',
+ 7'qi + qj -> ~qi_L + ~qj_R ', 'qi+qjbar -> ~qi_L + ~qj_Lbar',
+ 7'qi+qjbar -> ~qi_R + ~qj_Rbar', 'qi+qjbar -> ~qi_L + ~qj_Rbar',
+ 7'f + fbar -> ~qi_L + ~qi_Lbar', 'f + fbar -> ~qi_R + ~qi_Rbar',
+ 7'g + g -> ~qi_L + ~qi_Lbar ', 'g + g -> ~qi_R + ~qi_Rbar '/
+ DATA (PROC(I),I=281,500)/220*' '/
+
+C...Cross sections and slope offsets.
+ DATA SIGT/294*0D0/
+
+C...Supersymmetry switches and parameters.
+ DATA IMSS/0,
+ & 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
+ 1 89*0/
+ DATA RMSS/0D0,
+ & 80D0,160D0,500D0,800D0,2D0,250D0,200D0,800D0,700D0,800D0,
+ 1 700D0,500D0,250D0,200D0,800D0,400D0,0D0,0.1D0,850D0,0.041D0,
+ 2 1D0,800D0,1D4,1D4,1D4,0D0,0D0,24D17,2*0D0,
+ 3 69*0D0/
+
+C...Data for histogramming routines.
+ DATA IHIST/1000,20000,55,1/
+ DATA INDX/1000*0/
+
+ END
+
+C*********************************************************************
+
+C...PYTEST
+C...A simple program (disguised as subroutine) to run at installation
+C...as a check that the program works as intended.
+
+ SUBROUTINE PYTEST(MTEST)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/
+C...Local arrays.
+ DIMENSION PSUM(5),PINI(6),PFIN(6)
+
+C...Save defaults for values that are changed.
+ MSTJ1=MSTJ(1)
+ MSTJ3=MSTJ(3)
+ MSTJ11=MSTJ(11)
+ MSTJ42=MSTJ(42)
+ MSTJ43=MSTJ(43)
+ MSTJ44=MSTJ(44)
+ PARJ17=PARJ(17)
+ PARJ22=PARJ(22)
+ PARJ43=PARJ(43)
+ PARJ54=PARJ(54)
+ MST101=MSTJ(101)
+ MST104=MSTJ(104)
+ MST105=MSTJ(105)
+ MST107=MSTJ(107)
+ MST116=MSTJ(116)
+
+C...First part: loop over simple events to be generated.
+ IF(MTEST.GE.1) CALL PYTABU(20)
+ NERR=0
+ DO 180 IEV=1,500
+
+C...Reset parameter values. Switch on some nonstandard features.
+ MSTJ(1)=1
+ MSTJ(3)=0
+ MSTJ(11)=1
+ MSTJ(42)=2
+ MSTJ(43)=4
+ MSTJ(44)=2
+ PARJ(17)=0.1D0
+ PARJ(22)=1.5D0
+ PARJ(43)=1D0
+ PARJ(54)=-0.05D0
+ MSTJ(101)=5
+ MSTJ(104)=5
+ MSTJ(105)=0
+ MSTJ(107)=1
+ IF(IEV.EQ.301.OR.IEV.EQ.351.OR.IEV.EQ.401) MSTJ(116)=3
+
+C...Ten events each for some single jets configurations.
+ IF(IEV.LE.50) THEN
+ ITY=(IEV+9)/10
+ MSTJ(3)=-1
+ IF(ITY.EQ.3.OR.ITY.EQ.4) MSTJ(11)=2
+ IF(ITY.EQ.1) CALL PY1ENT(1,1,15D0,0D0,0D0)
+ IF(ITY.EQ.2) CALL PY1ENT(1,3101,15D0,0D0,0D0)
+ IF(ITY.EQ.3) CALL PY1ENT(1,-2203,15D0,0D0,0D0)
+ IF(ITY.EQ.4) CALL PY1ENT(1,-4,30D0,0D0,0D0)
+ IF(ITY.EQ.5) CALL PY1ENT(1,21,15D0,0D0,0D0)
+
+C...Ten events each for some simple jet systems; string fragmentation.
+ ELSEIF(IEV.LE.130) THEN
+ ITY=(IEV-41)/10
+ IF(ITY.EQ.1) CALL PY2ENT(1,1,-1,40D0)
+ IF(ITY.EQ.2) CALL PY2ENT(1,4,-4,30D0)
+ IF(ITY.EQ.3) CALL PY2ENT(1,2,2103,100D0)
+ IF(ITY.EQ.4) CALL PY2ENT(1,21,21,40D0)
+ IF(ITY.EQ.5) CALL PY3ENT(1,2101,21,-3203,30D0,0.6D0,0.8D0)
+ IF(ITY.EQ.6) CALL PY3ENT(1,5,21,-5,40D0,0.9D0,0.8D0)
+ IF(ITY.EQ.7) CALL PY3ENT(1,21,21,21,60D0,0.7D0,0.5D0)
+ IF(ITY.EQ.8) CALL PY4ENT(1,2,21,21,-2,40D0,
+ & 0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
+
+C...Seventy events with independent fragmentation and momentum cons.
+ ELSEIF(IEV.LE.200) THEN
+ ITY=1+(IEV-131)/16
+ MSTJ(2)=1+MOD(IEV-131,4)
+ MSTJ(3)=1+MOD((IEV-131)/4,4)
+ IF(ITY.EQ.1) CALL PY2ENT(1,4,-5,40D0)
+ IF(ITY.EQ.2) CALL PY3ENT(1,3,21,-3,40D0,0.9D0,0.4D0)
+ IF(ITY.EQ.3) CALL PY4ENT(1,2,21,21,-2,40D0,
+ & 0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
+ IF(ITY.GE.4) CALL PY4ENT(1,2,-3,3,-2,40D0,
+ & 0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
+
+C...A hundred events with random jets (check invariant mass).
+ ELSEIF(IEV.LE.300) THEN
+ 100 DO 110 J=1,5
+ PSUM(J)=0D0
+ 110 CONTINUE
+ NJET=2D0+6D0*PYR(0)
+ DO 130 I=1,NJET
+ KFL=21
+ IF(I.EQ.1) KFL=INT(1D0+4D0*PYR(0))
+ IF(I.EQ.NJET) KFL=-INT(1D0+4D0*PYR(0))
+ EJET=5D0+20D0*PYR(0)
+ THETA=ACOS(2D0*PYR(0)-1D0)
+ PHI=6.2832D0*PYR(0)
+ IF(I.LT.NJET) CALL PY1ENT(-I,KFL,EJET,THETA,PHI)
+ IF(I.EQ.NJET) CALL PY1ENT(I,KFL,EJET,THETA,PHI)
+ IF(I.EQ.1.OR.I.EQ.NJET) MSTJ(93)=1
+ IF(I.EQ.1.OR.I.EQ.NJET) PSUM(5)=PSUM(5)+PYMASS(KFL)
+ DO 120 J=1,4
+ PSUM(J)=PSUM(J)+P(I,J)
+ 120 CONTINUE
+ 130 CONTINUE
+ IF(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2.LT.
+ & (PSUM(5)+PARJ(32))**2) GOTO 100
+
+C...Fifty e+e- continuum events with matrix elements.
+ ELSEIF(IEV.LE.350) THEN
+ MSTJ(101)=2
+ CALL PYEEVT(0,40D0)
+
+C...Fifty e+e- continuum event with varying shower options.
+ ELSEIF(IEV.LE.400) THEN
+ MSTJ(42)=1+MOD(IEV,2)
+ MSTJ(43)=1+MOD(IEV/2,4)
+ MSTJ(44)=MOD(IEV/8,3)
+ CALL PYEEVT(0,90D0)
+
+C...Fifty e+e- continuum events with coherent shower.
+ ELSEIF(IEV.LE.450) THEN
+ CALL PYEEVT(0,500D0)
+
+C...Fifty Upsilon decays to ggg or gammagg with coherent shower.
+ ELSE
+ CALL PYONIA(5,9.46D0)
+ ENDIF
+
+C...Generate event. Find total momentum, energy and charge.
+ DO 140 J=1,4
+ PINI(J)=PYP(0,J)
+ 140 CONTINUE
+ PINI(6)=PYP(0,6)
+ CALL PYEXEC
+ DO 150 J=1,4
+ PFIN(J)=PYP(0,J)
+ 150 CONTINUE
+ PFIN(6)=PYP(0,6)
+
+C...Check conservation of energy, momentum and charge;
+C...usually exact, but only approximate for single jets.
+ MERR=0
+ IF(IEV.LE.50) THEN
+ IF((PFIN(1)-PINI(1))**2+(PFIN(2)-PINI(2))**2.GE.4D0)
+ & MERR=MERR+1
+ EPZREM=PINI(4)+PINI(3)-PFIN(4)-PFIN(3)
+ IF(EPZREM.LT.0D0.OR.EPZREM.GT.2D0*PARJ(31)) MERR=MERR+1
+ IF(ABS(PFIN(6)-PINI(6)).GT.2.1D0) MERR=MERR+1
+ ELSE
+ DO 160 J=1,4
+ IF(ABS(PFIN(J)-PINI(J)).GT.0.0001D0*PINI(4)) MERR=MERR+1
+ 160 CONTINUE
+ IF(ABS(PFIN(6)-PINI(6)).GT.0.1D0) MERR=MERR+1
+ ENDIF
+ IF(MERR.NE.0) WRITE(MSTU(11),5000) (PINI(J),J=1,4),PINI(6),
+ & (PFIN(J),J=1,4),PFIN(6)
+
+C...Check that all KF codes are known ones, and that partons/particles
+C...satisfy energy-momentum-mass relation. Store particle statistics.
+ DO 170 I=1,N
+ IF(K(I,1).GT.20) GOTO 170
+ IF(PYCOMP(K(I,2)).EQ.0) THEN
+ WRITE(MSTU(11),5100) I
+ MERR=MERR+1
+ ENDIF
+ PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2
+ IF(ABS(PD).GT.MAX(0.1D0,0.001D0*P(I,4)**2).OR.P(I,4).LT.0D0)
+ & THEN
+ WRITE(MSTU(11),5200) I
+ MERR=MERR+1
+ ENDIF
+ 170 CONTINUE
+ IF(MTEST.GE.1) CALL PYTABU(21)
+
+C...List all erroneous events and some normal ones.
+ IF(MERR.NE.0.OR.MSTU(24).NE.0.OR.MSTU(28).NE.0) THEN
+ IF(MERR.GE.1) WRITE(MSTU(11),6400)
+ CALL PYLIST(2)
+ ELSEIF(MTEST.GE.1.AND.MOD(IEV-5,100).EQ.0) THEN
+ CALL PYLIST(1)
+ ENDIF
+
+C...Stop execution if too many errors.
+ IF(MERR.NE.0) NERR=NERR+1
+ IF(NERR.GE.10) THEN
+ WRITE(MSTU(11),6300)
+ CALL PYLIST(1)
+ STOP
+ ENDIF
+ 180 CONTINUE
+
+C...Summarize result of run.
+ IF(MTEST.GE.1) CALL PYTABU(22)
+
+C...Reset commonblock variables changed during run.
+ MSTJ(1)=MSTJ1
+ MSTJ(3)=MSTJ3
+ MSTJ(11)=MSTJ11
+ MSTJ(42)=MSTJ42
+ MSTJ(43)=MSTJ43
+ MSTJ(44)=MSTJ44
+ PARJ(17)=PARJ17
+ PARJ(22)=PARJ22
+ PARJ(43)=PARJ43
+ PARJ(54)=PARJ54
+ MSTJ(101)=MST101
+ MSTJ(104)=MST104
+ MSTJ(105)=MST105
+ MSTJ(107)=MST107
+ MSTJ(116)=MST116
+
+C...Second part: complete events of various kinds.
+C...Common initial values. Loop over initiating conditions.
+ MSTP(122)=MAX(0,MIN(2,MTEST))
+ MDCY(PYCOMP(111),1)=0
+ DO 230 IPROC=1,8
+
+C...Reset process type, kinematics cuts, and the flags used.
+ MSEL=0
+ DO 190 ISUB=1,500
+ MSUB(ISUB)=0
+ 190 CONTINUE
+ CKIN(1)=2D0
+ CKIN(3)=0D0
+ MSTP(2)=1
+ MSTP(11)=0
+ MSTP(33)=0
+ MSTP(81)=1
+ MSTP(82)=1
+ MSTP(111)=1
+ MSTP(131)=0
+ MSTP(133)=0
+ PARP(131)=0.01D0
+
+C...Prompt photon production at fixed target.
+ IF(IPROC.EQ.1) THEN
+ PZSUM=300D0
+ PESUM=SQRT(PZSUM**2+PYMASS(211)**2)+PYMASS(2212)
+ PQSUM=2D0
+ MSEL=10
+ CKIN(3)=5D0
+ CALL PYINIT('FIXT','pi+','p',PZSUM)
+
+C...QCD processes at ISR energies.
+ ELSEIF(IPROC.EQ.2) THEN
+ PESUM=63D0
+ PZSUM=0D0
+ PQSUM=2D0
+ MSEL=1
+ CKIN(3)=5D0
+ CALL PYINIT('CMS','p','p',PESUM)
+
+C...W production + multiple interactions at CERN Collider.
+ ELSEIF(IPROC.EQ.3) THEN
+ PESUM=630D0
+ PZSUM=0D0
+ PQSUM=0D0
+ MSEL=12
+ CKIN(1)=20D0
+ MSTP(82)=4
+ MSTP(2)=2
+ MSTP(33)=3
+ CALL PYINIT('CMS','p','pbar',PESUM)
+
+C...W/Z gauge boson pairs + pileup events at the Tevatron.
+ ELSEIF(IPROC.EQ.4) THEN
+ PESUM=1800D0
+ PZSUM=0D0
+ PQSUM=0D0
+ MSUB(22)=1
+ MSUB(23)=1
+ MSUB(25)=1
+ CKIN(1)=200D0
+ MSTP(111)=0
+ MSTP(131)=1
+ MSTP(133)=2
+ PARP(131)=0.04D0
+ CALL PYINIT('CMS','p','pbar',PESUM)
+
+C...Higgs production at LHC.
+ ELSEIF(IPROC.EQ.5) THEN
+ PESUM=15400D0
+ PZSUM=0D0
+ PQSUM=2D0
+ MSUB(3)=1
+ MSUB(102)=1
+ MSUB(123)=1
+ MSUB(124)=1
+ PMAS(25,1)=300D0
+ CKIN(1)=200D0
+ MSTP(81)=0
+ MSTP(111)=0
+ CALL PYINIT('CMS','p','p',PESUM)
+
+C...Z' production at SSC.
+ ELSEIF(IPROC.EQ.6) THEN
+ PESUM=40000D0
+ PZSUM=0D0
+ PQSUM=2D0
+ MSEL=21
+ PMAS(32,1)=600D0
+ CKIN(1)=400D0
+ MSTP(81)=0
+ MSTP(111)=0
+ CALL PYINIT('CMS','p','p',PESUM)
+
+C...W pair production at 1 TeV e+e- collider.
+ ELSEIF(IPROC.EQ.7) THEN
+ PESUM=1000D0
+ PZSUM=0D0
+ PQSUM=0D0
+ MSUB(25)=1
+ MSUB(69)=1
+ MSTP(11)=1
+ CALL PYINIT('CMS','e+','e-',PESUM)
+
+C...Deep inelastic scattering at a LEP+LHC ep collider.
+ ELSEIF(IPROC.EQ.8) THEN
+ P(1,1)=0D0
+ P(1,2)=0D0
+ P(1,3)=8000D0
+ P(2,1)=0D0
+ P(2,2)=0D0
+ P(2,3)=-80D0
+ PESUM=8080D0
+ PZSUM=7920D0
+ PQSUM=0D0
+ MSUB(10)=1
+ CKIN(3)=50D0
+ MSTP(111)=0
+ CALL PYINIT('USER','p','e-',PESUM)
+ ENDIF
+
+C...Generate 20 events of each required type.
+ DO 220 IEV=1,20
+ CALL PYEVNT
+ PESUMM=PESUM
+ IF(IPROC.EQ.4) PESUMM=MSTI(41)*PESUM
+
+C...Check conservation of energy/momentum/flavour.
+ PINI(1)=0D0
+ PINI(2)=0D0
+ PINI(3)=PZSUM
+ PINI(4)=PESUMM
+ PINI(6)=PQSUM
+ DO 200 J=1,4
+ PFIN(J)=PYP(0,J)
+ 200 CONTINUE
+ PFIN(6)=PYP(0,6)
+ MERR=0
+ DEVE=ABS(PFIN(4)-PINI(4))+ABS(PFIN(3)-PINI(3))
+ DEVT=ABS(PFIN(1)-PINI(1))+ABS(PFIN(2)-PINI(2))
+ DEVQ=ABS(PFIN(6)-PINI(6))
+ IF(DEVE.GT.2D-3*PESUM.OR.DEVT.GT.MAX(0.01D0,1D-4*PESUM).OR.
+ & DEVQ.GT.0.1D0) MERR=1
+ IF(MERR.NE.0) WRITE(MSTU(11),5000) (PINI(J),J=1,4),PINI(6),
+ & (PFIN(J),J=1,4),PFIN(6)
+
+C...Check that all KF codes are known ones, and that partons/particles
+C...satisfy energy-momentum-mass relation.
+ DO 210 I=1,N
+ IF(K(I,1).GT.20) GOTO 210
+ IF(PYCOMP(K(I,2)).EQ.0) THEN
+ WRITE(MSTU(11),5100) I
+ MERR=MERR+1
+ ENDIF
+ PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2*
+ & SIGN(1D0,P(I,5))
+ IF(ABS(PD).GT.MAX(0.1D0,0.002D0*P(I,4)**2,0.002D0*P(I,5)**2)
+ & .OR.(P(I,5).GE.0D0.AND.P(I,4).LT.0D0)) THEN
+ WRITE(MSTU(11),5200) I
+ MERR=MERR+1
+ ENDIF
+ 210 CONTINUE
+
+C...Listing of erroneous events, and first event of each type.
+ IF(MERR.GE.1) NERR=NERR+1
+ IF(NERR.GE.10) THEN
+ WRITE(MSTU(11),6300)
+ CALL PYLIST(1)
+ STOP
+ ENDIF
+ IF(MTEST.GE.1.AND.(MERR.GE.1.OR.IEV.EQ.1)) THEN
+ IF(MERR.GE.1) WRITE(MSTU(11),6400)
+ CALL PYLIST(1)
+ ENDIF
+ 220 CONTINUE
+
+C...List statistics for each process type.
+ IF(MTEST.GE.1) CALL PYSTAT(1)
+ 230 CONTINUE
+
+C...Summarize result of run.
+ IF(NERR.EQ.0) WRITE(MSTU(11),6500)
+ IF(NERR.GT.0) WRITE(MSTU(11),6600) NERR
+
+C...Format statements for output.
+ 5000 FORMAT(/' Momentum, energy and/or charge were not conserved ',
+ &'in following event'/' sum of',9X,'px',11X,'py',11X,'pz',11X,
+ &'E',8X,'charge'/' before',2X,4(1X,F12.5),1X,F8.2/' after',3X,
+ &4(1X,F12.5),1X,F8.2)
+ 5100 FORMAT(/5X,'Entry no.',I4,' in following event not known code')
+ 5200 FORMAT(/5X,'Entry no.',I4,' in following event has faulty ',
+ &'kinematics')
+ 6300 FORMAT(/5X,'This is the tenth error experienced! Something is ',
+ &'wrong.'/5X,'Execution will be stopped after listing of event.')
+ 6400 FORMAT(5X,'Faulty event follows:')
+ 6500 FORMAT(//5X,'End result of PYTEST: no errors detected.')
+ 6600 FORMAT(//5X,'End result of PYTEST:',I2,' errors detected.'/
+ &5X,'This should not have happened!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYHEPC
+C...Converts PYTHIA event record contents to or from
+C...the standard event record commonblock.
+
+ SUBROUTINE PYHEPC(MCONV)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...HEPEVT commonblock.
+ PARAMETER (NMXHEP=4000)
+ COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
+ &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
+ DOUBLE PRECISION PHEP,VHEP
+ SAVE /HEPEVT/
+
+C...Conversion from PYTHIA to standard, the easy part.
+ IF(MCONV.EQ.1) THEN
+ NEVHEP=0
+ IF(N.GT.NMXHEP) CALL PYERRM(8,
+ & '(PYHEPC:) no more space in /HEPEVT/')
+ NHEP=MIN(N,NMXHEP)
+ DO 140 I=1,NHEP
+ ISTHEP(I)=0
+ IF(K(I,1).GE.1.AND.K(I,1).LE.10) ISTHEP(I)=1
+ IF(K(I,1).GE.11.AND.K(I,1).LE.20) ISTHEP(I)=2
+ IF(K(I,1).GE.21.AND.K(I,1).LE.30) ISTHEP(I)=3
+ IF(K(I,1).GE.31.AND.K(I,1).LE.100) ISTHEP(I)=K(I,1)
+ IDHEP(I)=K(I,2)
+ JMOHEP(1,I)=K(I,3)
+ JMOHEP(2,I)=0
+ IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) THEN
+ JDAHEP(1,I)=K(I,4)
+ JDAHEP(2,I)=K(I,5)
+ ELSE
+ JDAHEP(1,I)=0
+ JDAHEP(2,I)=0
+ ENDIF
+ DO 100 J=1,5
+ PHEP(J,I)=P(I,J)
+ 100 CONTINUE
+ DO 110 J=1,4
+ VHEP(J,I)=V(I,J)
+ 110 CONTINUE
+
+C...Check if new event (from pileup).
+ IF(I.EQ.1) THEN
+ INEW=1
+ ELSE
+ IF(K(I,1).EQ.21.AND.K(I-1,1).NE.21) INEW=I
+ ENDIF
+
+C...Fill in missing mother information.
+ IF(I.GE.INEW+2.AND.K(I,1).EQ.21.AND.K(I,3).EQ.0) THEN
+ IMO1=I-2
+ IF(I.GE.INEW+3.AND.K(I-1,1).EQ.21.AND.K(I-1,3).EQ.0)
+ & IMO1=IMO1-1
+ JMOHEP(1,I)=IMO1
+ JMOHEP(2,I)=IMO1+1
+ ELSEIF(K(I,2).GE.91.AND.K(I,2).LE.93) THEN
+ I1=K(I,3)-1
+ 120 I1=I1+1
+ IF(I1.GE.I) CALL PYERRM(8,
+ & '(PYHEPC:) translation of inconsistent event history')
+ IF(I1.LT.I.AND.K(I1,1).NE.1.AND.K(I1,1).NE.11) GOTO 120
+ KC=PYCOMP(K(I1,2))
+ IF(I1.LT.I.AND.KC.EQ.0) GOTO 120
+ IF(I1.LT.I.AND.KCHG(KC,2).EQ.0) GOTO 120
+ JMOHEP(2,I)=I1
+ ELSEIF(K(I,2).EQ.94) THEN
+ NJET=2
+ IF(NHEP.GE.I+3.AND.K(I+3,3).LE.I) NJET=3
+ IF(NHEP.GE.I+4.AND.K(I+4,3).LE.I) NJET=4
+ JMOHEP(2,I)=MOD(K(I+NJET,4)/MSTU(5),MSTU(5))
+ IF(JMOHEP(2,I).EQ.JMOHEP(1,I)) JMOHEP(2,I)=
+ & MOD(K(I+1,4)/MSTU(5),MSTU(5))
+ ENDIF
+
+C...Fill in missing daughter information.
+ IF(K(I,2).EQ.94.AND.MSTU(16).NE.2) THEN
+ DO 130 I1=JDAHEP(1,I),JDAHEP(2,I)
+ I2=MOD(K(I1,4)/MSTU(5),MSTU(5))
+ JDAHEP(1,I2)=I
+ 130 CONTINUE
+ ENDIF
+ IF(K(I,2).GE.91.AND.K(I,2).LE.94) GOTO 140
+ I1=JMOHEP(1,I)
+ IF(I1.LE.0.OR.I1.GT.NHEP) GOTO 140
+ IF(K(I1,1).NE.13.AND.K(I1,1).NE.14) GOTO 140
+ IF(JDAHEP(1,I1).EQ.0) THEN
+ JDAHEP(1,I1)=I
+ ELSE
+ JDAHEP(2,I1)=I
+ ENDIF
+ 140 CONTINUE
+ DO 150 I=1,NHEP
+ IF(K(I,1).NE.13.AND.K(I,1).NE.14) GOTO 150
+ IF(JDAHEP(2,I).EQ.0) JDAHEP(2,I)=JDAHEP(1,I)
+ 150 CONTINUE
+
+C...Conversion from standard to PYTHIA, the easy part.
+ ELSE
+ IF(NHEP.GT.MSTU(4)) CALL PYERRM(8,
+ & '(PYHEPC:) no more space in /PYJETS/')
+ N=MIN(NHEP,MSTU(4))
+ NKQ=0
+ KQSUM=0
+ DO 180 I=1,N
+ K(I,1)=0
+ IF(ISTHEP(I).EQ.1) K(I,1)=1
+ IF(ISTHEP(I).EQ.2) K(I,1)=11
+ IF(ISTHEP(I).EQ.3) K(I,1)=21
+ K(I,2)=IDHEP(I)
+ K(I,3)=JMOHEP(1,I)
+ K(I,4)=JDAHEP(1,I)
+ K(I,5)=JDAHEP(2,I)
+ DO 160 J=1,5
+ P(I,J)=PHEP(J,I)
+ 160 CONTINUE
+ DO 170 J=1,4
+ V(I,J)=VHEP(J,I)
+ 170 CONTINUE
+ V(I,5)=0D0
+ IF(ISTHEP(I).EQ.2.AND.PHEP(4,I).GT.PHEP(5,I)) THEN
+ I1=JDAHEP(1,I)
+ IF(I1.GT.0.AND.I1.LE.NHEP) V(I,5)=(VHEP(4,I1)-VHEP(4,I))*
+ & PHEP(5,I)/PHEP(4,I)
+ ENDIF
+
+C...Fill in missing information on colour connection in jet systems.
+ IF(ISTHEP(I).EQ.1) THEN
+ KC=PYCOMP(K(I,2))
+ KQ=0
+ IF(KC.NE.0) KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
+ IF(KQ.NE.0) NKQ=NKQ+1
+ IF(KQ.NE.2) KQSUM=KQSUM+KQ
+ IF(KQ.NE.0.AND.KQSUM.NE.0) THEN
+ K(I,1)=2
+ ELSEIF(KQ.EQ.2.AND.I.LT.N) THEN
+ IF(K(I+1,2).EQ.21) K(I,1)=2
+ ENDIF
+ ENDIF
+ 180 CONTINUE
+ IF(NKQ.EQ.1.OR.KQSUM.NE.0) CALL PYERRM(8,
+ & '(PYHEPC:) input parton configuration not colour singlet')
+ ENDIF
+
+ END
+
+C*********************************************************************
+
+C...PYINIT
+C...Initializes the generation procedure; finds maxima of the
+C...differential cross-sections to be used for weighting.
+
+ SUBROUTINE PYINIT(FRAME,BEAM,TARGET,WIN)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYDAT4/CHAF(500,2)
+ CHARACTER CHAF*16
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYSUBS/,/PYPARS/,
+ &/PYINT1/,/PYINT2/,/PYINT5/
+C...Local arrays and character variables.
+ DIMENSION ALAMIN(20),NFIN(20)
+ CHARACTER*(*) FRAME,BEAM,TARGET
+ CHARACTER CHFRAM*8,CHBEAM*8,CHTARG*8,CHLH(2)*6
+
+C...Interface to PDFLIB.
+ COMMON/W50512/QCDL4,QCDL5
+ SAVE /W50512/
+ DOUBLE PRECISION VALUE(20),QCDL4,QCDL5
+ CHARACTER*20 PARM(20)
+ DATA VALUE/20*0D0/,PARM/20*' '/
+
+C...Data:Lambda and n_f values for parton distributions; months.
+ DATA ALAMIN/0.177D0,0.239D0,0.247D0,0.2322D0,0.248D0,0.248D0,
+ &14*0.2D0/,NFIN/20*4/
+ DATA CHLH/'lepton','hadron'/
+
+C...Reset MINT and VINT arrays. Write headers.
+ DO 100 J=1,400
+ MINT(J)=0
+ VINT(J)=0D0
+ 100 CONTINUE
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IF(MSTP(122).GE.1) WRITE(MSTU(11),5100)
+
+C...Maximum 4 generations; set maximum number of allowed flavours.
+ MSTP(1)=MIN(4,MSTP(1))
+ MSTU(114)=MIN(MSTU(114),2*MSTP(1))
+ MSTP(58)=MIN(MSTP(58),2*MSTP(1))
+
+C...Sum up Cabibbo-Kobayashi-Maskawa factors for each quark/lepton.
+ DO 120 I=-20,20
+ VINT(180+I)=0D0
+ IA=IABS(I)
+ IF(IA.GE.1.AND.IA.LE.2*MSTP(1)) THEN
+ DO 110 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IF(IB.GE.6.AND.MSTP(9).EQ.0) GOTO 110
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.IPM) VINT(180+I)=
+ & VINT(180+I)+VCKM((IA+1)/2,(IB+1)/2)
+ 110 CONTINUE
+ ELSEIF(IA.GE.11.AND.IA.LE.10+2*MSTP(1)) THEN
+ VINT(180+I)=1D0
+ ENDIF
+ 120 CONTINUE
+
+C...Initialize parton distributions: PDFLIB.
+ IF(MSTP(52).EQ.2) THEN
+ PARM(1)='NPTYPE'
+ VALUE(1)=1
+ PARM(2)='NGROUP'
+ VALUE(2)=MSTP(51)/1000
+ PARM(3)='NSET'
+ VALUE(3)=MOD(MSTP(51),1000)
+ PARM(4)='TMAS'
+ VALUE(4)=PMAS(6,1)
+ CALL PDFSET(PARM,VALUE)
+ MINT(93)=1000000+MSTP(51)
+ ENDIF
+
+C...Choose Lambda value to use in alpha-strong.
+ MSTU(111)=MSTP(2)
+ IF(MSTP(3).GE.2) THEN
+ ALAM=0.2D0
+ NF=4
+ IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.10) THEN
+ ALAM=ALAMIN(MSTP(51))
+ NF=NFIN(MSTP(51))
+ ELSEIF(MSTP(52).EQ.2) THEN
+ ALAM=QCDL4
+ NF=4
+ ENDIF
+ PARP(1)=ALAM
+ PARP(61)=ALAM
+ PARP(72)=ALAM
+ PARU(112)=ALAM
+ MSTU(112)=NF
+ IF(MSTP(3).EQ.3) PARJ(81)=ALAM
+ ENDIF
+
+C...Initialize the SUSY generation: couplings, masses,
+C...decay modes, branching ratios, and so on.
+ CALL PYMSIN
+
+C...Initialize widths and partial widths for resonances.
+ CALL PYINRE
+C...Set Z0 mass and width for e+e- routines.
+ PARJ(123)=PMAS(23,1)
+ PARJ(124)=PMAS(23,2)
+
+C...Identify beam and target particles and frame of process.
+ CHFRAM=FRAME//' '
+ CHBEAM=BEAM//' '
+ CHTARG=TARGET//' '
+ CALL PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
+ IF(MINT(65).EQ.1) GOTO 170
+
+C...For gamma-p or gamma-gamma allow many (3 or 6) alternatives.
+C...For e-gamma allow 2 alternatives.
+ MINT(121)=1
+ MINT(123)=MSTP(14)
+ IF(MSTP(14).EQ.10.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
+ IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
+ & (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=3
+ IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=6
+ IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
+ & (IABS(MINT(11)).EQ.11.OR.IABS(MINT(12)).EQ.11)) MINT(121)=2
+ ENDIF
+
+C...Set up kinematics of process.
+ CALL PYINKI(0)
+
+C...Precalculate flavour selection weights
+ CALL PYKFIN
+
+C...Loop over gamma-p or gamma-gamma alternatives.
+ DO 160 IGA=1,MINT(121)
+ MINT(122)=IGA
+
+C...Select partonic subprocesses to be included in the simulation.
+ CALL PYINPR
+
+C...Count number of subprocesses on.
+ MINT(48)=0
+ DO 130 ISUB=1,500
+ IF(MINT(50).EQ.0.AND.ISUB.GE.91.AND.ISUB.LE.96.AND.
+ & MSUB(ISUB).EQ.1) THEN
+ WRITE(MSTU(11),5200) ISUB,CHLH(MINT(41)),CHLH(MINT(42))
+ STOP
+ ELSEIF(MSUB(ISUB).EQ.1.AND.ISET(ISUB).EQ.-1) THEN
+ WRITE(MSTU(11),5300) ISUB
+ STOP
+ ELSEIF(MSUB(ISUB).EQ.1.AND.ISET(ISUB).LE.-2) THEN
+ WRITE(MSTU(11),5400) ISUB
+ STOP
+ ELSEIF(MSUB(ISUB).EQ.1) THEN
+ MINT(48)=MINT(48)+1
+ ENDIF
+ 130 CONTINUE
+ IF(MINT(48).EQ.0) THEN
+ WRITE(MSTU(11),5500)
+ STOP
+ ENDIF
+ MINT(49)=MINT(48)-MSUB(91)-MSUB(92)-MSUB(93)-MSUB(94)
+
+C...Reset variables for cross-section calculation.
+ DO 150 I=0,500
+ DO 140 J=1,3
+ NGEN(I,J)=0
+ XSEC(I,J)=0D0
+ 140 CONTINUE
+ 150 CONTINUE
+
+C...Find parametrized total cross-sections.
+ CALL PYXTOT
+
+C...Maxima of differential cross-sections.
+ IF(MSTP(121).LE.1) CALL PYMAXI
+
+C...Initialize possibility of pileup events.
+ IF(MINT(121).GT.1) MSTP(131)=0
+ IF(MSTP(131).NE.0) CALL PYPILE(1)
+
+C...Initialize multiple interactions with variable impact parameter.
+ IF(MINT(50).EQ.1.AND.(MINT(49).NE.0.OR.MSTP(131).NE.0).AND.
+ & MSTP(82).GE.2) CALL PYMULT(1)
+
+C...Save results for gamma-p and gamma-gamma alternatives.
+ IF(MINT(121).GT.1) CALL PYSAVE(1,IGA)
+ 160 CONTINUE
+
+C...Initialization finished.
+ 170 IF(MSTP(122).GE.1) WRITE(MSTU(11),5600)
+
+C...Formats for initialization information.
+ 5100 FORMAT('1',18('*'),1X,'PYINIT: initialization of PYTHIA ',
+ &'routines',1X,17('*'))
+ 5200 FORMAT(1X,'Error: process number ',I3,' not meaningful for ',A6,
+ &'-',A6,' interactions.'/1X,'Execution stopped!')
+ 5300 FORMAT(1X,'Error: requested subprocess',I4,' not implemented.'/
+ &1X,'Execution stopped!')
+ 5400 FORMAT(1X,'Error: requested subprocess',I4,' not existing.'/
+ &1X,'Execution stopped!')
+ 5500 FORMAT(1X,'Error: no subprocess switched on.'/
+ &1X,'Execution stopped.')
+ 5600 FORMAT(/1X,22('*'),1X,'PYINIT: initialization completed',1X,
+ &22('*'))
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYEVNT
+C...Administers the generation of a high-pT event via calls to
+C...a number of subroutines.
+
+ SUBROUTINE PYEVNT
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT2/,
+ &/PYINT4/,/PYINT5/,/PYUPPR/
+C...Local array.
+ DIMENSION VTX(4)
+
+C...Initial values for some counters.
+ N=0
+ MINT(5)=MINT(5)+1
+ MINT(7)=0
+ MINT(8)=0
+ MINT(83)=0
+ MINT(84)=MSTP(126)
+ MSTU(24)=0
+ MSTU70=0
+ MSTJ14=MSTJ(14)
+
+C...If variable energies: redo incoming kinematics and cross-section.
+ MSTI(61)=0
+ IF(MSTP(171).EQ.1) THEN
+ CALL PYINKI(1)
+ IF(MSTI(61).EQ.1) THEN
+ MINT(5)=MINT(5)-1
+ RETURN
+ ENDIF
+ IF(MINT(121).GT.1) CALL PYSAVE(3,1)
+ CALL PYXTOT
+ ENDIF
+
+C...Loop over number of pileup events; check space left.
+ IF(MSTP(131).LE.0) THEN
+ NPILE=1
+ ELSE
+ CALL PYPILE(2)
+ NPILE=MINT(81)
+ ENDIF
+ DO 260 IPILE=1,NPILE
+ IF(MINT(84)+100.GE.MSTU(4)) THEN
+ CALL PYERRM(11,
+ & '(PYEVNT:) no more space in PYJETS for pileup events')
+ IF(MSTU(21).GE.1) GOTO 270
+ ENDIF
+ MINT(82)=IPILE
+
+C...Generate variables of hard scattering.
+ MINT(51)=0
+ MSTI(52)=0
+ 100 CONTINUE
+ IF(MINT(51).NE.0.OR.MSTU(24).NE.0) MSTI(52)=MSTI(52)+1
+ MINT(31)=0
+ MINT(51)=0
+ MINT(57)=0
+ CALL PYRAND
+ IF(MSTI(61).EQ.1) THEN
+ MINT(5)=MINT(5)-1
+ RETURN
+ ENDIF
+ IF(MINT(51).EQ.2) RETURN
+ ISUB=MINT(1)
+ IF(MSTP(111).EQ.-1) GOTO 250
+
+ IF(ISUB.LE.90.OR.ISUB.GE.95) THEN
+C...Hard scattering (including low-pT):
+C...reconstruct kinematics and colour flow of hard scattering.
+ 110 MINT(51)=0
+ CALL PYSCAT
+ IF(MINT(51).EQ.1) GOTO 100
+ IPU1=MINT(84)+1
+ IPU2=MINT(84)+2
+ IF(ISUB.EQ.95) GOTO 130
+
+C...Showering of initial state partons (optional).
+ ALAMSV=PARJ(81)
+ PARJ(81)=PARP(72)
+ IF(MSTP(61).GE.1.AND.MINT(47).GE.2) CALL PYSSPA(IPU1,IPU2)
+ PARJ(81)=ALAMSV
+ IF(MINT(51).EQ.1) GOTO 100
+
+C...Showering of final state partons (optional).
+ ALAMSV=PARJ(81)
+ PARJ(81)=PARP(72)
+ IF(MSTP(71).GE.1.AND.ISET(ISUB).GE.2.AND.ISET(ISUB).LE.10)
+ & THEN
+ IPU3=MINT(84)+3
+ IPU4=MINT(84)+4
+ IF(ISET(ISUB).EQ.5) IPU4=-3
+ QMAX=VINT(55)
+ IF(ISET(ISUB).EQ.2) QMAX=SQRT(PARP(71))*VINT(55)
+ CALL PYSHOW(IPU3,IPU4,QMAX)
+ ELSEIF(MSTP(71).GE.1.AND.ISET(ISUB).EQ.11.AND.NFUP.GE.1) THEN
+ DO 120 IUP=1,NFUP
+ IPU3=IFUP(IUP,1)+MINT(84)
+ IPU4=IFUP(IUP,2)+MINT(84)
+ QMAX=SQRT(MAX(0D0,Q2UP(IUP)))
+ CALL PYSHOW(IPU3,IPU4,QMAX)
+ 120 CONTINUE
+ ENDIF
+ PARJ(81)=ALAMSV
+
+C...Decay of final state resonances.
+ MINT(32)=0
+ IF(MSTP(41).GE.1.AND.ISET(ISUB).LE.10) CALL PYRESD(0)
+ IF(MINT(51).EQ.1) GOTO 100
+ MINT(52)=N
+
+C...Multiple interactions.
+ IF(MSTP(81).GE.1.AND.MINT(50).EQ.1) CALL PYMULT(6)
+ MINT(53)=N
+
+C...Hadron remnants and primordial kT.
+ 130 CALL PYREMN(IPU1,IPU2)
+ IF(MINT(51).EQ.1.AND.MINT(57).GE.1.AND.MINT(57).LE.5) GOTO 110
+ IF(MINT(51).EQ.1) GOTO 100
+
+ ELSE
+C...Diffractive and elastic scattering.
+ CALL PYDIFF
+ ENDIF
+
+C...Check that no odd resonance left undecayed.
+ IF(MSTP(111).GE.1) THEN
+ NFIX=N
+ DO 140 I=MINT(84)+1,NFIX
+ IF(K(I,1).GE.1.AND.K(I,1).LE.10.AND.K(I,2).NE.21.AND.
+ & K(I,2).NE.22) THEN
+ IF(MWID(PYCOMP(K(I,2))).NE.0) THEN
+ CALL PYRESD(I)
+ IF(MINT(51).EQ.1) GOTO 100
+ ENDIF
+ ENDIF
+ 140 CONTINUE
+ ENDIF
+
+C...Recalculate energies from momenta and masses (if desired).
+ IF(MSTP(113).GE.1) THEN
+ DO 150 I=MINT(83)+1,N
+ IF(K(I,1).GT.0.AND.K(I,1).LE.10) P(I,4)=SQRT(P(I,1)**2+
+ & P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ 150 CONTINUE
+ NRECAL=N
+ ENDIF
+
+C...Rearrange partons along strings, check invariant mass cuts.
+ MSTU(28)=0
+ IF(MSTP(111).LE.0) MSTJ(14)=-1
+ CALL PYPREP(MINT(84)+1)
+ MSTJ(14)=MSTJ14
+ IF(MSTP(112).EQ.1.AND.MSTU(28).EQ.3) GOTO 100
+ IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) THEN
+ DO 180 I=MINT(84)+1,N
+ IF(K(I,2).EQ.94) THEN
+ DO 170 I1=I+1,MIN(N,I+3)
+ IF(K(I1,3).EQ.I) THEN
+ K(I1,3)=MOD(K(I1,4)/MSTU(5),MSTU(5))
+ IF(K(I1,3).EQ.0) THEN
+ DO 160 II=MINT(84)+1,I-1
+ IF(K(II,2).EQ.K(I1,2)) THEN
+ IF(MOD(K(II,4),MSTU(5)).EQ.I1.OR.
+ & MOD(K(II,5),MSTU(5)).EQ.I1) K(I1,3)=II
+ ENDIF
+ 160 CONTINUE
+ IF(K(I+1,3).EQ.0) K(I+1,3)=K(I,3)
+ ENDIF
+ ENDIF
+ 170 CONTINUE
+ ENDIF
+ 180 CONTINUE
+ CALL PYEDIT(12)
+ CALL PYEDIT(14)
+ IF(MSTP(125).EQ.0) CALL PYEDIT(15)
+ IF(MSTP(125).EQ.0) MINT(4)=0
+ DO 200 I=MINT(83)+1,N
+ IF(K(I,1).EQ.11.AND.K(I,4).EQ.0.AND.K(I,5).EQ.0) THEN
+ DO 190 I1=I+1,N
+ IF(K(I1,3).EQ.I.AND.K(I,4).EQ.0) K(I,4)=I1
+ IF(K(I1,3).EQ.I) K(I,5)=I1
+ 190 CONTINUE
+ ENDIF
+ 200 CONTINUE
+ ENDIF
+
+C...Introduce separators between sections in PYLIST event listing.
+ IF(IPILE.EQ.1.AND.MSTP(125).LE.0) THEN
+ MSTU70=1
+ MSTU(71)=N
+ ELSEIF(IPILE.EQ.1) THEN
+ MSTU70=3
+ MSTU(71)=2
+ MSTU(72)=MINT(4)
+ MSTU(73)=N
+ ENDIF
+
+C...Go back to lab frame (needed for vertices, also in fragmentation).
+ CALL PYFRAM(1)
+
+C...Set nonvanishing production vertex (optional).
+ IF(MSTP(151).EQ.1) THEN
+ DO 210 J=1,4
+ VTX(J)=PARP(150+J)*SQRT(-2D0*LOG(MAX(1D-10,PYR(0))))*
+ & SIN(PARU(2)*PYR(0))
+ 210 CONTINUE
+ DO 230 I=MINT(83)+1,N
+ DO 220 J=1,4
+ V(I,J)=V(I,J)+VTX(J)
+ 220 CONTINUE
+ 230 CONTINUE
+ ENDIF
+
+C...Perform hadronization (if desired).
+ IF(MSTP(111).GE.1) THEN
+ CALL PYEXEC
+ IF(MSTU(24).NE.0) GOTO 100
+ ENDIF
+ IF(MSTP(113).GE.1) THEN
+ DO 240 I=NRECAL,N
+ IF(P(I,5).GT.0D0) P(I,4)=SQRT(P(I,1)**2+
+ & P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ 240 CONTINUE
+ ENDIF
+ IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) CALL PYEDIT(14)
+
+C...Store event information and calculate Monte Carlo estimates of
+C...subprocess cross-sections.
+ 250 IF(IPILE.EQ.1) CALL PYDOCU
+
+C...Set counters for current pileup event and loop to next one.
+ MSTI(41)=IPILE
+ IF(IPILE.GE.2.AND.IPILE.LE.10) MSTI(40+IPILE)=ISUB
+ IF(MSTU70.LT.10) THEN
+ MSTU70=MSTU70+1
+ MSTU(70+MSTU70)=N
+ ENDIF
+ MINT(83)=N
+ MINT(84)=N+MSTP(126)
+ IF(IPILE.LT.NPILE) CALL PYFRAM(2)
+ 260 CONTINUE
+
+C...Generic information on pileup events. Reconstruct missing history.
+ IF(MSTP(131).EQ.1.AND.MSTP(133).GE.1) THEN
+ PARI(91)=VINT(132)
+ PARI(92)=VINT(133)
+ PARI(93)=VINT(134)
+ IF(MSTP(133).GE.2) PARI(93)=PARI(93)*XSEC(0,3)/VINT(131)
+ ENDIF
+ CALL PYEDIT(16)
+
+C...Transform to the desired coordinate frame.
+ 270 CALL PYFRAM(MSTP(124))
+ MSTU(70)=MSTU70
+ PARU(21)=VINT(1)
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYSTAT
+C...Prints out information about cross-sections, decay widths, branching
+C...ratios, kinematical limits, status codes and parameter values.
+
+ SUBROUTINE PYSTAT(MSTAT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT6/PROC(0:500)
+ CHARACTER PROC*28
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT2/,/PYINT4/,/PYINT5/,/PYINT6/,/PYMSSM/
+C...Local arrays, character variables and data.
+ DIMENSION WDTP(0:200),WDTE(0:200,0:5)
+ CHARACTER PROGA(6)*28,CHAU*16,CHKF*16,CHD1*16,CHD2*16,CHD3*16,
+ &CHIN(2)*12,STATE(-1:5)*4,CHKIN(21)*18,DISGA(2)*28
+ DATA PROGA/
+ &'VMD/hadron * VMD ','VMD/hadron * direct ',
+ &'VMD/hadron * anomalous ','direct * direct ',
+ &'direct * anomalous ','anomalous * anomalous '/
+ DATA DISGA/'e * VMD','e * anomalous'/
+ DATA STATE/'----','off ','on ','on/+','on/-','on/1','on/2'/,
+ &CHKIN/' m_hard (GeV/c^2) ',' p_T_hard (GeV/c) ',
+ &'m_finite (GeV/c^2)',' y*_subsystem ',' y*_large ',
+ &' y*_small ',' eta*_large ',' eta*_small ',
+ &'cos(theta*)_large ','cos(theta*)_small ',' x_1 ',
+ &' x_2 ',' x_F ',' cos(theta_hard) ',
+ &'m''_hard (GeV/c^2) ',' tau ',' y* ',
+ &'cos(theta_hard^-) ','cos(theta_hard^+) ',' x_T^2 ',
+ &' tau'' '/
+
+C...Cross-sections.
+ IF(MSTAT.LE.1) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(5,0)
+ WRITE(MSTU(11),5000)
+ WRITE(MSTU(11),5100)
+ WRITE(MSTU(11),5200) 0,PROC(0),NGEN(0,3),NGEN(0,1),XSEC(0,3)
+ DO 100 I=1,500
+ IF(MSUB(I).NE.1) GOTO 100
+ WRITE(MSTU(11),5200) I,PROC(I),NGEN(I,3),NGEN(I,1),XSEC(I,3)
+ 100 CONTINUE
+ IF(MINT(121).GT.1) THEN
+ WRITE(MSTU(11),5300)
+ DO 110 IGA=1,MINT(121)
+ CALL PYSAVE(3,IGA)
+ IF(MINT(121).EQ.2) THEN
+ WRITE(MSTU(11),5200) IGA,DISGA(IGA),NGEN(0,3),NGEN(0,1),
+ & XSEC(0,3)
+ ELSE
+ WRITE(MSTU(11),5200) IGA,PROGA(IGA),NGEN(0,3),NGEN(0,1),
+ & XSEC(0,3)
+ ENDIF
+ 110 CONTINUE
+ CALL PYSAVE(5,0)
+ ENDIF
+ WRITE(MSTU(11),5400) 1D0-DBLE(NGEN(0,3))/
+ & MAX(1D0,DBLE(NGEN(0,2)))
+
+C...Decay widths and branching ratios.
+ ELSEIF(MSTAT.EQ.2) THEN
+ WRITE(MSTU(11),5500)
+ WRITE(MSTU(11),5600)
+ DO 140 KC=1,500
+ KF=KCHG(KC,4)
+ CALL PYNAME(KF,CHKF)
+ IOFF=0
+ IF(KC.LE.22) THEN
+ IF(KC.GT.2*MSTP(1).AND.KC.LE.10) GOTO 140
+ IF(KC.GT.10+2*MSTP(1).AND.KC.LE.20) GOTO 140
+ IF(KC.LE.5.OR.(KC.GE.11.AND.KC.LE.16)) IOFF=1
+ IF(KC.EQ.18.AND.PMAS(18,1).LT.1D0) IOFF=1
+ IF(KC.EQ.21.OR.KC.EQ.22) IOFF=1
+ ELSE
+ IF(MWID(KC).LE.0) GOTO 140
+ IF(IMSS(1).LE.0.AND.(KF/KSUSY1.EQ.1.OR.
+ & KF/KSUSY1.EQ.2)) GOTO 140
+ ENDIF
+C...Off-shell branchings.
+ IF(IOFF.EQ.1) THEN
+ NGP=0
+ IF(KC.LE.20) NGP=(MOD(KC,10)+1)/2
+ IF(NGP.LE.MSTP(1)) WRITE(MSTU(11),5700) KF,CHKF(1:10),
+ & PMAS(KC,1),0D0,0D0,STATE(MDCY(KC,1)),0D0
+ DO 120 J=1,MDCY(KC,3)
+ IDC=J+MDCY(KC,2)-1
+ NGP1=0
+ IF(IABS(KFDP(IDC,1)).LE.20) NGP1=
+ & (MOD(IABS(KFDP(IDC,1)),10)+1)/2
+ NGP2=0
+ IF(IABS(KFDP(IDC,2)).LE.20) NGP2=
+ & (MOD(IABS(KFDP(IDC,2)),10)+1)/2
+ CALL PYNAME(KFDP(IDC,1),CHD1)
+ CALL PYNAME(KFDP(IDC,2),CHD2)
+ IF(KFDP(IDC,3).EQ.0) THEN
+ IF(MDME(IDC,2).EQ.102.AND.NGP1.LE.MSTP(1).AND.
+ & NGP2.LE.MSTP(1)) WRITE(MSTU(11),5800) IDC,CHD1(1:10),
+ & CHD2(1:10),0D0,0D0,STATE(MDME(IDC,1)),0D0
+ ELSE
+ CALL PYNAME(KFDP(IDC,3),CHD3)
+ IF(MDME(IDC,2).EQ.102.AND.NGP1.LE.MSTP(1).AND.
+ & NGP2.LE.MSTP(1)) WRITE(MSTU(11),5900) IDC,CHD1(1:10),
+ & CHD2(1:10),CHD3(1:10),0D0,0D0,STATE(MDME(IDC,1)),0D0
+ ENDIF
+ 120 CONTINUE
+C...On-shell decays.
+ ELSE
+ CALL PYWIDT(KF,PMAS(KC,1)**2,WDTP,WDTE)
+ BRFIN=1D0
+ IF(WDTE(0,0).LE.0D0) BRFIN=0D0
+ WRITE(MSTU(11),5700) KF,CHKF(1:10),PMAS(KC,1),WDTP(0),1D0,
+ & STATE(MDCY(KC,1)),BRFIN
+ DO 130 J=1,MDCY(KC,3)
+ IDC=J+MDCY(KC,2)-1
+ NGP1=0
+ IF(IABS(KFDP(IDC,1)).LE.20) NGP1=
+ & (MOD(IABS(KFDP(IDC,1)),10)+1)/2
+ NGP2=0
+ IF(IABS(KFDP(IDC,2)).LE.20) NGP2=
+ & (MOD(IABS(KFDP(IDC,2)),10)+1)/2
+ BRFIN=0D0
+ IF(WDTE(0,0).GT.0D0) BRFIN=WDTE(J,0)/WDTE(0,0)
+ CALL PYNAME(KFDP(IDC,1),CHD1)
+ CALL PYNAME(KFDP(IDC,2),CHD2)
+ IF(KFDP(IDC,3).EQ.0) THEN
+ IF(NGP1.LE.MSTP(1).AND.NGP2.LE.MSTP(1))
+ & WRITE(MSTU(11),5800) IDC,CHD1(1:10),
+ & CHD2(1:10),WDTP(J),WDTP(J)/WDTP(0),
+ & STATE(MDME(IDC,1)),BRFIN
+ ELSE
+ CALL PYNAME(KFDP(IDC,3),CHD3)
+ IF(NGP1.LE.MSTP(1).AND.NGP2.LE.MSTP(1))
+ & WRITE(MSTU(11),5900) IDC,CHD1(1:10),
+ & CHD2(1:10),CHD3(1:10),WDTP(J),WDTP(J)/WDTP(0),
+ & STATE(MDME(IDC,1)),BRFIN
+ ENDIF
+ 130 CONTINUE
+ ENDIF
+ 140 CONTINUE
+ WRITE(MSTU(11),6000)
+
+C...Allowed incoming partons/particles at hard interaction.
+ ELSEIF(MSTAT.EQ.3) THEN
+ WRITE(MSTU(11),6100)
+ CALL PYNAME(MINT(11),CHAU)
+ CHIN(1)=CHAU(1:12)
+ CALL PYNAME(MINT(12),CHAU)
+ CHIN(2)=CHAU(1:12)
+ WRITE(MSTU(11),6200) CHIN(1),CHIN(2)
+ DO 150 I=-20,22
+ IF(I.EQ.0) GOTO 150
+ IA=IABS(I)
+ IF(IA.GT.MSTP(58).AND.IA.LE.10) GOTO 150
+ IF(IA.GT.10+2*MSTP(1).AND.IA.LE.20) GOTO 150
+ CALL PYNAME(I,CHAU)
+ WRITE(MSTU(11),6300) CHAU,STATE(KFIN(1,I)),CHAU,
+ & STATE(KFIN(2,I))
+ 150 CONTINUE
+ WRITE(MSTU(11),6400)
+
+C...User-defined limits on kinematical variables.
+ ELSEIF(MSTAT.EQ.4) THEN
+ WRITE(MSTU(11),6500)
+ WRITE(MSTU(11),6600)
+ SHRMAX=CKIN(2)
+ IF(SHRMAX.LT.0D0) SHRMAX=VINT(1)
+ WRITE(MSTU(11),6700) CKIN(1),CHKIN(1),SHRMAX
+ PTHMIN=MAX(CKIN(3),CKIN(5))
+ PTHMAX=CKIN(4)
+ IF(PTHMAX.LT.0D0) PTHMAX=0.5D0*SHRMAX
+ WRITE(MSTU(11),6800) CKIN(3),PTHMIN,CHKIN(2),PTHMAX
+ WRITE(MSTU(11),6900) CHKIN(3),CKIN(6)
+ DO 160 I=4,14
+ WRITE(MSTU(11),6700) CKIN(2*I-1),CHKIN(I),CKIN(2*I)
+ 160 CONTINUE
+ SPRMAX=CKIN(32)
+ IF(SPRMAX.LT.0D0) SPRMAX=VINT(1)
+ WRITE(MSTU(11),6700) CKIN(31),CHKIN(15),SPRMAX
+ WRITE(MSTU(11),7000)
+
+C...Status codes and parameter values.
+ ELSEIF(MSTAT.EQ.5) THEN
+ WRITE(MSTU(11),7100)
+ WRITE(MSTU(11),7200)
+ DO 170 I=1,100
+ WRITE(MSTU(11),7300) I,MSTP(I),PARP(I),100+I,MSTP(100+I),
+ & PARP(100+I)
+ 170 CONTINUE
+
+C...List of all processes implemented in the program.
+ ELSEIF(MSTAT.EQ.6) THEN
+ WRITE(MSTU(11),7400)
+ WRITE(MSTU(11),7500)
+ DO 180 I=1,500
+ IF(ISET(I).LT.0) GOTO 180
+ WRITE(MSTU(11),7600) I,PROC(I),ISET(I),KFPR(I,1),KFPR(I,2)
+ 180 CONTINUE
+ WRITE(MSTU(11),7700)
+ ENDIF
+
+C...Formats for printouts.
+ 5000 FORMAT('1',9('*'),1X,'PYSTAT: Statistics on Number of ',
+ &'Events and Cross-sections',1X,9('*'))
+ 5100 FORMAT(/1X,78('=')/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',12X,
+ &'Subprocess',12X,'I',6X,'Number of points',6X,'I',4X,'Sigma',3X,
+ &'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',34('-'),'I',28('-'),
+ &'I',4X,'(mb)',4X,'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',1X,
+ &'N:o',1X,'Type',25X,'I',4X,'Generated',9X,'Tried',1X,'I',12X,
+ &'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')/1X,'I',34X,'I',28X,
+ &'I',12X,'I')
+ 5200 FORMAT(1X,'I',1X,I3,1X,A28,1X,'I',1X,I12,1X,I13,1X,'I',1X,1P,
+ &D10.3,1X,'I')
+ 5300 FORMAT(1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')/
+ &1X,'I',34X,'I',28X,'I',12X,'I')
+ 5400 FORMAT(1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')//
+ &1X,'********* Fraction of events that fail fragmentation ',
+ &'cuts =',1X,F8.5,' *********'/)
+ 5500 FORMAT('1',27('*'),1X,'PYSTAT: Decay Widths and Branching ',
+ &'Ratios',1X,27('*'))
+ 5600 FORMAT(/1X,98('=')/1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/
+ &1X,'I',5X,'Mother --> Branching/Decay Channel',8X,'I',1X,
+ &'Width (GeV)',1X,'I',7X,'B.R.',1X,'I',1X,'Stat',1X,'I',2X,
+ &'Eff. B.R.',1X,'I'/1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/
+ &1X,98('='))
+ 5700 FORMAT(1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/1X,'I',1X,
+ &I8,2X,A10,3X,'(m =',F10.3,')',2X,'-->',5X,'I',2X,1P,D10.3,0P,1X,
+ &'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,1P,D10.3,0P,1X,'I')
+ 5800 FORMAT(1X,'I',1X,I8,2X,A10,1X,'+',1X,A10,15X,'I',2X,
+ &1P,D10.3,0P,1X,'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,
+ &1P,D10.3,0P,1X,'I')
+ 5900 FORMAT(1X,'I',1X,I8,2X,A10,1X,'+',1X,A10,1X,'+',1X,A10,2X,'I',2X,
+ &1P,D10.3,0P,1X,'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,
+ &1P,D10.3,0P,1X,'I')
+ 6000 FORMAT(1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/1X,98('='))
+ 6100 FORMAT('1',7('*'),1X,'PYSTAT: Allowed Incoming Partons/',
+ &'Particles at Hard Interaction',1X,7('*'))
+ 6200 FORMAT(/1X,78('=')/1X,'I',38X,'I',37X,'I'/1X,'I',1X,
+ &'Beam particle:',1X,A12,10X,'I',1X,'Target particle:',1X,A12,7X,
+ &'I'/1X,'I',38X,'I',37X,'I'/1X,'I',1X,'Content',6X,'State',19X,
+ &'I',1X,'Content',6X,'State',18X,'I'/1X,'I',38X,'I',37X,'I'/1X,
+ &78('=')/1X,'I',38X,'I',37X,'I')
+ 6300 FORMAT(1X,'I',1X,A9,5X,A4,19X,'I',1X,A9,5X,A4,18X,'I')
+ 6400 FORMAT(1X,'I',38X,'I',37X,'I'/1X,78('='))
+ 6500 FORMAT('1',12('*'),1X,'PYSTAT: User-Defined Limits on ',
+ &'Kinematical Variables',1X,12('*'))
+ 6600 FORMAT(/1X,78('=')/1X,'I',76X,'I')
+ 6700 FORMAT(1X,'I',16X,1P,D10.3,0P,1X,'<',1X,A,1X,'<',1X,1P,D10.3,0P,
+ &16X,'I')
+ 6800 FORMAT(1X,'I',3X,1P,D10.3,0P,1X,'(',1P,D10.3,0P,')',1X,'<',1X,A,
+ &1X,'<',1X,1P,D10.3,0P,16X,'I')
+ 6900 FORMAT(1X,'I',29X,A,1X,'=',1X,1P,D10.3,0P,16X,'I')
+ 7000 FORMAT(1X,'I',76X,'I'/1X,78('='))
+ 7100 FORMAT('1',12('*'),1X,'PYSTAT: Summary of Status Codes and ',
+ &'Parameter Values',1X,12('*'))
+ 7200 FORMAT(/3X,'I',4X,'MSTP(I)',9X,'PARP(I)',20X,'I',4X,'MSTP(I)',9X,
+ &'PARP(I)'/)
+ 7300 FORMAT(1X,I3,5X,I6,6X,1P,D10.3,0P,18X,I3,5X,I6,6X,1P,D10.3)
+ 7400 FORMAT('1',13('*'),1X,'PYSTAT: List of implemented processes',
+ &1X,13('*'))
+ 7500 FORMAT(/1X,65('=')/1X,'I',34X,'I',28X,'I'/1X,'I',12X,
+ &'Subprocess',12X,'I',1X,'ISET',2X,'KFPR(I,1)',2X,'KFPR(I,2)',1X,
+ &'I'/1X,'I',34X,'I',28X,'I'/1X,65('=')/1X,'I',34X,'I',28X,'I')
+ 7600 FORMAT(1X,'I',1X,I3,1X,A28,1X,'I',1X,I4,1X,I10,1X,I10,1X,'I')
+ 7700 FORMAT(1X,'I',34X,'I',28X,'I'/1X,65('='))
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYINRE
+C...Calculates full and effective widths of gauge bosons, stores
+C...masses and widths, rescales coefficients to be used for
+C...resonance production generation.
+
+ SUBROUTINE PYINRE
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYDAT4/CHAF(500,2)
+ CHARACTER CHAF*16
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT6/PROC(0:500)
+ CHARACTER PROC*28
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYSUBS/,/PYPARS/,
+ &/PYINT1/,/PYINT2/,/PYINT4/,/PYINT6/,/PYMSSM/
+C...Local arrays and data.
+ DIMENSION WDTP(0:200),WDTE(0:200,0:5),WDTPM(0:200),
+ &WDTEM(0:200,0:5),KCORD(500),PMORD(500)
+
+C...Born level couplings in MSSM Higgs doublet sector.
+ XW=PARU(102)
+ XWV=XW
+ IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
+ XW1=1D0-XW
+ IF(MSTP(4).EQ.2) THEN
+ TANBE=PARU(141)
+ RATBE=((1D0-TANBE**2)/(1D0+TANBE**2))**2
+ SQMZ=PMAS(23,1)**2
+ SQMW=PMAS(24,1)**2
+ SQMH=PMAS(25,1)**2
+ SQMA=SQMH*(SQMZ-SQMH)/(SQMZ*RATBE-SQMH)
+ SQMHP=0.5D0*(SQMA+SQMZ+SQRT((SQMA+SQMZ)**2-4D0*SQMA*SQMZ*RATBE))
+ SQMHC=SQMA+SQMW
+ IF(SQMH.GE.SQMZ.OR.MIN(SQMA,SQMHP,SQMHC).LE.0D0) THEN
+ WRITE(MSTU(11),5000)
+ STOP
+ ENDIF
+ PMAS(35,1)=SQRT(SQMHP)
+ PMAS(36,1)=SQRT(SQMA)
+ PMAS(37,1)=SQRT(SQMHC)
+ ALSU=0.5D0*ATAN(2D0*TANBE*(SQMA+SQMZ)/((1D0-TANBE**2)*
+ & (SQMA-SQMZ)))
+ BESU=ATAN(TANBE)
+ PARU(142)=1D0
+ PARU(143)=1D0
+ PARU(161)=-SIN(ALSU)/COS(BESU)
+ PARU(162)=COS(ALSU)/SIN(BESU)
+ PARU(163)=PARU(161)
+ PARU(164)=SIN(BESU-ALSU)
+ PARU(165)=PARU(164)
+ PARU(168)=SIN(BESU-ALSU)+0.5D0*COS(2D0*BESU)*SIN(BESU+ALSU)/XW
+ PARU(171)=COS(ALSU)/COS(BESU)
+ PARU(172)=SIN(ALSU)/SIN(BESU)
+ PARU(173)=PARU(171)
+ PARU(174)=COS(BESU-ALSU)
+ PARU(175)=PARU(174)
+ PARU(176)=COS(2D0*ALSU)*COS(BESU+ALSU)-2D0*SIN(2D0*ALSU)*
+ & SIN(BESU+ALSU)
+ PARU(177)=COS(2D0*BESU)*COS(BESU+ALSU)
+ PARU(178)=COS(BESU-ALSU)-0.5D0*COS(2D0*BESU)*COS(BESU+ALSU)/XW
+ PARU(181)=TANBE
+ PARU(182)=1D0/TANBE
+ PARU(183)=PARU(181)
+ PARU(184)=0D0
+ PARU(185)=PARU(184)
+ PARU(186)=COS(BESU-ALSU)
+ PARU(187)=SIN(BESU-ALSU)
+ PARU(188)=PARU(186)
+ PARU(189)=PARU(187)
+ PARU(190)=0D0
+ PARU(195)=COS(BESU-ALSU)
+ ENDIF
+
+C...Reset effective widths of gauge bosons.
+ DO 110 I=1,500
+ DO 100 J=1,5
+ WIDS(I,J)=1D0
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...Order resonances by increasing mass (except Z0 and W+/-).
+ NRES=0
+ DO 140 KC=1,500
+ KF=KCHG(KC,4)
+ IF(KF.EQ.0) GOTO 140
+ IF(MWID(KC).EQ.0) GOTO 140
+ IF(KC.EQ.7.OR.KC.EQ.8.OR.KC.EQ.17.OR.KC.EQ.18) THEN
+ IF(MSTP(1).LE.3) GOTO 140
+ ENDIF
+ IF(KF/KSUSY1.EQ.1.OR.KF/KSUSY1.EQ.2) THEN
+ IF(IMSS(1).LE.0) GOTO 140
+ ENDIF
+ NRES=NRES+1
+ PMRES=PMAS(KC,1)
+ IF(KC.EQ.23.OR.KC.EQ.24) PMRES=0D0
+ DO 120 I1=NRES-1,1,-1
+ IF(PMRES.GE.PMORD(I1)) GOTO 130
+ KCORD(I1+1)=KCORD(I1)
+ PMORD(I1+1)=PMORD(I1)
+ 120 CONTINUE
+ 130 KCORD(I1+1)=KC
+ PMORD(I1+1)=PMRES
+ 140 CONTINUE
+
+C...Loop over possible resonances.
+ DO 180 I=1,NRES
+ KC=KCORD(I)
+ KF=KCHG(KC,4)
+
+C...Check that no fourth generation channels on by mistake.
+ IF(MSTP(1).LE.3) THEN
+ DO 150 J=1,MDCY(KC,3)
+ IDC=J+MDCY(KC,2)-1
+ KFA1=IABS(KFDP(IDC,1))
+ KFA2=IABS(KFDP(IDC,2))
+ IF(KFA1.EQ.7.OR.KFA1.EQ.8.OR.KFA1.EQ.17.OR.KFA1.EQ.18.OR.
+ & KFA2.EQ.7.OR.KFA2.EQ.8.OR.KFA2.EQ.17.OR.KFA2.EQ.18)
+ & MDME(IDC,1)=-1
+ 150 CONTINUE
+ ENDIF
+
+C...Check that no supersymmetric channels on by mistake.
+ IF(IMSS(1).LE.0) THEN
+ DO 160 J=1,MDCY(KC,3)
+ IDC=J+MDCY(KC,2)-1
+ KFA1S=IABS(KFDP(IDC,1))/KSUSY1
+ KFA2S=IABS(KFDP(IDC,2))/KSUSY1
+ IF(KFA1S.EQ.1.OR.KFA1S.EQ.2.OR.KFA2S.EQ.1.OR.KFA2S.EQ.2)
+ & MDME(IDC,1)=-1
+ 160 CONTINUE
+ ENDIF
+
+C...Find mass and evaluate width.
+ PMR=PMAS(KC,1)
+ IF(KF.EQ.25.OR.KF.EQ.35.OR.KF.EQ.36) MINT(62)=1
+ IF(MWID(KC).EQ.3) MINT(63)=1
+ CALL PYWIDT(KF,PMR**2,WDTP,WDTE)
+ MINT(51)=0
+
+C...Evaluate suppression factors due to non-simulated channels.
+ IF(KCHG(KC,3).EQ.0) THEN
+ WIDS(KC,1)=((WDTE(0,1)+WDTE(0,2))**2+
+ & 2D0*(WDTE(0,1)+WDTE(0,2))*(WDTE(0,4)+WDTE(0,5))+
+ & 2D0*WDTE(0,4)*WDTE(0,5))/WDTP(0)**2
+ WIDS(KC,2)=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))/WDTP(0)
+ WIDS(KC,3)=0D0
+ WIDS(KC,4)=0D0
+ WIDS(KC,5)=0D0
+ ELSE
+ IF(MWID(KC).EQ.3) MINT(63)=1
+ CALL PYWIDT(-KF,PMR**2,WDTPM,WDTEM)
+ MINT(51)=0
+ WIDS(KC,1)=((WDTE(0,1)+WDTE(0,2))*(WDTEM(0,1)+WDTEM(0,3))+
+ & (WDTE(0,1)+WDTE(0,2))*(WDTEM(0,4)+WDTEM(0,5))+
+ & (WDTE(0,4)+WDTE(0,5))*(WDTEM(0,1)+WDTEM(0,3))+
+ & WDTE(0,4)*WDTEM(0,5)+WDTE(0,5)*WDTEM(0,4))/WDTP(0)**2
+ WIDS(KC,2)=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))/WDTP(0)
+ WIDS(KC,3)=(WDTEM(0,1)+WDTEM(0,3)+WDTEM(0,4))/WDTP(0)
+ WIDS(KC,4)=((WDTE(0,1)+WDTE(0,2))**2+
+ & 2D0*(WDTE(0,1)+WDTE(0,2))*(WDTE(0,4)+WDTE(0,5))+
+ & 2D0*WDTE(0,4)*WDTE(0,5))/WDTP(0)**2
+ WIDS(KC,5)=((WDTEM(0,1)+WDTEM(0,3))**2+
+ & 2D0*(WDTEM(0,1)+WDTEM(0,3))*(WDTEM(0,4)+WDTEM(0,5))+
+ & 2D0*WDTEM(0,4)*WDTEM(0,5))/WDTP(0)**2
+ ENDIF
+
+C...Set resonance widths and branching ratios;
+C...also on/off switch for decays.
+ IF(MWID(KC).EQ.1.OR.MWID(KC).EQ.3) THEN
+ PMAS(KC,2)=WDTP(0)
+ PMAS(KC,3)=MIN(0.9D0*PMAS(KC,1),10D0*PMAS(KC,2))
+ MDCY(KC,1)=MSTP(41)
+ DO 170 J=1,MDCY(KC,3)
+ IDC=J+MDCY(KC,2)-1
+ BRAT(IDC)=0D0
+ IF(WDTP(0).GT.0D0) BRAT(IDC)=WDTP(J)/WDTP(0)
+ 170 CONTINUE
+ ENDIF
+ 180 CONTINUE
+
+C...Flavours of leptoquark: redefine charge and name.
+ KFLQQ=KFDP(MDCY(39,2),1)
+ KFLQL=KFDP(MDCY(39,2),2)
+ KCHG(39,1)=KCHG(PYCOMP(KFLQQ),1)*ISIGN(1,KFLQQ)+
+ &KCHG(PYCOMP(KFLQL),1)*ISIGN(1,KFLQL)
+ LL=1
+ IF(IABS(KFLQL).EQ.13) LL=2
+ IF(IABS(KFLQL).EQ.15) LL=3
+ CHAF(39,1)='LQ_'//CHAF(IABS(KFLQQ),1)(1:1)//
+ &CHAF(IABS(KFLQL),1)(1:LL)//' '
+ CHAF(39,2)=CHAF(39,2)(1:4+LL)//'bar '
+
+C...Special cases in treatment of gamma*/Z0: redefine process name.
+ IF(MSTP(43).EQ.1) THEN
+ PROC(1)='f + fbar -> gamma*'
+ PROC(15)='f + fbar -> g + gamma*'
+ PROC(19)='f + fbar -> gamma + gamma*'
+ PROC(30)='f + g -> f + gamma*'
+ PROC(35)='f + gamma -> f + gamma*'
+ ELSEIF(MSTP(43).EQ.2) THEN
+ PROC(1)='f + fbar -> Z0'
+ PROC(15)='f + fbar -> g + Z0'
+ PROC(19)='f + fbar -> gamma + Z0'
+ PROC(30)='f + g -> f + Z0'
+ PROC(35)='f + gamma -> f + Z0'
+ ELSEIF(MSTP(43).EQ.3) THEN
+ PROC(1)='f + fbar -> gamma*/Z0'
+ PROC(15)='f + fbar -> g + gamma*/Z0'
+ PROC(19)='f + fbar -> gamma + gamma*/Z0'
+ PROC(30)='f + g -> f + gamma*/Z0'
+ PROC(35)='f + gamma -> f + gamma*/Z0'
+ ENDIF
+
+C...Special cases in treatment of gamma*/Z0/Z'0: redefine process name.
+ IF(MSTP(44).EQ.1) THEN
+ PROC(141)='f + fbar -> gamma*'
+ ELSEIF(MSTP(44).EQ.2) THEN
+ PROC(141)='f + fbar -> Z0'
+ ELSEIF(MSTP(44).EQ.3) THEN
+ PROC(141)='f + fbar -> Z''0'
+ ELSEIF(MSTP(44).EQ.4) THEN
+ PROC(141)='f + fbar -> gamma*/Z0'
+ ELSEIF(MSTP(44).EQ.5) THEN
+ PROC(141)='f + fbar -> gamma*/Z''0'
+ ELSEIF(MSTP(44).EQ.6) THEN
+ PROC(141)='f + fbar -> Z0/Z''0'
+ ELSEIF(MSTP(44).EQ.7) THEN
+ PROC(141)='f + fbar -> gamma*/Z0/Z''0'
+ ENDIF
+
+C...Special cases in treatment of WW -> WW: redefine process name.
+ IF(MSTP(45).EQ.1) THEN
+ PROC(77)='W+ + W+ -> W+ + W+'
+ ELSEIF(MSTP(45).EQ.2) THEN
+ PROC(77)='W+ + W- -> W+ + W-'
+ ELSEIF(MSTP(45).EQ.3) THEN
+ PROC(77)='W+/- + W+/- -> W+/- + W+/-'
+ ENDIF
+
+C...Format for error information.
+ 5000 FORMAT(1X,'Error: unphysical input tan^2(beta) and m_H ',
+ &'combination'/1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYINBM
+C...Identifies the two incoming particles and the choice of frame.
+
+ SUBROUTINE PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
+C...Local arrays, character variables and data.
+ CHARACTER CHFRAM*8,CHBEAM*8,CHTARG*8,CHCOM(3)*8,CHALP(2)*26,
+ &CHIDNT(3)*8,CHTEMP*8,CHCDE(29)*8,CHINIT*76
+ DIMENSION LEN(3),KCDE(29),PM(2)
+ DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
+ &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
+ DATA CHCDE/'e- ','e+ ','nu_e ','nu_ebar ',
+ &'mu- ','mu+ ','nu_mu ','nu_mubar','tau- ',
+ &'tau+ ','nu_tau ','nu_tauba','pi+ ','pi- ',
+ &'n0 ','nbar0 ','p+ ','pbar- ','gamma ',
+ &'lambda0 ','sigma- ','sigma0 ','sigma+ ','xi- ',
+ &'xi0 ','omega- ','pi0 ','reggeon ','pomeron '/
+ DATA KCDE/11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,
+ &211,-211,2112,-2112,2212,-2212,22,3122,3112,3212,3222,
+ &3312,3322,3334,111,28,29/
+
+C...Store initial energy. Default frame.
+ VINT(290)=WIN
+ MINT(111)=0
+
+C...Convert character variables to lowercase and find their length.
+ CHCOM(1)=CHFRAM
+ CHCOM(2)=CHBEAM
+ CHCOM(3)=CHTARG
+ DO 130 I=1,3
+ LEN(I)=8
+ DO 110 LL=8,1,-1
+ IF(LEN(I).EQ.LL.AND.CHCOM(I)(LL:LL).EQ.' ') LEN(I)=LL-1
+ DO 100 LA=1,26
+ IF(CHCOM(I)(LL:LL).EQ.CHALP(2)(LA:LA)) CHCOM(I)(LL:LL)=
+ & CHALP(1)(LA:LA)
+ 100 CONTINUE
+ 110 CONTINUE
+ CHIDNT(I)=CHCOM(I)
+
+C...Fix up bar, underscore and charge in particle name (if needed).
+ DO 120 LL=1,6
+ IF(CHIDNT(I)(LL:LL).EQ.'~') THEN
+ CHTEMP=CHIDNT(I)
+ CHIDNT(I)=CHTEMP(1:LL-1)//'bar'//CHTEMP(LL+1:6)//' '
+ ENDIF
+ 120 CONTINUE
+ IF(CHIDNT(I)(7:7).EQ.'~') CHIDNT(I)(7:8)='ba'
+ IF(CHIDNT(I)(1:2).EQ.'nu'.AND.CHIDNT(I)(3:3).NE.'_') THEN
+ CHTEMP=CHIDNT(I)
+ CHIDNT(I)='nu_'//CHTEMP(3:7)
+ ELSEIF(CHIDNT(I)(1:2).EQ.'n ') THEN
+ CHIDNT(I)(1:3)='n0 '
+ ELSEIF(CHIDNT(I)(1:4).EQ.'nbar') THEN
+ CHIDNT(I)(1:5)='nbar0'
+ ELSEIF(CHIDNT(I)(1:2).EQ.'p ') THEN
+ CHIDNT(I)(1:3)='p+ '
+ ELSEIF(CHIDNT(I)(1:4).EQ.'pbar'.OR.
+ & CHIDNT(I)(1:2).EQ.'p-') THEN
+ CHIDNT(I)(1:5)='pbar-'
+ ELSEIF(CHIDNT(I)(1:6).EQ.'lambda') THEN
+ CHIDNT(I)(7:7)='0'
+ ELSEIF(CHIDNT(I)(1:3).EQ.'reg') THEN
+ CHIDNT(I)(1:7)='reggeon'
+ ELSEIF(CHIDNT(I)(1:3).EQ.'pom') THEN
+ CHIDNT(I)(1:7)='pomeron'
+ ENDIF
+ 130 CONTINUE
+
+C...Identify free initialization.
+ IF(CHCOM(1)(1:2).EQ.'no') THEN
+ MINT(65)=1
+ RETURN
+ ENDIF
+
+C...Identify incoming beam and target particles.
+ DO 150 I=1,2
+ DO 140 J=1,29
+ IF(CHIDNT(I+1).EQ.CHCDE(J)) MINT(10+I)=KCDE(J)
+ 140 CONTINUE
+ PM(I)=PYMASS(MINT(10+I))
+ VINT(2+I)=PM(I)
+ 150 CONTINUE
+ IF(MINT(11).EQ.0) WRITE(MSTU(11),5000) CHBEAM(1:LEN(2))
+ IF(MINT(12).EQ.0) WRITE(MSTU(11),5100) CHTARG(1:LEN(3))
+ IF(MINT(11).EQ.0.OR.MINT(12).EQ.0) STOP
+
+C...Identify choice of frame and input energies.
+ CHINIT=' '
+
+C...Events defined in the CM frame.
+ IF(CHCOM(1)(1:2).EQ.'cm') THEN
+ MINT(111)=1
+ S=WIN**2
+ IF(MSTP(122).GE.1) THEN
+ IF(CHCOM(2)(1:1).NE.'e') THEN
+ LOFFS=(31-(LEN(2)+LEN(3)))/2
+ CHINIT(LOFFS+1:76)='PYTHIA will be initialized for a '//
+ & CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
+ & ' collider'//' '
+ ELSE
+ LOFFS=(30-(LEN(2)+LEN(3)))/2
+ CHINIT(LOFFS+1:76)='PYTHIA will be initialized for an '//
+ & CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
+ & ' collider'//' '
+ ENDIF
+ WRITE(MSTU(11),5200) CHINIT
+ WRITE(MSTU(11),5300) WIN
+ ENDIF
+
+C...Events defined in fixed target frame.
+ ELSEIF(CHCOM(1)(1:3).EQ.'fix') THEN
+ MINT(111)=2
+ S=PM(1)**2+PM(2)**2+2D0*PM(2)*SQRT(PM(1)**2+WIN**2)
+ IF(MSTP(122).GE.1) THEN
+ LOFFS=(29-(LEN(2)+LEN(3)))/2
+ CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
+ & CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
+ & ' fixed target'//' '
+ WRITE(MSTU(11),5200) CHINIT
+ WRITE(MSTU(11),5400) WIN
+ WRITE(MSTU(11),5500) SQRT(S)
+ ENDIF
+
+C...Frame defined by user three-vectors.
+ ELSEIF(CHCOM(1)(1:3).EQ.'use') THEN
+ MINT(111)=3
+ P(1,5)=PM(1)
+ P(2,5)=PM(2)
+ P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
+ P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
+ S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
+ & (P(1,3)+P(2,3))**2
+ IF(MSTP(122).GE.1) THEN
+ LOFFS=(12-(LEN(2)+LEN(3)))/2
+ CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
+ & CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
+ & ' user-specified configuration'//' '
+ WRITE(MSTU(11),5200) CHINIT
+ WRITE(MSTU(11),5600)
+ WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
+ WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
+ WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
+ ENDIF
+
+C...Frame defined by user four-vectors.
+ ELSEIF(CHCOM(1)(1:4).EQ.'four') THEN
+ MINT(111)=4
+ PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
+ P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
+ PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
+ P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
+ S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
+ & (P(1,3)+P(2,3))**2
+ IF(MSTP(122).GE.1) THEN
+ LOFFS=(12-(LEN(2)+LEN(3)))/2
+ CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
+ & CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
+ & ' user-specified configuration'//' '
+ WRITE(MSTU(11),5200) CHINIT
+ WRITE(MSTU(11),5600)
+ WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
+ WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
+ WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
+ ENDIF
+
+C...Frame defined by user five-vectors.
+ ELSEIF(CHCOM(1)(1:4).EQ.'five') THEN
+ MINT(111)=5
+ S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
+ & (P(1,3)+P(2,3))**2
+ IF(MSTP(122).GE.1) THEN
+ LOFFS=(12-(LEN(2)+LEN(3)))/2
+ CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
+ & CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
+ & ' user-specified configuration'//' '
+ WRITE(MSTU(11),5200) CHINIT
+ WRITE(MSTU(11),5600)
+ WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
+ WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
+ WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
+ ENDIF
+
+C...Unknown frame. Error for too low CM energy.
+ ELSE
+ WRITE(MSTU(11),5800) CHFRAM(1:LEN(1))
+ STOP
+ ENDIF
+ IF(S.LT.PARP(2)**2) THEN
+ WRITE(MSTU(11),5900) SQRT(S)
+ STOP
+ ENDIF
+
+C...Formats for initialization and error information.
+ 5000 FORMAT(1X,'Error: unrecognized beam particle ''',A,'''D0'/
+ &1X,'Execution stopped!')
+ 5100 FORMAT(1X,'Error: unrecognized target particle ''',A,'''D0'/
+ &1X,'Execution stopped!')
+ 5200 FORMAT(/1X,78('=')/1X,'I',76X,'I'/1X,'I',A76,'I')
+ 5300 FORMAT(1X,'I',18X,'at',1X,F10.3,1X,'GeV center-of-mass energy',
+ &19X,'I'/1X,'I',76X,'I'/1X,78('='))
+ 5400 FORMAT(1X,'I',22X,'at',1X,F10.3,1X,'GeV/c lab-momentum',22X,'I')
+ 5500 FORMAT(1X,'I',76X,'I'/1X,'I',11X,'corresponding to',1X,F10.3,1X,
+ &'GeV center-of-mass energy',12X,'I'/1X,'I',76X,'I'/1X,78('='))
+ 5600 FORMAT(1X,'I',76X,'I'/1X,'I',18X,'px (GeV/c)',3X,'py (GeV/c)',3X,
+ &'pz (GeV/c)',6X,'E (GeV)',9X,'I')
+ 5700 FORMAT(1X,'I',8X,A8,4(2X,F10.3,1X),8X,'I')
+ 5800 FORMAT(1X,'Error: unrecognized coordinate frame ''',A,'''D0'/
+ &1X,'Execution stopped!')
+ 5900 FORMAT(1X,'Error: too low CM energy,',F8.3,' GeV for event ',
+ &'generation.'/1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYINKI
+C...Sets up kinematics, including rotations and boosts to/from CM frame.
+
+ SUBROUTINE PYINKI(MODKI)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
+
+C...Set initial flavour state.
+ N=2
+ DO 100 I=1,2
+ K(I,1)=1
+ K(I,2)=MINT(10+I)
+ 100 CONTINUE
+
+C...Reset boost. Do kinematics for various cases.
+ DO 110 J=6,10
+ VINT(J)=0D0
+ 110 CONTINUE
+
+C...Set up kinematics for events defined in CM frame.
+ IF(MINT(111).EQ.1) THEN
+ WIN=VINT(290)
+ IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
+ S=WIN**2
+ P(1,5)=VINT(3)
+ P(2,5)=VINT(4)
+ P(1,1)=0D0
+ P(1,2)=0D0
+ P(2,1)=0D0
+ P(2,2)=0D0
+ P(1,3)=SQRT(((S-P(1,5)**2-P(2,5)**2)**2-(2D0*P(1,5)*P(2,5))**2)/
+ & (4D0*S))
+ P(2,3)=-P(1,3)
+ P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
+ P(2,4)=SQRT(P(2,3)**2+P(2,5)**2)
+
+C...Set up kinematics for fixed target events.
+ ELSEIF(MINT(111).EQ.2) THEN
+ WIN=VINT(290)
+ IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
+ P(1,5)=VINT(3)
+ P(2,5)=VINT(4)
+ P(1,1)=0D0
+ P(1,2)=0D0
+ P(2,1)=0D0
+ P(2,2)=0D0
+ P(1,3)=WIN
+ P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
+ P(2,3)=0D0
+ P(2,4)=P(2,5)
+ S=P(1,5)**2+P(2,5)**2+2D0*P(2,4)*P(1,4)
+ VINT(10)=P(1,3)/(P(1,4)+P(2,4))
+ CALL PYROBO(0,0,0D0,0D0,0D0,0D0,-VINT(10))
+
+C...Set up kinematics for events in user-defined frame.
+ ELSEIF(MINT(111).EQ.3) THEN
+ P(1,5)=VINT(3)
+ P(2,5)=VINT(4)
+ P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
+ P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
+ DO 120 J=1,3
+ VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
+ 120 CONTINUE
+ CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
+ VINT(7)=PYANGL(P(1,1),P(1,2))
+ CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
+ VINT(6)=PYANGL(P(1,3),P(1,1))
+ CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
+ S=P(1,5)**2+P(2,5)**2+2D0*(P(1,4)*P(2,4)-P(1,3)*P(2,3))
+
+C...Set up kinematics for events with user-defined four-vectors.
+ ELSEIF(MINT(111).EQ.4) THEN
+ PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
+ P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
+ PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
+ P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
+ DO 130 J=1,3
+ VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
+ 130 CONTINUE
+ CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
+ VINT(7)=PYANGL(P(1,1),P(1,2))
+ CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
+ VINT(6)=PYANGL(P(1,3),P(1,1))
+ CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
+ S=(P(1,4)+P(2,4))**2
+
+C...Set up kinematics for events with user-defined five-vectors.
+ ELSEIF(MINT(111).EQ.5) THEN
+ DO 140 J=1,3
+ VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
+ 140 CONTINUE
+ CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
+ VINT(7)=PYANGL(P(1,1),P(1,2))
+ CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
+ VINT(6)=PYANGL(P(1,3),P(1,1))
+ CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
+ S=(P(1,4)+P(2,4))**2
+ ENDIF
+
+C...Return or error for too low CM energy.
+ IF(MODKI.EQ.1.AND.S.LT.PARP(2)**2) THEN
+ IF(MSTP(172).LE.1) THEN
+ CALL PYERRM(23,
+ & '(PYINKI:) too low invariant mass in this event')
+ ELSE
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ ENDIF
+
+C...Save information on incoming particles.
+ VINT(1)=SQRT(S)
+ VINT(2)=S
+ IF(MINT(111).GE.4) VINT(3)=P(1,5)
+ IF(MINT(111).GE.4) VINT(4)=P(2,5)
+ VINT(5)=P(1,3)
+ IF(MODKI.EQ.0) VINT(289)=S
+ DO 150 J=1,5
+ V(1,J)=0D0
+ V(2,J)=0D0
+ VINT(290+J)=P(1,J)
+ VINT(295+J)=P(2,J)
+ 150 CONTINUE
+
+C...Store pT cut-off and related constants to be used in generation.
+ IF(MODKI.EQ.0) VINT(285)=CKIN(3)
+ IF(MSTP(82).LE.1) THEN
+ IF(MINT(121).GT.1) PARP(81)=1.30D0+0.15D0*LOG(VINT(1)/200D0)/
+ & LOG(900D0/200D0)
+ PTMN=PARP(81)
+ ELSE
+ IF(MINT(121).GT.1) PARP(82)=1.25D0+0.15D0*LOG(VINT(1)/200D0)/
+ & LOG(900D0/200D0)
+ PTMN=PARP(82)
+ ENDIF
+ VINT(149)=4D0*PTMN**2/S
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYINPR
+C...Selects partonic subprocesses to be included in the simulation.
+
+ SUBROUTINE PYINPR
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ SAVE /PYDAT1/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
+
+C...Reset processes to be included.
+ IF(MSEL.NE.0) THEN
+ DO 100 I=1,500
+ MSUB(I)=0
+ 100 CONTINUE
+ ENDIF
+
+C...For e-gamma witn MSTP(14)=10 allow mixture of VMD and anomalous.
+ IF(MINT(121).EQ.2) THEN
+ MSUB(10)=1
+ MINT(123)=MINT(122)+1
+
+C...For gamma-p or gamma-gamma with MSTP(14)=10 allow mixture.
+C...Here also set a few parameters otherwise normally not touched.
+ ELSEIF(MINT(121).GT.1) THEN
+
+C...Parton distributions dampened at small Q2; go to low energies,
+C...alpha_s <1; no minimum pT cut-off a priori.
+ MSTP(57)=3
+ MSTP(85)=0
+ PARP(2)=2D0
+ PARU(115)=1D0
+ CKIN(5)=0.2D0
+ CKIN(6)=0.2D0
+
+C...Define pT cut-off parameters and whether run involves low-pT.
+ IF(MSTP(82).LE.1) THEN
+ PTMVMD=1.30D0+0.15D0*LOG(VINT(1)/200D0)/LOG(900D0/200D0)
+ ELSE
+ PTMVMD=1.25D0+0.15D0*LOG(VINT(1)/200D0)/LOG(900D0/200D0)
+ ENDIF
+ PTMDIR=PARP(15)
+ PTMANO=PTMVMD
+ IF(MSTP(15).EQ.5) PTMANO=0.60D0+
+ & 0.125D0*LOG(1D0+0.10D0*VINT(1))**2
+ IPTL=1
+ IF(VINT(285).GT.MAX(PTMVMD,PTMDIR,PTMANO)) IPTL=0
+ IF(MSEL.EQ.2) IPTL=1
+
+C...Set up for p/VMD * VMD.
+ IF(MINT(122).EQ.1) THEN
+ MINT(123)=2
+ MSUB(11)=1
+ MSUB(12)=1
+ MSUB(13)=1
+ MSUB(28)=1
+ MSUB(53)=1
+ MSUB(68)=1
+ IF(IPTL.EQ.1) MSUB(95)=1
+ IF(MSEL.EQ.2) THEN
+ MSUB(91)=1
+ MSUB(92)=1
+ MSUB(93)=1
+ MSUB(94)=1
+ ENDIF
+ PARP(81)=PTMVMD
+ PARP(82)=PTMVMD
+ IF(IPTL.EQ.1) CKIN(3)=0D0
+
+C...Set up for p/VMD * direct gamma.
+ ELSEIF(MINT(122).EQ.2) THEN
+ MINT(123)=0
+ IF(MINT(121).EQ.6) MINT(123)=5
+ MSUB(33)=1
+ MSUB(54)=1
+ IF(IPTL.EQ.1) CKIN(3)=PTMDIR
+
+C...Set up for p/VMD * anomalous gamma.
+ ELSEIF(MINT(122).EQ.3) THEN
+ MINT(123)=3
+ IF(MINT(121).EQ.6) MINT(123)=7
+ MSUB(11)=1
+ MSUB(12)=1
+ MSUB(13)=1
+ MSUB(28)=1
+ MSUB(53)=1
+ MSUB(68)=1
+ IF(MSTP(82).GE.2) MSTP(85)=1
+ IF(IPTL.EQ.1) CKIN(3)=PTMANO
+
+C...Set up for direct * direct gamma (switch off leptons).
+ ELSEIF(MINT(122).EQ.4) THEN
+ MINT(123)=0
+ MSUB(58)=1
+ DO 110 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
+ IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
+ 110 CONTINUE
+ IF(IPTL.EQ.1) CKIN(3)=PTMDIR
+
+C...Set up for direct * anomalous gamma.
+ ELSEIF(MINT(122).EQ.5) THEN
+ MINT(123)=6
+ MSUB(33)=1
+ MSUB(54)=1
+ IF(IPTL.EQ.1) CKIN(3)=PTMANO
+
+C...Set up for anomalous * anomalous gamma.
+ ELSEIF(MINT(122).EQ.6) THEN
+ MINT(123)=3
+ MSUB(11)=1
+ MSUB(12)=1
+ MSUB(13)=1
+ MSUB(28)=1
+ MSUB(53)=1
+ MSUB(68)=1
+ IF(MSTP(82).GE.2) MSTP(85)=1
+ IF(IPTL.EQ.1) CKIN(3)=PTMANO
+ ENDIF
+
+C...End of special set up for gamma-p and gamma-gamma.
+ CKIN(1)=2D0*CKIN(3)
+ ENDIF
+
+C...Flavour information for individual beams.
+ DO 120 I=1,2
+ MINT(40+I)=1
+ IF(MINT(123).GE.1.AND.MINT(10+I).EQ.22) MINT(40+I)=2
+ IF(IABS(MINT(10+I)).GT.100) MINT(40+I)=2
+ IF(MINT(10+I).EQ.28.OR.MINT(10+I).EQ.29) MINT(40+I)=2
+ MINT(44+I)=MINT(40+I)
+ IF(MSTP(11).GE.1.AND.IABS(MINT(10+I)).EQ.11) MINT(44+I)=3
+ 120 CONTINUE
+
+C...If two gammas, whereof one direct, pick the first.
+ IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
+ IF(MINT(123).GE.4.AND.MINT(123).LE.6) THEN
+ MINT(41)=1
+ MINT(45)=1
+ ENDIF
+ ELSEIF(MINT(11).EQ.22.OR.MINT(12).EQ.22) THEN
+ IF(MINT(123).GE.4) CALL PYERRM(26,
+ & '(PYINPR:) unallowed MSTP(14) code for single photon')
+ ENDIF
+
+C...Flavour information on combination of incoming particles.
+ MINT(43)=2*MINT(41)+MINT(42)-2
+ MINT(44)=MINT(43)
+ IF(MINT(123).LE.0) THEN
+ IF(MINT(11).EQ.22) MINT(43)=MINT(43)+2
+ IF(MINT(12).EQ.22) MINT(43)=MINT(43)+1
+ ELSEIF(MINT(123).LE.3) THEN
+ IF(MINT(11).EQ.22) MINT(44)=MINT(44)-2
+ IF(MINT(12).EQ.22) MINT(44)=MINT(44)-1
+ ELSEIF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
+ MINT(43)=4
+ MINT(44)=1
+ ENDIF
+ MINT(47)=2*MIN(2,MINT(45))+MIN(2,MINT(46))-2
+ IF(MIN(MINT(45),MINT(46)).EQ.3) MINT(47)=5
+ MINT(50)=0
+ IF(MINT(41).EQ.2.AND.MINT(42).EQ.2) MINT(50)=1
+ IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.MINT(123).GE.3)
+ &MINT(50)=0
+ MINT(107)=0
+ IF(MINT(11).EQ.22) THEN
+ MINT(107)=MINT(123)
+ IF(MINT(123).GE.4) MINT(107)=0
+ IF(MINT(123).EQ.7) MINT(107)=2
+ ENDIF
+ MINT(108)=0
+ IF(MINT(12).EQ.22) THEN
+ MINT(108)=MINT(123)
+ IF(MINT(123).GE.4) MINT(108)=MINT(123)-3
+ IF(MINT(123).EQ.7) MINT(108)=3
+ ENDIF
+
+C...Select default processes according to incoming beams
+C...(already done for gamma-p and gamma-gamma with MSTP(14)=10).
+ IF(MINT(121).GT.1) THEN
+ ELSEIF(MSEL.EQ.1.OR.MSEL.EQ.2) THEN
+
+ IF(MINT(43).EQ.1) THEN
+C...Lepton + lepton -> gamma/Z0 or W.
+ IF(MINT(11)+MINT(12).EQ.0) MSUB(1)=1
+ IF(MINT(11)+MINT(12).NE.0) MSUB(2)=1
+
+ ELSEIF(MINT(43).LE.3.AND.MINT(123).EQ.0.AND.
+ & (MINT(11).EQ.22.OR.MINT(12).EQ.22)) THEN
+C...Unresolved photon + lepton: Compton scattering.
+ MSUB(34)=1
+
+ ELSEIF(MINT(43).LE.3) THEN
+C...Lepton + hadron: deep inelastic scattering.
+ MSUB(10)=1
+
+ ELSEIF(MINT(123).EQ.0.AND.MINT(11).EQ.22.AND.
+ & MINT(12).EQ.22) THEN
+C...Two unresolved photons: fermion pair production.
+ MSUB(58)=1
+
+ ELSEIF((MINT(123).EQ.0.AND.(MINT(11).EQ.22.OR.MINT(12).EQ.22))
+ & .OR.(MINT(123).GE.4.AND.MINT(123).LE.6.AND.MINT(11).EQ.22.AND.
+ & MINT(12).EQ.22)) THEN
+C...Unresolved photon + hadron: photon-parton scattering.
+ MSUB(33)=1
+ MSUB(34)=1
+ MSUB(54)=1
+
+ ELSEIF(MSEL.EQ.1) THEN
+C...High-pT QCD processes:
+ MSUB(11)=1
+ MSUB(12)=1
+ MSUB(13)=1
+ MSUB(28)=1
+ MSUB(53)=1
+ MSUB(68)=1
+ IF(MSTP(82).LE.1.AND.CKIN(3).LT.PARP(81)) MSUB(95)=1
+ IF(MSTP(82).GE.2.AND.CKIN(3).LT.PARP(82)) MSUB(95)=1
+ IF(MSUB(95).EQ.1.AND.MINT(50).EQ.0) MSUB(95)=0
+
+ ELSE
+C...All QCD processes:
+ MSUB(11)=1
+ MSUB(12)=1
+ MSUB(13)=1
+ MSUB(28)=1
+ MSUB(53)=1
+ MSUB(68)=1
+ MSUB(91)=1
+ MSUB(92)=1
+ MSUB(93)=1
+ MSUB(94)=1
+ MSUB(95)=1
+ ENDIF
+
+ ELSEIF(MSEL.GE.4.AND.MSEL.LE.8) THEN
+C...Heavy quark production.
+ MSUB(81)=1
+ MSUB(82)=1
+ MSUB(84)=1
+ DO 130 J=1,MIN(8,MDCY(21,3))
+ MDME(MDCY(21,2)+J-1,1)=0
+ 130 CONTINUE
+ MDME(MDCY(21,2)+MSEL-1,1)=1
+ MSUB(85)=1
+ DO 140 J=1,MIN(12,MDCY(22,3))
+ MDME(MDCY(22,2)+J-1,1)=0
+ 140 CONTINUE
+ MDME(MDCY(22,2)+MSEL-1,1)=1
+
+ ELSEIF(MSEL.EQ.10) THEN
+C...Prompt photon production:
+ MSUB(14)=1
+ MSUB(18)=1
+ MSUB(29)=1
+
+ ELSEIF(MSEL.EQ.11) THEN
+C...Z0/gamma* production:
+ MSUB(1)=1
+
+ ELSEIF(MSEL.EQ.12) THEN
+C...W+/- production:
+ MSUB(2)=1
+
+ ELSEIF(MSEL.EQ.13) THEN
+C...Z0 + jet:
+ MSUB(15)=1
+ MSUB(30)=1
+
+ ELSEIF(MSEL.EQ.14) THEN
+C...W+/- + jet:
+ MSUB(16)=1
+ MSUB(31)=1
+
+ ELSEIF(MSEL.EQ.15) THEN
+C...Z0 & W+/- pair production:
+ MSUB(19)=1
+ MSUB(20)=1
+ MSUB(22)=1
+ MSUB(23)=1
+ MSUB(25)=1
+
+ ELSEIF(MSEL.EQ.16) THEN
+C...h0 production:
+ MSUB(3)=1
+ MSUB(102)=1
+ MSUB(103)=1
+ MSUB(123)=1
+ MSUB(124)=1
+
+ ELSEIF(MSEL.EQ.17) THEN
+C...h0 & Z0 or W+/- pair production:
+ MSUB(24)=1
+ MSUB(26)=1
+
+ ELSEIF(MSEL.EQ.18) THEN
+C...h0 production; interesting processes in e+e-.
+ MSUB(24)=1
+ MSUB(103)=1
+ MSUB(123)=1
+ MSUB(124)=1
+
+ ELSEIF(MSEL.EQ.19) THEN
+C...h0, H0 and A0 production; interesting processes in e+e-.
+ MSUB(24)=1
+ MSUB(103)=1
+ MSUB(123)=1
+ MSUB(124)=1
+ MSUB(153)=1
+ MSUB(171)=1
+ MSUB(173)=1
+ MSUB(174)=1
+ MSUB(158)=1
+ MSUB(176)=1
+ MSUB(178)=1
+ MSUB(179)=1
+
+ ELSEIF(MSEL.EQ.21) THEN
+C...Z'0 production:
+ MSUB(141)=1
+
+ ELSEIF(MSEL.EQ.22) THEN
+C...W'+/- production:
+ MSUB(142)=1
+
+ ELSEIF(MSEL.EQ.23) THEN
+C...H+/- production:
+ MSUB(143)=1
+
+ ELSEIF(MSEL.EQ.24) THEN
+C...R production:
+ MSUB(144)=1
+
+ ELSEIF(MSEL.EQ.25) THEN
+C...LQ (leptoquark) production.
+ MSUB(145)=1
+ MSUB(162)=1
+ MSUB(163)=1
+ MSUB(164)=1
+
+ ELSEIF(MSEL.GE.35.AND.MSEL.LE.38) THEN
+C...Production of one heavy quark (W exchange):
+ MSUB(83)=1
+ DO 150 J=1,MIN(8,MDCY(21,3))
+ MDME(MDCY(21,2)+J-1,1)=0
+ 150 CONTINUE
+ MDME(MDCY(21,2)+MSEL-31,1)=1
+
+CMRENNA++Define SUSY alternatives.
+ ELSEIF(MSEL.EQ.39) THEN
+C...Turn on all SUSY processes.
+ IF(MINT(43).EQ.4) THEN
+C...Hadron-hadron processes.
+ DO 160 I=201,280
+ IF(ISET(I).GE.0) MSUB(I)=1
+ 160 CONTINUE
+ ELSEIF(MINT(43).EQ.1) THEN
+C...Lepton-lepton processes: QED production of squarks.
+ DO 170 I=201,214
+ MSUB(I)=1
+ 170 CONTINUE
+ MSUB(210)=0
+ MSUB(211)=0
+ MSUB(212)=0
+ DO 180 I=216,228
+ MSUB(I)=1
+ 180 CONTINUE
+ DO 190 I=261,263
+ MSUB(I)=1
+ 190 CONTINUE
+ MSUB(277)=1
+ MSUB(278)=1
+ ENDIF
+
+ ELSEIF(MSEL.EQ.40) THEN
+C...Gluinos and squarks.
+ IF(MINT(43).EQ.4) THEN
+ MSUB(243)=1
+ MSUB(244)=1
+ MSUB(258)=1
+ MSUB(259)=1
+ MSUB(261)=1
+ MSUB(262)=1
+ MSUB(264)=1
+ MSUB(265)=1
+ DO 200 I=271,280
+ MSUB(I)=1
+ 200 CONTINUE
+ ELSEIF(MINT(43).EQ.1) THEN
+ MSUB(277)=1
+ MSUB(278)=1
+ ENDIF
+
+ ELSEIF(MSEL.EQ.41) THEN
+C...Stop production.
+ MSUB(261)=1
+ MSUB(262)=1
+ MSUB(263)=1
+ IF(MINT(43).EQ.4) THEN
+ MSUB(264)=1
+ MSUB(265)=1
+ ENDIF
+
+ ELSEIF(MSEL.EQ.42) THEN
+C...Slepton production.
+ DO 210 I=201,214
+ MSUB(I)=1
+ 210 CONTINUE
+ IF(MINT(43).NE.4) THEN
+ MSUB(210)=0
+ MSUB(211)=0
+ MSUB(212)=0
+ ENDIF
+
+ ELSEIF(MSEL.EQ.43) THEN
+C...Neutralino/Chargino + Gluino/Squark.
+ IF(MINT(43).EQ.4) THEN
+ DO 220 I=237,242
+ MSUB(I)=1
+ 220 CONTINUE
+ DO 230 I=246,257
+ MSUB(I)=1
+ 230 CONTINUE
+ ENDIF
+
+ ELSEIF(MSEL.EQ.44) THEN
+C...Neutralino/Chargino pair production.
+ IF(MINT(43).EQ.4) THEN
+ DO 240 I=216,236
+ MSUB(I)=1
+ 240 CONTINUE
+ ELSEIF(MINT(43).EQ.1) THEN
+ DO 250 I=216,228
+ MSUB(I)=1
+ 250 CONTINUE
+ ENDIF
+ ENDIF
+
+C...Find heaviest new quark flavour allowed in processes 81-84.
+ KFLQM=1
+ DO 260 I=1,MIN(8,MDCY(21,3))
+ IDC=I+MDCY(21,2)-1
+ IF(MDME(IDC,1).LE.0) GOTO 260
+ KFLQM=I
+ 260 CONTINUE
+ IF(MSTP(7).GE.1.AND.MSTP(7).LE.8.AND.(MSEL.LE.3.OR.MSEL.GE.9))
+ &KFLQM=MSTP(7)
+ MINT(55)=KFLQM
+ KFPR(81,1)=KFLQM
+ KFPR(81,2)=KFLQM
+ KFPR(82,1)=KFLQM
+ KFPR(82,2)=KFLQM
+ KFPR(83,1)=KFLQM
+ KFPR(84,1)=KFLQM
+ KFPR(84,2)=KFLQM
+
+C...Find heaviest new fermion flavour allowed in process 85.
+ KFLFM=1
+ DO 270 I=1,MIN(12,MDCY(22,3))
+ IDC=I+MDCY(22,2)-1
+ IF(MDME(IDC,1).LE.0) GOTO 270
+ KFLFM=KFDP(IDC,1)
+ 270 CONTINUE
+ IF(((MSTP(7).GE.1.AND.MSTP(7).LE.8).OR.(MSTP(7).GE.11.AND.
+ &MSTP(7).LE.18)).AND.(MSEL.LE.3.OR.MSEL.GE.9)) KFLFM=MSTP(7)
+ MINT(56)=KFLFM
+ KFPR(85,1)=KFLFM
+ KFPR(85,2)=KFLFM
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXTOT
+C...Parametrizes total, elastic and diffractive cross-sections
+C...for different energies and beams. Donnachie-Landshoff for
+C...total and Schuler-Sjostrand for elastic and diffractive.
+C...Process code IPROC:
+C...= 1 : p + p;
+C...= 2 : pbar + p;
+C...= 3 : pi+ + p;
+C...= 4 : pi- + p;
+C...= 5 : pi0 + p;
+C...= 6 : phi + p;
+C...= 7 : J/psi + p;
+C...= 11 : rho + rho;
+C...= 12 : rho + phi;
+C...= 13 : rho + J/psi;
+C...= 14 : phi + phi;
+C...= 15 : phi + J/psi;
+C...= 16 : J/psi + J/psi;
+C...= 21 : gamma + p (DL);
+C...= 22 : gamma + p (VDM).
+C...= 23 : gamma + pi (DL);
+C...= 24 : gamma + pi (VDM);
+C...= 25 : gamma + gamma (DL);
+C...= 26 : gamma + gamma (VDM).
+
+ SUBROUTINE PYXTOT
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ SAVE /PYDAT1/,/PYPARS/,/PYINT1/,/PYINT5/,/PYINT7/
+C...Local arrays.
+ DIMENSION NPROC(30),XPAR(30),YPAR(30),IHADA(20),IHADB(20),
+ &PMHAD(4),BHAD(4),BETP(4),IFITSD(20),IFITDD(20),CEFFS(10,8),
+ &CEFFD(10,9),SIGTMP(6,0:5)
+
+C...Common constants.
+ DATA EPS/0.0808D0/, ETA/-0.4525D0/, ALP/0.25D0/, CRES/2D0/,
+ &PMRC/1.062D0/, SMP/0.880D0/, FACEL/0.0511D0/, FACSD/0.0336D0/,
+ &FACDD/0.0084D0/
+
+C...Number of multiple processes to be evaluated (= 0 : undefined).
+ DATA NPROC/7*1,3*0,6*1,4*0,4*3,2*6,4*0/
+C...X and Y parameters of sigmatot = X * s**epsilon + Y * s**(-eta).
+ DATA XPAR/2*21.70D0,3*13.63D0,10.01D0,0.970D0,3*0D0,
+ &8.56D0,6.29D0,0.609D0,4.62D0,0.447D0,0.0434D0,4*0D0,
+ &0.0677D0,0.0534D0,0.0425D0,0.0335D0,2.11D-4,1.31D-4,4*0D0/
+ DATA YPAR/
+ &56.08D0,98.39D0,27.56D0,36.02D0,31.79D0,-1.51D0,-0.146D0,3*0D0,
+ &13.08D0,-0.62D0,-0.060D0,0.030D0,-0.0028D0,0.00028D0,4*0D0,
+ &0.129D0,0.115D0,0.081D0,0.072D0,2.15D-4,1.70D-4,4*0D0/
+
+C...Beam and target hadron class:
+C...= 1 : p/n ; = 2 : pi/rho/omega; = 3 : phi; = 4 : J/psi.
+ DATA IHADA/2*1,3*2,3,4,3*0,3*2,2*3,4,4*0/
+ DATA IHADB/7*1,3*0,2,3,4,3,2*4,4*0/
+C...Characteristic class masses, slope parameters, beta = sqrt(X).
+ DATA PMHAD/0.938D0,0.770D0,1.020D0,3.097D0/
+ DATA BHAD/2.3D0,1.4D0,1.4D0,0.23D0/
+ DATA BETP/4.658D0,2.926D0,2.149D0,0.208D0/
+
+C...Fitting constants used in parametrizations of diffractive results.
+ DATA IFITSD/2*1,3*2,3,4,3*0,5,6,7,8,9,10,4*0/
+ DATA IFITDD/2*1,3*2,3,4,3*0,5,6,7,8,9,10,4*0/
+ DATA ((CEFFS(J1,J2),J2=1,8),J1=1,10)/
+ &0.213D0, 0.0D0, -0.47D0, 150D0, 0.213D0, 0.0D0, -0.47D0, 150D0,
+ &0.213D0, 0.0D0, -0.47D0, 150D0, 0.267D0, 0.0D0, -0.47D0, 100D0,
+ &0.213D0, 0.0D0, -0.47D0, 150D0, 0.232D0, 0.0D0, -0.47D0, 110D0,
+ &0.213D0, 7.0D0, -0.55D0, 800D0, 0.115D0, 0.0D0, -0.47D0, 110D0,
+ &0.267D0, 0.0D0, -0.46D0, 75D0, 0.267D0, 0.0D0, -0.46D0, 75D0,
+ &0.232D0, 0.0D0, -0.46D0, 85D0, 0.267D0, 0.0D0, -0.48D0, 100D0,
+ &0.115D0, 0.0D0, -0.50D0, 90D0, 0.267D0, 6.0D0, -0.56D0, 420D0,
+ &0.232D0, 0.0D0, -0.48D0, 110D0, 0.232D0, 0.0D0, -0.48D0, 110D0,
+ &0.115D0, 0.0D0, -0.52D0, 120D0, 0.232D0, 6.0D0, -0.56D0, 470D0,
+ &0.115D0, 5.5D0, -0.58D0, 570D0, 0.115D0, 5.5D0, -0.58D0, 570D0/
+ DATA ((CEFFD(J1,J2),J2=1,9),J1=1,10)/
+ &3.11D0, -7.34D0, 9.71D0, 0.068D0, -0.42D0, 1.31D0,
+ &-1.37D0, 35.0D0, 118D0, 3.11D0, -7.10D0, 10.6D0,
+ &0.073D0, -0.41D0, 1.17D0, -1.41D0, 31.6D0, 95D0,
+ &3.12D0, -7.43D0, 9.21D0, 0.067D0, -0.44D0, 1.41D0,
+ &-1.35D0, 36.5D0, 132D0, 3.13D0, -8.18D0, -4.20D0,
+ &0.056D0, -0.71D0, 3.12D0, -1.12D0, 55.2D0, 1298D0,
+ &3.11D0, -6.90D0, 11.4D0, 0.078D0, -0.40D0, 1.05D0,
+ &-1.40D0, 28.4D0, 78D0, 3.11D0, -7.13D0, 10.0D0,
+ &0.071D0, -0.41D0, 1.23D0, -1.34D0, 33.1D0, 105D0,
+ &3.12D0, -7.90D0, -1.49D0, 0.054D0, -0.64D0, 2.72D0,
+ &-1.13D0, 53.1D0, 995D0, 3.11D0, -7.39D0, 8.22D0,
+ &0.065D0, -0.44D0, 1.45D0, -1.36D0, 38.1D0, 148D0,
+ &3.18D0, -8.95D0, -3.37D0, 0.057D0, -0.76D0, 3.32D0,
+ &-1.12D0, 55.6D0, 1472D0, 4.18D0, -29.2D0, 56.2D0,
+ &0.074D0, -1.36D0, 6.67D0, -1.14D0, 116.2D0, 6532D0/
+
+C...Parameters. Combinations of the energy.
+ AEM=PARU(101)
+ PMTH=PARP(102)
+ S=VINT(2)
+ SRT=VINT(1)
+ SEPS=S**EPS
+ SETA=S**ETA
+ SLOG=LOG(S)
+
+C...Ratio of gamma/pi (for rescaling in parton distributions).
+ VINT(281)=(XPAR(22)*SEPS+YPAR(22)*SETA)/
+ &(XPAR(5)*SEPS+YPAR(5)*SETA)
+ IF(MINT(50).NE.1) RETURN
+
+C...Order flavours of incoming particles: KF1 < KF2.
+ IF(IABS(MINT(11)).LE.IABS(MINT(12))) THEN
+ KF1=IABS(MINT(11))
+ KF2=IABS(MINT(12))
+ IORD=1
+ ELSE
+ KF1=IABS(MINT(12))
+ KF2=IABS(MINT(11))
+ IORD=2
+ ENDIF
+ ISGN12=ISIGN(1,MINT(11)*MINT(12))
+
+C...Find process number (for lookup tables).
+ IF(KF1.GT.1000) THEN
+ IPROC=1
+ IF(ISGN12.LT.0) IPROC=2
+ ELSEIF(KF1.GT.100.AND.KF2.GT.1000) THEN
+ IPROC=3
+ IF(ISGN12.LT.0) IPROC=4
+ IF(KF1.EQ.111) IPROC=5
+ ELSEIF(KF1.GT.100) THEN
+ IPROC=11
+ ELSEIF(KF2.GT.1000) THEN
+ IPROC=21
+ IF(MINT(123).EQ.2) IPROC=22
+ ELSEIF(KF2.GT.100) THEN
+ IPROC=23
+ IF(MINT(123).EQ.2) IPROC=24
+ ELSE
+ IPROC=25
+ IF(MINT(123).EQ.2) IPROC=26
+ ENDIF
+
+C... Number of multiple processes to be stored; beam/target side.
+ NPR=NPROC(IPROC)
+ MINT(101)=1
+ MINT(102)=1
+ IF(NPR.EQ.3) THEN
+ MINT(100+IORD)=4
+ ELSEIF(NPR.EQ.6) THEN
+ MINT(101)=4
+ MINT(102)=4
+ ENDIF
+ N1=0
+ IF(MINT(101).EQ.4) N1=4
+ N2=0
+ IF(MINT(102).EQ.4) N2=4
+
+C...Do not do any more for user-set or undefined cross-sections.
+ IF(MSTP(31).LE.0) RETURN
+ IF(NPR.EQ.0) CALL PYERRM(26,
+ &'(PYXTOT:) cross section for this process not yet implemented')
+
+C...Parameters. Combinations of the energy.
+ AEM=PARU(101)
+ PMTH=PARP(102)
+ S=VINT(2)
+ SRT=VINT(1)
+ SEPS=S**EPS
+ SETA=S**ETA
+ SLOG=LOG(S)
+
+C...Loop over multiple processes (for VDM).
+ DO 110 I=1,NPR
+ IF(NPR.EQ.1) THEN
+ IPR=IPROC
+ ELSEIF(NPR.EQ.3) THEN
+ IPR=I+4
+ IF(KF2.LT.1000) IPR=I+10
+ ELSEIF(NPR.EQ.6) THEN
+ IPR=I+10
+ ENDIF
+
+C...Evaluate hadron species, mass, slope contribution and fit number.
+ IHA=IHADA(IPR)
+ IHB=IHADB(IPR)
+ PMA=PMHAD(IHA)
+ PMB=PMHAD(IHB)
+ BHA=BHAD(IHA)
+ BHB=BHAD(IHB)
+ ISD=IFITSD(IPR)
+ IDD=IFITDD(IPR)
+
+C...Skip if energy too low relative to masses.
+ DO 100 J=0,5
+ SIGTMP(I,J)=0D0
+ 100 CONTINUE
+ IF(SRT.LT.PMA+PMB+PARP(104)) GOTO 110
+
+C...Total cross-section. Elastic slope parameter and cross-section.
+ SIGTMP(I,0)=XPAR(IPR)*SEPS+YPAR(IPR)*SETA
+ BEL=2D0*BHA+2D0*BHB+4D0*SEPS-4.2D0
+ SIGTMP(I,1)=FACEL*SIGTMP(I,0)**2/BEL
+
+C...Diffractive scattering A + B -> X + B.
+ BSD=2D0*BHB
+ SQML=(PMA+PMTH)**2
+ SQMU=S*CEFFS(ISD,1)+CEFFS(ISD,2)
+ SUM1=LOG((BSD+2D0*ALP*LOG(S/SQML))/
+ & (BSD+2D0*ALP*LOG(S/SQMU)))/(2D0*ALP)
+ BXB=CEFFS(ISD,3)+CEFFS(ISD,4)/S
+ SUM2=CRES*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)/
+ & (BSD+2D0*ALP*LOG(S/((PMA+PMTH)*(PMA+PMRC)))+BXB)
+ SIGTMP(I,2)=FACSD*XPAR(IPR)*BETP(IHB)*MAX(0D0,SUM1+SUM2)
+
+C...Diffractive scattering A + B -> A + X.
+ BSD=2D0*BHA
+ SQML=(PMB+PMTH)**2
+ SQMU=S*CEFFS(ISD,5)+CEFFS(ISD,6)
+ SUM1=LOG((BSD+2D0*ALP*LOG(S/SQML))/
+ & (BSD+2D0*ALP*LOG(S/SQMU)))/(2D0*ALP)
+ BAX=CEFFS(ISD,7)+CEFFS(ISD,8)/S
+ SUM2=CRES*LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)/
+ & (BSD+2D0*ALP*LOG(S/((PMB+PMTH)*(PMB+PMRC)))+BAX)
+ SIGTMP(I,3)=FACSD*XPAR(IPR)*BETP(IHA)*MAX(0D0,SUM1+SUM2)
+
+C...Order single diffractive correctly.
+ IF(IORD.EQ.2) THEN
+ SIGSAV=SIGTMP(I,2)
+ SIGTMP(I,2)=SIGTMP(I,3)
+ SIGTMP(I,3)=SIGSAV
+ ENDIF
+
+C...Double diffractive scattering A + B -> X1 + X2.
+ YEFF=LOG(S*SMP/((PMA+PMTH)*(PMB+PMTH))**2)
+ DEFF=CEFFD(IDD,1)+CEFFD(IDD,2)/SLOG+CEFFD(IDD,3)/SLOG**2
+ SUM1=DEFF+YEFF*(LOG(MAX(1D-10,YEFF/DEFF))-1D0)/(2D0*ALP)
+ IF(YEFF.LE.0) SUM1=0D0
+ SQMU=S*(CEFFD(IDD,4)+CEFFD(IDD,5)/SLOG+CEFFD(IDD,6)/SLOG**2)
+ SLUP=LOG(MAX(1.1D0,S/(ALP*(PMA+PMTH)**2*(PMB+PMTH)*(PMB+PMRC))))
+ SLDN=LOG(MAX(1.1D0,S/(ALP*SQMU*(PMB+PMTH)*(PMB+PMRC))))
+ SUM2=CRES*LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)*LOG(SLUP/SLDN)/
+ & (2D0*ALP)
+ SLUP=LOG(MAX(1.1D0,S/(ALP*(PMB+PMTH)**2*(PMA+PMTH)*(PMA+PMRC))))
+ SLDN=LOG(MAX(1.1D0,S/(ALP*SQMU*(PMA+PMTH)*(PMA+PMRC))))
+ SUM3=CRES*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)*LOG(SLUP/SLDN)/
+ & (2D0*ALP)
+ BXX=CEFFD(IDD,7)+CEFFD(IDD,8)/SRT+CEFFD(IDD,9)/S
+ SLRR=LOG(S/(ALP*(PMA+PMTH)*(PMA+PMRC)*(PMB+PMTH)*(PMB*PMRC)))
+ SUM4=CRES**2*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)*
+ & LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)/MAX(0.1D0,2D0*ALP*SLRR+BXX)
+ SIGTMP(I,4)=FACDD*XPAR(IPR)*MAX(0D0,SUM1+SUM2+SUM3+SUM4)
+
+C...Non-diffractive by unitarity.
+ SIGTMP(I,5)=SIGTMP(I,0)-SIGTMP(I,1)-SIGTMP(I,2)-SIGTMP(I,3)-
+ & SIGTMP(I,4)
+ 110 CONTINUE
+
+C...Put temporary results in output array: only one process.
+ IF(MINT(101).EQ.1.AND.MINT(102).EQ.1) THEN
+ DO 120 J=0,5
+ SIGT(0,0,J)=SIGTMP(1,J)
+ 120 CONTINUE
+
+C...Beam multiple processes.
+ ELSEIF(MINT(101).EQ.4.AND.MINT(102).EQ.1) THEN
+ DO 140 I=1,4
+ CONV=AEM/PARP(160+I)
+ I1=MAX(1,I-1)
+ DO 130 J=0,5
+ SIGT(I,0,J)=CONV*SIGTMP(I1,J)
+ 130 CONTINUE
+ 140 CONTINUE
+ DO 150 J=0,5
+ SIGT(0,0,J)=SIGT(1,0,J)+SIGT(2,0,J)+SIGT(3,0,J)+SIGT(4,0,J)
+ 150 CONTINUE
+
+C...Target multiple processes.
+ ELSEIF(MINT(101).EQ.1.AND.MINT(102).EQ.4) THEN
+ DO 170 I=1,4
+ CONV=AEM/PARP(160+I)
+ IV=MAX(1,I-1)
+ DO 160 J=0,5
+ SIGT(0,I,J)=CONV*SIGTMP(IV,J)
+ 160 CONTINUE
+ 170 CONTINUE
+ DO 180 J=0,5
+ SIGT(0,0,J)=SIGT(0,1,J)+SIGT(0,2,J)+SIGT(0,3,J)+SIGT(0,4,J)
+ 180 CONTINUE
+
+C...Both beam and target multiple processes.
+ ELSE
+ DO 210 I1=1,4
+ DO 200 I2=1,4
+ CONV=AEM**2/(PARP(160+I1)*PARP(160+I2))
+ IF(I1.LE.2) THEN
+ IV=MAX(1,I2-1)
+ ELSEIF(I2.LE.2) THEN
+ IV=MAX(1,I1-1)
+ ELSEIF(I1.EQ.I2) THEN
+ IV=2*I1-2
+ ELSE
+ IV=5
+ ENDIF
+ DO 190 J=0,5
+ JV=J
+ IF(I2.GT.I1.AND.(J.EQ.2.OR.J.EQ.3)) JV=5-J
+ SIGT(I1,I2,J)=CONV*SIGTMP(IV,JV)
+ 190 CONTINUE
+ 200 CONTINUE
+ 210 CONTINUE
+ DO 230 J=0,5
+ DO 220 I=1,4
+ SIGT(I,0,J)=SIGT(I,1,J)+SIGT(I,2,J)+SIGT(I,3,J)+SIGT(I,4,J)
+ SIGT(0,I,J)=SIGT(1,I,J)+SIGT(2,I,J)+SIGT(3,I,J)+SIGT(4,I,J)
+ 220 CONTINUE
+ SIGT(0,0,J)=SIGT(1,0,J)+SIGT(2,0,J)+SIGT(3,0,J)+SIGT(4,0,J)
+ 230 CONTINUE
+ ENDIF
+
+C...Scale up uniformly for Donnachie-Landshoff parametrization.
+ IF(IPROC.EQ.21.OR.IPROC.EQ.23.OR.IPROC.EQ.25) THEN
+ RFAC=(XPAR(IPROC)*SEPS+YPAR(IPROC)*SETA)/SIGT(0,0,0)
+ DO 260 I1=0,N1
+ DO 250 I2=0,N2
+ DO 240 J=0,5
+ SIGT(I1,I2,J)=RFAC*SIGT(I1,I2,J)
+ 240 CONTINUE
+ 250 CONTINUE
+ 260 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYMAXI
+C...Finds optimal set of coefficients for kinematical variable selection
+C...and the maximum of the part of the differential cross-section used
+C...in the event weighting.
+
+ SUBROUTINE PYMAXI
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT6/PROC(0:500)
+ CHARACTER PROC*28
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT6/,/PYINT7/
+C...Local arrays, character variables and data.
+ CHARACTER CVAR(4)*4
+ DIMENSION NPTS(4),MVARPT(500,4),VINTPT(500,30),SIGSPT(500),
+ &NAREL(7),WTREL(7),WTMAT(7,7),WTRELN(7),COEFU(7),COEFO(7),
+ &IACCMX(4),SIGSMX(4),SIGSSM(3),PMMN(2)
+ DATA CVAR/'tau ','tau''','y* ','cth '/
+ DATA SIGSSM/3*0D0/
+
+C...Select subprocess to study: skip cases not applicable.
+ NPOSI=0
+ VINT(143)=1D0
+ VINT(144)=1D0
+ XSEC(0,1)=0D0
+ DO 460 ISUB=1,500
+ MINT(51)=0
+ IF(ISET(ISUB).EQ.11) THEN
+ XSEC(ISUB,1)=1.00001D0*COEF(ISUB,1)
+ NPOSI=NPOSI+1
+ GOTO 450
+ ELSEIF(ISUB.GE.91.AND.ISUB.LE.95) THEN
+ XSEC(ISUB,1)=SIGT(0,0,ISUB-90)
+ IF(MSUB(ISUB).NE.1) GOTO 460
+ NPOSI=NPOSI+1
+ GOTO 450
+ ELSEIF(ISUB.EQ.96) THEN
+ IF(MINT(50).EQ.0) GOTO 460
+ IF(MSUB(95).NE.1.AND.MSTP(81).LE.0.AND.MSTP(131).LE.0)
+ & GOTO 460
+ IF(MINT(49).EQ.0.AND.MSTP(131).EQ.0) GOTO 460
+ ELSEIF(ISUB.EQ.11.OR.ISUB.EQ.12.OR.ISUB.EQ.13.OR.ISUB.EQ.28.OR.
+ & ISUB.EQ.53.OR.ISUB.EQ.68) THEN
+ IF(MSUB(ISUB).NE.1.OR.MSUB(95).EQ.1) GOTO 460
+ ELSE
+ IF(MSUB(ISUB).NE.1) GOTO 460
+ ENDIF
+ MINT(1)=ISUB
+ ISTSB=ISET(ISUB)
+ IF(ISUB.EQ.96) ISTSB=2
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5000) ISUB
+ MWTXS=0
+ IF(MSTP(142).GE.1.AND.ISUB.NE.96.AND.MSUB(91)+MSUB(92)+MSUB(93)+
+ & MSUB(94)+MSUB(95).EQ.0) MWTXS=1
+
+C...Find resonances (explicit or implicit in cross-section).
+ MINT(72)=0
+ KFR1=0
+ IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
+ KFR1=KFPR(ISUB,1)
+ ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.25.OR.ISUB.EQ.110.OR.ISUB.EQ.165
+ & .OR.ISUB.EQ.171.OR.ISUB.EQ.176) THEN
+ KFR1=23
+ ELSEIF(ISUB.EQ.23.OR.ISUB.EQ.26.OR.ISUB.EQ.166.OR.ISUB.EQ.172
+ & .OR.ISUB.EQ.177) THEN
+ KFR1=24
+ ELSEIF(ISUB.GE.71.AND.ISUB.LE.77) THEN
+ KFR1=25
+ IF(MSTP(46).EQ.5) THEN
+ KFR1=30
+ PMAS(30,1)=PARP(45)
+ PMAS(30,2)=PARP(45)**3/(96D0*PARU(1)*PARP(47)**2)
+ ENDIF
+ ELSEIF(ISUB.EQ.194) THEN
+ KFR1=54
+ ENDIF
+ CKMX=CKIN(2)
+ IF(CKMX.LE.0D0) CKMX=VINT(1)
+ KCR1=PYCOMP(KFR1)
+ IF(KFR1.NE.0) THEN
+ IF(CKIN(1).GT.PMAS(KCR1,1)+20D0*PMAS(KCR1,2).OR.
+ & CKMX.LT.PMAS(KCR1,1)-20D0*PMAS(KCR1,2)) KFR1=0
+ ENDIF
+ IF(KFR1.NE.0) THEN
+ TAUR1=PMAS(KCR1,1)**2/VINT(2)
+ GAMR1=PMAS(KCR1,1)*PMAS(KCR1,2)/VINT(2)
+ MINT(72)=1
+ MINT(73)=KFR1
+ VINT(73)=TAUR1
+ VINT(74)=GAMR1
+ ENDIF
+ KFR2=0
+ IF(ISUB.EQ.141.OR.ISUB.EQ.194) THEN
+ KFR2=23
+ IF(ISUB.EQ.194) KFR2=56
+ KCR2=PYCOMP(KFR2)
+ TAUR2=PMAS(KCR2,1)**2/VINT(2)
+ GAMR2=PMAS(KCR2,1)*PMAS(KCR2,2)/VINT(2)
+ IF(CKIN(1).GT.PMAS(KCR2,1)+20D0*PMAS(KCR2,2).OR.
+ & CKMX.LT.PMAS(KCR2,1)-20D0*PMAS(KCR2,2)) KFR2=0
+ IF(KFR2.NE.0.AND.KFR1.NE.0) THEN
+ MINT(72)=2
+ MINT(74)=KFR2
+ VINT(75)=TAUR2
+ VINT(76)=GAMR2
+ ELSEIF(KFR2.NE.0) THEN
+ KFR1=KFR2
+ TAUR1=TAUR2
+ GAMR1=GAMR2
+ MINT(72)=1
+ MINT(73)=KFR1
+ VINT(73)=TAUR1
+ VINT(74)=GAMR1
+ KFR2=0
+ ENDIF
+ ENDIF
+
+C...Find product masses and minimum pT of process.
+ SQM3=0D0
+ SQM4=0D0
+ MINT(71)=0
+ VINT(71)=CKIN(3)
+ VINT(80)=1D0
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
+ NBW=0
+ DO 110 I=1,2
+ PMMN(I)=0D0
+ IF(KFPR(ISUB,I).EQ.0) THEN
+ ELSEIF(MSTP(42).LE.0.OR.PMAS(PYCOMP(KFPR(ISUB,I)),2).LT.
+ & PARP(41)) THEN
+ IF(I.EQ.1) SQM3=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
+ IF(I.EQ.2) SQM4=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
+ ELSE
+ NBW=NBW+1
+C...This prevents SUSY/t particles from becoming too light.
+ KFLW=KFPR(ISUB,I)
+ IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
+ KCW=PYCOMP(KFLW)
+ PMMN(I)=PMAS(KCW,1)
+ DO 100 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
+ IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
+ PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
+ & PMAS(PYCOMP(KFDP(IDC,2)),1)
+ IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
+ & PMAS(PYCOMP(KFDP(IDC,3)),1)
+ PMMN(I)=MIN(PMMN(I),PMSUM)
+ ENDIF
+ 100 CONTINUE
+ ELSEIF(KFLW.EQ.6) THEN
+ PMMN(I)=PMAS(24,1)+PMAS(5,1)
+ ENDIF
+ ENDIF
+ 110 CONTINUE
+ IF(NBW.GE.1) THEN
+ CKIN41=CKIN(41)
+ CKIN43=CKIN(43)
+ CKIN(41)=MAX(PMMN(1),CKIN(41))
+ CKIN(43)=MAX(PMMN(2),CKIN(43))
+ CALL PYOFSH(3,0,KFPR(ISUB,1),KFPR(ISUB,2),0D0,PQM3,PQM4)
+ CKIN(41)=CKIN41
+ CKIN(43)=CKIN43
+ IF(MINT(51).EQ.1) THEN
+ WRITE(MSTU(11),5100) ISUB
+ MSUB(ISUB)=0
+ GOTO 460
+ ENDIF
+ SQM3=PQM3**2
+ SQM4=PQM4**2
+ ENDIF
+ IF(MIN(SQM3,SQM4).LT.CKIN(6)**2) MINT(71)=1
+ IF(MINT(71).EQ.1) VINT(71)=MAX(CKIN(3),CKIN(5))
+ IF(ISUB.EQ.96.AND.MSTP(82).LE.1) VINT(71)=PARP(81)
+ IF(ISUB.EQ.96.AND.MSTP(82).GE.2) VINT(71)=0.08D0*PARP(82)
+ ENDIF
+ VINT(63)=SQM3
+ VINT(64)=SQM4
+
+C...Prepare for additional variable choices in 2 -> 3.
+ IF(ISTSB.EQ.5) THEN
+ VINT(201)=0D0
+ IF(KFPR(ISUB,2).GT.0) VINT(201)=PMAS(PYCOMP(KFPR(ISUB,2)),1)
+ VINT(206)=VINT(201)
+ VINT(204)=PMAS(23,1)
+ IF(ISUB.EQ.124) VINT(204)=PMAS(24,1)
+ IF(ISUB.EQ.121.OR.ISUB.EQ.122.OR.ISUB.EQ.181.OR.ISUB.EQ.182
+ & .OR.ISUB.EQ.186.OR.ISUB.EQ.187) VINT(204)=VINT(201)
+ VINT(209)=VINT(204)
+ ENDIF
+
+C...Number of points for each variable: tau, tau', y*, cos(theta-hat).
+ NPTS(1)=2+2*MINT(72)
+ IF(MINT(47).EQ.1) THEN
+ IF(ISTSB.EQ.1.OR.ISTSB.EQ.2) NPTS(1)=1
+ ELSEIF(MINT(47).EQ.5) THEN
+ IF(ISTSB.LE.2.OR.ISTSB.GT.5) NPTS(1)=NPTS(1)+1
+ ENDIF
+ NPTS(2)=1
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
+ IF(MINT(47).GE.2) NPTS(2)=2
+ IF(MINT(47).EQ.5) NPTS(2)=3
+ ENDIF
+ NPTS(3)=1
+ IF(MINT(47).GE.4) NPTS(3)=3
+ IF(MINT(45).EQ.3) NPTS(3)=NPTS(3)+1
+ IF(MINT(46).EQ.3) NPTS(3)=NPTS(3)+1
+ NPTS(4)=1
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) NPTS(4)=5
+ NTRY=NPTS(1)*NPTS(2)*NPTS(3)*NPTS(4)
+
+C...Reset coefficients of cross-section weighting.
+ DO 120 J=1,20
+ COEF(ISUB,J)=0D0
+ 120 CONTINUE
+ COEF(ISUB,1)=1D0
+ COEF(ISUB,8)=0.5D0
+ COEF(ISUB,9)=0.5D0
+ COEF(ISUB,13)=1D0
+ COEF(ISUB,18)=1D0
+ MCTH=0
+ MTAUP=0
+ METAUP=0
+ VINT(23)=0D0
+ VINT(26)=0D0
+ SIGSAM=0D0
+
+C...Find limits and select tau, y*, cos(theta-hat) and tau' values,
+C...in grid of phase space points.
+ CALL PYKLIM(1)
+ METAU=MINT(51)
+ NACC=0
+ DO 150 ITRY=1,NTRY
+ MINT(51)=0
+ IF(METAU.EQ.1) GOTO 150
+ IF(MOD(ITRY-1,NPTS(2)*NPTS(3)*NPTS(4)).EQ.0) THEN
+ MTAU=1+(ITRY-1)/(NPTS(2)*NPTS(3)*NPTS(4))
+ IF(MTAU.GT.2+2*MINT(72)) MTAU=7
+ RTAU=0.5D0
+C...Special case when both resonances have same mass,
+C...as is often the case in process 194.
+ IF(MINT(72).EQ.2) THEN
+ IF(ABS(PMAS(KCR2,1)-PMAS(KCR1,1)).LT.
+ & 0.01D0*(PMAS(KCR2,1)+PMAS(KCR1,1))) THEN
+ IF(MTAU.EQ.3.OR.MTAU.EQ.4) THEN
+ RTAU=0.4D0
+ ELSEIF(MTAU.EQ.5.OR.MTAU.EQ.6) THEN
+ RTAU=0.6D0
+ ENDIF
+ ENDIF
+ ENDIF
+ CALL PYKMAP(1,MTAU,RTAU)
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) CALL PYKLIM(4)
+ METAUP=MINT(51)
+ ENDIF
+ IF(METAUP.EQ.1) GOTO 150
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5.AND.MOD(ITRY-1,NPTS(3)*NPTS(4))
+ & .EQ.0) THEN
+ MTAUP=1+MOD((ITRY-1)/(NPTS(3)*NPTS(4)),NPTS(2))
+ CALL PYKMAP(4,MTAUP,0.5D0)
+ ENDIF
+ IF(MOD(ITRY-1,NPTS(3)*NPTS(4)).EQ.0) THEN
+ CALL PYKLIM(2)
+ MEYST=MINT(51)
+ ENDIF
+ IF(MEYST.EQ.1) GOTO 150
+ IF(MOD(ITRY-1,NPTS(4)).EQ.0) THEN
+ MYST=1+MOD((ITRY-1)/NPTS(4),NPTS(3))
+ IF(MYST.EQ.4.AND.MINT(45).NE.3) MYST=5
+ CALL PYKMAP(2,MYST,0.5D0)
+ CALL PYKLIM(3)
+ MECTH=MINT(51)
+ ENDIF
+ IF(MECTH.EQ.1) GOTO 150
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
+ MCTH=1+MOD(ITRY-1,NPTS(4))
+ CALL PYKMAP(3,MCTH,0.5D0)
+ ENDIF
+ IF(ISUB.EQ.96) VINT(25)=VINT(21)*(1D0-VINT(23)**2)
+
+C...Store position and limits.
+ MINT(51)=0
+ CALL PYKLIM(0)
+ IF(MINT(51).EQ.1) GOTO 150
+ NACC=NACC+1
+ MVARPT(NACC,1)=MTAU
+ MVARPT(NACC,2)=MTAUP
+ MVARPT(NACC,3)=MYST
+ MVARPT(NACC,4)=MCTH
+ DO 130 J=1,30
+ VINTPT(NACC,J)=VINT(10+J)
+ 130 CONTINUE
+
+C...Normal case: calculate cross-section.
+ IF(ISTSB.NE.5) THEN
+ CALL PYSIGH(NCHN,SIGS)
+ IF(MWTXS.EQ.1) THEN
+ CALL PYEVWT(WTXS)
+ SIGS=WTXS*SIGS
+ ENDIF
+
+C..2 -> 3: find highest value out of a number of tries.
+ ELSE
+ SIGS=0D0
+ DO 140 IKIN3=1,MSTP(129)
+ CALL PYKMAP(5,0,0D0)
+ IF(MINT(51).EQ.1) GOTO 140
+ CALL PYSIGH(NCHN,SIGTMP)
+ IF(MWTXS.EQ.1) THEN
+ CALL PYEVWT(WTXS)
+ SIGTMP=WTXS*SIGTMP
+ ENDIF
+ IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
+ 140 CONTINUE
+ ENDIF
+
+C...Store cross-section.
+ SIGSPT(NACC)=SIGS
+ IF(SIGS.GT.SIGSAM) SIGSAM=SIGS
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5200) MTAU,MYST,MCTH,MTAUP,
+ & VINT(21),VINT(22),VINT(23),VINT(26),SIGS
+ 150 CONTINUE
+ IF(NACC.EQ.0) THEN
+ WRITE(MSTU(11),5100) ISUB
+ MSUB(ISUB)=0
+ GOTO 460
+ ELSEIF(SIGSAM.EQ.0D0) THEN
+ WRITE(MSTU(11),5300) ISUB
+ MSUB(ISUB)=0
+ GOTO 460
+ ENDIF
+ IF(ISUB.NE.96) NPOSI=NPOSI+1
+
+C...Calculate integrals in tau over maximal phase space limits.
+ TAUMIN=VINT(11)
+ TAUMAX=VINT(31)
+ ATAU1=LOG(TAUMAX/TAUMIN)
+ IF(NPTS(1).GE.2) THEN
+ ATAU2=(TAUMAX-TAUMIN)/(TAUMAX*TAUMIN)
+ ENDIF
+ IF(NPTS(1).GE.4) THEN
+ ATAU3=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR1)/(TAUMAX+TAUR1))/TAUR1
+ ATAU4=(ATAN((TAUMAX-TAUR1)/GAMR1)-ATAN((TAUMIN-TAUR1)/GAMR1))/
+ & GAMR1
+ ENDIF
+ IF(NPTS(1).GE.6) THEN
+ ATAU5=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR2)/(TAUMAX+TAUR2))/TAUR2
+ ATAU6=(ATAN((TAUMAX-TAUR2)/GAMR2)-ATAN((TAUMIN-TAUR2)/GAMR2))/
+ & GAMR2
+ ENDIF
+ IF(NPTS(1).GT.2+2*MINT(72)) THEN
+ ATAU7=LOG(MAX(2D-6,1D0-TAUMIN)/MAX(2D-6,1D0-TAUMAX))
+ ENDIF
+
+C...Reset. Sum up cross-sections in points calculated.
+ DO 320 IVAR=1,4
+ IF(NPTS(IVAR).EQ.1) GOTO 320
+ IF(ISUB.EQ.96.AND.IVAR.EQ.4) GOTO 320
+ NBIN=NPTS(IVAR)
+ DO 170 J1=1,NBIN
+ NAREL(J1)=0
+ WTREL(J1)=0D0
+ COEFU(J1)=0D0
+ DO 160 J2=1,NBIN
+ WTMAT(J1,J2)=0D0
+ 160 CONTINUE
+ 170 CONTINUE
+ DO 180 IACC=1,NACC
+ IBIN=MVARPT(IACC,IVAR)
+ IF(IVAR.EQ.1.AND.IBIN.EQ.7) IBIN=3+2*MINT(72)
+ IF(IVAR.EQ.3.AND.IBIN.EQ.5.AND.MINT(45).NE.3) IBIN=4
+ NAREL(IBIN)=NAREL(IBIN)+1
+ WTREL(IBIN)=WTREL(IBIN)+SIGSPT(IACC)
+
+C...Sum up tau cross-section pieces in points used.
+ IF(IVAR.EQ.1) THEN
+ TAU=VINTPT(IACC,11)
+ WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
+ WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ATAU1/ATAU2)/TAU
+ IF(NBIN.GE.4) THEN
+ WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ATAU1/ATAU3)/(TAU+TAUR1)
+ WTMAT(IBIN,4)=WTMAT(IBIN,4)+(ATAU1/ATAU4)*TAU/
+ & ((TAU-TAUR1)**2+GAMR1**2)
+ ENDIF
+ IF(NBIN.GE.6) THEN
+ WTMAT(IBIN,5)=WTMAT(IBIN,5)+(ATAU1/ATAU5)/(TAU+TAUR2)
+ WTMAT(IBIN,6)=WTMAT(IBIN,6)+(ATAU1/ATAU6)*TAU/
+ & ((TAU-TAUR2)**2+GAMR2**2)
+ ENDIF
+ IF(NBIN.GT.2+2*MINT(72)) THEN
+ WTMAT(IBIN,NBIN)=WTMAT(IBIN,NBIN)+(ATAU1/ATAU7)*
+ & TAU/MAX(2D-6,1D0-TAU)
+ ENDIF
+
+C...Sum up tau' cross-section pieces in points used.
+ ELSEIF(IVAR.EQ.2) THEN
+ TAU=VINTPT(IACC,11)
+ TAUP=VINTPT(IACC,16)
+ TAUPMN=VINTPT(IACC,6)
+ TAUPMX=VINTPT(IACC,26)
+ ATAUP1=LOG(TAUPMX/TAUPMN)
+ ATAUP2=((1D0-TAU/TAUPMX)**4-(1D0-TAU/TAUPMN)**4)/(4D0*TAU)
+ WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
+ WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ATAUP1/ATAUP2)*
+ & (1D0-TAU/TAUP)**3/TAUP
+ IF(NBIN.GE.3) THEN
+ ATAUP3=LOG(MAX(2D-6,1D0-TAUPMN)/MAX(2D-6,1D0-TAUPMX))
+ WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ATAUP1/ATAUP3)*
+ & TAUP/MAX(2D-6,1D0-TAUP)
+ ENDIF
+
+C...Sum up y* cross-section pieces in points used.
+ ELSEIF(IVAR.EQ.3) THEN
+ YST=VINTPT(IACC,12)
+ YSTMIN=VINTPT(IACC,2)
+ YSTMAX=VINTPT(IACC,22)
+ AYST0=YSTMAX-YSTMIN
+ AYST1=0.5D0*(YSTMAX-YSTMIN)**2
+ AYST2=AYST1
+ AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
+ WTMAT(IBIN,1)=WTMAT(IBIN,1)+(AYST0/AYST1)*(YST-YSTMIN)
+ WTMAT(IBIN,2)=WTMAT(IBIN,2)+(AYST0/AYST2)*(YSTMAX-YST)
+ WTMAT(IBIN,3)=WTMAT(IBIN,3)+(AYST0/AYST3)/COSH(YST)
+ IF(MINT(45).EQ.3) THEN
+ TAUE=VINTPT(IACC,11)
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINTPT(IACC,16)
+ YST0=-0.5D0*LOG(TAUE)
+ AYST4=LOG(MAX(1D-6,EXP(YST0-YSTMIN)-1D0)/
+ & MAX(1D-6,EXP(YST0-YSTMAX)-1D0))
+ WTMAT(IBIN,4)=WTMAT(IBIN,4)+(AYST0/AYST4)/
+ & MAX(1D-6,1D0-EXP(YST-YST0))
+ ENDIF
+ IF(MINT(46).EQ.3) THEN
+ TAUE=VINTPT(IACC,11)
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINTPT(IACC,16)
+ YST0=-0.5D0*LOG(TAUE)
+ AYST5=LOG(MAX(1D-6,EXP(YST0+YSTMAX)-1D0)/
+ & MAX(1D-6,EXP(YST0+YSTMIN)-1D0))
+ WTMAT(IBIN,NBIN)=WTMAT(IBIN,NBIN)+(AYST0/AYST5)/
+ & MAX(1D-6,1D0-EXP(-YST-YST0))
+ ENDIF
+
+C...Sum up cos(theta-hat) cross-section pieces in points used.
+ ELSE
+ RM34=MAX(1D-20,2D0*SQM3*SQM4/(VINTPT(IACC,11)*VINT(2))**2)
+ RSQM=1D0+RM34
+ CTHMAX=SQRT(1D0-4D0*VINT(71)**2/(TAUMAX*VINT(2)))
+ CTHMIN=-CTHMAX
+ IF(CTHMAX.GT.0.9999D0) RM34=MAX(RM34,2D0*VINT(71)**2/
+ & (TAUMAX*VINT(2)))
+ ACTH1=CTHMAX-CTHMIN
+ ACTH2=LOG(MAX(RM34,RSQM-CTHMIN)/MAX(RM34,RSQM-CTHMAX))
+ ACTH3=LOG(MAX(RM34,RSQM+CTHMAX)/MAX(RM34,RSQM+CTHMIN))
+ ACTH4=1D0/MAX(RM34,RSQM-CTHMAX)-1D0/MAX(RM34,RSQM-CTHMIN)
+ ACTH5=1D0/MAX(RM34,RSQM+CTHMIN)-1D0/MAX(RM34,RSQM+CTHMAX)
+ CTH=VINTPT(IACC,13)
+ WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
+ WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ACTH1/ACTH2)/
+ & MAX(RM34,RSQM-CTH)
+ WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ACTH1/ACTH3)/
+ & MAX(RM34,RSQM+CTH)
+ WTMAT(IBIN,4)=WTMAT(IBIN,4)+(ACTH1/ACTH4)/
+ & MAX(RM34,RSQM-CTH)**2
+ WTMAT(IBIN,5)=WTMAT(IBIN,5)+(ACTH1/ACTH5)/
+ & MAX(RM34,RSQM+CTH)**2
+ ENDIF
+ 180 CONTINUE
+
+C...Check that equation system solvable.
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5400) CVAR(IVAR)
+ MSOLV=1
+ WTRELS=0D0
+ DO 190 IBIN=1,NBIN
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5500) (WTMAT(IBIN,IRED),
+ & IRED=1,NBIN),WTREL(IBIN)
+ IF(NAREL(IBIN).EQ.0) MSOLV=0
+ WTRELS=WTRELS+WTREL(IBIN)
+ 190 CONTINUE
+ IF(ABS(WTRELS).LT.1D-20) MSOLV=0
+
+C...Solve to find relative importance of cross-section pieces.
+ IF(MSOLV.EQ.1) THEN
+ DO 200 IBIN=1,NBIN
+ WTRELN(IBIN)=MAX(0.1D0,WTREL(IBIN)/WTRELS)
+ 200 CONTINUE
+ DO 230 IRED=1,NBIN-1
+ DO 220 IBIN=IRED+1,NBIN
+ IF(ABS(WTMAT(IRED,IRED)).LT.1D-20) THEN
+ MSOLV=0
+ GOTO 260
+ ENDIF
+ RQT=WTMAT(IBIN,IRED)/WTMAT(IRED,IRED)
+ WTREL(IBIN)=WTREL(IBIN)-RQT*WTREL(IRED)
+ DO 210 ICOE=IRED,NBIN
+ WTMAT(IBIN,ICOE)=WTMAT(IBIN,ICOE)-RQT*WTMAT(IRED,ICOE)
+ 210 CONTINUE
+ 220 CONTINUE
+ 230 CONTINUE
+ DO 250 IRED=NBIN,1,-1
+ DO 240 ICOE=IRED+1,NBIN
+ WTREL(IRED)=WTREL(IRED)-WTMAT(IRED,ICOE)*COEFU(ICOE)
+ 240 CONTINUE
+ COEFU(IRED)=WTREL(IRED)/WTMAT(IRED,IRED)
+ 250 CONTINUE
+ ENDIF
+
+C...Share evenly if failure.
+ 260 IF(MSOLV.EQ.0) THEN
+ DO 270 IBIN=1,NBIN
+ COEFU(IBIN)=1D0
+ WTRELN(IBIN)=0.1D0
+ IF(WTRELS.GT.0D0) WTRELN(IBIN)=MAX(0.1D0,
+ & WTREL(IBIN)/WTRELS)
+ 270 CONTINUE
+ ENDIF
+
+C...Normalize coefficients, with piece shared democratically.
+ COEFSU=0D0
+ WTRELS=0D0
+ DO 280 IBIN=1,NBIN
+ COEFU(IBIN)=MAX(0D0,COEFU(IBIN))
+ COEFSU=COEFSU+COEFU(IBIN)
+ WTRELS=WTRELS+WTRELN(IBIN)
+ 280 CONTINUE
+ IF(COEFSU.GT.0D0) THEN
+ DO 290 IBIN=1,NBIN
+ COEFO(IBIN)=PARP(122)/NBIN+(1D0-PARP(122))*0.5D0*
+ & (COEFU(IBIN)/COEFSU+WTRELN(IBIN)/WTRELS)
+ 290 CONTINUE
+ ELSE
+ DO 300 IBIN=1,NBIN
+ COEFO(IBIN)=1D0/NBIN
+ 300 CONTINUE
+ ENDIF
+ IF(IVAR.EQ.1) IOFF=0
+ IF(IVAR.EQ.2) IOFF=17
+ IF(IVAR.EQ.3) IOFF=7
+ IF(IVAR.EQ.4) IOFF=12
+ DO 310 IBIN=1,NBIN
+ ICOF=IOFF+IBIN
+ IF(IVAR.EQ.1.AND.IBIN.GT.2+2*MINT(72)) ICOF=7
+ IF(IVAR.EQ.3.AND.IBIN.EQ.4.AND.MINT(45).NE.3) ICOF=ICOF+1
+ COEF(ISUB,ICOF)=COEFO(IBIN)
+ 310 CONTINUE
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5600) CVAR(IVAR),
+ & (COEFO(IBIN),IBIN=1,NBIN)
+ 320 CONTINUE
+
+C...Find two most promising maxima among points previously determined.
+ DO 330 J=1,4
+ IACCMX(J)=0
+ SIGSMX(J)=0D0
+ 330 CONTINUE
+ NMAX=0
+ DO 390 IACC=1,NACC
+ DO 340 J=1,30
+ VINT(10+J)=VINTPT(IACC,J)
+ 340 CONTINUE
+ IF(ISTSB.NE.5) THEN
+ CALL PYSIGH(NCHN,SIGS)
+ IF(MWTXS.EQ.1) THEN
+ CALL PYEVWT(WTXS)
+ SIGS=WTXS*SIGS
+ ENDIF
+ ELSE
+ SIGS=0D0
+ DO 350 IKIN3=1,MSTP(129)
+ CALL PYKMAP(5,0,0D0)
+ IF(MINT(51).EQ.1) GOTO 350
+ CALL PYSIGH(NCHN,SIGTMP)
+ IF(MWTXS.EQ.1) THEN
+ CALL PYEVWT(WTXS)
+ SIGTMP=WTXS*SIGTMP
+ ENDIF
+ IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
+ 350 CONTINUE
+ ENDIF
+ IEQ=0
+ DO 360 IMV=1,NMAX
+ IF(ABS(SIGS-SIGSMX(IMV)).LT.1D-4*(SIGS+SIGSMX(IMV))) IEQ=IMV
+ 360 CONTINUE
+ IF(IEQ.EQ.0) THEN
+ DO 370 IMV=NMAX,1,-1
+ IIN=IMV+1
+ IF(SIGS.LE.SIGSMX(IMV)) GOTO 380
+ IACCMX(IMV+1)=IACCMX(IMV)
+ SIGSMX(IMV+1)=SIGSMX(IMV)
+ 370 CONTINUE
+ IIN=1
+ 380 IACCMX(IIN)=IACC
+ SIGSMX(IIN)=SIGS
+ IF(NMAX.LE.1) NMAX=NMAX+1
+ ENDIF
+ 390 CONTINUE
+
+C...Read out starting position for search.
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5700)
+ SIGSAM=SIGSMX(1)
+ DO 440 IMAX=1,NMAX
+ IACC=IACCMX(IMAX)
+ MTAU=MVARPT(IACC,1)
+ MTAUP=MVARPT(IACC,2)
+ MYST=MVARPT(IACC,3)
+ MCTH=MVARPT(IACC,4)
+ VTAU=0.5D0
+ VYST=0.5D0
+ VCTH=0.5D0
+ VTAUP=0.5D0
+
+C...Starting point and step size in parameter space.
+ DO 430 IRPT=1,2
+ DO 420 IVAR=1,4
+ IF(NPTS(IVAR).EQ.1) GOTO 420
+ IF(IVAR.EQ.1) VVAR=VTAU
+ IF(IVAR.EQ.2) VVAR=VTAUP
+ IF(IVAR.EQ.3) VVAR=VYST
+ IF(IVAR.EQ.4) VVAR=VCTH
+ IF(IVAR.EQ.1) MVAR=MTAU
+ IF(IVAR.EQ.2) MVAR=MTAUP
+ IF(IVAR.EQ.3) MVAR=MYST
+ IF(IVAR.EQ.4) MVAR=MCTH
+ IF(IRPT.EQ.1) VDEL=0.1D0
+ IF(IRPT.EQ.2) VDEL=MAX(0.01D0,MIN(0.05D0,VVAR-0.02D0,
+ & 0.98D0-VVAR))
+ IF(IRPT.EQ.1) VMAR=0.02D0
+ IF(IRPT.EQ.2) VMAR=0.002D0
+ IMOV0=1
+ IF(IRPT.EQ.1.AND.IVAR.EQ.1) IMOV0=0
+ DO 410 IMOV=IMOV0,8
+
+C...Define new point in parameter space.
+ IF(IMOV.EQ.0) THEN
+ INEW=2
+ VNEW=VVAR
+ ELSEIF(IMOV.EQ.1) THEN
+ INEW=3
+ VNEW=VVAR+VDEL
+ ELSEIF(IMOV.EQ.2) THEN
+ INEW=1
+ VNEW=VVAR-VDEL
+ ELSEIF(SIGSSM(3).GE.MAX(SIGSSM(1),SIGSSM(2)).AND.
+ & VVAR+2D0*VDEL.LT.1D0-VMAR) THEN
+ VVAR=VVAR+VDEL
+ SIGSSM(1)=SIGSSM(2)
+ SIGSSM(2)=SIGSSM(3)
+ INEW=3
+ VNEW=VVAR+VDEL
+ ELSEIF(SIGSSM(1).GE.MAX(SIGSSM(2),SIGSSM(3)).AND.
+ & VVAR-2D0*VDEL.GT.VMAR) THEN
+ VVAR=VVAR-VDEL
+ SIGSSM(3)=SIGSSM(2)
+ SIGSSM(2)=SIGSSM(1)
+ INEW=1
+ VNEW=VVAR-VDEL
+ ELSEIF(SIGSSM(3).GE.SIGSSM(1)) THEN
+ VDEL=0.5D0*VDEL
+ VVAR=VVAR+VDEL
+ SIGSSM(1)=SIGSSM(2)
+ INEW=2
+ VNEW=VVAR
+ ELSE
+ VDEL=0.5D0*VDEL
+ VVAR=VVAR-VDEL
+ SIGSSM(3)=SIGSSM(2)
+ INEW=2
+ VNEW=VVAR
+ ENDIF
+
+C...Convert to relevant variables and find derived new limits.
+ ILERR=0
+ IF(IVAR.EQ.1) THEN
+ VTAU=VNEW
+ CALL PYKMAP(1,MTAU,VTAU)
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
+ CALL PYKLIM(4)
+ IF(MINT(51).EQ.1) ILERR=1
+ ENDIF
+ ENDIF
+ IF(IVAR.LE.2.AND.ISTSB.GE.3.AND.ISTSB.LE.5.AND.
+ & ILERR.EQ.0) THEN
+ IF(IVAR.EQ.2) VTAUP=VNEW
+ CALL PYKMAP(4,MTAUP,VTAUP)
+ ENDIF
+ IF(IVAR.LE.2.AND.ILERR.EQ.0) THEN
+ CALL PYKLIM(2)
+ IF(MINT(51).EQ.1) ILERR=1
+ ENDIF
+ IF(IVAR.LE.3.AND.ILERR.EQ.0) THEN
+ IF(IVAR.EQ.3) VYST=VNEW
+ CALL PYKMAP(2,MYST,VYST)
+ CALL PYKLIM(3)
+ IF(MINT(51).EQ.1) ILERR=1
+ ENDIF
+ IF((ISTSB.EQ.2.OR.ISTSB.EQ.4.OR.ISTSB.EQ.6).AND.
+ & ILERR.EQ.0) THEN
+ IF(IVAR.EQ.4) VCTH=VNEW
+ CALL PYKMAP(3,MCTH,VCTH)
+ ENDIF
+ IF(ISUB.EQ.96) VINT(25)=VINT(21)*(1.-VINT(23)**2)
+
+C...Evaluate cross-section. Save new maximum. Final maximum.
+ IF(ILERR.NE.0) THEN
+ SIGS=0.
+ ELSEIF(ISTSB.NE.5) THEN
+ CALL PYSIGH(NCHN,SIGS)
+ IF(MWTXS.EQ.1) THEN
+ CALL PYEVWT(WTXS)
+ SIGS=WTXS*SIGS
+ ENDIF
+ ELSE
+ SIGS=0D0
+ DO 400 IKIN3=1,MSTP(129)
+ CALL PYKMAP(5,0,0D0)
+ IF(MINT(51).EQ.1) GOTO 400
+ CALL PYSIGH(NCHN,SIGTMP)
+ IF(MWTXS.EQ.1) THEN
+ CALL PYEVWT(WTXS)
+ SIGTMP=WTXS*SIGTMP
+ ENDIF
+ IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
+ 400 CONTINUE
+ ENDIF
+ SIGSSM(INEW)=SIGS
+ IF(SIGS.GT.SIGSAM) SIGSAM=SIGS
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5800) IMAX,IVAR,MVAR,
+ & IMOV,VNEW,VINT(21),VINT(22),VINT(23),VINT(26),SIGS
+ 410 CONTINUE
+ 420 CONTINUE
+ 430 CONTINUE
+ 440 CONTINUE
+ IF(MSTP(121).EQ.1) SIGSAM=PARP(121)*SIGSAM
+ XSEC(ISUB,1)=1.05D0*SIGSAM
+ 450 CONTINUE
+ IF(MSTP(173).EQ.1.AND.ISUB.NE.96) XSEC(ISUB,1)=
+ & PARP(174)*XSEC(ISUB,1)
+ IF(ISUB.NE.96) XSEC(0,1)=XSEC(0,1)+XSEC(ISUB,1)
+ 460 CONTINUE
+ MINT(51)=0
+
+C...Print summary table.
+ IF(NPOSI.EQ.0) THEN
+ WRITE(MSTU(11),5900)
+ STOP
+ ENDIF
+ IF(MSTP(122).GE.1) THEN
+ WRITE(MSTU(11),6000)
+ WRITE(MSTU(11),6100)
+ DO 470 ISUB=1,500
+ IF(MSUB(ISUB).NE.1.AND.ISUB.NE.96) GOTO 470
+ IF(ISUB.EQ.96.AND.MINT(50).EQ.0) GOTO 470
+ IF(ISUB.EQ.96.AND.MSUB(95).NE.1.AND.MSTP(81).LE.0) GOTO 470
+ IF(ISUB.EQ.96.AND.MINT(49).EQ.0.AND.MSTP(131).EQ.0) GOTO 470
+ IF(MSUB(95).EQ.1.AND.(ISUB.EQ.11.OR.ISUB.EQ.12.OR.ISUB.EQ.13
+ & .OR.ISUB.EQ.28.OR.ISUB.EQ.53.OR.ISUB.EQ.68)) GOTO 470
+ WRITE(MSTU(11),6200) ISUB,PROC(ISUB),XSEC(ISUB,1)
+ 470 CONTINUE
+ WRITE(MSTU(11),6300)
+ ENDIF
+
+C...Format statements for maximization results.
+ 5000 FORMAT(/1X,'Coefficient optimization and maximum search for ',
+ &'subprocess no',I4/1X,'Coefficient modes tau',10X,'y*',9X,
+ &'cth',9X,'tau''',7X,'sigma')
+ 5100 FORMAT(1X,'Warning: requested subprocess ',I3,' has no allowed ',
+ &'phase space.'/1X,'Process switched off!')
+ 5200 FORMAT(1X,4I4,F12.8,F12.6,F12.7,F12.8,1P,D12.4)
+ 5300 FORMAT(1X,'Warning: requested subprocess ',I3,' has vanishing ',
+ &'cross-section.'/1X,'Process switched off!')
+ 5400 FORMAT(1X,'Coefficients of equation system to be solved for ',A4)
+ 5500 FORMAT(1X,1P,8D11.3)
+ 5600 FORMAT(1X,'Result for ',A4,':',7F9.4)
+ 5700 FORMAT(1X,'Maximum search for given coefficients'/2X,'MAX VAR ',
+ &'MOD MOV VNEW',7X,'tau',7X,'y*',8X,'cth',7X,'tau''',7X,'sigma')
+ 5800 FORMAT(1X,4I4,F8.4,F11.7,F9.3,F11.6,F11.7,1P,D12.4)
+ 5900 FORMAT(1X,'Error: no requested process has non-vanishing ',
+ &'cross-section.'/1X,'Execution stopped!')
+ 6000 FORMAT(/1X,8('*'),1X,'PYMAXI: summary of differential ',
+ &'cross-section maximum search',1X,8('*'))
+ 6100 FORMAT(/11X,58('=')/11X,'I',38X,'I',17X,'I'/11X,'I ISUB ',
+ &'Subprocess name',15X,'I Maximum value I'/11X,'I',38X,'I',
+ &17X,'I'/11X,58('=')/11X,'I',38X,'I',17X,'I')
+ 6200 FORMAT(11X,'I',2X,I3,3X,A28,2X,'I',2X,1P,D12.4,3X,'I')
+ 6300 FORMAT(11X,'I',38X,'I',17X,'I'/11X,58('='))
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPILE
+C...Initializes multiplicity distribution and selects mutliplicity
+C...of pileup events, i.e. several events occuring at the same
+C...beam crossing.
+
+ SUBROUTINE PYPILE(MPILE)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ SAVE /PYDAT1/,/PYPARS/,/PYINT1/,/PYINT7/
+C...Local arrays and saved variables.
+ DIMENSION WTI(0:200)
+ SAVE IMIN,IMAX,WTI,WTS
+
+C...Sum of allowed cross-sections for pileup events.
+ IF(MPILE.EQ.1) THEN
+ VINT(131)=SIGT(0,0,5)
+ IF(MSTP(132).GE.2) VINT(131)=VINT(131)+SIGT(0,0,4)
+ IF(MSTP(132).GE.3) VINT(131)=VINT(131)+SIGT(0,0,2)+SIGT(0,0,3)
+ IF(MSTP(132).GE.4) VINT(131)=VINT(131)+SIGT(0,0,1)
+ IF(MSTP(133).LE.0) RETURN
+
+C...Initialize multiplicity distribution at maximum.
+ XNAVE=VINT(131)*PARP(131)
+ IF(XNAVE.GT.120D0) WRITE(MSTU(11),5000) XNAVE
+ INAVE=MAX(1,MIN(200,NINT(XNAVE)))
+ WTI(INAVE)=1D0
+ WTS=WTI(INAVE)
+ WTN=WTI(INAVE)*INAVE
+
+C...Find shape of multiplicity distribution below maximum.
+ IMIN=INAVE
+ DO 100 I=INAVE-1,1,-1
+ IF(MSTP(133).EQ.1) WTI(I)=WTI(I+1)*(I+1)/XNAVE
+ IF(MSTP(133).GE.2) WTI(I)=WTI(I+1)*I/XNAVE
+ IF(WTI(I).LT.1D-6) GOTO 110
+ WTS=WTS+WTI(I)
+ WTN=WTN+WTI(I)*I
+ IMIN=I
+ 100 CONTINUE
+
+C...Find shape of multiplicity distribution above maximum.
+ 110 IMAX=INAVE
+ DO 120 I=INAVE+1,200
+ IF(MSTP(133).EQ.1) WTI(I)=WTI(I-1)*XNAVE/I
+ IF(MSTP(133).GE.2) WTI(I)=WTI(I-1)*XNAVE/(I-1)
+ IF(WTI(I).LT.1D-6) GOTO 130
+ WTS=WTS+WTI(I)
+ WTN=WTN+WTI(I)*I
+ IMAX=I
+ 120 CONTINUE
+ 130 VINT(132)=XNAVE
+ VINT(133)=WTN/WTS
+ IF(MSTP(133).EQ.1.AND.IMIN.EQ.1) VINT(134)=
+ & WTS/(WTS+WTI(1)/XNAVE)
+ IF(MSTP(133).EQ.1.AND.IMIN.GT.1) VINT(134)=1D0
+ IF(MSTP(133).GE.2) VINT(134)=XNAVE
+
+C...Pick multiplicity of pileup events.
+ ELSE
+ IF(MSTP(133).LE.0) THEN
+ MINT(81)=MAX(1,MSTP(134))
+ ELSE
+ WTR=WTS*PYR(0)
+ DO 140 I=IMIN,IMAX
+ MINT(81)=I
+ WTR=WTR-WTI(I)
+ IF(WTR.LE.0D0) GOTO 150
+ 140 CONTINUE
+ 150 CONTINUE
+ ENDIF
+ ENDIF
+
+C...Format statement for error message.
+ 5000 FORMAT(1X,'Warning: requested average number of events per bunch',
+ &'crossing too large, ',1P,D12.4)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSAVE
+C...Saves and restores parameter and cross section values for the
+C...3 gamma-p and 6 gamma-gamma alnternatives. Also makes random
+C...choice between alternatives.
+
+ SUBROUTINE PYSAVE(ISAVE,IGA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT5/
+C...Local arrays and saved variables.
+ DIMENSION NCP(10),NSUBCP(10,20),MSUBCP(10,20),COEFCP(10,20,20),
+ &NGENCP(10,0:20,3),XSECCP(10,0:20,3),INTCP(10,20),RECP(10,20)
+ SAVE NCP,NSUBCP,MSUBCP,COEFCP,NGENCP,XSECCP,INTCP,RECP
+
+C...Save list of subprocesses and cross-section information.
+ IF(ISAVE.EQ.1) THEN
+ ICP=0
+ DO 120 I=1,500
+ IF(MSUB(I).EQ.0.AND.I.NE.96.AND.I.NE.97) GOTO 120
+ ICP=ICP+1
+ NSUBCP(IGA,ICP)=I
+ MSUBCP(IGA,ICP)=MSUB(I)
+ DO 100 J=1,20
+ COEFCP(IGA,ICP,J)=COEF(I,J)
+ 100 CONTINUE
+ DO 110 J=1,3
+ NGENCP(IGA,ICP,J)=NGEN(I,J)
+ XSECCP(IGA,ICP,J)=XSEC(I,J)
+ 110 CONTINUE
+ 120 CONTINUE
+ NCP(IGA)=ICP
+ DO 130 J=1,3
+ NGENCP(IGA,0,J)=NGEN(0,J)
+ XSECCP(IGA,0,J)=XSEC(0,J)
+ 130 CONTINUE
+C...Save various common process variables.
+ DO 140 J=1,10
+ INTCP(IGA,J)=MINT(40+J)
+ 140 CONTINUE
+ INTCP(IGA,11)=MINT(101)
+ INTCP(IGA,12)=MINT(102)
+ INTCP(IGA,13)=MINT(107)
+ INTCP(IGA,14)=MINT(108)
+ INTCP(IGA,15)=MINT(123)
+ RECP(IGA,1)=CKIN(3)
+
+C...Save cross-section information only.
+ ELSEIF(ISAVE.EQ.2) THEN
+ DO 160 ICP=1,NCP(IGA)
+ I=NSUBCP(IGA,ICP)
+ DO 150 J=1,3
+ NGENCP(IGA,ICP,J)=NGEN(I,J)
+ XSECCP(IGA,ICP,J)=XSEC(I,J)
+ 150 CONTINUE
+ 160 CONTINUE
+ DO 170 J=1,3
+ NGENCP(IGA,0,J)=NGEN(0,J)
+ XSECCP(IGA,0,J)=XSEC(0,J)
+ 170 CONTINUE
+
+C...Choose between allowed alternatives.
+ ELSEIF(ISAVE.EQ.3.OR.ISAVE.EQ.4) THEN
+ IF(ISAVE.EQ.4) THEN
+ XSUMCP=0D0
+ DO 180 IG=1,MINT(121)
+ XSUMCP=XSUMCP+XSECCP(IG,0,1)
+ 180 CONTINUE
+ XSUMCP=XSUMCP*PYR(0)
+ DO 190 IG=1,MINT(121)
+ IGA=IG
+ XSUMCP=XSUMCP-XSECCP(IG,0,1)
+ IF(XSUMCP.LE.0D0) GOTO 200
+ 190 CONTINUE
+ 200 CONTINUE
+ ENDIF
+
+C...Restore cross-section information.
+ DO 210 I=1,500
+ MSUB(I)=0
+ 210 CONTINUE
+ DO 240 ICP=1,NCP(IGA)
+ I=NSUBCP(IGA,ICP)
+ MSUB(I)=MSUBCP(IGA,ICP)
+ DO 220 J=1,20
+ COEF(I,J)=COEFCP(IGA,ICP,J)
+ 220 CONTINUE
+ DO 230 J=1,3
+ NGEN(I,J)=NGENCP(IGA,ICP,J)
+ XSEC(I,J)=XSECCP(IGA,ICP,J)
+ 230 CONTINUE
+ 240 CONTINUE
+ DO 250 J=1,3
+ NGEN(0,J)=NGENCP(IGA,0,J)
+ XSEC(0,J)=XSECCP(IGA,0,J)
+ 250 CONTINUE
+
+C...Restore various common process variables.
+ DO 260 J=1,10
+ MINT(40+J)=INTCP(IGA,J)
+ 260 CONTINUE
+ MINT(101)=INTCP(IGA,11)
+ MINT(102)=INTCP(IGA,12)
+ MINT(107)=INTCP(IGA,13)
+ MINT(108)=INTCP(IGA,14)
+ MINT(123)=INTCP(IGA,15)
+ CKIN(3)=RECP(IGA,1)
+ CKIN(1)=2D0*CKIN(3)
+
+C...Sum up cross-section info (for PYSTAT).
+ ELSEIF(ISAVE.EQ.5) THEN
+ DO 270 I=1,500
+ MSUB(I)=0
+ NGEN(I,1)=0
+ NGEN(I,3)=0
+ XSEC(I,3)=0D0
+ 270 CONTINUE
+ NGEN(0,1)=0
+ NGEN(0,2)=0
+ NGEN(0,3)=0
+ XSEC(0,3)=0
+ DO 290 IG=1,MINT(121)
+ DO 280 ICP=1,NCP(IG)
+ I=NSUBCP(IG,ICP)
+ IF(MSUBCP(IG,ICP).EQ.1) MSUB(I)=1
+ NGEN(I,1)=NGEN(I,1)+NGENCP(IG,ICP,1)
+ NGEN(I,3)=NGEN(I,3)+NGENCP(IG,ICP,3)
+ XSEC(I,3)=XSEC(I,3)+XSECCP(IG,ICP,3)
+ 280 CONTINUE
+ NGEN(0,1)=NGEN(0,1)+NGENCP(IG,0,1)
+ NGEN(0,2)=NGEN(0,2)+NGENCP(IG,0,2)
+ NGEN(0,3)=NGEN(0,3)+NGENCP(IG,0,3)
+ XSEC(0,3)=XSEC(0,3)+XSECCP(IG,0,3)
+ 290 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRAND
+C...Generates quantities characterizing the high-pT scattering at the
+C...parton level according to the matrix elements. Chooses incoming,
+C...reacting partons, their momentum fractions and one of the possible
+C...subprocesses.
+
+ SUBROUTINE PYRAND
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT7/,/PYUPPR/,/PYMSSM/
+C...Local arrays.
+ DIMENSION XPQ(-25:25),PMM(2),PDIF(4),BHAD(4),PMMN(2)
+
+C...Parameters and data used in elastic/diffractive treatment.
+ DATA EPS/0.0808D0/, ALP/0.25D0/, CRES/2D0/, PMRC/1.062D0/,
+ &SMP/0.880D0/, BHAD/2.3D0,1.4D0,1.4D0,0.23D0/
+
+C...Initial values, specifically for (first) semihard interaction.
+ MINT(10)=0
+ MINT(17)=0
+ MINT(18)=0
+ VINT(143)=1D0
+ VINT(144)=1D0
+ MFAIL=0
+ IF(MSTP(171).EQ.1.AND.MSTP(172).EQ.2) MFAIL=1
+ ISUB=0
+ LOOP=0
+ 100 LOOP=LOOP+1
+ MINT(51)=0
+
+C...Choice of process type - first event of pileup.
+ IF(MINT(82).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GT.96)) THEN
+
+C...For gamma-p or gamma-gamma first pick between alternatives.
+ IF(MINT(121).GT.1) CALL PYSAVE(4,IGA)
+ MINT(122)=IGA
+
+C...For gamma + gamma with different nature, flip at random.
+ IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.MINT(123).GE.4.AND.
+ & PYR(0).GT.0.5D0) THEN
+ MINTSV=MINT(41)
+ MINT(41)=MINT(42)
+ MINT(42)=MINTSV
+ MINTSV=MINT(45)
+ MINT(45)=MINT(46)
+ MINT(46)=MINTSV
+ MINTSV=MINT(107)
+ MINT(107)=MINT(108)
+ MINT(108)=MINTSV
+ IF(MINT(47).EQ.2.OR.MINT(47).EQ.3) MINT(47)=5-MINT(47)
+ ENDIF
+
+C...Pick process type.
+ RSUB=XSEC(0,1)*PYR(0)
+ DO 110 I=1,500
+ IF(MSUB(I).NE.1) GOTO 110
+ ISUB=I
+ RSUB=RSUB-XSEC(I,1)
+ IF(RSUB.LE.0D0) GOTO 120
+ 110 CONTINUE
+ 120 IF(ISUB.EQ.95) ISUB=96
+ IF(ISUB.EQ.96) CALL PYMULT(2)
+
+C...Choice of inclusive process type - pileup events.
+ ELSEIF(MINT(82).GE.2.AND.ISUB.EQ.0) THEN
+ RSUB=VINT(131)*PYR(0)
+ ISUB=96
+ IF(RSUB.GT.SIGT(0,0,5)) ISUB=94
+ IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)) ISUB=93
+ IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)+SIGT(0,0,3)) ISUB=92
+ IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)+SIGT(0,0,3)+SIGT(0,0,2))
+ & ISUB=91
+ IF(ISUB.EQ.96) CALL PYMULT(2)
+ ENDIF
+ IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)+1
+ IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)+1
+ IF(ISUB.EQ.96.AND.LOOP.EQ.1.AND.MINT(82).EQ.1)
+ &NGEN(97,1)=NGEN(97,1)+1
+ MINT(1)=ISUB
+ ISTSB=ISET(ISUB)
+
+C...Random choice of flavour for some SUSY processes.
+ IF(ISUB.GE.201.AND.ISUB.LE.280) THEN
+C...~e_L ~nu_e or ~mu_L ~nu_mu.
+ IF(ISUB.EQ.210) THEN
+ KFPR(ISUB,1)=KSUSY1+11+2*INT(0.5D0+PYR(0))
+ KFPR(ISUB,2)=KFPR(ISUB,1)+1
+C...~nu_e ~nu_e(bar) or ~nu_mu ~nu_mu(bar).
+ ELSEIF(ISUB.EQ.213) THEN
+ KFPR(ISUB,1)=KSUSY1+12+2*INT(0.5D0+PYR(0))
+ KFPR(ISUB,2)=KFPR(ISUB,1)
+C...~q ~chi/~g; ~q = ~d, ~u, ~s, ~c or ~b.
+ ELSEIF(ISUB.GE.246.AND.ISUB.LE.259) THEN
+ IF(MOD(ISUB,2).EQ.0) THEN
+ KFPR(ISUB,1)=KSUSY1+1+INT(5D0*PYR(0))
+ ELSE
+ KFPR(ISUB,1)=KSUSY2+1+INT(5D0*PYR(0))
+ ENDIF
+C...~q1 ~q2; ~q = ~d, ~u, ~s, ~c or ~b.
+ ELSEIF(ISUB.GE.271.AND.ISUB.LE.276) THEN
+ IF(ISUB.EQ.271.OR.ISUB.EQ.274) THEN
+ KSU1=KSUSY1
+ KSU2=KSUSY1
+ ELSEIF(ISUB.EQ.272.OR.ISUB.EQ.275) THEN
+ KSU1=KSUSY2
+ KSU2=KSUSY2
+ ELSEIF(PYR(0).LT.0.5D0) THEN
+ KSU1=KSUSY1
+ KSU2=KSUSY2
+ ELSE
+ KSU1=KSUSY2
+ KSU2=KSUSY1
+ ENDIF
+ KFPR(ISUB,1)=KSU1+1+INT(5D0*PYR(0))
+ KFPR(ISUB,2)=KSU2+1+INT(5D0*PYR(0))
+C...~q ~q(bar); ~q = ~d, ~u, ~s, ~c or ~b.
+ ELSEIF(ISUB.EQ.277.OR.ISUB.EQ.279) THEN
+ KFPR(ISUB,1)=KSUSY1+1+INT(5D0*PYR(0))
+ KFPR(ISUB,2)=KFPR(ISUB,1)
+ ELSEIF(ISUB.EQ.278.OR.ISUB.EQ.280) THEN
+ KFPR(ISUB,1)=KSUSY2+1+INT(5D0*PYR(0))
+ KFPR(ISUB,2)=KFPR(ISUB,1)
+ ENDIF
+ ENDIF
+
+C...Find resonances (explicit or implicit in cross-section).
+ MINT(72)=0
+ KFR1=0
+ IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
+ KFR1=KFPR(ISUB,1)
+ ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.25.OR.ISUB.EQ.110.OR.ISUB.EQ.165.OR.
+ & ISUB.EQ.171.OR.ISUB.EQ.176) THEN
+ KFR1=23
+ ELSEIF(ISUB.EQ.23.OR.ISUB.EQ.26.OR.ISUB.EQ.166.OR.ISUB.EQ.172.OR.
+ & ISUB.EQ.177) THEN
+ KFR1=24
+ ELSEIF(ISUB.GE.71.AND.ISUB.LE.77) THEN
+ KFR1=25
+ IF(MSTP(46).EQ.5) THEN
+ KFR1=30
+ PMAS(30,1)=PARP(45)
+ PMAS(30,2)=PARP(45)**3/(96D0*PARU(1)*PARP(47)**2)
+ ENDIF
+ ELSEIF(ISUB.EQ.194) THEN
+ KFR1=54
+ ENDIF
+ CKMX=CKIN(2)
+ IF(CKMX.LE.0D0) CKMX=VINT(1)
+ KCR1=PYCOMP(KFR1)
+ IF(KFR1.NE.0) THEN
+ IF(CKIN(1).GT.PMAS(KCR1,1)+20D0*PMAS(KCR1,2).OR.
+ & CKMX.LT.PMAS(KCR1,1)-20D0*PMAS(KCR1,2)) KFR1=0
+ ENDIF
+ IF(KFR1.NE.0) THEN
+ TAUR1=PMAS(KCR1,1)**2/VINT(2)
+ GAMR1=PMAS(KCR1,1)*PMAS(KCR1,2)/VINT(2)
+ MINT(72)=1
+ MINT(73)=KFR1
+ VINT(73)=TAUR1
+ VINT(74)=GAMR1
+ ENDIF
+ IF(ISUB.EQ.141.OR.ISUB.EQ.194) THEN
+ KFR2=23
+ IF(ISUB.EQ.194) KFR2=56
+ KCR2=PYCOMP(KFR2)
+ TAUR2=PMAS(KCR2,1)**2/VINT(2)
+ GAMR2=PMAS(KCR2,1)*PMAS(KCR2,2)/VINT(2)
+ IF(CKIN(1).GT.PMAS(KCR2,1)+20D0*PMAS(KCR2,2).OR.
+ & CKMX.LT.PMAS(KCR2,1)-20D0*PMAS(KCR2,2)) KFR2=0
+ IF(KFR2.NE.0.AND.KFR1.NE.0) THEN
+ MINT(72)=2
+ MINT(74)=KFR2
+ VINT(75)=TAUR2
+ VINT(76)=GAMR2
+ ELSEIF(KFR2.NE.0) THEN
+ KFR1=KFR2
+ TAUR1=TAUR2
+ GAMR1=GAMR2
+ MINT(72)=1
+ MINT(73)=KFR1
+ VINT(73)=TAUR1
+ VINT(74)=GAMR1
+ ENDIF
+ ENDIF
+
+C...Find product masses and minimum pT of process,
+C...optionally with broadening according to a truncated Breit-Wigner.
+ VINT(63)=0D0
+ VINT(64)=0D0
+ MINT(71)=0
+ VINT(71)=CKIN(3)
+ IF(MINT(82).GE.2) VINT(71)=0D0
+ VINT(80)=1D0
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
+ NBW=0
+ DO 140 I=1,2
+ PMMN(I)=0D0
+ IF(KFPR(ISUB,I).EQ.0) THEN
+ ELSEIF(MSTP(42).LE.0.OR.PMAS(PYCOMP(KFPR(ISUB,I)),2).LT.
+ & PARP(41)) THEN
+ VINT(62+I)=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
+ ELSE
+ NBW=NBW+1
+C...This prevents SUSY/t particles from becoming too light.
+ KFLW=KFPR(ISUB,I)
+ IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
+ KCW=PYCOMP(KFLW)
+ PMMN(I)=PMAS(KCW,1)
+ DO 130 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
+ IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
+ PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
+ & PMAS(PYCOMP(KFDP(IDC,2)),1)
+ IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
+ & PMAS(PYCOMP(KFDP(IDC,3)),1)
+ PMMN(I)=MIN(PMMN(I),PMSUM)
+ ENDIF
+ 130 CONTINUE
+ ELSEIF(KFLW.EQ.6) THEN
+ PMMN(I)=PMAS(24,1)+PMAS(5,1)
+ ENDIF
+ ENDIF
+ 140 CONTINUE
+ IF(NBW.GE.1) THEN
+ CKIN41=CKIN(41)
+ CKIN43=CKIN(43)
+ CKIN(41)=MAX(PMMN(1),CKIN(41))
+ CKIN(43)=MAX(PMMN(2),CKIN(43))
+ CALL PYOFSH(4,0,KFPR(ISUB,1),KFPR(ISUB,2),0D0,PQM3,PQM4)
+ CKIN(41)=CKIN41
+ CKIN(43)=CKIN43
+ IF(MINT(51).EQ.1) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ VINT(63)=PQM3**2
+ VINT(64)=PQM4**2
+ ENDIF
+ IF(MIN(VINT(63),VINT(64)).LT.CKIN(6)**2) MINT(71)=1
+ IF(MINT(71).EQ.1) VINT(71)=MAX(CKIN(3),CKIN(5))
+ ENDIF
+
+C...Prepare for additional variable choices in 2 -> 3.
+ IF(ISTSB.EQ.5) THEN
+ VINT(201)=0D0
+ IF(KFPR(ISUB,2).GT.0) VINT(201)=PMAS(PYCOMP(KFPR(ISUB,2)),1)
+ VINT(206)=VINT(201)
+ VINT(204)=PMAS(23,1)
+ IF(ISUB.EQ.124) VINT(204)=PMAS(24,1)
+ IF(ISUB.EQ.121.OR.ISUB.EQ.122.OR.ISUB.EQ.181.OR.ISUB.EQ.182.OR.
+ & ISUB.EQ.186.OR.ISUB.EQ.187) VINT(204)=VINT(201)
+ VINT(209)=VINT(204)
+ ENDIF
+
+C...Select incoming VDM particle (rho/omega/phi/J/psi).
+ IF(ISTSB.NE.0.AND.(MINT(101).GE.2.OR.MINT(102).GE.2).AND.
+ &(MINT(123).EQ.2.OR.MINT(123).EQ.5.OR.MINT(123).EQ.7)) THEN
+ VRN=PYR(0)*SIGT(0,0,5)
+ IF(MINT(101).LE.1) THEN
+ I1MN=0
+ I1MX=0
+ ELSE
+ I1MN=1
+ I1MX=MINT(101)
+ ENDIF
+ IF(MINT(102).LE.1) THEN
+ I2MN=0
+ I2MX=0
+ ELSE
+ I2MN=1
+ I2MX=MINT(102)
+ ENDIF
+ DO 160 I1=I1MN,I1MX
+ KFV1=110*I1+3
+ DO 150 I2=I2MN,I2MX
+ KFV2=110*I2+3
+ VRN=VRN-SIGT(I1,I2,5)
+ IF(VRN.LE.0D0) GOTO 170
+ 150 CONTINUE
+ 160 CONTINUE
+ 170 IF(MINT(101).GE.2) MINT(103)=KFV1
+ IF(MINT(102).GE.2) MINT(104)=KFV2
+ ENDIF
+
+ IF(ISTSB.EQ.0) THEN
+C...Elastic scattering or single or double diffractive scattering.
+
+C...Select incoming particle (rho/omega/phi/J/psi for VDM) and mass.
+ MINT(103)=MINT(11)
+ MINT(104)=MINT(12)
+ PMM(1)=VINT(3)
+ PMM(2)=VINT(4)
+ IF(MINT(101).GE.2.OR.MINT(102).GE.2) THEN
+ JJ=ISUB-90
+ VRN=PYR(0)*SIGT(0,0,JJ)
+ IF(MINT(101).LE.1) THEN
+ I1MN=0
+ I1MX=0
+ ELSE
+ I1MN=1
+ I1MX=MINT(101)
+ ENDIF
+ IF(MINT(102).LE.1) THEN
+ I2MN=0
+ I2MX=0
+ ELSE
+ I2MN=1
+ I2MX=MINT(102)
+ ENDIF
+ DO 190 I1=I1MN,I1MX
+ KFV1=110*I1+3
+ DO 180 I2=I2MN,I2MX
+ KFV2=110*I2+3
+ VRN=VRN-SIGT(I1,I2,JJ)
+ IF(VRN.LE.0D0) GOTO 200
+ 180 CONTINUE
+ 190 CONTINUE
+ 200 IF(MINT(101).GE.2) THEN
+ MINT(103)=KFV1
+ PMM(1)=PYMASS(KFV1)
+ ENDIF
+ IF(MINT(102).GE.2) THEN
+ MINT(104)=KFV2
+ PMM(2)=PYMASS(KFV2)
+ ENDIF
+ ENDIF
+
+C...Side/sides of diffractive system.
+ MINT(17)=0
+ MINT(18)=0
+ IF(ISUB.EQ.92.OR.ISUB.EQ.94) MINT(17)=1
+ IF(ISUB.EQ.93.OR.ISUB.EQ.94) MINT(18)=1
+
+C...Find masses of particles and minimal masses of diffractive states.
+ DO 210 JT=1,2
+ PDIF(JT)=PMM(JT)
+ VINT(66+JT)=PDIF(JT)
+ IF(MINT(16+JT).EQ.1) PDIF(JT)=PDIF(JT)+PARP(102)
+ 210 CONTINUE
+ SH=VINT(2)
+ SQM1=PMM(1)**2
+ SQM2=PMM(2)**2
+ SQM3=PDIF(1)**2
+ SQM4=PDIF(2)**2
+ SMRES1=(PMM(1)+PMRC)**2
+ SMRES2=(PMM(2)+PMRC)**2
+
+C...Find elastic slope and lower limit diffractive slope.
+ IHA=MAX(2,IABS(MINT(103))/110)
+ IF(IHA.GE.5) IHA=1
+ IHB=MAX(2,IABS(MINT(104))/110)
+ IF(IHB.GE.5) IHB=1
+ IF(ISUB.EQ.91) THEN
+ BMN=2D0*BHAD(IHA)+2D0*BHAD(IHB)+4D0*SH**EPS-4.2D0
+ ELSEIF(ISUB.EQ.92) THEN
+ BMN=MAX(2D0,2D0*BHAD(IHB))
+ ELSEIF(ISUB.EQ.93) THEN
+ BMN=MAX(2D0,2D0*BHAD(IHA))
+ ELSEIF(ISUB.EQ.94) THEN
+ BMN=2D0*ALP*4D0
+ ENDIF
+
+C...Determine maximum possible t range and coefficient of generation.
+ SQLA12=(SH-SQM1-SQM2)**2-4D0*SQM1*SQM2
+ SQLA34=(SH-SQM3-SQM4)**2-4D0*SQM3*SQM4
+ THA=SH-(SQM1+SQM2+SQM3+SQM4)+(SQM1-SQM2)*(SQM3-SQM4)/SH
+ THB=SQRT(MAX(0D0,SQLA12))*SQRT(MAX(0D0,SQLA34))/SH
+ THC=(SQM3-SQM1)*(SQM4-SQM2)+(SQM1+SQM4-SQM2-SQM3)*
+ & (SQM1*SQM4-SQM2*SQM3)/SH
+ THL=-0.5D0*(THA+THB)
+ THU=THC/THL
+ THRND=EXP(MAX(-50D0,BMN*(THL-THU)))-1D0
+
+C...Select diffractive mass/masses according to dm^2/m^2.
+ 220 DO 230 JT=1,2
+ IF(MINT(16+JT).EQ.0) THEN
+ PDIF(2+JT)=PDIF(JT)
+ ELSE
+ PMMIN=PDIF(JT)
+ PMMAX=MAX(VINT(2+JT),VINT(1)-PDIF(3-JT))
+ PDIF(2+JT)=PMMIN*(PMMAX/PMMIN)**PYR(0)
+ ENDIF
+ 230 CONTINUE
+ SQM3=PDIF(3)**2
+ SQM4=PDIF(4)**2
+
+C..Additional mass factors, including resonance enhancement.
+ IF(PDIF(3)+PDIF(4).GE.VINT(1)) GOTO 220
+ IF(ISUB.EQ.92) THEN
+ FSD=(1D0-SQM3/SH)*(1D0+CRES*SMRES1/(SMRES1+SQM3))
+ IF(FSD.LT.PYR(0)*(1D0+CRES)) GOTO 220
+ ELSEIF(ISUB.EQ.93) THEN
+ FSD=(1D0-SQM4/SH)*(1D0+CRES*SMRES2/(SMRES2+SQM4))
+ IF(FSD.LT.PYR(0)*(1D0+CRES)) GOTO 220
+ ELSEIF(ISUB.EQ.94) THEN
+ FDD=(1D0-(PDIF(3)+PDIF(4))**2/SH)*(SH*SMP/
+ & (SH*SMP+SQM3*SQM4))*(1D0+CRES*SMRES1/(SMRES1+SQM3))*
+ & (1D0+CRES*SMRES2/(SMRES2+SQM4))
+ IF(FDD.LT.PYR(0)*(1D0+CRES)**2) GOTO 220
+ ENDIF
+
+C...Select t according to exp(Bmn*t) and correct to right slope.
+ TH=THU+LOG(1D0+THRND*PYR(0))/BMN
+ IF(ISUB.GE.92) THEN
+ IF(ISUB.EQ.92) THEN
+ BADD=2D0*ALP*LOG(SH/SQM3)
+ IF(BHAD(IHB).LT.1D0) BADD=MAX(0D0,BADD+2D0*BHAD(IHB)-2D0)
+ ELSEIF(ISUB.EQ.93) THEN
+ BADD=2D0*ALP*LOG(SH/SQM4)
+ IF(BHAD(IHA).LT.1D0) BADD=MAX(0D0,BADD+2D0*BHAD(IHA)-2D0)
+ ELSEIF(ISUB.EQ.94) THEN
+ BADD=2D0*ALP*(LOG(EXP(4D0)+SH/(ALP*SQM3*SQM4))-4D0)
+ ENDIF
+ IF(EXP(MAX(-50D0,BADD*(TH-THU))).LT.PYR(0)) GOTO 220
+ ENDIF
+
+C...Check whether m^2 and t choices are consistent.
+ SQLA34=(SH-SQM3-SQM4)**2-4D0*SQM3*SQM4
+ THA=SH-(SQM1+SQM2+SQM3+SQM4)+(SQM1-SQM2)*(SQM3-SQM4)/SH
+ THB=SQRT(MAX(0D0,SQLA12))*SQRT(MAX(0D0,SQLA34))/SH
+ IF(THB.LE.1D-8) GOTO 220
+ THC=(SQM3-SQM1)*(SQM4-SQM2)+(SQM1+SQM4-SQM2-SQM3)*
+ & (SQM1*SQM4-SQM2*SQM3)/SH
+ THLM=-0.5D0*(THA+THB)
+ THUM=THC/THLM
+ IF(TH.LT.THLM.OR.TH.GT.THUM) GOTO 220
+
+C...Information to output.
+ VINT(21)=1D0
+ VINT(22)=0D0
+ VINT(23)=MIN(1D0,MAX(-1D0,(THA+2D0*TH)/THB))
+ VINT(45)=TH
+ VINT(59)=2D0*SQRT(MAX(0D0,-(THC+THA*TH+TH**2)))/THB
+ VINT(63)=PDIF(3)**2
+ VINT(64)=PDIF(4)**2
+
+C...Note: in the following, by In is meant the integral over the
+C...quantity multiplying coefficient cn.
+C...Choose tau according to h1(tau)/tau, where
+C...h1(tau) = c1 + I1/I2*c2*1/tau + I1/I3*c3*1/(tau+tau_R) +
+C...I1/I4*c4*tau/((s*tau-m^2)^2+(m*Gamma)^2) +
+C...I1/I5*c5*1/(tau+tau_R') +
+C...I1/I6*c6*tau/((s*tau-m'^2)^2+(m'*Gamma')^2) +
+C...I1/I7*c7*tau/(1.-tau), and
+C...c1 + c2 + c3 + c4 + c5 + c6 + c7 = 1.
+ ELSEIF(ISTSB.GE.1.AND.ISTSB.LE.5) THEN
+ CALL PYKLIM(1)
+ IF(MINT(51).NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ RTAU=PYR(0)
+ MTAU=1
+ IF(RTAU.GT.COEF(ISUB,1)) MTAU=2
+ IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)) MTAU=3
+ IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)) MTAU=4
+ IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4))
+ & MTAU=5
+ IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4)+
+ & COEF(ISUB,5)) MTAU=6
+ IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4)+
+ & COEF(ISUB,5)+COEF(ISUB,6)) MTAU=7
+ CALL PYKMAP(1,MTAU,PYR(0))
+
+C...2 -> 3, 4 processes:
+C...Choose tau' according to h4(tau,tau')/tau', where
+C...h4(tau,tau') = c1 + I1/I2*c2*(1 - tau/tau')^3/tau' +
+C...I1/I3*c3*1/(1 - tau'), and c1 + c2 + c3 = 1.
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
+ CALL PYKLIM(4)
+ IF(MINT(51).NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ RTAUP=PYR(0)
+ MTAUP=1
+ IF(RTAUP.GT.COEF(ISUB,18)) MTAUP=2
+ IF(RTAUP.GT.COEF(ISUB,18)+COEF(ISUB,19)) MTAUP=3
+ CALL PYKMAP(4,MTAUP,PYR(0))
+ ENDIF
+
+C...Choose y* according to h2(y*), where
+C...h2(y*) = I0/I1*c1*(y*-y*min) + I0/I2*c2*(y*max-y*) +
+C...I0/I3*c3*1/cosh(y*) + I0/I4*c4*1/(1-exp(y*-y*max)) +
+C...I0/I5*c5*1/(1-exp(-y*-y*min)), I0 = y*max-y*min,
+C...and c1 + c2 + c3 + c4 + c5 = 1.
+ CALL PYKLIM(2)
+ IF(MINT(51).NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ RYST=PYR(0)
+ MYST=1
+ IF(RYST.GT.COEF(ISUB,8)) MYST=2
+ IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
+ IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)+COEF(ISUB,10)) MYST=4
+ IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)+COEF(ISUB,10)+
+ & COEF(ISUB,11)) MYST=5
+ CALL PYKMAP(2,MYST,PYR(0))
+
+C...2 -> 2 processes:
+C...Choose cos(theta-hat) (cth) according to h3(cth), where
+C...h3(cth) = c0 + I0/I1*c1*1/(A - cth) + I0/I2*c2*1/(A + cth) +
+C...I0/I3*c3*1/(A - cth)^2 + I0/I4*c4*1/(A + cth)^2,
+C...A = 1 + 2*(m3*m4/sh)^2 (= 1 for massless products),
+C...and c0 + c1 + c2 + c3 + c4 = 1.
+ CALL PYKLIM(3)
+ IF(MINT(51).NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
+ RCTH=PYR(0)
+ MCTH=1
+ IF(RCTH.GT.COEF(ISUB,13)) MCTH=2
+ IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)) MCTH=3
+ IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)+COEF(ISUB,15)) MCTH=4
+ IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)+COEF(ISUB,15)+
+ & COEF(ISUB,16)) MCTH=5
+ CALL PYKMAP(3,MCTH,PYR(0))
+ ENDIF
+
+C...2 -> 3 : select pT1, phi1, pT2, phi2, y3 for 3 outgoing.
+ IF(ISTSB.EQ.5) THEN
+ CALL PYKMAP(5,0,0D0)
+ IF(MINT(51).NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ ENDIF
+
+C...Low-pT or multiple interactions (first semihard interaction).
+ ELSEIF(ISTSB.EQ.9) THEN
+ CALL PYMULT(3)
+ ISUB=MINT(1)
+
+C...Generate user-defined process: kinematics plus weight.
+ ELSEIF(ISTSB.EQ.11) THEN
+ MSTI(51)=0
+ CALL PYUPEV(ISUB,SIGS)
+ IF(NUP.LE.0) THEN
+ MINT(51)=2
+ MSTI(51)=1
+ IF(MINT(82).EQ.1) THEN
+ NGEN(0,1)=NGEN(0,1)-1
+ NGEN(0,2)=NGEN(0,2)-1
+ NGEN(ISUB,1)=NGEN(ISUB,1)-1
+ ENDIF
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ RETURN
+ ENDIF
+
+C...Construct 'trivial' kinematical variables needed.
+ KFL1=KUP(1,2)
+ KFL2=KUP(2,2)
+ VINT(41)=2D0*PUP(1,4)/VINT(1)
+ VINT(42)=2D0*PUP(2,4)/VINT(1)
+ VINT(21)=VINT(41)*VINT(42)
+ VINT(22)=0.5D0*LOG(VINT(41)/VINT(42))
+ VINT(44)=VINT(21)*VINT(2)
+ VINT(43)=SQRT(MAX(0D0,VINT(44)))
+ VINT(56)=Q2UP(0)
+ VINT(55)=SQRT(MAX(0D0,VINT(56)))
+
+C...Construct other kinematical variables needed (approximately).
+ VINT(23)=0D0
+ VINT(26)=VINT(21)
+ VINT(45)=-0.5D0*VINT(44)
+ VINT(46)=-0.5D0*VINT(44)
+ VINT(49)=VINT(43)
+ VINT(50)=VINT(44)
+ VINT(51)=VINT(55)
+ VINT(52)=VINT(56)
+ VINT(53)=VINT(55)
+ VINT(54)=VINT(56)
+ VINT(25)=0D0
+ VINT(48)=0D0
+ DO 240 IUP=3,NUP
+ IF(KUP(IUP,1).EQ.1) VINT(25)=VINT(25)+2D0*(PUP(IUP,5)**2+
+ & PUP(IUP,1)**2+PUP(IUP,2)**2)/VINT(1)
+ IF(KUP(IUP,1).EQ.1) VINT(48)=VINT(48)+0.5D0*(PUP(IUP,1)**2+
+ & PUP(IUP,2)**2)
+ 240 CONTINUE
+ VINT(47)=SQRT(VINT(48))
+
+C...Calculate parton distribution weights.
+ IF(MINT(47).GE.2) THEN
+ DO 260 I=3-MIN(2,MINT(45)),MIN(2,MINT(46))
+ MINT(105)=MINT(102+I)
+ MINT(109)=MINT(106+I)
+ IF(MSTP(57).LE.1) THEN
+ CALL PYPDFU(MINT(10+I),VINT(40+I),Q2UP(0),XPQ)
+ ELSE
+ CALL PYPDFL(MINT(10+I),VINT(40+I),Q2UP(0),XPQ)
+ ENDIF
+ DO 250 KFL=-25,25
+ XSFX(I,KFL)=XPQ(KFL)
+ 250 CONTINUE
+ 260 CONTINUE
+ ENDIF
+ ENDIF
+
+C...Choose azimuthal angle.
+ VINT(24)=PARU(2)*PYR(0)
+
+C...Check against user cuts on kinematics at parton level.
+ MINT(51)=0
+ IF((ISUB.LE.90.OR.ISUB.GT.100).AND.ISTSB.LE.10) CALL PYKLIM(0)
+ IF(MINT(51).NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ IF(MINT(82).EQ.1.AND.MSTP(141).GE.1.AND.ISTSB.LE.10) THEN
+ MCUT=0
+ IF(MSUB(91)+MSUB(92)+MSUB(93)+MSUB(94)+MSUB(95).EQ.0)
+ & CALL PYKCUT(MCUT)
+ IF(MCUT.NE.0) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ ENDIF
+
+C...Calculate differential cross-section for different subprocesses.
+ IF(ISTSB.LE.10) CALL PYSIGH(NCHN,SIGS)
+ SIGSOR=SIGS
+ SIGLPT=SIGT(0,0,5)
+
+C...Multiply cross-section by user-defined weights.
+ IF(MSTP(173).EQ.1) THEN
+ SIGS=PARP(173)*SIGS
+ DO 270 ICHN=1,NCHN
+ SIGH(ICHN)=PARP(173)*SIGH(ICHN)
+ 270 CONTINUE
+ SIGLPT=PARP(173)*SIGLPT
+ ENDIF
+ WTXS=1D0
+ SIGSWT=SIGS
+ VINT(99)=1D0
+ VINT(100)=1D0
+ IF(MINT(82).EQ.1.AND.MSTP(142).GE.1) THEN
+ IF(ISUB.NE.96.AND.MSUB(91)+MSUB(92)+MSUB(93)+MSUB(94)+
+ & MSUB(95).EQ.0) CALL PYEVWT(WTXS)
+ SIGSWT=WTXS*SIGS
+ VINT(99)=WTXS
+ IF(MSTP(142).EQ.1) VINT(100)=1D0/WTXS
+ ENDIF
+
+C...Calculations for Monte Carlo estimate of all cross-sections.
+ IF(MINT(82).EQ.1.AND.ISUB.LE.90.OR.ISUB.GE.96) THEN
+ IF(MSTP(142).LE.1) THEN
+ XSEC(ISUB,2)=XSEC(ISUB,2)+SIGS
+ ELSE
+ XSEC(ISUB,2)=XSEC(ISUB,2)+SIGSWT
+ ENDIF
+ ELSEIF(MINT(82).EQ.1) THEN
+ XSEC(ISUB,2)=XSEC(ISUB,2)+SIGS
+ ENDIF
+ IF((ISUB.EQ.95.OR.ISUB.EQ.96).AND.LOOP.EQ.1.AND.MINT(82).EQ.1)
+ &XSEC(97,2)=XSEC(97,2)+SIGLPT
+
+C...Multiple interactions: store results of cross-section calculation.
+ IF(MINT(50).EQ.1.AND.MSTP(82).GE.3) THEN
+ VINT(153)=SIGSOR
+ CALL PYMULT(4)
+ ENDIF
+
+C...Check that weight not negative.
+ VIOL=SIGSWT/XSEC(ISUB,1)
+ IF(ISUB.EQ.96.AND.MSTP(173).EQ.1) VIOL=VIOL/PARP(174)
+ IF(MSTP(123).LE.0) THEN
+ IF(VIOL.LT.-1D-3) THEN
+ WRITE(MSTU(11),5000) VIOL,NGEN(0,3)+1
+ IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) ISUB,VINT(21),
+ & VINT(22),VINT(23),VINT(26)
+ STOP
+ ENDIF
+ ELSE
+ IF(VIOL.LT.MIN(-1D-3,VINT(109))) THEN
+ VINT(109)=VIOL
+ WRITE(MSTU(11),5200) VIOL,NGEN(0,3)+1
+ IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) ISUB,VINT(21),
+ & VINT(22),VINT(23),VINT(26)
+ ENDIF
+ ENDIF
+
+C...Weighting using estimate of maximum of differential cross-section.
+ IF(MFAIL.EQ.0) THEN
+ IF(VIOL.LT.PYR(0)) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ GOTO 100
+ ENDIF
+ ELSEIF(ISUB.NE.95.AND.ISUB.NE.96) THEN
+ IF(VIOL.LT.PYR(0)) THEN
+ MSTI(61)=1
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ RETURN
+ ENDIF
+ ELSE
+ RATND=SIGLPT/XSEC(95,1)
+ IF(LOOP.EQ.1.AND.RATND.LT.PYR(0)) THEN
+ MSTI(61)=1
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ RETURN
+ ENDIF
+ VIOL=VIOL/RATND
+ IF(VIOL.LT.PYR(0)) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ GOTO 100
+ ENDIF
+ ENDIF
+
+C...Check for possible violation of estimated maximum of differential
+C...cross-section used in weighting.
+ IF(MSTP(123).LE.0) THEN
+ IF(VIOL.GT.1D0) THEN
+ WRITE(MSTU(11),5300) VIOL,NGEN(0,3)+1
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
+ & VINT(22),VINT(23),VINT(26)
+ STOP
+ ENDIF
+ ELSEIF(MSTP(123).EQ.1) THEN
+ IF(VIOL.GT.VINT(108)) THEN
+ VINT(108)=VIOL
+ IF(VIOL.GT.1D0) THEN
+ MINT(10)=1
+ WRITE(MSTU(11),5400) VIOL,NGEN(0,3)+1
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
+ & VINT(22),VINT(23),VINT(26)
+ ENDIF
+ ENDIF
+ ELSEIF(VIOL.GT.VINT(108)) THEN
+ VINT(108)=VIOL
+ IF(VIOL.GT.1D0) THEN
+ MINT(10)=1
+ XDIF=XSEC(ISUB,1)*(VIOL-1D0)
+ XSEC(ISUB,1)=XSEC(ISUB,1)+XDIF
+ IF(MSUB(ISUB).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GT.96))
+ & XSEC(0,1)=XSEC(0,1)+XDIF
+ WRITE(MSTU(11),5400) VIOL,NGEN(0,3)+1
+ IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
+ & VINT(22),VINT(23),VINT(26)
+ IF(ISUB.LE.9) THEN
+ WRITE(MSTU(11),5500) ISUB,XSEC(ISUB,1)
+ ELSEIF(ISUB.LE.99) THEN
+ WRITE(MSTU(11),5600) ISUB,XSEC(ISUB,1)
+ ELSE
+ WRITE(MSTU(11),5700) ISUB,XSEC(ISUB,1)
+ ENDIF
+ VINT(108)=1D0
+ ENDIF
+ ENDIF
+
+C...Multiple interactions: choose impact parameter.
+ VINT(148)=1D0
+ IF(MINT(50).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GE.96).AND.
+ &MSTP(82).GE.3) THEN
+ CALL PYMULT(5)
+ IF(VINT(150).LT.PYR(0)) THEN
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+ IF(MFAIL.EQ.1) THEN
+ MSTI(61)=1
+ RETURN
+ ENDIF
+ GOTO 100
+ ENDIF
+ ENDIF
+ IF(MINT(82).EQ.1) NGEN(0,2)=NGEN(0,2)+1
+ IF(MINT(82).EQ.1.AND.MSUB(95).EQ.1) THEN
+ IF(ISUB.LE.90.OR.ISUB.GE.95) NGEN(95,1)=NGEN(95,1)+1
+ IF(ISUB.LE.90.OR.ISUB.GE.96) NGEN(96,2)=NGEN(96,2)+1
+ ENDIF
+ IF(ISUB.LE.90.OR.ISUB.GE.96) MINT(31)=MINT(31)+1
+
+C...Choose flavour of reacting partons (and subprocess).
+ IF(ISTSB.GE.11) GOTO 290
+ RSIGS=SIGS*PYR(0)
+ QT2=VINT(48)
+ RQQBAR=PARP(87)*(1D0-(QT2/(QT2+(PARP(88)*PARP(82))**2))**2)
+ IF(ISUB.NE.95.AND.(ISUB.NE.96.OR.MSTP(82).LE.1.OR.
+ &PYR(0).GT.RQQBAR)) THEN
+ DO 280 ICHN=1,NCHN
+ KFL1=ISIG(ICHN,1)
+ KFL2=ISIG(ICHN,2)
+ MINT(2)=ISIG(ICHN,3)
+ RSIGS=RSIGS-SIGH(ICHN)
+ IF(RSIGS.LE.0D0) GOTO 290
+ 280 CONTINUE
+
+C...Multiple interactions: choose qqbar preferentially at small pT.
+ ELSEIF(ISUB.EQ.96) THEN
+ MINT(105)=MINT(103)
+ MINT(109)=MINT(107)
+ CALL PYSPLI(MINT(11),21,KFL1,KFLDUM)
+ MINT(105)=MINT(104)
+ MINT(109)=MINT(108)
+ CALL PYSPLI(MINT(12),21,KFL2,KFLDUM)
+ MINT(1)=11
+ MINT(2)=1
+ IF(KFL1.EQ.KFL2.AND.PYR(0).LT.0.5D0) MINT(2)=2
+
+C...Low-pT: choose string drawing configuration.
+ ELSE
+ KFL1=21
+ KFL2=21
+ RSIGS=6D0*PYR(0)
+ MINT(2)=1
+ IF(RSIGS.GT.1D0) MINT(2)=2
+ IF(RSIGS.GT.2D0) MINT(2)=3
+ ENDIF
+
+C...Reassign QCD process. Partons before initial state radiation.
+ 290 IF(MINT(2).GT.10) THEN
+ MINT(1)=MINT(2)/10
+ MINT(2)=MOD(MINT(2),10)
+ ENDIF
+ IF(MINT(82).EQ.1.AND.MSTP(111).GE.0) NGEN(MINT(1),2)=
+ &NGEN(MINT(1),2)+1
+ MINT(15)=KFL1
+ MINT(16)=KFL2
+ MINT(13)=MINT(15)
+ MINT(14)=MINT(16)
+ VINT(141)=VINT(41)
+ VINT(142)=VINT(42)
+ VINT(151)=0D0
+ VINT(152)=0D0
+
+C...Calculate x value of photon for parton inside photon inside e.
+ DO 320 JT=1,2
+ MINT(18+JT)=0
+ VINT(154+JT)=0D0
+ MSPLI=0
+ IF(JT.EQ.1.AND.MINT(43).LE.2) MSPLI=1
+ IF(JT.EQ.2.AND.MOD(MINT(43),2).EQ.1) MSPLI=1
+ IF(IABS(MINT(14+JT)).LE.8.OR.MINT(14+JT).EQ.21) MSPLI=MSPLI+1
+ IF(MSPLI.EQ.2) THEN
+ KFLH=MINT(14+JT)
+ XHRD=VINT(140+JT)
+ Q2HRD=VINT(54)
+ MINT(105)=MINT(102+JT)
+ MINT(109)=MINT(106+JT)
+ IF(MSTP(57).LE.1) THEN
+ CALL PYPDFU(22,XHRD,Q2HRD,XPQ)
+ ELSE
+ CALL PYPDFL(22,XHRD,Q2HRD,XPQ)
+ ENDIF
+ WTMX=4D0*XPQ(KFLH)
+ IF(MSTP(13).EQ.2) THEN
+ Q2PMS=Q2HRD/PMAS(11,1)**2
+ WTMX=WTMX*LOG(MAX(2D0,Q2PMS*(1D0-XHRD)/XHRD**2))
+ ENDIF
+ 300 XE=XHRD**PYR(0)
+ XG=MIN(0.999999D0,XHRD/XE)
+ IF(MSTP(57).LE.1) THEN
+ CALL PYPDFU(22,XG,Q2HRD,XPQ)
+ ELSE
+ CALL PYPDFL(22,XG,Q2HRD,XPQ)
+ ENDIF
+ WT=(1D0+(1D0-XE)**2)*XPQ(KFLH)
+ IF(MSTP(13).EQ.2) WT=WT*LOG(MAX(2D0,Q2PMS*(1D0-XE)/XE**2))
+ IF(WT.LT.PYR(0)*WTMX) GOTO 300
+ MINT(18+JT)=1
+ VINT(154+JT)=XE
+ DO 310 KFLS=-25,25
+ XSFX(JT,KFLS)=XPQ(KFLS)
+ 310 CONTINUE
+ ENDIF
+ 320 CONTINUE
+
+C...Pick scale where photon is resolved.
+ IF(MINT(107).EQ.3) VINT(283)=PARP(15)**2*
+ &(VINT(54)/PARP(15)**2)**PYR(0)
+ IF(MINT(108).EQ.3) VINT(284)=PARP(15)**2*
+ &(VINT(54)/PARP(15)**2)**PYR(0)
+ IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
+
+C...Format statements for differential cross-section maximum violations.
+ 5000 FORMAT(/1X,'Error: negative cross-section fraction',1P,D11.3,1X,
+ &'in event',1X,I7,'D0'/1X,'Execution stopped!')
+ 5100 FORMAT(1X,'ISUB = ',I3,'; Point of violation:'/1X,'tau =',1P,
+ &D11.3,', y* =',D11.3,', cthe = ',0P,F11.7,', tau'' =',1P,D11.3)
+ 5200 FORMAT(/1X,'Warning: negative cross-section fraction',1P,D11.3,1X,
+ &'in event',1X,I7)
+ 5300 FORMAT(/1X,'Error: maximum violated by',1P,D11.3,1X,
+ &'in event',1X,I7,'D0'/1X,'Execution stopped!')
+ 5400 FORMAT(/1X,'Advisory warning: maximum violated by',1P,D11.3,1X,
+ &'in event',1X,I7)
+ 5500 FORMAT(1X,'XSEC(',I1,',1) increased to',1P,D11.3)
+ 5600 FORMAT(1X,'XSEC(',I2,',1) increased to',1P,D11.3)
+ 5700 FORMAT(1X,'XSEC(',I3,',1) increased to',1P,D11.3)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSCAT
+C...Finds outgoing flavours and event type; sets up the kinematics
+C...and colour flow of the hard scattering
+
+ SUBROUTINE PYSCAT
+
+C...Double precision and integer declarations
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
+ &/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYUPPR/,/PYSSMT/
+C...Local arrays and saved variables
+ DIMENSION WDTP(0:200),WDTE(0:200,0:5),PMQ(2),Z(2),CTHE(2),
+ &PHI(2),KUPPO(20),VINTSV(41:66)
+ SAVE VINTSV
+
+C...Read out process
+ ISUB=MINT(1)
+ ISUBSV=ISUB
+
+C...Restore information for low-pT processes
+ IF(ISUB.EQ.95.AND.MINT(57).GE.1) THEN
+ DO 100 J=41,66
+ 100 VINT(J)=VINTSV(J)
+ ENDIF
+
+C...Convert H' or A process into equivalent H one
+ IHIGG=1
+ KFHIGG=25
+ IF((ISUB.GE.151.AND.ISUB.LE.160).OR.(ISUB.GE.171.AND.
+ &ISUB.LE.190)) THEN
+ IHIGG=2
+ IF(MOD(ISUB-1,10).GE.5) IHIGG=3
+ KFHIGG=33+IHIGG
+ IF(ISUB.EQ.151.OR.ISUB.EQ.156) ISUB=3
+ IF(ISUB.EQ.152.OR.ISUB.EQ.157) ISUB=102
+ IF(ISUB.EQ.153.OR.ISUB.EQ.158) ISUB=103
+ IF(ISUB.EQ.171.OR.ISUB.EQ.176) ISUB=24
+ IF(ISUB.EQ.172.OR.ISUB.EQ.177) ISUB=26
+ IF(ISUB.EQ.173.OR.ISUB.EQ.178) ISUB=123
+ IF(ISUB.EQ.174.OR.ISUB.EQ.179) ISUB=124
+ IF(ISUB.EQ.181.OR.ISUB.EQ.186) ISUB=121
+ IF(ISUB.EQ.182.OR.ISUB.EQ.187) ISUB=122
+ ENDIF
+
+C...Choice of subprocess, number of documentation lines
+ IDOC=6+ISET(ISUB)
+ IF(ISUB.EQ.95) IDOC=8
+ IF(ISET(ISUB).EQ.5) IDOC=9
+ IF(ISET(ISUB).EQ.11) IDOC=4+NUP
+ MINT(3)=IDOC-6
+ IF(IDOC.GE.9.AND.ISET(ISUB).LE.4) IDOC=IDOC+2
+ MINT(4)=IDOC
+ IPU1=MINT(84)+1
+ IPU2=MINT(84)+2
+ IPU3=MINT(84)+3
+ IPU4=MINT(84)+4
+ IPU5=MINT(84)+5
+ IPU6=MINT(84)+6
+
+C...Reset K, P and V vectors. Store incoming particles
+ DO 120 JT=1,MSTP(126)+20
+ I=MINT(83)+JT
+ DO 110 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 110 CONTINUE
+ 120 CONTINUE
+ DO 140 JT=1,2
+ I=MINT(83)+JT
+ K(I,1)=21
+ K(I,2)=MINT(10+JT)
+ DO 130 J=1,5
+ P(I,J)=VINT(285+5*JT+J)
+ 130 CONTINUE
+ 140 CONTINUE
+ MINT(6)=2
+ KFRES=0
+
+C...Store incoming partons in their CM-frame
+ SH=VINT(44)
+ SHR=SQRT(SH)
+ SHP=VINT(26)*VINT(2)
+ SHPR=SQRT(SHP)
+ SHUSER=SHR
+ IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) SHUSER=SHPR
+ DO 150 JT=1,2
+ I=MINT(84)+JT
+ K(I,1)=14
+ K(I,2)=MINT(14+JT)
+ K(I,3)=MINT(83)+2+JT
+ P(I,3)=0.5D0*SHUSER*(-1D0)**(JT-1)
+ P(I,4)=0.5D0*SHUSER
+ 150 CONTINUE
+
+C...Copy incoming partons to documentation lines
+ DO 170 JT=1,2
+ I1=MINT(83)+4+JT
+ I2=MINT(84)+JT
+ K(I1,1)=21
+ K(I1,2)=K(I2,2)
+ K(I1,3)=I1-2
+ DO 160 J=1,5
+ P(I1,J)=P(I2,J)
+ 160 CONTINUE
+ 170 CONTINUE
+
+C...Choose new quark/lepton flavour for relevant annihilation graphs
+ IF(ISUB.EQ.12.OR.ISUB.EQ.53.OR.ISUB.EQ.54.OR.ISUB.EQ.58) THEN
+ IGLGA=21
+ IF(ISUB.EQ.58) IGLGA=22
+ CALL PYWIDT(IGLGA,SH,WDTP,WDTE)
+ 180 RKFL=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))*PYR(0)
+ DO 190 I=1,MDCY(IGLGA,3)
+ KFLF=KFDP(I+MDCY(IGLGA,2)-1,1)
+ RKFL=RKFL-(WDTE(I,1)+WDTE(I,2)+WDTE(I,4))
+ IF(RKFL.LE.0D0) GOTO 200
+ 190 CONTINUE
+ 200 CONTINUE
+ IF(ISUB.EQ.12.AND.MSTP(5).EQ.1.AND.IABS(MINT(15)).LE.2.AND.
+ & IABS(KFLF).GE.3) THEN
+ FACQQB=VINT(58)**2*4D0/9D0*(VINT(45)**2+VINT(46)**2)/
+ & VINT(44)**2
+ FACCIB=VINT(46)**2/PARU(155)**4
+ IF(FACQQB/(FACQQB+FACCIB).LT.PYR(0)) GOTO 180
+ ELSEIF(ISUB.EQ.54) THEN
+ IF((KCHG(PYCOMP(KFLF),1)/2D0)**2.LT.PYR(0)) GOTO 180
+ ELSEIF(ISUB.EQ.58) THEN
+ IF((KCHG(PYCOMP(KFLF),1)/3D0)**2.LT.PYR(0)) GOTO 180
+ ENDIF
+ ENDIF
+
+C...Final state flavours and colour flow: default values
+ JS=1
+ MINT(21)=MINT(15)
+ MINT(22)=MINT(16)
+ MINT(23)=0
+ MINT(24)=0
+ KCC=20
+ KCS=ISIGN(1,MINT(15))
+
+ IF(ISET(ISUB).EQ.11) THEN
+C...User-defined processes: find products
+ IRUP=0
+ DO 210 IUP=3,NUP
+ IF(KUP(IUP,1).NE.1) THEN
+ ELSEIF(IRUP.LE.5) THEN
+ IRUP=IRUP+1
+ MINT(20+IRUP)=KUP(IUP,2)
+ ENDIF
+ 210 CONTINUE
+
+ ELSEIF(ISUB.LE.10) THEN
+ IF(ISUB.EQ.1) THEN
+C...f + fbar -> gamma*/Z0
+ KFRES=23
+
+ ELSEIF(ISUB.EQ.2) THEN
+C...f + fbar' -> W+/-
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ KFRES=ISIGN(24,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.3) THEN
+C...f + fbar -> h0 (or H0, or A0)
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.4) THEN
+C...gamma + W+/- -> W+/-
+
+ ELSEIF(ISUB.EQ.5) THEN
+C...Z0 + Z0 -> h0
+ XH=SH/SHP
+ MINT(21)=MINT(15)
+ MINT(22)=MINT(16)
+ PMQ(1)=PYMASS(MINT(21))
+ PMQ(2)=PYMASS(MINT(22))
+ 220 JT=INT(1.5D0+PYR(0))
+ ZMIN=2D0*PMQ(JT)/SHPR
+ ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
+ & (SHPR*(SHPR-PMQ(3-JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
+ IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
+ & (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 220
+ SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 220
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
+ CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
+ Z(3-JT)=1D0-XH/(1D0-Z(JT))
+ SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 220
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
+ CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
+ PHIR=PARU(2)*PYR(0)
+ CPHI=COS(PHIR)
+ ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
+ & SQRT(1D0-CTHE(2)**2)*CPHI
+ Z1=2D0-Z(JT)
+ Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
+ Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
+ Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
+ & PMQ(3-JT)**2/SHP))
+ ZMIN=2D0*PMQ(3-JT)/SHPR
+ ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 220
+ KCC=22
+ KFRES=25
+
+ ELSEIF(ISUB.EQ.6) THEN
+C...Z0 + W+/- -> W+/-
+
+ ELSEIF(ISUB.EQ.7) THEN
+C...W+ + W- -> Z0
+
+ ELSEIF(ISUB.EQ.8) THEN
+C...W+ + W- -> h0
+ XH=SH/SHP
+ 230 DO 260 JT=1,2
+ I=MINT(14+JT)
+ IA=IABS(I)
+ IF(IA.LE.10) THEN
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 240 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 240
+ MINT(20+JT)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 250
+ 240 CONTINUE
+ ELSE
+ IB=2*((IA+1)/2)-1+MOD(IA,2)
+ MINT(20+JT)=ISIGN(IB,I)
+ ENDIF
+ 250 PMQ(JT)=PYMASS(MINT(20+JT))
+ 260 CONTINUE
+ JT=INT(1.5D0+PYR(0))
+ ZMIN=2D0*PMQ(JT)/SHPR
+ ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
+ & (SHPR*(SHPR-PMQ(3-JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(ZMIN.GE.ZMAX) GOTO 230
+ Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
+ IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
+ & (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 230
+ SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 230
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(24,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
+ CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
+ Z(3-JT)=1D0-XH/(1D0-Z(JT))
+ SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 230
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(24,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
+ CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
+ PHIR=PARU(2)*PYR(0)
+ CPHI=COS(PHIR)
+ ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
+ & SQRT(1D0-CTHE(2)**2)*CPHI
+ Z1=2D0-Z(JT)
+ Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
+ Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
+ Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
+ & PMQ(3-JT)**2/SHP))
+ ZMIN=2D0*PMQ(3-JT)/SHPR
+ ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 230
+ KCC=22
+ KFRES=25
+
+ ELSEIF(ISUB.EQ.10) THEN
+C...f + f' -> f + f' (gamma/Z/W exchange); th = (p(f)-p(f))**2
+ IF(MINT(2).EQ.1) THEN
+ KCC=22
+ ELSE
+C...W exchange: need to mix flavours according to CKM matrix
+ DO 280 JT=1,2
+ I=MINT(14+JT)
+ IA=IABS(I)
+ IF(IA.LE.10) THEN
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 270 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 270
+ MINT(20+JT)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 280
+ 270 CONTINUE
+ ELSE
+ IB=2*((IA+1)/2)-1+MOD(IA,2)
+ MINT(20+JT)=ISIGN(IB,I)
+ ENDIF
+ 280 CONTINUE
+ KCC=22
+ ENDIF
+ ENDIF
+
+ ELSEIF(ISUB.LE.20) THEN
+ IF(ISUB.EQ.11) THEN
+C...f + f' -> f + f' (g exchange); th = (p(f)-p(f))**2
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+
+ ELSEIF(ISUB.EQ.12) THEN
+C...f + fbar -> f' + fbar'; th = (p(f)-p(f'))**2
+ MINT(21)=ISIGN(KFLF,MINT(15))
+ MINT(22)=-MINT(21)
+ KCC=4
+
+ ELSEIF(ISUB.EQ.13) THEN
+C...f + fbar -> g + g; th arbitrary
+ MINT(21)=21
+ MINT(22)=21
+ KCC=MINT(2)+4
+
+ ELSEIF(ISUB.EQ.14) THEN
+C...f + fbar -> g + gamma; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=21
+ MINT(23-JS)=22
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.15) THEN
+C...f + fbar -> g + Z0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=21
+ MINT(23-JS)=23
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.16) THEN
+C...f + fbar' -> g + W+/-; th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
+ MINT(20+JS)=21
+ MINT(23-JS)=ISIGN(24,KCH1+KCH2)
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.17) THEN
+C...f + fbar -> g + h0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=21
+ MINT(23-JS)=25
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.18) THEN
+C...f + fbar -> gamma + gamma; th arbitrary
+ MINT(21)=22
+ MINT(22)=22
+
+ ELSEIF(ISUB.EQ.19) THEN
+C...f + fbar -> gamma + Z0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=22
+ MINT(23-JS)=23
+
+ ELSEIF(ISUB.EQ.20) THEN
+C...f + fbar' -> gamma + W+/-; th = (p(f)-p(W-))**2 or
+C...(p(fbar')-p(W+))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
+ MINT(20+JS)=22
+ MINT(23-JS)=ISIGN(24,KCH1+KCH2)
+ ENDIF
+
+ ELSEIF(ISUB.LE.30) THEN
+ IF(ISUB.EQ.21) THEN
+C...f + fbar -> gamma + h0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=22
+ MINT(23-JS)=25
+
+ ELSEIF(ISUB.EQ.22) THEN
+C...f + fbar -> Z0 + Z0; th arbitrary
+ MINT(21)=23
+ MINT(22)=23
+
+ ELSEIF(ISUB.EQ.23) THEN
+C...f + fbar' -> Z0 + W+/-; th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
+ MINT(20+JS)=23
+ MINT(23-JS)=ISIGN(24,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.24) THEN
+C...f + fbar -> Z0 + h0 (or H0, or A0); th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=23
+ MINT(23-JS)=KFHIGG
+
+ ELSEIF(ISUB.EQ.25) THEN
+C...f + fbar -> W+ + W-; th = (p(f)-p(W-))**2
+ MINT(21)=-ISIGN(24,MINT(15))
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.26) THEN
+C...f + fbar' -> W+/- + h0 (or H0, or A0);
+C...th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
+ MINT(20+JS)=ISIGN(24,KCH1+KCH2)
+ MINT(23-JS)=KFHIGG
+
+ ELSEIF(ISUB.EQ.27) THEN
+C...f + fbar -> h0 + h0
+
+ ELSEIF(ISUB.EQ.28) THEN
+C...f + g -> f + g; th = (p(f)-p(f))**2
+ KCC=MINT(2)+6
+ IF(MINT(15).EQ.21) KCC=KCC+2
+ IF(MINT(15).NE.21) KCS=ISIGN(1,MINT(15))
+ IF(MINT(16).NE.21) KCS=ISIGN(1,MINT(16))
+
+ ELSEIF(ISUB.EQ.29) THEN
+C...f + g -> f + gamma; th = (p(f)-p(f))**2
+ IF(MINT(15).EQ.21) JS=2
+ MINT(23-JS)=22
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.30) THEN
+C...f + g -> f + Z0; th = (p(f)-p(f))**2
+ IF(MINT(15).EQ.21) JS=2
+ MINT(23-JS)=23
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+ ENDIF
+
+ ELSEIF(ISUB.LE.40) THEN
+ IF(ISUB.EQ.31) THEN
+C...f + g -> f' + W+/-; th = (p(f)-p(f'))**2; choose flavour f'
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(23-JS)=ISIGN(24,KCHG(IA,1)*I)
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 290 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 290
+ MINT(20+JS)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 300
+ 290 CONTINUE
+ 300 KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.32) THEN
+C...f + g -> f + h0; th = (p(f)-p(f))**2
+ IF(MINT(15).EQ.21) JS=2
+ MINT(23-JS)=25
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.33) THEN
+C...f + gamma -> f + g; th=(p(f)-p(f))**2
+ IF(MINT(15).EQ.22) JS=2
+ MINT(23-JS)=21
+ KCC=24+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.34) THEN
+C...f + gamma -> f + gamma; th=(p(f)-p(f))**2
+ IF(MINT(15).EQ.22) JS=2
+ KCC=22
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.35) THEN
+C...f + gamma -> f + Z0; th=(p(f)-p(f))**2
+ IF(MINT(15).EQ.22) JS=2
+ MINT(23-JS)=23
+ KCC=22
+
+ ELSEIF(ISUB.EQ.36) THEN
+C...f + gamma -> f' + W+/-; th=(p(f)-p(f'))**2
+ IF(MINT(15).EQ.22) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(23-JS)=ISIGN(24,KCHG(IA,1)*I)
+ IF(IA.LE.10) THEN
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 310 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 310
+ MINT(20+JS)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 320
+ 310 CONTINUE
+ ELSE
+ IB=2*((IA+1)/2)-1+MOD(IA,2)
+ MINT(20+JS)=ISIGN(IB,I)
+ ENDIF
+ 320 KCC=22
+
+ ELSEIF(ISUB.EQ.37) THEN
+C...f + gamma -> f + h0
+
+ ELSEIF(ISUB.EQ.38) THEN
+C...f + Z0 -> f + g
+
+ ELSEIF(ISUB.EQ.39) THEN
+C...f + Z0 -> f + gamma
+
+ ELSEIF(ISUB.EQ.40) THEN
+C...f + Z0 -> f + Z0
+ ENDIF
+
+ ELSEIF(ISUB.LE.50) THEN
+ IF(ISUB.EQ.41) THEN
+C...f + Z0 -> f' + W+/-
+
+ ELSEIF(ISUB.EQ.42) THEN
+C...f + Z0 -> f + h0
+
+ ELSEIF(ISUB.EQ.43) THEN
+C...f + W+/- -> f' + g
+
+ ELSEIF(ISUB.EQ.44) THEN
+C...f + W+/- -> f' + gamma
+
+ ELSEIF(ISUB.EQ.45) THEN
+C...f + W+/- -> f' + Z0
+
+ ELSEIF(ISUB.EQ.46) THEN
+C...f + W+/- -> f' + W+/-
+
+ ELSEIF(ISUB.EQ.47) THEN
+C...f + W+/- -> f' + h0
+
+ ELSEIF(ISUB.EQ.48) THEN
+C...f + h0 -> f + g
+
+ ELSEIF(ISUB.EQ.49) THEN
+C...f + h0 -> f + gamma
+
+ ELSEIF(ISUB.EQ.50) THEN
+C...f + h0 -> f + Z0
+ ENDIF
+
+ ELSEIF(ISUB.LE.60) THEN
+ IF(ISUB.EQ.51) THEN
+C...f + h0 -> f' + W+/-
+
+ ELSEIF(ISUB.EQ.52) THEN
+C...f + h0 -> f + h0
+
+ ELSEIF(ISUB.EQ.53) THEN
+C...g + g -> f + fbar; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFLF,KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+
+ ELSEIF(ISUB.EQ.54) THEN
+C...g + gamma -> f + fbar; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFLF,KCS)
+ MINT(22)=-MINT(21)
+ KCC=27
+ IF(MINT(16).EQ.21) KCC=28
+
+ ELSEIF(ISUB.EQ.55) THEN
+C...g + Z0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.56) THEN
+C...g + W+/- -> f + fbar'
+
+ ELSEIF(ISUB.EQ.57) THEN
+C...g + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.58) THEN
+C...gamma + gamma -> f + fbar; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFLF,KCS)
+ MINT(22)=-MINT(21)
+ KCC=21
+
+ ELSEIF(ISUB.EQ.59) THEN
+C...gamma + Z0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.60) THEN
+C...gamma + W+/- -> f + fbar'
+ ENDIF
+
+ ELSEIF(ISUB.LE.70) THEN
+ IF(ISUB.EQ.61) THEN
+C...gamma + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.62) THEN
+C...Z0 + Z0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.63) THEN
+C...Z0 + W+/- -> f + fbar'
+
+ ELSEIF(ISUB.EQ.64) THEN
+C...Z0 + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.65) THEN
+C...W+ + W- -> f + fbar
+
+ ELSEIF(ISUB.EQ.66) THEN
+C...W+/- + h0 -> f + fbar'
+
+ ELSEIF(ISUB.EQ.67) THEN
+C...h0 + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.68) THEN
+C...g + g -> g + g; th arbitrary
+ KCC=MINT(2)+12
+ KCS=(-1)**INT(1.5D0+PYR(0))
+
+ ELSEIF(ISUB.EQ.69) THEN
+C...gamma + gamma -> W+ + W-; th arbitrary
+ MINT(21)=24
+ MINT(22)=-24
+ KCC=21
+
+ ELSEIF(ISUB.EQ.70) THEN
+C...gamma + W+/- -> Z0 + W+/-; th=(p(W)-p(W))**2
+ IF(MINT(15).EQ.22) MINT(21)=23
+ IF(MINT(16).EQ.22) MINT(22)=23
+ KCC=21
+ ENDIF
+
+ ELSEIF(ISUB.LE.80) THEN
+ IF(ISUB.EQ.71.OR.ISUB.EQ.72) THEN
+C...Z0 + Z0 -> Z0 + Z0; Z0 + Z0 -> W+ + W-
+ XH=SH/SHP
+ MINT(21)=MINT(15)
+ MINT(22)=MINT(16)
+ PMQ(1)=PYMASS(MINT(21))
+ PMQ(2)=PYMASS(MINT(22))
+ 330 JT=INT(1.5D0+PYR(0))
+ ZMIN=2D0*PMQ(JT)/SHPR
+ ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
+ & (SHPR*(SHPR-PMQ(3-JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
+ IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
+ & (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 330
+ SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 330
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
+ CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
+ Z(3-JT)=1D0-XH/(1D0-Z(JT))
+ SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 330
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
+ CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
+ PHIR=PARU(2)*PYR(0)
+ CPHI=COS(PHIR)
+ ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
+ & SQRT(1D0-CTHE(2)**2)*CPHI
+ Z1=2D0-Z(JT)
+ Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
+ Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
+ Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
+ & PMQ(3-JT)**2/SHP))
+ ZMIN=2D0*PMQ(3-JT)/SHPR
+ ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 330
+ KCC=22
+
+ ELSEIF(ISUB.EQ.73) THEN
+C...Z0 + W+/- -> Z0 + W+/-
+ JS=MINT(2)
+ XH=SH/SHP
+ 340 JT=3-MINT(2)
+ I=MINT(14+JT)
+ IA=IABS(I)
+ IF(IA.LE.10) THEN
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 350 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 350
+ MINT(20+JT)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 360
+ 350 CONTINUE
+ ELSE
+ IB=2*((IA+1)/2)-1+MOD(IA,2)
+ MINT(20+JT)=ISIGN(IB,I)
+ ENDIF
+ 360 PMQ(JT)=PYMASS(MINT(20+JT))
+ MINT(23-JT)=MINT(17-JT)
+ PMQ(3-JT)=PYMASS(MINT(23-JT))
+ JT=INT(1.5D0+PYR(0))
+ ZMIN=2D0*PMQ(JT)/SHPR
+ ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
+ & (SHPR*(SHPR-PMQ(3-JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(ZMIN.GE.ZMAX) GOTO 340
+ Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
+ IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
+ & (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 340
+ SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 340
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
+ CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
+ Z(3-JT)=1D0-XH/(1D0-Z(JT))
+ SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 340
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
+ CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
+ PHIR=PARU(2)*PYR(0)
+ CPHI=COS(PHIR)
+ ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
+ & SQRT(1D0-CTHE(2)**2)*CPHI
+ Z1=2D0-Z(JT)
+ Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
+ Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
+ Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
+ & PMQ(3-JT)**2/SHP))
+ ZMIN=2D0*PMQ(3-JT)/SHPR
+ ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 340
+ KCC=22
+
+ ELSEIF(ISUB.EQ.74) THEN
+C...Z0 + h0 -> Z0 + h0
+
+ ELSEIF(ISUB.EQ.75) THEN
+C...W+ + W- -> gamma + gamma
+
+ ELSEIF(ISUB.EQ.76.OR.ISUB.EQ.77) THEN
+C...W+ + W- -> Z0 + Z0; W+ + W- -> W+ + W-
+ XH=SH/SHP
+ 370 DO 400 JT=1,2
+ I=MINT(14+JT)
+ IA=IABS(I)
+ IF(IA.LE.10) THEN
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 380 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 380
+ MINT(20+JT)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 390
+ 380 CONTINUE
+ ELSE
+ IB=2*((IA+1)/2)-1+MOD(IA,2)
+ MINT(20+JT)=ISIGN(IB,I)
+ ENDIF
+ 390 PMQ(JT)=PYMASS(MINT(20+JT))
+ 400 CONTINUE
+ JT=INT(1.5D0+PYR(0))
+ ZMIN=2D0*PMQ(JT)/SHPR
+ ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
+ & (SHPR*(SHPR-PMQ(3-JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(ZMIN.GE.ZMAX) GOTO 370
+ Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
+ IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
+ & (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 370
+ SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 370
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(24,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
+ CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
+ Z(3-JT)=1D0-XH/(1D0-Z(JT))
+ SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
+ IF(SQC1.LT.1.D-8) GOTO 370
+ C1=SQRT(SQC1)
+ C2=1D0+2D0*(PMAS(24,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
+ CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
+ CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
+ PHIR=PARU(2)*PYR(0)
+ CPHI=COS(PHIR)
+ ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
+ & SQRT(1D0-CTHE(2)**2)*CPHI
+ Z1=2D0-Z(JT)
+ Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
+ Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
+ Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
+ & PMQ(3-JT)**2/SHP))
+ ZMIN=2D0*PMQ(3-JT)/SHPR
+ ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
+ ZMAX=MIN(1D0-XH,ZMAX)
+ IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 370
+ KCC=22
+
+ ELSEIF(ISUB.EQ.78) THEN
+C...W+/- + h0 -> W+/- + h0
+
+ ELSEIF(ISUB.EQ.79) THEN
+C...h0 + h0 -> h0 + h0
+
+ ELSEIF(ISUB.EQ.80) THEN
+C...q + gamma -> q' + pi+/-; th=(p(q)-p(q'))**2
+ IF(MINT(15).EQ.22) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(23-JS)=ISIGN(211,KCHG(IA,1)*I)
+ IB=3-IA
+ MINT(20+JS)=ISIGN(IB,I)
+ KCC=22
+ ENDIF
+
+ ELSEIF(ISUB.LE.90) THEN
+ IF(ISUB.EQ.81) THEN
+C...q + qbar -> Q + Qbar; th = (p(q)-p(Q))**2
+ MINT(21)=ISIGN(MINT(55),MINT(15))
+ MINT(22)=-MINT(21)
+ KCC=4
+
+ ELSEIF(ISUB.EQ.82) THEN
+C...g + g -> Q + Qbar; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(MINT(55),KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+
+ ELSEIF(ISUB.EQ.83) THEN
+C...f + q -> f' + Q; th = (p(f) - p(f'))**2
+ KFOLD=MINT(16)
+ IF(MINT(2).EQ.2) KFOLD=MINT(15)
+ KFAOLD=IABS(KFOLD)
+ IF(KFAOLD.GT.10) THEN
+ KFANEW=KFAOLD+2*MOD(KFAOLD,2)-1
+ ELSE
+ RCKM=VINT(180+KFOLD)*PYR(0)
+ IPM=(5-ISIGN(1,KFOLD))/2
+ KFANEW=-MOD(KFAOLD+1,2)
+ 410 KFANEW=KFANEW+2
+ IDC=MDCY(KFAOLD,2)+(KFANEW+1)/2+2
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.IPM) THEN
+ IF(MOD(KFAOLD,2).EQ.0) RCKM=RCKM-
+ & VCKM(KFAOLD/2,(KFANEW+1)/2)
+ IF(MOD(KFAOLD,2).EQ.1) RCKM=RCKM-
+ & VCKM(KFANEW/2,(KFAOLD+1)/2)
+ ENDIF
+ IF(KFANEW.LE.6.AND.RCKM.GT.0D0) GOTO 410
+ ENDIF
+ IF(MINT(2).EQ.1) THEN
+ MINT(21)=ISIGN(MINT(55),MINT(15))
+ MINT(22)=ISIGN(KFANEW,MINT(16))
+ ELSE
+ MINT(21)=ISIGN(KFANEW,MINT(15))
+ MINT(22)=ISIGN(MINT(55),MINT(16))
+ JS=2
+ ENDIF
+ KCC=22
+
+ ELSEIF(ISUB.EQ.84) THEN
+C...g + gamma -> Q + Qbar; th arbitary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(MINT(55),KCS)
+ MINT(22)=-MINT(21)
+ KCC=27
+ IF(MINT(16).EQ.21) KCC=28
+
+ ELSEIF(ISUB.EQ.85) THEN
+C...gamma + gamma -> F + Fbar; th arbitary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(MINT(56),KCS)
+ MINT(22)=-MINT(21)
+ KCC=21
+
+ ELSEIF(ISUB.GE.86.AND.ISUB.LE.89) THEN
+C...g + g -> (J/Psi, chi_0c, chi_1c or chi_2c) + g
+ MINT(21)=KFPR(ISUB,1)
+ MINT(22)=KFPR(ISUB,2)
+ KCC=24
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ ENDIF
+
+ ELSEIF(ISUB.LE.100) THEN
+ IF(ISUB.EQ.95) THEN
+C...Low-pT ( = energyless g + g -> g + g)
+ KCC=MINT(2)+12
+ KCS=(-1)**INT(1.5D0+PYR(0))
+
+ ELSEIF(ISUB.EQ.96) THEN
+C...Multiple interactions (should be reassigned to QCD process)
+ ENDIF
+
+ ELSEIF(ISUB.LE.110) THEN
+ IF(ISUB.EQ.101) THEN
+C...g + g -> gamma*/Z0
+ KCC=21
+ KFRES=22
+
+ ELSEIF(ISUB.EQ.102) THEN
+C...g + g -> h0 (or H0, or A0)
+ KCC=21
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.103) THEN
+C...gamma + gamma -> h0 (or H0, or A0)
+ KCC=21
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.106) THEN
+C...g + g -> J/Psi + gamma
+ MINT(21)=KFPR(ISUB,1)
+ MINT(22)=KFPR(ISUB,2)
+ KCC=21
+
+ ELSEIF(ISUB.EQ.107) THEN
+C...g + gamma -> J/Psi + g
+ MINT(21)=KFPR(ISUB,1)
+ MINT(22)=KFPR(ISUB,2)
+ KCC=22
+ IF(MINT(16).EQ.22) KCC=33
+
+ ELSEIF(ISUB.EQ.108) THEN
+C...gamma + gamma -> J/Psi + gamma
+ MINT(21)=KFPR(ISUB,1)
+ MINT(22)=KFPR(ISUB,2)
+
+ ELSEIF(ISUB.EQ.110) THEN
+C...f + fbar -> gamma + h0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=22
+ MINT(23-JS)=KFHIGG
+ ENDIF
+
+ ELSEIF(ISUB.LE.120) THEN
+ IF(ISUB.EQ.111) THEN
+C...f + fbar -> g + h0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=21
+ MINT(23-JS)=25
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.112) THEN
+C...f + g -> f + h0; th = (p(f) - p(f))**2
+ IF(MINT(15).EQ.21) JS=2
+ MINT(23-JS)=25
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.113) THEN
+C...g + g -> g + h0; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(23-JS)=25
+ KCC=22+JS
+ KCS=(-1)**INT(1.5D0+PYR(0))
+
+ ELSEIF(ISUB.EQ.114) THEN
+C...g + g -> gamma + gamma; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(21)=22
+ MINT(22)=22
+ KCC=21
+
+ ELSEIF(ISUB.EQ.115) THEN
+C...g + g -> g + gamma; th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(23-JS)=22
+ KCC=22+JS
+ KCS=(-1)**INT(1.5D0+PYR(0))
+
+ ELSEIF(ISUB.EQ.116) THEN
+C...g + g -> gamma + Z0
+
+ ELSEIF(ISUB.EQ.117) THEN
+C...g + g -> Z0 + Z0
+
+ ELSEIF(ISUB.EQ.118) THEN
+C...g + g -> W+ + W-
+ ENDIF
+
+ ELSEIF(ISUB.LE.140) THEN
+ IF(ISUB.EQ.121) THEN
+C...g + g -> Q + Qbar + h0
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFPR(ISUBSV,2),KCS)
+ MINT(22)=-MINT(21)
+ KCC=11+INT(0.5D0+PYR(0))
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.122) THEN
+C...q + qbar -> Q + Qbar + h0
+ MINT(21)=ISIGN(KFPR(ISUBSV,2),MINT(15))
+ MINT(22)=-MINT(21)
+ KCC=4
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.123) THEN
+C...f + f' -> f + f' + h0 (or H0, or A0) (Z0 + Z0 -> h0 as
+C...inner process)
+ KCC=22
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.124) THEN
+C...f + f' -> f" + f"' + h0 (or H0, or A) (W+ + W- -> h0 as
+C...inner process)
+ DO 430 JT=1,2
+ I=MINT(14+JT)
+ IA=IABS(I)
+ IF(IA.LE.10) THEN
+ RVCKM=VINT(180+I)*PYR(0)
+ DO 420 J=1,MSTP(1)
+ IB=2*J-1+MOD(IA,2)
+ IPM=(5-ISIGN(1,I))/2
+ IDC=J+MDCY(IA,2)+2
+ IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 420
+ MINT(20+JT)=ISIGN(IB,I)
+ RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
+ IF(RVCKM.LE.0D0) GOTO 430
+ 420 CONTINUE
+ ELSE
+ IB=2*((IA+1)/2)-1+MOD(IA,2)
+ MINT(20+JT)=ISIGN(IB,I)
+ ENDIF
+ 430 CONTINUE
+ KCC=22
+ KFRES=KFHIGG
+
+ ELSEIF(ISUB.EQ.131) THEN
+C...g + g -> Z0 + q + qbar
+ ENDIF
+
+ ELSEIF(ISUB.LE.160) THEN
+ IF(ISUB.EQ.141) THEN
+C...f + fbar -> gamma*/Z0/Z'0
+ KFRES=32
+
+ ELSEIF(ISUB.EQ.142) THEN
+C...f + fbar' -> W'+/-
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ KFRES=ISIGN(34,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.143) THEN
+C...f + fbar' -> H+/-
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ KFRES=ISIGN(37,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.144) THEN
+C...f + fbar' -> R
+ KFRES=ISIGN(40,MINT(15)+MINT(16))
+
+ ELSEIF(ISUB.EQ.145) THEN
+C...q + l -> LQ (leptoquark)
+ IF(IABS(MINT(16)).LE.8) JS=2
+ KFRES=ISIGN(39,MINT(14+JS))
+ KCC=28+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
+C...q + g -> q* (excited quark)
+ IF(MINT(15).EQ.21) JS=2
+ KFRES=ISIGN(KFPR(ISUB,1),MINT(14+JS))
+ KCC=30+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.149) THEN
+C...g + g -> eta_techni
+ KFRES=38
+ KCC=23
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ ENDIF
+
+ ELSEIF(ISUB.LE.200) THEN
+ IF(ISUB.EQ.161) THEN
+C...f + g -> f' + H+/-; th = (p(f)-p(f'))**2
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(23-JS)=ISIGN(37,KCHG(IA,1)*I)
+ IB=IA+MOD(IA,2)-MOD(IA+1,2)
+ MINT(20+JS)=ISIGN(IB,I)
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.162) THEN
+C...q + g -> LQ + lbar; LQ=leptoquark; th=(p(q)-p(LQ))^2
+ IF(MINT(15).EQ.21) JS=2
+ MINT(20+JS)=ISIGN(39,MINT(14+JS))
+ KFLQL=KFDP(MDCY(39,2),2)
+ MINT(23-JS)=-ISIGN(KFLQL,MINT(14+JS))
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.163) THEN
+C...g + g -> LQ + LQbar; LQ=leptoquark; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(39,KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+
+ ELSEIF(ISUB.EQ.164) THEN
+C...q + qbar -> LQ + LQbar; LQ=leptoquark; th=(p(q)-p(LQ))**2
+ MINT(21)=ISIGN(39,MINT(15))
+ MINT(22)=-MINT(21)
+ KCC=4
+
+ ELSEIF(ISUB.EQ.165) THEN
+C...q + qbar -> l- + l+; th=(p(q)-p(l-))**2
+ MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.166) THEN
+C...q + qbar' -> l + nu; th=(p(u)-p(nu))**2 or (p(ubar)-p(nubar))**2
+ IF(MOD(MINT(15),2).EQ.0) THEN
+ MINT(21)=ISIGN(KFPR(ISUB,1)+1,MINT(15))
+ MINT(22)=ISIGN(KFPR(ISUB,1),MINT(16))
+ ELSE
+ MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
+ MINT(22)=ISIGN(KFPR(ISUB,1)+1,MINT(16))
+ ENDIF
+
+ ELSEIF(ISUB.EQ.167.OR.ISUB.EQ.168) THEN
+C...q + q' -> q" + q* (excited quark)
+ KFQSTR=KFPR(ISUB,2)
+ KFQEXC=MOD(KFQSTR,KEXCIT)
+ JS=MINT(2)
+ MINT(20+JS)=ISIGN(KFQSTR,MINT(14+JS))
+ IF(IABS(MINT(15)).NE.KFQEXC.AND.IABS(MINT(16)).NE.KFQEXC)
+ & MINT(23-JS)=ISIGN(KFQEXC,MINT(17-JS))
+ KCC=22
+
+ ELSEIF(ISUB.EQ.191) THEN
+C...f + fbar -> rho_tech0.
+ KFRES=54
+
+ ELSEIF(ISUB.EQ.192) THEN
+C...f + fbar' -> rho_tech+/-
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ KFRES=ISIGN(55,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.193) THEN
+C...f + fbar -> omega_tech0.
+ KFRES=56
+
+ ELSEIF(ISUB.EQ.194) THEN
+C...f + fbar -> f' + fbar' via mixture of s-channel
+C...rho_tech and omega_tech; th=(p(f)-p(f'))**2
+ MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
+ MINT(22)=-MINT(21)
+ ENDIF
+
+CMRENNA++
+ ELSEIF(ISUB.LE.215) THEN
+ IF(ISUB.EQ.201) THEN
+C...f + fbar -> ~e_L + ~e_Lbar
+ MINT(21)=ISIGN(KSUSY1+11,KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.202) THEN
+C...f + fbar -> ~e_R + ~e_Rbar
+ MINT(21)=ISIGN(KSUSY2+11,KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.203) THEN
+C...f + fbar -> ~e_R + ~e_Lbar
+ KCS=1
+ IF(MINT(2).EQ.2) KCS=-1
+ MINT(21)=ISIGN(KSUSY1+11,KCS)
+ MINT(22)=-ISIGN(KSUSY2+11,KCS)
+
+ ELSEIF(ISUB.EQ.204) THEN
+C...f + fbar -> ~mu_L + ~mu_Lbar
+ MINT(21)=ISIGN(KSUSY1+13,KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.205) THEN
+C...f + fbar -> ~mu_R + ~mu_Rbar
+ MINT(21)=ISIGN(KSUSY2+13,KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.206) THEN
+C...f + fbar -> ~mu_L + ~mu_Rbar
+ KCS=1
+ IF(MINT(2).EQ.2) KCS=-1
+ MINT(21)=ISIGN(KSUSY1+13,KCS)
+ MINT(22)=-ISIGN(KSUSY2+13,KCS)
+
+ ELSEIF(ISUB.EQ.207) THEN
+C...f + fbar -> ~tau_1 + ~tau_1bar
+ MINT(21)=ISIGN(KSUSY1+15,KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.208) THEN
+C...f + fbar -> ~tau_2 + ~tau_2bar
+ MINT(21)=ISIGN(KSUSY2+15,KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.209) THEN
+C...f + fbar -> ~tau_1 + ~tau_2bar
+ KCS=1
+ IF(MINT(2).EQ.2) KCS=-1
+ MINT(21)=ISIGN(KSUSY1+15,KCS)
+ MINT(22)=-ISIGN(KSUSY2+15,KCS)
+
+ ELSEIF(ISUB.EQ.210) THEN
+C...q + qbar' -> ~l_L + ~nulbar; th arbitrary
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ MINT(21)=-ISIGN(KFPR(ISUB,1),KCH1+KCH2)
+ MINT(22)=ISIGN(KFPR(ISUB,2),KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.211) THEN
+C...q + qbar'-> ~tau_1 + ~nutaubar; th arbitrary
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ MINT(21)=-ISIGN(KSUSY1+15,KCH1+KCH2)
+ MINT(22)=ISIGN(KSUSY1+16,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.212) THEN
+C...q + qbar'-> ~tau_2 + ~nutaubar; th arbitrary
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ MINT(21)=-ISIGN(KSUSY2+15,KCH1+KCH2)
+ MINT(22)=ISIGN(KSUSY1+16,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.213) THEN
+C...f + fbar -> ~nul + ~nulbar
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.214) THEN
+C...f + fbar -> ~nutau + ~nutaubar
+ MINT(21)=ISIGN(KSUSY1+16,KCS)
+ MINT(22)=-MINT(21)
+ ENDIF
+
+ ELSEIF(ISUB.LE.225) THEN
+ IF(ISUB.EQ.216) THEN
+C...f + fbar -> ~chi01 + ~chi01
+ MINT(21)=KSUSY1+22
+ MINT(22)=KSUSY1+22
+
+ ELSEIF(ISUB.EQ.217) THEN
+C...f + fbar -> ~chi02 + ~chi02
+ MINT(21)=KSUSY1+23
+ MINT(22)=KSUSY1+23
+
+ ELSEIF(ISUB.EQ.218 ) THEN
+C...f + fbar -> ~chi03 + ~chi03
+ MINT(21)=KSUSY1+25
+ MINT(22)=KSUSY1+25
+
+ ELSEIF(ISUB.EQ.219 ) THEN
+C...f + fbar -> ~chi04 + ~chi04
+ MINT(21)=KSUSY1+35
+ MINT(22)=KSUSY1+35
+
+ ELSEIF(ISUB.EQ.220 ) THEN
+C...f + fbar -> ~chi01 + ~chi02
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+22
+ MINT(23-JS)=KSUSY1+23
+
+ ELSEIF(ISUB.EQ.221 ) THEN
+C...f + fbar -> ~chi01 + ~chi03
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+22
+ MINT(23-JS)=KSUSY1+25
+
+ ELSEIF(ISUB.EQ.222) THEN
+C...f + fbar -> ~chi01 + ~chi04
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+22
+ MINT(23-JS)=KSUSY1+35
+
+ ELSEIF(ISUB.EQ.223) THEN
+C...f + fbar -> ~chi02 + ~chi03
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+23
+ MINT(23-JS)=KSUSY1+25
+
+ ELSEIF(ISUB.EQ.224) THEN
+C...f + fbar -> ~chi02 + ~chi04
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+23
+ MINT(23-JS)=KSUSY1+35
+
+ ELSEIF(ISUB.EQ.225) THEN
+C...f + fbar -> ~chi03 + ~chi04
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+25
+ MINT(23-JS)=KSUSY1+35
+ ENDIF
+
+ ELSEIF(ISUB.LE.236) THEN
+ IF(ISUB.EQ.226) THEN
+C...f + fbar -> ~chi+-1 + ~chi-+1
+C...th=(p(q)-p(chi+))**2 or (p(qbar)-p(chi-))**2
+ MINT(21)=ISIGN(KSUSY1+24,MINT(15))
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.227) THEN
+C...f + fbar -> ~chi+-2 + ~chi-+2
+ MINT(21)=ISIGN(KSUSY1+37,MINT(15))
+ MINT(22)=-MINT(21)
+
+ ELSEIF(ISUB.EQ.228) THEN
+C...f + fbar -> ~chi+-1 + ~chi-+2
+C...th=(p(q)-p(chi1+))**2 or th=(p(qbar)-p(chi1-))**2
+C...js=1 if pyr<.5, js=2 if pyr>.5
+C...if 15=q, 16=qbar and js=1, chi1+ + chi2-, th=(q-chi1+)**2
+C...if 15=qbar, 16=q and js=1, chi2- + chi1+, th=(q-chi1+)**2
+C...if 15=q, 16=qbar and js=2, chi1- + chi2+, th=(qbar-chi1-)**2
+C...if 15=qbar, 16=q and js=2, chi2+ + chi1-, th=(q-chi1-)**2
+ KCH1=ISIGN(1,MINT(15))
+ KCH2=INT(1-KCH1)/2
+ IF(MINT(2).EQ.1) THEN
+ MINT(22-KCH2)= -(KSUSY1+24)
+ MINT(21+KCH2)= KSUSY1+37
+ IF(KCH2.EQ.0) JS=2
+ ELSE
+ MINT(21+KCH2)= KSUSY1+24
+ MINT(22-KCH2)= -(KSUSY1+37)
+ IF(KCH2.EQ.1) JS=2
+ ENDIF
+
+ ELSEIF(ISUB.EQ.229) THEN
+C...q + qbar' -> ~chi01 + ~chi+-1
+C...th=(p(u)-p(chi+))**2 or (p(ubar)-p(chi-))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+C...CHECK THIS
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+22
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.230) THEN
+C...q + qbar' -> ~chi02 + ~chi+-1
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+23
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.231) THEN
+C...q + qbar' -> ~chi03 + ~chi+-1
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+25
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.232) THEN
+C...q + qbar' -> ~chi04 + ~chi+-1
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+35
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.233) THEN
+C...q + qbar' -> ~chi01 + ~chi+-2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+22
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.234) THEN
+C...q + qbar' -> ~chi02 + ~chi+-2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+23
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.235) THEN
+C...q + qbar' -> ~chi03 + ~chi+-2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+25
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
+
+ ELSEIF(ISUB.EQ.236) THEN
+C...q + qbar' -> ~chi04 + ~chi+-2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ IF(MOD(MINT(15),2).NE.0) JS=2
+ MINT(20+JS)=KSUSY1+35
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
+ ENDIF
+
+ ELSEIF(ISUB.LE.245) THEN
+ IF(ISUB.EQ.237) THEN
+C...q + qbar -> ~chi01 + ~g
+C...th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+21
+ MINT(23-JS)=KSUSY1+22
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.238) THEN
+C...q + qbar -> ~chi02 + ~g
+C...th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+21
+ MINT(23-JS)=KSUSY1+23
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.239) THEN
+C...q + qbar -> ~chi03 + ~g
+C...th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+21
+ MINT(23-JS)=KSUSY1+25
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.240) THEN
+C...q + qbar -> ~chi04 + ~g
+C...th arbitrary
+ IF(PYR(0).GT.0.5D0) JS=2
+ MINT(20+JS)=KSUSY1+21
+ MINT(23-JS)=KSUSY1+35
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.241) THEN
+C...q + qbar' -> ~chi+-1 + ~g
+C...if 15=u, 16=dbar, then (kch1+kch2)>0, js=1, chi+
+C...if 15=d, 16=ubar, then (kch1+kch2)<0, js=2, chi-
+C...if 15=ubar, 16=d, then (kch1+kch2)<0, js=1, chi-
+C...if 15=dbar, 16=u, then (kch1+kch2)>0, js=2, chi+
+C...th=(p(q)-p(chi+))**2 or (p(qbar')-p(chi-))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ JS=1
+ IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
+ MINT(20+JS)=KSUSY1+21
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.242) THEN
+C...q + qbar' -> ~chi+-2 + ~g
+C...if 15=u, 16=dbar, then (kch1+kch2)>0, js=1, chi+
+C...if 15=d, 16=ubar, then (kch1+kch2)<0, js=2, chi-
+C...if 15=ubar, 16=d, then (kch1+kch2)<0, js=1, chi-
+C...if 15=dbar, 16=u, then (kch1+kch2)>0, js=2, chi+
+C...th=(p(q)-p(chi+))**2 or (p(qbar')-p(chi-))**2
+ KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
+ KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
+ JS=1
+ IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
+ MINT(20+JS)=KSUSY1+21
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
+ KCC=17+JS
+
+ ELSEIF(ISUB.EQ.243) THEN
+C...q + qbar -> ~g + ~g ; th arbitrary
+ MINT(21)=KSUSY1+21
+ MINT(22)=KSUSY1+21
+ KCC=MINT(2)+4
+
+ ELSEIF(ISUB.EQ.244) THEN
+C...g + g -> ~g + ~g ; th arbitrary
+ KCC=MINT(2)+12
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=KSUSY1+21
+ MINT(22)=KSUSY1+21
+ ENDIF
+
+ ELSEIF(ISUB.LE.260) THEN
+ IF(ISUB.EQ.246) THEN
+C...qj + g -> ~qj_L + ~chi01
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY1+IA,I)
+ MINT(23-JS)=KSUSY1+22
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.247) THEN
+C...qj + g -> ~qj_R + ~chi01
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY2+IA,I)
+ MINT(23-JS)=KSUSY1+22
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.248) THEN
+C...qj + g -> ~qj_L + ~chi02
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY1+IA,I)
+ MINT(23-JS)=KSUSY1+23
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.249) THEN
+C...qj + g -> ~qj_R + ~chi02
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY2+IA,I)
+ MINT(23-JS)=KSUSY1+23
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.250) THEN
+C...qj + g -> ~qj_L + ~chi03
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY1+IA,I)
+ MINT(23-JS)=KSUSY1+25
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.251) THEN
+C...qj + g -> ~qj_R + ~chi03
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY2+IA,I)
+ MINT(23-JS)=KSUSY1+25
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.252) THEN
+C...qj + g -> ~qj_L + ~chi04
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY1+IA,I)
+ MINT(23-JS)=KSUSY1+35
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.253) THEN
+C...qj + g -> ~qj_R + ~chi04
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY2+IA,I)
+ MINT(23-JS)=KSUSY1+35
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.254) THEN
+C...qj + g -> ~qk_L + ~chi+-1
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCHG(IA,1)*I)
+ IB=-IA+INT((IA+1)/2)*4-1
+ MINT(20+JS)=ISIGN(KSUSY1+IB,I)
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.255) THEN
+C...qj + g -> ~qk_L + ~chi+-1
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(23-JS)=ISIGN(KSUSY1+24,KCHG(IA,1)*I)
+ IB=-IA+INT((IA+1)/2)*4-1
+ MINT(20+JS)=ISIGN(KSUSY2+IB,I)
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.256) THEN
+C...qj + g -> ~qk_L + ~chi+-2
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ IB=-IA+INT((IA+1)/2)*4-1
+ MINT(20+JS)=ISIGN(KSUSY1+IB,I)
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCHG(IA,1)*I)
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.257) THEN
+C...qj + g -> ~qk_R + ~chi+-2
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ IB=-IA+INT((IA+1)/2)*4-1
+ MINT(20+JS)=ISIGN(KSUSY2+IB,I)
+ MINT(23-JS)=ISIGN(KSUSY1+37,KCHG(IA,1)*I)
+ KCC=15+JS
+ KCS=ISIGN(1,MINT(14+JS))
+
+ ELSEIF(ISUB.EQ.258) THEN
+C...qj + g -> ~qj_L + ~g
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY1+IA,I)
+ MINT(23-JS)=KSUSY1+21
+ KCC=MINT(2)+6
+ IF(JS.EQ.2) KCC=KCC+2
+ KCS=ISIGN(1,I)
+
+ ELSEIF(ISUB.EQ.259) THEN
+C...qj + g -> ~qj_R + ~g
+ IF(MINT(15).EQ.21) JS=2
+ I=MINT(14+JS)
+ IA=IABS(I)
+ MINT(20+JS)=ISIGN(KSUSY2+IA,I)
+ MINT(23-JS)=KSUSY1+21
+ KCC=MINT(2)+6
+ IF(JS.EQ.2) KCC=KCC+2
+ KCS=ISIGN(1,I)
+ ENDIF
+
+ ELSEIF(ISUB.LE.270) THEN
+ IF(ISUB.EQ.261) THEN
+C...f + fbar -> ~t_1 + ~t_1bar; th = (p(q)-p(sq))**2
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+C...Correct color combination
+ IF(MINT(43).EQ.4) KCC=4
+
+ ELSEIF(ISUB.EQ.262) THEN
+C...f + fbar -> ~t_2 + ~t_2bar; th = (p(q)-p(sq))**2
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+C...Correct color combination
+ IF(MINT(43).EQ.4) KCC=4
+
+ ELSEIF(ISUB.EQ.263) THEN
+C...f + fbar -> ~t_1 + ~t_2bar; th = (p(q)-p(sq))**2
+ IF((KCS.GT.0.AND.MINT(2).EQ.1).OR.
+ & (KCS.LT.0.AND.MINT(2).EQ.2)) THEN
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-ISIGN(KFPR(ISUB,2),KCS)
+ ELSE
+ JS=2
+ MINT(21)=ISIGN(KFPR(ISUB,2),KCS)
+ MINT(22)=-ISIGN(KFPR(ISUB,1),KCS)
+ ENDIF
+C...Correct color combination
+ IF(MINT(43).EQ.4) KCC=4
+
+ ELSEIF(ISUB.EQ.264) THEN
+C...g + g -> ~t_1 + ~t_1bar; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+
+ ELSEIF(ISUB.EQ.265) THEN
+C...g + g -> ~t_2 + ~t_2bar; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+ ENDIF
+
+ ELSEIF(ISUB.LE.280) THEN
+ IF(ISUB.EQ.271) THEN
+C...qi + qj -> ~qi_L + ~qj_L
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+ MINT(21)=ISIGN(KSUSY1+IABS(MINT(15)),MINT(15))
+ MINT(22)=ISIGN(KSUSY1+IABS(MINT(16)),MINT(16))
+
+ ELSEIF(ISUB.EQ.272) THEN
+C...qi + qj -> ~qi_R + ~qj_R
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+ MINT(21)=ISIGN(KSUSY2+IABS(MINT(15)),MINT(15))
+ MINT(22)=ISIGN(KSUSY2+IABS(MINT(16)),MINT(16))
+
+ ELSEIF(ISUB.EQ.273) THEN
+C...qi + qj -> ~qi_L + ~qj_R
+ MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
+ MINT(22)=ISIGN(KFPR(ISUB,2),MINT(16))
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+
+ ELSEIF(ISUB.EQ.274) THEN
+C...qi + qjbar -> ~qi_L + ~qj_Lbar; th = (p(f)-p(sf'))**2
+ MINT(21)=ISIGN(KSUSY1+IABS(MINT(15)),MINT(15))
+ MINT(22)=ISIGN(KSUSY1+IABS(MINT(16)),MINT(16))
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+
+ ELSEIF(ISUB.EQ.275) THEN
+C...qi + qjbar -> ~qi_R + ~qj_Rbar ; th = (p(f)-p(sf'))**2
+ MINT(21)=ISIGN(KSUSY2+IABS(MINT(15)),MINT(15))
+ MINT(22)=ISIGN(KSUSY2+IABS(MINT(16)),MINT(16))
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+
+ ELSEIF(ISUB.EQ.276) THEN
+C...qi + qjbar -> ~qi_L + ~qj_Rbar ; th = (p(f)-p(sf'))**2
+ MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
+ MINT(22)=ISIGN(KFPR(ISUB,2),MINT(16))
+ KCC=MINT(2)
+ IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
+
+ ELSEIF(ISUB.EQ.277) THEN
+C...f + fbar -> ~qi_L + ~qi_Lbar ; th = (p(q)-p(sq))**2
+ ISGN=1
+ IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
+ MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+ IF(MINT(43).EQ.4) KCC=4
+
+ ELSEIF(ISUB.EQ.278) THEN
+C...f + fbar -> ~qi_R + ~qi_Rbar; th = (p(q)-p(sq))**2
+ ISGN=1
+ IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
+ MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+ IF(MINT(43).EQ.4) KCC=4
+
+ ELSEIF(ISUB.EQ.279) THEN
+C...g + g -> ~qi_L + ~qi_Lbar ; th arbitrary
+C...pure LL + RR
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+
+ ELSEIF(ISUB.EQ.280) THEN
+C...g + g -> ~qi_R + ~qi_Rbar ; th arbitrary
+ KCS=(-1)**INT(1.5D0+PYR(0))
+ MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
+ MINT(22)=-MINT(21)
+ KCC=MINT(2)+10
+ ENDIF
+
+CMRENNA--
+ ENDIF
+
+ IF(ISET(ISUB).EQ.11) THEN
+C...Store documentation for user-defined processes
+ BEZUP=(PUP(1,4)-PUP(2,4))/(PUP(1,4)+PUP(2,4))
+ KUPPO(1)=MINT(83)+5
+ KUPPO(2)=MINT(83)+6
+ I=MINT(83)+6
+ DO 450 IUP=3,NUP
+ KUPPO(IUP)=0
+ IF(MSTP(128).GE.2.AND.KUP(IUP,3).NE.0) THEN
+ IDOC=IDOC-1
+ MINT(4)=MINT(4)-1
+ GOTO 450
+ ENDIF
+ I=I+1
+ KUPPO(IUP)=I
+ K(I,1)=21
+ K(I,2)=KUP(IUP,2)
+ K(I,3)=0
+ IF(KUP(IUP,3).NE.0) K(I,3)=KUPPO(KUP(IUP,3))
+ K(I,4)=0
+ K(I,5)=0
+ DO 440 J=1,5
+ P(I,J)=PUP(IUP,J)
+ 440 CONTINUE
+ 450 CONTINUE
+ CALL PYROBO(MINT(83)+7,MINT(83)+4+NUP,0D0,VINT(24),0D0,0D0,
+ & -BEZUP)
+
+C...Store final state partons for user-defined processes
+ N=IPU2
+ DO 470 IUP=3,NUP
+ N=N+1
+ K(N,1)=1
+ IF(KUP(IUP,1).NE.1) K(N,1)=11
+ K(N,2)=KUP(IUP,2)
+ IF(MSTP(128).LE.0.OR.KUP(IUP,3).EQ.0) THEN
+ K(N,3)=KUPPO(IUP)
+ ELSE
+ K(N,3)=MINT(84)+KUP(IUP,3)
+ ENDIF
+ K(N,4)=0
+ K(N,5)=0
+ DO 460 J=1,5
+ P(N,J)=PUP(IUP,J)
+ 460 CONTINUE
+ 470 CONTINUE
+ CALL PYROBO(IPU3,N,0D0,VINT(24),0D0,0D0,-BEZUP)
+
+C...Arrange colour flow for user-defined processes
+ N=MINT(84)
+ DO 480 IUP=1,NUP
+ N=N+1
+ IF(KCHG(PYCOMP(K(N,2)),2).EQ.0) GOTO 480
+ IF(K(N,1).EQ.1) K(N,1)=3
+ IF(K(N,1).EQ.11) K(N,1)=14
+ IF(KUP(IUP,4).NE.0) K(N,4)=K(N,4)+MSTU(5)*(KUP(IUP,4)+
+ & MINT(84))
+ IF(KUP(IUP,5).NE.0) K(N,5)=K(N,5)+MSTU(5)*(KUP(IUP,5)+
+ & MINT(84))
+ IF(KUP(IUP,6).NE.0) K(N,4)=K(N,4)+KUP(IUP,6)+MINT(84)
+ IF(KUP(IUP,7).NE.0) K(N,5)=K(N,5)+KUP(IUP,7)+MINT(84)
+ 480 CONTINUE
+
+ ELSEIF(IDOC.EQ.7) THEN
+C...Resonance not decaying; store kinematics
+ I=MINT(83)+7
+ K(IPU3,1)=1
+ K(IPU3,2)=KFRES
+ K(IPU3,3)=I
+ P(IPU3,4)=SHUSER
+ P(IPU3,5)=SHUSER
+ K(I,1)=21
+ K(I,2)=KFRES
+ P(I,4)=SHUSER
+ P(I,5)=SHUSER
+ N=IPU3
+ MINT(21)=KFRES
+ MINT(22)=0
+
+C...Special cases: colour flow in coloured resonances
+ KCRES=PYCOMP(KFRES)
+ IF(KCHG(KCRES,2).NE.0) THEN
+ K(IPU3,1)=3
+ DO 490 J=1,2
+ JC=J
+ IF(KCS.EQ.-1) JC=3-J
+ IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
+ & MINT(84)+ICOL(KCC,1,JC)
+ IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
+ & MINT(84)+ICOL(KCC,2,JC)
+ IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU3,1).EQ.3) K(IPU3,J+3)=
+ & MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
+ 490 CONTINUE
+ ELSE
+ K(IPU1,4)=IPU2
+ K(IPU1,5)=IPU2
+ K(IPU2,4)=IPU1
+ K(IPU2,5)=IPU1
+ ENDIF
+
+ ELSEIF(IDOC.EQ.8) THEN
+C...2 -> 2 processes: store outgoing partons in their CM-frame
+ DO 500 JT=1,2
+ I=MINT(84)+2+JT
+ KCA=PYCOMP(MINT(20+JT))
+ K(I,1)=1
+ IF(KCHG(KCA,2).NE.0) K(I,1)=3
+ K(I,2)=MINT(20+JT)
+ K(I,3)=MINT(83)+IDOC+JT-2
+ KFAA=IABS(K(I,2))
+ IF(MWID(KCA).NE.0.AND.KFPR(ISUBSV,1).NE.0) THEN
+ P(I,5)=SQRT(VINT(63+MOD(JS+JT,2)))
+ ELSEIF(MWID(KCA).NE.0.AND.KFPR(ISUBSV,2).NE.0) THEN
+ P(I,5)=SQRT(VINT(64))
+ ELSE
+ P(I,5)=PYMASS(K(I,2))
+ ENDIF
+ IF((KFAA.EQ.6.OR.KFAA.EQ.7.OR.KFAA.EQ.8).AND.
+ & P(I,5).LT.PARP(42)) P(I,5)=PYMASS(K(I,2))
+ 500 CONTINUE
+ IF(P(IPU3,5)+P(IPU4,5).GE.SHR) THEN
+ KFA1=IABS(MINT(21))
+ KFA2=IABS(MINT(22))
+ IF((KFA1.GT.3.AND.KFA1.NE.21).OR.(KFA2.GT.3.AND.KFA2.NE.21))
+ & THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ P(IPU3,5)=0D0
+ P(IPU4,5)=0D0
+ ENDIF
+ P(IPU3,4)=0.5D0*(SHR+(P(IPU3,5)**2-P(IPU4,5)**2)/SHR)
+ P(IPU3,3)=SQRT(MAX(0D0,P(IPU3,4)**2-P(IPU3,5)**2))
+ P(IPU4,4)=SHR-P(IPU3,4)
+ P(IPU4,3)=-P(IPU3,3)
+ N=IPU4
+ MINT(7)=MINT(83)+7
+ MINT(8)=MINT(83)+8
+
+C...Rotate outgoing partons using cos(theta)=(th-uh)/lam(sh,sqm3,sqm4)
+ CALL PYROBO(IPU3,IPU4,ACOS(VINT(23)),VINT(24),0D0,0D0,0D0)
+
+ ELSEIF(IDOC.EQ.9) THEN
+C...2 -> 3 processes: store outgoing partons in their CM frame
+ DO 510 JT=1,2
+ I=MINT(84)+2+JT
+ KCA=PYCOMP(MINT(20+JT))
+ K(I,1)=1
+ IF(KCHG(KCA,2).NE.0) K(I,1)=3
+ K(I,2)=MINT(20+JT)
+ K(I,3)=MINT(83)+IDOC+JT-3
+ IF(IABS(K(I,2)).LE.22) THEN
+ P(I,5)=PYMASS(K(I,2))
+ ELSE
+ P(I,5)=SQRT(VINT(63+MOD(JS+JT,2)))
+ ENDIF
+ PT=SQRT(MAX(0D0,VINT(197+5*JT)-P(I,5)**2+VINT(196+5*JT)**2))
+ P(I,1)=PT*COS(VINT(198+5*JT))
+ P(I,2)=PT*SIN(VINT(198+5*JT))
+ 510 CONTINUE
+ K(IPU5,1)=1
+ K(IPU5,2)=KFRES
+ K(IPU5,3)=MINT(83)+IDOC
+ P(IPU5,5)=SHR
+ P(IPU5,1)=-P(IPU3,1)-P(IPU4,1)
+ P(IPU5,2)=-P(IPU3,2)-P(IPU4,2)
+ PMS1=P(IPU3,5)**2+P(IPU3,1)**2+P(IPU3,2)**2
+ PMS2=P(IPU4,5)**2+P(IPU4,1)**2+P(IPU4,2)**2
+ PMS3=P(IPU5,5)**2+P(IPU5,1)**2+P(IPU5,2)**2
+ PMT3=SQRT(PMS3)
+ P(IPU5,3)=PMT3*SINH(VINT(211))
+ P(IPU5,4)=PMT3*COSH(VINT(211))
+ PMS12=(SHPR-P(IPU5,4))**2-P(IPU5,3)**2
+ SQL12=(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2
+ IF(SQL12.LE.0D0) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ P(IPU3,3)=(-P(IPU5,3)*(PMS12+PMS1-PMS2)+
+ & VINT(213)*(SHPR-P(IPU5,4))*SQRT(SQL12))/(2D0*PMS12)
+ P(IPU4,3)=-P(IPU3,3)-P(IPU5,3)
+ P(IPU3,4)=SQRT(PMS1+P(IPU3,3)**2)
+ P(IPU4,4)=SQRT(PMS2+P(IPU4,3)**2)
+ MINT(23)=KFRES
+ N=IPU5
+ MINT(7)=MINT(83)+7
+ MINT(8)=MINT(83)+8
+
+ ELSEIF(IDOC.EQ.11) THEN
+C...Z0 + Z0 -> h0, W+ + W- -> h0: store Higgs and outgoing partons
+ PHI(1)=PARU(2)*PYR(0)
+ PHI(2)=PHI(1)-PHIR
+ DO 520 JT=1,2
+ I=MINT(84)+2+JT
+ K(I,1)=1
+ IF(KCHG(PYCOMP(MINT(20+JT)),2).NE.0) K(I,1)=3
+ K(I,2)=MINT(20+JT)
+ K(I,3)=MINT(83)+IDOC+JT-2
+ P(I,5)=PYMASS(K(I,2))
+ IF(0.5D0*SHPR*Z(JT).LE.P(I,5)) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ PABS=SQRT(MAX(0D0,(0.5D0*SHPR*Z(JT))**2-P(I,5)**2))
+ PTABS=PABS*SQRT(MAX(0D0,1D0-CTHE(JT)**2))
+ P(I,1)=PTABS*COS(PHI(JT))
+ P(I,2)=PTABS*SIN(PHI(JT))
+ P(I,3)=PABS*CTHE(JT)*(-1)**(JT+1)
+ P(I,4)=0.5D0*SHPR*Z(JT)
+ IZW=MINT(83)+6+JT
+ K(IZW,1)=21
+ K(IZW,2)=23
+ IF(ISUB.EQ.8) K(IZW,2)=ISIGN(24,PYCHGE(MINT(14+JT)))
+ K(IZW,3)=IZW-2
+ P(IZW,1)=-P(I,1)
+ P(IZW,2)=-P(I,2)
+ P(IZW,3)=(0.5D0*SHPR-PABS*CTHE(JT))*(-1)**(JT+1)
+ P(IZW,4)=0.5D0*SHPR*(1D0-Z(JT))
+ P(IZW,5)=-SQRT(MAX(0D0,P(IZW,3)**2+PTABS**2-P(IZW,4)**2))
+ 520 CONTINUE
+ I=MINT(83)+9
+ K(IPU5,1)=1
+ K(IPU5,2)=KFRES
+ K(IPU5,3)=I
+ P(IPU5,5)=SHR
+ P(IPU5,1)=-P(IPU3,1)-P(IPU4,1)
+ P(IPU5,2)=-P(IPU3,2)-P(IPU4,2)
+ P(IPU5,3)=-P(IPU3,3)-P(IPU4,3)
+ P(IPU5,4)=SHPR-P(IPU3,4)-P(IPU4,4)
+ K(I,1)=21
+ K(I,2)=KFRES
+ DO 530 J=1,5
+ P(I,J)=P(IPU5,J)
+ 530 CONTINUE
+ N=IPU5
+ MINT(23)=KFRES
+
+ ELSEIF(IDOC.EQ.12) THEN
+C...Z0 and W+/- scattering: store bosons and outgoing partons
+ PHI(1)=PARU(2)*PYR(0)
+ PHI(2)=PHI(1)-PHIR
+ JTRAN=INT(1.5D0+PYR(0))
+ DO 540 JT=1,2
+ I=MINT(84)+2+JT
+ K(I,1)=1
+ IF(KCHG(PYCOMP(MINT(20+JT)),2).NE.0) K(I,1)=3
+ K(I,2)=MINT(20+JT)
+ K(I,3)=MINT(83)+IDOC+JT-2
+ P(I,5)=PYMASS(K(I,2))
+ IF(0.5D0*SHPR*Z(JT).LE.P(I,5)) P(I,5)=0D0
+ PABS=SQRT(MAX(0D0,(0.5D0*SHPR*Z(JT))**2-P(I,5)**2))
+ PTABS=PABS*SQRT(MAX(0D0,1D0-CTHE(JT)**2))
+ P(I,1)=PTABS*COS(PHI(JT))
+ P(I,2)=PTABS*SIN(PHI(JT))
+ P(I,3)=PABS*CTHE(JT)*(-1)**(JT+1)
+ P(I,4)=0.5D0*SHPR*Z(JT)
+ IZW=MINT(83)+6+JT
+ K(IZW,1)=21
+ IF(MINT(14+JT).EQ.MINT(20+JT)) THEN
+ K(IZW,2)=23
+ ELSE
+ K(IZW,2)=ISIGN(24,PYCHGE(MINT(14+JT))-PYCHGE(MINT(20+JT)))
+ ENDIF
+ K(IZW,3)=IZW-2
+ P(IZW,1)=-P(I,1)
+ P(IZW,2)=-P(I,2)
+ P(IZW,3)=(0.5D0*SHPR-PABS*CTHE(JT))*(-1)**(JT+1)
+ P(IZW,4)=0.5D0*SHPR*(1D0-Z(JT))
+ P(IZW,5)=-SQRT(MAX(0D0,P(IZW,3)**2+PTABS**2-P(IZW,4)**2))
+ IPU=MINT(84)+4+JT
+ K(IPU,1)=3
+ K(IPU,2)=KFPR(ISUB,JT)
+ IF(ISUB.EQ.72.AND.JT.EQ.JTRAN) K(IPU,2)=-K(IPU,2)
+ IF(ISUB.EQ.73.OR.ISUB.EQ.77) K(IPU,2)=K(IZW,2)
+ K(IPU,3)=MINT(83)+8+JT
+ IF(IABS(K(IPU,2)).LE.10.OR.K(IPU,2).EQ.21) THEN
+ P(IPU,5)=PYMASS(K(IPU,2))
+ ELSE
+ P(IPU,5)=SQRT(VINT(63+MOD(JS+JT,2)))
+ ENDIF
+ MINT(22+JT)=K(IPU,2)
+ 540 CONTINUE
+C...Find rotation and boost for hard scattering subsystem
+ I1=MINT(83)+7
+ I2=MINT(83)+8
+ BEXCM=(P(I1,1)+P(I2,1))/(P(I1,4)+P(I2,4))
+ BEYCM=(P(I1,2)+P(I2,2))/(P(I1,4)+P(I2,4))
+ BEZCM=(P(I1,3)+P(I2,3))/(P(I1,4)+P(I2,4))
+ GAMCM=(P(I1,4)+P(I2,4))/SHR
+ BEPCM=BEXCM*P(I1,1)+BEYCM*P(I1,2)+BEZCM*P(I1,3)
+ PX=P(I1,1)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEXCM
+ PY=P(I1,2)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEYCM
+ PZ=P(I1,3)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEZCM
+ THECM=PYANGL(PZ,SQRT(PX**2+PY**2))
+ PHICM=PYANGL(PX,PY)
+C...Store hard scattering subsystem. Rotate and boost it
+ SQLAM=(SH-P(IPU5,5)**2-P(IPU6,5)**2)**2-4D0*P(IPU5,5)**2*
+ & P(IPU6,5)**2
+ PABS=SQRT(MAX(0D0,SQLAM/(4D0*SH)))
+ CTHWZ=VINT(23)
+ STHWZ=SQRT(MAX(0D0,1D0-CTHWZ**2))
+ PHIWZ=VINT(24)-PHICM
+ P(IPU5,1)=PABS*STHWZ*COS(PHIWZ)
+ P(IPU5,2)=PABS*STHWZ*SIN(PHIWZ)
+ P(IPU5,3)=PABS*CTHWZ
+ P(IPU5,4)=SQRT(PABS**2+P(IPU5,5)**2)
+ P(IPU6,1)=-P(IPU5,1)
+ P(IPU6,2)=-P(IPU5,2)
+ P(IPU6,3)=-P(IPU5,3)
+ P(IPU6,4)=SQRT(PABS**2+P(IPU6,5)**2)
+ CALL PYROBO(IPU5,IPU6,THECM,PHICM,BEXCM,BEYCM,BEZCM)
+ DO 560 JT=1,2
+ I1=MINT(83)+8+JT
+ I2=MINT(84)+4+JT
+ K(I1,1)=21
+ K(I1,2)=K(I2,2)
+ DO 550 J=1,5
+ P(I1,J)=P(I2,J)
+ 550 CONTINUE
+ 560 CONTINUE
+ N=IPU6
+ MINT(7)=MINT(83)+9
+ MINT(8)=MINT(83)+10
+ ENDIF
+
+ IF(ISET(ISUB).EQ.11) THEN
+ ELSEIF(IDOC.GE.8) THEN
+C...Store colour connection indices
+ DO 570 J=1,2
+ JC=J
+ IF(KCS.EQ.-1) JC=3-J
+ IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
+ & K(IPU1,J+3)+MINT(84)+ICOL(KCC,1,JC)
+ IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
+ & K(IPU2,J+3)+MINT(84)+ICOL(KCC,2,JC)
+ IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU3,1).EQ.3) K(IPU3,J+3)=
+ & MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
+ IF(ICOL(KCC,4,JC).NE.0.AND.K(IPU4,1).EQ.3) K(IPU4,J+3)=
+ & MSTU(5)*(MINT(84)+ICOL(KCC,4,JC))
+ 570 CONTINUE
+
+C...Copy outgoing partons to documentation lines
+ IMAX=2
+ IF(IDOC.EQ.9) IMAX=3
+ DO 590 I=1,IMAX
+ I1=MINT(83)+IDOC-IMAX+I
+ I2=MINT(84)+2+I
+ K(I1,1)=21
+ K(I1,2)=K(I2,2)
+ IF(IDOC.LE.9) K(I1,3)=0
+ IF(IDOC.GE.11) K(I1,3)=MINT(83)+2+I
+ DO 580 J=1,5
+ P(I1,J)=P(I2,J)
+ 580 CONTINUE
+ 590 CONTINUE
+
+ ELSEIF(IDOC.EQ.9) THEN
+C...Store colour connection indices
+ DO 600 J=1,2
+ JC=J
+ IF(KCS.EQ.-1) JC=3-J
+ IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
+ & K(IPU1,J+3)+MINT(84)+ICOL(KCC,1,JC)+
+ & MAX(0,MIN(1,ICOL(KCC,1,JC)-2))
+ IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
+ & K(IPU2,J+3)+MINT(84)+ICOL(KCC,2,JC)+
+ & MAX(0,MIN(1,ICOL(KCC,2,JC)-2))
+ IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU4,1).EQ.3) K(IPU4,J+3)=
+ & MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
+ IF(ICOL(KCC,4,JC).NE.0.AND.K(IPU5,1).EQ.3) K(IPU5,J+3)=
+ & MSTU(5)*(MINT(84)+ICOL(KCC,4,JC))
+ 600 CONTINUE
+
+C...Copy outgoing partons to documentation lines
+ DO 620 I=1,3
+ I1=MINT(83)+IDOC-3+I
+ I2=MINT(84)+2+I
+ K(I1,1)=21
+ K(I1,2)=K(I2,2)
+ K(I1,3)=0
+ DO 610 J=1,5
+ P(I1,J)=P(I2,J)
+ 610 CONTINUE
+ 620 CONTINUE
+ ENDIF
+
+C...Low-pT events: remove gluons used for string drawing purposes
+ IF(ISUB.EQ.95) THEN
+ K(IPU3,1)=K(IPU3,1)+10
+ K(IPU4,1)=K(IPU4,1)+10
+ DO 630 J=41,66
+ VINTSV(J)=VINT(J)
+ VINT(J)=0D0
+ 630 CONTINUE
+ DO 650 I=MINT(83)+5,MINT(83)+8
+ DO 640 J=1,5
+ P(I,J)=0D0
+ 640 CONTINUE
+ 650 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSSPA
+C...Generates spacelike parton showers.
+
+ SUBROUTINE PYSSPA(IPU1,IPU2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT2/,/PYINT3/
+C...Local arrays and data.
+ DIMENSION KFLS(4),IS(2),XS(2),ZS(2),Q2S(2),TEVCSV(2),TEVESV(2),
+ &XFS(2,-25:25),XFA(-25:25),XFB(-25:25),XFN(-25:25),WTAPC(-25:25),
+ &WTAPE(-25:25),WTSF(-25:25),THE2(2),ALAM(2),DQ2(3),DPC(3),DPD(4),
+ &DPB(4),ROBO(5),MORE(2),KFBEAM(2),Q2MNCS(2),KCFI(2),NFIS(2),
+ &THEFIS(2,2),ISFI(2)
+ DATA IS/2*0/
+
+C...Read out basic information; set global Q^2 scale.
+ IPUS1=IPU1
+ IPUS2=IPU2
+ ISUB=MINT(1)
+ Q2MX=VINT(56)
+ IF(ISET(ISUB).EQ.2) Q2MX=PARP(67)*VINT(56)
+
+C...Initialize QCD evolution and check phase space.
+ Q2MNC=PARP(62)**2
+ Q2MNCS(1)=Q2MNC
+ IF(MSTP(66).EQ.1.AND.MINT(107).EQ.3)
+ &Q2MNCS(1)=MAX(Q2MNC,VINT(283))
+ Q2MNCS(2)=Q2MNC
+ IF(MSTP(66).EQ.1.AND.MINT(108).EQ.3)
+ &Q2MNCS(2)=MAX(Q2MNC,VINT(284))
+ MCEV=0
+ XEC0=2D0*PARP(65)/VINT(1)
+ ALAMS=PARU(112)
+ PARU(112)=PARP(61)
+ FQ2C=1D0
+ TCMX=0D0
+ IF(MINT(47).GE.2.AND.(MINT(47).NE.5.OR.MSTP(12).GE.1)) THEN
+ MCEV=1
+ IF(MSTP(64).EQ.1) FQ2C=PARP(63)
+ IF(MSTP(64).EQ.2) FQ2C=PARP(64)
+ TCMX=LOG(FQ2C*Q2MX/PARP(61)**2)
+ IF(Q2MX.LT.MAX(Q2MNC,2D0*PARP(61)**2).OR.TCMX.LT.0.2D0)
+ & MCEV=0
+ ENDIF
+
+C...Initialize QED evolution and check phase space.
+ Q2MNE=PARP(68)**2
+ MEEV=0
+ XEE=1D-6
+ SPME=PMAS(11,1)**2
+ TEMX=0D0
+ FWTE=10D0
+ IF(MINT(45).EQ.3.OR.MINT(46).EQ.3) THEN
+ MEEV=1
+ TEMX=LOG(Q2MX/SPME)
+ IF(Q2MX.LE.Q2MNE.OR.TEMX.LT.0.2D0) MEEV=0
+ ENDIF
+ IF(MCEV.EQ.0.AND.MEEV.EQ.0) RETURN
+
+C...Initial values: flavours, momenta, virtualities.
+ NS=N
+ 100 N=NS
+ DO 120 JT=1,2
+ MORE(JT)=1
+ KFBEAM(JT)=MINT(10+JT)
+ IF(MINT(18+JT).EQ.1)KFBEAM(JT)=22
+ KFLS(JT)=MINT(14+JT)
+ KFLS(JT+2)=KFLS(JT)
+ XS(JT)=VINT(40+JT)
+ IF(MINT(18+JT).EQ.1) XS(JT)=VINT(40+JT)/VINT(154+JT)
+ ZS(JT)=1D0
+ Q2S(JT)=Q2MX
+ TEVCSV(JT)=TCMX
+ ALAM(JT)=PARP(61)
+ THE2(JT)=100D0
+ TEVESV(JT)=TEMX
+ DO 110 KFL=-25,25
+ XFS(JT,KFL)=XSFX(JT,KFL)
+ 110 CONTINUE
+ 120 CONTINUE
+ DSH=VINT(44)
+ IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) DSH=VINT(26)*VINT(2)
+
+C...Find if interference with final state partons.
+ MFIS=0
+ IF(MSTP(67).GE.1.AND.MSTP(67).LE.3) MFIS=MSTP(67)
+ IF(MFIS.NE.0) THEN
+ DO 140 I=1,2
+ KCFI(I)=0
+ KCA=PYCOMP(IABS(KFLS(I)))
+ IF(KCA.NE.0) KCFI(I)=KCHG(KCA,2)*ISIGN(1,KFLS(I))
+ NFIS(I)=0
+ IF(KCFI(I).NE.0) THEN
+ IF(I.EQ.1) IPFS=IPUS1
+ IF(I.EQ.2) IPFS=IPUS2
+ DO 130 J=1,2
+ ICSI=MOD(K(IPFS,3+J),MSTU(5))
+ IF(ICSI.GT.0.AND.ICSI.NE.IPUS1.AND.ICSI.NE.IPUS2.AND.
+ & (KCFI(I).EQ.(-1)**(J+1).OR.KCFI(I).EQ.2)) THEN
+ NFIS(I)=NFIS(I)+1
+ THEFIS(I,NFIS(I))=PYANGL(P(ICSI,3),SQRT(P(ICSI,1)**2+
+ & P(ICSI,2)**2))
+ IF(I.EQ.2) THEFIS(I,NFIS(I))=PARU(1)-THEFIS(I,NFIS(I))
+ ENDIF
+ 130 CONTINUE
+ ENDIF
+ 140 CONTINUE
+ IF(NFIS(1)+NFIS(2).EQ.0) MFIS=0
+ ENDIF
+
+C...Pick up leg with highest virtuality.
+ 150 N=N+1
+ JT=1
+ IF(N.GT.NS+1.AND.Q2S(2).GT.Q2S(1)) JT=2
+ IF(MORE(JT).EQ.0) JT=3-JT
+ KFLB=KFLS(JT)
+ XB=XS(JT)
+ DO 160 KFL=-25,25
+ XFB(KFL)=XFS(JT,KFL)
+ 160 CONTINUE
+ DSHR=2D0*SQRT(DSH)
+ DSHZ=DSH/ZS(JT)
+
+C...Check if allowed to branch.
+ MCEV=0
+ IF(IABS(KFLB).LE.10.OR.KFLB.EQ.21) THEN
+ MCEV=1
+ XEC=MAX(XEC0,XB*(1D0/(1D0-PARP(66))-1D0))
+ IF(XB.GE.1D0-2D0*XEC) MCEV=0
+ ENDIF
+ MEEV=0
+ IF(MINT(44+JT).EQ.3) THEN
+ MEEV=1
+ IF(XB.GE.1D0-2D0*XEE) MEEV=0
+ IF((IABS(KFLB).LE.10.OR.KFLB.EQ.21).AND.XB.GE.1D0-2D0*XEC)
+ & MEEV=0
+C***Currently kill QED shower for resolved photoproduction.
+ IF(MINT(18+JT).EQ.1) MEEV=0
+C***Currently kill shower for W inside electron.
+ IF(IABS(KFLB).EQ.24) THEN
+ MCEV=0
+ MEEV=0
+ ENDIF
+ ENDIF
+ IF(MCEV.EQ.0.AND.MEEV.EQ.0) THEN
+ Q2B=0D0
+ GOTO 250
+ ENDIF
+
+C...Maximum Q2 with or without Q2 ordering. Effective Lambda and n_f.
+ Q2B=Q2S(JT)
+ TEVCB=TEVCSV(JT)
+ TEVEB=TEVESV(JT)
+ IF(MSTP(62).LE.1) THEN
+ IF(ZS(JT).GT.0.99999D0) THEN
+ Q2B=Q2S(JT)
+ ELSE
+ Q2B=0.5D0*(1D0/ZS(JT)+1D0)*Q2S(JT)+0.5D0*(1D0/ZS(JT)-1D0)*
+ & (Q2S(3-JT)-DSH+SQRT((DSH+Q2S(1)+Q2S(2))**2+
+ & 8D0*Q2S(1)*Q2S(2)*ZS(JT)/(1D0-ZS(JT))))
+ ENDIF
+ IF(MCEV.EQ.1) TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
+ IF(MEEV.EQ.1) TEVEB=LOG(Q2B/SPME)
+ ENDIF
+ IF(MCEV.EQ.1) THEN
+ ALSDUM=PYALPS(FQ2C*Q2B)
+ TEVCB=TEVCB+2D0*LOG(ALAM(JT)/PARU(117))
+ ALAM(JT)=PARU(117)
+ B0=(33D0-2D0*MSTU(118))/6D0
+ ENDIF
+ TEVCBS=TEVCB
+ TEVEBS=TEVEB
+
+C...Select side for interference with final state partons.
+ IF(MFIS.GE.1.AND.N.LE.NS+2) THEN
+ IFI=N-NS
+ ISFI(IFI)=0
+ IF(IABS(KCFI(IFI)).EQ.1.AND.NFIS(IFI).EQ.1) THEN
+ ISFI(IFI)=1
+ ELSEIF(KCFI(IFI).EQ.2.AND.NFIS(IFI).EQ.1) THEN
+ IF(PYR(0).GT.0.5D0) ISFI(IFI)=1
+ ELSEIF(KCFI(IFI).EQ.2.AND.NFIS(IFI).EQ.2) THEN
+ ISFI(IFI)=1
+ IF(PYR(0).GT.0.5D0) ISFI(IFI)=2
+ ENDIF
+ ENDIF
+
+C...Calculate Altarelli-Parisi weights.
+ DO 170 KFL=-25,25
+ WTAPC(KFL)=0D0
+ WTAPE(KFL)=0D0
+ WTSF(KFL)=0D0
+ 170 CONTINUE
+C...q -> q, g -> q.
+ IF(IABS(KFLB).LE.10) THEN
+ WTAPC(KFLB)=(8D0/3D0)*LOG((1D0-XEC-XB)*(XB+XEC)/(XEC*(1D0-XEC)))
+ WTAPC(21)=0.5D0*(XB/(XB+XEC)-XB/(1D0-XEC))
+C...f -> f, gamma -> f.
+ ELSEIF(IABS(KFLB).LE.20) THEN
+ WTAPF1=LOG((1D0-XEE-XB)*(XB+XEE)/(XEE*(1D0-XEE)))
+ WTAPF2=LOG((1D0-XEE-XB)*(1D0-XEE)/(XEE*(XB+XEE)))
+ WTAPE(KFLB)=2D0*(WTAPF1+WTAPF2)
+ IF(MSTP(12).GE.1) WTAPE(22)=XB/(XB+XEE)-XB/(1D0-XEE)
+C...f -> g, g -> g.
+ ELSEIF(KFLB.EQ.21) THEN
+ WTAPQ=(16D0/3D0)*(SQRT((1D0-XEC)/XB)-SQRT((XB+XEC)/XB))
+ DO 180 KFL=1,MSTP(58)
+ WTAPC(KFL)=WTAPQ
+ WTAPC(-KFL)=WTAPQ
+ 180 CONTINUE
+ WTAPC(21)=6D0*LOG((1D0-XEC-XB)/XEC)
+C...f -> gamma, W+, W-.
+ ELSEIF(KFLB.EQ.22) THEN
+ WTAPF=LOG((1D0-XEE-XB)*(1D0-XEE)/(XEE*(XB+XEE)))/XB
+ WTAPE(11)=WTAPF
+ WTAPE(-11)=WTAPF
+ ELSEIF(KFLB.EQ.24) THEN
+ WTAPE(-11)=1D0/(4D0*PARU(102))*LOG((1D0-XEE-XB)*(1D0-XEE)/
+ & (XEE*(XB+XEE)))/XB
+ ELSEIF(KFLB.EQ.-24) THEN
+ WTAPE(11)=1D0/(4D0*PARU(102))*LOG((1D0-XEE-XB)*(1D0-XEE)/
+ & (XEE*(XB+XEE)))/XB
+ ENDIF
+
+C...Calculate parton distribution weights and sum.
+ NTRY=0
+ 190 NTRY=NTRY+1
+ IF(NTRY.GT.500) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ WTSUMC=0D0
+ WTSUME=0D0
+ XFBO=MAX(1D-10,XFB(KFLB))
+ DO 200 KFL=-25,25
+ WTSF(KFL)=XFB(KFL)/XFBO
+ WTSUMC=WTSUMC+WTAPC(KFL)*WTSF(KFL)
+ WTSUME=WTSUME+WTAPE(KFL)*WTSF(KFL)
+ 200 CONTINUE
+ WTSUMC=MAX(0.0001D0,WTSUMC)
+ WTSUME=MAX(0.0001D0/FWTE,WTSUME)
+
+C...Choose new t: fix alpha_s, alpha_s(Q^2), alpha_s(k_T^2).
+ NTRY2=0
+ 210 NTRY2=NTRY2+1
+ IF(NTRY2.GT.500) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ IF(MCEV.EQ.1) THEN
+ IF(MSTP(64).LE.0) THEN
+ TEVCB=TEVCB+LOG(PYR(0))*PARU(2)/(PARU(111)*WTSUMC)
+ ELSEIF(MSTP(64).EQ.1) THEN
+ TEVCB=TEVCB*EXP(MAX(-50D0,LOG(PYR(0))*B0/WTSUMC))
+ ELSE
+ TEVCB=TEVCB*EXP(MAX(-50D0,LOG(PYR(0))*B0/(5D0*WTSUMC)))
+ ENDIF
+ ENDIF
+ IF(MEEV.EQ.1) THEN
+ TEVEB=TEVEB*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/
+ & (PARU(101)*FWTE*WTSUME*TEMX)))
+ ENDIF
+
+C...Translate t into Q2 scale; choose between QCD and QED evolution.
+ 220 IF(MCEV.EQ.1) Q2CB=ALAM(JT)**2*EXP(MAX(-50D0,TEVCB))/FQ2C
+ IF(MEEV.EQ.1) Q2EB=SPME*EXP(MAX(-50D0,TEVEB))
+ MCE=0
+ IF(MCEV.EQ.0.AND.MEEV.EQ.0) THEN
+ ELSEIF(MCEV.EQ.1.AND.MEEV.EQ.0) THEN
+ IF(Q2CB.GT.Q2MNCS(JT)) MCE=1
+ ELSEIF(MCEV.EQ.0.AND.MEEV.EQ.1) THEN
+ IF(Q2EB.GT.Q2MNE) MCE=2
+ ELSEIF(Q2MNCS(JT).GT.Q2MNE) THEN
+ MCE=1
+ IF(Q2EB.GT.Q2CB.OR.Q2CB.LE.Q2MNCS(JT)) MCE=2
+ IF(MCE.EQ.2.AND.Q2EB.LE.Q2MNE) MCE=0
+ ELSE
+ MCE=2
+ IF(Q2CB.GT.Q2EB.OR.Q2EB.LE.Q2MNE) MCE=1
+ IF(MCE.EQ.1.AND.Q2CB.LE.Q2MNCS(JT)) MCE=0
+ ENDIF
+
+C...Evolution possibly ended. Update t values.
+ IF(MCE.EQ.0) THEN
+ Q2B=0D0
+ GOTO 250
+ ELSEIF(MCE.EQ.1) THEN
+ Q2B=Q2CB
+ Q2REF=FQ2C*Q2B
+ IF(MEEV.EQ.1) TEVEB=LOG(Q2B/SPME)
+ ELSE
+ Q2B=Q2EB
+ Q2REF=Q2B
+ IF(MCEV.EQ.1) TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
+ ENDIF
+
+C...Select flavour for branching parton.
+ IF(MCE.EQ.1) WTRAN=PYR(0)*WTSUMC
+ IF(MCE.EQ.2) WTRAN=PYR(0)*WTSUME
+ KFLA=-25
+ 230 KFLA=KFLA+1
+ IF(MCE.EQ.1) WTRAN=WTRAN-WTAPC(KFLA)*WTSF(KFLA)
+ IF(MCE.EQ.2) WTRAN=WTRAN-WTAPE(KFLA)*WTSF(KFLA)
+ IF(KFLA.LE.24.AND.WTRAN.GT.0D0) GOTO 230
+ IF(KFLA.EQ.25) THEN
+ Q2B=0D0
+ GOTO 250
+ ENDIF
+
+C...Choose z value and corrective weight.
+ WTZ=0D0
+C...q -> q + g.
+ IF(IABS(KFLA).LE.10.AND.IABS(KFLB).LE.10) THEN
+ Z=1D0-((1D0-XB-XEC)/(1D0-XEC))*
+ & (XEC*(1D0-XEC)/((XB+XEC)*(1D0-XB-XEC)))**PYR(0)
+ WTZ=0.5D0*(1D0+Z**2)
+C...q -> g + q.
+ ELSEIF(IABS(KFLA).LE.10.AND.KFLB.EQ.21) THEN
+ Z=XB/(SQRT(XB+XEC)+PYR(0)*(SQRT(1D0-XEC)-SQRT(XB+XEC)))**2
+ WTZ=0.5D0*(1D0+(1D0-Z)**2)*SQRT(Z)
+C...f -> f + gamma.
+ ELSEIF(IABS(KFLA).LE.20.AND.IABS(KFLB).LE.20) THEN
+ IF(WTAPF1.GT.PYR(0)*(WTAPF1+WTAPF2)) THEN
+ Z=1D0-((1D0-XB-XEE)/(1D0-XEE))*
+ & (XEE*(1D0-XEE)/((XB+XEE)*(1D0-XB-XEE)))**PYR(0)
+ ELSE
+ Z=XB+XB*(XEE/(1D0-XEE))*
+ & ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
+ ENDIF
+ WTZ=0.5D0*(1D0+Z**2)*(Z-XB)/(1D0-XB)
+C...f -> gamma + f.
+ ELSEIF(IABS(KFLA).LE.20.AND.KFLB.EQ.22) THEN
+ Z=XB+XB*(XEE/(1D0-XEE))*
+ & ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
+ WTZ=0.5D0*(1D0+(1D0-Z)**2)*XB*(Z-XB)/Z
+C...f -> W+- + f'.
+ ELSEIF(IABS(KFLA).LE.20.AND.IABS(KFLB).EQ.24) THEN
+ Z=XB+XB*(XEE/(1D0-XEE))*
+ & ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
+ WTZ=0.5D0*(1D0+(1D0-Z)**2)*(XB*(Z-XB)/Z)*
+ & (Q2B/(Q2B+PMAS(24,1)**2))
+C...g -> q + qbar.
+ ELSEIF(KFLA.EQ.21.AND.IABS(KFLB).LE.10) THEN
+ Z=XB/(1D0-XEC)+PYR(0)*(XB/(XB+XEC)-XB/(1D0-XEC))
+ WTZ=1D0-2D0*Z*(1D0-Z)
+C...g -> g + g.
+ ELSEIF(KFLA.EQ.21.AND.KFLB.EQ.21) THEN
+ Z=1D0/(1D0+((1D0-XEC-XB)/XB)*(XEC/(1D0-XEC-XB))**PYR(0))
+ WTZ=(1D0-Z*(1D0-Z))**2
+C...gamma -> f + fbar.
+ ELSEIF(KFLA.EQ.22.AND.IABS(KFLB).LE.20) THEN
+ Z=XB/(1D0-XEE)+PYR(0)*(XB/(XB+XEE)-XB/(1D0-XEE))
+ WTZ=1D0-2D0*Z*(1D0-Z)
+ ENDIF
+ IF(MCE.EQ.2) WTZ=(WTZ/FWTE)*(TEVEB/TEMX)
+
+C...Option with resummation of soft gluon emission as effective z shift.
+ IF(MCE.EQ.1) THEN
+ IF(MSTP(65).GE.1) THEN
+ RSOFT=6D0
+ IF(KFLB.NE.21) RSOFT=8D0/3D0
+ Z=Z*(TEVCB/TEVCSV(JT))**(RSOFT*XEC/((XB+XEC)*B0))
+ IF(Z.LE.XB) GOTO 210
+ ENDIF
+
+C...Option with alpha_s(k_T^2): demand k_T^2 > cutoff, reweight.
+ IF(MSTP(64).GE.2) THEN
+ IF((1D0-Z)*Q2B.LT.Q2MNCS(JT)) GOTO 210
+ ALPRAT=TEVCB/(TEVCB+LOG(1D0-Z))
+ IF(ALPRAT.LT.5D0*PYR(0)) GOTO 210
+ IF(ALPRAT.GT.5D0) WTZ=WTZ*ALPRAT/5D0
+ ENDIF
+
+C...Impose angular constraint in first branching from interference
+C...with final state partons.
+ IF(MFIS.GE.1.AND.N.LE.NS+2.AND.NTRY2.LT.200) THEN
+ THE2D=(4D0*Q2B)/(DSH*(1D0-Z))
+ IF(N.EQ.NS+1.AND.ISFI(1).GE.1) THEN
+ IF(THE2D.GT.THEFIS(1,ISFI(1))**2) GOTO 210
+ ELSEIF(N.EQ.NS+2.AND.ISFI(2).GE.1) THEN
+ IF(THE2D.GT.THEFIS(2,ISFI(2))**2) GOTO 210
+ ENDIF
+ ENDIF
+
+C...Option with angular ordering requirement.
+ IF(MSTP(62).GE.3.AND.NTRY2.LT.200) THEN
+ THE2T=(4D0*Z**2*Q2B)/(VINT(2)*(1D0-Z)*XB**2)
+ IF(THE2T.GT.THE2(JT)) GOTO 210
+ ENDIF
+ ENDIF
+
+C...Weighting with new parton distributions.
+ MINT(105)=MINT(102+JT)
+ MINT(109)=MINT(106+JT)
+ IF(MSTP(57).LE.1) THEN
+ CALL PYPDFU(KFBEAM(JT),XB,Q2REF,XFN)
+ ELSE
+ CALL PYPDFL(KFBEAM(JT),XB,Q2REF,XFN)
+ ENDIF
+ XFBN=XFN(KFLB)
+ IF(XFBN.LT.1D-20) THEN
+ IF(KFLA.EQ.KFLB) THEN
+ TEVCB=TEVCBS
+ TEVEB=TEVEBS
+ WTAPC(KFLB)=0D0
+ WTAPE(KFLB)=0D0
+ GOTO 190
+ ELSEIF(MCE.EQ.1.AND.TEVCBS-TEVCB.GT.0.2D0) THEN
+ TEVCB=0.5D0*(TEVCBS+TEVCB)
+ GOTO 220
+ ELSEIF(MCE.EQ.2.AND.TEVEBS-TEVEB.GT.0.2D0) THEN
+ TEVEB=0.5D0*(TEVEBS+TEVEB)
+ GOTO 220
+ ELSE
+ XFBN=1D-10
+ XFN(KFLB)=XFBN
+ ENDIF
+ ENDIF
+ DO 240 KFL=-25,25
+ XFB(KFL)=XFN(KFL)
+ 240 CONTINUE
+ XA=XB/Z
+ IF(MSTP(57).LE.1) THEN
+ CALL PYPDFU(KFBEAM(JT),XA,Q2REF,XFA)
+ ELSE
+ CALL PYPDFL(KFBEAM(JT),XA,Q2REF,XFA)
+ ENDIF
+ XFAN=XFA(KFLA)
+ IF(XFAN.LT.1D-20) GOTO 190
+ WTSFA=WTSF(KFLA)
+ IF(WTZ*XFAN/XFBN.LT.PYR(0)*WTSFA) GOTO 190
+
+C...Define two hard scatterers in their CM-frame.
+ 250 IF(N.EQ.NS+2) THEN
+ DQ2(JT)=Q2B
+ DPLCM=SQRT((DSH+DQ2(1)+DQ2(2))**2-4D0*DQ2(1)*DQ2(2))/DSHR
+ DO 270 JR=1,2
+ I=NS+JR
+ IF(JR.EQ.1) IPO=IPUS1
+ IF(JR.EQ.2) IPO=IPUS2
+ DO 260 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 260 CONTINUE
+ K(I,1)=14
+ K(I,2)=KFLS(JR+2)
+ K(I,4)=IPO
+ K(I,5)=IPO
+ P(I,3)=DPLCM*(-1)**(JR+1)
+ P(I,4)=(DSH+DQ2(3-JR)-DQ2(JR))/DSHR
+ P(I,5)=-SQRT(DQ2(JR))
+ K(IPO,1)=14
+ K(IPO,3)=I
+ K(IPO,4)=MOD(K(IPO,4),MSTU(5))+MSTU(5)*I
+ K(IPO,5)=MOD(K(IPO,5),MSTU(5))+MSTU(5)*I
+ 270 CONTINUE
+
+C...Find maximum allowed mass of timelike parton.
+ ELSEIF(N.GT.NS+2) THEN
+ JR=3-JT
+ DQ2(3)=Q2B
+ DPC(1)=P(IS(1),4)
+ DPC(2)=P(IS(2),4)
+ DPC(3)=0.5D0*(ABS(P(IS(1),3))+ABS(P(IS(2),3)))
+ DPD(1)=DSH+DQ2(JR)+DQ2(JT)
+ DPD(2)=DSHZ+DQ2(JR)+DQ2(3)
+ DPD(3)=SQRT(DPD(1)**2-4D0*DQ2(JR)*DQ2(JT))
+ DPD(4)=SQRT(DPD(2)**2-4D0*DQ2(JR)*DQ2(3))
+ IKIN=0
+ IF(Q2S(JR).GE.0.25D0*Q2MNC.AND.DPD(1)-DPD(3).GE.
+ & 1D-10*DPD(1)) IKIN=1
+ IF(IKIN.EQ.0) DMSMA=(DQ2(JT)/ZS(JT)-DQ2(3))*
+ & (DSH/(DSH+DQ2(JT))-DSH/(DSHZ+DQ2(3)))
+ IF(IKIN.EQ.1) DMSMA=(DPD(1)*DPD(2)-DPD(3)*DPD(4))/
+ & (2D0*DQ2(JR))-DQ2(JT)-DQ2(3)
+
+C...Generate timelike parton shower (if required).
+ IT=N
+ DO 280 J=1,5
+ K(IT,J)=0
+ P(IT,J)=0D0
+ V(IT,J)=0D0
+ 280 CONTINUE
+ K(IT,1)=3
+C...f -> f + g (gamma).
+ IF(IABS(KFLB).LE.20.AND.IABS(KFLS(JT+2)).LE.20) THEN
+ K(IT,2)=21
+ IF(IABS(KFLB).GE.11) K(IT,2)=22
+C...f -> g (gamma, W+-) + f.
+ ELSEIF(IABS(KFLB).LE.20.AND.IABS(KFLS(JT+2)).GT.20) THEN
+ K(IT,2)=KFLB
+ IF(KFLS(JT+2).EQ.24) THEN
+ K(IT,2)=-12
+ ELSEIF(KFLS(JT+2).EQ.-24) THEN
+ K(IT,2)=12
+ ENDIF
+C...g (gamma) -> f + fbar, g + g.
+ ELSE
+ K(IT,2)=-KFLS(JT+2)
+ IF(KFLS(JT+2).GT.20) K(IT,2)=KFLS(JT+2)
+ ENDIF
+ P(IT,5)=PYMASS(K(IT,2))
+ IF(DMSMA.LE.P(IT,5)**2) GOTO 100
+ IF(MSTP(63).GE.1.AND.MCE.EQ.1) THEN
+ MSTJ48=MSTJ(48)
+ PARJ85=PARJ(85)
+ P(IT,4)=(DSHZ-DSH-P(IT,5)**2)/DSHR
+ P(IT,3)=SQRT(P(IT,4)**2-P(IT,5)**2)
+ IF(MSTP(63).EQ.1) THEN
+ Q2TIM=DMSMA
+ ELSEIF(MSTP(63).EQ.2) THEN
+ Q2TIM=MIN(DMSMA,PARP(71)*Q2S(JT))
+ ELSE
+ Q2TIM=DMSMA
+ MSTJ(48)=1
+ IF(IKIN.EQ.0) DPT2=DMSMA*(DSHZ+DQ2(3))/(DSH+DQ2(JT))
+ IF(IKIN.EQ.1) DPT2=DMSMA*(0.5D0*DPD(1)*DPD(2)+0.5D0*DPD(3)*
+ & DPD(4)-DQ2(JR)*(DQ2(JT)+DQ2(3)))/(4D0*DSH*DPC(3)**2)
+ PARJ(85)=SQRT(MAX(0D0,DPT2))*
+ & (1D0/P(IT,4)+1D0/P(IS(JT),4))
+ ENDIF
+ CALL PYSHOW(IT,0,SQRT(Q2TIM))
+ MSTJ(48)=MSTJ48
+ PARJ(85)=PARJ85
+ IF(N.GE.IT+1) P(IT,5)=P(IT+1,5)
+ ENDIF
+
+C...Reconstruct kinematics of branching: timelike parton shower.
+ DMS=P(IT,5)**2
+ IF(IKIN.EQ.0) DPT2=(DMSMA-DMS)*(DSHZ+DQ2(3))/(DSH+DQ2(JT))
+ IF(IKIN.EQ.1) DPT2=(DMSMA-DMS)*(0.5D0*DPD(1)*DPD(2)+
+ & 0.5D0*DPD(3)*DPD(4)-DQ2(JR)*(DQ2(JT)+DQ2(3)+DMS))/
+ & (4D0*DSH*DPC(3)**2)
+ IF(DPT2.LT.0D0) GOTO 100
+ DPB(1)=(0.5D0*DPD(2)-DPC(JR)*(DSHZ+DQ2(JR)-DQ2(JT)-DMS)/
+ & DSHR)/DPC(3)-DPC(3)
+ P(IT,1)=SQRT(DPT2)
+ P(IT,3)=DPB(1)*(-1)**(JT+1)
+ P(IT,4)=SQRT(DPT2+DPB(1)**2+DMS)
+ IF(N.GE.IT+1) THEN
+ DPB(1)=SQRT(DPB(1)**2+DPT2)
+ DPB(2)=SQRT(DPB(1)**2+DMS)
+ DPB(3)=P(IT+1,3)
+ DPB(4)=SQRT(DPB(3)**2+DMS)
+ DBEZ=(DPB(4)*DPB(1)-DPB(3)*DPB(2))/(DPB(4)*DPB(2)-DPB(3)*
+ & DPB(1))
+ CALL PYROBO(IT+1,N,0D0,0D0,0D0,0D0,DBEZ)
+ THE=PYANGL(P(IT,3),P(IT,1))
+ CALL PYROBO(IT+1,N,THE,0D0,0D0,0D0,0D0)
+ ENDIF
+
+C...Reconstruct kinematics of branching: spacelike parton.
+ DO 290 J=1,5
+ K(N+1,J)=0
+ P(N+1,J)=0D0
+ V(N+1,J)=0D0
+ 290 CONTINUE
+ K(N+1,1)=14
+ K(N+1,2)=KFLB
+ P(N+1,1)=P(IT,1)
+ P(N+1,3)=P(IT,3)+P(IS(JT),3)
+ P(N+1,4)=P(IT,4)+P(IS(JT),4)
+ P(N+1,5)=-SQRT(DQ2(3))
+
+C...Define colour flow of branching.
+ K(IS(JT),3)=N+1
+ K(IT,3)=N+1
+ IM1=N+1
+ IM2=N+1
+C...f -> f + gamma (Z, W).
+ IF(IABS(K(IT,2)).GE.22) THEN
+ K(IT,1)=1
+ ID1=IS(JT)
+ ID2=IS(JT)
+C...f -> gamma (Z, W) + f.
+ ELSEIF(IABS(K(IS(JT),2)).GE.22) THEN
+ ID1=IT
+ ID2=IT
+C...gamma -> q + qbar, g + g.
+ ELSEIF(K(N+1,2).EQ.22) THEN
+ ID1=IS(JT)
+ ID2=IT
+ IM1=ID2
+ IM2=ID1
+C...q -> q + g.
+ ELSEIF(K(N+1,2).GT.0.AND.K(N+1,2).NE.21.AND.K(IT,2).EQ.21) THEN
+ ID1=IT
+ ID2=IS(JT)
+C...q -> g + q.
+ ELSEIF(K(N+1,2).GT.0.AND.K(N+1,2).NE.21) THEN
+ ID1=IS(JT)
+ ID2=IT
+C...qbar -> qbar + g.
+ ELSEIF(K(N+1,2).LT.0.AND.K(IT,2).EQ.21) THEN
+ ID1=IS(JT)
+ ID2=IT
+C...qbar -> g + qbar.
+ ELSEIF(K(N+1,2).LT.0) THEN
+ ID1=IT
+ ID2=IS(JT)
+C...g -> g + g; g -> q + qbar.
+ ELSEIF((K(IT,2).EQ.21.AND.PYR(0).GT.0.5D0).OR.K(IT,2).LT.0) THEN
+ ID1=IS(JT)
+ ID2=IT
+ ELSE
+ ID1=IT
+ ID2=IS(JT)
+ ENDIF
+ IF(IM1.EQ.N+1) K(IM1,4)=K(IM1,4)+ID1
+ IF(IM2.EQ.N+1) K(IM2,5)=K(IM2,5)+ID2
+ K(ID1,4)=K(ID1,4)+MSTU(5)*IM1
+ K(ID2,5)=K(ID2,5)+MSTU(5)*IM2
+ IF(ID1.NE.ID2) THEN
+ K(ID1,5)=K(ID1,5)+MSTU(5)*ID2
+ K(ID2,4)=K(ID2,4)+MSTU(5)*ID1
+ ENDIF
+ N=N+1
+
+C...Boost to new CM-frame.
+ DBSVX=(P(N,1)+P(IS(JR),1))/(P(N,4)+P(IS(JR),4))
+ DBSVZ=(P(N,3)+P(IS(JR),3))/(P(N,4)+P(IS(JR),4))
+ IF(DBSVX**2+DBSVZ**2.GE.1D0) GOTO 100
+ CALL PYROBO(NS+1,N,0D0,0D0,-DBSVX,0D0,-DBSVZ)
+ IR=N+(JT-1)*(IS(1)-N)
+ CALL PYROBO(NS+1,N,-PYANGL(P(IR,3),P(IR,1)),PARU(2)*PYR(0),
+ & 0D0,0D0,0D0)
+ ENDIF
+
+C...Update kinematics variables.
+ IS(JT)=N
+ DQ2(JT)=Q2B
+ IF(MSTP(62).GE.3) THE2(JT)=THE2T
+ DSH=DSHZ
+
+C...Save quantities; loop back.
+ Q2S(JT)=Q2B
+ IF((MCEV.EQ.1.AND.Q2B.GE.0.25D0*Q2MNC).OR.
+ &(MEEV.EQ.1.AND.Q2B.GE.Q2MNE)) THEN
+ KFLS(JT+2)=KFLS(JT)
+ KFLS(JT)=KFLA
+ XS(JT)=XA
+ ZS(JT)=Z
+ DO 300 KFL=-25,25
+ XFS(JT,KFL)=XFA(KFL)
+ 300 CONTINUE
+ TEVCSV(JT)=TEVCB
+ TEVESV(JT)=TEVEB
+ ELSE
+ MORE(JT)=0
+ IF(JT.EQ.1) IPU1=N
+ IF(JT.EQ.2) IPU2=N
+ ENDIF
+ IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
+ CALL PYERRM(11,'(PYSSPA:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) N=NS
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(MORE(1).EQ.1.OR.MORE(2).EQ.1) GOTO 150
+
+C...Boost hard scattering partons to frame of shower initiators.
+ DO 310 J=1,3
+ ROBO(J+2)=(P(NS+1,J)+P(NS+2,J))/(P(NS+1,4)+P(NS+2,4))
+ 310 CONTINUE
+ K(N+2,1)=1
+ DO 320 J=1,5
+ P(N+2,J)=P(NS+1,J)
+ 320 CONTINUE
+ ROBOT=ROBO(3)**2+ROBO(4)**2+ROBO(5)**2
+ IF(ROBOT.GE.0.999999D0) THEN
+ ROBOT=1.00001D0*SQRT(ROBOT)
+ ROBO(3)=ROBO(3)/ROBOT
+ ROBO(4)=ROBO(4)/ROBOT
+ ROBO(5)=ROBO(5)/ROBOT
+ ENDIF
+ CALL PYROBO(N+2,N+2,0D0,0D0,-ROBO(3),-ROBO(4),-ROBO(5))
+ ROBO(2)=PYANGL(P(N+2,1),P(N+2,2))
+ ROBO(1)=PYANGL(P(N+2,3),SQRT(P(N+2,1)**2+P(N+2,2)**2))
+ CALL PYROBO(MINT(83)+5,NS,ROBO(1),ROBO(2),ROBO(3),ROBO(4),
+ &ROBO(5))
+
+C...Store user information. Reset Lambda value.
+ K(IPU1,3)=MINT(83)+3
+ K(IPU2,3)=MINT(83)+4
+ DO 330 JT=1,2
+ MINT(12+JT)=KFLS(JT)
+ VINT(140+JT)=XS(JT)
+ IF(MINT(18+JT).EQ.1) VINT(140+JT)=VINT(154+JT)*XS(JT)
+ 330 CONTINUE
+ PARU(112)=ALAMS
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRESD
+C...Allows resonances to decay (including parton showers for hadronic
+C...channels).
+
+ SUBROUTINE PYRESD(IRES)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
+ &/PYINT1/,/PYINT2/,/PYINT4/
+C...Local arrays and complex and character variables.
+ DIMENSION IREF(50,8),KDCY(3),KFL1(3),KFL2(3),KFL3(3),KEQL(3),
+ &KCQM(3),KCQ1(3),KCQ2(3),KCQ3(3),NSD(3),PMMN(3),ILIN(6),
+ &HGZ(3,3),COUP(6,4),CORL(2,2,2),PK(6,4),PKK(6,6),CTHE(3),
+ &PHI(3),WDTP(0:200),WDTE(0:200,0:5),DBEZQQ(3),DPMO(5),XM(5)
+ COMPLEX FGK,HA(6,6),HC(6,6)
+ REAL TIR,UIR
+ CHARACTER CODE*9,MASS*9
+
+C...The F, Xi and Xj functions of Gunion and Kunszt
+C...(Phys. Rev. D33, 665, plus errata from the authors).
+ FGK(I1,I2,I3,I4,I5,I6)=4.*HA(I1,I3)*HC(I2,I6)*(HA(I1,I5)*
+ &HC(I1,I4)+HA(I3,I5)*HC(I3,I4))
+ DIGK(DT,DU)=-4D0*D34*D56+DT*(3D0*DT+4D0*DU)+DT**2*(DT*DU/
+ &(D34*D56)-2D0*(1D0/D34+1D0/D56)*(DT+DU)+2D0*(D34/D56+D56/D34))
+ DJGK(DT,DU)=8D0*(D34+D56)**2-8D0*(D34+D56)*(DT+DU)-6D0*DT*DU-
+ &2D0*DT*DU*(DT*DU/(D34*D56)-2D0*(1D0/D34+1D0/D56)*(DT+DU)+
+ &2D0*(D34/D56+D56/D34))
+
+C...Some general constants.
+ XW=PARU(102)
+ XWV=XW
+ IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
+ XW1=1D0-XW
+ SQMZ=PMAS(23,1)**2
+ GMMZ=PMAS(23,1)*PMAS(23,2)
+ SQMW=PMAS(24,1)**2
+ GMMW=PMAS(24,1)*PMAS(24,2)
+ SH=VINT(44)
+
+C...Reset original resonance configuration.
+ DO 100 JT=1,8
+ IREF(1,JT)=0
+ 100 CONTINUE
+
+C...Define initial one, two or three objects for subprocess.
+ IF(IRES.EQ.0) THEN
+ ISUB=MINT(1)
+ IF(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.3) THEN
+ IREF(1,1)=MINT(84)+2+ISET(ISUB)
+ IREF(1,4)=MINT(83)+6+ISET(ISUB)
+ ELSEIF(ISET(ISUB).EQ.2.OR.ISET(ISUB).EQ.4) THEN
+ IREF(1,1)=MINT(84)+1+ISET(ISUB)
+ IREF(1,2)=MINT(84)+2+ISET(ISUB)
+ IREF(1,4)=MINT(83)+5+ISET(ISUB)
+ IREF(1,5)=MINT(83)+6+ISET(ISUB)
+ ELSEIF(ISET(ISUB).EQ.5) THEN
+ IREF(1,1)=MINT(84)+3
+ IREF(1,2)=MINT(84)+4
+ IREF(1,3)=MINT(84)+5
+ IREF(1,4)=MINT(83)+7
+ IREF(1,5)=MINT(83)+8
+ IREF(1,6)=MINT(83)+9
+ ENDIF
+
+C...Define original resonance for odd cases.
+ ELSE
+ ISUB=0
+ IREF(1,1)=IRES
+ ENDIF
+
+C...Check if initial resonance has been moved (in resonance + jet).
+ DO 120 JT=1,3
+ IF(IREF(1,JT).GT.0) THEN
+ IF(K(IREF(1,JT),1).GT.10) THEN
+ KFA=IABS(K(IREF(1,JT),2))
+ IF(KFA.GE.6.AND.KCHG(PYCOMP(KFA),2).NE.0) THEN
+ DO 110 I=IREF(1,JT)+1,N
+ IF(K(I,1).LE.10.AND.K(I,2).EQ.K(IREF(1,JT),2))
+ & IREF(1,JT)=I
+ 110 CONTINUE
+ ELSE
+ KDA=MOD(K(IREF(1,JT),4),MSTU(4))
+ IF(MWID(PYCOMP(KFA)).NE.0.AND.KDA.GT.1) IREF(1,JT)=KDA
+ ENDIF
+ ENDIF
+ ENDIF
+ 120 CONTINUE
+
+C...Loop over decay history.
+ NP=1
+ IP=0
+ 130 IP=IP+1
+ NINH=0
+ JTMAX=2
+ IF(IREF(IP,2).EQ.0) JTMAX=1
+ IF(IREF(IP,3).NE.0) JTMAX=3
+ IT4=0
+ NSAV=N
+
+C...Start treatment of one, two or three resonances in parallel.
+ 140 N=NSAV
+ DO 220 JT=1,JTMAX
+ ID=IREF(IP,JT)
+ KDCY(JT)=0
+ KFL1(JT)=0
+ KFL2(JT)=0
+ KFL3(JT)=0
+ KEQL(JT)=0
+ NSD(JT)=ID
+
+C...Check whether particle can/is allowed to decay.
+ IF(ID.EQ.0) GOTO 210
+ KFA=IABS(K(ID,2))
+ KCA=PYCOMP(KFA)
+ IF(MWID(KCA).EQ.0) GOTO 210
+ IF(K(ID,1).GT.10.OR.MDCY(KCA,1).EQ.0) GOTO 210
+ IF(KFA.EQ.6.OR.KFA.EQ.7.OR.KFA.EQ.8.OR.KFA.EQ.17.OR.
+ & KFA.EQ.18) IT4=IT4+1
+ K(ID,4)=MSTU(5)*(K(ID,4)/MSTU(5))
+ K(ID,5)=MSTU(5)*(K(ID,5)/MSTU(5))
+
+C...Info for selection of decay channel: sign, pairings.
+ IF(KCHG(KCA,3).EQ.0) THEN
+ IPM=2
+ ELSE
+ IPM=(5-ISIGN(1,K(ID,2)))/2
+ ENDIF
+ KFB=0
+ IF(JTMAX.EQ.2) THEN
+ KFB=IABS(K(IREF(IP,3-JT),2))
+ ELSEIF(JTMAX.EQ.3) THEN
+ JT2=JT+1-3*(JT/3)
+ KFB=IABS(K(IREF(IP,JT2),2))
+ IF(KFB.NE.KFA) THEN
+ JT2=JT+2-3*((JT+1)/3)
+ KFB=IABS(K(IREF(IP,JT2),2))
+ ENDIF
+ ENDIF
+
+C...Select decay channel.
+ IF(ISUB.EQ.1.OR.ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.
+ & ISUB.EQ.30.OR.ISUB.EQ.35.OR.ISUB.EQ.141) MINT(61)=1
+ CALL PYWIDT(KFA,P(ID,5)**2,WDTP,WDTE)
+ WDTE0S=WDTE(0,1)+WDTE(0,IPM)+WDTE(0,4)
+ IF(KFB.EQ.KFA) WDTE0S=WDTE0S+WDTE(0,5)
+ IF(WDTE0S.LE.0D0) GOTO 210
+ RKFL=WDTE0S*PYR(0)
+ IDL=0
+ 150 IDL=IDL+1
+ IDC=IDL+MDCY(KCA,2)-1
+ RKFL=RKFL-(WDTE(IDL,1)+WDTE(IDL,IPM)+WDTE(IDL,4))
+ IF(KFB.EQ.KFA) RKFL=RKFL-WDTE(IDL,5)
+ IF(IDL.LT.MDCY(KCA,3).AND.RKFL.GT.0D0) GOTO 150
+
+C...Read out flavours and colour charges of decay channel chosen.
+ KCQM(JT)=KCHG(KCA,2)*ISIGN(1,K(ID,2))
+ IF(KCQM(JT).EQ.-2) KCQM(JT)=2
+ KFL1(JT)=KFDP(IDC,1)*ISIGN(1,K(ID,2))
+ KFC1A=PYCOMP(IABS(KFL1(JT)))
+ IF(KCHG(KFC1A,3).EQ.0) KFL1(JT)=IABS(KFL1(JT))
+ KCQ1(JT)=KCHG(KFC1A,2)*ISIGN(1,KFL1(JT))
+ IF(KCQ1(JT).EQ.-2) KCQ1(JT)=2
+ KFL2(JT)=KFDP(IDC,2)*ISIGN(1,K(ID,2))
+ KFC2A=PYCOMP(IABS(KFL2(JT)))
+ IF(KCHG(KFC2A,3).EQ.0) KFL2(JT)=IABS(KFL2(JT))
+ KCQ2(JT)=KCHG(KFC2A,2)*ISIGN(1,KFL2(JT))
+ IF(KCQ2(JT).EQ.-2) KCQ2(JT)=2
+ KFL3(JT)=KFDP(IDC,3)*ISIGN(1,K(ID,2))
+ IF(KFL3(JT).NE.0) THEN
+ KFC3A=PYCOMP(IABS(KFL3(JT)))
+ IF(KCHG(KFC3A,3).EQ.0) KFL3(JT)=IABS(KFL3(JT))
+ KCQ3(JT)=KCHG(KFC3A,2)*ISIGN(1,KFL3(JT))
+ IF(KCQ3(JT).EQ.-2) KCQ3(JT)=2
+ ENDIF
+
+C...Set/save further info on channel.
+ KDCY(JT)=1
+ IF(KFB.EQ.KFA) KEQL(JT)=MDME(IDC,1)
+ NSD(JT)=N
+ HGZ(JT,1)=VINT(111)
+ HGZ(JT,2)=VINT(112)
+ HGZ(JT,3)=VINT(114)
+
+C...Select masses; to begin with assume resonances narrow.
+ DO 170 I=1,3
+ P(N+I,5)=0D0
+ PMMN(I)=0D0
+ IF(I.EQ.1) THEN
+ KFLW=IABS(KFL1(JT))
+ KCW=KFC1A
+ ELSEIF(I.EQ.2) THEN
+ KFLW=IABS(KFL2(JT))
+ KCW=KFC2A
+ ELSEIF(I.EQ.3) THEN
+ IF(KFL3(JT).EQ.0) GOTO 170
+ KFLW=IABS(KFL3(JT))
+ KCW=KFC3A
+ ENDIF
+ P(N+I,5)=PMAS(KCW,1)
+CMRENNA++
+C...This prevents SUSY/t particles from becoming too light.
+ IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
+ PMMN(I)=PMAS(KCW,1)
+ DO 160 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
+ IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
+ PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
+ & PMAS(PYCOMP(KFDP(IDC,2)),1)
+ IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
+ & PMAS(PYCOMP(KFDP(IDC,3)),1)
+ PMMN(I)=MIN(PMMN(I),PMSUM)
+ ENDIF
+ 160 CONTINUE
+CMRENNA--
+ ELSEIF(KFLW.EQ.6) THEN
+ PMMN(I)=PMAS(24,1)+PMAS(5,1)
+ ENDIF
+ 170 CONTINUE
+
+C...Check which two out of three are widest.
+ IWID1=1
+ IWID2=2
+ PWID1=PMAS(KFC1A,2)
+ PWID2=PMAS(KFC2A,2)
+ KFLW1=IABS(KFL1(JT))
+ KFLW2=IABS(KFL2(JT))
+ IF(KFL3(JT).NE.0) THEN
+ PWID3=PMAS(KFC3A,2)
+ IF(PWID3.GT.PWID1.AND.PWID2.GE.PWID1) THEN
+ IWID1=3
+ PWID1=PWID3
+ KFLW1=IABS(KFL3(JT))
+ ELSEIF(PWID3.GT.PWID2) THEN
+ IWID2=3
+ PWID2=PWID3
+ KFLW2=IABS(KFL3(JT))
+ ENDIF
+ ENDIF
+
+C...If all narrow then only check that masses consistent.
+ IF(MSTP(42).LE.0.OR.(PWID1.LT.PARP(41).AND.
+ & PWID2.LT.PARP(41))) THEN
+CMRENNA++
+C....Handle near degeneracy cases.
+ IF(KFA/KSUSY1.EQ.1.OR.KFA/KSUSY1.EQ.2) THEN
+ IF(P(N+1,5)+P(N+2,5)+P(N+3,5).GT.P(ID,5)) THEN
+ P(N+1,5)=P(ID,5)-P(N+2,5)-0.5D0
+ IF(P(N+1,5).LT.0D0) P(N+1,5)=0D0
+ ENDIF
+ ENDIF
+CMRENNA--
+ IF(P(N+1,5)+P(N+2,5)+P(N+3,5)+PARJ(64).GT.P(ID,5)) THEN
+ CALL PYERRM(13,'(PYRESD:) daughter masses too large')
+ MINT(51)=1
+ RETURN
+ ENDIF
+
+C...For three wide resonances select narrower of three
+C...according to BW decoupled from rest.
+ ELSE
+ PMTOT=P(ID,5)
+ IF(KFL3(JT).NE.0) THEN
+ IWID3=6-IWID1-IWID2
+ KFLW3=IABS(KFL1(JT))+IABS(KFL2(JT))+IABS(KFL3(JT))-
+ & KFLW1-KFLW2
+ LOOP=0
+ 180 LOOP=LOOP+1
+ P(N+IWID3,5)=PYMASS(KFLW3)
+ IF(LOOP.LE.10.AND. P(N+IWID3,5).LE.PMMN(IWID3)) GOTO 180
+ PMTOT=PMTOT-P(N+IWID3,5)
+ ENDIF
+C...Select other two correlated within remaining phase space.
+ IF(IP.EQ.1) THEN
+ CKIN45=CKIN(45)
+ CKIN47=CKIN(47)
+ CKIN(45)=MAX(PMMN(IWID1),CKIN(45))
+ CKIN(47)=MAX(PMMN(IWID2),CKIN(47))
+ CALL PYOFSH(2,KFA,KFLW1,KFLW2,PMTOT,P(N+IWID1,5),
+ & P(N+IWID2,5))
+ CKIN(45)=CKIN45
+ CKIN(47)=CKIN47
+ ELSE
+ CKIN(49)=PMMN(IWID1)
+ CKIN(50)=PMMN(IWID2)
+ CALL PYOFSH(5,KFA,KFLW1,KFLW2,PMTOT,P(N+IWID1,5),
+ & P(N+IWID2,5))
+ CKIN(49)=0D0
+ CKIN(50)=0D0
+ ENDIF
+ IF(MINT(51).EQ.1) RETURN
+ ENDIF
+
+C...Begin fill decay products, with colour flow for coloured objects.
+ MSTU10=MSTU(10)
+ MSTU(10)=1
+ MSTU(19)=1
+
+CMRENNA++
+C...1) Three-body decays of SUSY particles (plus special case top).
+ IF(KFL3(JT).NE.0) THEN
+ DO 200 I=N+1,N+3
+ DO 190 J=1,5
+ K(I,J)=0
+ V(I,J)=0D0
+ 190 CONTINUE
+ 200 CONTINUE
+ XM(1)=P(N+1,5)
+ XM(2)=P(N+2,5)
+ XM(3)=P(N+3,5)
+ XM(5)=P(ID,5)
+ CALL PYTBDY(XM)
+ K(N+1,1)=1
+ K(N+1,2)=KFL1(JT)
+ K(N+2,1)=1
+ K(N+2,2)=KFL2(JT)
+ K(N+3,1)=1
+ K(N+3,2)=KFL3(JT)
+
+C...Set colour flow for t -> W + b + Z.
+ IF(KFA.EQ.6) THEN
+ K(N+2,1)=3
+ ISID=4
+ IF(KCQM(JT).EQ.-1) ISID=5
+ IDAU=N+2
+ K(ID,ISID)=K(ID,ISID)+IDAU
+ K(IDAU,ISID)=MSTU(5)*ID
+
+C...Set colour flow in three-body decays - programmed as special cases.
+ ELSEIF(KFC2A.LE.6) THEN
+ K(N+2,1)=3
+ K(N+3,1)=3
+ ISID=4
+ IF(KFL2(JT).LT.0) ISID=5
+ K(N+2,ISID)=MSTU(5)*(N+3)
+ K(N+3,9-ISID)=MSTU(5)*(N+2)
+ ENDIF
+ IF(KFL1(JT).EQ.KSUSY1+21) THEN
+ K(N+1,1)=3
+ K(N+2,1)=3
+ K(N+3,1)=3
+ ISID=4
+ IF(KFL2(JT).LT.0) ISID=5
+ K(N+1,ISID)=MSTU(5)*(N+2)
+ K(N+1,9-ISID)=MSTU(5)*(N+3)
+ K(N+2,ISID)=MSTU(5)*(N+1)
+ K(N+3,9-ISID)=MSTU(5)*(N+1)
+ ENDIF
+ IF(KFA.EQ.KSUSY1+21) THEN
+ K(N+2,1)=3
+ K(N+3,1)=3
+ ISID=4
+ IF(KFL2(JT).LT.0) ISID=5
+ K(ID,ISID)=K(ID,ISID)+(N+2)
+ K(ID,9-ISID)=K(ID,9-ISID)+(N+3)
+ K(N+2,ISID)=MSTU(5)*ID
+ K(N+3,9-ISID)=MSTU(5)*ID
+ ENDIF
+ N=N+3
+CMRENNA--
+
+C...2) Everything else two-body decay.
+ ELSE
+ CALL PY2ENT(N+1,KFL1(JT),KFL2(JT),P(ID,5))
+C...First set colour flow as if mother colour singlet.
+ IF(KCQ1(JT).NE.0) THEN
+ K(N-1,1)=3
+ IF(KCQ1(JT).NE.-1) K(N-1,4)=MSTU(5)*N
+ IF(KCQ1(JT).NE.1) K(N-1,5)=MSTU(5)*N
+ ENDIF
+ IF(KCQ2(JT).NE.0) THEN
+ K(N,1)=3
+ IF(KCQ2(JT).NE.-1) K(N,4)=MSTU(5)*(N-1)
+ IF(KCQ2(JT).NE.1) K(N,5)=MSTU(5)*(N-1)
+ ENDIF
+C...Then redirect colour flow if mother (anti)triplet.
+ IF(KCQM(JT).EQ.0) THEN
+ ELSEIF(KCQM(JT).NE.2) THEN
+ ISID=4
+ IF(KCQM(JT).EQ.-1) ISID=5
+ IDAU=N-1
+ IF(KCQ1(JT).EQ.0.OR.KCQ2(JT).EQ.2) IDAU=N
+ K(ID,ISID)=K(ID,ISID)+IDAU
+ K(IDAU,ISID)=MSTU(5)*ID
+C...Then redirect colour flow if mother octet.
+ ELSEIF(KCQ1(JT).EQ.0.OR.KCQ2(JT).EQ.0) THEN
+ IDAU=N-1
+ IF(KCQ1(JT).EQ.0) IDAU=N
+ K(ID,4)=K(ID,4)+IDAU
+ K(ID,5)=K(ID,5)+IDAU
+ K(IDAU,4)=MSTU(5)*ID
+ K(IDAU,5)=MSTU(5)*ID
+ ELSE
+ ISID=4
+ IF(KCQ1(JT).EQ.-1) ISID=5
+ IF(KCQ1(JT).EQ.2) ISID=INT(4.5D0+PYR(0))
+ K(ID,ISID)=K(ID,ISID)+(N-1)
+ K(ID,9-ISID)=K(ID,9-ISID)+N
+ K(N-1,ISID)=MSTU(5)*ID
+ K(N,9-ISID)=MSTU(5)*ID
+ ENDIF
+ ENDIF
+
+C...End loop over resonances for daughter flavour and mass selection.
+ MSTU(10)=MSTU10
+ 210 IF(MWID(KCA).NE.0.AND.(KFL1(JT).EQ.0.OR.KFL3(JT).NE.0))
+ & NINH=NINH+1
+ IF(IRES.GT.0.AND.MWID(KCA).NE.0.AND.KFL1(JT).EQ.0) THEN
+ WRITE(CODE,'(I9)') K(ID,2)
+ WRITE(MASS,'(F9.3)') P(ID,5)
+ CALL PYERRM(3,'(PYRESD:) Failed to decay particle'//
+ & CODE//' with mass'//MASS)
+ MINT(51)=1
+ RETURN
+ ENDIF
+ 220 CONTINUE
+
+C...Check for allowed combinations. Skip if no decays.
+ IF(JTMAX.EQ.1) THEN
+ IF(KDCY(1).EQ.0) GOTO 560
+ ELSEIF(JTMAX.EQ.2) THEN
+ IF(KDCY(1).EQ.0.AND.KDCY(2).EQ.0) GOTO 560
+ IF(KEQL(1).EQ.4.AND.KEQL(2).EQ.4) GOTO 140
+ IF(KEQL(1).EQ.5.AND.KEQL(2).EQ.5) GOTO 140
+ ELSEIF(JTMAX.EQ.3) THEN
+ IF(KDCY(1).EQ.0.AND.KDCY(2).EQ.0.AND.KDCY(3).EQ.0) GOTO 560
+ IF(KEQL(1).EQ.4.AND.KEQL(2).EQ.4) GOTO 140
+ IF(KEQL(1).EQ.4.AND.KEQL(3).EQ.4) GOTO 140
+ IF(KEQL(2).EQ.4.AND.KEQL(3).EQ.4) GOTO 140
+ IF(KEQL(1).EQ.5.AND.KEQL(2).EQ.5) GOTO 140
+ IF(KEQL(1).EQ.5.AND.KEQL(3).EQ.5) GOTO 140
+ IF(KEQL(2).EQ.5.AND.KEQL(3).EQ.5) GOTO 140
+ ENDIF
+
+C...Special case: matrix element option for Z0 decay to quarks.
+ IF(MSTP(48).EQ.1.AND.ISUB.EQ.1.AND.JTMAX.EQ.1.AND.
+ &IABS(MINT(11)).EQ.11.AND.IABS(KFL1(1)).LE.5) THEN
+
+C...Check consistency of MSTJ options set.
+ IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN
+ CALL PYERRM(6,
+ & '(PYRESD:) MSTJ(109) value requires MSTJ(110) = 1')
+ MSTJ(110)=1
+ ENDIF
+ IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN
+ CALL PYERRM(6,
+ & '(PYRESD) MSTJ(109) value requires MSTJ(111) = 0')
+ MSTJ(111)=0
+ ENDIF
+
+C...Select alpha_strong behaviour.
+ MST111=MSTU(111)
+ PAR112=PARU(112)
+ MSTU(111)=MSTJ(108)
+ IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
+ & MSTU(111)=1
+ PARU(112)=PARJ(121)
+ IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
+
+C...Find axial fraction in total cross section for scalar gluon model.
+ PARJ(171)=0D0
+ IF((IABS(MSTJ(101)).EQ.1.AND.MSTJ(109).EQ.1).OR.
+ & (MSTJ(101).EQ.5.AND.MSTJ(49).EQ.1)) THEN
+ POLL=1D0-PARJ(131)*PARJ(132)
+ SFF=1D0/(16D0*XW*XW1)
+ SFW=P(ID,5)**4/((P(ID,5)**2-PARJ(123)**2)**2+
+ & (PARJ(123)*PARJ(124))**2)
+ SFI=SFW*(1D0-(PARJ(123)/P(ID,5))**2)
+ VE=4D0*XW-1D0
+ HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))
+ HF1W=SFW*SFF**2*((VE**2+1D0)*POLL+2D0*VE*
+ & (PARJ(132)-PARJ(131)))
+ KFLC=IABS(KFL1(1))
+ PMQ=PYMASS(KFLC)
+ QF=KCHG(KFLC,1)/3D0
+ VQ=1D0
+ IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,
+ & 1D0-(2D0*PMQ/P(ID,5))**2))
+ VF=SIGN(1D0,QF)-4D0*QF*XW
+ RFV=0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-2D0*QF*VF*HF1I+
+ & VF**2*HF1W)+VQ**3*HF1W
+ IF(RFV.GT.0D0) PARJ(171)=MIN(1D0,VQ**3*HF1W/RFV)
+ ENDIF
+
+C...Choice of jet configuration.
+ CALL PYXJET(P(ID,5),NJET,CUT)
+ KFLC=IABS(KFL1(1))
+ KFLN=21
+ IF(NJET.EQ.4) THEN
+ CALL PYX4JT(NJET,CUT,KFLC,P(ID,5),KFLN,X1,X2,X4,X12,X14)
+ ELSEIF(NJET.EQ.3) THEN
+ CALL PYX3JT(NJET,CUT,KFLC,P(ID,5),X1,X3)
+ ELSE
+ MSTJ(120)=1
+ ENDIF
+
+C...Fill jet configuration; return if incorrect kinematics.
+ NC=N-2
+ IF(NJET.EQ.2.AND.MSTJ(101).NE.5) THEN
+ CALL PY2ENT(NC+1,KFLC,-KFLC,P(ID,5))
+ ELSEIF(NJET.EQ.2) THEN
+ CALL PY2ENT(-(NC+1),KFLC,-KFLC,P(ID,5))
+ ELSEIF(NJET.EQ.3) THEN
+ CALL PY3ENT(NC+1,KFLC,21,-KFLC,P(ID,5),X1,X3)
+ ELSEIF(KFLN.EQ.21) THEN
+ CALL PY4ENT(NC+1,KFLC,KFLN,KFLN,-KFLC,P(ID,5),X1,X2,X4,
+ & X12,X14)
+ ELSE
+ CALL PY4ENT(NC+1,KFLC,-KFLN,KFLN,-KFLC,P(ID,5),X1,X2,X4,
+ & X12,X14)
+ ENDIF
+ IF(MSTU(24).NE.0) THEN
+ MINT(51)=1
+ MSTU(111)=MST111
+ PARU(112)=PAR112
+ RETURN
+ ENDIF
+
+C...Angular orientation according to matrix element.
+ IF(MSTJ(106).EQ.1) THEN
+ CALL PYXDIF(NC,NJET,KFLC,P(ID,5),CHI,THE,PHI)
+ IF(MINT(11).LT.0) THE=PARU(1)-THE
+ CTHE(1)=COS(THE)
+ CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
+ CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
+ ENDIF
+
+C...Boost partons to Z0 rest frame.
+ CALL PYROBO(NC+1,N,0D0,0D0,P(ID,1)/P(ID,4),
+ & P(ID,2)/P(ID,4),P(ID,3)/P(ID,4))
+
+C...Mark decayed resonance and add documentation lines,
+ K(ID,1)=K(ID,1)+10
+ IDOC=MINT(83)+MINT(4)
+ DO 240 I=NC+1,N
+ I1=MINT(83)+MINT(4)+1
+ K(I,3)=I1
+ IF(MSTP(128).GE.1) K(I,3)=ID
+ IF(MSTP(128).LE.1.AND.MINT(4).LT.MSTP(126)) THEN
+ MINT(4)=MINT(4)+1
+ K(I1,1)=21
+ K(I1,2)=K(I,2)
+ K(I1,3)=IREF(IP,4)
+ DO 230 J=1,5
+ P(I1,J)=P(I,J)
+ 230 CONTINUE
+ ENDIF
+ 240 CONTINUE
+
+C...Generate parton shower.
+ IF(MSTJ(101).EQ.5) CALL PYSHOW(N-1,N,P(ID,5))
+
+C... End special case for Z0: skip ahead.
+ MSTU(111)=MST111
+ PARU(112)=PAR112
+ GOTO 550
+ ENDIF
+
+C...Order incoming partons and outgoing resonances.
+ IF(JTMAX.EQ.2.AND.MSTP(47).GE.1.AND.NINH.EQ.0) THEN
+ ILIN(1)=MINT(84)+1
+ IF(K(MINT(84)+1,2).GT.0) ILIN(1)=MINT(84)+2
+ IF(K(ILIN(1),2).EQ.21) ILIN(1)=2*MINT(84)+3-ILIN(1)
+ ILIN(2)=2*MINT(84)+3-ILIN(1)
+ IMIN=1
+ IF(IREF(IP,7).EQ.25.OR.IREF(IP,7).EQ.35.OR.IREF(IP,7)
+ & .EQ.36) IMIN=3
+ IMAX=2
+ IORD=1
+ IF(K(IREF(IP,1),2).EQ.23) IORD=2
+ IF(K(IREF(IP,1),2).EQ.24.AND.K(IREF(IP,2),2).EQ.-24) IORD=2
+ IAKIPD=IABS(K(IREF(IP,IORD),2))
+ IF(IAKIPD.EQ.25.OR.IAKIPD.EQ.35.OR.IAKIPD.EQ.36) IORD=3-IORD
+ IF(KDCY(IORD).EQ.0) IORD=3-IORD
+
+C...Order decay products of resonances.
+ DO 250 JT=IORD,3-IORD,3-2*IORD
+ IF(KDCY(JT).EQ.0) THEN
+ ILIN(IMAX+1)=NSD(JT)
+ IMAX=IMAX+1
+ ELSEIF(K(NSD(JT)+1,2).GT.0) THEN
+ ILIN(IMAX+1)=N+2*JT-1
+ ILIN(IMAX+2)=N+2*JT
+ IMAX=IMAX+2
+ K(N+2*JT-1,2)=K(NSD(JT)+1,2)
+ K(N+2*JT,2)=K(NSD(JT)+2,2)
+ ELSE
+ ILIN(IMAX+1)=N+2*JT
+ ILIN(IMAX+2)=N+2*JT-1
+ IMAX=IMAX+2
+ K(N+2*JT-1,2)=K(NSD(JT)+1,2)
+ K(N+2*JT,2)=K(NSD(JT)+2,2)
+ ENDIF
+ 250 CONTINUE
+
+C...Find charge, isospin, left- and righthanded couplings.
+ DO 270 I=IMIN,IMAX
+ DO 260 J=1,4
+ COUP(I,J)=0D0
+ 260 CONTINUE
+ KFA=IABS(K(ILIN(I),2))
+ IF(KFA.EQ.0.OR.KFA.GT.20) GOTO 270
+ COUP(I,1)=KCHG(KFA,1)/3D0
+ COUP(I,2)=(-1)**MOD(KFA,2)
+ COUP(I,4)=-2D0*COUP(I,1)*XWV
+ COUP(I,3)=COUP(I,2)+COUP(I,4)
+ 270 CONTINUE
+
+C...Full propagator dependence and flavour correlations for 2 gamma*/Z.
+ IF(ISUB.EQ.22) THEN
+ DO 300 I=3,5,2
+ I1=IORD
+ IF(I.EQ.5) I1=3-IORD
+ DO 290 J1=1,2
+ DO 280 J2=1,2
+ CORL(I/2,J1,J2)=COUP(1,1)**2*HGZ(I1,1)*COUP(I,1)**2/
+ & 16D0+COUP(1,1)*COUP(1,J1+2)*HGZ(I1,2)*COUP(I,1)*
+ & COUP(I,J2+2)/4D0+COUP(1,J1+2)**2*HGZ(I1,3)*
+ & COUP(I,J2+2)**2
+ 280 CONTINUE
+ 290 CONTINUE
+ 300 CONTINUE
+ COWT12=(CORL(1,1,1)+CORL(1,1,2))*(CORL(2,1,1)+CORL(2,1,2))+
+ & (CORL(1,2,1)+CORL(1,2,2))*(CORL(2,2,1)+CORL(2,2,2))
+ COMX12=(CORL(1,1,1)+CORL(1,1,2)+CORL(1,2,1)+CORL(1,2,2))*
+ & (CORL(2,1,1)+CORL(2,1,2)+CORL(2,2,1)+CORL(2,2,2))
+ IF(COWT12.LT.PYR(0)*COMX12) GOTO 140
+ ENDIF
+ ENDIF
+
+C...Select angular orientation type - Z'/W' only.
+ MZPWP=0
+ IF(ISUB.EQ.141) THEN
+ IF(PYR(0).LT.PARU(130)) MZPWP=1
+ IF(IP.EQ.2) THEN
+ IF(IABS(K(IREF(2,1),2)).EQ.37) MZPWP=2
+ IAKIR=IABS(K(IREF(2,2),2))
+ IF(IAKIR.EQ.25.OR.IAKIR.EQ.35.OR.IAKIR.EQ.36) MZPWP=2
+ ENDIF
+ IF(IP.GE.3) MZPWP=2
+ ELSEIF(ISUB.EQ.142) THEN
+ IF(PYR(0).LT.PARU(136)) MZPWP=1
+ IF(IP.EQ.2) THEN
+ IAKIR=IABS(K(IREF(2,2),2))
+ IF(IAKIR.EQ.25.OR.IAKIR.EQ.35.OR.IAKIR.EQ.36) MZPWP=2
+ ENDIF
+ IF(IP.GE.3) MZPWP=2
+ ENDIF
+
+C...Select random angles (begin of weighting procedure).
+ 310 DO 320 JT=1,JTMAX
+ IF(KDCY(JT).EQ.0) GOTO 320
+ IF(JTMAX.EQ.1.AND.ISUB.NE.0) THEN
+ CTHE(JT)=VINT(13)+(VINT(33)-VINT(13)+VINT(34)-VINT(14))*PYR(0)
+ IF(CTHE(JT).GT.VINT(33)) CTHE(JT)=CTHE(JT)+VINT(14)-VINT(33)
+ PHI(JT)=VINT(24)
+ ELSE
+ CTHE(JT)=2D0*PYR(0)-1D0
+ PHI(JT)=PARU(2)*PYR(0)
+ ENDIF
+ 320 CONTINUE
+
+ IF(JTMAX.EQ.2.AND.MSTP(47).GE.1.AND.NINH.EQ.0) THEN
+C...Construct massless four-vectors.
+ DO 340 I=N+1,N+4
+ K(I,1)=1
+ DO 330 J=1,5
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 330 CONTINUE
+ 340 CONTINUE
+ DO 350 JT=1,JTMAX
+ IF(KDCY(JT).EQ.0) GOTO 350
+ ID=IREF(IP,JT)
+ P(N+2*JT-1,3)=0.5D0*P(ID,5)
+ P(N+2*JT-1,4)=0.5D0*P(ID,5)
+ P(N+2*JT,3)=-0.5D0*P(ID,5)
+ P(N+2*JT,4)=0.5D0*P(ID,5)
+ CALL PYROBO(N+2*JT-1,N+2*JT,ACOS(CTHE(JT)),PHI(JT),
+ & P(ID,1)/P(ID,4),P(ID,2)/P(ID,4),P(ID,3)/P(ID,4))
+ 350 CONTINUE
+
+C...Store incoming and outgoing momenta, with random rotation to
+C...avoid accidental zeroes in HA expressions.
+ DO 370 I=1,IMAX
+ K(N+4+I,1)=1
+ P(N+4+I,4)=SQRT(P(ILIN(I),1)**2+P(ILIN(I),2)**2+
+ & P(ILIN(I),3)**2+P(ILIN(I),5)**2)
+ P(N+4+I,5)=P(ILIN(I),5)
+ DO 360 J=1,3
+ P(N+4+I,J)=P(ILIN(I),J)
+ 360 CONTINUE
+ 370 CONTINUE
+ 380 THERR=ACOS(2D0*PYR(0)-1D0)
+ PHIRR=PARU(2)*PYR(0)
+ CALL PYROBO(N+5,N+4+IMAX,THERR,PHIRR,0D0,0D0,0D0)
+ DO 400 I=1,IMAX
+ IF(P(N+4+I,1)**2+P(N+4+I,2)**2.LT.1D-4*P(N+4+I,4)**2) GOTO 380
+ DO 390 J=1,4
+ PK(I,J)=P(N+4+I,J)
+ 390 CONTINUE
+ 400 CONTINUE
+
+C...Calculate internal products.
+ IF(ISUB.EQ.22.OR.ISUB.EQ.23.OR.ISUB.EQ.25.OR.ISUB.EQ.141.OR.
+ & ISUB.EQ.142) THEN
+ DO 420 I1=IMIN,IMAX-1
+ DO 410 I2=I1+1,IMAX
+ HA(I1,I2)=SNGL(SQRT((PK(I1,4)-PK(I1,3))*(PK(I2,4)+
+ & PK(I2,3))/(1D-20+PK(I1,1)**2+PK(I1,2)**2)))*
+ & CMPLX(SNGL(PK(I1,1)),SNGL(PK(I1,2)))-
+ & SNGL(SQRT((PK(I1,4)+PK(I1,3))*(PK(I2,4)-PK(I2,3))/
+ & (1D-20+PK(I2,1)**2+PK(I2,2)**2)))*
+ & CMPLX(SNGL(PK(I2,1)),SNGL(PK(I2,2)))
+ HC(I1,I2)=CONJG(HA(I1,I2))
+ IF(I1.LE.2) HA(I1,I2)=CMPLX(0.,1.)*HA(I1,I2)
+ IF(I1.LE.2) HC(I1,I2)=CMPLX(0.,1.)*HC(I1,I2)
+ HA(I2,I1)=-HA(I1,I2)
+ HC(I2,I1)=-HC(I1,I2)
+ 410 CONTINUE
+ 420 CONTINUE
+ ENDIF
+ DO 440 I=1,2
+ DO 430 J=1,4
+ PK(I,J)=-PK(I,J)
+ 430 CONTINUE
+ 440 CONTINUE
+ DO 460 I1=IMIN,IMAX-1
+ DO 450 I2=I1+1,IMAX
+ PKK(I1,I2)=2D0*(PK(I1,4)*PK(I2,4)-PK(I1,1)*PK(I2,1)-
+ & PK(I1,2)*PK(I2,2)-PK(I1,3)*PK(I2,3))
+ PKK(I2,I1)=PKK(I1,I2)
+ 450 CONTINUE
+ 460 CONTINUE
+ ENDIF
+
+ KFAGM=IABS(IREF(IP,7))
+ IF(MSTP(47).LE.0.OR.NINH.NE.0) THEN
+C...Isotropic decay selected by user.
+ WT=1D0
+ WTMAX=1D0
+
+ ELSEIF(JTMAX.EQ.3) THEN
+C...Isotropic decay when three mother particles.
+ WT=1D0
+ WTMAX=1D0
+
+ ELSEIF(IT4.GE.1) THEN
+C... Isotropic decay t -> b + W etc for 4th generation q and l.
+ WT=1D0
+ WTMAX=1D0
+
+ ELSEIF(IREF(IP,7).EQ.25.OR.IREF(IP,7).EQ.35.OR.
+ & IREF(IP,7).EQ.36) THEN
+C...Angular weight for h0 -> Z0 + Z0 or W+ + W- -> 4 quarks/leptons.
+ IF(IP.EQ.1) WTMAX=SH**2
+ IF(IP.GE.2) WTMAX=P(IREF(IP,8),5)**4
+ KFA=IABS(K(IREF(IP,1),2))
+ IF(KFA.EQ.23) THEN
+ KFLF1A=IABS(KFL1(1))
+ EF1=KCHG(KFLF1A,1)/3D0
+ AF1=SIGN(1D0,EF1+0.1D0)
+ VF1=AF1-4D0*EF1*XWV
+ KFLF2A=IABS(KFL1(2))
+ EF2=KCHG(KFLF2A,1)/3D0
+ AF2=SIGN(1D0,EF2+0.1D0)
+ VF2=AF2-4D0*EF2*XWV
+ VA12AS=4D0*VF1*AF1*VF2*AF2/((VF1**2+AF1**2)*(VF2**2+AF2**2))
+ WT=8D0*(1D0+VA12AS)*PKK(3,5)*PKK(4,6)+
+ & 8D0*(1D0-VA12AS)*PKK(3,6)*PKK(4,5)
+ ELSEIF(KFA.EQ.24) THEN
+ WT=16D0*PKK(3,5)*PKK(4,6)
+ ELSE
+ WT=WTMAX
+ ENDIF
+
+ ELSEIF((KFAGM.EQ.6.OR.KFAGM.EQ.7.OR.KFAGM.EQ.8.OR.
+ & KFAGM.EQ.17.OR.KFAGM.EQ.18).AND.IABS(K(IREF(IP,1),2)).EQ.24)
+ & THEN
+C...Angular correlation in f -> f' + W -> f' + 2 quarks/leptons.
+ I1=IREF(IP,8)
+ IF(MOD(KFAGM,2).EQ.0) THEN
+ I2=N+1
+ I3=N+2
+ ELSE
+ I2=N+2
+ I3=N+1
+ ENDIF
+ I4=IREF(IP,2)
+ WT=(P(I1,4)*P(I2,4)-P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-
+ & P(I1,3)*P(I2,3))*(P(I3,4)*P(I4,4)-P(I3,1)*P(I4,1)-
+ & P(I3,2)*P(I4,2)-P(I3,3)*P(I4,3))
+ WTMAX=(P(I1,5)**4-P(IREF(IP,1),5)**4)/8D0
+
+ ELSEIF(ISUB.EQ.1) THEN
+C...Angular weight for gamma*/Z0 -> 2 quarks/leptons.
+ EI=KCHG(IABS(MINT(15)),1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ EF=KCHG(IABS(KFL1(1)),1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ RMF=MIN(1D0,4D0*PMAS(IABS(KFL1(1)),1)**2/SH)
+ WT1=EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
+ & (VI**2+AI**2)*VINT(114)*(VF**2+(1D0-RMF)*AF**2)
+ WT2=RMF*(EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
+ & (VI**2+AI**2)*VINT(114)*VF**2)
+ WT3=SQRT(1D0-RMF)*(EI*AI*VINT(112)*EF*AF+
+ & 4D0*VI*AI*VINT(114)*VF*AF)
+ WT=WT1*(1D0+CTHE(1)**2)+WT2*(1D0-CTHE(1)**2)+
+ & 2D0*WT3*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))
+ WTMAX=2D0*(WT1+ABS(WT3))
+
+ ELSEIF(ISUB.EQ.2) THEN
+C...Angular weight for W+/- -> 2 quarks/leptons.
+ WT=(1D0+CTHE(1)*ISIGN(1,MINT(15)*KFL1(1)))**2
+ WTMAX=4D0
+
+ ELSEIF(ISUB.EQ.15.OR.ISUB.EQ.19) THEN
+C...Angular weight for f + fbar -> gluon/gamma + (gamma*/Z0) ->
+C...-> gluon/gamma + 2 quarks/leptons.
+ CLILF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,3)*HGZ(2,2)*COUP(3,1)*COUP(3,3)/4D0+
+ & COUP(1,3)**2*HGZ(2,3)*COUP(3,3)**2
+ CLIRF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,3)*HGZ(2,2)*COUP(3,1)*COUP(3,4)/4D0+
+ & COUP(1,3)**2*HGZ(2,3)*COUP(3,4)**2
+ CRILF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,4)*HGZ(2,2)*COUP(3,1)*COUP(3,3)/4D0+
+ & COUP(1,4)**2*HGZ(2,3)*COUP(3,3)**2
+ CRIRF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,4)*HGZ(2,2)*COUP(3,1)*COUP(3,4)/4D0+
+ & COUP(1,4)**2*HGZ(2,3)*COUP(3,4)**2
+ WT=(CLILF+CRIRF)*(PKK(1,3)**2+PKK(2,4)**2)+
+ & (CLIRF+CRILF)*(PKK(1,4)**2+PKK(2,3)**2)
+ WTMAX=(CLILF+CLIRF+CRILF+CRIRF)*
+ & ((PKK(1,3)+PKK(1,4))**2+(PKK(2,3)+PKK(2,4))**2)
+
+ ELSEIF(ISUB.EQ.16.OR.ISUB.EQ.20) THEN
+C...Angular weight for f + fbar' -> gluon/gamma + W+/- ->
+C...-> gluon/gamma + 2 quarks/leptons.
+ WT=PKK(1,3)**2+PKK(2,4)**2
+ WTMAX=(PKK(1,3)+PKK(1,4))**2+(PKK(2,3)+PKK(2,4))**2
+
+ ELSEIF(ISUB.EQ.22) THEN
+C...Angular weight for f + fbar -> Z0 + Z0 -> 4 quarks/leptons.
+ S34=P(IREF(IP,IORD),5)**2
+ S56=P(IREF(IP,3-IORD),5)**2
+ TI=PKK(1,3)+PKK(1,4)+S34
+ UI=PKK(1,5)+PKK(1,6)+S56
+ TIR=REAL(TI)
+ UIR=REAL(UI)
+ FGK135=ABS(FGK(1,2,3,4,5,6)/TIR+FGK(1,2,5,6,3,4)/UIR)**2
+ FGK145=ABS(FGK(1,2,4,3,5,6)/TIR+FGK(1,2,5,6,4,3)/UIR)**2
+ FGK136=ABS(FGK(1,2,3,4,6,5)/TIR+FGK(1,2,6,5,3,4)/UIR)**2
+ FGK146=ABS(FGK(1,2,4,3,6,5)/TIR+FGK(1,2,6,5,4,3)/UIR)**2
+ FGK253=ABS(FGK(2,1,5,6,3,4)/TIR+FGK(2,1,3,4,5,6)/UIR)**2
+ FGK263=ABS(FGK(2,1,6,5,3,4)/TIR+FGK(2,1,3,4,6,5)/UIR)**2
+ FGK254=ABS(FGK(2,1,5,6,4,3)/TIR+FGK(2,1,4,3,5,6)/UIR)**2
+ FGK264=ABS(FGK(2,1,6,5,4,3)/TIR+FGK(2,1,4,3,6,5)/UIR)**2
+ WT=
+ & CORL(1,1,1)*CORL(2,1,1)*FGK135+CORL(1,1,2)*CORL(2,1,1)*FGK145+
+ & CORL(1,1,1)*CORL(2,1,2)*FGK136+CORL(1,1,2)*CORL(2,1,2)*FGK146+
+ & CORL(1,2,1)*CORL(2,2,1)*FGK253+CORL(1,2,2)*CORL(2,2,1)*FGK263+
+ & CORL(1,2,1)*CORL(2,2,2)*FGK254+CORL(1,2,2)*CORL(2,2,2)*FGK264
+ WTMAX=16D0*((CORL(1,1,1)+CORL(1,1,2))*(CORL(2,1,1)+CORL(2,1,2))+
+ & (CORL(1,2,1)+CORL(1,2,2))*(CORL(2,2,1)+CORL(2,2,2)))*S34*S56*
+ & ((TI**2+UI**2+2D0*SH*(S34+S56))/(TI*UI)-S34*S56*(1D0/TI**2+
+ & 1D0/UI**2))
+
+ ELSEIF(ISUB.EQ.23) THEN
+C...Angular weight for f + fbar' -> Z0 + W+/- -> 4 quarks/leptons.
+ D34=P(IREF(IP,IORD),5)**2
+ D56=P(IREF(IP,3-IORD),5)**2
+ DT=PKK(1,3)+PKK(1,4)+D34
+ DU=PKK(1,5)+PKK(1,6)+D56
+ FACBW=1D0/((SH-SQMW)**2+SQMW*PMAS(24,2)**2)
+ CAWZ=COUP(2,3)/DT-2D0*XW1*COUP(1,2)*(SH-SQMW)*FACBW
+ CBWZ=COUP(1,3)/DU+2D0*XW1*COUP(1,2)*(SH-SQMW)*FACBW
+ FGK135=ABS(REAL(CAWZ)*FGK(1,2,3,4,5,6)+
+ & REAL(CBWZ)*FGK(1,2,5,6,3,4))
+ FGK136=ABS(REAL(CAWZ)*FGK(1,2,3,4,6,5)+
+ & REAL(CBWZ)*FGK(1,2,6,5,3,4))
+ WT=(COUP(5,3)*FGK135)**2+(COUP(5,4)*FGK136)**2
+ WTMAX=4D0*D34*D56*(COUP(5,3)**2+COUP(5,4)**2)*(CAWZ**2*
+ & DIGK(DT,DU)+CBWZ**2*DIGK(DU,DT)+CAWZ*CBWZ*DJGK(DT,DU))
+
+ ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.171.OR.ISUB.EQ.176) THEN
+C...Angular weight for f + fbar -> Z0 + h0 -> 2 quarks/leptons + h0
+C...(or H0, or A0).
+ WT=((COUP(1,3)*COUP(3,3))**2+(COUP(1,4)*COUP(3,4))**2)*
+ & PKK(1,3)*PKK(2,4)+((COUP(1,3)*COUP(3,4))**2+(COUP(1,4)*
+ & COUP(3,3))**2)*PKK(1,4)*PKK(2,3)
+ WTMAX=(COUP(1,3)**2+COUP(1,4)**2)*(COUP(3,3)**2+COUP(3,4)**2)*
+ & (PKK(1,3)+PKK(1,4))*(PKK(2,3)+PKK(2,4))
+
+ ELSEIF(ISUB.EQ.25) THEN
+C...Angular weight for f + fbar -> W+ + W- -> 4 quarks/leptons.
+ D34=P(IREF(IP,IORD),5)**2
+ D56=P(IREF(IP,3-IORD),5)**2
+ DT=PKK(1,3)+PKK(1,4)+D34
+ DU=PKK(1,5)+PKK(1,6)+D56
+ FACBW=1D0/((SH-SQMZ)**2+SQMZ*PMAS(23,2)**2)
+ CDWW=(COUP(1,3)*SQMZ*(SH-SQMZ)*FACBW+COUP(1,2))/SH
+ CAWW=CDWW+0.5D0*(COUP(1,2)+1D0)/DT
+ CBWW=CDWW+0.5D0*(COUP(1,2)-1D0)/DU
+ CCWW=COUP(1,4)*SQMZ*(SH-SQMZ)*FACBW/SH
+ FGK135=ABS(REAL(CAWW)*FGK(1,2,3,4,5,6)-
+ & REAL(CBWW)*FGK(1,2,5,6,3,4))
+ FGK253=ABS(FGK(2,1,5,6,3,4)-FGK(2,1,3,4,5,6))
+ WT=FGK135**2+(CCWW*FGK253)**2
+ WTMAX=4D0*D34*D56*(CAWW**2*DIGK(DT,DU)+CBWW**2*DIGK(DU,DT)-CAWW*
+ & CBWW*DJGK(DT,DU)+CCWW**2*(DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU)))
+
+ ELSEIF(ISUB.EQ.26.OR.ISUB.EQ.172.OR.ISUB.EQ.177) THEN
+C...Angular weight for f + fbar' -> W+/- + h0 -> 2 quarks/leptons + h0
+C...(or H0, or A0).
+ WT=PKK(1,3)*PKK(2,4)
+ WTMAX=(PKK(1,3)+PKK(1,4))*(PKK(2,3)+PKK(2,4))
+
+ ELSEIF(ISUB.EQ.30.OR.ISUB.EQ.35) THEN
+C...Angular weight for f + g/gamma -> f + (gamma*/Z0)
+C...-> f + 2 quarks/leptons.
+ CLILF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,3)*HGZ(2,2)*COUP(3,1)*COUP(3,3)/4D0+
+ & COUP(1,3)**2*HGZ(2,3)*COUP(3,3)**2
+ CLIRF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,3)*HGZ(2,2)*COUP(3,1)*COUP(3,4)/4D0+
+ & COUP(1,3)**2*HGZ(2,3)*COUP(3,4)**2
+ CRILF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,4)*HGZ(2,2)*COUP(3,1)*COUP(3,3)/4D0+
+ & COUP(1,4)**2*HGZ(2,3)*COUP(3,3)**2
+ CRIRF=COUP(1,1)**2*HGZ(2,1)*COUP(3,1)**2/16D0+
+ & COUP(1,1)*COUP(1,4)*HGZ(2,2)*COUP(3,1)*COUP(3,4)/4D0+
+ & COUP(1,4)**2*HGZ(2,3)*COUP(3,4)**2
+ IF(K(ILIN(1),2).GT.0) WT=(CLILF+CRIRF)*(PKK(1,4)**2+
+ & PKK(3,5)**2)+(CLIRF+CRILF)*(PKK(1,3)**2+PKK(4,5)**2)
+ IF(K(ILIN(1),2).LT.0) WT=(CLILF+CRIRF)*(PKK(1,3)**2+
+ & PKK(4,5)**2)+(CLIRF+CRILF)*(PKK(1,4)**2+PKK(3,5)**2)
+ WTMAX=(CLILF+CLIRF+CRILF+CRIRF)*
+ & ((PKK(1,3)+PKK(1,4))**2+(PKK(3,5)+PKK(4,5))**2)
+
+ ELSEIF(ISUB.EQ.31) THEN
+C...Angular weight for f + g -> f' + W+/- -> f' + 2 quarks/leptons.
+ IF(K(ILIN(1),2).GT.0) WT=PKK(1,4)**2+PKK(3,5)**2
+ IF(K(ILIN(1),2).LT.0) WT=PKK(1,3)**2+PKK(4,5)**2
+ WTMAX=(PKK(1,3)+PKK(1,4))**2+(PKK(3,5)+PKK(4,5))**2
+
+ ELSEIF(ISUB.EQ.71.OR.ISUB.EQ.72.OR.ISUB.EQ.73.OR.ISUB.EQ.76.OR.
+ & ISUB.EQ.77) THEN
+C...Angular weight for V_L1 + V_L2 -> V_L3 + V_L4 (V = Z/W).
+ WT=16D0*PKK(3,5)*PKK(4,6)
+ WTMAX=SH**2
+
+ ELSEIF(ISUB.EQ.110) THEN
+C...Angular weight for f + fbar -> gamma + h0 -> gamma + X is isotropic.
+ WT=1D0
+ WTMAX=1D0
+
+ ELSEIF(ISUB.EQ.141) THEN
+ IF(IP.EQ.1.AND.IABS(KFL1(1)).LT.20) THEN
+C...Angular weight for f + fbar -> gamma*/Z0/Z'0 -> 2 quarks/leptons.
+C...Couplings of incoming flavour.
+ KFAI=IABS(MINT(15))
+ EI=KCHG(KFAI,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ KFAIC=1
+ IF(KFAI.LE.10.AND.MOD(KFAI,2).EQ.0) KFAIC=2
+ IF(KFAI.GT.10.AND.MOD(KFAI,2).NE.0) KFAIC=3
+ IF(KFAI.GT.10.AND.MOD(KFAI,2).EQ.0) KFAIC=4
+ VPI=PARU(119+2*KFAIC)
+ API=PARU(120+2*KFAIC)
+C...Couplings of final flavour.
+ KFAF=IABS(KFL1(1))
+ EF=KCHG(KFAF,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ KFAFC=1
+ IF(KFAF.LE.10.AND.MOD(KFAF,2).EQ.0) KFAFC=2
+ IF(KFAF.GT.10.AND.MOD(KFAF,2).NE.0) KFAFC=3
+ IF(KFAF.GT.10.AND.MOD(KFAF,2).EQ.0) KFAFC=4
+ VPF=PARU(119+2*KFAFC)
+ APF=PARU(120+2*KFAFC)
+C...Asymmetry and weight.
+ ASYM=2D0*(EI*AI*VINT(112)*EF*AF+EI*API*VINT(113)*EF*APF+
+ & 4D0*VI*AI*VINT(114)*VF*AF+(VI*API+VPI*AI)*VINT(115)*
+ & (VF*APF+VPF*AF)+4D0*VPI*API*VINT(116)*VPF*APF)/
+ & (EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
+ & EI*VPI*VINT(113)*EF*VPF+(VI**2+AI**2)*VINT(114)*
+ & (VF**2+AF**2)+(VI*VPI+AI*API)*VINT(115)*(VF*VPF+AF*APF)+
+ & (VPI**2+API**2)*VINT(116)*(VPF**2+APF**2))
+ WT=1D0+ASYM*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))+CTHE(1)**2
+ WTMAX=2D0+ABS(ASYM)
+ ELSEIF(IP.EQ.1.AND.IABS(KFL1(1)).EQ.24) THEN
+C...Angular weight for f + fbar -> Z' -> W+ + W-.
+ RM1=P(NSD(1)+1,5)**2/SH
+ RM2=P(NSD(1)+2,5)**2/SH
+ CCOS2=-(1D0/16D0)*((1D0-RM1-RM2)**2-4D0*RM1*RM2)*
+ & (1D0-2D0*RM1-2D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
+ CFLAT=-CCOS2+0.5D0*(RM1+RM2)*(1D0-2D0*RM1-2D0*RM2+
+ & (RM2-RM1)**2)
+ WT=CFLAT+CCOS2*CTHE(1)**2
+ WTMAX=CFLAT+MAX(0D0,CCOS2)
+ ELSEIF(IP.EQ.1.AND.(KFL1(1).EQ.25.OR.KFL1(1).EQ.35.OR.
+ & IABS(KFL1(1)).EQ.37)) THEN
+C...Angular weight for f + fbar -> Z' -> h0 + A0, H0 + A0, H+ + H-.
+ WT=1D0-CTHE(1)**2
+ WTMAX=1D0
+ ELSEIF(IP.EQ.1.AND.KFL2(1).EQ.25) THEN
+C...Angular weight for f + fbar -> Z' -> Z0 + h0.
+ RM1=P(NSD(1)+1,5)**2/SH
+ RM2=P(NSD(1)+2,5)**2/SH
+ FLAM2=MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2)
+ WT=1D0+FLAM2*(1D0-CTHE(1)**2)/(8D0*RM1)
+ WTMAX=1D0+FLAM2/(8D0*RM1)
+ ELSEIF(MZPWP.EQ.0) THEN
+C...Angular weight for f + fbar -> Z' -> W+ + W- -> 4 quarks/leptons
+C...(W:s like if intermediate Z).
+ D34=P(IREF(IP,IORD),5)**2
+ D56=P(IREF(IP,3-IORD),5)**2
+ DT=PKK(1,3)+PKK(1,4)+D34
+ DU=PKK(1,5)+PKK(1,6)+D56
+ FGK135=ABS(FGK(1,2,3,4,5,6)-FGK(1,2,5,6,3,4))
+ FGK253=ABS(FGK(2,1,5,6,3,4)-FGK(2,1,3,4,5,6))
+ WT=(COUP(1,3)*FGK135)**2+(COUP(1,4)*FGK253)**2
+ WTMAX=4D0*D34*D56*(COUP(1,3)**2+COUP(1,4)**2)*
+ & (DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU))
+ ELSEIF(MZPWP.EQ.1) THEN
+C...Angular weight for f + fbar -> Z' -> W+ + W- -> 4 quarks/leptons
+C...(W:s approximately longitudinal, like if intermediate H).
+ WT=16D0*PKK(3,5)*PKK(4,6)
+ WTMAX=SH**2
+ ELSE
+C...Angular weight for f + fbar -> Z' -> H+ + H-, Z0 + h0, h0 + A0,
+C...H0 + A0 -> 4 quarks/leptons.
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+
+ ELSEIF(ISUB.EQ.142) THEN
+ IF(IP.EQ.1.AND.IABS(KFL1(1)).LT.20) THEN
+C...Angular weight for f + fbar' -> W'+/- -> 2 quarks/leptons.
+ KFAI=IABS(MINT(15))
+ KFAIC=1
+ IF(KFAI.GT.10) KFAIC=2
+ VI=PARU(129+2*KFAIC)
+ AI=PARU(130+2*KFAIC)
+ KFAF=IABS(KFL1(1))
+ KFAFC=1
+ IF(KFAF.GT.10) KFAFC=2
+ VF=PARU(129+2*KFAFC)
+ AF=PARU(130+2*KFAFC)
+ ASYM=8D0*VI*AI*VF*AF/((VI**2+AI**2)*(VF**2+AF**2))
+ WT=1D0+ASYM*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))+CTHE(1)**2
+ WTMAX=2D0+ABS(ASYM)
+ ELSEIF(IP.EQ.1.AND.IABS(KFL2(1)).EQ.23) THEN
+C...Angular weight for f + fbar' -> W'+/- -> W+/- + Z0.
+ RM1=P(NSD(1)+1,5)**2/SH
+ RM2=P(NSD(1)+2,5)**2/SH
+ CCOS2=-(1D0/16D0)*((1D0-RM1-RM2)**2-4D0*RM1*RM2)*
+ & (1D0-2D0*RM1-2D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
+ CFLAT=-CCOS2+0.5D0*(RM1+RM2)*(1D0-2D0*RM1-2D0*RM2+
+ & (RM2-RM1)**2)
+ WT=CFLAT+CCOS2*CTHE(1)**2
+ WTMAX=CFLAT+MAX(0D0,CCOS2)
+ ELSEIF(IP.EQ.1.AND.KFL2(1).EQ.25) THEN
+C...Angular weight for f + fbar -> W'+/- -> W+/- + h0.
+ RM1=P(NSD(1)+1,5)**2/SH
+ RM2=P(NSD(1)+2,5)**2/SH
+ FLAM2=MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2)
+ WT=1D0+FLAM2*(1D0-CTHE(1)**2)/(8D0*RM1)
+ WTMAX=1D0+FLAM2/(8D0*RM1)
+ ELSEIF(MZPWP.EQ.0) THEN
+C...Angular weight for f + fbar' -> W' -> W + Z0 -> 4 quarks/leptons
+C...(W/Z like if intermediate W).
+ D34=P(IREF(IP,IORD),5)**2
+ D56=P(IREF(IP,3-IORD),5)**2
+ DT=PKK(1,3)+PKK(1,4)+D34
+ DU=PKK(1,5)+PKK(1,6)+D56
+ FGK135=ABS(FGK(1,2,3,4,5,6)-FGK(1,2,5,6,3,4))
+ FGK136=ABS(FGK(1,2,3,4,6,5)-FGK(1,2,6,5,3,4))
+ WT=(COUP(5,3)*FGK135)**2+(COUP(5,4)*FGK136)**2
+ WTMAX=4D0*D34*D56*(COUP(5,3)**2+COUP(5,4)**2)*
+ & (DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU))
+ ELSEIF(MZPWP.EQ.1) THEN
+C...Angular weight for f + fbar' -> W' -> W + Z0 -> 4 quarks/leptons
+C...(W/Z approximately longitudinal, like if intermediate H).
+ WT=16D0*PKK(3,5)*PKK(4,6)
+ WTMAX=SH**2
+ ELSE
+C...Angular weight for f + fbar -> W' -> W + h0 -> whatever.
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+
+ ELSEIF(ISUB.EQ.145.OR.ISUB.EQ.162.OR.ISUB.EQ.163.OR.ISUB.EQ.164)
+ & THEN
+C...Isotropic decay of leptoquarks (assumed spin 0).
+ WT=1D0
+ WTMAX=1D0
+
+ ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
+C...Decays of (spin 1/2) q* -> q + (g,gamma) or (Z0,W+-).
+ SIDE=1D0
+ IF(MINT(16).EQ.21) SIDE=-1D0
+ IF(IP.EQ.1.AND.(KFL1(1).EQ.21.OR.KFL1(1).EQ.22)) THEN
+ WT=1D0+SIDE*CTHE(1)
+ WTMAX=2D0
+ ELSEIF(IP.EQ.1) THEN
+ RM1=P(NSD(1)+1,5)**2/SH
+ WT=1D0+SIDE*CTHE(1)*(1D0-0.5D0*RM1)/(1D0+0.5D0*RM1)
+ WTMAX=1D0+(1D0-0.5D0*RM1)/(1D0+0.5D0*RM1)
+ ELSE
+C...W/Z decay assumed isotropic, since not known.
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+
+ ELSEIF(ISUB.EQ.149) THEN
+C...Isotropic decay of techni-eta.
+ WT=1D0
+ WTMAX=1D0
+
+ ELSEIF(ISUB.EQ.191) THEN
+ IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
+C...Angular weight for f + fbar -> rho_tech0 -> W+ W-,
+C...W+ pi_tech-, pi_tech+ W- or pi_tech+ pi_tech-.
+ WT=1D0-CTHE(1)**2
+ WTMAX=1D0
+ ELSEIF(IP.EQ.1) THEN
+C...Angular weight for f + fbar -> rho_tech0 -> f fbar.
+ CTHESG=CTHE(1)*ISIGN(1,MINT(15))
+ XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
+ BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ KFAI=IABS(MINT(15))
+ EI=KCHG(KFAI,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ ALEFTI=(EI+VALI*BWZR)**2+(VALI*BWZI)**2
+ ARIGHI=(EI+VARI*BWZR)**2+(VARI*BWZI)**2
+ KFAF=IABS(KFL1(1))
+ EF=KCHG(KFAF,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ VALF=0.5D0*(VF+AF)
+ VARF=0.5D0*(VF-AF)
+ ALEFTF=(EF+VALF*BWZR)**2+(VALF*BWZI)**2
+ ARIGHF=(EF+VARF*BWZR)**2+(VARF*BWZI)**2
+ ASAME=ALEFTI*ALEFTF+ARIGHI*ARIGHF
+ AFLIP=ALEFTI*ARIGHF+ARIGHI*ALEFTF
+ WT=ASAME*(1D0+CTHESG)**2+AFLIP*(1D0-CTHESG)**2
+ WTMAX=4D0*MAX(ASAME,AFLIP)
+ ELSE
+C...Isotropic decay of W/pi_tech produced in rho_tech decay.
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+
+ ELSEIF(ISUB.EQ.192) THEN
+ IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
+C...Angular weight for f + fbar' -> rho_tech+ -> W+ Z0,
+C...W+ pi_tech0, pi_tech+ Z0 or pi_tech+ pi_tech0.
+ WT=1D0-CTHE(1)**2
+ WTMAX=1D0
+ ELSEIF(IP.EQ.1) THEN
+C...Angular weight for f + fbar' -> rho_tech+ -> f fbar'.
+ CTHESG=CTHE(1)*ISIGN(1,MINT(15))
+ WT=(1D0+CTHESG)**2
+ WTMAX=4D0
+ ELSE
+C...Isotropic decay of W/Z/pi_tech produced in rho_tech+ decay.
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+
+ ELSEIF(ISUB.EQ.193) THEN
+ IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
+C...Angular weight for f + fbar -> omega_tech0 ->
+C...gamma pi_tech0 or Z0 pi_tech0.
+ WT=1D0+CTHE(1)**2
+ WTMAX=2D0
+ ELSEIF(IP.EQ.1) THEN
+C...Angular weight for f + fbar -> omega_tech0 -> f fbar.
+ CTHESG=CTHE(1)*ISIGN(1,MINT(15))
+ BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ KFAI=IABS(MINT(15))
+ EI=KCHG(KFAI,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ BLEFTI=(EI-VALI*BWZR)**2+(VALI*BWZI)**2
+ BRIGHI=(EI-VARI*BWZR)**2+(VARI*BWZI)**2
+ KFAF=IABS(KFL1(1))
+ EF=KCHG(KFAF,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ VALF=0.5D0*(VF+AF)
+ VARF=0.5D0*(VF-AF)
+ BLEFTF=(EF-VALF*BWZR)**2+(VALF*BWZI)**2
+ BRIGHF=(EF-VARF*BWZR)**2+(VARF*BWZI)**2
+ BSAME=BLEFTI*BLEFTF+BRIGHI*BRIGHF
+ BFLIP=BLEFTI*BRIGHF+BRIGHI*BLEFTF
+ WT=BSAME*(1D0+CTHESG)**2+BFLIP*(1D0-CTHESG)**2
+ WTMAX=4D0*MAX(BSAME,BFLIP)
+ ELSE
+C...Isotropic decay of Z/pi_tech produced in omega_tech decay.
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+
+C...Obtain correct angular distribution by rejection techniques.
+ ELSE
+ WT=1D0
+ WTMAX=1D0
+ ENDIF
+ IF(WT.LT.PYR(0)*WTMAX) GOTO 310
+
+C...Construct massive four-vectors using angles chosen.
+ 470 DO 540 JT=1,JTMAX
+ IF(KDCY(JT).EQ.0) GOTO 540
+ ID=IREF(IP,JT)
+ DO 480 J=1,5
+ DPMO(J)=P(ID,J)
+ 480 CONTINUE
+ DPMO(4)=SQRT(DPMO(1)**2+DPMO(2)**2+DPMO(3)**2+DPMO(5)**2)
+CMRENNA++
+ IF(KFL3(JT).EQ.0) THEN
+ CALL PYROBO(NSD(JT)+1,NSD(JT)+2,ACOS(CTHE(JT)),PHI(JT),
+ & DPMO(1)/DPMO(4),DPMO(2)/DPMO(4),DPMO(3)/DPMO(4))
+ ELSE
+ CALL PYROBO(NSD(JT)+1,NSD(JT)+3,ACOS(CTHE(JT)),PHI(JT),
+ & DPMO(1)/DPMO(4),DPMO(2)/DPMO(4),DPMO(3)/DPMO(4))
+ ENDIF
+CMRENNA--
+
+C...Mark decayed resonances; trace history.
+ K(ID,1)=K(ID,1)+10
+ KFA=IABS(K(ID,2))
+ KCA=PYCOMP(KFA)
+ IF(KCQM(JT).NE.0) THEN
+C...Do not kill colour flow through coloured resonance!
+ ELSE
+ K(ID,4)=NSD(JT)+1
+ K(ID,5)=NSD(JT)+2
+ IF(KFL3(JT).NE.0) K(ID,5)=NSD(JT)+3
+ ENDIF
+
+C...Add documentation lines.
+ IF(ISUB.NE.0) THEN
+ IDOC=MINT(83)+MINT(4)
+CMRENNA+++
+ IHI=NSD(JT)+2
+ IF(KFL3(JT).NE.0) IHI=IHI+1
+ DO 500 I=NSD(JT)+1,IHI
+CMRENNA---
+ I1=MINT(83)+MINT(4)+1
+ K(I,3)=I1
+ IF(MSTP(128).GE.1) K(I,3)=ID
+ IF(MSTP(128).LE.1.AND.MINT(4).LT.MSTP(126)) THEN
+ MINT(4)=MINT(4)+1
+ K(I1,1)=21
+ K(I1,2)=K(I,2)
+ K(I1,3)=IREF(IP,JT+3)
+ DO 490 J=1,5
+ P(I1,J)=P(I,J)
+ 490 CONTINUE
+ ENDIF
+ 500 CONTINUE
+ ELSE
+ K(NSD(JT)+1,3)=ID
+ K(NSD(JT)+2,3)=ID
+ IF(KFL3(JT).NE.0) K(NSD(JT)+3,3)=ID
+ ENDIF
+
+C...Do showering if any of the two/three products can shower.
+ NSHBEF=N
+ IF(MSTP(71).GE.1) THEN
+ ISHOW1=0
+ KFL1A=IABS(KFL1(JT))
+ IF(KFL1A.LE.22) ISHOW1=1
+ ISHOW2=0
+ KFL2A=IABS(KFL2(JT))
+ IF(KFL2A.LE.22) ISHOW2=1
+ ISHOW3=0
+ IF(KFL3(JT).NE.0) THEN
+ KFL3A=IABS(KFL3(JT))
+ IF(KFL3A.LE.22) ISHOW3=1
+ ENDIF
+ IF(ISHOW1.EQ.0.AND.ISHOW2.EQ.0.AND.ISHOW3.EQ.0) THEN
+ ELSEIF(KFL3(JT).EQ.0) THEN
+ CALL PYSHOW(NSD(JT)+1,NSD(JT)+2,P(ID,5))
+ ELSE
+ NSD1=NSD(JT)+1
+ NSD2=NSD(JT)+2
+ IF(ISHOW1.EQ.0.AND.ISHOW3.NE.0) THEN
+ NSD1=NSD(JT)+3
+ ELSEIF(ISHOW2.EQ.0.AND.ISHOW3.NE.0) THEN
+ NSD2=NSD(JT)+3
+ ENDIF
+ PMSHOW=SQRT(MAX(0D0,(P(NSD1,4)+P(NSD2,4))**2-
+ & (P(NSD1,1)+P(NSD2,1))**2-(P(NSD1,2)+P(NSD2,2))**2-
+ & (P(NSD1,3)+P(NSD2,3))**2))
+ CALL PYSHOW(NSD1,NSD2,PMSHOW)
+ ENDIF
+ ENDIF
+ NSHAFT=N
+ IF(JT.EQ.1) NAFT1=N
+
+C...Check if decay products moved by shower.
+ NSD1=NSD(JT)+1
+ NSD2=NSD(JT)+2
+ NSD3=NSD(JT)+3
+ IF(NSHAFT.GT.NSHBEF) THEN
+ IF(K(NSD1,1).GT.10) THEN
+ DO 510 I=NSHBEF+1,NSHAFT
+ IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD1,2)) NSD1=I
+ 510 CONTINUE
+ ENDIF
+ IF(K(NSD2,1).GT.10) THEN
+ DO 520 I=NSHBEF+1,NSHAFT
+ IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD2,2).AND.
+ & I.NE.NSD1) NSD2=I
+ 520 CONTINUE
+ ENDIF
+ IF(KFL3(JT).NE.0.AND.K(NSD3,1).GT.10) THEN
+ DO 530 I=NSHBEF+1,NSHAFT
+ IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD3,2).AND.
+ & I.NE.NSD1.AND.I.NE.NSD2) NSD3=I
+ 530 CONTINUE
+ ENDIF
+ ENDIF
+
+C...Store decay products for further treatment.
+ NP=NP+1
+ IREF(NP,1)=NSD1
+ IREF(NP,2)=NSD2
+ IREF(NP,3)=0
+ IF(KFL3(JT).NE.0) IREF(NP,3)=NSD3
+ IREF(NP,4)=IDOC+1
+ IREF(NP,5)=IDOC+2
+ IREF(NP,6)=0
+ IF(KFL3(JT).NE.0) IREF(NP,6)=IDOC+3
+ IREF(NP,7)=K(IREF(IP,JT),2)
+ IREF(NP,8)=IREF(IP,JT)
+ 540 CONTINUE
+
+C...Fill information for 2 -> 1 -> 2.
+ 550 IF(JTMAX.EQ.1.AND.KDCY(1).NE.0.AND.ISUB.NE.0) THEN
+ MINT(7)=MINT(83)+6+2*ISET(ISUB)
+ MINT(8)=MINT(83)+7+2*ISET(ISUB)
+ MINT(25)=KFL1(1)
+ MINT(26)=KFL2(1)
+ VINT(23)=CTHE(1)
+ RM3=P(N-1,5)**2/SH
+ RM4=P(N,5)**2/SH
+ BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
+ VINT(45)=-0.5D0*SH*(1D0-RM3-RM4-BE34*CTHE(1))
+ VINT(46)=-0.5D0*SH*(1D0-RM3-RM4+BE34*CTHE(1))
+ VINT(48)=0.25D0*SH*BE34**2*MAX(0D0,1D0-CTHE(1)**2)
+ VINT(47)=SQRT(VINT(48))
+ ENDIF
+
+C...Possibility of colour rearrangement in W+W- events.
+ IF(ISUB.EQ.25.AND.MSTP(115).GE.1) THEN
+ IAKF1=IABS(KFL1(1))
+ IAKF2=IABS(KFL1(2))
+ IAKF3=IABS(KFL2(1))
+ IAKF4=IABS(KFL2(2))
+ IF(MIN(IAKF1,IAKF2,IAKF3,IAKF4).GE.1.AND.
+ & MAX(IAKF1,IAKF2,IAKF3,IAKF4).LE.5) CALL
+ & PYRECO(IREF(1,1),IREF(1,2),NSD(1),NAFT1)
+ ENDIF
+
+C...Loop back if needed.
+ 560 IF(IP.LT.NP) GOTO 130
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYMULT
+C...Initializes treatment of multiple interactions, selects kinematics
+C...of hardest interaction if low-pT physics included in run, and
+C...generates all non-hardest interactions.
+
+ SUBROUTINE PYMULT(MMUL)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT2/,/PYINT3/,/PYINT5/,/PYINT7/
+C...Local arrays and saved variables.
+ DIMENSION NMUL(20),SIGM(20),KSTR(500,2),VINTSV(80)
+ SAVE XT2,XT2FAC,XC2,XTS,IRBIN,RBIN,NMUL,SIGM
+
+C...Initialization of multiple interaction treatment.
+ IF(MMUL.EQ.1) THEN
+ IF(MSTP(122).GE.1) WRITE(MSTU(11),5000) MSTP(82)
+ ISUB=96
+ MINT(1)=96
+ VINT(63)=0D0
+ VINT(64)=0D0
+ VINT(143)=1D0
+ VINT(144)=1D0
+
+C...Loop over phase space points: xT2 choice in 20 bins.
+ 100 SIGSUM=0D0
+ DO 120 IXT2=1,20
+ NMUL(IXT2)=MSTP(83)
+ SIGM(IXT2)=0D0
+ DO 110 ITRY=1,MSTP(83)
+ RSCA=0.05D0*((21-IXT2)-PYR(0))
+ XT2=VINT(149)*(1D0+VINT(149))/(VINT(149)+RSCA)-VINT(149)
+ XT2=MAX(0.01D0*VINT(149),XT2)
+ VINT(25)=XT2
+
+C...Choose tau and y*. Calculate cos(theta-hat).
+ IF(PYR(0).LE.COEF(ISUB,1)) THEN
+ TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
+ TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
+ ELSE
+ TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
+ ENDIF
+ VINT(21)=TAU
+ CALL PYKLIM(2)
+ RYST=PYR(0)
+ MYST=1
+ IF(RYST.GT.COEF(ISUB,8)) MYST=2
+ IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
+ CALL PYKMAP(2,MYST,PYR(0))
+ VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
+
+C...Calculate differential cross-section.
+ VINT(71)=0.5D0*VINT(1)*SQRT(XT2)
+ CALL PYSIGH(NCHN,SIGS)
+ SIGM(IXT2)=SIGM(IXT2)+SIGS
+ 110 CONTINUE
+ SIGSUM=SIGSUM+SIGM(IXT2)
+ 120 CONTINUE
+ SIGSUM=SIGSUM/(20D0*MSTP(83))
+
+C...Reject result if sigma(parton-parton) is smaller than hadronic one.
+ IF(SIGSUM.LT.1.1D0*SIGT(0,0,5)) THEN
+ IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) PARP(82),SIGSUM
+ PARP(82)=0.9D0*PARP(82)
+ VINT(149)=4D0*PARP(82)**2/VINT(2)
+ GOTO 100
+ ENDIF
+ IF(MSTP(122).GE.1) WRITE(MSTU(11),5200) PARP(82), SIGSUM
+
+C...Start iteration to find k factor.
+ YKE=SIGSUM/SIGT(0,0,5)
+ SO=0.5D0
+ XI=0D0
+ YI=0D0
+ XF=0D0
+ YF=0D0
+ XK=0.5D0
+ IIT=0
+ 130 IF(IIT.EQ.0) THEN
+ XK=2D0*XK
+ ELSEIF(IIT.EQ.1) THEN
+ XK=0.5D0*XK
+ ELSE
+ XK=XI+(YKE-YI)*(XF-XI)/(YF-YI)
+ ENDIF
+
+C...Evaluate overlap integrals.
+ IF(MSTP(82).EQ.2) THEN
+ SP=0.5D0*PARU(1)*(1D0-EXP(-XK))
+ SOP=SP/PARU(1)
+ ELSE
+ IF(MSTP(82).EQ.3) DELTAB=0.02D0
+ IF(MSTP(82).EQ.4) DELTAB=MIN(0.01D0,0.05D0*PARP(84))
+ SP=0D0
+ SOP=0D0
+ B=-0.5D0*DELTAB
+ 140 B=B+DELTAB
+ IF(MSTP(82).EQ.3) THEN
+ OV=EXP(-B**2)/PARU(2)
+ ELSE
+ CQ2=PARP(84)**2
+ OV=((1D0-PARP(83))**2*EXP(-MIN(50D0,B**2))+
+ & 2D0*PARP(83)*(1D0-PARP(83))*2D0/(1D0+CQ2)*
+ & EXP(-MIN(50D0,B**2*2D0/(1D0+CQ2)))+
+ & PARP(83)**2/CQ2*EXP(-MIN(50D0,B**2/CQ2)))/PARU(2)
+ ENDIF
+ PACC=1D0-EXP(-MIN(50D0,PARU(1)*XK*OV))
+ SP=SP+PARU(2)*B*DELTAB*PACC
+ SOP=SOP+PARU(2)*B*DELTAB*OV*PACC
+ IF(B.LT.1D0.OR.B*PACC.GT.1D-6) GOTO 140
+ ENDIF
+ YK=PARU(1)*XK*SO/SP
+
+C...Continue iteration until convergence.
+ IF(YK.LT.YKE) THEN
+ XI=XK
+ YI=YK
+ IF(IIT.EQ.1) IIT=2
+ ELSE
+ XF=XK
+ YF=YK
+ IF(IIT.EQ.0) IIT=1
+ ENDIF
+ IF(ABS(YK-YKE).GE.1D-5*YKE) GOTO 130
+
+C...Store some results for subsequent use.
+ VINT(145)=SIGSUM
+ VINT(146)=SOP/SO
+ VINT(147)=SOP/SP
+
+C...Initialize iteration in xT2 for hardest interaction.
+ ELSEIF(MMUL.EQ.2) THEN
+ IF(MSTP(82).LE.0) THEN
+ ELSEIF(MSTP(82).EQ.1) THEN
+ XT2=1D0
+ XT2FAC=XSEC(96,1)/SIGT(0,0,5)*VINT(149)/(1D0-VINT(149))
+ ELSEIF(MSTP(82).EQ.2) THEN
+ XT2=1D0
+ XT2FAC=VINT(146)*XSEC(96,1)/SIGT(0,0,5)*VINT(149)*
+ & (1D0+VINT(149))
+ ELSE
+ XC2=4D0*CKIN(3)**2/VINT(2)
+ IF(CKIN(3).LE.CKIN(5).OR.MINT(82).GE.2) XC2=0D0
+ ENDIF
+
+ ELSEIF(MMUL.EQ.3) THEN
+C...Low-pT or multiple interactions (first semihard interaction):
+C...choose xT2 according to dpT2/pT2**2*exp(-(sigma above pT2)/norm)
+C...or (MSTP(82)>=2) dpT2/(pT2+pT0**2)**2*exp(-....).
+ ISUB=MINT(1)
+ IF(MSTP(82).LE.0) THEN
+ XT2=0D0
+ ELSEIF(MSTP(82).EQ.1) THEN
+ XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(PYR(0)))
+ ELSEIF(MSTP(82).EQ.2) THEN
+ IF(XT2.LT.1D0.AND.EXP(-XT2FAC*XT2/(VINT(149)*(XT2+
+ & VINT(149)))).GT.PYR(0)) XT2=1D0
+ IF(XT2.GE.1D0) THEN
+ XT2=(1D0+VINT(149))*XT2FAC/(XT2FAC-(1D0+VINT(149))*LOG(1D0-
+ & PYR(0)*(1D0-EXP(-XT2FAC/(VINT(149)*(1D0+VINT(149)))))))-
+ & VINT(149)
+ ELSE
+ XT2=-XT2FAC/LOG(EXP(-XT2FAC/(XT2+VINT(149)))+PYR(0)*
+ & (EXP(-XT2FAC/VINT(149))-EXP(-XT2FAC/(XT2+VINT(149)))))-
+ & VINT(149)
+ ENDIF
+ XT2=MAX(0.01D0*VINT(149),XT2)
+ ELSE
+ XT2=(XC2+VINT(149))*(1D0+VINT(149))/(1D0+VINT(149)-
+ & PYR(0)*(1D0-XC2))-VINT(149)
+ XT2=MAX(0.01D0*VINT(149),XT2)
+ ENDIF
+ VINT(25)=XT2
+
+C...Low-pT: choose xT2, tau, y* and cos(theta-hat) fixed.
+ IF(MSTP(82).LE.1.AND.XT2.LT.VINT(149)) THEN
+ IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)-1
+ IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)-1
+ ISUB=95
+ MINT(1)=ISUB
+ VINT(21)=0.01D0*VINT(149)
+ VINT(22)=0D0
+ VINT(23)=0D0
+ VINT(25)=0.01D0*VINT(149)
+
+ ELSE
+C...Multiple interactions (first semihard interaction).
+C...Choose tau and y*. Calculate cos(theta-hat).
+ IF(PYR(0).LE.COEF(ISUB,1)) THEN
+ TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
+ TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
+ ELSE
+ TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
+ ENDIF
+ VINT(21)=TAU
+ CALL PYKLIM(2)
+ RYST=PYR(0)
+ MYST=1
+ IF(RYST.GT.COEF(ISUB,8)) MYST=2
+ IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
+ CALL PYKMAP(2,MYST,PYR(0))
+ VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
+ ENDIF
+ VINT(71)=0.5D0*VINT(1)*SQRT(VINT(25))
+
+C...Store results of cross-section calculation.
+ ELSEIF(MMUL.EQ.4) THEN
+ ISUB=MINT(1)
+ XTS=VINT(25)
+ IF(ISET(ISUB).EQ.1) XTS=VINT(21)
+ IF(ISET(ISUB).EQ.2)
+ & XTS=(4D0*VINT(48)+2D0*VINT(63)+2D0*VINT(64))/VINT(2)
+ IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) XTS=VINT(26)
+ RBIN=MAX(0.000001D0,MIN(0.999999D0,XTS*(1D0+VINT(149))/
+ & (XTS+VINT(149))))
+ IRBIN=INT(1D0+20D0*RBIN)
+ IF(ISUB.EQ.96.AND.MSTP(171).EQ.0) THEN
+ NMUL(IRBIN)=NMUL(IRBIN)+1
+ SIGM(IRBIN)=SIGM(IRBIN)+VINT(153)
+ ENDIF
+
+C...Choose impact parameter.
+ ELSEIF(MMUL.EQ.5) THEN
+ IF(MSTP(82).EQ.3) THEN
+ VINT(148)=PYR(0)/(PARU(2)*VINT(147))
+ ELSE
+ RTYPE=PYR(0)
+ CQ2=PARP(84)**2
+ IF(RTYPE.LT.(1D0-PARP(83))**2) THEN
+ B2=-LOG(PYR(0))
+ ELSEIF(RTYPE.LT.1D0-PARP(83)**2) THEN
+ B2=-0.5D0*(1D0+CQ2)*LOG(PYR(0))
+ ELSE
+ B2=-CQ2*LOG(PYR(0))
+ ENDIF
+ VINT(148)=((1D0-PARP(83))**2*EXP(-MIN(50D0,B2))+2D0*PARP(83)*
+ & (1D0-PARP(83))*2D0/(1D0+CQ2)*EXP(-MIN(50D0,B2*2D0/(1D0+CQ2)))+
+ & PARP(83)**2/CQ2*EXP(-MIN(50D0,B2/CQ2)))/(PARU(2)*VINT(147))
+ ENDIF
+
+C...Multiple interactions (variable impact parameter) : reject with
+C...probability exp(-overlap*cross-section above pT/normalization).
+ RNCOR=(IRBIN-20D0*RBIN)*NMUL(IRBIN)
+ SIGCOR=(IRBIN-20D0*RBIN)*SIGM(IRBIN)
+ DO 150 IBIN=IRBIN+1,20
+ RNCOR=RNCOR+NMUL(IBIN)
+ SIGCOR=SIGCOR+SIGM(IBIN)
+ 150 CONTINUE
+ SIGABV=(SIGCOR/RNCOR)*VINT(149)*(1D0-XTS)/(XTS+VINT(149))
+ IF(MSTP(171).EQ.1) SIGABV=SIGABV*VINT(2)/VINT(289)
+ VINT(150)=EXP(-MIN(50D0,VINT(146)*VINT(148)*
+ & SIGABV/SIGT(0,0,5)))
+
+C...Generate additional multiple semihard interactions.
+ ELSEIF(MMUL.EQ.6) THEN
+ ISUBSV=MINT(1)
+ DO 160 J=11,80
+ VINTSV(J)=VINT(J)
+ 160 CONTINUE
+ ISUB=96
+ MINT(1)=96
+
+C...Reconstruct strings in hard scattering.
+ NMAX=MINT(84)+4
+ IF(ISET(ISUBSV).EQ.1) NMAX=MINT(84)+2
+ IF(ISET(ISUBSV).EQ.11) NMAX=MINT(84)+2+MINT(3)
+ NSTR=0
+ DO 180 I=MINT(84)+1,NMAX
+ KCS=KCHG(PYCOMP(K(I,2)),2)*ISIGN(1,K(I,2))
+ IF(KCS.EQ.0) GOTO 180
+
+ DO 170 J=1,4
+ IF(KCS.EQ.1.AND.(J.EQ.2.OR.J.EQ.4)) GOTO 170
+ IF(KCS.EQ.-1.AND.(J.EQ.1.OR.J.EQ.3)) GOTO 170
+ IF(J.LE.2) THEN
+ IST=MOD(K(I,J+3)/MSTU(5),MSTU(5))
+ ELSE
+ IST=MOD(K(I,J+1),MSTU(5))
+ ENDIF
+ IF(IST.LT.MINT(84).OR.IST.GT.I) GOTO 170
+ IF(KCHG(PYCOMP(K(IST,2)),2).EQ.0) GOTO 170
+ NSTR=NSTR+1
+ IF(J.EQ.1.OR.J.EQ.4) THEN
+ KSTR(NSTR,1)=I
+ KSTR(NSTR,2)=IST
+ ELSE
+ KSTR(NSTR,1)=IST
+ KSTR(NSTR,2)=I
+ ENDIF
+ 170 CONTINUE
+ 180 CONTINUE
+
+C...Set up starting values for iteration in xT2.
+ XT2=VINT(25)
+ IF(ISET(ISUBSV).EQ.1) XT2=VINT(21)
+ IF(ISET(ISUBSV).EQ.2)
+ & XT2=(4D0*VINT(48)+2D0*VINT(63)+2D0*VINT(64))/VINT(2)
+ IF(ISET(ISUBSV).GE.3.AND.ISET(ISUBSV).LE.5) XT2=VINT(26)
+ IF(MSTP(82).LE.1) THEN
+ XT2FAC=XSEC(ISUB,1)*VINT(149)/((1D0-VINT(149))*SIGT(0,0,5))
+ ELSE
+ XT2FAC=VINT(146)*VINT(148)*XSEC(ISUB,1)/SIGT(0,0,5)*
+ & VINT(149)*(1D0+VINT(149))
+ ENDIF
+ VINT(63)=0D0
+ VINT(64)=0D0
+ VINT(143)=1D0-VINT(141)
+ VINT(144)=1D0-VINT(142)
+
+C...Iterate downwards in xT2.
+ 190 IF(MSTP(82).LE.1) THEN
+ XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(PYR(0)))
+ IF(XT2.LT.VINT(149)) GOTO 240
+ ELSE
+ IF(XT2.LE.0.01001D0*VINT(149)) GOTO 240
+ XT2=XT2FAC*(XT2+VINT(149))/(XT2FAC-(XT2+VINT(149))*
+ & LOG(PYR(0)))-VINT(149)
+ IF(XT2.LE.0D0) GOTO 240
+ XT2=MAX(0.01D0*VINT(149),XT2)
+ ENDIF
+ VINT(25)=XT2
+
+C...Choose tau and y*. Calculate cos(theta-hat).
+ IF(PYR(0).LE.COEF(ISUB,1)) THEN
+ TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
+ TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
+ ELSE
+ TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
+ ENDIF
+ VINT(21)=TAU
+ CALL PYKLIM(2)
+ RYST=PYR(0)
+ MYST=1
+ IF(RYST.GT.COEF(ISUB,8)) MYST=2
+ IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
+ CALL PYKMAP(2,MYST,PYR(0))
+ VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
+
+C...Check that x not used up. Accept or reject kinematical variables.
+ X1M=SQRT(TAU)*EXP(VINT(22))
+ X2M=SQRT(TAU)*EXP(-VINT(22))
+ IF(VINT(143)-X1M.LT.0.01D0.OR.VINT(144)-X2M.LT.0.01D0) GOTO 190
+ VINT(71)=0.5D0*VINT(1)*SQRT(XT2)
+ CALL PYSIGH(NCHN,SIGS)
+ IF(SIGS.LT.XSEC(ISUB,1)*PYR(0)) GOTO 190
+
+C...Reset K, P and V vectors. Select some variables.
+ DO 210 I=N+1,N+2
+ DO 200 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 200 CONTINUE
+ 210 CONTINUE
+ RFLAV=PYR(0)
+ PT=0.5D0*VINT(1)*SQRT(XT2)
+ PHI=PARU(2)*PYR(0)
+ CTH=VINT(23)
+
+C...Add first parton to event record.
+ K(N+1,1)=3
+ K(N+1,2)=21
+ IF(RFLAV.GE.MAX(PARP(85),PARP(86))) K(N+1,2)=
+ & 1+INT((2D0+PARJ(2))*PYR(0))
+ P(N+1,1)=PT*COS(PHI)
+ P(N+1,2)=PT*SIN(PHI)
+ P(N+1,3)=0.25D0*VINT(1)*(VINT(41)*(1D0+CTH)-VINT(42)*(1D0-CTH))
+ P(N+1,4)=0.25D0*VINT(1)*(VINT(41)*(1D0+CTH)+VINT(42)*(1D0-CTH))
+ P(N+1,5)=0D0
+
+C...Add second parton to event record.
+ K(N+2,1)=3
+ K(N+2,2)=21
+ IF(K(N+1,2).NE.21) K(N+2,2)=-K(N+1,2)
+ P(N+2,1)=-P(N+1,1)
+ P(N+2,2)=-P(N+1,2)
+ P(N+2,3)=0.25D0*VINT(1)*(VINT(41)*(1D0-CTH)-VINT(42)*(1D0+CTH))
+ P(N+2,4)=0.25D0*VINT(1)*(VINT(41)*(1D0-CTH)+VINT(42)*(1D0+CTH))
+ P(N+2,5)=0D0
+
+ IF(RFLAV.LT.PARP(85).AND.NSTR.GE.1) THEN
+C....Choose relevant string pieces to place gluons on.
+ DO 230 I=N+1,N+2
+ DMIN=1D8
+ DO 220 ISTR=1,NSTR
+ I1=KSTR(ISTR,1)
+ I2=KSTR(ISTR,2)
+ DIST=(P(I,4)*P(I1,4)-P(I,1)*P(I1,1)-P(I,2)*P(I1,2)-
+ & P(I,3)*P(I1,3))*(P(I,4)*P(I2,4)-P(I,1)*P(I2,1)-
+ & P(I,2)*P(I2,2)-P(I,3)*P(I2,3))/MAX(1D0,P(I1,4)*P(I2,4)-
+ & P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-P(I1,3)*P(I2,3))
+ IF(ISTR.EQ.1.OR.DIST.LT.DMIN) THEN
+ DMIN=DIST
+ IST1=I1
+ IST2=I2
+ ISTM=ISTR
+ ENDIF
+ 220 CONTINUE
+
+C....Colour flow adjustments, new string pieces.
+ IF(K(IST1,4)/MSTU(5).EQ.IST2) K(IST1,4)=MSTU(5)*I+
+ & MOD(K(IST1,4),MSTU(5))
+ IF(MOD(K(IST1,5),MSTU(5)).EQ.IST2) K(IST1,5)=
+ & MSTU(5)*(K(IST1,5)/MSTU(5))+I
+ K(I,5)=MSTU(5)*IST1
+ K(I,4)=MSTU(5)*IST2
+ IF(K(IST2,5)/MSTU(5).EQ.IST1) K(IST2,5)=MSTU(5)*I+
+ & MOD(K(IST2,5),MSTU(5))
+ IF(MOD(K(IST2,4),MSTU(5)).EQ.IST1) K(IST2,4)=
+ & MSTU(5)*(K(IST2,4)/MSTU(5))+I
+ KSTR(ISTM,2)=I
+ KSTR(NSTR+1,1)=I
+ KSTR(NSTR+1,2)=IST2
+ NSTR=NSTR+1
+ 230 CONTINUE
+
+C...String drawing and colour flow for gluon loop.
+ ELSEIF(K(N+1,2).EQ.21) THEN
+ K(N+1,4)=MSTU(5)*(N+2)
+ K(N+1,5)=MSTU(5)*(N+2)
+ K(N+2,4)=MSTU(5)*(N+1)
+ K(N+2,5)=MSTU(5)*(N+1)
+ KSTR(NSTR+1,1)=N+1
+ KSTR(NSTR+1,2)=N+2
+ KSTR(NSTR+2,1)=N+2
+ KSTR(NSTR+2,2)=N+1
+ NSTR=NSTR+2
+
+C...String drawing and colour flow for qqbar pair.
+ ELSE
+ K(N+1,4)=MSTU(5)*(N+2)
+ K(N+2,5)=MSTU(5)*(N+1)
+ KSTR(NSTR+1,1)=N+1
+ KSTR(NSTR+1,2)=N+2
+ NSTR=NSTR+1
+ ENDIF
+
+C...Update remaining energy; iterate.
+ N=N+2
+ IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
+ CALL PYERRM(11,'(PYMULT:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ MINT(31)=MINT(31)+1
+ VINT(151)=VINT(151)+VINT(41)
+ VINT(152)=VINT(152)+VINT(42)
+ VINT(143)=VINT(143)-VINT(41)
+ VINT(144)=VINT(144)-VINT(42)
+ IF(MINT(31).LT.240) GOTO 190
+ 240 CONTINUE
+ MINT(1)=ISUBSV
+ DO 250 J=11,80
+ VINT(J)=VINTSV(J)
+ 250 CONTINUE
+ ENDIF
+
+C...Format statements for printout.
+ 5000 FORMAT(/1X,'****** PYMULT: initialization of multiple inter',
+ &'actions for MSTP(82) =',I2,' ******')
+ 5100 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
+ &D9.2,' mb: rejected')
+ 5200 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
+ &D9.2,' mb: accepted')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYREMN
+C...Adds on target remnants (one or two from each side) and
+C...includes primordial kT for hadron beams.
+
+ SUBROUTINE PYREMN(IPU1,IPU2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
+C...Local arrays.
+ DIMENSION KFLCH(2),KFLSP(2),CHI(2),PMS(0:6),IS(2),ISN(2),ROBO(5),
+ &PSYS(0:2,5),PMIN(0:2),QOLD(4),QNEW(4),DBE(3),PSUM(4)
+
+C...Find event type and remaining energy.
+ ISUB=MINT(1)
+ NS=N
+ IF(MINT(50).EQ.0.OR.MSTP(81).LE.0) THEN
+ VINT(143)=1D0-VINT(141)
+ VINT(144)=1D0-VINT(142)
+ ENDIF
+
+C...Define initial partons.
+ NTRY=0
+ 100 NTRY=NTRY+1
+ DO 130 JT=1,2
+ I=MINT(83)+JT+2
+ IF(JT.EQ.1) IPU=IPU1
+ IF(JT.EQ.2) IPU=IPU2
+ K(I,1)=21
+ K(I,2)=K(IPU,2)
+ K(I,3)=I-2
+ PMS(JT)=0D0
+ VINT(156+JT)=0D0
+ VINT(158+JT)=0D0
+ IF(MINT(47).EQ.1) THEN
+ DO 110 J=1,5
+ P(I,J)=P(I-2,J)
+ 110 CONTINUE
+ ELSEIF(ISUB.EQ.95) THEN
+ K(I,2)=21
+ ELSE
+ P(I,5)=P(IPU,5)
+
+C...No primordial kT, or chosen according to truncated Gaussian or
+C...exponential, or (for photon) predetermined or power law.
+ 120 IF(MINT(40+JT).EQ.2.AND.MINT(10+JT).NE.22) THEN
+ IF(MSTP(91).LE.0) THEN
+ PT=0D0
+ ELSEIF(MSTP(91).EQ.1) THEN
+ PT=PARP(91)*SQRT(-LOG(PYR(0)))
+ ELSE
+ RPT1=PYR(0)
+ RPT2=PYR(0)
+ PT=-PARP(92)*LOG(RPT1*RPT2)
+ ENDIF
+ IF(PT.GT.PARP(93)) GOTO 120
+ ELSEIF(MINT(106+JT).EQ.3) THEN
+ PT=SQRT(VINT(282+JT))
+ PT=PT*0.8D0**MINT(57)
+ IF(NTRY.GT.10) PT=PT*0.8D0**(NTRY-10)
+ ELSEIF(IABS(MINT(14+JT)).LE.8.OR.MINT(14+JT).EQ.21) THEN
+ IF(MSTP(93).LE.0) THEN
+ PT=0D0
+ ELSEIF(MSTP(93).EQ.1) THEN
+ PT=PARP(99)*SQRT(-LOG(PYR(0)))
+ ELSEIF(MSTP(93).EQ.2) THEN
+ RPT1=PYR(0)
+ RPT2=PYR(0)
+ PT=-PARP(99)*LOG(RPT1*RPT2)
+ ELSEIF(MSTP(93).EQ.3) THEN
+ HA=PARP(99)**2
+ HB=PARP(100)**2
+ PT=SQRT(MAX(0D0,HA*(HA+HB)/(HA+HB-PYR(0)*HB)-HA))
+ ELSE
+ HA=PARP(99)**2
+ HB=PARP(100)**2
+ IF(MSTP(93).EQ.5) HB=MIN(VINT(48),PARP(100)**2)
+ PT=SQRT(MAX(0D0,HA*((HA+HB)/HA)**PYR(0)-HA))
+ ENDIF
+ IF(PT.GT.PARP(100)) GOTO 120
+ ELSE
+ PT=0D0
+ ENDIF
+ VINT(156+JT)=PT
+ PHI=PARU(2)*PYR(0)
+ P(I,1)=PT*COS(PHI)
+ P(I,2)=PT*SIN(PHI)
+ PMS(JT)=P(I,5)**2+P(I,1)**2+P(I,2)**2
+ ENDIF
+ 130 CONTINUE
+ IF(MINT(47).EQ.1) RETURN
+
+C...Kinematics construction for initial partons.
+ I1=MINT(83)+3
+ I2=MINT(83)+4
+ IF(ISUB.EQ.95) THEN
+ SHS=0D0
+ SHR=0D0
+ ELSE
+ SHS=VINT(141)*VINT(142)*VINT(2)+(P(I1,1)+P(I2,1))**2+
+ & (P(I1,2)+P(I2,2))**2
+ SHR=SQRT(MAX(0D0,SHS))
+ IF((SHS-PMS(1)-PMS(2))**2-4D0*PMS(1)*PMS(2).LE.0D0) GOTO 100
+ P(I1,4)=0.5D0*(SHR+(PMS(1)-PMS(2))/SHR)
+ P(I1,3)=SQRT(MAX(0D0,P(I1,4)**2-PMS(1)))
+ P(I2,4)=SHR-P(I1,4)
+ P(I2,3)=-P(I1,3)
+
+C...Transform partons to overall CM-frame.
+ ROBO(3)=(P(I1,1)+P(I2,1))/SHR
+ ROBO(4)=(P(I1,2)+P(I2,2))/SHR
+ CALL PYROBO(I1,I2,0D0,0D0,-ROBO(3),-ROBO(4),0D0)
+ ROBO(2)=PYANGL(P(I1,1),P(I1,2))
+ CALL PYROBO(I1,I2,0D0,-ROBO(2),0D0,0D0,0D0)
+ ROBO(1)=PYANGL(P(I1,3),P(I1,1))
+ CALL PYROBO(I1,I2,-ROBO(1),0D0,0D0,0D0,0D0)
+ CALL PYROBO(I1,MINT(52),ROBO(1),ROBO(2),ROBO(3),ROBO(4),0D0)
+ ROBO(5)=MAX(-0.999999D0,MIN(0.999999D0,(VINT(141)-VINT(142))/
+ & (VINT(141)+VINT(142))))
+ CALL PYROBO(I1,MINT(52),0D0,0D0,0D0,0D0,ROBO(5))
+ ENDIF
+
+C...Optionally fix up x and Q2 definitions for leptoproduction.
+ IDISXQ=0
+ IF((MINT(43).EQ.2.OR.MINT(43).EQ.3).AND.((ISUB.EQ.10.AND.
+ &MSTP(23).GE.1).OR.(ISUB.EQ.83.AND.MSTP(23).GE.2))) IDISXQ=1
+ IF(IDISXQ.EQ.1) THEN
+
+C...Find where incoming and outgoing leptons/partons are sitting.
+ LESD=1
+ IF(MINT(42).EQ.1) LESD=2
+ LPIN=MINT(83)+3-LESD
+ LEIN=MINT(84)+LESD
+ LQIN=MINT(84)+3-LESD
+ LEOUT=MINT(84)+2+LESD
+ LQOUT=MINT(84)+5-LESD
+ IF(K(LEIN,3).GT.LEIN) LEIN=K(LEIN,3)
+ IF(K(LQIN,3).GT.LQIN) LQIN=K(LQIN,3)
+ LSCMS=0
+ DO 140 I=MINT(84)+5,N
+ IF(K(I,2).EQ.94) THEN
+ LSCMS=I
+ LEOUT=I+LESD
+ LQOUT=I+3-LESD
+ ENDIF
+ 140 CONTINUE
+ LQBG=IPU1
+ IF(LESD.EQ.1) LQBG=IPU2
+
+C...Calculate actual and wanted momentum transfer.
+ XNOM=VINT(43-LESD)
+ Q2NOM=-VINT(45)
+ HPK=2D0*(P(LPIN,4)*P(LEIN,4)-P(LPIN,1)*P(LEIN,1)-
+ & P(LPIN,2)*P(LEIN,2)-P(LPIN,3)*P(LEIN,3))*
+ & (P(MINT(83)+LESD,4)*VINT(40+LESD)/P(LEIN,4))
+ HPT2=MAX(0D0,Q2NOM*(1D0-Q2NOM/(XNOM*HPK)))
+ FAC=SQRT(HPT2/(P(LEOUT,1)**2+P(LEOUT,2)**2))
+ P(N+1,1)=FAC*P(LEOUT,1)
+ P(N+1,2)=FAC*P(LEOUT,2)
+ P(N+1,3)=0.25D0*((HPK-Q2NOM/XNOM)/P(LPIN,4)-
+ & Q2NOM/(P(MINT(83)+LESD,4)*VINT(40+LESD)))*(-1)**(LESD+1)
+ P(N+1,4)=SQRT(P(LEOUT,5)**2+P(N+1,1)**2+P(N+1,2)**2+
+ & P(N+1,3)**2)
+ DO 150 J=1,4
+ QOLD(J)=P(LEIN,J)-P(LEOUT,J)
+ QNEW(J)=P(LEIN,J)-P(N+1,J)
+ 150 CONTINUE
+
+C...Boost outgoing electron and daughters.
+ IF(LSCMS.EQ.0) THEN
+ DO 160 J=1,4
+ P(LEOUT,J)=P(N+1,J)
+ 160 CONTINUE
+ ELSE
+ DO 170 J=1,3
+ P(N+2,J)=(P(N+1,J)-P(LEOUT,J))/(P(N+1,4)+P(LEOUT,4))
+ 170 CONTINUE
+ PINV=2D0/(1D0+P(N+2,1)**2+P(N+2,2)**2+P(N+2,3)**2)
+ DO 180 J=1,3
+ DBE(J)=PINV*P(N+2,J)
+ 180 CONTINUE
+ DO 200 I=LSCMS+1,N
+ IORIG=I
+ 190 IORIG=K(IORIG,3)
+ IF(IORIG.GT.LEOUT) GOTO 190
+ IF(I.EQ.LEOUT.OR.IORIG.EQ.LEOUT)
+ & CALL PYROBO(I,I,0D0,0D0,DBE(1),DBE(2),DBE(3))
+ 200 CONTINUE
+ ENDIF
+
+C...Copy shower initiator and all outgoing partons.
+ NCOP=N+1
+ K(NCOP,3)=LQBG
+ DO 210 J=1,5
+ P(NCOP,J)=P(LQBG,J)
+ 210 CONTINUE
+ DO 240 I=MINT(84)+1,N
+ ICOP=0
+ IF(K(I,1).GT.10) GOTO 240
+ IF(I.EQ.LQBG.OR.I.EQ.LQOUT) THEN
+ ICOP=I
+ ELSE
+ IORIG=I
+ 220 IORIG=K(IORIG,3)
+ IF(IORIG.EQ.LQBG.OR.IORIG.EQ.LQOUT) THEN
+ ICOP=IORIG
+ ELSEIF(IORIG.GT.MINT(84).AND.IORIG.LE.N) THEN
+ GOTO 220
+ ENDIF
+ ENDIF
+ IF(ICOP.NE.0) THEN
+ NCOP=NCOP+1
+ K(NCOP,3)=I
+ DO 230 J=1,5
+ P(NCOP,J)=P(I,J)
+ 230 CONTINUE
+ ENDIF
+ 240 CONTINUE
+
+C...Calculate relative rescaling factors.
+ SLC=3-2*LESD
+ PLCSUM=0D0
+ DO 250 I=N+2,NCOP
+ PLCSUM=PLCSUM+(P(I,4)+SLC*P(I,3))
+ 250 CONTINUE
+ DO 260 I=N+2,NCOP
+ V(I,1)=(P(I,4)+SLC*P(I,3))/PLCSUM
+ 260 CONTINUE
+
+C...Transfer extra three-momentum of current.
+ DO 280 I=N+2,NCOP
+ DO 270 J=1,3
+ P(I,J)=P(I,J)+V(I,1)*(QNEW(J)-QOLD(J))
+ 270 CONTINUE
+ P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ 280 CONTINUE
+
+C...Iterate change of initiator momentum to get energy right.
+ ITER=0
+ 290 ITER=ITER+1
+ PEEX=-P(N+1,4)-QNEW(4)
+ PEMV=-P(N+1,3)/P(N+1,4)
+ DO 300 I=N+2,NCOP
+ PEEX=PEEX+P(I,4)
+ PEMV=PEMV+V(I,1)*P(I,3)/P(I,4)
+ 300 CONTINUE
+ IF(ABS(PEMV).LT.1D-10) THEN
+ MINT(51)=1
+ MINT(57)=MINT(57)+1
+ RETURN
+ ENDIF
+ PZCH=-PEEX/PEMV
+ P(N+1,3)=P(N+1,3)+PZCH
+ P(N+1,4)=SQRT(P(N+1,5)**2+P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2)
+ DO 310 I=N+2,NCOP
+ P(I,3)=P(I,3)+V(I,1)*PZCH
+ P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ 310 CONTINUE
+ IF(ITER.LT.10.AND.ABS(PEEX).GT.1D-6*P(N+1,4)) GOTO 290
+
+C...Modify momenta in event record.
+ HBE=2D0*(P(N+1,4)+P(LQBG,4))*(P(N+1,3)-P(LQBG,3))/
+ & ((P(N+1,4)+P(LQBG,4))**2+(P(N+1,3)-P(LQBG,3))**2)
+ IF(ABS(HBE).GT.0.999999D0) THEN
+ MINT(51)=1
+ MINT(57)=MINT(57)+1
+ RETURN
+ ENDIF
+ I=MINT(83)+5-LESD
+ CALL PYROBO(I,I,0D0,0D0,0D0,0D0,HBE)
+ DO 330 I=N+1,NCOP
+ ICOP=K(I,3)
+ DO 320 J=1,4
+ P(ICOP,J)=P(I,J)
+ 320 CONTINUE
+ 330 CONTINUE
+ ENDIF
+
+C...Check minimum invariant mass of remnant system(s).
+ PSYS(0,4)=P(I1,4)+P(I2,4)+0.5D0*VINT(1)*(VINT(151)+VINT(152))
+ PSYS(0,3)=P(I1,3)+P(I2,3)+0.5D0*VINT(1)*(VINT(151)-VINT(152))
+ PMS(0)=MAX(0D0,PSYS(0,4)**2-PSYS(0,3)**2)
+ PMIN(0)=SQRT(PMS(0))
+ DO 340 JT=1,2
+ PSYS(JT,4)=0.5D0*VINT(1)*VINT(142+JT)
+ PSYS(JT,3)=PSYS(JT,4)*(-1)**(JT-1)
+ PMIN(JT)=0D0
+ IF(MINT(44+JT).EQ.1) GOTO 340
+ MINT(105)=MINT(102+JT)
+ MINT(109)=MINT(106+JT)
+ CALL PYSPLI(MINT(10+JT),MINT(12+JT),KFLCH(JT),KFLSP(JT))
+ IF(KFLCH(JT).NE.0) PMIN(JT)=PMIN(JT)+PYMASS(KFLCH(JT))
+ IF(KFLSP(JT).NE.0) PMIN(JT)=PMIN(JT)+PYMASS(KFLSP(JT))
+ IF(KFLCH(JT)*KFLSP(JT).NE.0) PMIN(JT)=PMIN(JT)+0.5D0*PARP(111)
+ PMIN(JT)=SQRT(PMIN(JT)**2+P(MINT(83)+JT+2,1)**2+
+ & P(MINT(83)+JT+2,2)**2)
+ 340 CONTINUE
+ IF(PMIN(0)+PMIN(1)+PMIN(2).GT.VINT(1).OR.(MINT(45).GE.2.AND.
+ &PMIN(1).GT.PSYS(1,4)).OR.(MINT(46).GE.2.AND.PMIN(2).GT.
+ &PSYS(2,4))) THEN
+ MINT(51)=1
+ MINT(57)=MINT(57)+1
+ RETURN
+ ENDIF
+
+C...Loop over two remnants; skip if none there.
+ I=NS
+ DO 410 JT=1,2
+ ISN(JT)=0
+ IF(MINT(44+JT).EQ.1) GOTO 410
+ IF(JT.EQ.1) IPU=IPU1
+ IF(JT.EQ.2) IPU=IPU2
+
+C...Store first remnant parton.
+ I=I+1
+ IS(JT)=I
+ ISN(JT)=1
+ DO 350 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 350 CONTINUE
+ K(I,1)=1
+ K(I,2)=KFLSP(JT)
+ K(I,3)=MINT(83)+JT
+ P(I,5)=PYMASS(K(I,2))
+
+C...First parton colour connections and kinematics.
+ KCOL=KCHG(PYCOMP(KFLSP(JT)),2)
+ IF(KCOL.EQ.2) THEN
+ K(I,1)=3
+ K(I,4)=MSTU(5)*IPU+IPU
+ K(I,5)=MSTU(5)*IPU+IPU
+ K(IPU,4)=MOD(K(IPU,4),MSTU(5))+MSTU(5)*I
+ K(IPU,5)=MOD(K(IPU,5),MSTU(5))+MSTU(5)*I
+ ELSEIF(KCOL.NE.0) THEN
+ K(I,1)=3
+ KFLS=(3-KCOL*ISIGN(1,KFLSP(JT)))/2
+ K(I,KFLS+3)=IPU
+ K(IPU,6-KFLS)=MOD(K(IPU,6-KFLS),MSTU(5))+MSTU(5)*I
+ ENDIF
+ IF(KFLCH(JT).EQ.0) THEN
+ P(I,1)=-P(MINT(83)+JT+2,1)
+ P(I,2)=-P(MINT(83)+JT+2,2)
+ PMS(JT)=P(I,5)**2+P(I,1)**2+P(I,2)**2
+ PSYS(JT,3)=SQRT(MAX(0D0,PSYS(JT,4)**2-PMS(JT)))*(-1)**(JT-1)
+ P(I,3)=PSYS(JT,3)
+ P(I,4)=PSYS(JT,4)
+
+C...When extra remnant parton or hadron: store extra remnant.
+ ELSE
+ I=I+1
+ ISN(JT)=2
+ DO 360 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 360 CONTINUE
+ K(I,1)=1
+ K(I,2)=KFLCH(JT)
+ K(I,3)=MINT(83)+JT
+ P(I,5)=PYMASS(K(I,2))
+
+C...Find parton colour connections of extra remnant.
+ KCOL=KCHG(PYCOMP(KFLCH(JT)),2)
+ IF(KCOL.EQ.2) THEN
+ K(I,1)=3
+ K(I,4)=MSTU(5)*IPU+IPU
+ K(I,5)=MSTU(5)*IPU+IPU
+ K(IPU,4)=MOD(K(IPU,4),MSTU(5))+MSTU(5)*I
+ K(IPU,5)=MOD(K(IPU,5),MSTU(5))+MSTU(5)*I
+ ELSEIF(KCOL.NE.0) THEN
+ K(I,1)=3
+ KFLS=(3-KCOL*ISIGN(1,KFLCH(JT)))/2
+ K(I,KFLS+3)=IPU
+ K(IPU,6-KFLS)=MOD(K(IPU,6-KFLS),MSTU(5))+MSTU(5)*I
+ ENDIF
+
+C...Relative transverse momentum when two remnants.
+ LOOP=0
+ 370 LOOP=LOOP+1
+ CALL PYPTDI(1,P(I-1,1),P(I-1,2))
+ IF(IABS(MINT(10+JT)).LT.20) THEN
+ P(I-1,1)=0D0
+ P(I-1,2)=0D0
+ ENDIF
+ PMS(JT+2)=P(I-1,5)**2+P(I-1,1)**2+P(I-1,2)**2
+ P(I,1)=-P(MINT(83)+JT+2,1)-P(I-1,1)
+ P(I,2)=-P(MINT(83)+JT+2,2)-P(I-1,2)
+ PMS(JT+4)=P(I,5)**2+P(I,1)**2+P(I,2)**2
+
+C...Meson or baryon; photon as meson. For splitup below.
+ IMB=1
+ IF(MOD(MINT(10+JT)/1000,10).NE.0) IMB=2
+
+C***Relative distribution for electron into two electrons. Temporary!
+ IF(IABS(MINT(10+JT)).LT.20.AND.MINT(14+JT).EQ.-MINT(10+JT))
+ & THEN
+ CHI(JT)=PYR(0)
+
+C...Relative distribution of electron energy into electron plus parton.
+ ELSEIF(IABS(MINT(10+JT)).LT.20) THEN
+ XHRD=VINT(140+JT)
+ XE=VINT(154+JT)
+ CHI(JT)=(XE-XHRD)/(1D0-XHRD)
+
+C...Relative distribution of energy for particle into two jets.
+ ELSEIF(IABS(KFLCH(JT)).LE.10.OR.KFLCH(JT).EQ.21) THEN
+ CHIK=PARP(92+2*IMB)
+ IF(MSTP(92).LE.1) THEN
+ IF(IMB.EQ.1) CHI(JT)=PYR(0)
+ IF(IMB.EQ.2) CHI(JT)=1D0-SQRT(PYR(0))
+ ELSEIF(MSTP(92).EQ.2) THEN
+ CHI(JT)=1D0-PYR(0)**(1D0/(1D0+CHIK))
+ ELSEIF(MSTP(92).EQ.3) THEN
+ CUT=2D0*0.3D0/VINT(1)
+ 380 CHI(JT)=PYR(0)**2
+ IF((CHI(JT)**2/(CHI(JT)**2+CUT**2))**0.25D0*
+ & (1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 380
+ ELSEIF(MSTP(92).EQ.4) THEN
+ CUT=2D0*0.3D0/VINT(1)
+ CUTR=(1D0+SQRT(1D0+CUT**2))/CUT
+ 390 CHIR=CUT*CUTR**PYR(0)
+ CHI(JT)=(CHIR**2-CUT**2)/(2D0*CHIR)
+ IF((1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 390
+ ELSE
+ CUT=2D0*0.3D0/VINT(1)
+ CUTA=CUT**(1D0-PARP(98))
+ CUTB=(1D0+CUT)**(1D0-PARP(98))
+ 400 CHI(JT)=(CUTA+PYR(0)*(CUTB-CUTA))**(1D0/(1D0-PARP(98)))
+ IF(((CHI(JT)+CUT)**2/(2D0*(CHI(JT)**2+CUT**2)))**
+ & (0.5D0*PARP(98))*(1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 400
+ ENDIF
+
+C...Relative distribution of energy for particle into jet plus particle.
+ ELSE
+ IF(MSTP(94).LE.1) THEN
+ IF(IMB.EQ.1) CHI(JT)=PYR(0)
+ IF(IMB.EQ.2) CHI(JT)=1D0-SQRT(PYR(0))
+ IF(MOD(KFLCH(JT)/1000,10).NE.0) CHI(JT)=1D0-CHI(JT)
+ ELSEIF(MSTP(94).EQ.2) THEN
+ CHI(JT)=1D0-PYR(0)**(1D0/(1D0+PARP(93+2*IMB)))
+ IF(MOD(KFLCH(JT)/1000,10).NE.0) CHI(JT)=1D0-CHI(JT)
+ ELSEIF(MSTP(94).EQ.3) THEN
+ CALL PYZDIS(1,0,PMS(JT+4),ZZ)
+ CHI(JT)=ZZ
+ ELSE
+ CALL PYZDIS(1000,0,PMS(JT+4),ZZ)
+ CHI(JT)=ZZ
+ ENDIF
+ ENDIF
+
+C...Construct total transverse mass; reject if too large.
+ PMS(JT)=PMS(JT+4)/CHI(JT)+PMS(JT+2)/(1D0-CHI(JT))
+ IF(PMS(JT).GT.PSYS(JT,4)**2) THEN
+ IF(LOOP.LT.10) THEN
+ GOTO 370
+ ELSE
+ MINT(51)=1
+ MINT(57)=MINT(57)+1
+ RETURN
+ ENDIF
+ ENDIF
+ PSYS(JT,3)=SQRT(MAX(0D0,PSYS(JT,4)**2-PMS(JT)))*(-1)**(JT-1)
+ VINT(158+JT)=CHI(JT)
+
+C...Subdivide longitudinal momentum according to value selected above.
+ PW1=CHI(JT)*(PSYS(JT,4)+ABS(PSYS(JT,3)))
+ P(IS(JT)+1,4)=0.5D0*(PW1+PMS(JT+4)/PW1)
+ P(IS(JT)+1,3)=0.5D0*(PW1-PMS(JT+4)/PW1)*(-1)**(JT-1)
+ P(IS(JT),4)=PSYS(JT,4)-P(IS(JT)+1,4)
+ P(IS(JT),3)=PSYS(JT,3)-P(IS(JT)+1,3)
+ ENDIF
+ 410 CONTINUE
+ N=I
+
+C...Check if longitudinal boosts needed - if so pick two systems.
+ PDEV=ABS(PSYS(0,4)+PSYS(1,4)+PSYS(2,4)-VINT(1))+
+ &ABS(PSYS(0,3)+PSYS(1,3)+PSYS(2,3))
+ IF(PDEV.LE.1D-6*VINT(1)) RETURN
+ IF(ISN(1).EQ.0) THEN
+ IR=0
+ IL=2
+ ELSEIF(ISN(2).EQ.0) THEN
+ IR=1
+ IL=0
+ ELSEIF(VINT(143).GT.0.2D0.AND.VINT(144).GT.0.2D0) THEN
+ IR=1
+ IL=2
+ ELSEIF(VINT(143).GT.0.2D0) THEN
+ IR=1
+ IL=0
+ ELSEIF(VINT(144).GT.0.2D0) THEN
+ IR=0
+ IL=2
+ ELSEIF(PMS(1)/PSYS(1,4)**2.GT.PMS(2)/PSYS(2,4)**2) THEN
+ IR=1
+ IL=0
+ ELSE
+ IR=0
+ IL=2
+ ENDIF
+ IG=3-IR-IL
+
+C...E+-pL wanted for system to be modified.
+ IF((IG.EQ.1.AND.ISN(1).EQ.0).OR.(IG.EQ.2.AND.ISN(2).EQ.0)) THEN
+ PPB=VINT(1)
+ PNB=VINT(1)
+ ELSE
+ PPB=VINT(1)-(PSYS(IG,4)+PSYS(IG,3))
+ PNB=VINT(1)-(PSYS(IG,4)-PSYS(IG,3))
+ ENDIF
+
+C...To keep x and Q2 in leptoproduction: do not count scattered lepton.
+ IF(IDISXQ.EQ.1.AND.IG.NE.0) THEN
+ PMTB=PPB*PNB
+ PMTR=PMS(IR)
+ PMTL=PMS(IL)
+ SQLAM=SQRT(MAX(0D0,(PMTB-PMTR-PMTL)**2-4D0*PMTR*PMTL))
+ SQSGN=SIGN(1D0,PSYS(IR,3)*PSYS(IL,4)-PSYS(IL,3)*PSYS(IR,4))
+ RKR=(PMTB+PMTR-PMTL+SQLAM*SQSGN)/(2D0*(PSYS(IR,4)+PSYS(IR,3))
+ & *PNB)
+ RKL=(PMTB+PMTL-PMTR+SQLAM*SQSGN)/(2D0*(PSYS(IL,4)-PSYS(IL,3))
+ & *PPB)
+ BER=(RKR**2-1D0)/(RKR**2+1D0)
+ BEL=-(RKL**2-1D0)/(RKL**2+1D0)
+ PPB=PPB-(PSYS(0,4)+PSYS(0,3))
+ PNB=PNB-(PSYS(0,4)-PSYS(0,3))
+ DO 420 J=1,4
+ PSYS(0,J)=0D0
+ 420 CONTINUE
+ DO 450 I=MINT(84)+1,NS
+ IF(K(I,1).GT.10) GOTO 450
+ INCL=0
+ IORIG=I
+ 430 IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
+ IORIG=K(IORIG,3)
+ IF(IORIG.GT.LPIN) GOTO 430
+ IF(INCL.EQ.0) GOTO 450
+ DO 440 J=1,4
+ PSYS(0,J)=PSYS(0,J)+P(I,J)
+ 440 CONTINUE
+ 450 CONTINUE
+ PMS(0)=MAX(0D0,PSYS(0,4)**2-PSYS(0,3)**2)
+ PPB=PPB+(PSYS(0,4)+PSYS(0,3))
+ PNB=PNB+(PSYS(0,4)-PSYS(0,3))
+ ENDIF
+
+C...Construct longitudinal boosts.
+ DPMTB=PPB*PNB
+ DPMTR=PMS(IR)
+ DPMTL=PMS(IL)
+ DSQLAM=SQRT(MAX(0D0,(DPMTB-DPMTR-DPMTL)**2-4D0*DPMTR*DPMTL))
+ IF(DSQLAM.LE.1D-6*DPMTB) THEN
+ MINT(51)=1
+ MINT(57)=MINT(57)+1
+ RETURN
+ ENDIF
+ DSQSGN=SIGN(1D0,PSYS(IR,3)*PSYS(IL,4)-PSYS(IL,3)*PSYS(IR,4))
+ DRKR=(DPMTB+DPMTR-DPMTL+DSQLAM*DSQSGN)/
+ &(2D0*(PSYS(IR,4)+PSYS(IR,3))*PNB)
+ DRKL=(DPMTB+DPMTL-DPMTR+DSQLAM*DSQSGN)/
+ &(2D0*(PSYS(IL,4)-PSYS(IL,3))*PPB)
+ DBER=(DRKR**2-1D0)/(DRKR**2+1D0)
+ DBEL=-(DRKL**2-1D0)/(DRKL**2+1D0)
+
+C...Perform longitudinal boosts.
+ IF(IR.EQ.1.AND.ISN(1).EQ.1.AND.DBER.LE.-0.99999999D0) THEN
+ P(IS(1),3)=0D0
+ P(IS(1),4)=SQRT(P(IS(1),5)**2+P(IS(1),1)**2+P(IS(1),2)**2)
+ ELSEIF(IR.EQ.1) THEN
+ CALL PYROBO(IS(1),IS(1)+ISN(1)-1,0D0,0D0,0D0,0D0,DBER)
+ ELSEIF(IDISXQ.EQ.1) THEN
+ DO 470 I=I1,NS
+ INCL=0
+ IORIG=I
+ 460 IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
+ IORIG=K(IORIG,3)
+ IF(IORIG.GT.LPIN) GOTO 460
+ IF(INCL.EQ.1) CALL PYROBO(I,I,0D0,0D0,0D0,0D0,DBER)
+ 470 CONTINUE
+ ELSE
+ CALL PYROBO(I1,NS,0D0,0D0,0D0,0D0,DBER)
+ ENDIF
+ IF(IL.EQ.2.AND.ISN(2).EQ.1.AND.DBEL.GE.0.99999999D0) THEN
+ P(IS(2),3)=0D0
+ P(IS(2),4)=SQRT(P(IS(2),5)**2+P(IS(2),1)**2+P(IS(2),2)**2)
+ ELSEIF(IL.EQ.2) THEN
+ CALL PYROBO(IS(2),IS(2)+ISN(2)-1,0D0,0D0,0D0,0D0,DBEL)
+ ELSEIF(IDISXQ.EQ.1) THEN
+ DO 490 I=I1,NS
+ INCL=0
+ IORIG=I
+ 480 IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
+ IORIG=K(IORIG,3)
+ IF(IORIG.GT.LPIN) GOTO 480
+ IF(INCL.EQ.1) CALL PYROBO(I,I,0D0,0D0,0D0,0D0,DBEL)
+ 490 CONTINUE
+ ELSE
+ CALL PYROBO(I1,NS,0D0,0D0,0D0,0D0,DBEL)
+ ENDIF
+
+C...Final check that energy-momentum conservation worked.
+ PESUM=0D0
+ PZSUM=0D0
+ DO 500 I=MINT(84)+1,N
+ IF(K(I,1).GT.10) GOTO 500
+ PESUM=PESUM+P(I,4)
+ PZSUM=PZSUM+P(I,3)
+ 500 CONTINUE
+ PDEV=ABS(PESUM-VINT(1))+ABS(PZSUM)
+ IF(PDEV.GT.1D-4*VINT(1)) THEN
+ MINT(51)=1
+ MINT(57)=MINT(57)+1
+ RETURN
+ ENDIF
+
+C...Calculate rotation and boost from overall CM frame to
+C...hadronic CM frame in leptoproduction.
+ MINT(91)=0
+ IF(MINT(82).EQ.1.AND.(MINT(43).EQ.2.OR.MINT(43).EQ.3)) THEN
+ MINT(91)=1
+ LESD=1
+ IF(MINT(42).EQ.1) LESD=2
+ LPIN=MINT(83)+3-LESD
+
+C...Sum upp momenta of everything not lepton or photon to define boost.
+ DO 510 J=1,4
+ PSUM(J)=0D0
+ 510 CONTINUE
+ DO 530 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 530
+ IF(IABS(K(I,2)).GE.11.AND.IABS(K(I,2)).LE.20) GOTO 530
+ IF(K(I,2).EQ.22) GOTO 530
+ DO 520 J=1,4
+ PSUM(J)=PSUM(J)+P(I,J)
+ 520 CONTINUE
+ 530 CONTINUE
+ VINT(223)=-PSUM(1)/PSUM(4)
+ VINT(224)=-PSUM(2)/PSUM(4)
+ VINT(225)=-PSUM(3)/PSUM(4)
+
+C...Boost incoming hadron to hadronic CM frame to determine rotations.
+ K(N+1,1)=1
+ DO 540 J=1,5
+ P(N+1,J)=P(LPIN,J)
+ V(N+1,J)=V(LPIN,J)
+ 540 CONTINUE
+ CALL PYROBO(N+1,N+1,0D0,0D0,VINT(223),VINT(224),VINT(225))
+ VINT(222)=-PYANGL(P(N+1,1),P(N+1,2))
+ CALL PYROBO(N+1,N+1,0D0,VINT(222),0D0,0D0,0D0)
+ IF(LESD.EQ.2) THEN
+ VINT(221)=-PYANGL(P(N+1,3),P(N+1,1))
+ ELSE
+ VINT(221)=PYANGL(-P(N+1,3),P(N+1,1))
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYDIFF
+C...Handles diffractive and elastic scattering.
+
+ SUBROUTINE PYDIFF
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYJETS/,/PYDAT1/,/PYPARS/,/PYINT1/
+
+C...Reset K, P and V vectors. Store incoming particles.
+ DO 110 JT=1,MSTP(126)+10
+ I=MINT(83)+JT
+ DO 100 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+ N=MINT(84)
+ MINT(3)=0
+ MINT(21)=0
+ MINT(22)=0
+ MINT(23)=0
+ MINT(24)=0
+ MINT(4)=4
+ DO 130 JT=1,2
+ I=MINT(83)+JT
+ K(I,1)=21
+ K(I,2)=MINT(10+JT)
+ DO 120 J=1,5
+ P(I,J)=VINT(285+5*JT+J)
+ 120 CONTINUE
+ 130 CONTINUE
+ MINT(6)=2
+
+C...Subprocess; kinematics.
+ SQLAM=(VINT(2)-VINT(63)-VINT(64))**2-4D0*VINT(63)*VINT(64)
+ PZ=SQRT(SQLAM)/(2D0*VINT(1))
+ DO 200 JT=1,2
+ I=MINT(83)+JT
+ PE=(VINT(2)+VINT(62+JT)-VINT(65-JT))/(2D0*VINT(1))
+ KFH=MINT(102+JT)
+
+C...Elastically scattered particle.
+ IF(MINT(16+JT).LE.0) THEN
+ N=N+1
+ K(N,1)=1
+ K(N,2)=KFH
+ K(N,3)=I+2
+ P(N,3)=PZ*(-1)**(JT+1)
+ P(N,4)=PE
+ P(N,5)=SQRT(VINT(62+JT))
+
+C...Decay rho from elastic scattering of gamma with sin**2(theta)
+C...distribution of decay products (in rho rest frame).
+ IF(KFH.EQ.113.AND.MINT(10+JT).EQ.22.AND.MSTP(102).EQ.1) THEN
+ NSAV=N
+ DBETAZ=P(N,3)/SQRT(P(N,3)**2+P(N,5)**2)
+ P(N,3)=0D0
+ P(N,4)=P(N,5)
+ CALL PYDECY(NSAV)
+ IF(N.EQ.NSAV+2.AND.IABS(K(NSAV+1,2)).EQ.211) THEN
+ PHI=PYANGL(P(NSAV+1,1),P(NSAV+1,2))
+ CALL PYROBO(NSAV+1,NSAV+2,0D0,-PHI,0D0,0D0,0D0)
+ THE=PYANGL(P(NSAV+1,3),P(NSAV+1,1))
+ CALL PYROBO(NSAV+1,NSAV+2,-THE,0D0,0D0,0D0,0D0)
+ 140 CTHE=2D0*PYR(0)-1D0
+ IF(1D0-CTHE**2.LT.PYR(0)) GOTO 140
+ CALL PYROBO(NSAV+1,NSAV+2,ACOS(CTHE),PHI,0D0,0D0,0D0)
+ ENDIF
+ CALL PYROBO(NSAV,NSAV+2,0D0,0D0,0D0,0D0,DBETAZ)
+ ENDIF
+
+C...Diffracted particle: low-mass system to two particles.
+ ELSEIF(VINT(62+JT).LT.(VINT(66+JT)+PARP(103))**2) THEN
+ N=N+2
+ K(N-1,1)=1
+ K(N,1)=1
+ K(N-1,3)=I+2
+ K(N,3)=I+2
+ PMMAS=SQRT(VINT(62+JT))
+ NTRY=0
+ 150 NTRY=NTRY+1
+ IF(NTRY.LT.20) THEN
+ MINT(105)=MINT(102+JT)
+ MINT(109)=MINT(106+JT)
+ CALL PYSPLI(KFH,21,KFL1,KFL2)
+ CALL PYKFDI(KFL1,0,KFL3,KF1)
+ IF(KF1.EQ.0) GOTO 150
+ CALL PYKFDI(KFL2,-KFL3,KFLDUM,KF2)
+ IF(KF2.EQ.0) GOTO 150
+ ELSE
+ KF1=KFH
+ KF2=111
+ ENDIF
+ PM1=PYMASS(KF1)
+ PM2=PYMASS(KF2)
+ IF(PM1+PM2+PARJ(64).GT.PMMAS) GOTO 150
+ K(N-1,2)=KF1
+ K(N,2)=KF2
+ P(N-1,5)=PM1
+ P(N,5)=PM2
+ PZP=SQRT(MAX(0D0,(PMMAS**2-PM1**2-PM2**2)**2-
+ & 4D0*PM1**2*PM2**2))/(2D0*PMMAS)
+ P(N-1,3)=PZP
+ P(N,3)=-PZP
+ P(N-1,4)=SQRT(PM1**2+PZP**2)
+ P(N,4)=SQRT(PM2**2+PZP**2)
+ CALL PYROBO(N-1,N,ACOS(2D0*PYR(0)-1D0),PARU(2)*PYR(0),
+ & 0D0,0D0,0D0)
+ DBETAZ=PZ*(-1)**(JT+1)/SQRT(PZ**2+PMMAS**2)
+ CALL PYROBO(N-1,N,0D0,0D0,0D0,0D0,DBETAZ)
+
+C...Diffracted particle: valence quark kicked out.
+ ELSEIF(MSTP(101).EQ.1.OR.(MSTP(101).EQ.3.AND.PYR(0).LT.
+ & PARP(101))) THEN
+ N=N+2
+ K(N-1,1)=2
+ K(N,1)=1
+ K(N-1,3)=I+2
+ K(N,3)=I+2
+ MINT(105)=MINT(102+JT)
+ MINT(109)=MINT(106+JT)
+ CALL PYSPLI(KFH,21,K(N,2),K(N-1,2))
+ P(N-1,5)=PYMASS(K(N-1,2))
+ P(N,5)=PYMASS(K(N,2))
+ SQLAM=(VINT(62+JT)-P(N-1,5)**2-P(N,5)**2)**2-
+ & 4D0*P(N-1,5)**2*P(N,5)**2
+ P(N-1,3)=(PE*SQRT(SQLAM)+PZ*(VINT(62+JT)+P(N-1,5)**2-
+ & P(N,5)**2))/(2D0*VINT(62+JT))*(-1)**(JT+1)
+ P(N-1,4)=SQRT(P(N-1,3)**2+P(N-1,5)**2)
+ P(N,3)=PZ*(-1)**(JT+1)-P(N-1,3)
+ P(N,4)=SQRT(P(N,3)**2+P(N,5)**2)
+
+C...Diffracted particle: gluon kicked out.
+ ELSE
+ N=N+3
+ K(N-2,1)=2
+ K(N-1,1)=2
+ K(N,1)=1
+ K(N-2,3)=I+2
+ K(N-1,3)=I+2
+ K(N,3)=I+2
+ MINT(105)=MINT(102+JT)
+ MINT(109)=MINT(106+JT)
+ CALL PYSPLI(KFH,21,K(N,2),K(N-2,2))
+ K(N-1,2)=21
+ P(N-2,5)=PYMASS(K(N-2,2))
+ P(N-1,5)=0D0
+ P(N,5)=PYMASS(K(N,2))
+C...Energy distribution for particle into two jets.
+ 160 IMB=1
+ IF(MOD(KFH/1000,10).NE.0) IMB=2
+ CHIK=PARP(92+2*IMB)
+ IF(MSTP(92).LE.1) THEN
+ IF(IMB.EQ.1) CHI=PYR(0)
+ IF(IMB.EQ.2) CHI=1D0-SQRT(PYR(0))
+ ELSEIF(MSTP(92).EQ.2) THEN
+ CHI=1D0-PYR(0)**(1D0/(1D0+CHIK))
+ ELSEIF(MSTP(92).EQ.3) THEN
+ CUT=2D0*0.3D0/VINT(1)
+ 170 CHI=PYR(0)**2
+ IF((CHI**2/(CHI**2+CUT**2))**0.25D0*(1D0-CHI)**CHIK.LT.
+ & PYR(0)) GOTO 170
+ ELSEIF(MSTP(92).EQ.4) THEN
+ CUT=2D0*0.3D0/VINT(1)
+ CUTR=(1D0+SQRT(1D0+CUT**2))/CUT
+ 180 CHIR=CUT*CUTR**PYR(0)
+ CHI=(CHIR**2-CUT**2)/(2D0*CHIR)
+ IF((1D0-CHI)**CHIK.LT.PYR(0)) GOTO 180
+ ELSE
+ CUT=2D0*0.3D0/VINT(1)
+ CUTA=CUT**(1D0-PARP(98))
+ CUTB=(1D0+CUT)**(1D0-PARP(98))
+ 190 CHI=(CUTA+PYR(0)*(CUTB-CUTA))**(1D0/(1D0-PARP(98)))
+ IF(((CHI+CUT)**2/(2D0*(CHI**2+CUT**2)))**
+ & (0.5D0*PARP(98))*(1D0-CHI)**CHIK.LT.PYR(0)) GOTO 190
+ ENDIF
+ IF(CHI.LT.P(N,5)**2/VINT(62+JT).OR.CHI.GT.1D0-P(N-2,5)**2/
+ & VINT(62+JT)) GOTO 160
+ SQM=P(N-2,5)**2/(1D0-CHI)+P(N,5)**2/CHI
+ IF((SQRT(SQM)+PARJ(32))**2.GE.VINT(62+JT)) GOTO 160
+ PZI=(PE*(VINT(62+JT)-SQM)+PZ*(VINT(62+JT)+SQM))/
+ & (2D0*VINT(62+JT))
+ PEI=SQRT(PZI**2+SQM)
+ PQQP=(1D0-CHI)*(PEI+PZI)
+ P(N-2,3)=0.5D0*(PQQP-P(N-2,5)**2/PQQP)*(-1)**(JT+1)
+ P(N-2,4)=SQRT(P(N-2,3)**2+P(N-2,5)**2)
+ P(N-1,4)=0.5D0*(VINT(62+JT)-SQM)/(PEI+PZI)
+ P(N-1,3)=P(N-1,4)*(-1)**JT
+ P(N,3)=PZI*(-1)**(JT+1)-P(N-2,3)
+ P(N,4)=SQRT(P(N,3)**2+P(N,5)**2)
+ ENDIF
+
+C...Documentation lines.
+ K(I+2,1)=21
+ IF(MINT(16+JT).EQ.0) K(I+2,2)=KFH
+ IF(MINT(16+JT).NE.0) K(I+2,2)=10*(KFH/10)
+ K(I+2,3)=I
+ P(I+2,3)=PZ*(-1)**(JT+1)
+ P(I+2,4)=PE
+ P(I+2,5)=SQRT(VINT(62+JT))
+ 200 CONTINUE
+
+C...Rotate outgoing partons/particles using cos(theta).
+ IF(VINT(23).LT.0.9D0) THEN
+ CALL PYROBO(MINT(83)+3,N,ACOS(VINT(23)),VINT(24),0D0,0D0,0D0)
+ ELSE
+ CALL PYROBO(MINT(83)+3,N,ASIN(VINT(59)),VINT(24),0D0,0D0,0D0)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYDOCU
+C...Handles the documentation of the process in MSTI and PARI,
+C...and also computes cross-sections based on accumulated statistics.
+
+ SUBROUTINE PYDOCU
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ SAVE /PYJETS/,/PYDAT1/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,
+ &/PYINT5/
+
+C...Calculate Monte Carlo estimates of cross-sections.
+ ISUB=MINT(1)
+ IF(MSTP(111).NE.-1) NGEN(ISUB,3)=NGEN(ISUB,3)+1
+ NGEN(0,3)=NGEN(0,3)+1
+ XSEC(0,3)=0D0
+ DO 100 I=1,500
+ IF(I.EQ.96.OR.I.EQ.97) THEN
+ XSEC(I,3)=0D0
+ ELSEIF(MSUB(95).EQ.1.AND.(I.EQ.11.OR.I.EQ.12.OR.I.EQ.13.OR.
+ & I.EQ.28.OR.I.EQ.53.OR.I.EQ.68)) THEN
+ XSEC(I,3)=XSEC(96,2)*NGEN(I,3)/MAX(1D0,DBLE(NGEN(96,1))*
+ & DBLE(NGEN(96,2)))
+ ELSEIF(MSUB(I).EQ.0.OR.NGEN(I,1).EQ.0) THEN
+ XSEC(I,3)=0D0
+ ELSEIF(NGEN(I,2).EQ.0) THEN
+ XSEC(I,3)=XSEC(I,2)*NGEN(0,3)/(DBLE(NGEN(I,1))*
+ & DBLE(NGEN(0,2)))
+ ELSE
+ XSEC(I,3)=XSEC(I,2)*NGEN(I,3)/(DBLE(NGEN(I,1))*
+ & DBLE(NGEN(I,2)))
+ ENDIF
+ XSEC(0,3)=XSEC(0,3)+XSEC(I,3)
+ 100 CONTINUE
+
+C...Rescale to known low-pT cross-section for standard QCD processes.
+ IF(MSUB(95).EQ.1) THEN
+ XSECH=XSEC(11,3)+XSEC(12,3)+XSEC(13,3)+XSEC(28,3)+XSEC(53,3)+
+ & XSEC(68,3)+XSEC(95,3)
+ XSECW=XSEC(97,2)/MAX(1D0,DBLE(NGEN(97,1)))
+ IF(XSECH.GT.1D-10.AND.XSECW.GT.1D-10) THEN
+ FAC=XSECW/XSECH
+ XSEC(11,3)=FAC*XSEC(11,3)
+ XSEC(12,3)=FAC*XSEC(12,3)
+ XSEC(13,3)=FAC*XSEC(13,3)
+ XSEC(28,3)=FAC*XSEC(28,3)
+ XSEC(53,3)=FAC*XSEC(53,3)
+ XSEC(68,3)=FAC*XSEC(68,3)
+ XSEC(95,3)=FAC*XSEC(95,3)
+ XSEC(0,3)=XSEC(0,3)-XSECH+XSECW
+ ENDIF
+ ENDIF
+
+C...Save information for gamma-p and gamma-gamma.
+ IF(MINT(121).GT.1) THEN
+ IGA=MINT(122)
+ CALL PYSAVE(2,IGA)
+ CALL PYSAVE(5,0)
+ ENDIF
+
+C...Reset information on hard interaction.
+ DO 110 J=1,200
+ MSTI(J)=0
+ PARI(J)=0D0
+ 110 CONTINUE
+
+C...Copy integer valued information from MINT into MSTI.
+ DO 120 J=1,32
+ MSTI(J)=MINT(J)
+ 120 CONTINUE
+ IF(MINT(121).GT.1) MSTI(9)=MINT(122)
+
+C...Store cross-section variables in PARI.
+ PARI(1)=XSEC(0,3)
+ PARI(2)=XSEC(0,3)/MINT(5)
+ PARI(9)=VINT(99)
+ PARI(10)=VINT(100)
+ VINT(98)=VINT(98)+VINT(100)
+ IF(MSTP(142).EQ.1) PARI(2)=XSEC(0,3)/VINT(98)
+
+C...Store kinematics variables in PARI.
+ PARI(11)=VINT(1)
+ PARI(12)=VINT(2)
+ IF(ISUB.NE.95) THEN
+ DO 130 J=13,26
+ PARI(J)=VINT(30+J)
+ 130 CONTINUE
+ PARI(31)=VINT(141)
+ PARI(32)=VINT(142)
+ PARI(33)=VINT(41)
+ PARI(34)=VINT(42)
+ PARI(35)=PARI(33)-PARI(34)
+ PARI(36)=VINT(21)
+ PARI(37)=VINT(22)
+ PARI(38)=VINT(26)
+ PARI(39)=VINT(157)
+ PARI(40)=VINT(158)
+ PARI(41)=VINT(23)
+ PARI(42)=2D0*VINT(47)/VINT(1)
+ ENDIF
+
+C...Store information on scattered partons in PARI.
+ IF(ISUB.NE.95.AND.MINT(7)*MINT(8).NE.0) THEN
+ DO 140 IS=7,8
+ I=MINT(IS)
+ PARI(36+IS)=P(I,3)/VINT(1)
+ PARI(38+IS)=P(I,4)/VINT(1)
+ PR=MAX(1D-20,P(I,5)**2+P(I,1)**2+P(I,2)**2)
+ PARI(40+IS)=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/
+ & SQRT(PR),1D20)),P(I,3))
+ PR=MAX(1D-20,P(I,1)**2+P(I,2)**2)
+ PARI(42+IS)=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/
+ & SQRT(PR),1D20)),P(I,3))
+ PARI(44+IS)=P(I,3)/SQRT(1D-20+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ PARI(46+IS)=PYANGL(P(I,3),SQRT(P(I,1)**2+P(I,2)**2))
+ PARI(48+IS)=PYANGL(P(I,1),P(I,2))
+ 140 CONTINUE
+ ENDIF
+
+C...Store sum up transverse and longitudinal momenta.
+ PARI(65)=2D0*PARI(17)
+ IF(ISUB.LE.90.OR.ISUB.GE.95) THEN
+ DO 150 I=MSTP(126)+1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 150
+ PT=SQRT(P(I,1)**2+P(I,2)**2)
+ PARI(69)=PARI(69)+PT
+ IF(I.LE.MINT(52)) PARI(66)=PARI(66)+PT
+ IF(I.GT.MINT(52).AND.I.LE.MINT(53)) PARI(68)=PARI(68)+PT
+ 150 CONTINUE
+ PARI(67)=PARI(68)
+ PARI(71)=VINT(151)
+ PARI(72)=VINT(152)
+ PARI(73)=VINT(151)
+ PARI(74)=VINT(152)
+ ELSE
+ PARI(66)=PARI(65)
+ PARI(69)=PARI(65)
+ ENDIF
+
+C...Store various other pieces of information into PARI.
+ PARI(61)=VINT(148)
+ PARI(75)=VINT(155)
+ PARI(76)=VINT(156)
+ PARI(77)=VINT(159)
+ PARI(78)=VINT(160)
+ PARI(81)=VINT(138)
+
+C...Set information for PYTABU.
+ IF(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.3) THEN
+ MSTU(161)=MINT(21)
+ MSTU(162)=0
+ ELSEIF(ISET(ISUB).EQ.5) THEN
+ MSTU(161)=MINT(23)
+ MSTU(162)=0
+ ELSE
+ MSTU(161)=MINT(21)
+ MSTU(162)=MINT(22)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYFRAM
+C...Performs transformations between different coordinate frames.
+
+ SUBROUTINE PYFRAM(IFRAME)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYPARS/,/PYINT1/
+
+C...Check that transformation can and should be done.
+ IF(IFRAME.EQ.1.OR.IFRAME.EQ.2.OR.(IFRAME.EQ.3.AND.
+ &MINT(91).EQ.1)) THEN
+ IF(IFRAME.EQ.MINT(6)) RETURN
+ ELSE
+ WRITE(MSTU(11),5000) IFRAME,MINT(6)
+ RETURN
+ ENDIF
+
+ IF(MINT(6).EQ.1) THEN
+C...Transform from fixed target or user specified frame to
+C...overall CM frame.
+ CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
+ CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
+ CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
+ ELSEIF(MINT(6).EQ.3) THEN
+C...Transform from hadronic CM frame in DIS to overall CM frame.
+ CALL PYROBO(0,0,-VINT(221),-VINT(222),-VINT(223),-VINT(224),
+ & -VINT(225))
+ ENDIF
+
+ IF(IFRAME.EQ.1) THEN
+C...Transform from overall CM frame to fixed target or user specified
+C...frame.
+ CALL PYROBO(0,0,VINT(6),VINT(7),VINT(8),VINT(9),VINT(10))
+ ELSEIF(IFRAME.EQ.3) THEN
+C...Transform from overall CM frame to hadronic CM frame in DIS.
+ CALL PYROBO(0,0,0D0,0D0,VINT(223),VINT(224),VINT(225))
+ CALL PYROBO(0,0,0D0,VINT(222),0D0,0D0,0D0)
+ CALL PYROBO(0,0,VINT(221),0D0,0D0,0D0,0D0)
+ ENDIF
+
+C...Set information about new frame.
+ MINT(6)=IFRAME
+ MSTI(6)=IFRAME
+
+ 5000 FORMAT(1X,'Error: illegal values in subroutine PYFRAM.',1X,
+ &'No transformation performed.'/1X,'IFRAME =',1X,I5,'; MINT(6) =',
+ &1X,I5)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYWIDT
+C...Calculates full and partial widths of resonances.
+
+ SUBROUTINE PYWIDT(KFLR,SH,WDTP,WDTE)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT4/,/PYMSSM/,/PYSSMT/
+C...Local arrays and saved variables.
+ DIMENSION WDTP(0:200),WDTE(0:200,0:5),MOFSV(3,2),WIDWSV(3,2),
+ &WID2SV(3,2)
+ SAVE MOFSV,WIDWSV,WID2SV
+ DATA MOFSV/6*0/,WIDWSV/6*0D0/,WID2SV/6*0D0/
+
+C...Compressed code and sign; mass.
+ KFLA=IABS(KFLR)
+ KFLS=ISIGN(1,KFLR)
+ KC=PYCOMP(KFLA)
+ SHR=SQRT(SH)
+ PMR=PMAS(KC,1)
+
+C...Reset width information.
+ DO 110 I=0,200
+ WDTP(I)=0D0
+ DO 100 J=0,5
+ WDTE(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...Not to be treated as a resonance: return.
+ IF((MWID(KC).LE.0.OR.MWID(KC).GE.4).AND.KFLA.NE.21.AND.
+ &KFLA.NE.22) THEN
+ WDTP(0)=1D0
+ WDTE(0,0)=1D0
+ MINT(61)=0
+ MINT(62)=0
+ MINT(63)=0
+ RETURN
+
+C...Treatment as a resonance based on tabulated branching ratios.
+ ELSEIF(MWID(KC).EQ.2.OR.(MWID(KC).EQ.3.AND.MINT(63).EQ.0)) THEN
+C...Loop over possible decay channels; skip irrelevant ones.
+ DO 120 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 120
+
+C...Read out decay products and nominal masses.
+ KFD1=KFDP(IDC,1)
+ KFC1=PYCOMP(KFD1)
+ IF(KCHG(KFC1,3).EQ.1) KFD1=KFLS*KFD1
+ PM1=PMAS(KFC1,1)
+ KFD2=KFDP(IDC,2)
+ KFC2=PYCOMP(KFD2)
+ IF(KCHG(KFC2,3).EQ.1) KFD2=KFLS*KFD2
+ PM2=PMAS(KFC2,1)
+ KFD3=KFDP(IDC,3)
+ PM3=0D0
+ IF(KFD3.NE.0) THEN
+ KFC3=PYCOMP(KFD3)
+ IF(KCHG(KFC3,3).EQ.1) KFD3=KFLS*KFD3
+ PM3=PMAS(KFC3,1)
+ ENDIF
+
+C...Naive partial width and alternative threshold factors.
+ WDTP(I)=PMAS(KC,2)*BRAT(IDC)*(SHR/PMR)
+ IF(MDME(IDC,2).GE.51.AND.MDME(IDC,2).LE.53.AND.
+ & PM1+PM2+PM3.GE.SHR) THEN
+ WDTP(I)=0D0
+ ELSEIF(MDME(IDC,2).EQ.52.AND.KFD3.EQ.0) THEN
+ WDTP(I)=WDTP(I)*SQRT(MAX(0D0,(SH-PM1**2-PM2**2)**2-
+ & 4D0*PM1**2*PM2**2))/SH
+ ELSEIF(MDME(IDC,2).EQ.52) THEN
+ PMA=MAX(PM1,PM2,PM3)
+ PMC=MIN(PM1,PM2,PM3)
+ PMB=PM1+PM2+PM3-PMA-PMC
+ PMBC=PMB+PMC+0.5D0*(SHR-PMA-PMC-PMC)
+ PMAN=PMA**2/SH
+ PMBN=PMB**2/SH
+ PMCN=PMC**2/SH
+ PMBCN=PMBC**2/SH
+ WDTP(I)=WDTP(I)*SQRT(MAX(0D0,
+ & ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
+ & ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
+ & ((SHR-PMA)**2-(PMB+PMC)**2)*
+ & (1D0+0.25D0*(PMA+PMB+PMC)/SHR)/
+ & ((1D0-PMBCN)*PMBCN*SH)
+ ELSEIF(MDME(IDC,2).EQ.53.AND.KFD3.EQ.0) THEN
+ WDTP(I)=WDTP(I)*SQRT(
+ & MAX(0D0,(SH-PM1**2-PM2**2)**2-4D0*PM1**2*PM2**2)/
+ & MAX(1D-4,(PMR**2-PM1**2-PM2**2)**2-4D0*PM1**2*PM2**2))
+ ELSEIF(MDME(IDC,2).EQ.53) THEN
+ PMA=MAX(PM1,PM2,PM3)
+ PMC=MIN(PM1,PM2,PM3)
+ PMB=PM1+PM2+PM3-PMA-PMC
+ PMBC=PMB+PMC+0.5D0*(SHR-PMA-PMB-PMC)
+ PMAN=PMA**2/SH
+ PMBN=PMB**2/SH
+ PMCN=PMC**2/SH
+ PMBCN=PMBC**2/SH
+ FACACT=SQRT(MAX(0D0,
+ & ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
+ & ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
+ & ((SHR-PMA)**2-(PMB+PMC)**2)*
+ & (1D0+0.25D0*(PMA+PMB+PMC)/SHR)/
+ & ((1D0-PMBCN)*PMBCN*SH)
+ PMBC=PMB+PMC+0.5D0*(PMR-PMA-PMB-PMC)
+ PMAN=PMA**2/PMR**2
+ PMBN=PMB**2/PMR**2
+ PMCN=PMC**2/PMR**2
+ PMBCN=PMBC**2/PMR**2
+ FACNOM=SQRT(MAX(0D0,
+ & ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
+ & ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
+ & ((PMR-PMA)**2-(PMB+PMC)**2)*
+ & (1D0+0.25D0*(PMA+PMB+PMC)/PMR)/
+ & ((1D0-PMBCN)*PMBCN*PMR**2)
+ WDTP(I)=WDTP(I)*FACACT/MAX(1D-6,FACNOM)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+
+C...Calculate secondary width (at most two identical/opposite).
+ IF(MDME(IDC,1).GT.0) THEN
+ IF(KFD2.EQ.KFD1) THEN
+ IF(KCHG(KFC1,3).EQ.0) THEN
+ WID2=WIDS(KFC1,1)
+ ELSEIF(KFD1.GT.0) THEN
+ WID2=WIDS(KFC1,4)
+ ELSE
+ WID2=WIDS(KFC1,5)
+ ENDIF
+ IF(KFD3.GT.0) THEN
+ WID2=WID2*WIDS(KFC3,2)
+ ELSEIF(KFD3.LT.0) THEN
+ WID2=WID2*WIDS(KFC3,3)
+ ENDIF
+ ELSEIF(KFD2.EQ.-KFD1) THEN
+ WID2=WIDS(KFC1,1)
+ IF(KFD3.GT.0) THEN
+ WID2=WID2*WIDS(KFC3,2)
+ ELSEIF(KFD3.LT.0) THEN
+ WID2=WID2*WIDS(KFC3,3)
+ ENDIF
+ ELSEIF(KFD3.EQ.KFD1) THEN
+ IF(KCHG(KFC1,3).EQ.0) THEN
+ WID2=WIDS(KFC1,1)
+ ELSEIF(KFD1.GT.0) THEN
+ WID2=WIDS(KFC1,4)
+ ELSE
+ WID2=WIDS(KFC1,5)
+ ENDIF
+ IF(KFD2.GT.0) THEN
+ WID2=WID2*WIDS(KFC2,2)
+ ELSEIF(KFD2.LT.0) THEN
+ WID2=WID2*WIDS(KFC2,3)
+ ENDIF
+ ELSEIF(KFD3.EQ.-KFD1) THEN
+ WID2=WIDS(KFC1,1)
+ IF(KFD2.GT.0) THEN
+ WID2=WID2*WIDS(KFC2,2)
+ ELSEIF(KFD2.LT.0) THEN
+ WID2=WID2*WIDS(KFC2,3)
+ ENDIF
+ ELSEIF(KFD3.EQ.KFD2) THEN
+ IF(KCHG(KFC2,3).EQ.0) THEN
+ WID2=WIDS(KFC2,1)
+ ELSEIF(KFD2.GT.0) THEN
+ WID2=WIDS(KFC2,4)
+ ELSE
+ WID2=WIDS(KFC2,5)
+ ENDIF
+ IF(KFD1.GT.0) THEN
+ WID2=WID2*WIDS(KFC1,2)
+ ELSEIF(KFD1.LT.0) THEN
+ WID2=WID2*WIDS(KFC1,3)
+ ENDIF
+ ELSEIF(KFD3.EQ.-KFD2) THEN
+ WID2=WIDS(KFC2,1)
+ IF(KFD1.GT.0) THEN
+ WID2=WID2*WIDS(KFC1,2)
+ ELSEIF(KFD1.LT.0) THEN
+ WID2=WID2*WIDS(KFC1,3)
+ ENDIF
+ ELSE
+ IF(KFD1.GT.0) THEN
+ WID2=WIDS(KFC1,2)
+ ELSE
+ WID2=WIDS(KFC1,3)
+ ENDIF
+ IF(KFD2.GT.0) THEN
+ WID2=WID2*WIDS(KFC2,2)
+ ELSE
+ WID2=WID2*WIDS(KFC2,3)
+ ENDIF
+ IF(KFD3.GT.0) THEN
+ WID2=WID2*WIDS(KFC3,2)
+ ELSEIF(KFD3.LT.0) THEN
+ WID2=WID2*WIDS(KFC3,3)
+ ENDIF
+ ENDIF
+
+C...Store effective widths according to case.
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 120 CONTINUE
+C...Return.
+ MINT(61)=0
+ MINT(62)=0
+ MINT(63)=0
+ RETURN
+ ENDIF
+
+C...Here begins detailed dynamical calculation of resonance widths.
+C...Shared treatment of Higgs states.
+ KFHIGG=25
+ IHIGG=1
+ IF(KFLA.EQ.35.OR.KFLA.EQ.36) THEN
+ KFHIGG=KFLA
+ IHIGG=KFLA-33
+ ENDIF
+
+C...Common electroweak and strong constants.
+ XW=PARU(102)
+ XWV=XW
+ IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
+ XW1=1D0-XW
+ AEM=PYALEM(SH)
+ IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
+ AS=PYALPS(SH)
+ RADC=1D0+AS/PARU(1)
+
+ IF(KFLA.EQ.6) THEN
+C...t quark.
+ FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ RADCT=1D0-2.5D0*AS/PARU(1)
+ DO 130 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 130
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 130
+ IF(I.GE.4.AND.I.LE.7) THEN
+C...t -> W + q; including approximate QCD correction factor.
+ WDTP(I)=FAC*VCKM(3,I-3)*RADCT*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,2)
+ IF(I.EQ.7) WID2=WID2*WIDS(7,2)
+ ELSE
+ WID2=WIDS(24,3)
+ IF(I.EQ.7) WID2=WID2*WIDS(7,3)
+ ENDIF
+ ELSEIF(I.EQ.9) THEN
+C...t -> H + b.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
+ WID2=WIDS(37,2)
+ IF(KFLR.LT.0) WID2=WIDS(37,3)
+CMRENNA++
+ ELSEIF(I.GE.10.AND.I.LE.13.AND.IMSS(1).NE.0) THEN
+C...t -> ~t + ~chi_i0, i = 1, 2, 3 or 4.
+ BETA=ATAN(RMSS(5))
+ SINB=SIN(BETA)
+ TANW=SQRT(PARU(102)/(1D0-PARU(102)))
+ ET=KCHG(6,1)/3D0
+ T3L=SIGN(0.5D0,ET)
+ KFC1=PYCOMP(KFDP(IDC,1))
+ KFC2=PYCOMP(KFDP(IDC,2))
+ PMNCHI=PMAS(KFC1,1)
+ PMSTOP=PMAS(KFC2,1)
+ IF(SHR.GT.PMNCHI+PMSTOP) THEN
+ IZ=I-9
+ AL=SHR*ZMIX(IZ,4)/(2.0D0*PMAS(24,1)*SINB)
+ AR=-ET*ZMIX(IZ,1)*TANW
+ BL=T3L*(ZMIX(IZ,2)-ZMIX(IZ,1)*TANW)-AR
+ BR=AL
+ FL=SFMIX(6,1)*AL+SFMIX(6,2)*AR
+ FR=SFMIX(6,1)*BL+SFMIX(6,2)*BR
+ PCM=SQRT((SH-(PMNCHI+PMSTOP)**2)*
+ & (SH-(PMNCHI-PMSTOP)**2))/(2D0*SHR)
+ WDTP(I)=(0.5D0*PYALEM(SH)/PARU(102))*PCM*((FL**2+FR**2)*
+ & (SH+PMNCHI**2-PMSTOP**2)+SMZ(IZ)*4D0*SHR*FL*FR)/SH
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(KFC1,2)*WIDS(KFC2,2)
+ ELSE
+ WID2=WIDS(KFC1,2)*WIDS(KFC2,3)
+ ENDIF
+ ENDIF
+CMRENNA--
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 130 CONTINUE
+
+ ELSEIF(KFLA.EQ.7) THEN
+C...b' quark.
+ FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ DO 140 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 140
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 140
+ IF(I.GE.4.AND.I.LE.7) THEN
+C...b' -> W + q.
+ WDTP(I)=FAC*VCKM(I-3,4)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,3)
+ IF(I.EQ.6) WID2=WID2*WIDS(6,2)
+ IF(I.EQ.7) WID2=WID2*WIDS(8,2)
+ ELSE
+ WID2=WIDS(24,2)
+ IF(I.EQ.6) WID2=WID2*WIDS(6,3)
+ IF(I.EQ.7) WID2=WID2*WIDS(8,3)
+ ENDIF
+ WID2=WIDS(24,3)
+ IF(KFLR.LT.0) WID2=WIDS(24,2)
+ ELSEIF(I.EQ.9.OR.I.EQ.10) THEN
+C...b' -> H + q.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0+RM2-RM1)*(PARU(141)**2+RM2/PARU(141)**2)+4D0*RM2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(37,3)
+ IF(I.EQ.10) WID2=WID2*WIDS(6,2)
+ ELSE
+ WID2=WIDS(37,2)
+ IF(I.EQ.10) WID2=WID2*WIDS(6,3)
+ ENDIF
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 140 CONTINUE
+
+ ELSEIF(KFLA.EQ.8) THEN
+C...t' quark.
+ FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ DO 150 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 150
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 150
+ IF(I.GE.4.AND.I.LE.7) THEN
+C...t' -> W + q.
+ WDTP(I)=FAC*VCKM(4,I-3)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,2)
+ IF(I.EQ.7) WID2=WID2*WIDS(7,2)
+ ELSE
+ WID2=WIDS(24,3)
+ IF(I.EQ.7) WID2=WID2*WIDS(7,3)
+ ENDIF
+ ELSEIF(I.EQ.9.OR.I.EQ.10) THEN
+C...t' -> H + q.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(37,2)
+ IF(I.EQ.10) WID2=WID2*WIDS(7,2)
+ ELSE
+ WID2=WIDS(37,3)
+ IF(I.EQ.10) WID2=WID2*WIDS(7,3)
+ ENDIF
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 150 CONTINUE
+
+ ELSEIF(KFLA.EQ.17) THEN
+C...tau' lepton.
+ FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ DO 160 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 160
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 160
+ IF(I.EQ.3) THEN
+C...tau' -> W + nu'_tau.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,3)
+ WID2=WID2*WIDS(18,2)
+ ELSE
+ WID2=WIDS(24,2)
+ WID2=WID2*WIDS(18,3)
+ ENDIF
+ ELSEIF(I.EQ.5) THEN
+C...tau' -> H + nu'_tau.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0+RM2-RM1)*(PARU(141)**2+RM2/PARU(141)**2)+4D0*RM2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(37,3)
+ WID2=WID2*WIDS(18,2)
+ ELSE
+ WID2=WIDS(37,2)
+ WID2=WID2*WIDS(18,3)
+ ENDIF
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 160 CONTINUE
+
+ ELSEIF(KFLA.EQ.18) THEN
+C...nu'_tau neutrino.
+ FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ DO 170 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 170
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 170
+ IF(I.EQ.2) THEN
+C...nu'_tau -> W + tau'.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,2)
+ WID2=WID2*WIDS(17,2)
+ ELSE
+ WID2=WIDS(24,3)
+ WID2=WID2*WIDS(17,3)
+ ENDIF
+ ELSEIF(I.EQ.3) THEN
+C...nu'_tau -> H + tau'.
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
+ & ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(37,2)
+ WID2=WID2*WIDS(17,2)
+ ELSE
+ WID2=WIDS(37,3)
+ WID2=WID2*WIDS(17,3)
+ ENDIF
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 170 CONTINUE
+
+ ELSEIF(KFLA.EQ.21) THEN
+C...QCD:
+C***Note that widths are not given in dimensional quantities here.
+ DO 180 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 180
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 180
+ WID2=1D0
+ IF(I.LE.8) THEN
+C...QCD -> q + qbar
+ WDTP(I)=(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(I.EQ.6) WID2=WIDS(6,1)
+ IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 180 CONTINUE
+
+ ELSEIF(KFLA.EQ.22) THEN
+C...QED photon.
+C***Note that widths are not given in dimensional quantities here.
+ DO 190 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 190
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 190
+ WID2=1D0
+ IF(I.LE.8) THEN
+C...QED -> q + qbar.
+ EF=KCHG(I,1)/3D0
+ FCOF=3D0*RADC
+ IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
+ WDTP(I)=FCOF*EF**2*(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(I.EQ.6) WID2=WIDS(6,1)
+ IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
+ ELSEIF(I.LE.12) THEN
+C...QED -> l+ + l-.
+ EF=KCHG(9+2*(I-8),1)/3D0
+ WDTP(I)=EF**2*(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(I.EQ.12) WID2=WIDS(17,1)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 190 CONTINUE
+
+ ELSEIF(KFLA.EQ.23) THEN
+C...Z0:
+ ICASE=1
+ XWC=1D0/(16D0*XW*XW1)
+ FAC=(AEM*XWC/3D0)*SHR
+ 200 CONTINUE
+ IF(MINT(61).GE.1.AND.ICASE.EQ.2) THEN
+ VINT(111)=0D0
+ VINT(112)=0D0
+ VINT(114)=0D0
+ ENDIF
+ IF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ KFI=IABS(MINT(15))
+ IF(KFI.GT.20) KFI=IABS(MINT(16))
+ EI=KCHG(KFI,1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ SQMZ=PMAS(23,1)**2
+ HZ=SHR*WDTP(0)
+ IF(MSTP(43).EQ.1.OR.MSTP(43).EQ.3) VINT(111)=1D0
+ IF(MSTP(43).EQ.3) VINT(112)=
+ & 2D0*XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+HZ**2)
+ IF(MSTP(43).EQ.2.OR.MSTP(43).EQ.3) VINT(114)=
+ & XWC**2*SH**2/((SH-SQMZ)**2+HZ**2)
+ ENDIF
+ DO 210 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 210
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 210
+ WID2=1D0
+ IF(I.LE.8) THEN
+C...Z0 -> q + qbar
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ FCOF=3D0*RADC
+ IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
+ IF(I.EQ.6) WID2=WIDS(6,1)
+ IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
+ ELSEIF(I.LE.16) THEN
+C...Z0 -> l+ + l-, nu + nubar
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ FCOF=1D0
+ IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
+ ENDIF
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(ICASE.EQ.1) THEN
+ WDTP(I)=FAC*FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*
+ & BE34
+ ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ WDTP(I)=FAC*FCOF*((EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*
+ & EF*VF+(VI**2+AI**2)*VINT(114)*VF**2)*(1D0+2D0*RM1)+
+ & (VI**2+AI**2)*VINT(114)*AF**2*(1D0-4D0*RM1))*BE34
+ ELSEIF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
+ FGGF=FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ FGZF=FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ FZZF=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ IF(ICASE.EQ.1) WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ IF((ICASE.EQ.1.AND.MINT(61).NE.1).OR.
+ & (ICASE.EQ.2.AND.MINT(61).EQ.1)) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
+ & WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ IF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
+ IF(MSTP(43).EQ.1.OR.MSTP(43).EQ.3) VINT(111)=
+ & VINT(111)+FGGF*WID2
+ IF(MSTP(43).EQ.3) VINT(112)=VINT(112)+FGZF*WID2
+ IF(MSTP(43).EQ.2.OR.MSTP(43).EQ.3) VINT(114)=
+ & VINT(114)+FZZF*WID2
+ ENDIF
+ ENDIF
+ 210 CONTINUE
+ IF(MINT(61).GE.1) ICASE=3-ICASE
+ IF(ICASE.EQ.2) GOTO 200
+
+ ELSEIF(KFLA.EQ.24) THEN
+C...W+/-:
+ FAC=(AEM/(24D0*XW))*SHR
+ DO 220 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 220
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 220
+ WID2=1D0
+ IF(I.LE.16) THEN
+C...W+/- -> q + qbar'
+ FCOF=3D0*RADC*VCKM((I-1)/4+1,MOD(I-1,4)+1)
+ IF(KFLR.GT.0) THEN
+ IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
+ IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
+ IF(I.GE.13) WID2=WID2*WIDS(7,3)
+ ELSE
+ IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
+ IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
+ IF(I.GE.13) WID2=WID2*WIDS(7,2)
+ ENDIF
+ ELSEIF(I.LE.20) THEN
+C...W+/- -> l+/- + nu
+ FCOF=1D0
+ IF(KFLR.GT.0) THEN
+ IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
+ ELSE
+ IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
+ ENDIF
+ ENDIF
+ WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 220 CONTINUE
+
+ ELSEIF(KFLA.EQ.25.OR.KFLA.EQ.35.OR.KFLA.EQ.36) THEN
+C...h0 (or H0, or A0):
+ IF(MSTP(49).EQ.0) THEN
+ FAC=(AEM/(8D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ ELSE
+ FAC=(AEM/(8D0*XW))*(PMAS(KFHIGG,1)/PMAS(24,1))**2*SHR
+ ENDIF
+ DO 260 I=1,MDCY(KFHIGG,3)
+ IDC=I+MDCY(KFHIGG,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 260
+ KFC1=PYCOMP(KFDP(IDC,1))
+ KFC2=PYCOMP(KFDP(IDC,2))
+ RM1=PMAS(KFC1,1)**2/SH
+ RM2=PMAS(KFC2,1)**2/SH
+ IF(I.NE.16.AND.I.NE.17.AND.SQRT(RM1)+SQRT(RM2).GT.1D0)
+ & GOTO 260
+ WID2=1D0
+
+ IF(I.LE.8) THEN
+C...h0 -> q + qbar
+ WDTP(I)=FAC*3D0*RM1*(1D0-4D0*RM1)*SQRT(MAX(0D0,
+ & 1D0-4D0*RM1))*RADC
+ IF(MSTP(37).EQ.1.AND.MSTP(2).GE.1) WDTP(I)=WDTP(I)*
+ & (LOG(MAX(4D0,PARP(37)**2*RM1*SH/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ IF(MOD(I,2).EQ.1) WDTP(I)=WDTP(I)*PARU(151+10*IHIGG)**2
+ IF(MOD(I,2).EQ.0) WDTP(I)=WDTP(I)*PARU(152+10*IHIGG)**2
+ ENDIF
+ IF(I.EQ.6) WID2=WIDS(6,1)
+ IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
+
+ ELSEIF(I.LE.12) THEN
+C...h0 -> l+ + l-
+ WDTP(I)=FAC*RM1*(1D0-4D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) WDTP(I)=WDTP(I)*
+ & PARU(153+10*IHIGG)**2
+ IF(I.EQ.12) WID2=WIDS(17,1)
+
+ ELSEIF(I.EQ.13) THEN
+C...h0 -> g + g; quark loop contribution only
+ ETARE=0D0
+ ETAIM=0D0
+ DO 230 J=1,2*MSTP(1)
+ EPS=(2D0*PMAS(J,1))**2/SH
+C...Loop integral; function of eps=4m^2/shat; different for A0.
+ IF(EPS.LE.1D0) THEN
+ IF(EPS.GT.1.D-4) THEN
+ ROOT=SQRT(1D0-EPS)
+ RLN=LOG((1D0+ROOT)/(1D0-ROOT))
+ ELSE
+ RLN=LOG(4D0/EPS-2D0)
+ ENDIF
+ PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
+ PHIIM=0.5D0*PARU(1)*RLN
+ ELSE
+ PHIRE=(ASIN(1D0/SQRT(EPS)))**2
+ PHIIM=0D0
+ ENDIF
+ IF(IHIGG.LE.2) THEN
+ ETAREJ=-0.5D0*EPS*(1D0+(1D0-EPS)*PHIRE)
+ ETAIMJ=-0.5D0*EPS*(1D0-EPS)*PHIIM
+ ELSE
+ ETAREJ=-0.5D0*EPS*PHIRE
+ ETAIMJ=-0.5D0*EPS*PHIIM
+ ENDIF
+C...Couplings (=1 for standard model Higgs).
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ IF(MOD(J,2).EQ.1) THEN
+ ETAREJ=ETAREJ*PARU(151+10*IHIGG)
+ ETAIMJ=ETAIMJ*PARU(151+10*IHIGG)
+ ELSE
+ ETAREJ=ETAREJ*PARU(152+10*IHIGG)
+ ETAIMJ=ETAIMJ*PARU(152+10*IHIGG)
+ ENDIF
+ ENDIF
+ ETARE=ETARE+ETAREJ
+ ETAIM=ETAIM+ETAIMJ
+ 230 CONTINUE
+ ETA2=ETARE**2+ETAIM**2
+ WDTP(I)=FAC*(AS/PARU(1))**2*ETA2
+
+ ELSEIF(I.EQ.14) THEN
+C...h0 -> gamma + gamma; quark, lepton, W+- and H+- loop contributions
+ ETARE=0D0
+ ETAIM=0D0
+ JMAX=3*MSTP(1)+1
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) JMAX=JMAX+1
+ DO 240 J=1,JMAX
+ IF(J.LE.2*MSTP(1)) THEN
+ EJ=KCHG(J,1)/3D0
+ EPS=(2D0*PMAS(J,1))**2/SH
+ ELSEIF(J.LE.3*MSTP(1)) THEN
+ JL=2*(J-2*MSTP(1))-1
+ EJ=KCHG(10+JL,1)/3D0
+ EPS=(2D0*PMAS(10+JL,1))**2/SH
+ ELSEIF(J.EQ.3*MSTP(1)+1) THEN
+ EPS=(2D0*PMAS(24,1))**2/SH
+ ELSE
+ EPS=(2D0*PMAS(37,1))**2/SH
+ ENDIF
+C...Loop integral; function of eps=4m^2/shat.
+ IF(EPS.LE.1D0) THEN
+ IF(EPS.GT.1.D-4) THEN
+ ROOT=SQRT(1D0-EPS)
+ RLN=LOG((1D0+ROOT)/(1D0-ROOT))
+ ELSE
+ RLN=LOG(4D0/EPS-2D0)
+ ENDIF
+ PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
+ PHIIM=0.5D0*PARU(1)*RLN
+ ELSE
+ PHIRE=(ASIN(1D0/SQRT(EPS)))**2
+ PHIIM=0D0
+ ENDIF
+ IF(J.LE.3*MSTP(1)) THEN
+C...Fermion loops: loop integral different for A0; charges.
+ IF(IHIGG.LE.2) THEN
+ PHIPRE=-0.5D0*EPS*(1D0+(1D0-EPS)*PHIRE)
+ PHIPIM=-0.5D0*EPS*(1D0-EPS)*PHIIM
+ ELSE
+ PHIPRE=-0.5D0*EPS*PHIRE
+ PHIPIM=-0.5D0*EPS*PHIIM
+ ENDIF
+ IF(J.LE.2*MSTP(1).AND.MOD(J,2).EQ.1) THEN
+ EJC=3D0*EJ**2
+ EJH=PARU(151+10*IHIGG)
+ ELSEIF(J.LE.2*MSTP(1)) THEN
+ EJC=3D0*EJ**2
+ EJH=PARU(152+10*IHIGG)
+ ELSE
+ EJC=EJ**2
+ EJH=PARU(153+10*IHIGG)
+ ENDIF
+ IF(MSTP(4).EQ.0.AND.IHIGG.EQ.1) EJH=1D0
+ ETAREJ=EJC*EJH*PHIPRE
+ ETAIMJ=EJC*EJH*PHIPIM
+ ELSEIF(J.EQ.3*MSTP(1)+1) THEN
+C...W loops: loop integral and charges.
+ ETAREJ=0.5D0+0.75D0*EPS*(1D0+(2D0-EPS)*PHIRE)
+ ETAIMJ=0.75D0*EPS*(2D0-EPS)*PHIIM
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ ETAREJ=ETAREJ*PARU(155+10*IHIGG)
+ ETAIMJ=ETAIMJ*PARU(155+10*IHIGG)
+ ENDIF
+ ELSE
+C...Charged H loops: loop integral and charges.
+ FACHHH=(PMAS(24,1)/PMAS(37,1))**2*
+ & PARU(158+10*IHIGG+2*(IHIGG/3))
+ ETAREJ=EPS*(1D0-EPS*PHIRE)*FACHHH
+ ETAIMJ=-EPS**2*PHIIM*FACHHH
+ ENDIF
+ ETARE=ETARE+ETAREJ
+ ETAIM=ETAIM+ETAIMJ
+ 240 CONTINUE
+ ETA2=ETARE**2+ETAIM**2
+ WDTP(I)=FAC*(AEM/PARU(1))**2*0.5D0*ETA2
+
+ ELSEIF(I.EQ.15) THEN
+C...h0 -> gamma + Z0; quark, lepton, W and H+- loop contributions
+ ETARE=0D0
+ ETAIM=0D0
+ JMAX=3*MSTP(1)+1
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) JMAX=JMAX+1
+ DO 250 J=1,JMAX
+ IF(J.LE.2*MSTP(1)) THEN
+ EJ=KCHG(J,1)/3D0
+ AJ=SIGN(1D0,EJ+0.1D0)
+ VJ=AJ-4D0*EJ*XWV
+ EPS=(2D0*PMAS(J,1))**2/SH
+ EPSP=(2D0*PMAS(J,1)/PMAS(23,1))**2
+ ELSEIF(J.LE.3*MSTP(1)) THEN
+ JL=2*(J-2*MSTP(1))-1
+ EJ=KCHG(10+JL,1)/3D0
+ AJ=SIGN(1D0,EJ+0.1D0)
+ VJ=AJ-4D0*EJ*XWV
+ EPS=(2D0*PMAS(10+JL,1))**2/SH
+ EPSP=(2D0*PMAS(10+JL,1)/PMAS(23,1))**2
+ ELSE
+ EPS=(2D0*PMAS(24,1))**2/SH
+ EPSP=(2D0*PMAS(24,1)/PMAS(23,1))**2
+ ENDIF
+C...Loop integrals; functions of eps=4m^2/shat and eps'=4m^2/m_Z^2.
+ IF(EPS.LE.1D0) THEN
+ ROOT=SQRT(1D0-EPS)
+ IF(EPS.GT.1.D-4) THEN
+ RLN=LOG((1D0+ROOT)/(1D0-ROOT))
+ ELSE
+ RLN=LOG(4D0/EPS-2D0)
+ ENDIF
+ PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
+ PHIIM=0.5D0*PARU(1)*RLN
+ PSIRE=0.5D0*ROOT*RLN
+ PSIIM=-0.5D0*ROOT*PARU(1)
+ ELSE
+ PHIRE=(ASIN(1D0/SQRT(EPS)))**2
+ PHIIM=0D0
+ PSIRE=SQRT(EPS-1D0)*ASIN(1D0/SQRT(EPS))
+ PSIIM=0D0
+ ENDIF
+ IF(EPSP.LE.1D0) THEN
+ ROOT=SQRT(1D0-EPSP)
+ IF(EPSP.GT.1.D-4) THEN
+ RLN=LOG((1D0+ROOT)/(1D0-ROOT))
+ ELSE
+ RLN=LOG(4D0/EPSP-2D0)
+ ENDIF
+ PHIREP=-0.25D0*(RLN**2-PARU(1)**2)
+ PHIIMP=0.5D0*PARU(1)*RLN
+ PSIREP=0.5D0*ROOT*RLN
+ PSIIMP=-0.5D0*ROOT*PARU(1)
+ ELSE
+ PHIREP=(ASIN(1D0/SQRT(EPSP)))**2
+ PHIIMP=0D0
+ PSIREP=SQRT(EPSP-1D0)*ASIN(1D0/SQRT(EPSP))
+ PSIIMP=0D0
+ ENDIF
+ FXYRE=EPS*EPSP/(8D0*(EPS-EPSP))*(1D0+EPS*EPSP/(EPS-EPSP)*
+ & (PHIRE-PHIREP)+2D0*EPS/(EPS-EPSP)*(PSIRE-PSIREP))
+ FXYIM=EPS**2*EPSP/(8D0*(EPS-EPSP)**2)*
+ & (EPSP*(PHIIM-PHIIMP)+2D0*(PSIIM-PSIIMP))
+ F1RE=-EPS*EPSP/(2D0*(EPS-EPSP))*(PHIRE-PHIREP)
+ F1IM=-EPS*EPSP/(2D0*(EPS-EPSP))*(PHIIM-PHIIMP)
+ IF(J.LE.3*MSTP(1)) THEN
+C...Fermion loops: loop integral different for A0; charges.
+ IF(IHIGG.EQ.3) FXYRE=0D0
+ IF(IHIGG.EQ.3) FXYIM=0D0
+ IF(J.LE.2*MSTP(1).AND.MOD(J,2).EQ.1) THEN
+ EJC=-3D0*EJ*VJ
+ EJH=PARU(151+10*IHIGG)
+ ELSEIF(J.LE.2*MSTP(1)) THEN
+ EJC=-3D0*EJ*VJ
+ EJH=PARU(152+10*IHIGG)
+ ELSE
+ EJC=-EJ*VJ
+ EJH=PARU(153+10*IHIGG)
+ ENDIF
+ IF(MSTP(4).EQ.0.AND.IHIGG.EQ.1) EJH=1D0
+ ETAREJ=EJC*EJH*(FXYRE-0.25D0*F1RE)
+ ETAIMJ=EJC*EJH*(FXYIM-0.25D0*F1IM)
+ ELSEIF(J.EQ.3*MSTP(1)+1) THEN
+C...W loops: loop integral and charges.
+ HEPS=(1D0+2D0/EPS)*XW/XW1-(5D0+2D0/EPS)
+ ETAREJ=-XW1*((3D0-XW/XW1)*F1RE+HEPS*FXYRE)
+ ETAIMJ=-XW1*((3D0-XW/XW1)*F1IM+HEPS*FXYIM)
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ ETAREJ=ETAREJ*PARU(155+10*IHIGG)
+ ETAIMJ=ETAIMJ*PARU(155+10*IHIGG)
+ ENDIF
+ ELSE
+C...Charged H loops: loop integral and charges.
+ FACHHH=(PMAS(24,1)/PMAS(37,1))**2*(1D0-2D0*XW)*
+ & PARU(158+10*IHIGG+2*(IHIGG/3))
+ ETAREJ=FACHHH*FXYRE
+ ETAIMJ=FACHHH*FXYIM
+ ENDIF
+ ETARE=ETARE+ETAREJ
+ ETAIM=ETAIM+ETAIMJ
+ 250 CONTINUE
+ ETA2=(ETARE**2+ETAIM**2)/(XW*XW1)
+ WDTP(I)=FAC*(AEM/PARU(1))**2*(1D0-PMAS(23,1)**2/SH)**3*ETA2
+ WID2=WIDS(23,2)
+
+ ELSEIF(I.LE.17) THEN
+C...h0 -> Z0 + Z0, W+ + W-
+ PM1=PMAS(IABS(KFDP(IDC,1)),1)
+ PG1=PMAS(IABS(KFDP(IDC,1)),2)
+ IF(MINT(62).GE.1) THEN
+ IF(MSTP(42).EQ.0.OR.(4D0*(PM1+10D0*PG1)**2.LT.SH.AND.
+ & CKIN(46).LT.CKIN(45).AND.CKIN(48).LT.CKIN(47).AND.
+ & MAX(CKIN(45),CKIN(47)).LT.PM1-10D0*PG1)) THEN
+ MOFSV(IHIGG,I-15)=0
+ WIDW=(1D0-4D0*RM1+12D0*RM1**2)*SQRT(MAX(0D0,
+ & 1D0-4D0*RM1))
+ WID2=1D0
+ ELSE
+ MOFSV(IHIGG,I-15)=1
+ RMAS=SQRT(MAX(0D0,SH))
+ CALL PYOFSH(1,KFLA,KFDP(IDC,1),KFDP(IDC,2),RMAS,WIDW,
+ & WID2)
+ WIDWSV(IHIGG,I-15)=WIDW
+ WID2SV(IHIGG,I-15)=WID2
+ ENDIF
+ ELSE
+ IF(MOFSV(IHIGG,I-15).EQ.0) THEN
+ WIDW=(1D0-4D0*RM1+12D0*RM1**2)*SQRT(MAX(0D0,
+ & 1D0-4D0*RM1))
+ WID2=1D0
+ ELSE
+ WIDW=WIDWSV(IHIGG,I-15)
+ WID2=WID2SV(IHIGG,I-15)
+ ENDIF
+ ENDIF
+ WDTP(I)=FAC*WIDW/(2D0*(18-I))
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) WDTP(I)=WDTP(I)*
+ & PARU(138+I+10*IHIGG)**2
+ WID2=WID2*WIDS(7+I,1)
+
+ ELSEIF(I.EQ.18.AND.KFLA.EQ.35) THEN
+C***H0 -> Z0 + h0 (not yet implemented).
+
+ ELSEIF(I.EQ.19.AND.KFLA.EQ.35) THEN
+C...H0 -> h0 + h0.
+ WDTP(I)=FAC*PARU(176)**2*0.25D0*PMAS(23,1)**4/SH**2*
+ & SQRT(MAX(0D0,1D0-4D0*RM1))
+ WID2=WIDS(25,2)**2
+
+ ELSEIF(I.EQ.20.AND.KFLA.EQ.35) THEN
+C...H0 -> A0 + A0.
+ WDTP(I)=FAC*PARU(177)**2*0.25D0*PMAS(23,1)**4/SH**2*
+ & SQRT(MAX(0D0,1D0-4D0*RM1))
+ WID2=WIDS(36,2)**2
+
+ ELSEIF(I.EQ.18.AND.KFLA.EQ.36) THEN
+C...A0 -> Z0 + h0.
+ WDTP(I)=FAC*PARU(186)**2*0.5D0*SQRT(MAX(0D0,
+ & (1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=WIDS(23,2)*WIDS(25,2)
+
+CMRENNA++
+ ELSE
+C...Add in SUSY decays (two-body) by rescaling by phase space factor.
+ RM10=RM1*SH/PMR**2
+ RM20=RM2*SH/PMR**2
+ WFAC0=1D0+RM10**2+RM20**2-2D0*(RM10+RM20+RM10*RM20)
+ WFAC=1D0+RM1**2+RM2**2-2D0*(RM1+RM2+RM1*RM2)
+ IF(WFAC.LE.0D0 .OR. WFAC0.LE.0D0) THEN
+ WFAC=0D0
+ ELSE
+ WFAC=WFAC/WFAC0
+ ENDIF
+ WDTP(I)=PMAS(KFLA,2)*BRAT(IDC)*(SHR/PMR)*SQRT(WFAC)
+CMRENNA--
+ IF(KFC2.EQ.KFC1) THEN
+ WID2=WIDS(KFC1,1)
+ ELSE
+ KSGN1=2
+ IF(KFDP(IDC,1).LT.0) KSGN1=3
+ KSGN2=2
+ IF(KFDP(IDC,2).LT.0) KSGN2=3
+ WID2=WIDS(KFC1,KSGN1)*WIDS(KFC2,KSGN2)
+ ENDIF
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 260 CONTINUE
+
+ ELSEIF(KFLA.EQ.32) THEN
+C...Z'0:
+ ICASE=1
+ XWC=1D0/(16D0*XW*XW1)
+ FAC=(AEM*XWC/3D0)*SHR
+ VINT(117)=0D0
+ 270 CONTINUE
+ IF(MINT(61).GE.1.AND.ICASE.EQ.2) THEN
+ VINT(111)=0D0
+ VINT(112)=0D0
+ VINT(113)=0D0
+ VINT(114)=0D0
+ VINT(115)=0D0
+ VINT(116)=0D0
+ ENDIF
+ IF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ KFAI=IABS(MINT(15))
+ EI=KCHG(KFAI,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ KFAIC=1
+ IF(KFAI.LE.10.AND.MOD(KFAI,2).EQ.0) KFAIC=2
+ IF(KFAI.GT.10.AND.MOD(KFAI,2).NE.0) KFAIC=3
+ IF(KFAI.GT.10.AND.MOD(KFAI,2).EQ.0) KFAIC=4
+ VPI=PARU(119+2*KFAIC)
+ API=PARU(120+2*KFAIC)
+ SQMZ=PMAS(23,1)**2
+ HZ=SHR*FAC*VINT(117)
+ SQMZP=PMAS(32,1)**2
+ HZP=SHR*FAC*WDTP(0)
+ IF(MSTP(44).EQ.1.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.5.OR.
+ & MSTP(44).EQ.7) VINT(111)=1D0
+ IF(MSTP(44).EQ.4.OR.MSTP(44).EQ.7) VINT(112)=
+ & 2D0*XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+HZ**2)
+ IF(MSTP(44).EQ.5.OR.MSTP(44).EQ.7) VINT(113)=
+ & 2D0*XWC*SH*(SH-SQMZP)/((SH-SQMZP)**2+HZP**2)
+ IF(MSTP(44).EQ.2.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.6.OR.
+ & MSTP(44).EQ.7) VINT(114)=XWC**2*SH**2/((SH-SQMZ)**2+HZ**2)
+ IF(MSTP(44).EQ.6.OR.MSTP(44).EQ.7) VINT(115)=
+ & 2D0*XWC**2*SH**2*((SH-SQMZ)*(SH-SQMZP)+HZ*HZP)/
+ & (((SH-SQMZ)**2+HZ**2)*((SH-SQMZP)**2+HZP**2))
+ IF(MSTP(44).EQ.3.OR.MSTP(44).EQ.5.OR.MSTP(44).EQ.6.OR.
+ & MSTP(44).EQ.7) VINT(116)=XWC**2*SH**2/((SH-SQMZP)**2+HZP**2)
+ ENDIF
+ DO 280 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 280
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0.OR.MDME(IDC,1).LT.0) GOTO 280
+ WID2=1D0
+ IF(I.LE.16) THEN
+ IF(I.LE.8) THEN
+C...Z'0 -> q + qbar
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ VPF=PARU(123-2*MOD(I,2))
+ APF=PARU(124-2*MOD(I,2))
+ FCOF=3D0*RADC
+ IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*
+ & PYHFTH(SH,SH*RM1,1D0)
+ IF(I.EQ.6) WID2=WIDS(6,1)
+ IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
+ ELSEIF(I.LE.16) THEN
+C...Z'0 -> l+ + l-, nu + nubar
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ VPF=PARU(127-2*MOD(I,2))
+ APF=PARU(128-2*MOD(I,2))
+ FCOF=1D0
+ IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
+ ENDIF
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(ICASE.EQ.1) THEN
+ WDTPZ=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
+ WDTP(I)=FAC*FCOF*(VPF**2*(1D0+2D0*RM1)+
+ & APF**2*(1D0-4D0*RM1))*BE34
+ ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ WDTP(I)=FAC*FCOF*((EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*
+ & EF*VF+EI*VPI*VINT(113)*EF*VPF+(VI**2+AI**2)*VINT(114)*
+ & VF**2+(VI*VPI+AI*API)*VINT(115)*VF*VPF+(VPI**2+API**2)*
+ & VINT(116)*VPF**2)*(1D0+2D0*RM1)+((VI**2+AI**2)*VINT(114)*
+ & AF**2+(VI*VPI+AI*API)*VINT(115)*AF*APF+(VPI**2+API**2)*
+ & VINT(116)*APF**2)*(1D0-4D0*RM1))*BE34
+ ELSEIF(MINT(61).EQ.2) THEN
+ FGGF=FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ FGZF=FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ FGZPF=FCOF*EF*VPF*(1D0+2D0*RM1)*BE34
+ FZZF=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
+ FZZPF=FCOF*(VF*VPF*(1D0+2D0*RM1)+AF*APF*(1D0-4D0*RM1))*
+ & BE34
+ FZPZPF=FCOF*(VPF**2*(1D0+2D0*RM1)+APF**2*(1D0-4D0*RM1))*
+ & BE34
+ ENDIF
+ ELSEIF(I.EQ.17) THEN
+C...Z'0 -> W+ + W-
+ WDTPZP=PARU(129)**2*XW1**2*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
+ & (1D0+10D0*RM1+10D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
+ IF(ICASE.EQ.1) THEN
+ WDTPZ=0D0
+ WDTP(I)=FAC*WDTPZP
+ ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ WDTP(I)=FAC*(VPI**2+API**2)*VINT(116)*WDTPZP
+ ELSEIF(MINT(61).EQ.2) THEN
+ FGGF=0D0
+ FGZF=0D0
+ FGZPF=0D0
+ FZZF=0D0
+ FZZPF=0D0
+ FZPZPF=WDTPZP
+ ENDIF
+ WID2=WIDS(24,1)
+ ELSEIF(I.EQ.18) THEN
+C...Z'0 -> H+ + H-
+ CZC=2D0*(1D0-2D0*XW)
+ BE34C=(1D0-4D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(ICASE.EQ.1) THEN
+ WDTPZ=0.25D0*PARU(142)**2*CZC**2*BE34C
+ WDTP(I)=FAC*0.25D0*PARU(143)**2*CZC**2*BE34C
+ ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ WDTP(I)=FAC*0.25D0*(EI**2*VINT(111)+PARU(142)*EI*VI*
+ & VINT(112)*CZC+PARU(143)*EI*VPI*VINT(113)*CZC+PARU(142)**2*
+ & (VI**2+AI**2)*VINT(114)*CZC**2+PARU(142)*PARU(143)*
+ & (VI*VPI+AI*API)*VINT(115)*CZC**2+PARU(143)**2*
+ & (VPI**2+API**2)*VINT(116)*CZC**2)*BE34C
+ ELSEIF(MINT(61).EQ.2) THEN
+ FGGF=0.25D0*BE34C
+ FGZF=0.25D0*PARU(142)*CZC*BE34C
+ FGZPF=0.25D0*PARU(143)*CZC*BE34C
+ FZZF=0.25D0*PARU(142)**2*CZC**2*BE34C
+ FZZPF=0.25D0*PARU(142)*PARU(143)*CZC**2*BE34C
+ FZPZPF=0.25D0*PARU(143)**2*CZC**2*BE34C
+ ENDIF
+ WID2=WIDS(37,1)
+ ELSEIF(I.EQ.19) THEN
+C...Z'0 -> Z0 + gamma.
+ ELSEIF(I.EQ.20) THEN
+C...Z'0 -> Z0 + h0
+ FLAM=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ WDTPZP=PARU(145)**2*4D0*ABS(1D0-2D0*XW)*
+ & (3D0*RM1+0.25D0*FLAM**2)*FLAM
+ IF(ICASE.EQ.1) THEN
+ WDTPZ=0D0
+ WDTP(I)=FAC*WDTPZP
+ ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ WDTP(I)=FAC*(VPI**2+API**2)*VINT(116)*WDTPZP
+ ELSEIF(MINT(61).EQ.2) THEN
+ FGGF=0D0
+ FGZF=0D0
+ FGZPF=0D0
+ FZZF=0D0
+ FZZPF=0D0
+ FZPZPF=WDTPZP
+ ENDIF
+ WID2=WIDS(23,2)*WIDS(25,2)
+ ELSEIF(I.EQ.21.OR.I.EQ.22) THEN
+C...Z' -> h0 + A0 or H0 + A0.
+ BE34C=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ IF(I.EQ.21) THEN
+ CZAH=PARU(186)
+ CZPAH=PARU(188)
+ ELSE
+ CZAH=PARU(187)
+ CZPAH=PARU(189)
+ ENDIF
+ IF(ICASE.EQ.1) THEN
+ WDTPZ=CZAH**2*BE34C
+ WDTP(I)=FAC*CZPAH**2*BE34C
+ ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
+ WDTP(I)=FAC*(CZAH**2*(VI**2+AI**2)*VINT(114)+CZAH*CZPAH*
+ & (VI*VPI+AI*API)*VINT(115)+CZPAH**2*(VPI**2+API**2)*
+ & VINT(116))*BE34C
+ ELSEIF(MINT(61).EQ.2) THEN
+ FGGF=0D0
+ FGZF=0D0
+ FGZPF=0D0
+ FZZF=CZAH**2*BE34C
+ FZZPF=CZAH*CZPAH*BE34C
+ FZPZPF=CZPAH**2*BE34C
+ ENDIF
+ IF(I.EQ.21) WID2=WIDS(25,2)*WIDS(36,2)
+ IF(I.EQ.22) WID2=WIDS(35,2)*WIDS(36,2)
+ ENDIF
+ IF(ICASE.EQ.1) THEN
+ VINT(117)=VINT(117)+WDTPZ
+ WDTP(0)=WDTP(0)+WDTP(I)
+ ENDIF
+ IF(MDME(IDC,1).GT.0) THEN
+ IF((ICASE.EQ.1.AND.MINT(61).NE.1).OR.
+ & (ICASE.EQ.2.AND.MINT(61).EQ.1)) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
+ & WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ IF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
+ IF(MSTP(44).EQ.1.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.5.OR.
+ & MSTP(44).EQ.7) VINT(111)=VINT(111)+FGGF*WID2
+ IF(MSTP(44).EQ.4.OR.MSTP(44).EQ.7) VINT(112)=VINT(112)+
+ & FGZF*WID2
+ IF(MSTP(44).EQ.5.OR.MSTP(44).EQ.7) VINT(113)=VINT(113)+
+ & FGZPF*WID2
+ IF(MSTP(44).EQ.2.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.6.OR.
+ & MSTP(44).EQ.7) VINT(114)=VINT(114)+FZZF*WID2
+ IF(MSTP(44).EQ.6.OR.MSTP(44).EQ.7) VINT(115)=VINT(115)+
+ & FZZPF*WID2
+ IF(MSTP(44).EQ.3.OR.MSTP(44).EQ.5.OR.MSTP(44).EQ.6.OR.
+ & MSTP(44).EQ.7) VINT(116)=VINT(116)+FZPZPF*WID2
+ ENDIF
+ ENDIF
+ 280 CONTINUE
+ IF(MINT(61).GE.1) ICASE=3-ICASE
+ IF(ICASE.EQ.2) GOTO 270
+
+ ELSEIF(KFLA.EQ.34) THEN
+C...W'+/-:
+ FAC=(AEM/(24D0*XW))*SHR
+ DO 290 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 290
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 290
+ WID2=1D0
+ IF(I.LE.20) THEN
+ IF(I.LE.16) THEN
+C...W'+/- -> q + qbar'
+ FCOF=3D0*RADC*(PARU(131)**2+PARU(132)**2)*
+ & VCKM((I-1)/4+1,MOD(I-1,4)+1)
+ IF(KFLR.GT.0) THEN
+ IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
+ IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
+ IF(I.GE.13) WID2=WID2*WIDS(7,3)
+ ELSE
+ IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
+ IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
+ IF(I.GE.13) WID2=WID2*WIDS(7,2)
+ ENDIF
+ ELSEIF(I.LE.20) THEN
+C...W'+/- -> l+/- + nu
+ FCOF=PARU(133)**2+PARU(134)**2
+ IF(KFLR.GT.0) THEN
+ IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
+ ELSE
+ IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
+ ENDIF
+ ENDIF
+ WDTP(I)=FAC*FCOF*0.5D0*(2D0-RM1-RM2-(RM1-RM2)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ ELSEIF(I.EQ.21) THEN
+C...W'+/- -> W+/- + Z0
+ WDTP(I)=FAC*PARU(135)**2*0.5D0*XW1*(RM1/RM2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
+ & (1D0+10D0*RM1+10D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
+ IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(23,2)
+ IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(23,2)
+ ELSEIF(I.EQ.23) THEN
+C...W'+/- -> W+/- + h0
+ FLAM=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ WDTP(I)=FAC*PARU(146)**2*2D0*(3D0*RM1+0.25D0*FLAM**2)*FLAM
+ IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(25,2)
+ IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(25,2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 290 CONTINUE
+
+ ELSEIF(KFLA.EQ.37) THEN
+C...H+/-:
+ FAC=(AEM/(8D0*XW))*(SH/PMAS(24,1)**2)*SHR
+ DO 300 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 300
+ KFC1=PYCOMP(KFDP(IDC,1))
+ KFC2=PYCOMP(KFDP(IDC,2))
+ RM1=PMAS(KFC1,1)**2/SH
+ RM2=PMAS(KFC2,1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 300
+ WID2=1D0
+ IF(I.LE.4) THEN
+C...H+/- -> q + qbar'
+ RM1R=RM1
+ IF(MSTP(37).EQ.1.AND.MSTP(2).GE.1) RM1R=RM1*
+ & (LOG(MAX(4D0,PARP(37)**2*RM1*SH/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
+ WDTP(I)=FAC*3D0*RADC*((RM1R*PARU(141)**2+RM2/PARU(141)**2)*
+ & (1D0-RM1R-RM2)-4D0*RM1R*RM2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ IF(KFLR.GT.0) THEN
+ IF(I.EQ.3) WID2=WIDS(6,2)
+ IF(I.EQ.4) WID2=WIDS(7,3)*WIDS(8,2)
+ ELSE
+ IF(I.EQ.3) WID2=WIDS(6,3)
+ IF(I.EQ.4) WID2=WIDS(7,2)*WIDS(8,3)
+ ENDIF
+ ELSEIF(I.LE.8) THEN
+C...H+/- -> l+/- + nu
+ WDTP(I)=FAC*((RM1*PARU(141)**2+RM2/PARU(141)**2)*
+ & (1D0-RM1-RM2)-4D0*RM1*RM2)*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-
+ & 4D0*RM1*RM2))
+ IF(KFLR.GT.0) THEN
+ IF(I.EQ.8) WID2=WIDS(17,3)*WIDS(18,2)
+ ELSE
+ IF(I.EQ.8) WID2=WIDS(17,2)*WIDS(18,3)
+ ENDIF
+ ELSEIF(I.EQ.9) THEN
+C...H+/- -> W+/- + h0.
+ WDTP(I)=FAC*PARU(195)**2*0.5D0*SQRT(MAX(0D0,
+ & (1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(25,2)
+ IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(25,2)
+
+CMRENNA++
+ ELSE
+C...Add in SUSY decays (two-body) by rescaling by phase space factor.
+ RM10=RM1*SH/PMR**2
+ RM20=RM2*SH/PMR**2
+ WFAC0=1D0+RM10**2+RM20**2-2D0*(RM10+RM20+RM10*RM20)
+ WFAC=1D0+RM1**2+RM2**2-2D0*(RM1+RM2+RM1*RM2)
+ IF(WFAC.LE.0D0 .OR. WFAC0.LE.0D0) THEN
+ WFAC=0D0
+ ELSE
+ WFAC=WFAC/WFAC0
+ ENDIF
+ WDTP(I)=PMAS(KC,2)*BRAT(IDC)*(SHR/PMR)*SQRT(WFAC)
+CMRENNA--
+ KSGN1=2
+ IF(KFLS*KFDP(IDC,1).LT.0.AND.KCHG(KFC1,3).EQ.1) KSGN1=3
+ KSGN2=2
+ IF(KFLS*KFDP(IDC,2).LT.0.AND.KCHG(KFC2,3).EQ.1) KSGN2=3
+ WID2=WIDS(KFC1,KSGN1)*WIDS(KFC2,KSGN2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 300 CONTINUE
+
+ ELSEIF(KFLA.EQ.38) THEN
+C...Techni-eta.
+ FAC=(SH/PARP(46)**2)*SHR
+ DO 310 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 310
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 310
+ WID2=1D0
+ IF(I.LE.2) THEN
+ WDTP(I)=FAC*RM1*SQRT(MAX(0D0,1D0-4D0*RM1))/(4D0*PARU(1))
+ IF(I.EQ.2) WID2=WIDS(6,1)
+ ELSE
+ WDTP(I)=FAC*5D0*AS**2/(96D0*PARU(1)**3)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 310 CONTINUE
+
+ ELSEIF(KFLA.EQ.39) THEN
+C...LQ (leptoquark).
+ FAC=(AEM/4D0)*PARU(151)*SHR
+ DO 320 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 320
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 320
+ WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=1D0
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 320 CONTINUE
+
+ ELSEIF(KFLA.EQ.40) THEN
+C...R:
+ FAC=(AEM/(12D0*XW))*SHR
+ DO 330 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 330
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 330
+ WID2=1D0
+ IF(I.LE.6) THEN
+C...R -> q + qbar'
+ FCOF=3D0*RADC
+ ELSEIF(I.LE.9) THEN
+C...R -> l+ + l'-
+ FCOF=1D0
+ ENDIF
+ WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ IF(KFLR.GT.0) THEN
+ IF(I.EQ.4) WID2=WIDS(6,3)
+ IF(I.EQ.5) WID2=WIDS(7,3)
+ IF(I.EQ.6) WID2=WIDS(6,2)*WIDS(8,3)
+ IF(I.EQ.9) WID2=WIDS(17,3)
+ ELSE
+ IF(I.EQ.4) WID2=WIDS(6,2)
+ IF(I.EQ.5) WID2=WIDS(7,2)
+ IF(I.EQ.6) WID2=WIDS(6,3)*WIDS(8,2)
+ IF(I.EQ.9) WID2=WIDS(17,2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 330 CONTINUE
+
+ ELSEIF(KFLA.EQ.51.OR.KFLA.EQ.52) THEN
+C...Techni-pi0 and techni-pi+-:
+ FAC=(3D0/(32D0*PARU(1)*PARP(142)**2))*SHR
+ DO 340 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 340
+ PM1=PMAS(PYCOMP(KFDP(IDC,1)),1)
+ PM2=PMAS(PYCOMP(KFDP(IDC,2)),1)
+ RM1=PM1**2/SH
+ RM2=PM2**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 340
+ WID2=1D0
+C...pi_tech -> f + f'.
+ FCOF=1D0
+ IF(IABS(KFDP(IDC,1)).LT.10) FCOF=3D0*RADC
+ WDTP(I)=FAC*FCOF*(PM1+PM2)**2*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 340 CONTINUE
+
+ ELSEIF(KFLA.EQ.53) THEN
+C...Techni-pi'0 not yet implemented.
+
+ ELSEIF(KFLA.EQ.54) THEN
+C...Techni-rho0:
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ FAC=(ALPRHT/12D0)*SHR
+ FACF=(1D0/6D0)*(AEM**2/ALPRHT)*(PMAS(KFLA,1)**4/SHR**3)
+ SQMZ=PMAS(23,1)**2
+ GMMZ=PMAS(23,1)*PMAS(23,2)
+ XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
+ BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ DO 350 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 350
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 350
+ IF(I.EQ.1) THEN
+C...rho_tech0 -> W+ + W-.
+ WDTP(I)=FAC*PARP(141)**4*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=WIDS(24,1)
+ ELSEIF(I.EQ.2) THEN
+C...rho_tech0 -> W+ + pi_tech-.
+ WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=WIDS(24,2)*WIDS(52,3)
+ ELSEIF(I.EQ.3) THEN
+C...rho_tech0 -> pi_tech+ + W-.
+ WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=WIDS(52,2)*WIDS(24,3)
+ ELSEIF(I.EQ.4) THEN
+C...rho_tech0 -> pi_tech+ + pi_tech-.
+ WDTP(I)=FAC*(1D0-PARP(141)**2)**2*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=WIDS(52,1)
+ ELSE
+C...rho_tech0 -> f + fbar.
+ WID2=1D0
+ IF(I.LE.12) THEN
+ IA=I-4
+ FCOF=3D0*RADC
+ IF(IA.GE.6.AND.IA.LE.8) WID2=WIDS(IA,1)
+ ELSE
+ IA=I-2
+ FCOF=1D0
+ IF(IA.GE.17) WID2=WIDS(IA,1)
+ ENDIF
+ EI=KCHG(IA,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ WDTP(I)=FACF*FCOF*(1D0-RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))*
+ & ((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
+ & (EI+VARI*BWZR)**2+(VARI*BWZI)**2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 350 CONTINUE
+
+ ELSEIF(KFLA.EQ.55) THEN
+C...Techni-rho+/-:
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ FAC=(ALPRHT/12D0)*SHR
+ SQMW=PMAS(24,1)**2
+ GMMW=PMAS(24,1)*PMAS(24,2)
+ FACF=(1D0/6D0)*(AEM**2/ALPRHT)*(PMAS(KFLA,1)**4/SHR**3)*
+ & (0.25D0/XW**2)*SH**2/((SH-SQMW)**2+GMMW**2)
+ DO 360 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 360
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 360
+ IF(I.EQ.1) THEN
+C...rho_tech+ -> W+ + Z0.
+ WDTP(I)=FAC*PARP(141)**4*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,2)*WIDS(23,2)
+ ELSE
+ WID2=WIDS(24,3)*WIDS(23,2)
+ ENDIF
+ ELSEIF(I.EQ.2) THEN
+C...rho_tech+ -> W+ + pi_tech0.
+ WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(24,2)*WIDS(51,2)
+ ELSE
+ WID2=WIDS(24,3)*WIDS(51,2)
+ ENDIF
+ ELSEIF(I.EQ.3) THEN
+C...rho_tech+ -> pi_tech+ + Z0.
+ WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(52,2)*WIDS(23,2)
+ ELSE
+ WID2=WIDS(52,3)*WIDS(23,2)
+ ENDIF
+ ELSEIF(I.EQ.4) THEN
+C...rho_tech+ -> pi_tech+ + pi_tech0.
+ WDTP(I)=FAC*(1D0-PARP(141)**2)**2*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ IF(KFLR.GT.0) THEN
+ WID2=WIDS(52,2)*WIDS(51,2)
+ ELSE
+ WID2=WIDS(52,3)*WIDS(51,2)
+ ENDIF
+ ELSE
+C...rho_tech+ -> f + fbar'.
+ IA=I-4
+ WID2=1D0
+ IF(IA.LE.16) THEN
+ FCOF=3D0*RADC*VCKM((IA-1)/4+1,MOD(IA-1,4)+1)
+ IF(KFLR.GT.0) THEN
+ IF(MOD(IA,4).EQ.3) WID2=WIDS(6,2)
+ IF(MOD(IA,4).EQ.0) WID2=WIDS(8,2)
+ IF(IA.GE.13) WID2=WID2*WIDS(7,3)
+ ELSE
+ IF(MOD(IA,4).EQ.3) WID2=WIDS(6,3)
+ IF(MOD(IA,4).EQ.0) WID2=WIDS(8,3)
+ IF(IA.GE.13) WID2=WID2*WIDS(7,2)
+ ENDIF
+ ELSE
+ FCOF=1D0
+ IF(KFLR.GT.0) THEN
+ IF(IA.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
+ ELSE
+ IF(IA.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
+ ENDIF
+ ENDIF
+ WDTP(I)=FACF*FCOF*0.5D0*(2D0-RM1-RM2-(RM1-RM2)**2)*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 360 CONTINUE
+
+ ELSEIF(KFLA.EQ.56) THEN
+C...Techni-omega:
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ FAC=(AEM/24D0)*(SHR**3/PARP(145)**2)
+ FACF=(1D0/6D0)*(AEM**2/ALPRHT)*(PMAS(KFLA,1)**4/SHR**3)*
+ & (2D0*PARP(143)-1D0)**2
+ SQMZ=PMAS(23,1)**2
+ GMMZ=PMAS(23,1)*PMAS(23,2)
+ BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ DO 370 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 370
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 370
+ IF(I.EQ.1) THEN
+C...omega_tech0 -> gamma + pi_tech0.
+ WDTP(I)=FAC*
+ & SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
+ WID2=WIDS(51,2)
+ ELSEIF(I.EQ.2) THEN
+C...omega_tech0 -> Z0 + pi_tech0 not known.
+ WDTP(I)=0D0
+ WID2=WIDS(23,2)*WIDS(51,2)
+ ELSE
+C...omega_tech0 -> f + fbar.
+ WID2=1D0
+ IF(I.LE.10) THEN
+ IA=I-2
+ FCOF=3D0*RADC
+ IF(IA.GE.6.AND.IA.LE.8) WID2=WIDS(IA,1)
+ ELSE
+ IA=I
+ FCOF=1D0
+ IF(IA.GE.17) WID2=WIDS(IA,1)
+ ENDIF
+ EI=KCHG(IA,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ WDTP(I)=FACF*FCOF*(1D0-RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))*
+ & ((EI-VALI*BWZR)**2+(VALI*BWZI)**2+
+ & (EI-VARI*BWZR)**2+(VARI*BWZI)**2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 370 CONTINUE
+
+ ELSEIF(KFLA.EQ.KEXCIT+1) THEN
+C...d* excited quark.
+ FAC=(SH/PARU(155)**2)*SHR
+ DO 380 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 380
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 380
+ IF(I.EQ.1) THEN
+C...d* -> g + d.
+ WDTP(I)=FAC*AS*PARU(159)**2/3D0
+ WID2=1D0
+ ELSEIF(I.EQ.2) THEN
+C...d* -> gamma + d.
+ QF=-PARU(157)/2D0+PARU(158)/6D0
+ WDTP(I)=FAC*AEM*QF**2/4D0
+ WID2=1D0
+ ELSEIF(I.EQ.3) THEN
+C...d* -> Z0 + d.
+ QF=-PARU(157)*XW1/2D0-PARU(158)*XW/6D0
+ WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ WID2=WIDS(23,2)
+ ELSEIF(I.EQ.4) THEN
+C...d* -> W- + u.
+ WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ IF(KFLR.GT.0) WID2=WIDS(24,3)
+ IF(KFLR.LT.0) WID2=WIDS(24,2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 380 CONTINUE
+
+ ELSEIF(KFLA.EQ.KEXCIT+2) THEN
+C...u* excited quark.
+ FAC=(SH/PARU(155)**2)*SHR
+ DO 390 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 390
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 390
+ IF(I.EQ.1) THEN
+C...u* -> g + u.
+ WDTP(I)=FAC*AS*PARU(159)**2/3D0
+ WID2=1D0
+ ELSEIF(I.EQ.2) THEN
+C...u* -> gamma + u.
+ QF=PARU(157)/2D0+PARU(158)/6D0
+ WDTP(I)=FAC*AEM*QF**2/4D0
+ WID2=1D0
+ ELSEIF(I.EQ.3) THEN
+C...u* -> Z0 + u.
+ QF=PARU(157)*XW1/2D0-PARU(158)*XW/6D0
+ WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ WID2=WIDS(23,2)
+ ELSEIF(I.EQ.4) THEN
+C...u* -> W+ + d.
+ WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ IF(KFLR.GT.0) WID2=WIDS(24,2)
+ IF(KFLR.LT.0) WID2=WIDS(24,3)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 390 CONTINUE
+
+ ELSEIF(KFLA.EQ.KEXCIT+11) THEN
+C...e* excited lepton.
+ FAC=(SH/PARU(155)**2)*SHR
+ DO 400 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 400
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 400
+ IF(I.EQ.1) THEN
+C...e* -> gamma + e.
+ QF=-PARU(157)/2D0-PARU(158)/2D0
+ WDTP(I)=FAC*AEM*QF**2/4D0
+ WID2=1D0
+ ELSEIF(I.EQ.2) THEN
+C...e* -> Z0 + e.
+ QF=-PARU(157)*XW1/2D0+PARU(158)*XW/2D0
+ WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ WID2=WIDS(23,2)
+ ELSEIF(I.EQ.3) THEN
+C...e* -> W- + nu.
+ WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ IF(KFLR.GT.0) WID2=WIDS(24,3)
+ IF(KFLR.LT.0) WID2=WIDS(24,2)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 400 CONTINUE
+
+ ELSEIF(KFLA.EQ.KEXCIT+12) THEN
+C...nu*_e excited neutrino.
+ FAC=(SH/PARU(155)**2)*SHR
+ DO 410 I=1,MDCY(KC,3)
+ IDC=I+MDCY(KC,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 410
+ RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
+ RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
+ IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 410
+ IF(I.EQ.1) THEN
+C...nu*_e -> Z0 + nu*_e.
+ QF=PARU(157)*XW1/2D0+PARU(158)*XW/2D0
+ WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ WID2=WIDS(23,2)
+ ELSEIF(I.EQ.2) THEN
+C...nu*_e -> W+ + e.
+ WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
+ & (1D0-RM1)**2*(2D0+RM1)
+ IF(KFLR.GT.0) WID2=WIDS(24,2)
+ IF(KFLR.LT.0) WID2=WIDS(24,3)
+ ENDIF
+ WDTP(0)=WDTP(0)+WDTP(I)
+ IF(MDME(IDC,1).GT.0) THEN
+ WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
+ WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
+ WDTE(I,0)=WDTE(I,MDME(IDC,1))
+ WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
+ ENDIF
+ 410 CONTINUE
+
+ ENDIF
+ MINT(61)=0
+ MINT(62)=0
+ MINT(63)=0
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYOFSH
+C...Calculates partial width and differential cross-section maxima
+C...of channels/processes not allowed on mass-shell, and selects
+C...masses in such channels/processes.
+
+ SUBROUTINE PYOFSH(MOFSH,KFMO,KFD1,KFD2,PMMO,RET1,RET2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
+ &/PYINT2/,/PYINT5/
+C...Local arrays.
+ DIMENSION KFD(2),MBW(2),PMD(2),PGD(2),PMG(2),PML(2),PMU(2),
+ &PMH(2),ATL(2),ATU(2),ATH(2),RMG(2),INX1(100),XPT1(100),
+ &FPT1(100),INX2(100),XPT2(100),FPT2(100),WDTP(0:200),
+ &WDTE(0:200,0:5)
+
+C...Find if particles equal, maximum mass, matrix elements, etc.
+ MINT(51)=0
+ ISUB=MINT(1)
+ KFD(1)=IABS(KFD1)
+ KFD(2)=IABS(KFD2)
+ MEQL=0
+ IF(KFD(1).EQ.KFD(2)) MEQL=1
+ MLM=0
+ IF(MOFSH.GE.2.AND.MEQL.EQ.1) MLM=INT(1.5D0+PYR(0))
+ IF(MOFSH.LE.2.OR.MOFSH.EQ.5) THEN
+ NOFF=44
+ PMMX=PMMO
+ ELSE
+ NOFF=40
+ PMMX=VINT(1)
+ IF(CKIN(2).GT.CKIN(1)) PMMX=MIN(CKIN(2),VINT(1))
+ ENDIF
+ MMED=0
+ IF((KFMO.EQ.25.OR.KFMO.EQ.35.OR.KFMO.EQ.36).AND.MEQL.EQ.1.AND.
+ &(KFD(1).EQ.23.OR.KFD(1).EQ.24)) MMED=1
+ IF((KFMO.EQ.32.OR.IABS(KFMO).EQ.34).AND.(KFD(1).EQ.23.OR.
+ &KFD(1).EQ.24).AND.(KFD(2).EQ.23.OR.KFD(2).EQ.24)) MMED=2
+ IF((KFMO.EQ.32.OR.IABS(KFMO).EQ.34).AND.(KFD(2).EQ.25.OR.
+ &KFD(2).EQ.35.OR.KFD(2).EQ.36)) MMED=3
+ LOOP=1
+
+C...Find where Breit-Wigners are required, else select discrete masses.
+ 100 DO 110 I=1,2
+ KFCA=PYCOMP(KFD(I))
+ IF(KFCA.GT.0) THEN
+ PMD(I)=PMAS(KFCA,1)
+ PGD(I)=PMAS(KFCA,2)
+ ELSE
+ PMD(I)=0D0
+ PGD(I)=0D0
+ ENDIF
+ IF(MSTP(42).LE.0.OR.PGD(I).LT.PARP(41)) THEN
+ MBW(I)=0
+ PMG(I)=PMD(I)
+ RMG(I)=(PMG(I)/PMMX)**2
+ ELSE
+ MBW(I)=1
+ ENDIF
+ 110 CONTINUE
+
+C...Find allowed mass range and Breit-Wigner parameters.
+ DO 120 I=1,2
+ IF(MOFSH.EQ.1.AND.LOOP.EQ.1.AND.MBW(I).EQ.1) THEN
+ PML(I)=PARP(42)
+ PMU(I)=PMMX-PARP(42)
+ IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
+ IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
+ ELSEIF(MBW(I).EQ.1.AND.MOFSH.NE.5) THEN
+ ILM=I
+ IF(MLM.EQ.2) ILM=3-I
+ PML(I)=MAX(CKIN(NOFF+2*ILM-1),PARP(42))
+ PMU(I)=PMMX-MAX(CKIN(NOFF+5-2*ILM),PARP(42))
+ IF(CKIN(NOFF+2*ILM).GT.CKIN(NOFF+2*ILM-1)) PMU(I)=MIN(PMU(I),
+ & CKIN(NOFF+2*ILM))
+ IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
+ IF(I.EQ.MLM) PMU(I)=MIN(PMU(I),0.5D0*PMMX)
+ IF(MEQL.EQ.0) PMH(I)=MIN(PMU(I),0.5D0*PMMX)
+ IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
+ IF(MBW(I).EQ.1) THEN
+ ATL(I)=ATAN((PML(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
+ ATU(I)=ATAN((PMU(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
+ IF(MEQL.EQ.0) ATH(I)=ATAN((PMH(I)**2-PMD(I)**2)/(PMD(I)*
+ & PGD(I)))
+ ENDIF
+ ELSEIF(MBW(I).EQ.1.AND.MOFSH.EQ.5) THEN
+ ILM=I
+ IF(MLM.EQ.2) ILM=3-I
+ PML(I)=MAX(CKIN(48+I),PARP(42))
+ PMU(I)=PMMX-MAX(CKIN(51-I),PARP(42))
+ IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
+ IF(I.EQ.MLM) PMU(I)=MIN(PMU(I),0.5D0*PMMX)
+ IF(MEQL.EQ.0) PMH(I)=MIN(PMU(I),0.5D0*PMMX)
+ IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
+ IF(MBW(I).EQ.1) THEN
+ ATL(I)=ATAN((PML(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
+ ATU(I)=ATAN((PMU(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
+ IF(MEQL.EQ.0) ATH(I)=ATAN((PMH(I)**2-PMD(I)**2)/(PMD(I)*
+ & PGD(I)))
+ ENDIF
+ ENDIF
+ 120 CONTINUE
+ IF(MBW(1).LT.0.OR.MBW(2).LT.0.OR.(MBW(1).EQ.0.AND.MBW(2).EQ.0))
+ &THEN
+ CALL PYERRM(3,'(PYOFSH:) no allowed decay product masses')
+ MINT(51)=1
+ RETURN
+ ENDIF
+
+C...Calculation of partial width of resonance.
+ IF(MOFSH.EQ.1) THEN
+
+C..If only one integration, pick that to be the inner.
+ IF(MBW(1).EQ.0) THEN
+ PM2=PMD(1)
+ PMD(1)=PMD(2)
+ PGD(1)=PGD(2)
+ PML(1)=PML(2)
+ PMU(1)=PMU(2)
+ ELSEIF(MBW(2).EQ.0) THEN
+ PM2=PMD(2)
+ ENDIF
+
+C...Start outer loop of integration.
+ IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
+ ATL2=ATAN((PML(2)**2-PMD(2)**2)/(PMD(2)*PGD(2)))
+ ATU2=ATAN((PMU(2)**2-PMD(2)**2)/(PMD(2)*PGD(2)))
+ NPT2=1
+ XPT2(1)=1D0
+ INX2(1)=0
+ FMAX2=0D0
+ ENDIF
+ 130 IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
+ PM2S=PMD(2)**2+PMD(2)*PGD(2)*TAN(ATL2+XPT2(NPT2)*(ATU2-ATL2))
+ PM2=MIN(PMU(2),MAX(PML(2),SQRT(MAX(0D0,PM2S))))
+ ENDIF
+ RM2=(PM2/PMMX)**2
+
+C...Start inner loop of integration.
+ PML1=PML(1)
+ PMU1=MIN(PMU(1),PMMX-PM2)
+ IF(MEQL.EQ.1) PMU1=MIN(PMU1,PM2)
+ ATL1=ATAN((PML1**2-PMD(1)**2)/(PMD(1)*PGD(1)))
+ ATU1=ATAN((PMU1**2-PMD(1)**2)/(PMD(1)*PGD(1)))
+ IF(PML1+PARJ(64).GE.PMU1.OR.ATL1+1D-7.GE.ATU1) THEN
+ FUNC2=0D0
+ GOTO 180
+ ENDIF
+ NPT1=1
+ XPT1(1)=1D0
+ INX1(1)=0
+ FMAX1=0D0
+ 140 PM1S=PMD(1)**2+PMD(1)*PGD(1)*TAN(ATL1+XPT1(NPT1)*(ATU1-ATL1))
+ PM1=MIN(PMU1,MAX(PML1,SQRT(MAX(0D0,PM1S))))
+ RM1=(PM1/PMMX)**2
+
+C...Evaluate function value - inner loop.
+ FUNC1=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
+ IF(MMED.EQ.1) FUNC1=FUNC1*((1D0-RM1-RM2)**2+8D0*RM1*RM2)
+ IF(MMED.EQ.2) FUNC1=FUNC1**3*(1D0+10D0*RM1+10D0*RM2+RM1**2+
+ & RM2**2+10D0*RM1*RM2)
+ IF(FUNC1.GT.FMAX1) FMAX1=FUNC1
+ FPT1(NPT1)=FUNC1
+
+C...Go to next position in inner loop.
+ IF(NPT1.EQ.1) THEN
+ NPT1=NPT1+1
+ XPT1(NPT1)=0D0
+ INX1(NPT1)=1
+ GOTO 140
+ ELSEIF(NPT1.LE.8) THEN
+ NPT1=NPT1+1
+ IF(NPT1.LE.4.OR.NPT1.EQ.6) ISH1=1
+ ISH1=ISH1+1
+ XPT1(NPT1)=0.5D0*(XPT1(ISH1)+XPT1(INX1(ISH1)))
+ INX1(NPT1)=INX1(ISH1)
+ INX1(ISH1)=NPT1
+ GOTO 140
+ ELSEIF(NPT1.LT.100) THEN
+ ISN1=ISH1
+ 150 ISH1=ISH1+1
+ IF(ISH1.GT.NPT1) ISH1=2
+ IF(ISH1.EQ.ISN1) GOTO 160
+ DFPT1=ABS(FPT1(ISH1)-FPT1(INX1(ISH1)))
+ IF(DFPT1.LT.PARP(43)*FMAX1) GOTO 150
+ NPT1=NPT1+1
+ XPT1(NPT1)=0.5D0*(XPT1(ISH1)+XPT1(INX1(ISH1)))
+ INX1(NPT1)=INX1(ISH1)
+ INX1(ISH1)=NPT1
+ GOTO 140
+ ENDIF
+
+C...Calculate integral over inner loop.
+ 160 FSUM1=0D0
+ DO 170 IPT1=2,NPT1
+ FSUM1=FSUM1+0.5D0*(FPT1(IPT1)+FPT1(INX1(IPT1)))*
+ & (XPT1(INX1(IPT1))-XPT1(IPT1))
+ 170 CONTINUE
+ FUNC2=FSUM1*(ATU1-ATL1)/PARU(1)
+ 180 IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
+ IF(FUNC2.GT.FMAX2) FMAX2=FUNC2
+ FPT2(NPT2)=FUNC2
+
+C...Go to next position in outer loop.
+ IF(NPT2.EQ.1) THEN
+ NPT2=NPT2+1
+ XPT2(NPT2)=0D0
+ INX2(NPT2)=1
+ GOTO 130
+ ELSEIF(NPT2.LE.8) THEN
+ NPT2=NPT2+1
+ IF(NPT2.LE.4.OR.NPT2.EQ.6) ISH2=1
+ ISH2=ISH2+1
+ XPT2(NPT2)=0.5D0*(XPT2(ISH2)+XPT2(INX2(ISH2)))
+ INX2(NPT2)=INX2(ISH2)
+ INX2(ISH2)=NPT2
+ GOTO 130
+ ELSEIF(NPT2.LT.100) THEN
+ ISN2=ISH2
+ 190 ISH2=ISH2+1
+ IF(ISH2.GT.NPT2) ISH2=2
+ IF(ISH2.EQ.ISN2) GOTO 200
+ DFPT2=ABS(FPT2(ISH2)-FPT2(INX2(ISH2)))
+ IF(DFPT2.LT.PARP(43)*FMAX2) GOTO 190
+ NPT2=NPT2+1
+ XPT2(NPT2)=0.5D0*(XPT2(ISH2)+XPT2(INX2(ISH2)))
+ INX2(NPT2)=INX2(ISH2)
+ INX2(ISH2)=NPT2
+ GOTO 130
+ ENDIF
+
+C...Calculate integral over outer loop.
+ 200 FSUM2=0D0
+ DO 210 IPT2=2,NPT2
+ FSUM2=FSUM2+0.5D0*(FPT2(IPT2)+FPT2(INX2(IPT2)))*
+ & (XPT2(INX2(IPT2))-XPT2(IPT2))
+ 210 CONTINUE
+ FSUM2=FSUM2*(ATU2-ATL2)/PARU(1)
+ IF(MEQL.EQ.1) FSUM2=2D0*FSUM2
+ ELSE
+ FSUM2=FUNC2
+ ENDIF
+
+C...Save result; second integration for user-selected mass range.
+ IF(LOOP.EQ.1) WIDW=FSUM2
+ WID2=FSUM2
+ IF(LOOP.EQ.1.AND.(CKIN(46).GE.CKIN(45).OR.CKIN(48).GE.CKIN(47)
+ & .OR.MAX(CKIN(45),CKIN(47)).GE.1.01D0*PARP(42))) THEN
+ LOOP=2
+ GOTO 100
+ ENDIF
+ RET1=WIDW
+ RET2=WID2/WIDW
+
+C...Select two decay product masses of a resonance.
+ ELSEIF(MOFSH.EQ.2.OR.MOFSH.EQ.5) THEN
+ 220 DO 230 I=1,2
+ IF(MBW(I).EQ.0) GOTO 230
+ PMBW=PMD(I)**2+PMD(I)*PGD(I)*TAN(ATL(I)+PYR(0)*
+ & (ATU(I)-ATL(I)))
+ PMG(I)=MIN(PMU(I),MAX(PML(I),SQRT(MAX(0D0,PMBW))))
+ RMG(I)=(PMG(I)/PMMX)**2
+ 230 CONTINUE
+ IF((MEQL.EQ.1.AND.PMG(MAX(1,MLM)).GT.PMG(MIN(2,3-MLM))).OR.
+ & PMG(1)+PMG(2)+PARJ(64).GT.PMMX) GOTO 220
+
+C...Weight with matrix element (if none known, use beta factor).
+ FLAM=SQRT(MAX(0D0,(1D0-RMG(1)-RMG(2))**2-4D0*RMG(1)*RMG(2)))
+ IF(MMED.EQ.1) THEN
+ WTBE=FLAM*((1D0-RMG(1)-RMG(2))**2+8D0*RMG(1)*RMG(2))
+ ELSEIF(MMED.EQ.2) THEN
+ WTBE=FLAM**3*(1D0+10D0*RMG(1)+10D0*RMG(2)+RMG(1)**2+
+ & RMG(2)**2+10D0*RMG(1)*RMG(2))
+ ELSEIF(MMED.EQ.3) THEN
+ WTBE=FLAM*(RMG(1)+FLAM**2/12D0)
+ ELSE
+ WTBE=FLAM
+ ENDIF
+ IF(WTBE.LT.PYR(0)) GOTO 220
+ RET1=PMG(1)
+ RET2=PMG(2)
+
+C...Find suitable set of masses for initialization of 2 -> 2 processes.
+ ELSEIF(MOFSH.EQ.3) THEN
+ IF(MBW(1).NE.0.AND.MBW(2).EQ.0) THEN
+ PMG(1)=MIN(PMD(1),0.5D0*(PML(1)+PMU(1)))
+ PMG(2)=PMD(2)
+ ELSEIF(MBW(2).NE.0.AND.MBW(1).EQ.0) THEN
+ PMG(1)=PMD(1)
+ PMG(2)=MIN(PMD(2),0.5D0*(PML(2)+PMU(2)))
+ ELSE
+ IDIV=-1
+ 240 IDIV=IDIV+1
+ PMG(1)=MIN(PMD(1),0.1D0*(IDIV*PML(1)+(10-IDIV)*PMU(1)))
+ PMG(2)=MIN(PMD(2),0.1D0*(IDIV*PML(2)+(10-IDIV)*PMU(2)))
+ IF(IDIV.LE.9.AND.PMG(1)+PMG(2).GT.0.9D0*PMMX) GOTO 240
+ ENDIF
+ RET1=PMG(1)
+ RET2=PMG(2)
+
+C...Evaluate importance of excluded tails of Breit-Wigners.
+ IF(MEQL.EQ.0.AND.MBW(1).EQ.1.AND.MBW(2).EQ.1.AND.PMD(1)+PMD(2)
+ & .GT.PMMX.AND.PMH(1).GT.PML(1).AND.PMH(2).GT.PML(2)) MEQL=2
+ IF(MEQL.LE.1) THEN
+ VINT(80)=1D0
+ DO 250 I=1,2
+ IF(MBW(I).NE.0) VINT(80)=VINT(80)*1.25D0*(ATU(I)-ATL(I))/
+ & PARU(1)
+ 250 CONTINUE
+ ELSE
+ VINT(80)=(1.25D0/PARU(1))**2*MAX((ATU(1)-ATL(1))*
+ & (ATH(2)-ATL(2)),(ATH(1)-ATL(1))*(ATU(2)-ATL(2)))
+ ENDIF
+ IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.30.OR.ISUB.EQ.35).AND.
+ & MSTP(43).NE.2) VINT(80)=2D0*VINT(80)
+ IF(ISUB.EQ.22.AND.MSTP(43).NE.2) VINT(80)=4D0*VINT(80)
+ IF(MEQL.GE.1) VINT(80)=2D0*VINT(80)
+
+C...Pick one particle to be the lighter (if improves efficiency).
+ ELSEIF(MOFSH.EQ.4) THEN
+ IF(MEQL.EQ.0.AND.MBW(1).EQ.1.AND.MBW(2).EQ.1.AND.PMD(1)+PMD(2)
+ & .GT.PMMX.AND.PMH(1).GT.PML(1).AND.PMH(2).GT.PML(2)) MEQL=2
+ 260 IF(MEQL.EQ.2) MLM=INT(1.5D0+PYR(0))
+
+C...Select two masses according to Breit-Wigner + flat in s + 1/s.
+ DO 270 I=1,2
+ IF(MBW(I).EQ.0) GOTO 270
+ PMV=PMU(I)
+ IF(MEQL.EQ.2.AND.I.EQ.MLM) PMV=PMH(I)
+ ATV=ATU(I)
+ IF(MEQL.EQ.2.AND.I.EQ.MLM) ATV=ATH(I)
+ RBR=PYR(0)
+ IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.ISUB.EQ.30.OR.
+ & ISUB.EQ.35).AND.MSTP(43).NE.2) RBR=2D0*RBR
+ IF(RBR.LT.0.8D0) THEN
+ PMSR=PMD(I)**2+PMD(I)*PGD(I)*TAN(ATL(I)+PYR(0)*(ATV-ATL(I)))
+ PMG(I)=MIN(PMV,MAX(PML(I),SQRT(MAX(0D0,PMSR))))
+ ELSEIF(RBR.LT.0.9D0) THEN
+ PMG(I)=SQRT(MAX(0D0,PML(I)**2+PYR(0)*(PMV**2-PML(I)**2)))
+ ELSEIF(RBR.LT.1.5D0) THEN
+ PMG(I)=PML(I)*(PMV/PML(I))**PYR(0)
+ ELSE
+ PMG(I)=SQRT(MAX(0D0,PML(I)**2*PMV**2/(PML(I)**2+PYR(0)*
+ & (PMV**2-PML(I)**2))))
+ ENDIF
+ 270 CONTINUE
+ IF((MEQL.GE.1.AND.PMG(MAX(1,MLM)).GT.PMG(MIN(2,3-MLM))).OR.
+ & PMG(1)+PMG(2)+PARJ(64).GT.PMMX) THEN
+ IF(MINT(48).EQ.1) THEN
+ NGEN(0,1)=NGEN(0,1)+1
+ NGEN(MINT(1),1)=NGEN(MINT(1),1)+1
+ GOTO 260
+ ELSE
+ MINT(51)=1
+ RETURN
+ ENDIF
+ ENDIF
+ RET1=PMG(1)
+ RET2=PMG(2)
+
+C...Give weight for selected mass distribution.
+ VINT(80)=1D0
+ DO 280 I=1,2
+ IF(MBW(I).EQ.0) GOTO 280
+ PMV=PMU(I)
+ IF(MEQL.EQ.2.AND.I.EQ.MLM) PMV=PMH(I)
+ ATV=ATU(I)
+ IF(MEQL.EQ.2.AND.I.EQ.MLM) ATV=ATH(I)
+ F0=PMD(I)*PGD(I)/((PMG(I)**2-PMD(I)**2)**2+
+ & (PMD(I)*PGD(I))**2)/PARU(1)
+ F1=1D0
+ F2=1D0/PMG(I)**2
+ F3=1D0/PMG(I)**4
+ FI0=(ATV-ATL(I))/PARU(1)
+ FI1=PMV**2-PML(I)**2
+ FI2=2D0*LOG(PMV/PML(I))
+ FI3=1D0/PML(I)**2-1D0/PMV**2
+ IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.ISUB.EQ.30.OR.
+ & ISUB.EQ.35).AND.MSTP(43).NE.2) THEN
+ VINT(80)=VINT(80)*20D0/(8D0+(FI0/F0)*(F1/FI1+6D0*F2/FI2+
+ & 5D0*F3/FI3))
+ ELSE
+ VINT(80)=VINT(80)*10D0/(8D0+(FI0/F0)*(F1/FI1+F2/FI2))
+ ENDIF
+ VINT(80)=VINT(80)*FI0
+ 280 CONTINUE
+ IF(MEQL.GE.1) VINT(80)=2D0*VINT(80)
+ ENDIF
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYRECO
+C...Handles the possibility of colour reconnection in W+W- events,
+C...Based on the main scenarios of the Sjostrand and Khoze study:
+C...I, II, II', intermediate and instantaneous; plus one model
+C...along the lines of the Gustafson and Hakkinen: GH.
+
+ SUBROUTINE PYRECO(IW1,IW2,NSD1,NAFT1)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter value; number of points in MC integration.
+ PARAMETER (NPT=100)
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
+C...Local arrays.
+ DIMENSION NBEG(2),NEND(2),INP(50),INM(50),BEWW(3),XP(3),XM(3),
+ &V1(3),V2(3),BETP(50,4),DIRP(50,3),BETM(50,4),DIRM(50,3),
+ &XD(4),XB(4),IAP(NPT),IAM(NPT),WTA(NPT),V1P(3),V2P(3),V1M(3),
+ &V2M(3),Q(4,3),XPP(3),XMM(3),IPC(20),IMC(20),TC(0:20),TPC(20),
+ &TMC(20),IJOIN(100)
+
+C...Functions to give four-product and to do determinants.
+ FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
+ DETER(I,J,L)=Q(I,1)*Q(J,2)*Q(L,3)-Q(I,1)*Q(L,2)*Q(J,3)+
+ &Q(J,1)*Q(L,2)*Q(I,3)-Q(J,1)*Q(I,2)*Q(L,3)+
+ &Q(L,1)*Q(I,2)*Q(J,3)-Q(L,1)*Q(J,2)*Q(I,3)
+
+C...Only allow fraction of recoupling for GH, intermediate and
+C...instantaneous.
+ IF(MSTP(115).EQ.5.OR.MSTP(115).EQ.11.OR.MSTP(115).EQ.12) THEN
+ IF(PYR(0).GT.PARP(120)) RETURN
+ ENDIF
+
+C...Common part for scenarios I, II, II', and GH.
+ IF(MSTP(115).EQ.1.OR.MSTP(115).EQ.2.OR.MSTP(115).EQ.3.OR.
+ &MSTP(115).EQ.5) THEN
+
+C...Read out frequently-used parameters.
+ PI=PARU(1)
+ HBAR=PARU(3)
+ PMW=PMAS(24,1)
+ PGW=PMAS(24,2)
+ TFRAG=PARP(115)
+ RHAD=PARP(116)
+ FACT=PARP(117)
+ BLOWR=PARP(118)
+ BLOWT=PARP(119)
+
+C...Find range of decay products of the W's.
+C...Background: the W's are stored in IW1 and IW2.
+C...Their direct decay products in NSD1+1 through NSD1+4.
+C...Products after shower (if any) in NSD1+5 through NAFT1
+C...for first W and in NAFT1+1 through N for the second.
+ IF(K(IW1,2).GT.0) THEN
+ JT=1
+ ELSE
+ JT=2
+ ENDIF
+ JR=3-JT
+ IF(NAFT1.GT.NSD1+4) THEN
+ NBEG(JT)=NSD1+5
+ NEND(JT)=NAFT1
+ ELSE
+ NBEG(JT)=NSD1+1
+ NEND(JT)=NSD1+2
+ ENDIF
+ IF(N.GT.NAFT1) THEN
+ NBEG(JR)=NAFT1+1
+ NEND(JR)=N
+ ELSE
+ NBEG(JR)=NSD1+3
+ NEND(JR)=NSD1+4
+ ENDIF
+
+C...Rearrange parton shower products along strings.
+ NOLD=N
+ CALL PYPREP(NSD1+1)
+
+C...Find partons pointing back to W+ and W-; store them with quark
+C...end of string first.
+ NNP=0
+ NNM=0
+ ISGP=0
+ ISGM=0
+ DO 120 I=NOLD+1,N
+ IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 120
+ IF(IABS(K(I,2)).GE.22) GOTO 120
+ IF(K(I,3).GE.NBEG(1).AND.K(I,3).LE.NEND(1)) THEN
+ IF(ISGP.EQ.0) ISGP=ISIGN(1,K(I,2))
+ NNP=NNP+1
+ IF(ISGP.EQ.1) THEN
+ INP(NNP)=I
+ ELSE
+ DO 100 I1=NNP,2,-1
+ INP(I1)=INP(I1-1)
+ 100 CONTINUE
+ INP(1)=I
+ ENDIF
+ IF(K(I,1).EQ.1) ISGP=0
+ ELSEIF(K(I,3).GE.NBEG(2).AND.K(I,3).LE.NEND(2)) THEN
+ IF(ISGM.EQ.0) ISGM=ISIGN(1,K(I,2))
+ NNM=NNM+1
+ IF(ISGM.EQ.1) THEN
+ INM(NNM)=I
+ ELSE
+ DO 110 I1=NNM,2,-1
+ INM(I1)=INM(I1-1)
+ 110 CONTINUE
+ INM(1)=I
+ ENDIF
+ IF(K(I,1).EQ.1) ISGM=0
+ ENDIF
+ 120 CONTINUE
+
+C...Boost to W+W- rest frame (not strictly needed).
+ DO 130 J=1,3
+ BEWW(J)=(P(IW1,J)+P(IW2,J))/(P(IW1,4)+P(IW2,4))
+ 130 CONTINUE
+ CALL PYROBO(IW1,IW1,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
+ CALL PYROBO(IW2,IW2,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
+ CALL PYROBO(NOLD+1,N,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
+
+C...Select decay vertices of W+ and W-.
+ TP=HBAR*(-LOG(PYR(0)))*P(IW1,4)/
+ & SQRT((P(IW1,5)**2-PMW**2)**2+(P(IW1,5)**2*PGW/PMW)**2)
+ TM=HBAR*(-LOG(PYR(0)))*P(IW2,4)/
+ & SQRT((P(IW2,5)**2-PMW**2)**2+(P(IW2,5)**2*PGW/PMW)**2)
+ GTMAX=MAX(TP,TM)
+ DO 140 J=1,3
+ XP(J)=TP*P(IW1,J)/P(IW1,4)
+ XM(J)=TM*P(IW2,J)/P(IW2,4)
+ 140 CONTINUE
+
+C...Begin scenario I specifics.
+ IF(MSTP(115).EQ.1) THEN
+
+C...Reconstruct velocity and direction of W+ string pieces.
+ DO 170 IIP=1,NNP-1
+ IF(K(INP(IIP),2).LT.0) GOTO 170
+ I1=INP(IIP)
+ I2=INP(IIP+1)
+ P1A=SQRT(P(I1,1)**2+P(I1,2)**2+P(I1,3)**2)
+ P2A=SQRT(P(I2,1)**2+P(I2,2)**2+P(I2,3)**2)
+ DO 150 J=1,3
+ V1(J)=P(I1,J)/P1A
+ V2(J)=P(I2,J)/P2A
+ BETP(IIP,J)=0.5D0*(V1(J)+V2(J))
+ DIRP(IIP,J)=V1(J)-V2(J)
+ 150 CONTINUE
+ BETP(IIP,4)=1D0/SQRT(1D0-BETP(IIP,1)**2-BETP(IIP,2)**2-
+ & BETP(IIP,3)**2)
+ DIRL=SQRT(DIRP(IIP,1)**2+DIRP(IIP,2)**2+DIRP(IIP,3)**2)
+ DO 160 J=1,3
+ DIRP(IIP,J)=DIRP(IIP,J)/DIRL
+ 160 CONTINUE
+ 170 CONTINUE
+
+C...Reconstruct velocity and direction of W- string pieces.
+ DO 200 IIM=1,NNM-1
+ IF(K(INM(IIM),2).LT.0) GOTO 200
+ I1=INM(IIM)
+ I2=INM(IIM+1)
+ P1A=SQRT(P(I1,1)**2+P(I1,2)**2+P(I1,3)**2)
+ P2A=SQRT(P(I2,1)**2+P(I2,2)**2+P(I2,3)**2)
+ DO 180 J=1,3
+ V1(J)=P(I1,J)/P1A
+ V2(J)=P(I2,J)/P2A
+ BETM(IIM,J)=0.5D0*(V1(J)+V2(J))
+ DIRM(IIM,J)=V1(J)-V2(J)
+ 180 CONTINUE
+ BETM(IIM,4)=1D0/SQRT(1D0-BETM(IIM,1)**2-BETM(IIM,2)**2-
+ & BETM(IIM,3)**2)
+ DIRL=SQRT(DIRM(IIM,1)**2+DIRM(IIM,2)**2+DIRM(IIM,3)**2)
+ DO 190 J=1,3
+ DIRM(IIM,J)=DIRM(IIM,J)/DIRL
+ 190 CONTINUE
+ 200 CONTINUE
+
+C...Loop over number of space-time points.
+ NACC=0
+ SUM=0D0
+ DO 250 IPT=1,NPT
+
+C...Pick x,y,z,t Gaussian (width RHAD and TFRAG, respectively).
+ R=SQRT(-LOG(PYR(0)))
+ PHI=2D0*PI*PYR(0)
+ X=BLOWR*RHAD*R*COS(PHI)
+ Y=BLOWR*RHAD*R*SIN(PHI)
+ R=SQRT(-LOG(PYR(0)))
+ PHI=2D0*PI*PYR(0)
+ Z=BLOWR*RHAD*R*COS(PHI)
+ T=GTMAX+BLOWT*SQRT(0.5D0)*TFRAG*R*ABS(SIN(PHI))
+
+C...Weight for sample distribution.
+ WTSMP=EXP(-(X**2+Y**2+Z**2)/(BLOWR*RHAD)**2)*
+ & EXP(-2D0*(T-GTMAX)**2/(BLOWT*TFRAG)**2)
+
+C...Loop over W+ string pieces and find one with largest weight.
+ IMAXP=0
+ WTMAXP=1D-10
+ XD(1)=X-XP(1)
+ XD(2)=Y-XP(2)
+ XD(3)=Z-XP(3)
+ XD(4)=T-TP
+ DO 220 IIP=1,NNP-1
+ IF(K(INP(IIP),2).LT.0) GOTO 220
+ BED=BETP(IIP,1)*XD(1)+BETP(IIP,2)*XD(2)+BETP(IIP,3)*XD(3)
+ BEDG=BETP(IIP,4)*(BETP(IIP,4)*BED/(1D0+BETP(IIP,4))-XD(4))
+ DO 210 J=1,3
+ XB(J)=XD(J)+BEDG*BETP(IIP,J)
+ 210 CONTINUE
+ XB(4)=BETP(IIP,4)*(XD(4)-BED)
+ SR2=XB(1)**2+XB(2)**2+XB(3)**2
+ SZ2=(DIRP(IIP,1)*XB(1)+DIRP(IIP,2)*XB(2)+
+ & DIRP(IIP,3)*XB(3))**2
+ WTP=EXP(-(SR2-SZ2)/(2D0*RHAD**2))*EXP(-(XB(4)**2-SZ2)/
+ & TFRAG**2)
+ IF(XB(4)-SQRT(SR2).LT.0D0) WTP=0D0
+ IF(WTP.GT.WTMAXP) THEN
+ IMAXP=IIP
+ WTMAXP=WTP
+ ENDIF
+ 220 CONTINUE
+
+C...Loop over W- string pieces and find one with largest weight.
+ IMAXM=0
+ WTMAXM=1D-10
+ XD(1)=X-XM(1)
+ XD(2)=Y-XM(2)
+ XD(3)=Z-XM(3)
+ XD(4)=T-TM
+ DO 240 IIM=1,NNM-1
+ IF(K(INM(IIM),2).LT.0) GOTO 240
+ BED=BETM(IIM,1)*XD(1)+BETM(IIM,2)*XD(2)+BETM(IIM,3)*XD(3)
+ BEDG=BETM(IIM,4)*(BETM(IIM,4)*BED/(1D0+BETM(IIM,4))-XD(4))
+ DO 230 J=1,3
+ XB(J)=XD(J)+BEDG*BETM(IIM,J)
+ 230 CONTINUE
+ XB(4)=BETM(IIM,4)*(XD(4)-BED)
+ SR2=XB(1)**2+XB(2)**2+XB(3)**2
+ SZ2=(DIRM(IIM,1)*XB(1)+DIRM(IIM,2)*XB(2)+
+ & DIRM(IIM,3)*XB(3))**2
+ WTM=EXP(-(SR2-SZ2)/(2D0*RHAD**2))*EXP(-(XB(4)**2-SZ2)/
+ & TFRAG**2)
+ IF(XB(4)-SQRT(SR2).LT.0D0) WTM=0D0
+ IF(WTM.GT.WTMAXM) THEN
+ IMAXM=IIM
+ WTMAXM=WTM
+ ENDIF
+ 240 CONTINUE
+
+C...Result of integration.
+ WT=0D0
+ IF(IMAXP.NE.0.AND.IMAXM.NE.0) THEN
+ WT=WTMAXP*WTMAXM/WTSMP
+ SUM=SUM+WT
+ NACC=NACC+1
+ IAP(NACC)=IMAXP
+ IAM(NACC)=IMAXM
+ WTA(NACC)=WT
+ ENDIF
+ 250 CONTINUE
+ RES=BLOWR**3*BLOWT*SUM/NPT
+
+C...Decide whether to reconnect and, if so, where.
+ IACC=0
+ PREC=1D0-EXP(-FACT*RES)
+ IF(PREC.GT.PYR(0)) THEN
+ RSUM=PYR(0)*SUM
+ DO 260 IA=1,NACC
+ IACC=IA
+ RSUM=RSUM-WTA(IA)
+ IF(RSUM.LE.0D0) GOTO 270
+ 260 CONTINUE
+ 270 IIP=IAP(IACC)
+ IIM=IAM(IACC)
+ ENDIF
+
+C...Begin scenario II and II' specifics.
+ ELSEIF(MSTP(115).EQ.2.OR.MSTP(115).EQ.3) THEN
+
+C...Loop through all string pieces, one from W+ and one from W-.
+ NCROSS=0
+ TC(0)=0D0
+ DO 340 IIP=1,NNP-1
+ IF(K(INP(IIP),2).LT.0) GOTO 340
+ I1P=INP(IIP)
+ I2P=INP(IIP+1)
+ DO 330 IIM=1,NNM-1
+ IF(K(INM(IIM),2).LT.0) GOTO 330
+ I1M=INM(IIM)
+ I2M=INM(IIM+1)
+
+C...Find endpoint velocity vectors.
+ DO 280 J=1,3
+ V1P(J)=P(I1P,J)/P(I1P,4)
+ V2P(J)=P(I2P,J)/P(I2P,4)
+ V1M(J)=P(I1M,J)/P(I1M,4)
+ V2M(J)=P(I2M,J)/P(I2M,4)
+ 280 CONTINUE
+
+C...Define q matrix and find t.
+ DO 290 J=1,3
+ Q(1,J)=V2P(J)-V1P(J)
+ Q(2,J)=-(V2M(J)-V1M(J))
+ Q(3,J)=XP(J)-XM(J)-TP*V1P(J)+TM*V1M(J)
+ Q(4,J)=V1P(J)-V1M(J)
+ 290 CONTINUE
+ T=-DETER(1,2,3)/DETER(1,2,4)
+
+C...Find alpha and beta; i.e. coordinates of crossing point.
+ S11=Q(1,1)*(T-TP)
+ S12=Q(2,1)*(T-TM)
+ S13=Q(3,1)+Q(4,1)*T
+ S21=Q(1,2)*(T-TP)
+ S22=Q(2,2)*(T-TM)
+ S23=Q(3,2)+Q(4,2)*T
+ DEN=S11*S22-S12*S21
+ ALP=(S12*S23-S22*S13)/DEN
+ BET=(S21*S13-S11*S23)/DEN
+
+C...Check if solution acceptable.
+ IANSW=1
+ IF(T.LT.GTMAX) IANSW=0
+ IF(ALP.LT.0D0.OR.ALP.GT.1D0) IANSW=0
+ IF(BET.LT.0D0.OR.BET.GT.1D0) IANSW=0
+
+C...Find point of crossing and check that not inconsistent.
+ DO 300 J=1,3
+ XPP(J)=XP(J)+(V1P(J)+ALP*(V2P(J)-V1P(J)))*(T-TP)
+ XMM(J)=XM(J)+(V1M(J)+BET*(V2M(J)-V1M(J)))*(T-TM)
+ 300 CONTINUE
+ D2PM=(XPP(1)-XMM(1))**2+(XPP(2)-XMM(2))**2+
+ & (XPP(3)-XMM(3))**2
+ D2P=XPP(1)**2+XPP(2)**2+XPP(3)**2
+ D2M=XMM(1)**2+XMM(2)**2+XMM(3)**2
+ IF(D2PM.GT.1D-4*(D2P+D2M)) IANSW=-1
+
+C...Find string eigentimes at crossing.
+ IF(IANSW.EQ.1) THEN
+ TAUP=SQRT(MAX(0D0,(T-TP)**2-(XPP(1)-XP(1))**2-
+ & (XPP(2)-XP(2))**2-(XPP(3)-XP(3))**2))
+ TAUM=SQRT(MAX(0D0,(T-TM)**2-(XMM(1)-XM(1))**2-
+ & (XMM(2)-XM(2))**2-(XMM(3)-XM(3))**2))
+ ELSE
+ TAUP=0D0
+ TAUM=0D0
+ ENDIF
+
+C...Order crossings by time. End loop over crossings.
+ IF(IANSW.EQ.1.AND.NCROSS.LT.20) THEN
+ NCROSS=NCROSS+1
+ DO 310 I1=NCROSS,1,-1
+ IF(T.GT.TC(I1-1).OR.I1.EQ.1) THEN
+ IPC(I1)=IIP
+ IMC(I1)=IIM
+ TC(I1)=T
+ TPC(I1)=TAUP
+ TMC(I1)=TAUM
+ GOTO 320
+ ELSE
+ IPC(I1)=IPC(I1-1)
+ IMC(I1)=IMC(I1-1)
+ TC(I1)=TC(I1-1)
+ TPC(I1)=TPC(I1-1)
+ TMC(I1)=TMC(I1-1)
+ ENDIF
+ 310 CONTINUE
+ 320 CONTINUE
+ ENDIF
+ 330 CONTINUE
+ 340 CONTINUE
+
+C...Loop over crossings; find first (if any) acceptable one.
+ IACC=0
+ IF(NCROSS.GE.1) THEN
+ DO 350 IC=1,NCROSS
+ PNFRAG=EXP(-(TPC(IC)**2+TMC(IC)**2)/TFRAG**2)
+ IF(PNFRAG.GT.PYR(0)) THEN
+C...Scenario II: only compare with fragmentation time.
+ IF(MSTP(115).EQ.2) THEN
+ IACC=IC
+ IIP=IPC(IACC)
+ IIM=IMC(IACC)
+ GOTO 360
+C...Scenario II': also require that string length decreases.
+ ELSE
+ IIP=IPC(IC)
+ IIM=IMC(IC)
+ I1P=INP(IIP)
+ I2P=INP(IIP+1)
+ I1M=INM(IIM)
+ I2M=INM(IIM+1)
+ ELOLD=FOUR(I1P,I2P)*FOUR(I1M,I2M)
+ ELNEW=FOUR(I1P,I2M)*FOUR(I1M,I2P)
+ IF(ELNEW.LT.ELOLD) THEN
+ IACC=IC
+ IIP=IPC(IACC)
+ IIM=IMC(IACC)
+ GOTO 360
+ ENDIF
+ ENDIF
+ ENDIF
+ 350 CONTINUE
+ 360 CONTINUE
+ ENDIF
+
+C...Begin scenario GH specifics.
+ ELSEIF(MSTP(115).EQ.5) THEN
+
+C...Loop through all string pieces, one from W+ and one from W-.
+ IACC=0
+ ELMIN=1D0
+ DO 380 IIP=1,NNP-1
+ IF(K(INP(IIP),2).LT.0) GOTO 380
+ I1P=INP(IIP)
+ I2P=INP(IIP+1)
+ DO 370 IIM=1,NNM-1
+ IF(K(INM(IIM),2).LT.0) GOTO 370
+ I1M=INM(IIM)
+ I2M=INM(IIM+1)
+
+C...Look for largest decrease of (exponent of) Lambda measure.
+ ELOLD=FOUR(I1P,I2P)*FOUR(I1M,I2M)
+ ELNEW=FOUR(I1P,I2M)*FOUR(I1M,I2P)
+ ELDIF=ELNEW/MAX(1D-10,ELOLD)
+ IF(ELDIF.LT.ELMIN) THEN
+ IACC=IIP+IIM
+ ELMIN=ELDIF
+ IPC(1)=IIP
+ IMC(1)=IIM
+ ENDIF
+ 370 CONTINUE
+ 380 CONTINUE
+ IIP=IPC(1)
+ IIM=IMC(1)
+ ENDIF
+
+C...Common for scenarios I, II, II' and GH: reconnect strings.
+ IF(IACC.NE.0) THEN
+ MINT(32)=1
+ NJOIN=0
+ DO 390 IS=1,NNP+NNM
+ NJOIN=NJOIN+1
+ IF(IS.LE.IIP) THEN
+ I=INP(IS)
+ ELSEIF(IS.LE.IIP+NNM-IIM) THEN
+ I=INM(IS-IIP+IIM)
+ ELSEIF(IS.LE.IIP+NNM) THEN
+ I=INM(IS-IIP-NNM+IIM)
+ ELSE
+ I=INP(IS-NNM)
+ ENDIF
+ IJOIN(NJOIN)=I
+ IF(K(I,2).LT.0) THEN
+ CALL PYJOIN(NJOIN,IJOIN)
+ NJOIN=0
+ ENDIF
+ 390 CONTINUE
+
+C...Restore original event record if no reconnection.
+ ELSE
+ DO 400 I=NSD1+1,NOLD
+ IF(K(I,1).EQ.13.OR.K(I,1).EQ.14) THEN
+ K(I,4)=MOD(K(I,4),MSTU(5)**2)
+ K(I,5)=MOD(K(I,5),MSTU(5)**2)
+ ENDIF
+ 400 CONTINUE
+ DO 410 I=NOLD+1,N
+ K(K(I,3),1)=3
+ 410 CONTINUE
+ N=NOLD
+ ENDIF
+
+C...Boost back system.
+ CALL PYROBO(IW1,IW1,0D0,0D0,BEWW(1),BEWW(2),BEWW(3))
+ CALL PYROBO(IW2,IW2,0D0,0D0,BEWW(1),BEWW(2),BEWW(3))
+ IF(N.GT.NOLD) CALL PYROBO(NOLD+1,N,0D0,0D0,
+ & BEWW(1),BEWW(2),BEWW(3))
+
+C...Common part for intermediate and instantaneous scenarios.
+ ELSEIF(MSTP(115).EQ.11.OR.MSTP(115).EQ.12) THEN
+ MINT(32)=1
+
+C...Remove old shower products and reset showering ones.
+ N=NSD1+4
+ DO 420 I=NSD1+1,NSD1+4
+ K(I,1)=3
+ K(I,4)=MOD(K(I,4),MSTU(5)**2)
+ K(I,5)=MOD(K(I,5),MSTU(5)**2)
+ 420 CONTINUE
+
+C...Identify quark-antiquark pairs.
+ IQ1=NSD1+1
+ IQ2=NSD1+2
+ IQ3=NSD1+3
+ IF(K(IQ1,2)*K(IQ3,2).LT.0) IQ3=NSD1+4
+ IQ4=2*NSD1+7-IQ3
+
+C...Reconnect strings.
+ IJOIN(1)=IQ1
+ IJOIN(2)=IQ4
+ CALL PYJOIN(2,IJOIN)
+ IJOIN(1)=IQ3
+ IJOIN(2)=IQ2
+ CALL PYJOIN(2,IJOIN)
+
+C...Do new parton showers in intermediate scenario.
+ IF(MSTP(71).GE.1.AND.MSTP(115).EQ.11) THEN
+ MSTJ50=MSTJ(50)
+ MSTJ(50)=0
+ CALL PYSHOW(IQ1,IQ2,P(IW1,5))
+ CALL PYSHOW(IQ3,IQ4,P(IW2,5))
+ MSTJ(50)=MSTJ50
+
+C...Do new parton showers in instantaneous scenario.
+ ELSEIF(MSTP(71).GE.1.AND.MSTP(115).EQ.12) THEN
+ PPM2=(P(IQ1,4)+P(IQ4,4))**2-(P(IQ1,1)+P(IQ4,1))**2-
+ & (P(IQ1,2)+P(IQ4,2))**2-(P(IQ1,3)+P(IQ4,3))**2
+ PPM=SQRT(MAX(0D0,PPM2))
+ CALL PYSHOW(IQ1,IQ4,PPM)
+ PPM2=(P(IQ3,4)+P(IQ2,4))**2-(P(IQ3,1)+P(IQ2,1))**2-
+ & (P(IQ3,2)+P(IQ2,2))**2-(P(IQ3,3)+P(IQ2,3))**2
+ PPM=SQRT(MAX(0D0,PPM2))
+ CALL PYSHOW(IQ3,IQ2,PPM)
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYKLIM
+C...Checks generated variables against pre-set kinematical limits;
+C...also calculates limits on variables used in generation.
+
+ SUBROUTINE PYKLIM(ILIM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
+ &/PYINT1/,/PYINT2/
+
+C...Common kinematical expressions.
+ MINT(51)=0
+ ISUB=MINT(1)
+ ISTSB=ISET(ISUB)
+ IF(ISUB.EQ.96) GOTO 100
+ SQM3=VINT(63)
+ SQM4=VINT(64)
+ IF(ILIM.NE.0) THEN
+ IF(ABS(SQM3).LT.1D-4.AND.ABS(SQM4).LT.1D-4) THEN
+ CKIN09=MAX(CKIN(9),CKIN(13))
+ CKIN10=MIN(CKIN(10),CKIN(14))
+ CKIN11=MAX(CKIN(11),CKIN(15))
+ CKIN12=MIN(CKIN(12),CKIN(16))
+ ELSE
+ CKIN09=MAX(CKIN(9),MIN(0D0,CKIN(13)))
+ CKIN10=MIN(CKIN(10),MAX(0D0,CKIN(14)))
+ CKIN11=MAX(CKIN(11),MIN(0D0,CKIN(15)))
+ CKIN12=MIN(CKIN(12),MAX(0D0,CKIN(16)))
+ ENDIF
+ ENDIF
+ IF(ILIM.NE.1) THEN
+ TAU=VINT(21)
+ RM3=SQM3/(TAU*VINT(2))
+ RM4=SQM4/(TAU*VINT(2))
+ BE34=SQRT(MAX(1D-20,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
+ ENDIF
+ PTHMIN=CKIN(3)
+ IF(MIN(SQM3,SQM4).LT.CKIN(6)**2.AND.ISTSB.NE.1.AND.ISTSB.NE.3)
+ &PTHMIN=MAX(CKIN(3),CKIN(5))
+
+ IF(ILIM.EQ.0) THEN
+C...Check generated values of tau, y*, cos(theta-hat), and tau' against
+C...pre-set kinematical limits.
+ YST=VINT(22)
+ CTH=VINT(23)
+ TAUP=VINT(26)
+ TAUE=TAU
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=TAUP
+ X1=SQRT(TAUE)*EXP(YST)
+ X2=SQRT(TAUE)*EXP(-YST)
+ XF=X1-X2
+ IF(MINT(47).NE.1) THEN
+ IF(TAU*VINT(2).LT.CKIN(1)**2) MINT(51)=1
+ IF(CKIN(2).GE.0D0.AND.TAU*VINT(2).GT.CKIN(2)**2) MINT(51)=1
+ IF(YST.LT.CKIN(7).OR.YST.GT.CKIN(8)) MINT(51)=1
+ IF(XF.LT.CKIN(25).OR.XF.GT.CKIN(26)) MINT(51)=1
+ ENDIF
+ IF(MINT(45).NE.1) THEN
+ IF(X1.LT.CKIN(21).OR.X1.GT.CKIN(22)) MINT(51)=1
+ ENDIF
+ IF(MINT(46).NE.1) THEN
+ IF(X2.LT.CKIN(23).OR.X2.GT.CKIN(24)) MINT(51)=1
+ ENDIF
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
+ PTH=0.5D0*BE34*SQRT(TAU*VINT(2)*MAX(0D0,1D0-CTH**2))
+ EXPY3=MAX(1.D-10,(1D0+RM3-RM4+BE34*CTH)/
+ & MAX(1.D-10,(1D0+RM3-RM4-BE34*CTH)))
+ EXPY4=MAX(1.D-10,(1D0-RM3+RM4-BE34*CTH)/
+ & MAX(1.D-10,(1D0-RM3+RM4+BE34*CTH)))
+ Y3=YST+0.5D0*LOG(EXPY3)
+ Y4=YST+0.5D0*LOG(EXPY4)
+ YLARGE=MAX(Y3,Y4)
+ YSMALL=MIN(Y3,Y4)
+ ETALAR=10D0
+ ETASMA=-10D0
+ STH=SQRT(MAX(0D0,1D0-CTH**2))
+ EXSQ3=SQRT(MAX(1D-20,((1D0+RM3-RM4)*COSH(YST)+BE34*SINH(YST)*
+ & CTH)**2-4D0*RM3))
+ EXSQ4=SQRT(MAX(1D-20,((1D0-RM3+RM4)*COSH(YST)-BE34*SINH(YST)*
+ & CTH)**2-4D0*RM4))
+ IF(STH.GE.1.D-6) THEN
+ EXPET3=((1D0+RM3-RM4)*SINH(YST)+BE34*COSH(YST)*CTH+EXSQ3)/
+ & (BE34*STH)
+ EXPET4=((1D0-RM3+RM4)*SINH(YST)-BE34*COSH(YST)*CTH+EXSQ4)/
+ & (BE34*STH)
+ ETA3=LOG(MIN(1.D10,MAX(1.D-10,EXPET3)))
+ ETA4=LOG(MIN(1.D10,MAX(1.D-10,EXPET4)))
+ ETALAR=MAX(ETA3,ETA4)
+ ETASMA=MIN(ETA3,ETA4)
+ ENDIF
+ CTS3=((1D0+RM3-RM4)*SINH(YST)+BE34*COSH(YST)*CTH)/EXSQ3
+ CTS4=((1D0-RM3+RM4)*SINH(YST)-BE34*COSH(YST)*CTH)/EXSQ4
+ CTSLAR=MIN(1D0,MAX(CTS3,CTS4))
+ CTSSMA=MAX(-1D0,MIN(CTS3,CTS4))
+ SH=TAU*VINT(2)
+ RPTS=4D0*VINT(71)**2/SH
+ BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
+ RM34=MAX(1D-20,2D0*RM3*RM4)
+ IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
+ & RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
+ RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
+ THA=0.5D0*SH*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
+ UHA=0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
+ IF(PTH.LT.PTHMIN) MINT(51)=1
+ IF(CKIN(4).GE.0D0.AND.PTH.GT.CKIN(4)) MINT(51)=1
+ IF(YLARGE.LT.CKIN(9).OR.YLARGE.GT.CKIN(10)) MINT(51)=1
+ IF(YSMALL.LT.CKIN(11).OR.YSMALL.GT.CKIN(12)) MINT(51)=1
+ IF(ETALAR.LT.CKIN(13).OR.ETALAR.GT.CKIN(14)) MINT(51)=1
+ IF(ETASMA.LT.CKIN(15).OR.ETASMA.GT.CKIN(16)) MINT(51)=1
+ IF(CTSLAR.LT.CKIN(17).OR.CTSLAR.GT.CKIN(18)) MINT(51)=1
+ IF(CTSSMA.LT.CKIN(19).OR.CTSSMA.GT.CKIN(20)) MINT(51)=1
+ IF(CTH.LT.CKIN(27).OR.CTH.GT.CKIN(28)) MINT(51)=1
+ IF(THA.LT.CKIN(35)) MINT(51)=1
+ IF(CKIN(36).GE.0D0.AND.THA.GT.CKIN(36)) MINT(51)=1
+ IF(UHA.LT.CKIN(37)) MINT(51)=1
+ IF(CKIN(38).GE.0D0.AND.UHA.GT.CKIN(38)) MINT(51)=1
+ ENDIF
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
+ IF(TAUP*VINT(2).LT.CKIN(31)**2) MINT(51)=1
+ IF(CKIN(32).GE.0D0.AND.TAUP*VINT(2).GT.CKIN(32)**2) MINT(51)=1
+ ENDIF
+
+C...Additional cuts on W2 (approximately) in DIS.
+ IF(ISUB.EQ.10) THEN
+ XBJ=X2
+ IF(IABS(MINT(12)).LT.20) XBJ=X1
+ Q2BJ=THA
+ W2BJ=Q2BJ*(1D0-XBJ)/XBJ
+ IF(W2BJ.LT.CKIN(39)) MINT(51)=1
+ IF(CKIN(40).GT.0D0.AND.W2BJ.GT.CKIN(40)) MINT(51)=1
+ ENDIF
+
+ ELSEIF(ILIM.EQ.1) THEN
+C...Calculate limits on tau
+C...0) due to definition
+ TAUMN0=0D0
+ TAUMX0=1D0
+C...1) due to limits on subsystem mass
+ TAUMN1=CKIN(1)**2/VINT(2)
+ TAUMX1=1D0
+ IF(CKIN(2).GE.0D0) TAUMX1=CKIN(2)**2/VINT(2)
+C...2) due to limits on pT-hat (and non-overlapping rapidity intervals)
+ TM3=SQRT(SQM3+PTHMIN**2)
+ TM4=SQRT(SQM4+PTHMIN**2)
+ YDCOSH=1D0
+ IF(CKIN09.GT.CKIN12) YDCOSH=COSH(CKIN09-CKIN12)
+ TAUMN2=(TM3**2+2D0*TM3*TM4*YDCOSH+TM4**2)/VINT(2)
+ TAUMX2=1D0
+C...3) due to limits on pT-hat and cos(theta-hat)
+ CTH2MN=MIN(CKIN(27)**2,CKIN(28)**2)
+ CTH2MX=MAX(CKIN(27)**2,CKIN(28)**2)
+ TAUMN3=0D0
+ IF(CKIN(27)*CKIN(28).GT.0D0) TAUMN3=
+ & (SQRT(SQM3+PTHMIN**2/(1D0-CTH2MN))+
+ & SQRT(SQM4+PTHMIN**2/(1D0-CTH2MN)))**2/VINT(2)
+ TAUMX3=1D0
+ IF(CKIN(4).GE.0D0.AND.CTH2MX.LT.1D0) TAUMX3=
+ & (SQRT(SQM3+CKIN(4)**2/(1D0-CTH2MX))+
+ & SQRT(SQM4+CKIN(4)**2/(1D0-CTH2MX)))**2/VINT(2)
+C...4) due to limits on x1 and x2
+ TAUMN4=CKIN(21)*CKIN(23)
+ TAUMX4=CKIN(22)*CKIN(24)
+C...5) due to limits on xF
+ TAUMN5=0D0
+ TAUMX5=MAX(1D0-CKIN(25),1D0+CKIN(26))
+C...6) due to limits on that and uhat
+ TAUMN6=(SQM3+SQM4+CKIN(35)+CKIN(37))/VINT(2)
+ TAUMX6=1D0
+ IF(CKIN(36).GT.0D0.AND.CKIN(38).GT.0D0) TAUMX6=
+ & (SQM3+SQM4+CKIN(36)+CKIN(38))/VINT(2)
+
+C...Net effect of all separate limits.
+ VINT(11)=MAX(TAUMN0,TAUMN1,TAUMN2,TAUMN3,TAUMN4,TAUMN5,TAUMN6)
+ VINT(31)=MIN(TAUMX0,TAUMX1,TAUMX2,TAUMX3,TAUMX4,TAUMX5,TAUMX6)
+ IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
+ VINT(11)=0.99999D0
+ VINT(31)=1.00001D0
+ ELSEIF(MINT(47).EQ.5) THEN
+ VINT(31)=MIN(VINT(31),0.999998D0)
+ ENDIF
+ IF(VINT(31).LE.VINT(11)) MINT(51)=1
+
+ ELSEIF(ILIM.EQ.2) THEN
+C...Calculate limits on y*
+ TAUE=TAU
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
+ TAURT=SQRT(TAUE)
+C...0) due to kinematics
+ YSTMN0=LOG(TAURT)
+ YSTMX0=-YSTMN0
+C...1) due to explicit limits
+ YSTMN1=CKIN(7)
+ YSTMX1=CKIN(8)
+C...2) due to limits on x1
+ YSTMN2=LOG(MAX(TAUE,CKIN(21))/TAURT)
+ YSTMX2=LOG(MAX(TAUE,CKIN(22))/TAURT)
+C...3) due to limits on x2
+ YSTMN3=-LOG(MAX(TAUE,CKIN(24))/TAURT)
+ YSTMX3=-LOG(MAX(TAUE,CKIN(23))/TAURT)
+C...4) due to limits on xF
+ YEPMN4=0.5D0*ABS(CKIN(25))/TAURT
+ YSTMN4=SIGN(LOG(MAX(1D-20,SQRT(1D0+YEPMN4**2)+YEPMN4)),CKIN(25))
+ YEPMX4=0.5D0*ABS(CKIN(26))/TAURT
+ YSTMX4=SIGN(LOG(MAX(1D-20,SQRT(1D0+YEPMX4**2)+YEPMX4)),CKIN(26))
+C...5) due to simultaneous limits on y-large and y-small
+ YEPSMN=(RM3-RM4)*SINH(CKIN09-CKIN11)
+ YEPSMX=(RM3-RM4)*SINH(CKIN10-CKIN12)
+ YDIFMN=ABS(LOG(MAX(1D-20,SQRT(1D0+YEPSMN**2)-YEPSMN)))
+ YDIFMX=ABS(LOG(MAX(1D-20,SQRT(1D0+YEPSMX**2)-YEPSMX)))
+ YSTMN5=0.5D0*(CKIN09+CKIN11-YDIFMN)
+ YSTMX5=0.5D0*(CKIN10+CKIN12+YDIFMX)
+C...6) due to simultaneous limits on cos(theta-hat) and y-large or
+C... y-small
+ CTHLIM=SQRT(MAX(0D0,1D0-4D0*PTHMIN**2/(BE34**2*TAUE*VINT(2))))
+ RZMN=BE34*MAX(CKIN(27),-CTHLIM)
+ RZMX=BE34*MIN(CKIN(28),CTHLIM)
+ YEX3MX=(1D0+RM3-RM4+RZMX)/MAX(1D-10,1D0+RM3-RM4-RZMX)
+ YEX4MX=(1D0+RM4-RM3-RZMN)/MAX(1D-10,1D0+RM4-RM3+RZMN)
+ YEX3MN=MAX(1D-10,1D0+RM3-RM4+RZMN)/(1D0+RM3-RM4-RZMN)
+ YEX4MN=MAX(1D-10,1D0+RM4-RM3-RZMX)/(1D0+RM4-RM3+RZMX)
+ YSTMN6=CKIN09-0.5D0*LOG(MAX(YEX3MX,YEX4MX))
+ YSTMX6=CKIN12-0.5D0*LOG(MIN(YEX3MN,YEX4MN))
+
+C...Net effect of all separate limits.
+ VINT(12)=MAX(YSTMN0,YSTMN1,YSTMN2,YSTMN3,YSTMN4,YSTMN5,YSTMN6)
+ VINT(32)=MIN(YSTMX0,YSTMX1,YSTMX2,YSTMX3,YSTMX4,YSTMX5,YSTMX6)
+ IF(MINT(47).EQ.1) THEN
+ VINT(12)=-0.00001D0
+ VINT(32)=0.00001D0
+ ELSEIF(MINT(47).EQ.2) THEN
+ VINT(12)=0.99999D0*YSTMX0
+ VINT(32)=1.00001D0*YSTMX0
+ ELSEIF(MINT(47).EQ.3) THEN
+ VINT(12)=-1.00001D0*YSTMX0
+ VINT(32)=-0.99999D0*YSTMX0
+ ELSEIF(MINT(47).EQ.5) THEN
+ YSTEE=LOG(0.999999D0/TAURT)
+ VINT(12)=MAX(VINT(12),-YSTEE)
+ VINT(32)=MIN(VINT(32),YSTEE)
+ ENDIF
+ IF(VINT(32).LE.VINT(12)) MINT(51)=1
+
+ ELSEIF(ILIM.EQ.3) THEN
+C...Calculate limits on cos(theta-hat)
+ YST=VINT(22)
+C...0) due to definition
+ CTNMN0=-1D0
+ CTNMX0=0D0
+ CTPMN0=0D0
+ CTPMX0=1D0
+C...1) due to explicit limits
+ CTNMN1=MIN(0D0,CKIN(27))
+ CTNMX1=MIN(0D0,CKIN(28))
+ CTPMN1=MAX(0D0,CKIN(27))
+ CTPMX1=MAX(0D0,CKIN(28))
+C...2) due to limits on pT-hat
+ CTNMN2=-SQRT(MAX(0D0,1D0-4D0*PTHMIN**2/(BE34**2*TAU*VINT(2))))
+ CTPMX2=-CTNMN2
+ CTNMX2=0D0
+ CTPMN2=0D0
+ IF(CKIN(4).GE.0D0) THEN
+ CTNMX2=-SQRT(MAX(0D0,1D0-4D0*CKIN(4)**2/
+ & (BE34**2*TAU*VINT(2))))
+ CTPMN2=-CTNMX2
+ ENDIF
+C...3) due to limits on y-large and y-small
+ CTNMN3=MIN(0D0,MAX((1D0+RM3-RM4)/BE34*TANH(CKIN11-YST),
+ & -(1D0-RM3+RM4)/BE34*TANH(CKIN10-YST)))
+ CTNMX3=MIN(0D0,(1D0+RM3-RM4)/BE34*TANH(CKIN12-YST),
+ & -(1D0-RM3+RM4)/BE34*TANH(CKIN09-YST))
+ CTPMN3=MAX(0D0,(1D0+RM3-RM4)/BE34*TANH(CKIN09-YST),
+ & -(1D0-RM3+RM4)/BE34*TANH(CKIN12-YST))
+ CTPMX3=MAX(0D0,MIN((1D0+RM3-RM4)/BE34*TANH(CKIN10-YST),
+ & -(1D0-RM3+RM4)/BE34*TANH(CKIN11-YST)))
+C...4) due to limits on that
+ CTNMN4=-1D0
+ CTNMX4=0D0
+ CTPMN4=0D0
+ CTPMX4=1D0
+ SH=TAU*VINT(2)
+ IF(CKIN(35).GT.0D0) THEN
+ CTLIM=(1D0-RM3-RM4-2D0*CKIN(35)/SH)/BE34
+ IF(CTLIM.GT.0D0) THEN
+ CTPMX4=CTLIM
+ ELSE
+ CTPMX4=0D0
+ CTNMX4=CTLIM
+ ENDIF
+ ENDIF
+ IF(CKIN(36).GT.0D0) THEN
+ CTLIM=(1D0-RM3-RM4-2D0*CKIN(36)/SH)/BE34
+ IF(CTLIM.LT.0D0) THEN
+ CTNMN4=CTLIM
+ ELSE
+ CTNMN4=0D0
+ CTPMN4=CTLIM
+ ENDIF
+ ENDIF
+C...5) due to limits on uhat
+ CTNMN5=-1D0
+ CTNMX5=0D0
+ CTPMN5=0D0
+ CTPMX5=1D0
+ IF(CKIN(37).GT.0D0) THEN
+ CTLIM=(2D0*CKIN(37)/SH-(1D0-RM3-RM4))/BE34
+ IF(CTLIM.LT.0D0) THEN
+ CTNMN5=CTLIM
+ ELSE
+ CTNMN5=0D0
+ CTPMN5=CTLIM
+ ENDIF
+ ENDIF
+ IF(CKIN(38).GT.0D0) THEN
+ CTLIM=(2D0*CKIN(38)/SH-(1D0-RM3-RM4))/BE34
+ IF(CTLIM.GT.0D0) THEN
+ CTPMX5=CTLIM
+ ELSE
+ CTPMX5=0D0
+ CTNMX5=CTLIM
+ ENDIF
+ ENDIF
+
+C...Net effect of all separate limits.
+ VINT(13)=MAX(CTNMN0,CTNMN1,CTNMN2,CTNMN3,CTNMN4,CTNMN5)
+ VINT(33)=MIN(CTNMX0,CTNMX1,CTNMX2,CTNMX3,CTNMX4,CTNMX5)
+ VINT(14)=MAX(CTPMN0,CTPMN1,CTPMN2,CTPMN3,CTPMN4,CTPMN5)
+ VINT(34)=MIN(CTPMX0,CTPMX1,CTPMX2,CTPMX3,CTPMX4,CTPMX5)
+ IF(VINT(33).LE.VINT(13).AND.VINT(34).LE.VINT(14)) MINT(51)=1
+
+ ELSEIF(ILIM.EQ.4) THEN
+C...Calculate limits on tau'
+C...0) due to kinematics
+ TAPMN0=TAU
+ IF(ISTSB.EQ.5.AND.KFPR(ISUB,2).GT.0) THEN
+ PQRAT=2D0*PMAS(PYCOMP(KFPR(ISUB,2)),1)/VINT(1)
+ TAPMN0=(SQRT(TAU)+PQRAT)**2
+ ENDIF
+ TAPMX0=1D0
+C...1) due to explicit limits
+ TAPMN1=CKIN(31)**2/VINT(2)
+ TAPMX1=1D0
+ IF(CKIN(32).GE.0D0) TAPMX1=CKIN(32)**2/VINT(2)
+
+C...Net effect of all separate limits.
+ VINT(16)=MAX(TAPMN0,TAPMN1)
+ VINT(36)=MIN(TAPMX0,TAPMX1)
+ IF(MINT(47).EQ.1) THEN
+ VINT(16)=0.99999D0
+ VINT(36)=1.00001D0
+ ENDIF
+ IF(VINT(36).LE.VINT(16)) MINT(51)=1
+
+ ENDIF
+ RETURN
+
+C...Special case for low-pT and multiple interactions:
+C...effective kinematical limits for tau, y*, cos(theta-hat).
+ 100 IF(ILIM.EQ.0) THEN
+ ELSEIF(ILIM.EQ.1) THEN
+ IF(MSTP(82).LE.1) VINT(11)=4D0*PARP(81)**2/VINT(2)
+ IF(MSTP(82).GE.2) VINT(11)=PARP(82)**2/VINT(2)
+ VINT(31)=1D0
+ ELSEIF(ILIM.EQ.2) THEN
+ VINT(12)=0.5D0*LOG(VINT(21))
+ VINT(32)=-VINT(12)
+ ELSEIF(ILIM.EQ.3) THEN
+ IF(MSTP(82).LE.1) ST2EFF=4D0*PARP(81)**2/(VINT(21)*VINT(2))
+ IF(MSTP(82).GE.2) ST2EFF=0.01D0*PARP(82)**2/(VINT(21)*VINT(2))
+ VINT(13)=-SQRT(MAX(0D0,1D0-ST2EFF))
+ VINT(33)=0D0
+ VINT(14)=0D0
+ VINT(34)=-VINT(13)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYKMAP
+C...Maps a uniform distribution into a distribution of a kinematical
+C...variable according to one of the possibilities allowed. It is
+C...assumed that kinematical limits have been set by a PYKLIM call.
+
+ SUBROUTINE PYKMAP(IVAR,MVAR,VVAR)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ SAVE /PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
+
+C...Convert VVAR to tau variable.
+ ISUB=MINT(1)
+ ISTSB=ISET(ISUB)
+ IF(IVAR.EQ.1) THEN
+ TAUMIN=VINT(11)
+ TAUMAX=VINT(31)
+ IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN
+ TAURE=VINT(73)
+ GAMRE=VINT(74)
+ ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN
+ TAURE=VINT(75)
+ GAMRE=VINT(76)
+ ENDIF
+ IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
+ TAU=1D0
+ ELSEIF(MVAR.EQ.1) THEN
+ TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR
+ ELSEIF(MVAR.EQ.2) THEN
+ TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)
+ ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN
+ RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX
+ TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN)
+ ELSEIF(MVAR.EQ.4.OR.MVAR.EQ.6) THEN
+ AUPP=ATAN((TAUMAX-TAURE)/GAMRE)
+ ALOW=ATAN((TAUMIN-TAURE)/GAMRE)
+ TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)
+ ELSE
+ AUPP=LOG(MAX(2D-6,1D0-TAUMAX))
+ ALOW=LOG(MAX(2D-6,1D0-TAUMIN))
+ TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
+ ENDIF
+ VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))
+
+C...Convert VVAR to y* variable.
+ ELSEIF(IVAR.EQ.2) THEN
+ YSTMIN=VINT(12)
+ YSTMAX=VINT(32)
+ TAUE=VINT(21)
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
+ IF(MINT(47).EQ.1) THEN
+ YST=0D0
+ ELSEIF(MINT(47).EQ.2) THEN
+ YST=-0.5D0*LOG(TAUE)
+ ELSEIF(MINT(47).EQ.3) THEN
+ YST=0.5D0*LOG(TAUE)
+ ELSEIF(MVAR.EQ.1) THEN
+ YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR)
+ ELSEIF(MVAR.EQ.2) THEN
+ YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1D0-VVAR)
+ ELSEIF(MVAR.EQ.3) THEN
+ AUPP=ATAN(EXP(YSTMAX))
+ ALOW=ATAN(EXP(YSTMIN))
+ YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))
+ ELSEIF(MVAR.EQ.4) THEN
+ YST0=-0.5D0*LOG(TAUE)
+ AUPP=LOG(MAX(1D-6,EXP(YST0-YSTMIN)-1D0))
+ ALOW=LOG(MAX(1D-6,EXP(YST0-YSTMAX)-1D0))
+ YST=YST0-LOG(1D0+EXP(ALOW+VVAR*(AUPP-ALOW)))
+ ELSE
+ YST0=-0.5D0*LOG(TAUE)
+ AUPP=LOG(MAX(1D-6,EXP(YST0+YSTMIN)-1D0))
+ ALOW=LOG(MAX(1D-6,EXP(YST0+YSTMAX)-1D0))
+ YST=LOG(1D0+EXP(AUPP+VVAR*(ALOW-AUPP)))-YST0
+ ENDIF
+ VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))
+
+C...Convert VVAR to cos(theta-hat) variable.
+ ELSEIF(IVAR.EQ.3) THEN
+ RM34=MAX(1D-20,2D0*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2)
+ RSQM=1D0+RM34
+ IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
+ & RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
+ CTNMIN=VINT(13)
+ CTNMAX=VINT(33)
+ CTPMIN=VINT(14)
+ CTPMAX=VINT(34)
+ IF(MVAR.EQ.1) THEN
+ ANEG=CTNMAX-CTNMIN
+ APOS=CTPMAX-CTPMIN
+ IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
+ VCTN=VVAR*(ANEG+APOS)/ANEG
+ CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN
+ ELSE
+ VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
+ CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP
+ ENDIF
+ ELSEIF(MVAR.EQ.2) THEN
+ RMNMIN=MAX(RM34,RSQM-CTNMIN)
+ RMNMAX=MAX(RM34,RSQM-CTNMAX)
+ RMPMIN=MAX(RM34,RSQM-CTPMIN)
+ RMPMAX=MAX(RM34,RSQM-CTPMAX)
+ ANEG=LOG(RMNMIN/RMNMAX)
+ APOS=LOG(RMPMIN/RMPMAX)
+ IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
+ VCTN=VVAR*(ANEG+APOS)/ANEG
+ CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN
+ ELSE
+ VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
+ CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP
+ ENDIF
+ ELSEIF(MVAR.EQ.3) THEN
+ RMNMIN=MAX(RM34,RSQM+CTNMIN)
+ RMNMAX=MAX(RM34,RSQM+CTNMAX)
+ RMPMIN=MAX(RM34,RSQM+CTPMIN)
+ RMPMAX=MAX(RM34,RSQM+CTPMAX)
+ ANEG=LOG(RMNMAX/RMNMIN)
+ APOS=LOG(RMPMAX/RMPMIN)
+ IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
+ VCTN=VVAR*(ANEG+APOS)/ANEG
+ CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM
+ ELSE
+ VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
+ CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM
+ ENDIF
+ ELSEIF(MVAR.EQ.4) THEN
+ RMNMIN=MAX(RM34,RSQM-CTNMIN)
+ RMNMAX=MAX(RM34,RSQM-CTNMAX)
+ RMPMIN=MAX(RM34,RSQM-CTPMIN)
+ RMPMAX=MAX(RM34,RSQM-CTPMAX)
+ ANEG=1D0/RMNMAX-1D0/RMNMIN
+ APOS=1D0/RMPMAX-1D0/RMPMIN
+ IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
+ VCTN=VVAR*(ANEG+APOS)/ANEG
+ CTH=RSQM-1D0/(1D0/RMNMIN+ANEG*VCTN)
+ ELSE
+ VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
+ CTH=RSQM-1D0/(1D0/RMPMIN+APOS*VCTP)
+ ENDIF
+ ELSEIF(MVAR.EQ.5) THEN
+ RMNMIN=MAX(RM34,RSQM+CTNMIN)
+ RMNMAX=MAX(RM34,RSQM+CTNMAX)
+ RMPMIN=MAX(RM34,RSQM+CTPMIN)
+ RMPMAX=MAX(RM34,RSQM+CTPMAX)
+ ANEG=1D0/RMNMIN-1D0/RMNMAX
+ APOS=1D0/RMPMIN-1D0/RMPMAX
+ IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
+ VCTN=VVAR*(ANEG+APOS)/ANEG
+ CTH=1D0/(1D0/RMNMIN-ANEG*VCTN)-RSQM
+ ELSE
+ VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
+ CTH=1D0/(1D0/RMPMIN-APOS*VCTP)-RSQM
+ ENDIF
+ ENDIF
+ IF(CTH.LT.0D0) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))
+ IF(CTH.GT.0D0) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))
+ VINT(23)=CTH
+
+C...Convert VVAR to tau' variable.
+ ELSEIF(IVAR.EQ.4) THEN
+ TAU=VINT(21)
+ TAUPMN=VINT(16)
+ TAUPMX=VINT(36)
+ IF(MINT(47).EQ.1) THEN
+ TAUP=1D0
+ ELSEIF(MVAR.EQ.1) THEN
+ TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR
+ ELSEIF(MVAR.EQ.2) THEN
+ AUPP=(1D0-TAU/TAUPMX)**4
+ ALOW=(1D0-TAU/TAUPMN)**4
+ TAUP=TAU/MAX(1D-7,1D0-(ALOW+(AUPP-ALOW)*VVAR)**0.25D0)
+ ELSE
+ AUPP=LOG(MAX(2D-6,1D0-TAUPMX))
+ ALOW=LOG(MAX(2D-6,1D0-TAUPMN))
+ TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
+ ENDIF
+ VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))
+
+C...Selection of extra variables needed in 2 -> 3 process:
+C...pT1, pT2, phi1, phi2, y3 for three outgoing particles.
+C...Since no options are available, the functions of PYKLIM
+C...and PYKMAP are joint for these choices.
+ ELSEIF(IVAR.EQ.5) THEN
+
+C...Read out total energy and particle masses.
+ MINT(51)=0
+ MPTPK=1
+ IF(ISUB.EQ.123.OR.ISUB.EQ.124.OR.ISUB.EQ.173.OR.ISUB.EQ.174
+ & .OR.ISUB.EQ.178.OR.ISUB.EQ.179) MPTPK=2
+ SHP=VINT(26)*VINT(2)
+ SHPR=SQRT(SHP)
+ PM1=VINT(201)
+ PM2=VINT(206)
+ PM3=SQRT(VINT(21))*VINT(1)
+ IF(PM1+PM2+PM3.GT.0.9999D0*SHPR) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ PMRS1=VINT(204)**2
+ PMRS2=VINT(209)**2
+
+C...Specify coefficients of pT choice; upper and lower limits.
+ IF(MPTPK.EQ.1) THEN
+ HWT1=0.4D0
+ HWT2=0.4D0
+ ELSE
+ HWT1=0.05D0
+ HWT2=0.05D0
+ ENDIF
+ HWT3=1D0-HWT1-HWT2
+ PTSMX1=((SHP-PM1**2-(PM2+PM3)**2)**2-(2D0*PM1*(PM2+PM3))**2)/
+ & (4D0*SHP)
+ IF(CKIN(52).GT.0D0) PTSMX1=MIN(PTSMX1,CKIN(52)**2)
+ PTSMN1=CKIN(51)**2
+ PTSMX2=((SHP-PM2**2-(PM1+PM3)**2)**2-(2D0*PM2*(PM1+PM3))**2)/
+ & (4D0*SHP)
+ IF(CKIN(54).GT.0D0) PTSMX2=MIN(PTSMX2,CKIN(54)**2)
+ PTSMN2=CKIN(53)**2
+
+C...Select transverse momenta according to
+C...dp_T^2 * (a + b/(M^2 + p_T^2) + c/(M^2 + p_T^2)^2).
+ HMX=PMRS1+PTSMX1
+ HMN=PMRS1+PTSMN1
+ IF(HMX.LT.1.0001D0*HMN) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ HDE=PTSMX1-PTSMN1
+ RPT=PYR(0)
+ IF(RPT.LT.HWT1) THEN
+ PTS1=PTSMN1+PYR(0)*HDE
+ ELSEIF(RPT.LT.HWT1+HWT2) THEN
+ PTS1=MAX(PTSMN1,HMN*(HMX/HMN)**PYR(0)-PMRS1)
+ ELSE
+ PTS1=MAX(PTSMN1,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS1)
+ ENDIF
+ WTPTS1=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS1+PTS1))+
+ & HWT3*HMN*HMX/(PMRS1+PTS1)**2)
+ HMX=PMRS2+PTSMX2
+ HMN=PMRS2+PTSMN2
+ IF(HMX.LT.1.0001D0*HMN) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ HDE=PTSMX2-PTSMN2
+ RPT=PYR(0)
+ IF(RPT.LT.HWT1) THEN
+ PTS2=PTSMN2+PYR(0)*HDE
+ ELSEIF(RPT.LT.HWT1+HWT2) THEN
+ PTS2=MAX(PTSMN2,HMN*(HMX/HMN)**PYR(0)-PMRS2)
+ ELSE
+ PTS2=MAX(PTSMN2,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS2)
+ ENDIF
+ WTPTS2=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS2+PTS2))+
+ & HWT3*HMN*HMX/(PMRS2+PTS2)**2)
+
+C...Select azimuthal angles and check pT choice.
+ PHI1=PARU(2)*PYR(0)
+ PHI2=PARU(2)*PYR(0)
+ PHIR=PHI2-PHI1
+ PTS3=MAX(0D0,PTS1+PTS2+2D0*SQRT(PTS1*PTS2)*COS(PHIR))
+ IF(PTS3.LT.CKIN(55)**2.OR.(CKIN(56).GT.0D0.AND.PTS3.GT.
+ & CKIN(56)**2)) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+
+C...Calculate transverse masses and check phase space not closed.
+ PMS1=PM1**2+PTS1
+ PMS2=PM2**2+PTS2
+ PMS3=PM3**2+PTS3
+ PMT1=SQRT(PMS1)
+ PMT2=SQRT(PMS2)
+ PMT3=SQRT(PMS3)
+ PM12=(PMT1+PMT2)**2
+ IF(PMT1+PMT2+PMT3.GT.0.9999D0*SHPR) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+
+C...Select rapidity for particle 3 and check phase space not closed.
+ Y3MAX=LOG((SHP+PMS3-PM12+SQRT(MAX(0D0,(SHP-PMS3-PM12)**2-
+ & 4D0*PMS3*PM12)))/(2D0*SHPR*PMT3))
+ IF(Y3MAX.LT.1D-6) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ Y3=(2D0*PYR(0)-1D0)*0.999999D0*Y3MAX
+ PZ3=PMT3*SINH(Y3)
+ PE3=PMT3*COSH(Y3)
+
+C...Find momentum transfers in two mirror solutions (in 1-2 frame).
+ PZ12=-PZ3
+ PE12=SHPR-PE3
+ PMS12=PE12**2-PZ12**2
+ SQL12=SQRT(MAX(0D0,(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2))
+ IF(SQL12.LT.1D-6*SHP) THEN
+ MINT(51)=1
+ RETURN
+ ENDIF
+ PMM1=PMS12+PMS1-PMS2
+ PMM2=PMS12+PMS2-PMS1
+ TFAC=-SHPR/(2D0*PMS12)
+ T1P=TFAC*(PE12-PZ12)*(PMM1-SQL12)
+ T1N=TFAC*(PE12-PZ12)*(PMM1+SQL12)
+ T2P=TFAC*(PE12+PZ12)*(PMM2-SQL12)
+ T2N=TFAC*(PE12+PZ12)*(PMM2+SQL12)
+
+C...Construct relative mirror weights and make choice.
+ IF(MPTPK.EQ.1) THEN
+ WTPU=1D0
+ WTNU=1D0
+ ELSE
+ WTPU=1D0/((T1P-PMRS1)*(T2P-PMRS2))**2
+ WTNU=1D0/((T1N-PMRS1)*(T2N-PMRS2))**2
+ ENDIF
+ WTP=WTPU/(WTPU+WTNU)
+ WTN=WTNU/(WTPU+WTNU)
+ EPS=1D0
+ IF(WTN.GT.PYR(0)) EPS=-1D0
+
+C...Store result of variable choice and associated weights.
+ VINT(202)=PTS1
+ VINT(207)=PTS2
+ VINT(203)=PHI1
+ VINT(208)=PHI2
+ VINT(205)=WTPTS1
+ VINT(210)=WTPTS2
+ VINT(211)=Y3
+ VINT(212)=Y3MAX
+ VINT(213)=EPS
+ IF(EPS.GT.0D0) THEN
+ VINT(214)=1D0/WTP
+ VINT(215)=T1P
+ VINT(216)=T2P
+ ELSE
+ VINT(214)=1D0/WTN
+ VINT(215)=T1N
+ VINT(216)=T2N
+ ENDIF
+ VINT(217)=-0.5D0*TFAC*(PE12-PZ12)*(PMM2+EPS*SQL12)
+ VINT(218)=-0.5D0*TFAC*(PE12+PZ12)*(PMM1+EPS*SQL12)
+ VINT(219)=0.5D0*(PMS12-PTS3)
+ VINT(220)=SQL12
+ ENDIF
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYSIGH
+C...Differential matrix elements for all included subprocesses
+C...Note that what is coded is (disregarding the COMFAC factor)
+C...1) for 2 -> 1 processes: s-hat/pi*d(sigma-hat), where,
+C...when d(sigma-hat) is given in the zero-width limit, the delta
+C...function in tau is replaced by a (modified) Breit-Wigner:
+C...1/pi*s*H_res/((s*tau-m_res^2)^2+H_res^2),
+C...where H_res = s-hat/m_res*Gamma_res(s-hat);
+C...2) for 2 -> 2 processes: (s-hat)**2/pi*d(sigma-hat)/d(t-hat);
+C...i.e., dimensionless quantities
+C...3) for 2 -> 3 processes: abs(M)^2, where the total cross-section is
+C...Integral abs(M)^2/(2shat') * (prod_(i=1)^3 d^3p_i/((2pi)^3*2E_i)) *
+C...(2pi)^4 delta^4(P - sum p_i)
+C...COMFAC contains the factor pi/s (or equivalent) and
+C...the conversion factor from GeV^-2 to mb
+
+ SUBROUTINE PYSIGH(NCHN,SIGS)
+
+C...Double precision and integer declarations
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
+ &/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT7/,
+ &/PYSSMT/
+C...Local arrays and complex variables
+ DIMENSION X(2),XPQ(-25:25),KFAC(2,-40:40),WDTP(0:200),
+ &WDTE(0:200,0:5),HGZ(6,3),HL3(3),HR3(3),HL4(3),HR4(3)
+ COMPLEX A004,A204,A114,A00U,A20U,A11U
+ COMPLEX CIGTOT,CIZTOT,F0ALP,F1ALP,F2ALP,F0BET,F1BET,F2BET,FIF,
+ &COULCK,COULCP,COULCD,COULCR,COULCS
+ REAL A00L,A11L,A20L,COULXX
+
+C...Reset number of channels and cross-section
+ NCHN=0
+ SIGS=0D0
+
+C...Convert H or A process into equivalent h one
+ ISUB=MINT(1)
+ ISUBSV=ISUB
+ IHIGG=1
+ KFHIGG=25
+ IF((ISUB.GE.151.AND.ISUB.LE.160).OR.(ISUB.GE.171.AND.
+ &ISUB.LE.190)) THEN
+ IHIGG=2
+ IF(MOD(ISUB-1,10).GE.5) IHIGG=3
+ KFHIGG=33+IHIGG
+ IF(ISUB.EQ.151.OR.ISUB.EQ.156) ISUB=3
+ IF(ISUB.EQ.152.OR.ISUB.EQ.157) ISUB=102
+ IF(ISUB.EQ.153.OR.ISUB.EQ.158) ISUB=103
+ IF(ISUB.EQ.171.OR.ISUB.EQ.176) ISUB=24
+ IF(ISUB.EQ.172.OR.ISUB.EQ.177) ISUB=26
+ IF(ISUB.EQ.173.OR.ISUB.EQ.178) ISUB=123
+ IF(ISUB.EQ.174.OR.ISUB.EQ.179) ISUB=124
+ IF(ISUB.EQ.181.OR.ISUB.EQ.186) ISUB=121
+ IF(ISUB.EQ.182.OR.ISUB.EQ.187) ISUB=122
+ ENDIF
+
+CMRENNA++
+C...Convert almost equivalent SUSY processes into each other
+C...Extract differences in flavours and couplings
+ IF(ISUB.GE.200.AND.ISUB.LE.280) THEN
+
+C...Sleptons and sneutrinos
+ IF(ISUB.EQ.201.OR.ISUB.EQ.204.OR.ISUB.EQ.207) THEN
+ KFID=MOD(KFPR(ISUB,1),KSUSY1)
+ ISUB=201
+ ILR=0
+ ELSEIF(ISUB.EQ.202.OR.ISUB.EQ.205.OR.ISUB.EQ.208) THEN
+ KFID=MOD(KFPR(ISUB,1),KSUSY1)
+ ISUB=201
+ ILR=1
+ ELSEIF(ISUB.EQ.203.OR.ISUB.EQ.206.OR.ISUB.EQ.209) THEN
+ KFID=MOD(KFPR(ISUB,1),KSUSY1)
+ ISUB=203
+ ELSEIF(ISUB.GE.210.AND.ISUB.LE.212) THEN
+ IF(ISUB.EQ.210) THEN
+ RKF=2.0D0
+ ELSEIF(ISUB.EQ.211) THEN
+ RKF=SFMIX(15,1)**2
+ ELSEIF(ISUB.EQ.212) THEN
+ RKF=SFMIX(15,2)**2
+ ENDIF
+ ISUB=210
+ ELSEIF(ISUB.EQ.213.OR.ISUB.EQ.214) THEN
+ IF(ISUB.EQ.213) THEN
+ KFID=MOD(KFPR(ISUB,1),KSUSY1)
+ RKF=2.0D0
+ ELSEIF(ISUB.EQ.214) THEN
+ KFID=16
+ RKF=1.0D0
+ ENDIF
+ ISUB=213
+
+C...Neutralinos
+ ELSEIF(ISUB.GE.216.AND.ISUB.LE.225) THEN
+ IF(ISUB.EQ.216) THEN
+ IZID1=1
+ IZID2=1
+ ELSEIF(ISUB.EQ.217) THEN
+ IZID1=2
+ IZID2=2
+ ELSEIF(ISUB.EQ.218) THEN
+ IZID1=3
+ IZID2=3
+ ELSEIF(ISUB.EQ.219) THEN
+ IZID1=4
+ IZID2=4
+ ELSEIF(ISUB.EQ.220) THEN
+ IZID1=1
+ IZID2=2
+ ELSEIF(ISUB.EQ.221) THEN
+ IZID1=1
+ IZID2=3
+ ELSEIF(ISUB.EQ.222) THEN
+ IZID1=1
+ IZID2=4
+ ELSEIF(ISUB.EQ.223) THEN
+ IZID1=2
+ IZID2=3
+ ELSEIF(ISUB.EQ.224) THEN
+ IZID1=2
+ IZID2=4
+ ELSEIF(ISUB.EQ.225) THEN
+ IZID1=3
+ IZID2=4
+ ENDIF
+ ISUB=216
+
+C...Charginos
+ ELSEIF(ISUB.GE.226.AND.ISUB.LE.228) THEN
+ IF(ISUB.EQ.226) THEN
+ IZID1=1
+ IZID2=1
+ ELSEIF(ISUB.EQ.227) THEN
+ IZID1=2
+ IZID2=2
+ ELSEIF(ISUB.EQ.228) THEN
+ IZID1=1
+ IZID2=2
+ ENDIF
+ ISUB=226
+
+C...Neutralino + chargino
+ ELSEIF(ISUB.GE.229.AND.ISUB.LE.236) THEN
+ IF(ISUB.EQ.229) THEN
+ IZID1=1
+ IZID2=1
+ ELSEIF(ISUB.EQ.230) THEN
+ IZID1=1
+ IZID2=2
+ ELSEIF(ISUB.EQ.231) THEN
+ IZID1=1
+ IZID2=3
+ ELSEIF(ISUB.EQ.232) THEN
+ IZID1=1
+ IZID2=4
+ ELSEIF(ISUB.EQ.233) THEN
+ IZID1=2
+ IZID2=1
+ ELSEIF(ISUB.EQ.234) THEN
+ IZID1=2
+ IZID2=2
+ ELSEIF(ISUB.EQ.235) THEN
+ IZID1=2
+ IZID2=3
+ ELSEIF(ISUB.EQ.236) THEN
+ IZID1=2
+ IZID2=4
+ ENDIF
+ ISUB=229
+
+C...Gluino + neutralino
+ ELSEIF(ISUB.GE.237.AND.ISUB.LE.240) THEN
+ IF(ISUB.EQ.237) THEN
+ IZID=1
+ ELSEIF(ISUB.EQ.238) THEN
+ IZID=2
+ ELSEIF(ISUB.EQ.239) THEN
+ IZID=3
+ ELSEIF(ISUB.EQ.240) THEN
+ IZID=4
+ ENDIF
+ ISUB=237
+
+C...Gluino + chargino
+ ELSEIF(ISUB.GE.241.AND.ISUB.LE.242) THEN
+ IF(ISUB.EQ.241) THEN
+ IZID=1
+ ELSEIF(ISUB.EQ.242) THEN
+ IZID=2
+ ENDIF
+ ISUB=241
+
+C...Squark + neutralino
+ ELSEIF(ISUB.GE.246.AND.ISUB.LE.253) THEN
+ ILR=0
+ IF(MOD(ISUB,2).NE.0) ILR=1
+ IF(ISUB.LE.247) THEN
+ IZID=1
+ ELSEIF(ISUB.LE.249) THEN
+ IZID=2
+ ELSEIF(ISUB.LE.251) THEN
+ IZID=3
+ ELSEIF(ISUB.LE.253) THEN
+ IZID=4
+ ENDIF
+ ISUB=246
+ RKF=5D0
+
+C...Squark + chargino
+ ELSEIF(ISUB.GE.254.AND.ISUB.LE.257) THEN
+ IF(ISUB.LE.255) THEN
+ IZID=1
+ ELSEIF(ISUB.LE.257) THEN
+ IZID=2
+ ENDIF
+ IF(MOD(ISUB,2).EQ.0) THEN
+ ILR=0
+ ELSE
+ ILR=1
+ ENDIF
+ ISUB=254
+ RKF=5D0
+
+C...Squark + gluino
+ ELSEIF(ISUB.EQ.258.OR.ISUB.EQ.259) THEN
+ ISUB=258
+ RKF=5D0
+
+C...Stops
+ ELSEIF(ISUB.EQ.261.OR.ISUB.EQ.262) THEN
+ ILR=0
+ IF(ISUB.EQ.262) ILR=1
+ ISUB=261
+ ELSEIF(ISUB.EQ.265) THEN
+ ISUB=264
+
+C...Squarks
+ ELSEIF(ISUB.GE.271.AND.ISUB.LE.280) THEN
+ ILR=0
+ IF(ISUB.LE.273) THEN
+ IF(ISUB.EQ.273) ILR=1
+ ISUB=271
+ RKF=25D0
+ ELSEIF(ISUB.LE.276) THEN
+ IF(ISUB.EQ.276) ILR=1
+ ISUB=274
+ RKF=25D0
+ ELSEIF(ISUB.LE.278) THEN
+ IF(ISUB.EQ.278) ILR=1
+ ISUB=277
+ RKF=5D0
+ ELSE
+ IF(ISUB.EQ.280) ILR=1
+ ISUB=279
+ RKF=5D0
+ ENDIF
+ ENDIF
+ ENDIF
+CMRENNA--
+
+C...Read kinematical variables and limits
+ ISTSB=ISET(ISUBSV)
+ TAUMIN=VINT(11)
+ YSTMIN=VINT(12)
+ CTNMIN=VINT(13)
+ CTPMIN=VINT(14)
+ TAUPMN=VINT(16)
+ TAU=VINT(21)
+ YST=VINT(22)
+ CTH=VINT(23)
+ XT2=VINT(25)
+ TAUP=VINT(26)
+ TAUMAX=VINT(31)
+ YSTMAX=VINT(32)
+ CTNMAX=VINT(33)
+ CTPMAX=VINT(34)
+ TAUPMX=VINT(36)
+
+C...Derive kinematical quantities
+ TAUE=TAU
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=TAUP
+ X(1)=SQRT(TAUE)*EXP(YST)
+ X(2)=SQRT(TAUE)*EXP(-YST)
+ IF(MINT(45).EQ.2.AND.ISTSB.GE.1) THEN
+ IF(X(1).GT.0.9999D0) RETURN
+ ELSEIF(MINT(45).EQ.3) THEN
+ X(1)=MIN(0.9999989D0,X(1))
+ ENDIF
+ IF(MINT(46).EQ.2.AND.ISTSB.GE.1) THEN
+ IF(X(2).GT.0.9999D0) RETURN
+ ELSEIF(MINT(46).EQ.3) THEN
+ X(2)=MIN(0.9999989D0,X(2))
+ ENDIF
+ SH=TAU*VINT(2)
+ SQM3=VINT(63)
+ SQM4=VINT(64)
+ RM3=SQM3/SH
+ RM4=SQM4/SH
+ BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
+ RPTS=4D0*VINT(71)**2/SH
+ BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
+ RM34=MAX(1D-20,2D0*RM3*RM4)
+ RSQM=1D0+RM34
+ IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0) RM34=MAX(RM34,
+ &2D0*VINT(71)**2/(VINT(21)*VINT(2)))
+ RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
+ IF(ISTSB.EQ.0) THEN
+ TH=VINT(45)
+ UH=-0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
+ SQPTH=MAX(VINT(71)**2,0.25D0*SH*BE34**2*VINT(59)**2)
+ ELSE
+ TH=-0.5D0*SH*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
+ UH=-0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
+ SQPTH=MAX(VINT(71)**2,0.25D0*SH*BE34**2*(1D0-CTH**2))
+ ENDIF
+ SHR=SQRT(SH)
+ SH2=SH**2
+ TH2=TH**2
+ UH2=UH**2
+
+C...Choice of Q2 scale: hard, parton distributions, parton showers
+ IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
+ Q2=SH
+ ELSEIF(MOD(ISTSB,2).EQ.0.OR.ISTSB.EQ.9) THEN
+ IF(MSTP(32).EQ.1) THEN
+ Q2=2D0*SH*TH*UH/(SH**2+TH**2+UH**2)
+ ELSEIF(MSTP(32).EQ.2) THEN
+ Q2=SQPTH+0.5D0*(SQM3+SQM4)
+ ELSEIF(MSTP(32).EQ.3) THEN
+ Q2=MIN(-TH,-UH)
+ ELSEIF(MSTP(32).EQ.4) THEN
+ Q2=SH
+ ELSEIF(MSTP(32).EQ.5) THEN
+ Q2=-TH
+ ENDIF
+ IF(ISTSB.EQ.9) Q2=SQPTH
+ IF((ISTSB.EQ.9.AND.MSTP(82).GE.2).OR.(ISTSB.NE.9.AND.
+ & MSTP(85).EQ.1)) Q2=Q2+PARP(82)**2
+ ENDIF
+ Q2SF=Q2
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
+ Q2SF=PMAS(23,1)**2
+ IF(ISUB.EQ.8.OR.ISUB.EQ.76.OR.ISUB.EQ.77.OR.ISUB.EQ.124)
+ & Q2SF=PMAS(24,1)**2
+ IF(ISUB.EQ.121.OR.ISUB.EQ.122) THEN
+ Q2SF=PMAS(PYCOMP(KFPR(ISUBSV,2)),1)**2
+ IF(MSTP(39).EQ.2) Q2SF=Q2SF+MAX(VINT(202),VINT(207))
+ IF(MSTP(39).EQ.3) Q2SF=SH
+ IF(MSTP(39).EQ.4) Q2SF=VINT(26)*VINT(2)
+ ENDIF
+ ENDIF
+ Q2PS=Q2SF
+ Q2SF=Q2SF*PARP(34)
+ IF(MSTP(68).GE.2.AND.MINT(47).EQ.5) Q2SF=VINT(2)
+ IF(MSTP(22).GE.1.AND.(ISUB.EQ.10.OR.ISUB.EQ.83).AND.
+ &(MINT(43).EQ.2.OR.MINT(43).EQ.3)) THEN
+ XBJ=X(2)
+ IF(MINT(43).EQ.3) XBJ=X(1)
+ IF(MSTP(22).EQ.1) THEN
+ Q2PS=-TH
+ ELSEIF(MSTP(22).EQ.2) THEN
+ Q2PS=((1D0-XBJ)/XBJ)*(-TH)
+ ELSEIF(MSTP(22).EQ.3) THEN
+ Q2PS=SQRT((1D0-XBJ)/XBJ)*(-TH)
+ ELSE
+ Q2PS=(1D0-XBJ)*MAX(1D0,-LOG(XBJ))*(-TH)
+ ENDIF
+ ENDIF
+ IF(MSTP(68).GE.1.AND.MINT(47).EQ.5) Q2PS=VINT(2)
+
+C...Store derived kinematical quantities
+ VINT(41)=X(1)
+ VINT(42)=X(2)
+ VINT(44)=SH
+ VINT(43)=SQRT(SH)
+ VINT(45)=TH
+ VINT(46)=UH
+ VINT(48)=SQPTH
+ VINT(47)=SQRT(SQPTH)
+ VINT(50)=TAUP*VINT(2)
+ VINT(49)=SQRT(MAX(0D0,VINT(50)))
+ VINT(52)=Q2
+ VINT(51)=SQRT(Q2)
+ VINT(54)=Q2SF
+ VINT(53)=SQRT(Q2SF)
+ VINT(56)=Q2PS
+ VINT(55)=SQRT(Q2PS)
+
+C...Calculate parton distributions
+ IF(ISTSB.LE.0) GOTO 170
+ IF(MINT(47).GE.2) THEN
+ DO 110 I=3-MIN(2,MINT(45)),MIN(2,MINT(46))
+ XSF=X(I)
+ IF(ISTSB.EQ.9) XSF=X(I)/VINT(142+I)
+ MINT(105)=MINT(102+I)
+ MINT(109)=MINT(106+I)
+ IF(MSTP(57).LE.1) THEN
+ CALL PYPDFU(MINT(10+I),XSF,Q2SF,XPQ)
+ ELSE
+ CALL PYPDFL(MINT(10+I),XSF,Q2SF,XPQ)
+ ENDIF
+ DO 100 KFL=-25,25
+ XSFX(I,KFL)=XPQ(KFL)
+ 100 CONTINUE
+ 110 CONTINUE
+ ENDIF
+
+C...Calculate alpha_em, alpha_strong and K-factor
+ XW=PARU(102)
+ XWV=XW
+ IF(MSTP(8).GE.2.OR.(ISUB.GE.71.AND.ISUB.LE.77)) XW=
+ &1D0-(PMAS(24,1)/PMAS(23,1))**2
+ XW1=1D0-XW
+ XWC=1D0/(16D0*XW*XW1)
+ AEM=PYALEM(Q2)
+ IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
+ IF(MSTP(33).NE.3) AS=PYALPS(PARP(34)*Q2)
+ FACK=1D0
+ FACA=1D0
+ IF(MSTP(33).EQ.1) THEN
+ FACK=PARP(31)
+ ELSEIF(MSTP(33).EQ.2) THEN
+ FACK=PARP(31)
+ FACA=PARP(32)/PARP(31)
+ ELSEIF(MSTP(33).EQ.3) THEN
+ Q2AS=PARP(33)*Q2
+ IF(ISTSB.EQ.9.AND.MSTP(82).GE.2) Q2AS=Q2AS+
+ & PARU(112)*PARP(82)
+ AS=PYALPS(Q2AS)
+ ENDIF
+ VINT(138)=1D0
+ VINT(57)=AEM
+ VINT(58)=AS
+
+C...Set flags for allowed reacting partons/leptons
+ DO 140 I=1,2
+ DO 120 J=-25,25
+ KFAC(I,J)=0
+ 120 CONTINUE
+ IF(MINT(44+I).EQ.1) THEN
+ KFAC(I,MINT(10+I))=1
+ ELSEIF(MINT(40+I).EQ.1.AND.MSTP(12).EQ.0) THEN
+ KFAC(I,MINT(10+I))=1
+ KFAC(I,22)=1
+ KFAC(I,24)=1
+ KFAC(I,-24)=1
+ ELSE
+ DO 130 J=-25,25
+ KFAC(I,J)=KFIN(I,J)
+ IF(IABS(J).GT.MSTP(58).AND.IABS(J).LE.10) KFAC(I,J)=0
+ IF(XSFX(I,J).LT.1D-10) KFAC(I,J)=0
+ 130 CONTINUE
+ ENDIF
+ 140 CONTINUE
+
+C...Lower and upper limit for fermion flavour loops
+ MMIN1=0
+ MMAX1=0
+ MMIN2=0
+ MMAX2=0
+ DO 150 J=-20,20
+ IF(KFAC(1,-J).EQ.1) MMIN1=-J
+ IF(KFAC(1,J).EQ.1) MMAX1=J
+ IF(KFAC(2,-J).EQ.1) MMIN2=-J
+ IF(KFAC(2,J).EQ.1) MMAX2=J
+ 150 CONTINUE
+ MMINA=MIN(MMIN1,MMIN2)
+ MMAXA=MAX(MMAX1,MMAX2)
+
+C...Common resonance mass and width combinations
+ SQMZ=PMAS(23,1)**2
+ SQMW=PMAS(24,1)**2
+ SQMH=PMAS(KFHIGG,1)**2
+ GMMZ=PMAS(23,1)*PMAS(23,2)
+ GMMW=PMAS(24,1)*PMAS(24,2)
+ GMMH=PMAS(KFHIGG,1)*PMAS(KFHIGG,2)
+C...MRENNA+++
+ ZWID=PMAS(23,2)
+ WWID=PMAS(24,2)
+ TANW=SQRT(XW/XW1)
+C...MRENNA---
+
+C...Phase space integral in tau
+ COMFAC=PARU(1)*PARU(5)/VINT(2)
+ IF(MINT(41).EQ.2.AND.MINT(42).EQ.2) COMFAC=COMFAC*FACK
+ IF((MINT(47).GE.2.OR.(ISTSB.GE.3.AND.ISTSB.LE.5)).AND.
+ &ISTSB.NE.9) THEN
+ ATAU1=LOG(TAUMAX/TAUMIN)
+ ATAU2=(TAUMAX-TAUMIN)/(TAUMAX*TAUMIN)
+ H1=COEF(ISUBSV,1)+(ATAU1/ATAU2)*COEF(ISUBSV,2)/TAU
+ IF(MINT(72).GE.1) THEN
+ TAUR1=VINT(73)
+ GAMR1=VINT(74)
+ ATAUD=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR1)/(TAUMAX+TAUR1))
+ ATAU3=ATAUD/TAUR1
+ IF(ATAUD.GT.1D-6) H1=H1+
+ & (ATAU1/ATAU3)*COEF(ISUBSV,3)/(TAU+TAUR1)
+ ATAUD=ATAN((TAUMAX-TAUR1)/GAMR1)-ATAN((TAUMIN-TAUR1)/GAMR1)
+ ATAU4=ATAUD/GAMR1
+ IF(ATAUD.GT.1D-6) H1=H1+
+ & (ATAU1/ATAU4)*COEF(ISUBSV,4)*TAU/((TAU-TAUR1)**2+GAMR1**2)
+ ENDIF
+ IF(MINT(72).EQ.2) THEN
+ TAUR2=VINT(75)
+ GAMR2=VINT(76)
+ ATAUD=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR2)/(TAUMAX+TAUR2))
+ ATAU5=ATAUD/TAUR2
+ IF(ATAUD.GT.1D-6) H1=H1+
+ & (ATAU1/ATAU5)*COEF(ISUBSV,5)/(TAU+TAUR2)
+ ATAUD=ATAN((TAUMAX-TAUR2)/GAMR2)-ATAN((TAUMIN-TAUR2)/GAMR2)
+ ATAU6=ATAUD/GAMR2
+ IF(ATAUD.GT.1D-6) H1=H1+
+ & (ATAU1/ATAU6)*COEF(ISUBSV,6)*TAU/((TAU-TAUR2)**2+GAMR2**2)
+ ENDIF
+ IF(MINT(47).EQ.5.AND.(ISTSB.LE.2.OR.ISTSB.GE.5)) THEN
+ ATAU7=LOG(MAX(2D-6,1D0-TAUMIN)/MAX(2D-6,1D0-TAUMAX))
+ IF(ATAU7.GT.1D-6) H1=H1+(ATAU1/ATAU7)*COEF(ISUBSV,7)*TAU/
+ & MAX(2D-6,1D0-TAU)
+ ENDIF
+ COMFAC=COMFAC*ATAU1/(TAU*H1)
+ ENDIF
+
+C...Phase space integral in y*
+ IF(MINT(47).GE.4.AND.ISTSB.NE.9) THEN
+ AYST0=YSTMAX-YSTMIN
+ IF(AYST0.LT.1D-6) THEN
+ COMFAC=0D0
+ ELSE
+ AYST1=0.5D0*(YSTMAX-YSTMIN)**2
+ AYST2=AYST1
+ AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
+ H2=(AYST0/AYST1)*COEF(ISUBSV,8)*(YST-YSTMIN)+
+ & (AYST0/AYST2)*COEF(ISUBSV,9)*(YSTMAX-YST)+
+ & (AYST0/AYST3)*COEF(ISUBSV,10)/COSH(YST)
+ IF(MINT(45).EQ.3) THEN
+ YST0=-0.5D0*LOG(TAUE)
+ AYST4=LOG(MAX(1D-6,EXP(YST0-YSTMIN)-1D0)/
+ & MAX(1D-6,EXP(YST0-YSTMAX)-1D0))
+ IF(AYST4.GT.1D-6) H2=H2+(AYST0/AYST4)*COEF(ISUBSV,11)/
+ & MAX(1D-6,1D0-EXP(YST-YST0))
+ ENDIF
+ IF(MINT(46).EQ.3) THEN
+ YST0=-0.5D0*LOG(TAUE)
+ AYST5=LOG(MAX(1D-6,EXP(YST0+YSTMAX)-1D0)/
+ & MAX(1D-6,EXP(YST0+YSTMIN)-1D0))
+ IF(AYST5.GT.1D-6) H2=H2+(AYST0/AYST5)*COEF(ISUBSV,12)/
+ & MAX(1D-6,1D0-EXP(-YST-YST0))
+ ENDIF
+ COMFAC=COMFAC*AYST0/H2
+ ENDIF
+ ENDIF
+
+C...2 -> 1 processes: reduction in angular part of phase space integral
+C...for case of decaying resonance
+ ACTH0=CTNMAX-CTNMIN+CTPMAX-CTPMIN
+ IF((ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5)) THEN
+ IF(MDCY(PYCOMP(KFPR(ISUBSV,1)),1).EQ.1) THEN
+ IF(KFPR(ISUB,1).EQ.25.OR.KFPR(ISUB,1).EQ.37.OR.
+ & KFPR(ISUB,1).EQ.39) THEN
+ COMFAC=COMFAC*0.5D0*ACTH0
+ ELSE
+ COMFAC=COMFAC*0.125D0*(3D0*ACTH0+CTNMAX**3-CTNMIN**3+
+ & CTPMAX**3-CTPMIN**3)
+ ENDIF
+ ENDIF
+
+C...2 -> 2 processes: angular part of phase space integral
+ ELSEIF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
+ ACTH1=LOG((MAX(RM34,RSQM-CTNMIN)*MAX(RM34,RSQM-CTPMIN))/
+ & (MAX(RM34,RSQM-CTNMAX)*MAX(RM34,RSQM-CTPMAX)))
+ ACTH2=LOG((MAX(RM34,RSQM+CTNMAX)*MAX(RM34,RSQM+CTPMAX))/
+ & (MAX(RM34,RSQM+CTNMIN)*MAX(RM34,RSQM+CTPMIN)))
+ ACTH3=1D0/MAX(RM34,RSQM-CTNMAX)-1D0/MAX(RM34,RSQM-CTNMIN)+
+ & 1D0/MAX(RM34,RSQM-CTPMAX)-1D0/MAX(RM34,RSQM-CTPMIN)
+ ACTH4=1D0/MAX(RM34,RSQM+CTNMIN)-1D0/MAX(RM34,RSQM+CTNMAX)+
+ & 1D0/MAX(RM34,RSQM+CTPMIN)-1D0/MAX(RM34,RSQM+CTPMAX)
+ H3=COEF(ISUBSV,13)+
+ & (ACTH0/ACTH1)*COEF(ISUBSV,14)/MAX(RM34,RSQM-CTH)+
+ & (ACTH0/ACTH2)*COEF(ISUBSV,15)/MAX(RM34,RSQM+CTH)+
+ & (ACTH0/ACTH3)*COEF(ISUBSV,16)/MAX(RM34,RSQM-CTH)**2+
+ & (ACTH0/ACTH4)*COEF(ISUBSV,17)/MAX(RM34,RSQM+CTH)**2
+ COMFAC=COMFAC*ACTH0*0.5D0*BE34/H3
+
+C...2 -> 2 processes: take into account final state Breit-Wigners
+ COMFAC=COMFAC*VINT(80)
+ ENDIF
+
+C...2 -> 3, 4 processes: phace space integral in tau'
+ IF(MINT(47).GE.2.AND.ISTSB.GE.3.AND.ISTSB.LE.5) THEN
+ ATAUP1=LOG(TAUPMX/TAUPMN)
+ ATAUP2=((1D0-TAU/TAUPMX)**4-(1D0-TAU/TAUPMN)**4)/(4D0*TAU)
+ H4=COEF(ISUBSV,18)+
+ & (ATAUP1/ATAUP2)*COEF(ISUBSV,19)*(1D0-TAU/TAUP)**3/TAUP
+ IF(MINT(47).EQ.5) THEN
+ ATAUP3=LOG(MAX(2D-6,1D0-TAUPMN)/MAX(2D-6,1D0-TAUPMX))
+ H4=H4+(ATAUP1/ATAUP3)*COEF(ISUBSV,20)*TAUP/MAX(2D-6,1D0-TAUP)
+ ENDIF
+ COMFAC=COMFAC*ATAUP1/H4
+ ENDIF
+
+C...2 -> 3, 4 processes: effective W/Z parton distributions
+ IF(ISTSB.EQ.3.OR.ISTSB.EQ.4) THEN
+ IF(1D0-TAU/TAUP.GT.1.D-4) THEN
+ FZW=(1D0+TAU/TAUP)*LOG(TAUP/TAU)-2D0*(1D0-TAU/TAUP)
+ ELSE
+ FZW=1D0/6D0*(1D0-TAU/TAUP)**3*TAU/TAUP
+ ENDIF
+ COMFAC=COMFAC*FZW
+ ENDIF
+
+C...2 -> 3 processes: phase space integrals for pT1, pT2, y3, mirror
+ IF(ISTSB.EQ.5) THEN
+ COMFAC=COMFAC*VINT(205)*VINT(210)*VINT(212)*VINT(214)/
+ & (128D0*PARU(1)**4*VINT(220))*(TAU**2/TAUP)
+ ENDIF
+
+C...2 -> 2 processes: optional dampening by pT^4/(pT0^2+pT^2)^2
+ IF(MSTP(85).EQ.1.AND.MOD(ISTSB,2).EQ.0) COMFAC=COMFAC*
+ &SQPTH**2/(PARP(82)**2+SQPTH)**2
+
+C...gamma + gamma: include factor 2 when different nature
+ IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.MINT(123).GE.4)
+ &COMFAC=2D0*COMFAC
+
+C...Phase space integral for low-pT and multiple interactions
+ IF(ISTSB.EQ.9) THEN
+ COMFAC=PARU(1)*PARU(5)*FACK*0.5D0*VINT(2)/SH2
+ ATAU1=LOG(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)
+ ATAU2=2D0*ATAN(1D0/XT2-1D0)/SQRT(XT2)
+ H1=COEF(ISUBSV,1)+(ATAU1/ATAU2)*COEF(ISUBSV,2)/SQRT(TAU)
+ COMFAC=COMFAC*ATAU1/H1
+ AYST0=YSTMAX-YSTMIN
+ AYST1=0.5D0*(YSTMAX-YSTMIN)**2
+ AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
+ H2=(AYST0/AYST1)*COEF(ISUBSV,8)*(YST-YSTMIN)+
+ & (AYST0/AYST1)*COEF(ISUBSV,9)*(YSTMAX-YST)+
+ & (AYST0/AYST3)*COEF(ISUBSV,10)/COSH(YST)
+ COMFAC=COMFAC*AYST0/H2
+ IF(MSTP(82).LE.1) COMFAC=COMFAC*XT2**2*(1D0/VINT(149)-1D0)
+C...For MSTP(82)>=2 an additional factor (xT2/(xT2+VINT(149))**2 is
+C...introduced to make cross-section finite for xT2 -> 0
+ IF(MSTP(82).GE.2) COMFAC=COMFAC*XT2**2/(VINT(149)*
+ & (1D0+VINT(149)))
+ ENDIF
+
+C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
+ IF((MSTP(46).GE.3.AND.MSTP(46).LE.6).AND.(ISUB.EQ.71.OR.ISUB.EQ.
+ &72.OR.ISUB.EQ.73.OR.ISUB.EQ.76.OR.ISUB.EQ.77)) THEN
+C...Calculate M_R and N_R functions for Higgs-like and QCD-like models
+ IF(MSTP(46).LE.4) THEN
+ HDTLH=LOG(PMAS(25,1)/PARP(44))
+ HDTMR=(4.5D0*PARU(1)/SQRT(3D0)-74D0/9D0)/8D0+HDTLH/12D0
+ HDTNR=-1D0/18D0+HDTLH/6D0
+ ELSE
+ HDTNM=0.125D0*(1D0/(288D0*PARU(1)**2)+(PARP(47)/PARP(45))**2)
+ HDTLQ=LOG(PARP(45)/PARP(44))
+ HDTMR=-(4D0*PARU(1))**2*0.5D0*HDTNM+HDTLQ/12D0
+ HDTNR=(4D0*PARU(1))**2*HDTNM+HDTLQ/6D0
+ ENDIF
+
+C...Calculate lowest and next-to-lowest order partial wave amplitudes
+ HDTV=1D0/(16D0*PARU(1)*PARP(47)**2)
+ A00L=SNGL(HDTV*SH)
+ A20L=-0.5*A00L
+ A11L=A00L/6.
+ HDTLS=LOG(SH/PARP(44)**2)
+ A004=SNGL((HDTV*SH)**2/(4D0*PARU(1)))*
+ & CMPLX(SNGL((176D0*HDTMR+112D0*HDTNR)/3D0+11D0/27D0-
+ & (50D0/9D0)*HDTLS),SNGL(4D0*PARU(1)))
+ A204=SNGL((HDTV*SH)**2/(4D0*PARU(1)))*
+ & CMPLX(SNGL(32D0*(HDTMR+2D0*HDTNR)/3D0+25D0/54D0-
+ & (20D0/9D0)*HDTLS),SNGL(PARU(1)))
+ A114=SNGL((HDTV*SH)**2/(6D0*PARU(1)))*
+ & CMPLX(SNGL(4D0*(-2D0*HDTMR+HDTNR)-1D0/18D0),SNGL(PARU(1)/6D0))
+
+C...Unitarize partial wave amplitudes with Pade or K-matrix method
+ IF(MSTP(46).EQ.3.OR.MSTP(46).EQ.5) THEN
+ A00U=A00L/(1.-A004/A00L)
+ A20U=A20L/(1.-A204/A20L)
+ A11U=A11L/(1.-A114/A11L)
+ ELSE
+ A00U=(A00L+REAL(A004))/(1.-CMPLX(0.,A00L+REAL(A004)))
+ A20U=(A20L+REAL(A204))/(1.-CMPLX(0.,A20L+REAL(A204)))
+ A11U=(A11L+REAL(A114))/(1.-CMPLX(0.,A11L+REAL(A114)))
+ ENDIF
+ ENDIF
+
+C...Supersymmetric processes - all of type 2 -> 2 :
+C...correct final-state Breit-Wigners from fixed to running width.
+ IF(ISUB.GE.200.AND.ISUB.LE.280.AND.MSTP(42).GT.0) THEN
+ DO 160 I=1,2
+ KFLW=KFPR(ISUBSV,I)
+ KCW=PYCOMP(KFLW)
+ IF(PMAS(KCW,2).LT.PARP(41)) GOTO 160
+ IF(I.EQ.1) SQMI=SQM3
+ IF(I.EQ.2) SQMI=SQM4
+ SQMS=PMAS(KCW,1)**2
+ GMMS=PMAS(KCW,1)*PMAS(KCW,2)
+ HBWS=GMMS/((SQMI-SQMS)**2+GMMS**2)
+ CALL PYWIDT(KFLW,SQMI,WDTP,WDTE)
+ GMMI=SQRT(SQMI)*WDTP(0)
+ HBWI=GMMI/((SQMI-SQMS)**2+GMMI**2)
+ COMFAC=COMFAC*(HBWI/HBWS)
+ 160 CONTINUE
+ ENDIF
+
+C...A: 2 -> 1, tree diagrams
+
+ 170 IF(ISUB.LE.10) THEN
+ IF(ISUB.EQ.1) THEN
+C...f + fbar -> gamma*/Z0
+ MINT(61)=2
+ CALL PYWIDT(23,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACZ=4D0*COMFAC*3D0
+ HP0=AEM/3D0*SH
+ HP1=AEM/3D0*XWC*SH
+ DO 180 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 180
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ HI0=HP0
+ IF(IABS(I).LE.10) HI0=HI0*FACA/3D0
+ HI1=HP1
+ IF(IABS(I).LE.10) HI1=HI1*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZ*(EI**2/SH2*HI0*HP0*VINT(111)+
+ & EI*VI*(1D0-SQMZ/SH)/((SH-SQMZ)**2+HS**2)*
+ & (HI0*HP1+HI1*HP0)*VINT(112)+(VI**2+AI**2)/
+ & ((SH-SQMZ)**2+HS**2)*HI1*HP1*VINT(114))
+ 180 CONTINUE
+
+ ELSEIF(ISUB.EQ.2) THEN
+C...f + fbar' -> W+/-
+ CALL PYWIDT(24,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMW)**2+HS**2)*3D0
+ HP=AEM/(24D0*XW)*SH
+ DO 200 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 200
+ IA=IABS(I)
+ DO 190 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 190
+ JA=IABS(J)
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 190
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 190
+ KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ HI=HP*2D0
+ IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))
+ SIGH(NCHN)=HI*FACBW*HF
+ 190 CONTINUE
+ 200 CONTINUE
+
+ ELSEIF(ISUB.EQ.3) THEN
+C...f + fbar -> h0 (or H0, or A0)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ HP=AEM/(8D0*XW)*SH/SQMW*SH
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ DO 210 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 210
+ IA=IABS(I)
+ RMQ=PMAS(IA,1)**2/SH
+ HI=HP*RMQ
+ IF(IA.LE.10) HI=HP*RMQ*FACA/3D0
+ IF(IA.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) HI=HI*
+ & (LOG(MAX(4D0,PARP(37)**2*RMQ*SH/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ IKFI=1
+ IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
+ IF(IA.GT.10) IKFI=3
+ HI=HI*PARU(150+10*IHIGG+IKFI)**2
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 210 CONTINUE
+
+ ELSEIF(ISUB.EQ.4) THEN
+C...gamma + W+/- -> W+/-
+
+ ELSEIF(ISUB.EQ.5) THEN
+C...Z0 + Z0 -> h0
+ CALL PYWIDT(25,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(25,1)).GT.PARP(48)*PMAS(25,2)) FACBW=0D0
+ HP=AEM/(8D0*XW)*SH/SQMW*SH
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ HI=HP/4D0
+ FACI=8D0/(PARU(1)**2*XW1)*(AEM*XWC)**2
+ DO 230 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 230
+ DO 220 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 220
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ EJ=KCHG(IABS(J),1)/3D0
+ AJ=SIGN(1D0,EJ)
+ VJ=AJ-4D0*EJ*XWV
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACI*(VI**2+AI**2)*(VJ**2+AJ**2)*HI*FACBW*HF
+ 220 CONTINUE
+ 230 CONTINUE
+
+ ELSEIF(ISUB.EQ.6) THEN
+C...Z0 + W+/- -> W+/-
+
+ ELSEIF(ISUB.EQ.7) THEN
+C...W+ + W- -> Z0
+
+ ELSEIF(ISUB.EQ.8) THEN
+C...W+ + W- -> h0
+ CALL PYWIDT(25,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(25,1)).GT.PARP(48)*PMAS(25,2)) FACBW=0D0
+ HP=AEM/(8D0*XW)*SH/SQMW*SH
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ HI=HP/2D0
+ FACI=1D0/(4D0*PARU(1)**2)*(AEM/XW)**2
+ DO 250 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 250
+ EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
+ DO 240 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 240
+ EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
+ IF(EI*EJ.GT.0D0) GOTO 240
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACI*VINT(180+I)*VINT(180+J)*HI*FACBW*HF
+ 240 CONTINUE
+ 250 CONTINUE
+
+C...B: 2 -> 2, tree diagrams
+
+ ELSEIF(ISUB.EQ.10) THEN
+C...f + f' -> f + f' (gamma/Z/W exchange)
+ FACGGF=COMFAC*AEM**2*2D0*(SH2+UH2)/TH2
+ FACGZF=COMFAC*AEM**2*XWC*4D0*SH2/(TH*(TH-SQMZ))
+ FACZZF=COMFAC*(AEM*XWC)**2*2D0*SH2/(TH-SQMZ)**2
+ FACWWF=COMFAC*(0.5D0*AEM/XW)**2*SH2/(TH-SQMW)**2
+ DO 270 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 270
+ IA=IABS(I)
+ DO 260 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 260
+ JA=IABS(J)
+C...Electroweak couplings
+ EI=KCHG(IA,1)*ISIGN(1,I)/3D0
+ AI=SIGN(1D0,KCHG(IA,1)+0.5D0)*ISIGN(1,I)
+ VI=AI-4D0*EI*XWV
+ EJ=KCHG(JA,1)*ISIGN(1,J)/3D0
+ AJ=SIGN(1D0,KCHG(JA,1)+0.5D0)*ISIGN(1,J)
+ VJ=AJ-4D0*EJ*XWV
+ EPSIJ=ISIGN(1,I*J)
+C...gamma/Z exchange, only gamma exchange, or only Z exchange
+ IF(MSTP(21).GE.1.AND.MSTP(21).LE.4) THEN
+ IF(MSTP(21).EQ.1.OR.MSTP(21).EQ.4) THEN
+ FACNCF=FACGGF*EI**2*EJ**2+FACGZF*EI*EJ*
+ & (VI*VJ*(1D0+UH2/SH2)+AI*AJ*EPSIJ*(1D0-UH2/SH2))+
+ & FACZZF*((VI**2+AI**2)*(VJ**2+AJ**2)*(1D0+UH2/SH2)+
+ & 4D0*VI*VJ*AI*AJ*EPSIJ*(1D0-UH2/SH2))
+ ELSEIF(MSTP(21).EQ.2) THEN
+ FACNCF=FACGGF*EI**2*EJ**2
+ ELSE
+ FACNCF=FACZZF*((VI**2+AI**2)*(VJ**2+AJ**2)*
+ & (1D0+UH2/SH2)+4D0*VI*VJ*AI*AJ*EPSIJ*(1D0-UH2/SH2))
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACNCF
+ ENDIF
+C...W exchange
+ IF((MSTP(21).EQ.1.OR.MSTP(21).EQ.5).AND.AI*AJ.LT.0D0) THEN
+ FACCCF=FACWWF*VINT(180+I)*VINT(180+J)
+ IF(EPSIJ.LT.0D0) FACCCF=FACCCF*UH2/SH2
+ IF(IA.GT.10.AND.MOD(IA,2).EQ.0) FACCCF=2D0*FACCCF
+ IF(JA.GT.10.AND.MOD(JA,2).EQ.0) FACCCF=2D0*FACCCF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACCCF
+ ENDIF
+ 260 CONTINUE
+ 270 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.20) THEN
+ IF(ISUB.EQ.11) THEN
+C...f + f' -> f + f' (g exchange)
+ FACQQ1=COMFAC*AS**2*4D0/9D0*(SH2+UH2)/TH2
+ FACQQB=COMFAC*AS**2*4D0/9D0*((SH2+UH2)/TH2*FACA-
+ & MSTP(34)*2D0/3D0*UH2/(SH*TH))
+ FACQQ2=COMFAC*AS**2*4D0/9D0*((SH2+TH2)/UH2-
+ & MSTP(34)*2D0/3D0*SH2/(TH*UH))
+ IF(MSTP(5).GE.1) THEN
+C...Modifications from contact interactions (compositeness)
+ FACCI1=FACQQ1+COMFAC*(SH2/PARU(155)**4)
+ FACCIB=FACQQB+COMFAC*(8D0/9D0)*(AS*PARU(156)/PARU(155)**2)*
+ & (UH2/TH+UH2/SH)+COMFAC*(5D0/3D0)*(UH2/PARU(155)**4)
+ FACCI2=FACQQ2+COMFAC*(8D0/9D0)*(AS*PARU(156)/PARU(155)**2)*
+ & (SH2/TH+SH2/UH)+COMFAC*(5D0/3D0)*(SH2/PARU(155)**4)
+ FACCI3=FACQQ1+COMFAC*(UH2/PARU(155)**4)
+ ENDIF
+ DO 290 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 290
+ DO 280 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 280
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.(IA.GE.3.OR.
+ & JA.GE.3))) THEN
+ SIGH(NCHN)=FACQQ1
+ IF(I.EQ.-J) SIGH(NCHN)=FACQQB
+ ELSE
+ SIGH(NCHN)=FACCI1
+ IF(I*J.LT.0) SIGH(NCHN)=FACCI3
+ IF(I.EQ.-J) SIGH(NCHN)=FACCIB
+ ENDIF
+ IF(I.EQ.J) THEN
+ SIGH(NCHN)=0.5D0*SIGH(NCHN)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.IA.GE.3)) THEN
+ SIGH(NCHN)=0.5D0*FACQQ2
+ ELSE
+ SIGH(NCHN)=0.5D0*FACCI2
+ ENDIF
+ ENDIF
+ 280 CONTINUE
+ 290 CONTINUE
+
+ ELSEIF(ISUB.EQ.12) THEN
+C...f + fbar -> f' + fbar' (q + qbar -> q' + qbar' only)
+ CALL PYWIDT(21,SH,WDTP,WDTE)
+ FACQQB=COMFAC*AS**2*4D0/9D0*(TH2+UH2)/SH2*
+ & (WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ IF(MSTP(5).EQ.1) THEN
+C...Modifications from contact interactions (compositeness)
+ FACCIB=FACQQB
+ DO 300 I=1,2
+ FACCIB=FACCIB+COMFAC*(UH2/PARU(155)**4)*(WDTE(I,1)+
+ & WDTE(I,2)+WDTE(I,4))
+ 300 CONTINUE
+ ELSEIF(MSTP(5).GE.2) THEN
+ FACCIB=FACQQB+COMFAC*(UH2/PARU(155)**4)*
+ & (WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ ENDIF
+ DO 310 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 310
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.IABS(I).GE.3)) THEN
+ SIGH(NCHN)=FACQQB
+ ELSE
+ SIGH(NCHN)=FACCIB
+ ENDIF
+ 310 CONTINUE
+
+ ELSEIF(ISUB.EQ.13) THEN
+C...f + fbar -> g + g (q + qbar -> g + g only)
+ FACGG1=COMFAC*AS**2*32D0/27D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
+ & UH2/SH2)
+ FACGG2=COMFAC*AS**2*32D0/27D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
+ & TH2/SH2)
+ DO 320 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 320
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=0.5D0*FACGG1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=0.5D0*FACGG2
+ 320 CONTINUE
+
+ ELSEIF(ISUB.EQ.14) THEN
+C...f + fbar -> g + gamma (q + qbar -> g + gamma only)
+ FACGG=COMFAC*AS*AEM*8D0/9D0*(TH2+UH2)/(TH*UH)
+ DO 330 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 330
+ EI=KCHG(IABS(I),1)/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGG*EI**2
+ 330 CONTINUE
+
+ ELSEIF(ISUB.EQ.15) THEN
+C...f + fbar -> g + (gamma*/Z0) (q + qbar -> g + (gamma*/Z0) only)
+ FACZG=COMFAC*AS*AEM*(8D0/9D0)*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
+C...gamma, gamma/Z interference and Z couplings to final fermion pairs
+ HFGG=0D0
+ HFGZ=0D0
+ HFZZ=0D0
+ RADC4=1D0+PYALPS(SQM4)/PARU(1)
+ DO 340 I=1,MIN(16,MDCY(23,3))
+ IDC=I+MDCY(23,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 340
+ IMDM=0
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
+ & IMDM=1
+ IF(I.LE.8) THEN
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ELSEIF(I.LE.16) THEN
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ENDIF
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
+ IF(4D0*RM1.LT.1D0) THEN
+ FCOF=1D0
+ IF(I.LE.8) FCOF=3D0*RADC4
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(IMDM.EQ.1) THEN
+ HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
+ & AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ ENDIF
+ 340 CONTINUE
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
+ MINT(15)=1
+ MINT(61)=1
+ CALL PYWIDT(23,SQM4,WDTP,WDTE)
+ HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
+ HFGG=HFGG*HFAEM*VINT(111)/SQM4
+ HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
+ HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
+C...Loop over flavours; consider full gamma/Z structure
+ DO 350 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 350
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZG*(EI**2*HFGG+EI*VI*HFGZ+
+ & (VI**2+AI**2)*HFZZ)/HBW4
+ 350 CONTINUE
+
+ ELSEIF(ISUB.EQ.16) THEN
+C...f + fbar' -> g + W+/- (q + qbar' -> g + W+/- only)
+ FACWG=COMFAC*AS*AEM/XW*2D0/9D0*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
+ CALL PYWIDT(24,SQM4,WDTP,WDTE)
+ GMMWC=SQRT(SQM4)*WDTP(0)
+ HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
+ FACWG=FACWG*HBW4C/HBW4
+ DO 370 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 370
+ DO 360 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 360
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 360
+ KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
+ FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWG*FCKM*WIDSC
+ 360 CONTINUE
+ 370 CONTINUE
+
+ ELSEIF(ISUB.EQ.17) THEN
+C...f + fbar -> g + h0 (q + qbar -> g + h0 only)
+
+ ELSEIF(ISUB.EQ.18) THEN
+C...f + fbar -> gamma + gamma
+ FACGG=COMFAC*AEM**2*2D0*(TH2+UH2)/(TH*UH)
+ DO 380 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 380
+ EI=KCHG(IABS(I),1)/3D0
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=0.5D0*FACGG*FCOI*EI**4
+ 380 CONTINUE
+
+ ELSEIF(ISUB.EQ.19) THEN
+C...f + fbar -> gamma + (gamma*/Z0)
+ FACGZ=COMFAC*2D0*AEM**2*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
+C...gamma, gamma/Z interference and Z couplings to final fermion pairs
+ HFGG=0D0
+ HFGZ=0D0
+ HFZZ=0D0
+ RADC4=1D0+PYALPS(SQM4)/PARU(1)
+ DO 390 I=1,MIN(16,MDCY(23,3))
+ IDC=I+MDCY(23,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 390
+ IMDM=0
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
+ & IMDM=1
+ IF(I.LE.8) THEN
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ELSEIF(I.LE.16) THEN
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ENDIF
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
+ IF(4D0*RM1.LT.1D0) THEN
+ FCOF=1D0
+ IF(I.LE.8) FCOF=3D0*RADC4
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(IMDM.EQ.1) THEN
+ HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
+ & AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ ENDIF
+ 390 CONTINUE
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
+ MINT(15)=1
+ MINT(61)=1
+ CALL PYWIDT(23,SQM4,WDTP,WDTE)
+ HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
+ HFGG=HFGG*HFAEM*VINT(111)/SQM4
+ HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
+ HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
+C...Loop over flavours; consider full gamma/Z structure
+ DO 400 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 400
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGZ*FCOI*EI**2*(EI**2*HFGG+EI*VI*HFGZ+
+ & (VI**2+AI**2)*HFZZ)/HBW4
+ 400 CONTINUE
+
+ ELSEIF(ISUB.EQ.20) THEN
+C...f + fbar' -> gamma + W+/-
+ FACGW=COMFAC*0.5D0*AEM**2/XW
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
+ CALL PYWIDT(24,SQM4,WDTP,WDTE)
+ GMMWC=SQRT(SQM4)*WDTP(0)
+ HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
+ FACGW=FACGW*HBW4C/HBW4
+C...Anomalous couplings
+ TERM1=(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
+ TERM2=0D0
+ TERM3=0D0
+ IF(MSTP(5).GE.1) THEN
+ TERM2=PARU(153)*(TH-UH)/(TH+UH)
+ TERM3=0.5D0*PARU(153)**2*(TH*UH+(TH2+UH2)*SH/
+ & (4D0*SQMW))/(TH+UH)**2
+ ENDIF
+ DO 420 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 420
+ DO 410 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 410
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 410
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 410
+ KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
+ IF(IA.LE.10) THEN
+ FACWR=UH/(TH+UH)-1D0/3D0
+ FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ FCOI=FACA/3D0
+ ELSE
+ FACWR=-TH/(TH+UH)
+ FCKM=1D0
+ FCOI=1D0
+ ENDIF
+ FACWK=TERM1*FACWR**2+TERM2*FACWR+TERM3
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGW*FACWK*FCOI*FCKM*WIDSC
+ 410 CONTINUE
+ 420 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.30) THEN
+ IF(ISUB.EQ.21) THEN
+C...f + fbar -> gamma + h0
+
+ ELSEIF(ISUB.EQ.22) THEN
+C...f + fbar -> (gamma*/Z0) + (gamma*/Z0)
+C...Kinematics dependence
+ FACZZ=COMFAC*AEM**2*((TH2+UH2+2D0*(SQM3+SQM4)*SH)/(TH*UH)-
+ & SQM3*SQM4*(1D0/TH2+1D0/UH2))
+C...gamma, gamma/Z interference and Z couplings to final fermion pairs
+ DO 440 I=1,6
+ DO 430 J=1,3
+ HGZ(I,J)=0D0
+ 430 CONTINUE
+ 440 CONTINUE
+ RADC3=1D0+PYALPS(SQM3)/PARU(1)
+ RADC4=1D0+PYALPS(SQM4)/PARU(1)
+ DO 450 I=1,MIN(16,MDCY(23,3))
+ IDC=I+MDCY(23,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 450
+ IMDM=0
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2) IMDM=1
+ IF(MDME(IDC,1).EQ.4.OR.MDME(IDC,1).EQ.5) IMDM=MDME(IDC,1)-2
+ IF(I.LE.8) THEN
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ELSEIF(I.LE.16) THEN
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ENDIF
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM3
+ IF(4D0*RM1.LT.1D0) THEN
+ FCOF=1D0
+ IF(I.LE.8) FCOF=3D0*RADC3
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(IMDM.GE.1) THEN
+ HGZ(1,IMDM)=HGZ(1,IMDM)+FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ HGZ(2,IMDM)=HGZ(2,IMDM)+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ HGZ(3,IMDM)=HGZ(3,IMDM)+FCOF*(VF**2*(1D0+2D0*RM1)+
+ & AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ ENDIF
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
+ IF(4D0*RM1.LT.1D0) THEN
+ FCOF=1D0
+ IF(I.LE.8) FCOF=3D0*RADC4
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(IMDM.GE.1) THEN
+ HGZ(4,IMDM)=HGZ(4,IMDM)+FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ HGZ(5,IMDM)=HGZ(5,IMDM)+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ HGZ(6,IMDM)=HGZ(6,IMDM)+FCOF*(VF**2*(1D0+2D0*RM1)+
+ & AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ ENDIF
+ 450 CONTINUE
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW3=(1D0/PARU(1))*GMMZ/((SQM3-SQMZ)**2+GMMZ**2)
+ HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
+ MINT(15)=1
+ MINT(61)=1
+ CALL PYWIDT(23,SQM3,WDTP,WDTE)
+ HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
+ DO 460 J=1,3
+ HGZ(1,J)=HGZ(1,J)*HFAEM*VINT(111)/SQM3
+ HGZ(2,J)=HGZ(2,J)*HFAEM*VINT(112)/SQM3
+ HGZ(3,J)=HGZ(3,J)*HFAEM*VINT(114)/SQM3
+ 460 CONTINUE
+ MINT(61)=1
+ CALL PYWIDT(23,SQM4,WDTP,WDTE)
+ HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
+ DO 470 J=1,3
+ HGZ(4,J)=HGZ(4,J)*HFAEM*VINT(111)/SQM4
+ HGZ(5,J)=HGZ(5,J)*HFAEM*VINT(112)/SQM4
+ HGZ(6,J)=HGZ(6,J)*HFAEM*VINT(114)/SQM4
+ 470 CONTINUE
+C...Loop over flavours; separate left- and right-handed couplings
+ DO 490 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 490
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ VALI=VI-AI
+ VARI=VI+AI
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ DO 480 J=1,3
+ HL3(J)=EI**2*HGZ(1,J)+EI*VALI*HGZ(2,J)+VALI**2*HGZ(3,J)
+ HR3(J)=EI**2*HGZ(1,J)+EI*VARI*HGZ(2,J)+VARI**2*HGZ(3,J)
+ HL4(J)=EI**2*HGZ(4,J)+EI*VALI*HGZ(5,J)+VALI**2*HGZ(6,J)
+ HR4(J)=EI**2*HGZ(4,J)+EI*VARI*HGZ(5,J)+VARI**2*HGZ(6,J)
+ 480 CONTINUE
+ FACLR=HL3(1)*HL4(1)+HL3(1)*(HL4(2)+HL4(3))+
+ & HL4(1)*(HL3(2)+HL3(3))+HL3(2)*HL4(3)+HL4(2)*HL3(3)+
+ & HR3(1)*HR4(1)+HR3(1)*(HR4(2)+HR4(3))+
+ & HR4(1)*(HR3(2)+HR3(3))+HR3(2)*HR4(3)+HR4(2)*HR3(3)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=0.5D0*FACZZ*FCOI*FACLR/(HBW3*HBW4)
+ 490 CONTINUE
+
+ ELSEIF(ISUB.EQ.23) THEN
+C...f + fbar' -> Z0 + W+/-
+ FACZW=COMFAC*0.5D0*(AEM/XW)**2
+ FACZW=FACZW*WIDS(23,2)
+ THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
+ FACBW=1D0/((SH-SQMW)**2+GMMW**2)
+ DO 510 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 510
+ DO 500 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 500
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 500
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 500
+ KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ EI=KCHG(IA,1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ EJ=KCHG(JA,1)/3D0
+ AJ=SIGN(1D0,EJ+0.1D0)
+ VJ=AJ-4D0*EJ*XWV
+ IF(VI+AI.GT.0) THEN
+ VISAV=VI
+ AISAV=AI
+ VI=VJ
+ AI=AJ
+ VJ=VISAV
+ AJ=AISAV
+ ENDIF
+ FCKM=1D0
+ IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ FCOI=1D0
+ IF(IA.LE.10) FCOI=FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZW*FCOI*FCKM*(FACBW*((9D0-8D0*XW)/4D0*THUH+
+ & (8D0*XW-6D0)/4D0*SH*(SQM3+SQM4))+(THUH-SH*(SQM3+SQM4))*
+ & (SH-SQMW)*FACBW*0.5D0*((VJ+AJ)/TH-(VI+AI)/UH)+
+ & THUH/(16D0*XW1)*((VJ+AJ)**2/TH2+(VI+AI)**2/UH2)+
+ & SH*(SQM3+SQM4)/(8D0*XW1)*(VI+AI)*(VJ+AJ)/(TH*UH))*
+ & WIDS(24,(5-KCHW)/2)
+ 500 CONTINUE
+ 510 CONTINUE
+
+ ELSEIF(ISUB.EQ.24) THEN
+C...f + fbar -> Z0 + h0 (or H0, or A0)
+ THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
+ FACHZ=COMFAC*8D0*(AEM*XWC)**2*
+ & (THUH+2D0*SH*SQM3)/((SH-SQMZ)**2+GMMZ**2)
+ FACHZ=FACHZ*WIDS(23,2)*WIDS(KFHIGG,2)
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACHZ=FACHZ*
+ & PARU(154+10*IHIGG)**2
+ DO 520 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 520
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACHZ*FCOI*(VI**2+AI**2)
+ 520 CONTINUE
+
+ ELSEIF(ISUB.EQ.25) THEN
+C...f + fbar -> W+ + W-
+C...Propagators: Z0, W+- as simulated in PYOFSH and as desired
+ CALL PYWIDT(23,SH,WDTP,WDTE)
+ GMMZC=SHR*WDTP(0)
+ HBWZC=SH**2/((SH-SQMZ)**2+GMMZC**2)
+ HBW3=GMMW/((SQM3-SQMW)**2+GMMW**2)
+ CALL PYWIDT(24,SQM3,WDTP,WDTE)
+ GMMW3=SQRT(SQM3)*WDTP(0)
+ HBW3C=GMMW3/((SQM3-SQMW)**2+GMMW3**2)
+ HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
+ CALL PYWIDT(24,SQM4,WDTP,WDTE)
+ GMMW4=SQRT(SQM4)*WDTP(0)
+ HBW4C=GMMW4/((SQM4-SQMW)**2+GMMW4**2)
+C...Kinematical functions
+ THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
+ THUH34=(2D0*SH*(SQM3+SQM4)+THUH)/(SQM3*SQM4)
+ GS=(((SH-SQM3-SQM4)**2-4D0*SQM3*SQM4)*THUH34+12D0*THUH)/SH2
+ GT=THUH34+4D0*THUH/TH2
+ GST=((SH-SQM3-SQM4)*THUH34+4D0*(SH*(SQM3+SQM4)-THUH)/TH)/SH
+ GU=THUH34+4D0*THUH/UH2
+ GSU=((SH-SQM3-SQM4)*THUH34+4D0*(SH*(SQM3+SQM4)-THUH)/UH)/SH
+C...Common factors and couplings
+ FACWW=COMFAC*(HBW3C/HBW3)*(HBW4C/HBW4)
+ FACWW=FACWW*WIDS(24,1)
+ CGG=AEM**2/2D0
+ CGZ=AEM**2/(4D0*XW)*HBWZC*(1D0-SQMZ/SH)
+ CZZ=AEM**2/(32D0*XW**2)*HBWZC
+ CNG=AEM**2/(4D0*XW)
+ CNZ=AEM**2/(16D0*XW**2)*HBWZC*(1D0-SQMZ/SH)
+ CNN=AEM**2/(16D0*XW**2)
+C...Coulomb factor for W+W- pair
+ IF(MSTP(40).GE.1.AND.MSTP(40).LE.3) THEN
+ COULE=(SH-4D0*SQMW)/(4D0*PMAS(24,1))
+ COULP=MAX(1D-10,0.5D0*BE34*SQRT(SH))
+ IF(COULE.LT.100D0*PMAS(24,2)) THEN
+ COULP1=SQRT(0.5D0*PMAS(24,1)*(SQRT(COULE**2+
+ & PMAS(24,2)**2)-COULE))
+ ELSE
+ COULP1=SQRT(0.5D0*PMAS(24,1)*(0.5D0*PMAS(24,2)**2/COULE))
+ ENDIF
+ IF(COULE.GT.-100D0*PMAS(24,2)) THEN
+ COULP2=SQRT(0.5D0*PMAS(24,1)*(SQRT(COULE**2+
+ & PMAS(24,2)**2)+COULE))
+ ELSE
+ COULP2=SQRT(0.5D0*PMAS(24,1)*(0.5D0*PMAS(24,2)**2/
+ & ABS(COULE)))
+ ENDIF
+ IF(MSTP(40).EQ.1) THEN
+ COULDC=PARU(1)-2D0*ATAN((COULP1**2+COULP2**2-COULP**2)/
+ & MAX(1D-10,2D0*COULP*COULP1))
+ FACCOU=1D0+0.5D0*PARU(101)*COULDC/MAX(1D-5,BE34)
+ ELSEIF(MSTP(40).EQ.2) THEN
+ COULCK=CMPLX(SNGL(COULP1),SNGL(COULP2))
+ COULCP=CMPLX(0.,SNGL(COULP))
+ COULCD=(COULCK+COULCP)/(COULCK-COULCP)
+ COULCR=1.+SNGL(PARU(101)*SQRT(SH))/(4.*COULCP)*LOG(COULCD)
+ COULCS=CMPLX(0.,0.)
+ NSTP=100
+ DO 530 ISTP=1,NSTP
+ COULXX=(ISTP-0.5)/NSTP
+ COULCS=COULCS+(1./COULXX)*LOG((1.+COULXX*COULCD)/
+ & (1.+COULXX/COULCD))
+ 530 CONTINUE
+ COULCR=COULCR+SNGL(PARU(101)**2*SH)/(16.*COULCP*COULCK)*
+ & (COULCS/NSTP)
+ FACCOU=ABS(COULCR)**2
+ ELSEIF(MSTP(40).EQ.3) THEN
+ COULDC=PARU(1)-2D0*(1D0-BE34)**2*ATAN((COULP1**2+
+ & COULP2**2-COULP**2)/MAX(1D-10,2D0*COULP*COULP1))
+ FACCOU=1D0+0.5D0*PARU(101)*COULDC/MAX(1D-5,BE34)
+ ENDIF
+ ELSEIF(MSTP(40).EQ.4) THEN
+ FACCOU=1D0+0.5D0*PARU(101)*PARU(1)/MAX(1D-5,BE34)
+ ELSE
+ FACCOU=1D0
+ ENDIF
+ VINT(95)=FACCOU
+ FACWW=FACWW*FACCOU
+C...Loop over allowed flavours
+ DO 540 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 540
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ IF(AI.LT.0D0) THEN
+ DSIGWW=(CGG*EI**2+CGZ*VI*EI+CZZ*(VI**2+AI**2))*GS+
+ & (CNG*EI+CNZ*(VI+AI))*GST+CNN*GT
+ ELSE
+ DSIGWW=(CGG*EI**2+CGZ*VI*EI+CZZ*(VI**2+AI**2))*GS-
+ & (CNG*EI+CNZ*(VI+AI))*GSU+CNN*GU
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWW*FCOI*DSIGWW
+ 540 CONTINUE
+
+ ELSEIF(ISUB.EQ.26) THEN
+C...f + fbar' -> W+/- + h0 (or H0, or A0)
+ THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
+ FACHW=COMFAC*0.125D0*(AEM/XW)**2*(THUH+2D0*SH*SQM3)/
+ & ((SH-SQMW)**2+GMMW**2)
+ FACHW=FACHW*WIDS(KFHIGG,2)
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACHW=FACHW*
+ & PARU(155+10*IHIGG)**2
+ DO 560 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 560
+ DO 550 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(1,J).EQ.0) GOTO 550
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 550
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 550
+ KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ FCKM=1D0
+ IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ FCOI=1D0
+ IF(IA.LE.10) FCOI=FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACHW*FCOI*FCKM*WIDS(24,(5-KCHW)/2)
+ 550 CONTINUE
+ 560 CONTINUE
+
+ ELSEIF(ISUB.EQ.27) THEN
+C...f + fbar -> h0 + h0
+
+ ELSEIF(ISUB.EQ.28) THEN
+C...f + g -> f + g (q + g -> q + g only)
+ FACQG1=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*UH2/TH2-
+ & UH/SH)*FACA
+ FACQG2=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*SH2/TH2-
+ & SH/UH)
+ DO 580 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.10) GOTO 580
+ DO 570 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 570
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 570
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQG1
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQG2
+ 570 CONTINUE
+ 580 CONTINUE
+
+ ELSEIF(ISUB.EQ.29) THEN
+C...f + g -> f + gamma (q + g -> q + gamma only)
+ FGQ=COMFAC*FACA*AS*AEM*1D0/3D0*(SH2+UH2)/(-SH*UH)
+ DO 600 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 600
+ EI=KCHG(IABS(I),1)/3D0
+ FACGQ=FGQ*EI**2
+ DO 590 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 590
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 590
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGQ
+ 590 CONTINUE
+ 600 CONTINUE
+
+ ELSEIF(ISUB.EQ.30) THEN
+C...f + g -> f + (gamma*/Z0) (q + g -> q + (gamma*/Z0) only)
+ FZQ=COMFAC*FACA*AS*AEM*(1D0/3D0)*(SH2+UH2+2D0*SQM4*TH)/
+ & (-SH*UH)
+C...gamma, gamma/Z interference and Z couplings to final fermion pairs
+ HFGG=0D0
+ HFGZ=0D0
+ HFZZ=0D0
+ RADC4=1D0+PYALPS(SQM4)/PARU(1)
+ DO 610 I=1,MIN(16,MDCY(23,3))
+ IDC=I+MDCY(23,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 610
+ IMDM=0
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
+ & IMDM=1
+ IF(I.LE.8) THEN
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ELSEIF(I.LE.16) THEN
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ENDIF
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
+ IF(4D0*RM1.LT.1D0) THEN
+ FCOF=1D0
+ IF(I.LE.8) FCOF=3D0*RADC4
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(IMDM.EQ.1) THEN
+ HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
+ & AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ ENDIF
+ 610 CONTINUE
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
+ MINT(15)=1
+ MINT(61)=1
+ CALL PYWIDT(23,SQM4,WDTP,WDTE)
+ HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
+ HFGG=HFGG*HFAEM*VINT(111)/SQM4
+ HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
+ HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
+C...Loop over flavours; consider full gamma/Z structure
+ DO 630 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 630
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ FACZQ=FZQ*(EI**2*HFGG+EI*VI*HFGZ+
+ & (VI**2+AI**2)*HFZZ)/HBW4
+ DO 620 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 620
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 620
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZQ
+ 620 CONTINUE
+ 630 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.40) THEN
+ IF(ISUB.EQ.31) THEN
+C...f + g -> f' + W+/- (q + g -> q' + W+/- only)
+ FACWQ=COMFAC*FACA*AS*AEM/XW*1D0/12D0*
+ & (SH2+UH2+2D0*SQM4*TH)/(-SH*UH)
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
+ CALL PYWIDT(24,SQM4,WDTP,WDTE)
+ GMMWC=SQRT(SQM4)*WDTP(0)
+ HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
+ FACWQ=FACWQ*HBW4C/HBW4
+ DO 650 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 650
+ IA=IABS(I)
+ KCHW=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
+ WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
+ DO 640 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 640
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 640
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWQ*VINT(180+I)*WIDSC
+ 640 CONTINUE
+ 650 CONTINUE
+
+ ELSEIF(ISUB.EQ.32) THEN
+C...f + g -> f + h0 (q + g -> q + h0 only)
+
+ ELSEIF(ISUB.EQ.33) THEN
+C...f + gamma -> f + g (q + gamma -> q + g only)
+ FGQ=COMFAC*AS*AEM*8D0/3D0*(SH2+UH2)/(-SH*UH)
+ DO 670 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 670
+ EI=KCHG(IABS(I),1)/3D0
+ FACGQ=FGQ*EI**2
+ DO 660 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 660
+ IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 660
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGQ
+ 660 CONTINUE
+ 670 CONTINUE
+
+ ELSEIF(ISUB.EQ.34) THEN
+C...f + gamma -> f + gamma
+ FGQ=COMFAC*AEM**2*2D0*(SH2+UH2)/(-SH*UH)
+ DO 690 I=MMINA,MMAXA
+ IF(I.EQ.0) GOTO 690
+ EI=KCHG(IABS(I),1)/3D0
+ FACGQ=FGQ*EI**4
+ DO 680 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 680
+ IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 680
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGQ
+ 680 CONTINUE
+ 690 CONTINUE
+
+ ELSEIF(ISUB.EQ.35) THEN
+C...f + gamma -> f + (gamma*/Z0)
+ FZQN=COMFAC*2D0*AEM**2*(SH2+UH2+2D0*SQM4*TH)
+ FZQD=SQPTH*SQM4-SH*UH
+C...gamma, gamma/Z interference and Z couplings to final fermion pairs
+ HFGG=0D0
+ HFGZ=0D0
+ HFZZ=0D0
+ RADC4=1D0+PYALPS(SQM4)/PARU(1)
+ DO 700 I=1,MIN(16,MDCY(23,3))
+ IDC=I+MDCY(23,2)-1
+ IF(MDME(IDC,1).LT.0) GOTO 700
+ IMDM=0
+ IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
+ & IMDM=1
+ IF(I.LE.8) THEN
+ EF=KCHG(I,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ELSEIF(I.LE.16) THEN
+ EF=KCHG(I+2,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ ENDIF
+ RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
+ IF(4D0*RM1.LT.1D0) THEN
+ FCOF=1D0
+ IF(I.LE.8) FCOF=3D0*RADC4
+ BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
+ IF(IMDM.EQ.1) THEN
+ HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
+ HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
+ HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
+ & AF**2*(1D0-4D0*RM1))*BE34
+ ENDIF
+ ENDIF
+ 700 CONTINUE
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
+ MINT(15)=1
+ MINT(61)=1
+ CALL PYWIDT(23,SQM4,WDTP,WDTE)
+ HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
+ HFGG=HFGG*HFAEM*VINT(111)/SQM4
+ HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
+ HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
+C...Loop over flavours; consider full gamma/Z structure
+ DO 720 I=MMINA,MMAXA
+ IF(I.EQ.0) GOTO 720
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ FACZQ=EI**2*(EI**2*HFGG+EI*VI*HFGZ+
+ & (VI**2+AI**2)*HFZZ)/HBW4
+ DO 710 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 710
+ IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 710
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZQ*FZQN/MAX(PMAS(IABS(I),1)**2*SQM4,FZQD)
+ 710 CONTINUE
+ 720 CONTINUE
+
+ ELSEIF(ISUB.EQ.36) THEN
+C...f + gamma -> f' + W+/-
+ FWQ=COMFAC*AEM**2/(2D0*XW)*
+ & (SH2+UH2+2D0*SQM4*TH)/(SQPTH*SQM4-SH*UH)
+C...Propagators: as simulated in PYOFSH and as desired
+ HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
+ CALL PYWIDT(24,SQM4,WDTP,WDTE)
+ GMMWC=SQRT(SQM4)*WDTP(0)
+ HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
+ FWQ=FWQ*HBW4C/HBW4
+ DO 740 I=MMINA,MMAXA
+ IF(I.EQ.0) GOTO 740
+ IA=IABS(I)
+ EIA=ABS(KCHG(IABS(I),1)/3D0)
+ FACWQ=FWQ*(EIA-SH/(SH+UH))**2
+ KCHW=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
+ WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
+ DO 730 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 730
+ IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 730
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWQ*VINT(180+I)*WIDSC
+ 730 CONTINUE
+ 740 CONTINUE
+
+ ELSEIF(ISUB.EQ.37) THEN
+C...f + gamma -> f + h0
+
+ ELSEIF(ISUB.EQ.38) THEN
+C...f + Z0 -> f + g (q + Z0 -> q + g only)
+
+ ELSEIF(ISUB.EQ.39) THEN
+C...f + Z0 -> f + gamma
+
+ ELSEIF(ISUB.EQ.40) THEN
+C...f + Z0 -> f + Z0
+ ENDIF
+
+ ELSEIF(ISUB.LE.50) THEN
+ IF(ISUB.EQ.41) THEN
+C...f + Z0 -> f' + W+/-
+
+ ELSEIF(ISUB.EQ.42) THEN
+C...f + Z0 -> f + h0
+
+ ELSEIF(ISUB.EQ.43) THEN
+C...f + W+/- -> f' + g (q + W+/- -> q' + g only)
+
+ ELSEIF(ISUB.EQ.44) THEN
+C...f + W+/- -> f' + gamma
+
+ ELSEIF(ISUB.EQ.45) THEN
+C...f + W+/- -> f' + Z0
+
+ ELSEIF(ISUB.EQ.46) THEN
+C...f + W+/- -> f' + W+/-
+
+ ELSEIF(ISUB.EQ.47) THEN
+C...f + W+/- -> f' + h0
+
+ ELSEIF(ISUB.EQ.48) THEN
+C...f + h0 -> f + g (q + h0 -> q + g only)
+
+ ELSEIF(ISUB.EQ.49) THEN
+C...f + h0 -> f + gamma
+
+ ELSEIF(ISUB.EQ.50) THEN
+C...f + h0 -> f + Z0
+ ENDIF
+
+ ELSEIF(ISUB.LE.60) THEN
+ IF(ISUB.EQ.51) THEN
+C...f + h0 -> f' + W+/-
+
+ ELSEIF(ISUB.EQ.52) THEN
+C...f + h0 -> f + h0
+
+ ELSEIF(ISUB.EQ.53) THEN
+C...g + g -> f + fbar (g + g -> q + qbar only)
+ CALL PYWIDT(21,SH,WDTP,WDTE)
+ FACQQ1=COMFAC*AS**2*1D0/6D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
+ & UH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
+ FACQQ2=COMFAC*AS**2*1D0/6D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
+ & TH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 750
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ2
+ 750 CONTINUE
+
+ ELSEIF(ISUB.EQ.54) THEN
+C...g + gamma -> f + fbar (g + gamma -> q + qbar only)
+ CALL PYWIDT(21,SH,WDTP,WDTE)
+ WDTESU=0D0
+ DO 760 I=1,MIN(8,MDCY(21,3))
+ EF=KCHG(I,1)/3D0
+ WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
+ & WDTE(I,4))
+ 760 CONTINUE
+ FACQQ=COMFAC*AEM*AS*WDTESU*(TH2+UH2)/(TH*UH)
+ IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ
+ ENDIF
+ IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ
+ ENDIF
+
+ ELSEIF(ISUB.EQ.55) THEN
+C...g + Z -> f + fbar (g + Z -> q + qbar only)
+
+ ELSEIF(ISUB.EQ.56) THEN
+C...g + W -> f + f'bar (g + W -> q + q'bar only)
+
+ ELSEIF(ISUB.EQ.57) THEN
+C...g + h0 -> f + fbar (g + h0 -> q + qbar only)
+
+ ELSEIF(ISUB.EQ.58) THEN
+C...gamma + gamma -> f + fbar
+ CALL PYWIDT(22,SH,WDTP,WDTE)
+ WDTESU=0D0
+ DO 770 I=1,MIN(12,MDCY(22,3))
+ IF(I.LE.8) EF= KCHG(I,1)/3D0
+ IF(I.GE.9) EF= KCHG(9+2*(I-8),1)/3D0
+ WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
+ & WDTE(I,4))
+ 770 CONTINUE
+ FACFF=COMFAC*AEM**2*WDTESU*2D0*(TH2+UH2)/(TH*UH)
+ IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACFF
+ ENDIF
+
+ ELSEIF(ISUB.EQ.59) THEN
+C...gamma + Z0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.60) THEN
+C...gamma + W+/- -> f + fbar'
+ ENDIF
+
+ ELSEIF(ISUB.LE.70) THEN
+ IF(ISUB.EQ.61) THEN
+C...gamma + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.62) THEN
+C...Z0 + Z0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.63) THEN
+C...Z0 + W+/- -> f + fbar'
+
+ ELSEIF(ISUB.EQ.64) THEN
+C...Z0 + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.65) THEN
+C...W+ + W- -> f + fbar
+
+ ELSEIF(ISUB.EQ.66) THEN
+C...W+/- + h0 -> f + fbar'
+
+ ELSEIF(ISUB.EQ.67) THEN
+C...h0 + h0 -> f + fbar
+
+ ELSEIF(ISUB.EQ.68) THEN
+C...g + g -> g + g
+ FACGG1=COMFAC*AS**2*9D0/4D0*(SH2/TH2+2D0*SH/TH+3D0+2D0*TH/SH+
+ & TH2/SH2)*FACA
+ FACGG2=COMFAC*AS**2*9D0/4D0*(UH2/SH2+2D0*UH/SH+3D0+2D0*SH/UH+
+ & SH2/UH2)*FACA
+ FACGG3=COMFAC*AS**2*9D0/4D0*(TH2/UH2+2D0*TH/UH+3D0+2D0*UH/TH+
+ & UH2/TH2)
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 780
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=0.5D0*FACGG1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=0.5D0*FACGG2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=3
+ SIGH(NCHN)=0.5D0*FACGG3
+ 780 CONTINUE
+
+ ELSEIF(ISUB.EQ.69) THEN
+C...gamma + gamma -> W+ + W-
+ SQMWE=MAX(0.5D0*SQMW,SQRT(SQM3*SQM4))
+ FPROP=SH2/((SQMWE-TH)*(SQMWE-UH))
+ FACWW=COMFAC*6D0*AEM**2*(1D0-FPROP*(4D0/3D0+2D0*SQMWE/SH)+
+ & FPROP**2*(2D0/3D0+2D0*(SQMWE/SH)**2))*WIDS(24,1)
+ IF(KFAC(1,22)*KFAC(2,22).EQ.0) GOTO 790
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWW
+ 790 CONTINUE
+
+ ELSEIF(ISUB.EQ.70) THEN
+C...gamma + W+/- -> Z0 + W+/-
+ SQMWE=MAX(0.5D0*SQMW,SQRT(SQM3*SQM4))
+ FPROP=(TH-SQMWE)**2/(-SH*(SQMWE-UH))
+ FACZW=COMFAC*6D0*AEM**2*(XW1/XW)*
+ & (1D0-FPROP*(4D0/3D0+2D0*SQMWE/(TH-SQMWE))+
+ & FPROP**2*(2D0/3D0+2D0*(SQMWE/(TH-SQMWE))**2))*WIDS(23,2)
+ DO 810 KCHW=1,-1,-2
+ DO 800 ISDE=1,2
+ IF(KFAC(ISDE,22)*KFAC(3-ISDE,24*KCHW).EQ.0) GOTO 800
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=22
+ ISIG(NCHN,3-ISDE)=24*KCHW
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZW*WIDS(24,(5-KCHW)/2)
+ 800 CONTINUE
+ 810 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.80) THEN
+ IF(ISUB.EQ.71) THEN
+C...Z0 + Z0 -> Z0 + Z0
+ IF(SH.LE.4.01D0*SQMZ) GOTO 840
+
+ IF(MSTP(46).LE.2) THEN
+C...Exact scattering ME:s for on-mass-shell gauge bosons
+ BE2=1D0-4D0*SQMZ/SH
+ TH=-0.5D0*SH*BE2*(1D0-CTH)
+ UH=-0.5D0*SH*BE2*(1D0+CTH)
+ IF(MAX(TH,UH).GT.-1D0) GOTO 840
+ SHANG=1D0/XW1*SQMW/SQMZ*(1D0+BE2)**2
+ ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
+ ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
+ THANG=1D0/XW1*SQMW/SQMZ*(BE2-CTH)**2
+ ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
+ ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
+ UHANG=1D0/XW1*SQMW/SQMZ*(BE2+CTH)**2
+ AUHRE=(UH-SQMH)/((UH-SQMH)**2+GMMH**2)*UHANG
+ AUHIM=-GMMH/((UH-SQMH)**2+GMMH**2)*UHANG
+ FACZZ=COMFAC*1D0/(4096D0*PARU(1)**2*16D0*XW1**2)*
+ & (AEM/XW)**4*(SH/SQMW)**2*(SQMZ/SQMW)*SH2
+ IF(MSTP(46).LE.0) FACZZ=FACZZ*(ASHRE**2+ASHIM**2)
+ IF(MSTP(46).EQ.1) FACZZ=FACZZ*((ASHRE+ATHRE+AUHRE)**2+
+ & (ASHIM+ATHIM+AUHIM)**2)
+ IF(MSTP(46).EQ.2) FACZZ=0D0
+
+ ELSE
+C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
+ FACZZ=COMFAC*(AEM/(16D0*PARU(1)*XW*XW1))**2*(64D0/9D0)*
+ & ABS(A00U+2.*A20U)**2
+ ENDIF
+ FACZZ=FACZZ*WIDS(23,1)
+
+ DO 830 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 830
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ AVI=AI**2+VI**2
+ DO 820 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 820
+ EJ=KCHG(IABS(J),1)/3D0
+ AJ=SIGN(1D0,EJ)
+ VJ=AJ-4D0*EJ*XWV
+ AVJ=AJ**2+VJ**2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=0.5D0*FACZZ*AVI*AVJ
+ 820 CONTINUE
+ 830 CONTINUE
+ 840 CONTINUE
+
+ ELSEIF(ISUB.EQ.72) THEN
+C...Z0 + Z0 -> W+ + W-
+ IF(SH.LE.4.01D0*SQMZ) GOTO 870
+
+ IF(MSTP(46).LE.2) THEN
+C...Exact scattering ME:s for on-mass-shell gauge bosons
+ BE2=SQRT((1D0-4D0*SQMW/SH)*(1D0-4D0*SQMZ/SH))
+ CTH2=CTH**2
+ TH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH-BE2*CTH)
+ UH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH+BE2*CTH)
+ IF(MAX(TH,UH).GT.-1D0) GOTO 870
+ SHANG=4D0*SQRT(SQMW/(SQMZ*XW1))*(1D0-2D0*SQMW/SH)*
+ & (1D0-2D0*SQMZ/SH)
+ ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
+ ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
+ ATWRE=XW1/SQMZ*SH/(TH-SQMW)*((CTH-BE2)**2*(3D0/2D0+BE2/2D0*
+ & CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
+ & ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
+ & (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2+
+ & 2D0*(SQMW+SQMZ)/SH*BE2*CTH))
+ ATWIM=0D0
+ AUWRE=XW1/SQMZ*SH/(UH-SQMW)*((CTH+BE2)**2*(3D0/2D0-BE2/2D0*
+ & CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
+ & ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
+ & (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2-
+ & 2D0*(SQMW+SQMZ)/SH*BE2*CTH))
+ AUWIM=0D0
+ A4RE=2D0*XW1/SQMZ*(3D0-CTH2-4D0*(SQMW+SQMZ)/SH)
+ A4IM=0D0
+ FACWW=COMFAC*1D0/(4096D0*PARU(1)**2*16D0*XW1**2)*
+ & (AEM/XW)**4*(SH/SQMW)**2*(SQMZ/SQMW)*SH2
+ IF(MSTP(46).LE.0) FACWW=FACWW*(ASHRE**2+ASHIM**2)
+ IF(MSTP(46).EQ.1) FACWW=FACWW*((ASHRE+ATWRE+AUWRE+A4RE)**2+
+ & (ASHIM+ATWIM+AUWIM+A4IM)**2)
+ IF(MSTP(46).EQ.2) FACWW=FACWW*((ATWRE+AUWRE+A4RE)**2+
+ & (ATWIM+AUWIM+A4IM)**2)
+
+ ELSE
+C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
+ FACWW=COMFAC*(AEM/(16D0*PARU(1)*XW*XW1))**2*(64D0/9D0)*
+ & ABS(A00U-A20U)**2
+ ENDIF
+ FACWW=FACWW*WIDS(24,1)
+
+ DO 860 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 860
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ AVI=AI**2+VI**2
+ DO 850 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 850
+ EJ=KCHG(IABS(J),1)/3D0
+ AJ=SIGN(1D0,EJ)
+ VJ=AJ-4D0*EJ*XWV
+ AVJ=AJ**2+VJ**2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWW*AVI*AVJ
+ 850 CONTINUE
+ 860 CONTINUE
+ 870 CONTINUE
+
+ ELSEIF(ISUB.EQ.73) THEN
+C...Z0 + W+/- -> Z0 + W+/-
+ IF(SH.LE.2D0*SQMZ+2D0*SQMW) GOTO 900
+
+ IF(MSTP(46).LE.2) THEN
+C...Exact scattering ME:s for on-mass-shell gauge bosons
+ BE2=1D0-2D0*(SQMZ+SQMW)/SH+((SQMZ-SQMW)/SH)**2
+ EP1=1D0-(SQMZ-SQMW)/SH
+ EP2=1D0+(SQMZ-SQMW)/SH
+ TH=-0.5D0*SH*BE2*(1D0-CTH)
+ UH=(SQMZ-SQMW)**2/SH-0.5D0*SH*BE2*(1D0+CTH)
+ IF(MAX(TH,UH).GT.-1D0) GOTO 900
+ THANG=(BE2-EP1*CTH)*(BE2-EP2*CTH)
+ ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
+ ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
+ ASWRE=-XW1/SQMZ*SH/(SH-SQMW)*(-BE2*(EP1+EP2)**4*CTH+
+ & 1D0/4D0*(BE2+EP1*EP2)**2*((EP1-EP2)**2-4D0*BE2*CTH)+
+ & 2D0*BE2*(BE2+EP1*EP2)*(EP1+EP2)**2*CTH-
+ & 1D0/16D0*SH/SQMW*(EP1**2-EP2**2)**2*(BE2+EP1*EP2)**2)
+ ASWIM=0D0
+ AUWRE=XW1/SQMZ*SH/(UH-SQMW)*(-BE2*(EP2+EP1*CTH)*
+ & (EP1+EP2*CTH)*(BE2+EP1*EP2)+BE2*(EP2+EP1*CTH)*
+ & (BE2+EP1*EP2*CTH)*(2D0*EP2-EP2*CTH+EP1)-
+ & BE2*(EP2+EP1*CTH)**2*(BE2-EP2**2*CTH)-1D0/8D0*
+ & (BE2+EP1*EP2*CTH)**2*((EP1+EP2)**2+2D0*BE2*(1D0-CTH))+
+ & 1D0/32D0*SH/SQMW*(BE2+EP1*EP2*CTH)**2*
+ & (EP1**2-EP2**2)**2-BE2*(EP1+EP2*CTH)*(EP2+EP1*CTH)*
+ & (BE2+EP1*EP2)+BE2*(EP1+EP2*CTH)*(BE2+EP1*EP2*CTH)*
+ & (2D0*EP1-EP1*CTH+EP2)-BE2*(EP1+EP2*CTH)**2*
+ & (BE2-EP1**2*CTH)-1D0/8D0*(BE2+EP1*EP2*CTH)**2*
+ & ((EP1+EP2)**2+2D0*BE2*(1D0-CTH))+1D0/32D0*SH/SQMW*
+ & (BE2+EP1*EP2*CTH)**2*(EP1**2-EP2**2)**2)
+ AUWIM=0D0
+ A4RE=XW1/SQMZ*(EP1**2*EP2**2*(CTH**2-1D0)-
+ & 2D0*BE2*(EP1**2+EP2**2+EP1*EP2)*CTH-2D0*BE2*EP1*EP2)
+ A4IM=0D0
+ FACZW=COMFAC*1D0/(4096D0*PARU(1)**2*4D0*XW1)*(AEM/XW)**4*
+ & (SH/SQMW)**2*SQRT(SQMZ/SQMW)*SH2
+ IF(MSTP(46).LE.0) FACZW=0D0
+ IF(MSTP(46).EQ.1) FACZW=FACZW*((ATHRE+ASWRE+AUWRE+A4RE)**2+
+ & (ATHIM+ASWIM+AUWIM+A4IM)**2)
+ IF(MSTP(46).EQ.2) FACZW=FACZW*((ASWRE+AUWRE+A4RE)**2+
+ & (ASWIM+AUWIM+A4IM)**2)
+
+ ELSE
+C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
+ FACZW=COMFAC*AEM**2/(64D0*PARU(1)**2*XW**2*XW1)*16D0*
+ & ABS(A20U+3.*A11U*SNGL(CTH))**2
+ ENDIF
+ FACZW=FACZW*WIDS(23,2)
+
+ DO 890 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 890
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ AVI=AI**2+VI**2
+ KCHWI=ISIGN(1,KCHG(IABS(I),1)*ISIGN(1,I))
+ DO 880 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 880
+ EJ=KCHG(IABS(J),1)/3D0
+ AJ=SIGN(1D0,EJ)
+ VJ=AI-4D0*EJ*XWV
+ AVJ=AJ**2+VJ**2
+ KCHWJ=ISIGN(1,KCHG(IABS(J),1)*ISIGN(1,J))
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZW*AVI*VINT(180+J)*WIDS(24,(5-KCHWJ)/2)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACZW*VINT(180+I)*WIDS(24,(5-KCHWI)/2)*AVJ
+ 880 CONTINUE
+ 890 CONTINUE
+ 900 CONTINUE
+
+ ELSEIF(ISUB.EQ.75) THEN
+C...W+ + W- -> gamma + gamma
+
+ ELSEIF(ISUB.EQ.76) THEN
+C...W+ + W- -> Z0 + Z0
+ IF(SH.LE.4.01D0*SQMZ) GOTO 930
+
+ IF(MSTP(46).LE.2) THEN
+C...Exact scattering ME:s for on-mass-shell gauge bosons
+ BE2=SQRT((1D0-4D0*SQMW/SH)*(1D0-4D0*SQMZ/SH))
+ CTH2=CTH**2
+ TH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH-BE2*CTH)
+ UH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH+BE2*CTH)
+ IF(MAX(TH,UH).GT.-1D0) GOTO 930
+ SHANG=4D0*SQRT(SQMW/(SQMZ*XW1))*(1D0-2D0*SQMW/SH)*
+ & (1D0-2D0*SQMZ/SH)
+ ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
+ ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
+ ATWRE=XW1/SQMZ*SH/(TH-SQMW)*((CTH-BE2)**2*(3D0/2D0+BE2/2D0*
+ & CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
+ & ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
+ & (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2+
+ & 2D0*(SQMW+SQMZ)/SH*BE2*CTH))
+ ATWIM=0D0
+ AUWRE=XW1/SQMZ*SH/(UH-SQMW)*((CTH+BE2)**2*(3D0/2D0-BE2/2D0*
+ & CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
+ & ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
+ & (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2-
+ & 2D0*(SQMW+SQMZ)/SH*BE2*CTH))
+ AUWIM=0D0
+ A4RE=2D0*XW1/SQMZ*(3D0-CTH2-4D0*(SQMW+SQMZ)/SH)
+ A4IM=0D0
+ FACZZ=COMFAC*1D0/(4096D0*PARU(1)**2)*(AEM/XW)**4*
+ & (SH/SQMW)**2*SH2
+ IF(MSTP(46).LE.0) FACZZ=FACZZ*(ASHRE**2+ASHIM**2)
+ IF(MSTP(46).EQ.1) FACZZ=FACZZ*((ASHRE+ATWRE+AUWRE+A4RE)**2+
+ & (ASHIM+ATWIM+AUWIM+A4IM)**2)
+ IF(MSTP(46).EQ.2) FACZZ=FACZZ*((ATWRE+AUWRE+A4RE)**2+
+ & (ATWIM+AUWIM+A4IM)**2)
+
+ ELSE
+C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
+ FACZZ=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*(64D0/9D0)*
+ & ABS(A00U-A20U)**2
+ ENDIF
+ FACZZ=FACZZ*WIDS(23,1)
+
+ DO 920 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 920
+ EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
+ DO 910 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 910
+ EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
+ IF(EI*EJ.GT.0D0) GOTO 910
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=0.5D0*FACZZ*VINT(180+I)*VINT(180+J)
+ 910 CONTINUE
+ 920 CONTINUE
+ 930 CONTINUE
+
+ ELSEIF(ISUB.EQ.77) THEN
+C...W+/- + W+/- -> W+/- + W+/-
+ IF(SH.LE.4.01D0*SQMW) GOTO 960
+
+ IF(MSTP(46).LE.2) THEN
+C...Exact scattering ME:s for on-mass-shell gauge bosons
+ BE2=1D0-4D0*SQMW/SH
+ BE4=BE2**2
+ CTH2=CTH**2
+ CTH3=CTH**3
+ TH=-0.5D0*SH*BE2*(1D0-CTH)
+ UH=-0.5D0*SH*BE2*(1D0+CTH)
+ IF(MAX(TH,UH).GT.-1D0) GOTO 960
+ SHANG=(1D0+BE2)**2
+ ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
+ ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
+ THANG=(BE2-CTH)**2
+ ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
+ ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
+ UHANG=(BE2+CTH)**2
+ AUHRE=(UH-SQMH)/((UH-SQMH)**2+GMMH**2)*UHANG
+ AUHIM=-GMMH/((UH-SQMH)**2+GMMH**2)*UHANG
+ SGZANG=1D0/SQMW*BE2*(3D0-BE2)**2*CTH
+ ASGRE=XW*SGZANG
+ ASGIM=0D0
+ ASZRE=XW1*SH/(SH-SQMZ)*SGZANG
+ ASZIM=0D0
+ TGZANG=1D0/SQMW*(BE2*(4D0-2D0*BE2+BE4)+BE2*(4D0-10D0*BE2+
+ & BE4)*CTH+(2D0-11D0*BE2+10D0*BE4)*CTH2+BE2*CTH3)
+ ATGRE=0.5D0*XW*SH/TH*TGZANG
+ ATGIM=0D0
+ ATZRE=0.5D0*XW1*SH/(TH-SQMZ)*TGZANG
+ ATZIM=0D0
+ UGZANG=1D0/SQMW*(BE2*(4D0-2D0*BE2+BE4)-BE2*(4D0-10D0*BE2+
+ & BE4)*CTH+(2D0-11D0*BE2+10D0*BE4)*CTH2-BE2*CTH3)
+ AUGRE=0.5D0*XW*SH/UH*UGZANG
+ AUGIM=0D0
+ AUZRE=0.5D0*XW1*SH/(UH-SQMZ)*UGZANG
+ AUZIM=0D0
+ A4ARE=1D0/SQMW*(1D0+2D0*BE2-6D0*BE2*CTH-CTH2)
+ A4AIM=0D0
+ A4SRE=2D0/SQMW*(1D0+2D0*BE2-CTH2)
+ A4SIM=0D0
+ FWW=COMFAC*1D0/(4096D0*PARU(1)**2)*(AEM/XW)**4*
+ & (SH/SQMW)**2*SH2
+ IF(MSTP(46).LE.0) THEN
+ AWWARE=ASHRE
+ AWWAIM=ASHIM
+ AWWSRE=0D0
+ AWWSIM=0D0
+ ELSEIF(MSTP(46).EQ.1) THEN
+ AWWARE=ASHRE+ATHRE+ASGRE+ASZRE+ATGRE+ATZRE+A4ARE
+ AWWAIM=ASHIM+ATHIM+ASGIM+ASZIM+ATGIM+ATZIM+A4AIM
+ AWWSRE=-ATHRE-AUHRE+ATGRE+ATZRE+AUGRE+AUZRE+A4SRE
+ AWWSIM=-ATHIM-AUHIM+ATGIM+ATZIM+AUGIM+AUZIM+A4SIM
+ ELSE
+ AWWARE=ASGRE+ASZRE+ATGRE+ATZRE+A4ARE
+ AWWAIM=ASGIM+ASZIM+ATGIM+ATZIM+A4AIM
+ AWWSRE=ATGRE+ATZRE+AUGRE+AUZRE+A4SRE
+ AWWSIM=ATGIM+ATZIM+AUGIM+AUZIM+A4SIM
+ ENDIF
+ AWWA2=AWWARE**2+AWWAIM**2
+ AWWS2=AWWSRE**2+AWWSIM**2
+
+ ELSE
+C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
+ FWWA=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*(64D0/9D0)*
+ & ABS(A00U+0.5*A20U+4.5*A11U*SNGL(CTH))**2
+ FWWS=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*64D0*ABS(A20U)**2
+ ENDIF
+
+ DO 950 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 950
+ EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
+ DO 940 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 940
+ EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
+ IF(EI*EJ.LT.0D0) THEN
+C...W+W-
+ IF(MSTP(45).EQ.1) GOTO 940
+ IF(MSTP(46).LE.2) FACWW=FWW*AWWA2*WIDS(24,1)
+ IF(MSTP(46).GE.3) FACWW=FWWA*WIDS(24,1)
+ ELSE
+C...W+W+/W-W-
+ IF(MSTP(45).EQ.2) GOTO 940
+ IF(MSTP(46).LE.2) FACWW=FWW*AWWS2
+ IF(MSTP(46).GE.3) FACWW=FWWS
+ IF(EI.GT.0D0) FACWW=FACWW*WIDS(24,4)
+ IF(EI.LT.0D0) FACWW=FACWW*WIDS(24,5)
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWW*VINT(180+I)*VINT(180+J)
+ IF(EI*EJ.GT.0D0) SIGH(NCHN)=0.5D0*SIGH(NCHN)
+ 940 CONTINUE
+ 950 CONTINUE
+ 960 CONTINUE
+
+ ELSEIF(ISUB.EQ.78) THEN
+C...W+/- + h0 -> W+/- + h0
+
+ ELSEIF(ISUB.EQ.79) THEN
+C...h0 + h0 -> h0 + h0
+
+ ELSEIF(ISUB.EQ.80) THEN
+C...q + gamma -> q' + pi+/-
+ FQPI=COMFAC*(2D0*AEM/9D0)*(-SH/TH)*(1D0/SH2+1D0/TH2)
+ ASSH=PYALPS(MAX(0.5D0,0.5D0*SH))
+ Q2FPSH=0.55D0/LOG(MAX(2D0,2D0*SH))
+ DELSH=UH*SQRT(ASSH*Q2FPSH)
+ ASUH=PYALPS(MAX(0.5D0,-0.5D0*UH))
+ Q2FPUH=0.55D0/LOG(MAX(2D0,-2D0*UH))
+ DELUH=SH*SQRT(ASUH*Q2FPUH)
+ DO 980 I=MAX(-2,MMINA),MIN(2,MMAXA)
+ IF(I.EQ.0) GOTO 980
+ EI=KCHG(IABS(I),1)/3D0
+ EJ=SIGN(1D0-ABS(EI),EI)
+ DO 970 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 970
+ IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 970
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FQPI*(EI*DELSH+EJ*DELUH)**2
+ 970 CONTINUE
+ 980 CONTINUE
+
+ ENDIF
+
+C...C: 2 -> 2, tree diagrams with masses
+
+ ELSEIF(ISUB.LE.90) THEN
+ IF(ISUB.EQ.81) THEN
+C...q + qbar -> Q + Qbar
+ FACQQB=COMFAC*AS**2*4D0/9D0*(((TH-SQM3)**2+
+ & (UH-SQM3)**2)/SH2+2D0*SQM3/SH)
+ IF(MSTP(35).GE.1) FACQQB=FACQQB*PYHFTH(SH,SQM3,0D0)
+ WID2=1D0
+ IF(MINT(55).EQ.6) WID2=WIDS(6,1)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
+ FACQQB=FACQQB*WID2
+ DO 990 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 990
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQB
+ 990 CONTINUE
+
+ ELSEIF(ISUB.EQ.82) THEN
+C...g + g -> Q + Qbar
+ IF(MSTP(34).EQ.0) THEN
+ FACQQ1=COMFAC*FACA*AS**2*(1D0/6D0)*((UH-SQM3)/(TH-SQM3)-
+ & 2D0*(UH-SQM3)**2/SH2+4D0*(SQM3/SH)*(TH*UH-SQM3**2)/
+ & (TH-SQM3)**2)
+ FACQQ2=COMFAC*FACA*AS**2*(1D0/6D0)*((TH-SQM3)/(UH-SQM3)-
+ & 2D0*(TH-SQM3)**2/SH2+4D0*(SQM3/SH)*(TH*UH-SQM3**2)/
+ & (UH-SQM3)**2)
+ ELSE
+ FACQQ1=COMFAC*FACA*AS**2*(1D0/6D0)*((UH-SQM3)/(TH-SQM3)-
+ & 2.25D0*(UH-SQM3)**2/SH2+4.5D0*(SQM3/SH)*(TH*UH-SQM3**2)/
+ & (TH-SQM3)**2+0.5D0*SQM3*TH/(TH-SQM3)**2-SQM3**2/
+ & (SH*(TH-SQM3)))
+ FACQQ2=COMFAC*FACA*AS**2*(1D0/6D0)*((TH-SQM3)/(UH-SQM3)-
+ & 2.25D0*(TH-SQM3)**2/SH2+4.5D0*(SQM3/SH)*(TH*UH-SQM3**2)/
+ & (UH-SQM3)**2+0.5D0*SQM3*UH/(UH-SQM3)**2-SQM3**2/
+ & (SH*(UH-SQM3)))
+ ENDIF
+ IF(MSTP(35).GE.1) THEN
+ FATRE=PYHFTH(SH,SQM3,2D0/7D0)
+ FACQQ1=FACQQ1*FATRE
+ FACQQ2=FACQQ2*FATRE
+ ENDIF
+ WID2=1D0
+ IF(MINT(55).EQ.6) WID2=WIDS(6,1)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
+ FACQQ1=FACQQ1*WID2
+ FACQQ2=FACQQ2*WID2
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1000
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ2
+ 1000 CONTINUE
+
+ ELSEIF(ISUB.EQ.83) THEN
+C...f + q -> f' + Q
+ FACQQS=COMFAC*(0.5D0*AEM/XW)**2*SH*(SH-SQM3)/(SQMW-TH)**2
+ FACQQU=COMFAC*(0.5D0*AEM/XW)**2*UH*(UH-SQM3)/(SQMW-TH)**2
+ DO 1020 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1020
+ DO 1010 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1010
+ IF(I*J.GT.0.AND.MOD(IABS(I+J),2).EQ.0) GOTO 1010
+ IF(I*J.LT.0.AND.MOD(IABS(I+J),2).EQ.1) GOTO 1010
+ IF(IABS(I).LT.MINT(55).AND.MOD(IABS(I+MINT(55)),2).EQ.1)
+ & THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ IF(MOD(MINT(55),2).EQ.0) FACCKM=VCKM(MINT(55)/2,
+ & (IABS(I)+1)/2)*VINT(180+J)
+ IF(MOD(MINT(55),2).EQ.1) FACCKM=VCKM(IABS(I)/2,
+ & (MINT(55)+1)/2)*VINT(180+J)
+ WID2=1D0
+ IF(I.GT.0) THEN
+ IF(MINT(55).EQ.6) WID2=WIDS(6,2)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
+ & WIDS(MINT(55),2)
+ ELSE
+ IF(MINT(55).EQ.6) WID2=WIDS(6,3)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
+ & WIDS(MINT(55),3)
+ ENDIF
+ IF(I*J.GT.0) SIGH(NCHN)=FACQQS*FACCKM*WID2
+ IF(I*J.LT.0) SIGH(NCHN)=FACQQU*FACCKM*WID2
+ ENDIF
+ IF(IABS(J).LT.MINT(55).AND.MOD(IABS(J+MINT(55)),2).EQ.1)
+ & THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ IF(MOD(MINT(55),2).EQ.0) FACCKM=VCKM(MINT(55)/2,
+ & (IABS(J)+1)/2)*VINT(180+I)
+ IF(MOD(MINT(55),2).EQ.1) FACCKM=VCKM(IABS(J)/2,
+ & (MINT(55)+1)/2)*VINT(180+I)
+ IF(J.GT.0) THEN
+ IF(MINT(55).EQ.6) WID2=WIDS(6,2)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
+ & WIDS(MINT(55),2)
+ ELSE
+ IF(MINT(55).EQ.6) WID2=WIDS(6,3)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
+ & WIDS(MINT(55),3)
+ ENDIF
+ IF(I*J.GT.0) SIGH(NCHN)=FACQQS*FACCKM*WID2
+ IF(I*J.LT.0) SIGH(NCHN)=FACQQU*FACCKM*WID2
+ ENDIF
+ 1010 CONTINUE
+ 1020 CONTINUE
+
+ ELSEIF(ISUB.EQ.84) THEN
+C...g + gamma -> Q + Qbar
+ FMTU=SQM3/(SQM3-TH)+SQM3/(SQM3-UH)
+ FACQQ=COMFAC*AS*AEM*(KCHG(IABS(MINT(55)),1)/3D0)**2*
+ & ((SQM3-TH)/(SQM3-UH)+(SQM3-UH)/(SQM3-TH)+4D0*FMTU*(1D0-FMTU))
+ IF(MSTP(35).GE.1) FACQQ=FACQQ*PYHFTH(SH,SQM3,0D0)
+ WID2=1D0
+ IF(MINT(55).EQ.6) WID2=WIDS(6,1)
+ IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
+ FACQQ=FACQQ*WID2
+ IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ
+ ENDIF
+ IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ
+ ENDIF
+
+ ELSEIF(ISUB.EQ.85) THEN
+C...gamma + gamma -> F + Fbar (heavy fermion, quark or lepton)
+ FMTU=SQM3/(SQM3-TH)+SQM3/(SQM3-UH)
+ FACFF=COMFAC*AEM**2*(KCHG(IABS(MINT(56)),1)/3D0)**4*2D0*
+ & ((SQM3-TH)/(SQM3-UH)+(SQM3-UH)/(SQM3-TH)+4D0*FMTU*(1D0-FMTU))
+ IF(IABS(MINT(56)).LT.10) FACFF=3D0*FACFF
+ IF(IABS(MINT(56)).LT.10.AND.MSTP(35).GE.1)
+ & FACFF=FACFF*PYHFTH(SH,SQM3,1D0)
+ WID2=1D0
+ IF(MINT(56).EQ.6) WID2=WIDS(6,1)
+ IF(MINT(56).EQ.7.OR.MINT(56).EQ.8) WID2=WIDS(MINT(56),1)
+ IF(MINT(56).EQ.17) WID2=WIDS(17,1)
+ FACFF=FACFF*WID2
+ IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACFF
+ ENDIF
+
+ ELSEIF(ISUB.EQ.86) THEN
+C...g + g -> J/Psi + g
+ FACQQG=COMFAC*AS**3*(5D0/9D0)*PARP(38)*SQRT(SQM3)*
+ & (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
+ & ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
+ IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+
+ ELSEIF(ISUB.EQ.87) THEN
+C...g + g -> chi_0c + g
+ PGTW=(SH*TH+TH*UH+UH*SH)/SH2
+ QGTW=(SH*TH*UH)/SH**3
+ RGTW=SQM3/SH
+ FACQQG=COMFAC*AS**3*4D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
+ & (9D0*RGTW**2*PGTW**4*(RGTW**4-2D0*RGTW**2*PGTW+PGTW**2)-
+ & 6D0*RGTW*PGTW**3*QGTW*(2D0*RGTW**4-5D0*RGTW**2*PGTW+PGTW**2)-
+ & PGTW**2*QGTW**2*(RGTW**4+2D0*RGTW**2*PGTW-PGTW**2)+
+ & 2D0*RGTW*PGTW*QGTW**3*(RGTW**2-PGTW)+6D0*RGTW**2*QGTW**4)/
+ & (QGTW*(QGTW-RGTW*PGTW)**4)
+ IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+
+ ELSEIF(ISUB.EQ.88) THEN
+C...g + g -> chi_1c + g
+ PGTW=(SH*TH+TH*UH+UH*SH)/SH2
+ QGTW=(SH*TH*UH)/SH**3
+ RGTW=SQM3/SH
+ FACQQG=COMFAC*AS**3*12D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
+ & PGTW**2*(RGTW*PGTW**2*(RGTW**2-4D0*PGTW)+2D0*QGTW*(-RGTW**4+
+ & 5D0*RGTW**2*PGTW+PGTW**2)-15D0*RGTW*QGTW**2)/
+ & (QGTW-RGTW*PGTW)**4
+ IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+
+ ELSEIF(ISUB.EQ.89) THEN
+C...g + g -> chi_2c + g
+ PGTW=(SH*TH+TH*UH+UH*SH)/SH2
+ QGTW=(SH*TH*UH)/SH**3
+ RGTW=SQM3/SH
+ FACQQG=COMFAC*AS**3*4D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
+ & (12D0*RGTW**2*PGTW**4*(RGTW**4-2D0*RGTW**2*PGTW+PGTW**2)-
+ & 3D0*RGTW*PGTW**3*QGTW*(8D0*RGTW**4-RGTW**2*PGTW+4D0*PGTW**2)+
+ & 2D0*PGTW**2*QGTW**2*(-7D0*RGTW**4+43D0*RGTW**2*PGTW+PGTW**2)+
+ & RGTW*PGTW*QGTW**3*(16D0*RGTW**2-61D0*PGTW)+12D0*RGTW**2*
+ & QGTW**4)/(QGTW*(QGTW-RGTW*PGTW)**4)
+ IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+ ENDIF
+
+C...D: Mimimum bias processes
+
+ ELSEIF(ISUB.LE.100) THEN
+ IF(ISUB.EQ.91) THEN
+C...Elastic scattering
+ SIGS=SIGT(0,0,1)
+
+ ELSEIF(ISUB.EQ.92) THEN
+C...Single diffractive scattering (first side, i.e. XB)
+ SIGS=SIGT(0,0,2)
+
+ ELSEIF(ISUB.EQ.93) THEN
+C...Single diffractive scattering (second side, i.e. AX)
+ SIGS=SIGT(0,0,3)
+
+ ELSEIF(ISUB.EQ.94) THEN
+C...Double diffractive scattering
+ SIGS=SIGT(0,0,4)
+
+ ELSEIF(ISUB.EQ.95) THEN
+C...Low-pT scattering
+ SIGS=SIGT(0,0,5)
+
+ ELSEIF(ISUB.EQ.96) THEN
+C...Multiple interactions: sum of QCD processes
+ CALL PYWIDT(21,SH,WDTP,WDTE)
+
+C...q + q' -> q + q'
+ FACQQ1=COMFAC*AS**2*4D0/9D0*(SH2+UH2)/TH2
+ FACQQB=COMFAC*AS**2*4D0/9D0*((SH2+UH2)/TH2*FACA-
+ & MSTP(34)*2D0/3D0*UH2/(SH*TH))
+ FACQQ2=COMFAC*AS**2*4D0/9D0*((SH2+TH2)/UH2-
+ & MSTP(34)*2D0/3D0*SH2/(TH*UH))
+ DO 1040 I=-3,3
+ IF(I.EQ.0) GOTO 1040
+ DO 1030 J=-3,3
+ IF(J.EQ.0) GOTO 1030
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=111
+ SIGH(NCHN)=FACQQ1
+ IF(I.EQ.-J) SIGH(NCHN)=FACQQB
+ IF(I.EQ.J) THEN
+ SIGH(NCHN)=0.5D0*SIGH(NCHN)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=112
+ SIGH(NCHN)=0.5D0*FACQQ2
+ ENDIF
+ 1030 CONTINUE
+ 1040 CONTINUE
+
+C...q + qbar -> q' + qbar' or g + g
+ FACQQB=COMFAC*AS**2*4D0/9D0*(TH2+UH2)/SH2*
+ & (WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))
+ FACGG1=COMFAC*AS**2*32D0/27D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
+ & UH2/SH2)
+ FACGG2=COMFAC*AS**2*32D0/27D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
+ & TH2/SH2)
+ DO 1050 I=-3,3
+ IF(I.EQ.0) GOTO 1050
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=121
+ SIGH(NCHN)=FACQQB
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=131
+ SIGH(NCHN)=0.5D0*FACGG1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=132
+ SIGH(NCHN)=0.5D0*FACGG2
+ 1050 CONTINUE
+
+C...q + g -> q + g
+ FACQG1=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*UH2/TH2-
+ & UH/SH)*FACA
+ FACQG2=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*SH2/TH2-
+ & SH/UH)
+ DO 1070 I=-3,3
+ IF(I.EQ.0) GOTO 1070
+ DO 1060 ISDE=1,2
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=281
+ SIGH(NCHN)=FACQG1
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=282
+ SIGH(NCHN)=FACQG2
+ 1060 CONTINUE
+ 1070 CONTINUE
+
+C...g + g -> q + qbar or g + g
+ FACQQ1=COMFAC*AS**2*1D0/6D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
+ & UH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
+ FACQQ2=COMFAC*AS**2*1D0/6D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
+ & TH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
+ FACGG1=COMFAC*AS**2*9D0/4D0*(SH2/TH2+2D0*SH/TH+3D0+
+ & 2D0*TH/SH+TH2/SH2)*FACA
+ FACGG2=COMFAC*AS**2*9D0/4D0*(UH2/SH2+2D0*UH/SH+3D0+
+ & 2D0*SH/UH+SH2/UH2)*FACA
+ FACGG3=COMFAC*AS**2*9D0/4D0*(TH2/UH2+2D0*TH/UH+3+
+ & 2D0*UH/TH+UH2/TH2)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=531
+ SIGH(NCHN)=FACQQ1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=532
+ SIGH(NCHN)=FACQQ2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=681
+ SIGH(NCHN)=0.5D0*FACGG1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=682
+ SIGH(NCHN)=0.5D0*FACGG2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=683
+ SIGH(NCHN)=0.5D0*FACGG3
+ ENDIF
+
+C...E: 2 -> 1, loop diagrams
+
+ ELSEIF(ISUB.LE.110) THEN
+ IF(ISUB.EQ.101) THEN
+C...g + g -> gamma*/Z0
+
+ ELSEIF(ISUB.EQ.102) THEN
+C...g + g -> h0 (or H0, or A0)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ HI=SHR*WDTP(13)/32D0
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1080
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1080 CONTINUE
+
+ ELSEIF(ISUB.EQ.103) THEN
+C...gamma + gamma -> h0 (or H0, or A0)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ HI=SHR*WDTP(14)*2D0
+ IF(KFAC(1,22)*KFAC(2,22).EQ.0) GOTO 1090
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1090 CONTINUE
+
+C...Continuation C: 2 -> 2, tree diagrams with masses.
+
+ ELSEIF(ISUB.EQ.106) THEN
+C...g + g -> J/Psi + gamma.
+ EQ=2D0/3D0
+ FACQQG=COMFAC*AEM*EQ**2*AS**2*(4D0/3D0)*PARP(38)*SQRT(SQM3)*
+ & (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
+ & ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
+ IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+
+ ELSEIF(ISUB.EQ.107) THEN
+C...g + gamma -> J/Psi + g.
+ EQ=2D0/3D0
+ FACQQG=COMFAC*AEM*EQ**2*AS**2*(32D0/3D0)*PARP(38)*SQRT(SQM3)*
+ & (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
+ & ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
+ IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+ IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+
+ ELSEIF(ISUB.EQ.108) THEN
+C...gamma + gamma -> J/Psi + gamma.
+ EQ=2D0/3D0
+ FACQQG=COMFAC*AEM**3*EQ**6*384D0*PARP(38)*SQRT(SQM3)*
+ & (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
+ & ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
+ IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=22
+ ISIG(NCHN,2)=22
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQG
+ ENDIF
+
+C...F: 2 -> 2, box diagrams
+
+ ELSEIF(ISUB.EQ.110) THEN
+C...f + fbar -> gamma + h0
+ THUH=MAX(TH*UH,SH*CKIN(3)**2)
+ FACHG=COMFAC*(3D0*AEM**4)/(2D0*PARU(1)**2*XW*SQMW)*SH*THUH
+ FACHG=FACHG*WIDS(KFHIGG,2)
+C...Calculate loop contributions for intermediate gamma* and Z0
+ CIGTOT=CMPLX(0.,0.)
+ CIZTOT=CMPLX(0.,0.)
+ JMAX=3*MSTP(1)+1
+ DO 1100 J=1,JMAX
+ IF(J.LE.2*MSTP(1)) THEN
+ FNC=1D0
+ EJ=KCHG(J,1)/3D0
+ AJ=SIGN(1D0,EJ+0.1D0)
+ VJ=AJ-4D0*EJ*XWV
+ BALP=SQM4/(2D0*PMAS(J,1))**2
+ BBET=SH/(2D0*PMAS(J,1))**2
+ ELSEIF(J.LE.3*MSTP(1)) THEN
+ FNC=3D0
+ JL=2*(J-2*MSTP(1))-1
+ EJ=KCHG(10+JL,1)/3D0
+ AJ=SIGN(1D0,EJ+0.1D0)
+ VJ=AJ-4D0*EJ*XWV
+ BALP=SQM4/(2D0*PMAS(10+JL,1))**2
+ BBET=SH/(2D0*PMAS(10+JL,1))**2
+ ELSE
+ BALP=SQM4/(2D0*PMAS(24,1))**2
+ BBET=SH/(2D0*PMAS(24,1))**2
+ ENDIF
+ BABI=1D0/(BALP-BBET)
+ IF(BALP.LT.1D0) THEN
+ F0ALP=CMPLX(SNGL(ASIN(SQRT(BALP))),0.)
+ F1ALP=F0ALP**2
+ ELSE
+ F0ALP=CMPLX(SNGL(LOG(SQRT(BALP)+SQRT(BALP-1D0))),
+ & -SNGL(0.5D0*PARU(1)))
+ F1ALP=-F0ALP**2
+ ENDIF
+ F2ALP=SNGL(SQRT(ABS(BALP-1D0)/BALP))*F0ALP
+ IF(BBET.LT.1D0) THEN
+ F0BET=CMPLX(SNGL(ASIN(SQRT(BBET))),0.)
+ F1BET=F0BET**2
+ ELSE
+ F0BET=CMPLX(SNGL(LOG(SQRT(BBET)+SQRT(BBET-1D0))),
+ & -SNGL(0.5D0*PARU(1)))
+ F1BET=-F0BET**2
+ ENDIF
+ F2BET=SNGL(SQRT(ABS(BBET-1D0)/BBET))*F0BET
+ IF(J.LE.3*MSTP(1)) THEN
+ FIF=SNGL(0.5D0*BABI)+SNGL(BABI**2)*(SNGL(0.5D0*(1D0-BALP+
+ & BBET))*(F1BET-F1ALP)+SNGL(BBET)*(F2BET-F2ALP))
+ CIGTOT=CIGTOT+SNGL(FNC*EJ**2)*FIF
+ CIZTOT=CIZTOT+SNGL(FNC*EJ*VJ)*FIF
+ ELSE
+ TXW=XW/XW1
+ CIGTOT=CIGTOT-0.5*(SNGL(BABI*(1.5D0+BALP))+SNGL(BABI**2)*
+ & (SNGL(1.5D0-3D0*BALP+4D0*BBET)*(F1BET-F1ALP)+
+ & SNGL(BBET*(2D0*BALP+3D0))*(F2BET-F2ALP)))
+ CIZTOT=CIZTOT-SNGL(0.5D0*BABI*XW1)*(SNGL(5D0-TXW+2D0*BALP*
+ & (1D0-TXW))*(1.+SNGL(2D0*BABI*BBET)*(F2BET-F2ALP))+
+ & SNGL(BABI*(4D0*BBET*(3D0-TXW)-(2D0*BALP-1D0)*(5D0-TXW)))*
+ & (F1BET-F1ALP))
+ ENDIF
+ 1100 CONTINUE
+ CIGTOT=CIGTOT/SNGL(SH)
+ CIZTOT=CIZTOT*SNGL(XWC)/CMPLX(SNGL(SH-SQMZ),SNGL(GMMZ))
+C...Loop over initial flavours
+ DO 1110 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1110
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACHG*FCOI*(ABS(SNGL(EI)*CIGTOT+SNGL(VI)*
+ & CIZTOT)**2+AI**2*ABS(CIZTOT)**2)
+ 1110 CONTINUE
+
+ ENDIF
+
+ ELSEIF(ISUB.LE.120) THEN
+ IF(ISUB.EQ.111) THEN
+C...f + fbar -> g + h0 (q + qbar -> g + h0 only)
+ A5STUR=0D0
+ A5STUI=0D0
+ DO 1120 I=1,2*MSTP(1)
+ SQMQ=PMAS(I,1)**2
+ EPSS=4D0*SQMQ/SH
+ EPSH=4D0*SQMQ/SQMH
+ CALL PYWAUX(1,EPSS,W1SR,W1SI)
+ CALL PYWAUX(1,EPSH,W1HR,W1HI)
+ CALL PYWAUX(2,EPSS,W2SR,W2SI)
+ CALL PYWAUX(2,EPSH,W2HR,W2HI)
+ A5STUR=A5STUR+EPSH*(1D0+SH/(TH+UH)*(W1SR-W1HR)+
+ & (0.25D0-SQMQ/(TH+UH))*(W2SR-W2HR))
+ A5STUI=A5STUI+EPSH*(SH/(TH+UH)*(W1SI-W1HI)+
+ & (0.25D0-SQMQ/(TH+UH))*(W2SI-W2HI))
+ 1120 CONTINUE
+ FACGH=COMFAC*FACA/(144D0*PARU(1)**2)*AEM/XW*AS**3*SQMH/SQMW*
+ & SQMH/SH*(UH**2+TH**2)/(UH+TH)**2*(A5STUR**2+A5STUI**2)
+ FACGH=FACGH*WIDS(25,2)
+ DO 1130 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1130
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGH
+ 1130 CONTINUE
+
+ ELSEIF(ISUB.EQ.112) THEN
+C...f + g -> f + h0 (q + g -> q + h0 only)
+ A5TSUR=0D0
+ A5TSUI=0D0
+ DO 1140 I=1,2*MSTP(1)
+ SQMQ=PMAS(I,1)**2
+ EPST=4D0*SQMQ/TH
+ EPSH=4D0*SQMQ/SQMH
+ CALL PYWAUX(1,EPST,W1TR,W1TI)
+ CALL PYWAUX(1,EPSH,W1HR,W1HI)
+ CALL PYWAUX(2,EPST,W2TR,W2TI)
+ CALL PYWAUX(2,EPSH,W2HR,W2HI)
+ A5TSUR=A5TSUR+EPSH*(1D0+TH/(SH+UH)*(W1TR-W1HR)+
+ & (0.25D0-SQMQ/(SH+UH))*(W2TR-W2HR))
+ A5TSUI=A5TSUI+EPSH*(TH/(SH+UH)*(W1TI-W1HI)+
+ & (0.25D0-SQMQ/(SH+UH))*(W2TI-W2HI))
+ 1140 CONTINUE
+ FACQH=COMFAC*FACA/(384D0*PARU(1)**2)*AEM/XW*AS**3*SQMH/SQMW*
+ & SQMH/(-TH)*(UH**2+SH**2)/(UH+SH)**2*(A5TSUR**2+A5TSUI**2)
+ FACQH=FACQH*WIDS(25,2)
+ DO 1160 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1160
+ DO 1150 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1150
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1150
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQH
+ 1150 CONTINUE
+ 1160 CONTINUE
+
+ ELSEIF(ISUB.EQ.113) THEN
+C...g + g -> g + h0
+ A2STUR=0D0
+ A2STUI=0D0
+ A2USTR=0D0
+ A2USTI=0D0
+ A2TUSR=0D0
+ A2TUSI=0D0
+ A4STUR=0D0
+ A4STUI=0D0
+ DO 1170 I=1,2*MSTP(1)
+ SQMQ=PMAS(I,1)**2
+ EPSS=4D0*SQMQ/SH
+ EPST=4D0*SQMQ/TH
+ EPSU=4D0*SQMQ/UH
+ EPSH=4D0*SQMQ/SQMH
+ IF(EPSH.LT.1.D-6) GOTO 1170
+ CALL PYWAUX(1,EPSS,W1SR,W1SI)
+ CALL PYWAUX(1,EPST,W1TR,W1TI)
+ CALL PYWAUX(1,EPSU,W1UR,W1UI)
+ CALL PYWAUX(1,EPSH,W1HR,W1HI)
+ CALL PYWAUX(2,EPSS,W2SR,W2SI)
+ CALL PYWAUX(2,EPST,W2TR,W2TI)
+ CALL PYWAUX(2,EPSU,W2UR,W2UI)
+ CALL PYWAUX(2,EPSH,W2HR,W2HI)
+ CALL PYI3AU(EPSS,TH/UH,Y3STUR,Y3STUI)
+ CALL PYI3AU(EPSS,UH/TH,Y3SUTR,Y3SUTI)
+ CALL PYI3AU(EPST,SH/UH,Y3TSUR,Y3TSUI)
+ CALL PYI3AU(EPST,UH/SH,Y3TUSR,Y3TUSI)
+ CALL PYI3AU(EPSU,SH/TH,Y3USTR,Y3USTI)
+ CALL PYI3AU(EPSU,TH/SH,Y3UTSR,Y3UTSI)
+ CALL PYI3AU(EPSH,SQMH/SH*TH/UH,YHSTUR,YHSTUI)
+ CALL PYI3AU(EPSH,SQMH/SH*UH/TH,YHSUTR,YHSUTI)
+ CALL PYI3AU(EPSH,SQMH/TH*SH/UH,YHTSUR,YHTSUI)
+ CALL PYI3AU(EPSH,SQMH/TH*UH/SH,YHTUSR,YHTUSI)
+ CALL PYI3AU(EPSH,SQMH/UH*SH/TH,YHUSTR,YHUSTI)
+ CALL PYI3AU(EPSH,SQMH/UH*TH/SH,YHUTSR,YHUTSI)
+ W3STUR=YHSTUR-Y3STUR-Y3UTSR
+ W3STUI=YHSTUI-Y3STUI-Y3UTSI
+ W3SUTR=YHSUTR-Y3SUTR-Y3TUSR
+ W3SUTI=YHSUTI-Y3SUTI-Y3TUSI
+ W3TSUR=YHTSUR-Y3TSUR-Y3USTR
+ W3TSUI=YHTSUI-Y3TSUI-Y3USTI
+ W3TUSR=YHTUSR-Y3TUSR-Y3SUTR
+ W3TUSI=YHTUSI-Y3TUSI-Y3SUTI
+ W3USTR=YHUSTR-Y3USTR-Y3TSUR
+ W3USTI=YHUSTI-Y3USTI-Y3TSUI
+ W3UTSR=YHUTSR-Y3UTSR-Y3STUR
+ W3UTSI=YHUTSI-Y3UTSI-Y3STUI
+ B2STUR=SQMQ/SQMH**2*(SH*(UH-SH)/(SH+UH)+2D0*TH*UH*
+ & (UH+2D0*SH)/(SH+UH)**2*(W1TR-W1HR)+(SQMQ-SH/4D0)*
+ & (0.5D0*W2SR+0.5D0*W2HR-W2TR+W3STUR)+SH2*(2D0*SQMQ/
+ & (SH+UH)**2-0.5D0/(SH+UH))*(W2TR-W2HR)+0.5D0*TH*UH/SH*
+ & (W2HR-2D0*W2TR)+0.125D0*(SH-12D0*SQMQ-4D0*TH*UH/SH)*W3TSUR)
+ B2STUI=SQMQ/SQMH**2*(2D0*TH*UH*(UH+2D0*SH)/(SH+UH)**2*
+ & (W1TI-W1HI)+(SQMQ-SH/4D0)*(0.5D0*W2SI+0.5D0*W2HI-W2TI+
+ & W3STUI)+SH2*(2D0*SQMQ/(SH+UH)**2-0.5D0/(SH+UH))*
+ & (W2TI-W2HI)+0.5D0*TH*UH/SH*(W2HI-2D0*W2TI)+0.125D0*
+ & (SH-12D0*SQMQ-4D0*TH*UH/SH)*W3TSUI)
+ B2SUTR=SQMQ/SQMH**2*(SH*(TH-SH)/(SH+TH)+2D0*UH*TH*
+ & (TH+2D0*SH)/(SH+TH)**2*(W1UR-W1HR)+(SQMQ-SH/4D0)*
+ & (0.5D0*W2SR+0.5D0*W2HR-W2UR+W3SUTR)+SH2*(2D0*SQMQ/
+ & (SH+TH)**2-0.5D0/(SH+TH))*(W2UR-W2HR)+0.5D0*UH*TH/SH*
+ & (W2HR-2D0*W2UR)+0.125D0*(SH-12D0*SQMQ-4D0*UH*TH/SH)*W3USTR)
+ B2SUTI=SQMQ/SQMH**2*(2D0*UH*TH*(TH+2D0*SH)/(SH+TH)**2*
+ & (W1UI-W1HI)+(SQMQ-SH/4D0)*(0.5D0*W2SI+0.5D0*W2HI-W2UI+
+ & W3SUTI)+SH2*(2D0*SQMQ/(SH+TH)**2-0.5D0/(SH+TH))*
+ & (W2UI-W2HI)+0.5D0*UH*TH/SH*(W2HI-2D0*W2UI)+0.125D0*
+ & (SH-12D0*SQMQ-4D0*UH*TH/SH)*W3USTI)
+ B2TSUR=SQMQ/SQMH**2*(TH*(UH-TH)/(TH+UH)+2D0*SH*UH*
+ & (UH+2D0*TH)/(TH+UH)**2*(W1SR-W1HR)+(SQMQ-TH/4D0)*
+ & (0.5D0*W2TR+0.5D0*W2HR-W2SR+W3TSUR)+TH2*(2D0*SQMQ/
+ & (TH+UH)**2-0.5D0/(TH+UH))*(W2SR-W2HR)+0.5D0*SH*UH/TH*
+ & (W2HR-2D0*W2SR)+0.125D0*(TH-12D0*SQMQ-4D0*SH*UH/TH)*W3STUR)
+ B2TSUI=SQMQ/SQMH**2*(2D0*SH*UH*(UH+2D0*TH)/(TH+UH)**2*
+ & (W1SI-W1HI)+(SQMQ-TH/4D0)*(0.5D0*W2TI+0.5D0*W2HI-W2SI+
+ & W3TSUI)+TH2*(2D0*SQMQ/(TH+UH)**2-0.5D0/(TH+UH))*
+ & (W2SI-W2HI)+0.5D0*SH*UH/TH*(W2HI-2D0*W2SI)+0.125D0*
+ & (TH-12D0*SQMQ-4D0*SH*UH/TH)*W3STUI)
+ B2TUSR=SQMQ/SQMH**2*(TH*(SH-TH)/(TH+SH)+2D0*UH*SH*
+ & (SH+2D0*TH)/(TH+SH)**2*(W1UR-W1HR)+(SQMQ-TH/4D0)*
+ & (0.5D0*W2TR+0.5D0*W2HR-W2UR+W3TUSR)+TH2*(2D0*SQMQ/
+ & (TH+SH)**2-0.5D0/(TH+SH))*(W2UR-W2HR)+0.5D0*UH*SH/TH*
+ & (W2HR-2D0*W2UR)+0.125D0*(TH-12D0*SQMQ-4D0*UH*SH/TH)*W3UTSR)
+ B2TUSI=SQMQ/SQMH**2*(2D0*UH*SH*(SH+2D0*TH)/(TH+SH)**2*
+ & (W1UI-W1HI)+(SQMQ-TH/4D0)*(0.5D0*W2TI+0.5D0*W2HI-W2UI+
+ & W3TUSI)+TH2*(2D0*SQMQ/(TH+SH)**2-0.5D0/(TH+SH))*
+ & (W2UI-W2HI)+0.5D0*UH*SH/TH*(W2HI-2D0*W2UI)+0.125D0*
+ & (TH-12D0*SQMQ-4D0*UH*SH/TH)*W3UTSI)
+ B2USTR=SQMQ/SQMH**2*(UH*(TH-UH)/(UH+TH)+2D0*SH*TH*
+ & (TH+2D0*UH)/(UH+TH)**2*(W1SR-W1HR)+(SQMQ-UH/4D0)*
+ & (0.5D0*W2UR+0.5D0*W2HR-W2SR+W3USTR)+UH2*(2D0*SQMQ/
+ & (UH+TH)**2-0.5D0/(UH+TH))*(W2SR-W2HR)+0.5D0*SH*TH/UH*
+ & (W2HR-2D0*W2SR)+0.125D0*(UH-12D0*SQMQ-4D0*SH*TH/UH)*W3SUTR)
+ B2USTI=SQMQ/SQMH**2*(2D0*SH*TH*(TH+2D0*UH)/(UH+TH)**2*
+ & (W1SI-W1HI)+(SQMQ-UH/4D0)*(0.5D0*W2UI+0.5D0*W2HI-W2SI+
+ & W3USTI)+UH2*(2D0*SQMQ/(UH+TH)**2-0.5D0/(UH+TH))*
+ & (W2SI-W2HI)+0.5D0*SH*TH/UH*(W2HI-2D0*W2SI)+0.125D0*
+ & (UH-12D0*SQMQ-4D0*SH*TH/UH)*W3SUTI)
+ B2UTSR=SQMQ/SQMH**2*(UH*(SH-UH)/(UH+SH)+2D0*TH*SH*
+ & (SH+2D0*UH)/(UH+SH)**2*(W1TR-W1HR)+(SQMQ-UH/4D0)*
+ & (0.5D0*W2UR+0.5D0*W2HR-W2TR+W3UTSR)+UH2*(2D0*SQMQ/
+ & (UH+SH)**2-0.5D0/(UH+SH))*(W2TR-W2HR)+0.5D0*TH*SH/UH*
+ & (W2HR-2D0*W2TR)+0.125D0*(UH-12D0*SQMQ-4D0*TH*SH/UH)*W3TUSR)
+ B2UTSI=SQMQ/SQMH**2*(2D0*TH*SH*(SH+2D0*UH)/(UH+SH)**2*
+ & (W1TI-W1HI)+(SQMQ-UH/4D0)*(0.5D0*W2UI+0.5D0*W2HI-W2TI+
+ & W3UTSI)+UH2*(2D0*SQMQ/(UH+SH)**2-0.5D0/(UH+SH))*
+ & (W2TI-W2HI)+0.5D0*TH*SH/UH*(W2HI-2D0*W2TI)+0.125D0*
+ & (UH-12D0*SQMQ-4D0*TH*SH/UH)*W3TUSI)
+ B4STUR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
+ & (W2SR-W2HR+W3STUR))
+ B4STUI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2SI-W2HI+W3STUI)
+ B4TUSR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
+ & (W2TR-W2HR+W3TUSR))
+ B4TUSI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2TI-W2HI+W3TUSI)
+ B4USTR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
+ & (W2UR-W2HR+W3USTR))
+ B4USTI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2UI-W2HI+W3USTI)
+ A2STUR=A2STUR+B2STUR+B2SUTR
+ A2STUI=A2STUI+B2STUI+B2SUTI
+ A2USTR=A2USTR+B2USTR+B2UTSR
+ A2USTI=A2USTI+B2USTI+B2UTSI
+ A2TUSR=A2TUSR+B2TUSR+B2TSUR
+ A2TUSI=A2TUSI+B2TUSI+B2TSUI
+ A4STUR=A4STUR+B4STUR+B4USTR+B4TUSR
+ A4STUI=A4STUI+B4STUI+B4USTI+B4TUSI
+ 1170 CONTINUE
+ FACGH=COMFAC*FACA*3D0/(128D0*PARU(1)**2)*AEM/XW*AS**3*
+ & SQMH/SQMW*SQMH**3/(SH*TH*UH)*(A2STUR**2+A2STUI**2+A2USTR**2+
+ & A2USTI**2+A2TUSR**2+A2TUSI**2+A4STUR**2+A4STUI**2)
+ FACGH=FACGH*WIDS(25,2)
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1180
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGH
+ 1180 CONTINUE
+
+ ELSEIF(ISUB.EQ.114.OR.ISUB.EQ.115) THEN
+C...g + g -> gamma + gamma or g + g -> g + gamma
+ A0STUR=0D0
+ A0STUI=0D0
+ A0TSUR=0D0
+ A0TSUI=0D0
+ A0UTSR=0D0
+ A0UTSI=0D0
+ A1STUR=0D0
+ A1STUI=0D0
+ A2STUR=0D0
+ A2STUI=0D0
+ ALST=LOG(-SH/TH)
+ ALSU=LOG(-SH/UH)
+ ALTU=LOG(TH/UH)
+ IMAX=2*MSTP(1)
+ IF(MSTP(38).GE.1.AND.MSTP(38).LE.8) IMAX=MSTP(38)
+ DO 1190 I=1,IMAX
+ EI=KCHG(IABS(I),1)/3D0
+ EIWT=EI**2
+ IF(ISUB.EQ.115) EIWT=EI
+ SQMQ=PMAS(I,1)**2
+ EPSS=4D0*SQMQ/SH
+ EPST=4D0*SQMQ/TH
+ EPSU=4D0*SQMQ/UH
+ IF((MSTP(38).GE.1.AND.MSTP(38).LE.8).OR.EPSS.LT.1.D-4) THEN
+ B0STUR=1D0+(TH-UH)/SH*ALTU+0.5D0*(TH2+UH2)/SH2*(ALTU**2+
+ & PARU(1)**2)
+ B0STUI=0D0
+ B0TSUR=1D0+(SH-UH)/TH*ALSU+0.5D0*(SH2+UH2)/TH2*ALSU**2
+ B0TSUI=-PARU(1)*((SH-UH)/TH+(SH2+UH2)/TH2*ALSU)
+ B0UTSR=1D0+(SH-TH)/UH*ALST+0.5D0*(SH2+TH2)/UH2*ALST**2
+ B0UTSI=-PARU(1)*((SH-TH)/UH+(SH2+TH2)/UH2*ALST)
+ B1STUR=-1D0
+ B1STUI=0D0
+ B2STUR=-1D0
+ B2STUI=0D0
+ ELSE
+ CALL PYWAUX(1,EPSS,W1SR,W1SI)
+ CALL PYWAUX(1,EPST,W1TR,W1TI)
+ CALL PYWAUX(1,EPSU,W1UR,W1UI)
+ CALL PYWAUX(2,EPSS,W2SR,W2SI)
+ CALL PYWAUX(2,EPST,W2TR,W2TI)
+ CALL PYWAUX(2,EPSU,W2UR,W2UI)
+ CALL PYI3AU(EPSS,TH/UH,Y3STUR,Y3STUI)
+ CALL PYI3AU(EPSS,UH/TH,Y3SUTR,Y3SUTI)
+ CALL PYI3AU(EPST,SH/UH,Y3TSUR,Y3TSUI)
+ CALL PYI3AU(EPST,UH/SH,Y3TUSR,Y3TUSI)
+ CALL PYI3AU(EPSU,SH/TH,Y3USTR,Y3USTI)
+ CALL PYI3AU(EPSU,TH/SH,Y3UTSR,Y3UTSI)
+ B0STUR=1D0+(1D0+2D0*TH/SH)*W1TR+(1D0+2D0*UH/SH)*W1UR+
+ & 0.5D0*((TH2+UH2)/SH2-EPSS)*(W2TR+W2UR)-
+ & 0.25D0*EPST*(1D0-0.5D0*EPSS)*(Y3SUTR+Y3TUSR)-
+ & 0.25D0*EPSU*(1D0-0.5D0*EPSS)*(Y3STUR+Y3UTSR)+
+ & 0.25D0*(-2D0*(TH2+UH2)/SH2+4D0*EPSS+EPST+EPSU+
+ & 0.5D0*EPST*EPSU)*(Y3TSUR+Y3USTR)
+ B0STUI=(1D0+2D0*TH/SH)*W1TI+(1D0+2D0*UH/SH)*W1UI+
+ & 0.5D0*((TH2+UH2)/SH2-EPSS)*(W2TI+W2UI)-
+ & 0.25D0*EPST*(1D0-0.5D0*EPSS)*(Y3SUTI+Y3TUSI)-
+ & 0.25D0*EPSU*(1D0-0.5D0*EPSS)*(Y3STUI+Y3UTSI)+
+ & 0.25D0*(-2D0*(TH2+UH2)/SH2+4D0*EPSS+EPST+EPSU+
+ & 0.5D0*EPST*EPSU)*(Y3TSUI+Y3USTI)
+ B0TSUR=1D0+(1D0+2D0*SH/TH)*W1SR+(1D0+2D0*UH/TH)*W1UR+
+ & 0.5D0*((SH2+UH2)/TH2-EPST)*(W2SR+W2UR)-
+ & 0.25D0*EPSS*(1D0-0.5D0*EPST)*(Y3TUSR+Y3SUTR)-
+ & 0.25D0*EPSU*(1D0-0.5D0*EPST)*(Y3TSUR+Y3USTR)+
+ & 0.25D0*(-2D0*(SH2+UH2)/TH2+4D0*EPST+EPSS+EPSU+
+ & 0.5D0*EPSS*EPSU)*(Y3STUR+Y3UTSR)
+ B0TSUI=(1D0+2D0*SH/TH)*W1SI+(1D0+2D0*UH/TH)*W1UI+
+ & 0.5D0*((SH2+UH2)/TH2-EPST)*(W2SI+W2UI)-
+ & 0.25D0*EPSS*(1D0-0.5D0*EPST)*(Y3TUSI+Y3SUTI)-
+ & 0.25D0*EPSU*(1D0-0.5D0*EPST)*(Y3TSUI+Y3USTI)+
+ & 0.25D0*(-2D0*(SH2+UH2)/TH2+4D0*EPST+EPSS+EPSU+
+ & 0.5D0*EPSS*EPSU)*(Y3STUI+Y3UTSI)
+ B0UTSR=1D0+(1D0+2D0*TH/UH)*W1TR+(1D0+2D0*SH/UH)*W1SR+
+ & 0.5D0*((TH2+SH2)/UH2-EPSU)*(W2TR+W2SR)-
+ & 0.25D0*EPST*(1D0-0.5D0*EPSU)*(Y3USTR+Y3TSUR)-
+ & 0.25D0*EPSS*(1D0-0.5D0*EPSU)*(Y3UTSR+Y3STUR)+
+ & 0.25D0*(-2D0*(TH2+SH2)/UH2+4D0*EPSU+EPST+EPSS+
+ & 0.5D0*EPST*EPSS)*(Y3TUSR+Y3SUTR)
+ B0UTSI=(1D0+2D0*TH/UH)*W1TI+(1D0+2D0*SH/UH)*W1SI+
+ & 0.5D0*((TH2+SH2)/UH2-EPSU)*(W2TI+W2SI)-
+ & 0.25D0*EPST*(1D0-0.5D0*EPSU)*(Y3USTI+Y3TSUI)-
+ & 0.25D0*EPSS*(1D0-0.5D0*EPSU)*(Y3UTSI+Y3STUI)+
+ & 0.25D0*(-2D0*(TH2+SH2)/UH2+4D0*EPSU+EPST+EPSS+
+ & 0.5D0*EPST*EPSS)*(Y3TUSI+Y3SUTI)
+ B1STUR=-1D0-0.25D0*(EPSS+EPST+EPSU)*(W2SR+W2TR+W2UR)+
+ & 0.25D0*(EPSU+0.5D0*EPSS*EPST)*(Y3SUTR+Y3TUSR)+
+ & 0.25D0*(EPST+0.5D0*EPSS*EPSU)*(Y3STUR+Y3UTSR)+
+ & 0.25D0*(EPSS+0.5D0*EPST*EPSU)*(Y3TSUR+Y3USTR)
+ B1STUI=-0.25D0*(EPSS+EPST+EPSU)*(W2SI+W2TI+W2UI)+
+ & 0.25D0*(EPSU+0.5D0*EPSS*EPST)*(Y3SUTI+Y3TUSI)+
+ & 0.25D0*(EPST+0.5D0*EPSS*EPSU)*(Y3STUI+Y3UTSI)+
+ & 0.25D0*(EPSS+0.5D0*EPST*EPSU)*(Y3TSUI+Y3USTI)
+ B2STUR=-1D0+0.125D0*EPSS*EPST*(Y3SUTR+Y3TUSR)+
+ & 0.125D0*EPSS*EPSU*(Y3STUR+Y3UTSR)+
+ & 0.125D0*EPST*EPSU*(Y3TSUR+Y3USTR)
+ B2STUI=0.125D0*EPSS*EPST*(Y3SUTI+Y3TUSI)+
+ & 0.125D0*EPSS*EPSU*(Y3STUI+Y3UTSI)+
+ & 0.125D0*EPST*EPSU*(Y3TSUI+Y3USTI)
+ ENDIF
+ A0STUR=A0STUR+EIWT*B0STUR
+ A0STUI=A0STUI+EIWT*B0STUI
+ A0TSUR=A0TSUR+EIWT*B0TSUR
+ A0TSUI=A0TSUI+EIWT*B0TSUI
+ A0UTSR=A0UTSR+EIWT*B0UTSR
+ A0UTSI=A0UTSI+EIWT*B0UTSI
+ A1STUR=A1STUR+EIWT*B1STUR
+ A1STUI=A1STUI+EIWT*B1STUI
+ A2STUR=A2STUR+EIWT*B2STUR
+ A2STUI=A2STUI+EIWT*B2STUI
+ 1190 CONTINUE
+ ASQSUM=A0STUR**2+A0STUI**2+A0TSUR**2+A0TSUI**2+A0UTSR**2+
+ & A0UTSI**2+4D0*A1STUR**2+4D0*A1STUI**2+A2STUR**2+A2STUI**2
+ FACGG=COMFAC*FACA/(16D0*PARU(1)**2)*AS**2*AEM**2*ASQSUM
+ FACGP=COMFAC*FACA*5D0/(192D0*PARU(1)**2)*AS**3*AEM*ASQSUM
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1200
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ IF(ISUB.EQ.114) SIGH(NCHN)=0.5D0*FACGG
+ IF(ISUB.EQ.115) SIGH(NCHN)=FACGP
+ 1200 CONTINUE
+
+ ELSEIF(ISUB.EQ.116) THEN
+C...g + g -> gamma + Z0
+
+ ELSEIF(ISUB.EQ.117) THEN
+C...g + g -> Z0 + Z0
+
+ ELSEIF(ISUB.EQ.118) THEN
+C...g + g -> W+ + W-
+
+ ENDIF
+
+C...G: 2 -> 3, tree diagrams
+
+ ELSEIF(ISUB.LE.140) THEN
+ IF(ISUB.EQ.121) THEN
+C...g + g -> Q + Qbar + h0
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1210
+ IA=KFPR(ISUBSV,2)
+ PMF=PMAS(IA,1)
+ FACQQH=COMFAC*(4D0*PARU(1)*AEM/XW)*(4D0*PARU(1)*AS)**2*
+ & (0.5D0*PMF/PMAS(24,1))**2
+ IF(IA.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) FACQQH=
+ & FACQQH*(LOG(MAX(4D0,PARP(37)**2*PMF**2/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
+ WID2=1D0
+ IF(IA.EQ.6.OR.IA.EQ.7.OR.IA.EQ.8) WID2=WIDS(IA,1)
+ FACQQH=FACQQH*WID2
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ IKFI=1
+ IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
+ IF(IA.GT.10) IKFI=3
+ FACQQH=FACQQH*PARU(150+10*IHIGG+IKFI)**2
+ ENDIF
+ CALL PYQQBH(WTQQBH)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQH*WTQQBH*FACBW
+ 1210 CONTINUE
+
+ ELSEIF(ISUB.EQ.122) THEN
+C...q + qbar -> Q + Qbar + h0
+ IA=KFPR(ISUBSV,2)
+ PMF=PMAS(IA,1)
+ FACQQH=COMFAC*(4D0*PARU(1)*AEM/XW)*(4D0*PARU(1)*AS)**2*
+ & (0.5D0*PMF/PMAS(24,1))**2
+ IF(IA.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) FACQQH=
+ & FACQQH*(LOG(MAX(4D0,PARP(37)**2*PMF**2/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
+ WID2=1D0
+ IF(IA.EQ.6.OR.IA.EQ.7.OR.IA.EQ.8) WID2=WIDS(IA,1)
+ FACQQH=FACQQH*WID2
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
+ IKFI=1
+ IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
+ IF(IA.GT.10) IKFI=3
+ FACQQH=FACQQH*PARU(150+10*IHIGG+IKFI)**2
+ ENDIF
+ CALL PYQQBH(WTQQBH)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ DO 1220 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1220
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQH*WTQQBH*FACBW
+ 1220 CONTINUE
+
+ ELSEIF(ISUB.EQ.123) THEN
+C...f + f' -> f + f' + h0 (or H0, or A0) (Z0 + Z0 -> h0 as
+C...inner process)
+ FACNOR=COMFAC*(4D0*PARU(1)*AEM/(XW*XW1))**3*SQMZ/32D0
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACNOR=FACNOR*
+ & PARU(154+10*IHIGG)**2
+ FACPRP=1D0/((VINT(215)-VINT(204)**2)*
+ & (VINT(216)-VINT(209)**2))**2
+ FACZZ1=FACNOR*FACPRP*(0.5D0*TAUP*VINT(2))*VINT(219)
+ FACZZ2=FACNOR*FACPRP*VINT(217)*VINT(218)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ DO 1240 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1240
+ IA=IABS(I)
+ DO 1230 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1230
+ JA=IABS(J)
+ EI=KCHG(IA,1)*ISIGN(1,I)/3D0
+ AI=SIGN(1D0,KCHG(IA,1)+0.5D0)*ISIGN(1,I)
+ VI=AI-4D0*EI*XWV
+ EJ=KCHG(JA,1)*ISIGN(1,J)/3D0
+ AJ=SIGN(1D0,KCHG(JA,1)+0.5D0)*ISIGN(1,J)
+ VJ=AJ-4D0*EJ*XWV
+ FACLR1=(VI**2+AI**2)*(VJ**2+AJ**2)+4D0*VI*AI*VJ*AJ
+ FACLR2=(VI**2+AI**2)*(VJ**2+AJ**2)-4D0*VI*AI*VJ*AJ
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=(FACLR1*FACZZ1+FACLR2*FACZZ2)*FACBW
+ 1230 CONTINUE
+ 1240 CONTINUE
+
+ ELSEIF(ISUB.EQ.124) THEN
+C...f + f' -> f" + f"' + h0 (or H0, or A0) (W+ + W- -> h0 as
+C...inner process)
+ FACNOR=COMFAC*(4D0*PARU(1)*AEM/XW)**3*SQMW
+ IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACNOR=FACNOR*
+ & PARU(155+10*IHIGG)**2
+ FACPRP=1D0/((VINT(215)-VINT(204)**2)*
+ & (VINT(216)-VINT(209)**2))**2
+ FACWW=FACNOR*FACPRP*(0.5D0*TAUP*VINT(2))*VINT(219)
+ CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
+ IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
+ & FACBW=0D0
+ DO 1260 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1260
+ EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
+ DO 1250 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1250
+ EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
+ IF(EI*EJ.GT.0D0) GOTO 1250
+ FACLR=VINT(180+I)*VINT(180+J)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACLR*FACWW*FACBW
+ 1250 CONTINUE
+ 1260 CONTINUE
+
+ ELSEIF(ISUB.EQ.131) THEN
+C...g + g -> Z0 + q + qbar
+
+ ENDIF
+
+C...H: 2 -> 1, tree diagrams, non-standard model processes
+
+ ELSEIF(ISUB.LE.160) THEN
+ IF(ISUB.EQ.141) THEN
+C...f + fbar -> gamma*/Z0/Z'0
+ SQMZP=PMAS(32,1)**2
+ MINT(61)=2
+ CALL PYWIDT(32,SH,WDTP,WDTE)
+ HP0=AEM/3D0*SH
+ HP1=AEM/3D0*XWC*SH
+ HP2=HP1
+ HS=SHR*VINT(117)
+ HSP=SHR*WDTP(0)
+ FACZP=4D0*COMFAC*3D0
+ DO 1270 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1270
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI)
+ VI=AI-4D0*EI*XWV
+ IF(IABS(I).LT.10) THEN
+ VPI=PARU(123-2*MOD(IABS(I),2))
+ API=PARU(124-2*MOD(IABS(I),2))
+ ELSE
+ VPI=PARU(127-2*MOD(IABS(I),2))
+ API=PARU(128-2*MOD(IABS(I),2))
+ ENDIF
+ HI0=HP0
+ IF(IABS(I).LE.10) HI0=HI0*FACA/3D0
+ HI1=HP1
+ IF(IABS(I).LE.10) HI1=HI1*FACA/3D0
+ HI2=HP2
+ IF(IABS(I).LE.10) HI2=HI2*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZP*(EI**2/SH2*HI0*HP0*VINT(111)+EI*VI*
+ & (1D0-SQMZ/SH)/((SH-SQMZ)**2+HS**2)*(HI0*HP1+HI1*HP0)*
+ & VINT(112)+EI*VPI*(1D0-SQMZP/SH)/((SH-SQMZP)**2+HSP**2)*
+ & (HI0*HP2+HI2*HP0)*VINT(113)+(VI**2+AI**2)/
+ & ((SH-SQMZ)**2+HS**2)*HI1*HP1*VINT(114)+(VI*VPI+AI*API)*
+ & ((SH-SQMZ)*(SH-SQMZP)+HS*HSP)/(((SH-SQMZ)**2+HS**2)*
+ & ((SH-SQMZP)**2+HSP**2))*(HI1*HP2+HI2*HP1)*VINT(115)+
+ & (VPI**2+API**2)/((SH-SQMZP)**2+HSP**2)*HI2*HP2*VINT(116))
+ 1270 CONTINUE
+
+ ELSEIF(ISUB.EQ.142) THEN
+C...f + fbar' -> W'+/-
+ SQMWP=PMAS(34,1)**2
+ CALL PYWIDT(34,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMWP)**2+HS**2)*3D0
+ HP=AEM/(24D0*XW)*SH
+ DO 1290 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1290
+ IA=IABS(I)
+ DO 1280 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1280
+ JA=IABS(J)
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1280
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 1280
+ KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ HI=HP*(PARU(133)**2+PARU(134)**2)
+ IF(IA.LE.10) HI=HP*(PARU(131)**2+PARU(132)**2)*
+ & VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))
+ SIGH(NCHN)=HI*FACBW*HF
+ 1280 CONTINUE
+ 1290 CONTINUE
+
+ ELSEIF(ISUB.EQ.143) THEN
+C...f + fbar' -> H+/-
+ SQMHC=PMAS(37,1)**2
+ CALL PYWIDT(37,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMHC)**2+HS**2)
+ HP=AEM/(8D0*XW)*SH/SQMW*SH
+ DO 1310 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1310
+ IA=IABS(I)
+ IM=(MOD(IA,10)+1)/2
+ DO 1300 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1300
+ JA=IABS(J)
+ JM=(MOD(JA,10)+1)/2
+ IF(I*J.GT.0.OR.IA.EQ.JA.OR.IM.NE.JM) GOTO 1300
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 1300
+ IF(MOD(IA,2).EQ.0) THEN
+ IU=IA
+ IL=JA
+ ELSE
+ IU=JA
+ IL=IA
+ ENDIF
+ RML=PMAS(IL,1)**2/SH
+ RMU=PMAS(IU,1)**2/SH
+ IF(IL.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) RML=
+ & RML*(LOG(MAX(4D0,PARP(37)**2*RML*SH/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-
+ & 2D0*MSTU(118)))
+ HI=HP*(RML*PARU(141)**2+RMU/PARU(141)**2)
+ IF(IA.LE.10) HI=HI*FACA/3D0
+ KCHHC=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHHC)/2)+WDTE(0,4))
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1300 CONTINUE
+ 1310 CONTINUE
+
+ ELSEIF(ISUB.EQ.144) THEN
+C...f + fbar' -> R
+ SQMR=PMAS(40,1)**2
+ CALL PYWIDT(40,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMR)**2+HS**2)*3D0
+ HP=AEM/(12D0*XW)*SH
+ DO 1330 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1330
+ IA=IABS(I)
+ DO 1320 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1320
+ JA=IABS(J)
+ IF(I*J.GT.0.OR.IABS(IA-JA).NE.2) GOTO 1320
+ HI=HP
+ IF(IA.LE.10) HI=HI*FACA/3D0
+ HF=SHR*(WDTE(0,1)+WDTE(0,(10-(I+J))/4)+WDTE(0,4))
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1320 CONTINUE
+ 1330 CONTINUE
+
+ ELSEIF(ISUB.EQ.145) THEN
+C...q + l -> LQ (leptoquark)
+ SQMLQ=PMAS(39,1)**2
+ CALL PYWIDT(39,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=4D0*COMFAC/((SH-SQMLQ)**2+HS**2)
+ IF(ABS(SHR-PMAS(39,1)).GT.PARP(48)*PMAS(39,2)) FACBW=0D0
+ HP=AEM/4D0*SH
+ KFLQQ=KFDP(MDCY(39,2),1)
+ KFLQL=KFDP(MDCY(39,2),2)
+ DO 1350 I=MMIN1,MMAX1
+ IF(KFAC(1,I).EQ.0) GOTO 1350
+ IA=IABS(I)
+ IF(IA.NE.KFLQQ.AND.IA.NE.IABS(KFLQL)) GOTO 1350
+ DO 1340 J=MMIN2,MMAX2
+ IF(KFAC(2,J).EQ.0) GOTO 1340
+ JA=IABS(J)
+ IF(JA.NE.KFLQQ.AND.JA.NE.IABS(KFLQL)) GOTO 1340
+ IF(I*J.NE.KFLQQ*KFLQL) GOTO 1340
+ IF(JA.EQ.IA) GOTO 1340
+ IF(IA.EQ.KFLQQ) KCHLQ=ISIGN(1,I)
+ IF(JA.EQ.KFLQQ) KCHLQ=ISIGN(1,J)
+ HI=HP*PARU(151)
+ HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHLQ)/2)+WDTE(0,4))
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1340 CONTINUE
+ 1350 CONTINUE
+
+ ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
+C...d + g -> d* and u + g -> u* (excited quarks)
+ KFQSTR=KFPR(ISUB,1)
+ KCQSTR=PYCOMP(KFQSTR)
+ KFQEXC=MOD(KFQSTR,KEXCIT)
+ CALL PYWIDT(KFQSTR,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=COMFAC/((SH-PMAS(KCQSTR,1)**2)**2+HS**2)
+ FACBW=FACBW*AS*PARU(159)**2*SH/(3D0*PARU(155)**2)
+ IF(ABS(SHR-PMAS(KCQSTR,1)).GT.PARP(48)*PMAS(KCQSTR,2))
+ & FACBW=0D0
+ HP=SH
+ DO 1370 I=-KFQEXC,KFQEXC,2*KFQEXC
+ DO 1360 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1360
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1360
+ HI=HP
+ IF(I.GT.0) HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ IF(I.LT.0) HF=SHR*(WDTE(0,1)+WDTE(0,3)+WDTE(0,4))
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1360 CONTINUE
+ 1370 CONTINUE
+
+ ELSEIF(ISUB.EQ.149) THEN
+C...g + g -> eta_techni
+ CALL PYWIDT(38,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=COMFAC*0.5D0/((SH-PMAS(38,1)**2)**2+HS**2)
+ IF(ABS(SHR-PMAS(38,1)).GT.PARP(48)*PMAS(38,2)) FACBW=0D0
+ HP=SH
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1380
+ HI=HP*WDTP(3)
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1380 CONTINUE
+
+ ENDIF
+
+C...I: 2 -> 2, tree diagrams, non-standard model processes
+
+ ELSEIF(ISUB.LE.200) THEN
+ IF(ISUB.EQ.161) THEN
+C...f + g -> f' + H+/- (b + g -> t + H+/- only)
+C...(choice of only b and t to avoid kinematics problems)
+ SQMHC=PMAS(37,1)**2
+ FHCQ=COMFAC*FACA*AS*AEM/XW*1D0/24
+ DO 1400 I=MMINA,MMAXA
+ IA=IABS(I)
+ IF(IA.NE.5) GOTO 1400
+ SQML=PMAS(IA,1)**2
+ IF(IA.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) SQML=SQML*
+ & (LOG(MAX(4D0,PARP(37)**2*SQML/PARU(117)**2))/
+ & LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
+ IUA=IA+MOD(IA,2)
+ SQMQ=PMAS(IUA,1)**2
+ FACHCQ=FHCQ*(SQML*PARU(141)**2+SQMQ/PARU(141)**2)/SQMW*
+ & (SH/(SQMQ-UH)+2D0*SQMQ*(SQMHC-UH)/(SQMQ-UH)**2+(SQMQ-UH)/SH+
+ & 2D0*SQMQ/(SQMQ-UH)+2D0*(SQMHC-UH)/(SQMQ-UH)*
+ & (SQMHC-SQMQ-SH)/SH)
+ KCHHC=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
+ DO 1390 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1390
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,1).EQ.0) GOTO 1390
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACHCQ*WIDS(37,(5-KCHHC)/2)
+ 1390 CONTINUE
+ 1400 CONTINUE
+
+ ELSEIF(ISUB.EQ.162) THEN
+C...q + g -> LQ + lbar; LQ=leptoquark
+ SQMLQ=PMAS(39,1)**2
+ FACLQ=COMFAC*FACA*PARU(151)*(AS*AEM/6D0)*(-TH/SH)*
+ & (UH2+SQMLQ**2)/(UH-SQMLQ)**2
+ KFLQQ=KFDP(MDCY(39,2),1)
+ DO 1420 I=MMINA,MMAXA
+ IF(IABS(I).NE.KFLQQ) GOTO 1420
+ KCHLQ=ISIGN(1,I)
+ DO 1410 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1410
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1410
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACLQ*WIDS(39,(5-KCHLQ)/2)
+ 1410 CONTINUE
+ 1420 CONTINUE
+
+ ELSEIF(ISUB.EQ.163) THEN
+C...g + g -> LQ + LQbar; LQ=leptoquark
+ SQMLQ=PMAS(39,1)**2
+ FACLQ=COMFAC*FACA*WIDS(39,1)*(AS**2/2D0)*
+ & (7D0/48D0+3D0*(UH-TH)**2/(16D0*SH2))*(1D0+2D0*SQMLQ*TH/
+ & (TH-SQMLQ)**2+2D0*SQMLQ*UH/(UH-SQMLQ)**2+4D0*SQMLQ**2/
+ & ((TH-SQMLQ)*(UH-SQMLQ)))
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1430
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+C...Since don't know proper colour flow, randomize between alternatives
+ ISIG(NCHN,3)=INT(1.5D0+PYR(0))
+ SIGH(NCHN)=FACLQ
+ 1430 CONTINUE
+
+ ELSEIF(ISUB.EQ.164) THEN
+C...q + qbar -> LQ + LQbar; LQ=leptoquark
+ SQMLQ=PMAS(39,1)**2
+ FACLQA=COMFAC*WIDS(39,1)*(AS**2/9D0)*
+ & (SH*(SH-4D0*SQMLQ)-(UH-TH)**2)/SH2
+ FACLQS=COMFAC*WIDS(39,1)*((PARU(151)**2*AEM**2/8D0)*
+ & (-SH*TH-(SQMLQ-TH)**2)/TH2+(PARU(151)*AEM*AS/18D0)*
+ & ((SQMLQ-TH)*(UH-TH)+SH*(SQMLQ+TH))/(SH*TH))
+ KFLQQ=KFDP(MDCY(39,2),1)
+ DO 1440 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1440
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACLQA
+ IF(IABS(I).EQ.KFLQQ) SIGH(NCHN)=FACLQA+FACLQS
+ 1440 CONTINUE
+
+ ELSEIF(ISUB.EQ.165) THEN
+C...q + qbar -> l+ + l- (including contact term for compositeness)
+ ZRATR=XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ ZRATI=XWC*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ KFF=IABS(KFPR(ISUB,1))
+ EF=KCHG(KFF,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ VALF=VF+AF
+ VARF=VF-AF
+ FCOF=1D0
+ IF(KFF.LE.10) FCOF=3D0
+ WID2=1D0
+ IF(KFF.EQ.6) WID2=WIDS(6,1)
+ IF(KFF.EQ.7.OR.KFF.EQ.8) WID2=WIDS(KFF,1)
+ IF(KFF.EQ.17.OR.KFF.EQ.18) WID2=WIDS(KFF,1)
+ DO 1450 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1450
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=VI+AI
+ VARI=VI-AI
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ IF((MSTP(5).EQ.1.AND.IABS(I).LE.2).OR.MSTP(5).EQ.2) THEN
+ FGZA=(EI*EF+VALI*VALF*ZRATR+PARU(156)*SH/
+ & (AEM*PARU(155)**2))**2+(VALI*VALF*ZRATI)**2+
+ & (EI*EF+VARI*VARF*ZRATR)**2+(VARI*VARF*ZRATI)**2
+ ELSE
+ FGZA=(EI*EF+VALI*VALF*ZRATR)**2+(VALI*VALF*ZRATI)**2+
+ & (EI*EF+VARI*VARF*ZRATR)**2+(VARI*VARF*ZRATI)**2
+ ENDIF
+ FGZB=(EI*EF+VALI*VARF*ZRATR)**2+(VALI*VARF*ZRATI)**2+
+ & (EI*EF+VARI*VALF*ZRATR)**2+(VARI*VALF*ZRATI)**2
+ FGZAB=AEM**2*(FGZA*UH2/SH2+FGZB*TH2/SH2)
+ IF((MSTP(5).EQ.3.AND.IABS(I).EQ.2).OR.(MSTP(5).EQ.4.AND.
+ & MOD(IABS(I),2).EQ.0)) FGZAB=FGZAB+SH2/(2D0*PARU(155)**4)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=COMFAC*FCOI*FCOF*FGZAB*WID2
+ 1450 CONTINUE
+
+ ELSEIF(ISUB.EQ.166) THEN
+C...q + q'bar -> l + nu_l (including contact term for compositeness)
+ WFAC=(1D0/4D0)*(AEM/XW)**2*UH2/((SH-SQMW)**2+GMMW**2)
+ WCIFAC=WFAC+SH2/(4D0*PARU(155)**4)
+ KFF=IABS(KFPR(ISUB,1))
+ FCOF=1D0
+ IF(KFF.LE.10) FCOF=3D0
+ DO 1470 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1470
+ IA=IABS(I)
+ DO 1460 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1460
+ JA=IABS(J)
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1460
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 1460
+ FCOI=1D0
+ IF(IA.LE.10) FCOI=VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
+ WID2=1D0
+ IF((I.GT.0.AND.MOD(I,2).EQ.0).OR.(J.GT.0.AND.
+ & MOD(J,2).EQ.0)) THEN
+ IF(KFF.EQ.5) WID2=WIDS(6,2)
+ IF(KFF.EQ.7) WID2=WIDS(8,2)*WIDS(7,3)
+ IF(KFF.EQ.17) WID2=WIDS(18,2)*WIDS(17,3)
+ ELSE
+ IF(KFF.EQ.5) WID2=WIDS(6,3)
+ IF(KFF.EQ.7) WID2=WIDS(8,3)*WIDS(7,2)
+ IF(KFF.EQ.17) WID2=WIDS(18,3)*WIDS(17,2)
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=COMFAC*FCOI*FCOF*WFAC*WID2
+ IF((MSTP(5).EQ.3.AND.IA.LE.2.AND.JA.LE.2).OR.MSTP(5).EQ.4)
+ & SIGH(NCHN)=COMFAC*FCOI*FCOF*WCIFAC*WID2
+ 1460 CONTINUE
+ 1470 CONTINUE
+
+ ELSEIF(ISUB.EQ.167.OR.ISUB.EQ.168) THEN
+C...d + g -> d* and u + g -> u* (excited quarks)
+ KFQSTR=KFPR(ISUB,2)
+ KCQSTR=PYCOMP(KFQSTR)
+ KFQEXC=MOD(KFQSTR,KEXCIT)
+ FACQSA=COMFAC*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)
+ FACQSB=COMFAC*0.25D0*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)*
+ & (1D0+SQM4/SH)*(1D0+CTH)*(1D0+((SH-SQM4)/(SH+SQM4))*CTH)
+C...Propagators: as simulated in PYOFSH and as desired
+ GMMQ=PMAS(KCQSTR,1)*PMAS(KCQSTR,2)
+ HBW4=GMMQ/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQ**2)
+ CALL PYWIDT(KFQSTR,SQM4,WDTP,WDTE)
+ GMMQC=SQRT(SQM4)*WDTP(0)
+ HBW4C=GMMQC/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQC**2)
+ FACQSA=FACQSA*HBW4C/HBW4
+ FACQSB=FACQSB*HBW4C/HBW4
+ DO 1490 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.6.OR.KFAC(1,I).EQ.0) GOTO 1490
+ DO 1480 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.6.OR.KFAC(2,J).EQ.0) GOTO 1480
+ IF(IA.EQ.KFQEXC.AND.I.EQ.J) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=(4D0/3D0)*FACQSA
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=(4D0/3D0)*FACQSA
+ ELSEIF((IA.EQ.KFQEXC.OR.JA.EQ.KFQEXC).AND.I*J.GT.0) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ IF(JA.EQ.KFQEXC) ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQSA
+ ELSEIF(IA.EQ.KFQEXC.AND.I.EQ.-J) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=(8D0/3D0)*FACQSB
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=(8D0/3D0)*FACQSB
+ ELSEIF(I.EQ.-J) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQSB
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQSB
+ ELSEIF(IA.EQ.KFQEXC.OR.JA.EQ.KFQEXC) THEN
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ IF(JA.EQ.KFQEXC) ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQSB
+ ENDIF
+ 1480 CONTINUE
+ 1490 CONTINUE
+
+ ELSEIF(ISUB.EQ.191) THEN
+C...q + qbar -> rho_tech0.
+ SQMRHT=PMAS(54,1)**2
+ CALL PYWIDT(54,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=12D0*COMFAC/((SH-SQMRHT)**2+HS**2)
+ IF(ABS(SHR-PMAS(54,1)).GT.PARP(48)*PMAS(54,2)) FACBW=0D0
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMRHT**2/SH)
+ XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
+ BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ DO 1500 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1500
+ IA=IABS(I)
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ HI=HP*((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
+ & (EI+VARI*BWZR)**2+(VARI*BWZI)**2)
+ IF(IA.LE.10) HI=HI*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1500 CONTINUE
+
+ ELSEIF(ISUB.EQ.192) THEN
+C...q + qbar' -> rho_tech+/-.
+ SQMRHT=PMAS(55,1)**2
+ CALL PYWIDT(55,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=12D0*COMFAC/((SH-SQMRHT)**2+HS**2)
+ IF(ABS(SHR-PMAS(55,1)).GT.PARP(48)*PMAS(55,2)) FACBW=0D0
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMRHT**2/SH)*
+ & (0.25D0/XW**2)*SH**2/((SH-SQMW)**2+GMMW**2)
+ DO 1520 I=MMIN1,MMAX1
+ IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1520
+ IA=IABS(I)
+ DO 1510 J=MMIN2,MMAX2
+ IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1510
+ JA=IABS(J)
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1510
+ IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
+ & GOTO 1510
+ KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
+ HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHR)/2)+WDTE(0,4))
+ HI=HP
+ IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1510 CONTINUE
+ 1520 CONTINUE
+
+ ELSEIF(ISUB.EQ.193) THEN
+C...q + qbar -> omega_tech0.
+ SQMOMT=PMAS(56,1)**2
+ CALL PYWIDT(56,SH,WDTP,WDTE)
+ HS=SHR*WDTP(0)
+ FACBW=12D0*COMFAC/((SH-SQMOMT)**2+HS**2)
+ IF(ABS(SHR-PMAS(56,1)).GT.PARP(48)*PMAS(56,2)) FACBW=0D0
+ HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMOMT**2/SH)*
+ & (2D0*PARP(143)-1D0)**2
+ BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
+ BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
+ DO 1530 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1530
+ IA=IABS(I)
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ HI=HP*((EI-VALI*BWZR)**2+(VALI*BWZI)**2+
+ & (EI-VARI*BWZR)**2+(VARI*BWZI)**2)
+ IF(IA.LE.10) HI=HI*FACA/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=HI*FACBW*HF
+ 1530 CONTINUE
+
+ ELSEIF(ISUB.EQ.194) THEN
+C...f + fbar -> f' + fbar' via s-channel rho_tech and omega_tech.
+ SQMRHT=PMAS(54,1)**2
+ CALL PYWIDT(54,SH,WDTP,WDTE)
+ HSRHT=SHR*WDTP(0)
+ BWRHTR=SQMRHT**2*(SH-SQMRHT)/((SH-SQMRHT)**2+HSRHT**2)
+ BWRHTI=SQMRHT**2*HSRHT/((SH-SQMRHT)**2+HSRHT**2)
+ XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
+ SQMOMT=PMAS(56,1)**2
+ CALL PYWIDT(56,SH,WDTP,WDTE)
+ HSOMT=SHR*WDTP(0)
+ BWOMTR=SQMOMT**2*(SH-SQMOMT)/((SH-SQMOMT)**2+HSOMT**2)
+ BWOMTI=SQMOMT**2*HSOMT/((SH-SQMOMT)**2+HSOMT**2)
+ XWOMT=0.5D0/(1D0-XW)
+ KFF=IABS(KFPR(ISUB,1))
+ EF=KCHG(KFF,1)/3D0
+ AF=SIGN(1D0,EF+0.1D0)
+ VF=AF-4D0*EF*XWV
+ VALF=0.5D0*(VF+AF)
+ VARF=0.5D0*(VF-AF)
+ FCOF=1D0
+ IF(KFF.LE.10) FCOF=3D0
+ WID2=1D0
+ IF(KFF.GE.6.AND.KFF.LE.8) WID2=WIDS(KFF,1)
+ IF(KFF.EQ.17.OR.KFF.EQ.18) WID2=WIDS(KFF,1)
+ ALPRHT=2.91D0*(3D0/PARP(144))
+ FACTC=COMFAC*(AEM**2/(ALPRHT*SH2))**2*FCOF*WID2
+ BWZ=SH/(SH-SQMZ)
+ ALEFTF=EF+VALF*XWRHT*BWZ
+ ARIGHF=EF+VARF*XWRHT*BWZ
+ BLEFTF=(EF-VALF*XWOMT*BWZ)*(2D0*PARP(143)-1D0)
+ BRIGHF=(EF-VARF*XWOMT*BWZ)*(2D0*PARP(143)-1D0)
+ DO 1540 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1540
+ EI=KCHG(IABS(I),1)/3D0
+ AI=SIGN(1D0,EI+0.1D0)
+ VI=AI-4D0*EI*XWV
+ VALI=0.5D0*(VI+AI)
+ VARI=0.5D0*(VI-AI)
+ FCOI=1D0
+ IF(IABS(I).LE.10) FCOI=FACA/3D0
+ ALEFTI=EI+VALI*XWRHT*BWZ
+ ARIGHI=EI+VARI*XWRHT*BWZ
+ BLEFTI=(EI-VALI*XWOMT*BWZ)*(2D0*PARP(143)-1D0)
+ BRIGHI=(EI-VARI*XWOMT*BWZ)*(2D0*PARP(143)-1D0)
+ DIFLL=(ALEFTI*ALEFTF*BWRHTR+BLEFTI*BLEFTF*BWOMTR)**2+
+ & (ALEFTI*ALEFTF*BWRHTI+BLEFTI*BLEFTF*BWOMTI)**2
+ DIFRR=(ARIGHI*ARIGHF*BWRHTR+BRIGHI*BRIGHF*BWOMTR)**2+
+ & (ARIGHI*ARIGHF*BWRHTI+BRIGHI*BRIGHF*BWOMTI)**2
+ DIFLR=(ALEFTI*ARIGHF*BWRHTR+BLEFTI*BRIGHF*BWOMTR)**2+
+ & (ALEFTI*ARIGHF*BWRHTI+BLEFTI*BRIGHF*BWOMTI)**2
+ DIFRL=(ARIGHI*ALEFTF*BWRHTR+BRIGHI*BLEFTF*BWOMTR)**2+
+ & (ARIGHI*ALEFTF*BWRHTI+BRIGHI*BLEFTF*BWOMTI)**2
+ FACSIG=(DIFLL+DIFRR)*UH2+(DIFLR+DIFRL)*TH2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACTC*FCOI*FACSIG
+ 1540 CONTINUE
+
+ ENDIF
+
+CMRENNA++
+C...J: 2 -> 2, tree diagrams, SUSY processes
+
+ ELSEIF(ISUB.LE.210) THEN
+ IF(ISUB.EQ.201) THEN
+C...f + fbar -> e_L + e_Lbar
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ DO 1570 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1570
+ EI=KCHG(IA,1)/3D0
+ TT3I=SIGN(1D0,EI+1D-6)/2D0
+ EJ=-1D0
+ TT3J=-1D0/2D0
+ FCOL=1D0
+C...Color factor for e+ e-
+ IF(IA.GE.11) FCOL=3D0
+ IF(ILR.EQ.1) THEN
+ A1=SFMIX(KFID,3)**2
+ A2=SFMIX(KFID,4)**2
+ ELSEIF(ILR.EQ.0) THEN
+ A1=SFMIX(KFID,1)**2
+ A2=SFMIX(KFID,2)**2
+ ENDIF
+ XLQ=(TT3J-EJ*XW)*A1
+ XRQ=(-EJ*XW)*A2
+ XLF=(TT3I-EI*XW)
+ XRF=(-EI*XW)
+ TAA=2D0*(EI*EJ)**2
+ TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/XW**2/XW1**2
+ TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*ZWID/SH**2)
+ TAZ=2D0*EI*EJ*(XLQ+XRQ)*(XLF+XRF)/XW/XW1
+ TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
+ TNN=0.0D0
+ TAN=0.0D0
+ TZN=0.0D0
+ IF(IA.GE.11.AND.IA.LE.18.AND.KFID.EQ.IA) THEN
+ FAC2=SQRT(2D0)
+ TNN1=0D0
+ TNN2=0D0
+ TNN3=0D0
+ DO 1560 II=1,4
+ DK=1D0/(TH-SMZ(II)**2)
+ FLEK=-FAC2*(TT3I*ZMIX(II,2)-TANW*(TT3I-EI)*
+ & ZMIX(II,1))
+ FREK=FAC2*TANW*EI*ZMIX(II,1)
+ TNN1=TNN1+FLEK**2*DK
+ TNN2=TNN2+FREK**2*DK
+ DO 1550 JJ=1,4
+ DL=1D0/(TH-SMZ(JJ)**2)
+ FLEL=-FAC2*(TT3J*ZMIX(JJ,2)-TANW*(TT3J-EJ)*
+ & ZMIX(JJ,1))
+ FREL=FAC2*TANW*EJ*ZMIX(JJ,1)
+ TNN3=TNN3+FLEK*FREK*FLEL*FREL*DK*DL*SMZ(II)*SMZ(JJ)
+ 1550 CONTINUE
+ 1560 CONTINUE
+ TNN=(UH*TH-SQM3*SQM4)*(A1**2*TNN1**2+A2**2*TNN2**2)
+ TNN=(TNN+2D0*SH*A1*A2*TNN3)/4D0/XW**2
+ TZN=(UH*TH-SQM3*SQM4)*(XLQ+XRQ)*
+ & (TNN1*XLF*A1+TNN2*XRF*A2)
+ TZN=TZN/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*
+ & (1D0-SQMZ/SH)/SH
+ TZN=TZN/XW**2/XW1
+ TAN=EI*EJ*(UH*TH-SQM3*SQM4)/SH*(A1*TNN1+A2*TNN2)/XW
+ ENDIF
+ FACQQ1=COMFAC*AEM**2*(TAA+TZZ+TAZ)*FCOL/3D0
+ FACQQ1=FACQQ1*( UH*TH-SQM3*SQM4 )/SH**2
+ FACQQ2=COMFAC*AEM**2*(TNN+TZN+TAN)*FCOL/3D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1+FACQQ2
+ 1570 CONTINUE
+
+ ELSEIF(ISUB.EQ.203) THEN
+C...f + fbar -> e_L + e_Rbar
+ DO 1600 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1600
+ EI=KCHG(IABS(I),1)/3D0
+ TT3I=SIGN(1D0,EI)/2D0
+ EJ=-1
+ TT3J=-1D0/2D0
+ FCOL=1D0
+C...Color factor for e+ e-
+ IF(IA.GE.11) FCOL=3D0
+ A1=SFMIX(KFID,1)**2
+ A2=SFMIX(KFID,2)**2
+ XLQ=(TT3J-EJ*XW)
+ XRQ=(-EJ*XW)
+ XLF=(TT3I-EI*XW)
+ XRF=(-EI*XW)
+ TZZ=(XLF**2+XRF**2)*(XLQ-XRQ)**2/XW**2/XW1**2*A1*A2
+ TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
+ TNN=0.0D0
+ TZN=0.0D0
+ IF(IA.GE.11.AND.IA.LE.18.AND.KFID.EQ.IA) THEN
+ FAC2=SQRT(2D0)
+ TNN1=0D0
+ TNN2=0D0
+ TNN3=0D0
+ DO 1590 II=1,4
+ DK=1D0/(TH-SMZ(II)**2)
+ FLEK=-FAC2*(TT3I*ZMIX(II,2)-TANW*(TT3I-EI)*
+ & ZMIX(II,1))
+ FREK=FAC2*TANW*EI*ZMIX(II,1)
+ TNN1=TNN1+FLEK**2*DK
+ TNN2=TNN2+FREK**2*DK
+ DO 1580 JJ=1,4
+ DL=1D0/(TH-SMZ(JJ)**2)
+ FLEL=-FAC2*(TT3J*ZMIX(JJ,2)-TANW*(TT3J-EJ)*
+ & ZMIX(JJ,1))
+ FREL=FAC2*TANW*EJ*ZMIX(JJ,1)
+ TNN3=TNN3+FLEK*FREK*FLEL*FREL*DK*DL*SMZ(II)*SMZ(JJ)
+ 1580 CONTINUE
+ 1590 CONTINUE
+ TNN=(UH*TH-SQM3*SQM4)*A1*A2*(TNN2**2+TNN1**2)
+ TNN=(TNN+SH*(A2**2+A1**2)*TNN3)/4D0
+ TZN=(UH*TH-SQM3*SQM4)*A1*A2
+ TZN=TZN*(XLQ-XRQ)*(XLF*TNN1-XRF*TNN2)/XW1
+ TZN=TZN/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*
+ & (1D0-SQMZ/SH)/SH
+ ENDIF
+ FACQQ1=COMFAC*AEM**2*TZZ*FCOL/3D0*(UH*TH-SQM3*SQM4)/SH2
+ FACQQ2=COMFAC*AEM**2/XW**2*(TNN+TZN)*FCOL/3D0
+ FACQQ=(FACQQ1+FACQQ2)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
+ 1600 CONTINUE
+
+ ELSEIF(ISUB.EQ.210) THEN
+C...q + qbar' -> W*- > ~l_L + ~nu_L
+ FAC0=RKF*COMFAC*AEM**2/XW**2/12D0
+ FAC1=(TH*UH-SQM3*SQM4)/((SH-SQMW)**2+WWID**2*SQMW)
+ DO 1620 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 1620
+ DO 1610 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 1610
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1610
+ FCKM=3D0
+ IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
+ KCHW=2
+ IF(KCHSUM.LT.0) KCHW=3
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FAC0*FAC1*FCKM*WIDS(PYCOMP(KFPR(ISUBSV,1)),
+ & 5-KCHW)*WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
+ 1610 CONTINUE
+ 1620 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.220) THEN
+ IF(ISUB.EQ.213) THEN
+C...f + fbar -> ~nu_L + ~nu_Lbar
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ PROPZ=(SH-SQMZ)**2+ZWID**2*SQMZ
+ XLL=0.5D0
+ XLR=0.0D0
+ DO 1630 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1630
+ EI=KCHG(IA,1)/3D0
+ FCOL=1D0
+C...Color factor for e+ e-
+ IF(IA.GE.11) FCOL=3D0
+ XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
+ XRQ=-EI*XW
+ TZC=0.0D0
+ TCC=0.0D0
+ IF(IA.GE.11.AND.KFID.EQ.IA+1) THEN
+ TZC=VMIX(1,1)**2/(TH-SMW(1)**2)+VMIX(2,1)**2/
+ & (TH-SMW(2)**2)
+ TCC=TZC**2
+ TZC=TZC/XW1*(SH-SQMZ)/PROPZ*XLQ*XLL
+ ENDIF
+ FACQQ1=(XLQ**2+XRQ**2)*(XLL+XLR)**2/XW1**2/PROPZ
+ FACQQ2=TZC+TCC/4D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=(FACQQ1+FACQQ2)*RKF*(UH*TH-SQM3*SQM4)*COMFAC
+ & *AEM**2*FCOL/3D0/XW**2
+ 1630 CONTINUE
+
+ ELSEIF(ISUB.EQ.216) THEN
+C...q + qbar -> ~chi0_1 + ~chi0_1
+ IF(IZID1.EQ.IZID2) THEN
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ ELSE
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
+ ENDIF
+ FACGG1=COMFAC*AEM**2/3D0/XW**2
+ IF(IZID1.EQ.IZID2) FACGG1=FACGG1/2D0
+ ZM12=SQM3
+ ZM22=SQM4
+ SR2=SQRT(2D0)
+ WU2 = (UH-ZM12)*(UH-ZM22)/SH2
+ WT2 = (TH-ZM12)*(TH-ZM22)/SH2
+ XS2 = SMZ(IZID1)*SMZ(IZID2)/SH
+ PROPZ2 = (SH-SQMZ)**2 + SQMZ*ZWID**2
+ REPRPZ = (SH-SQMZ)/PROPZ2
+ OLPP=(-ZMIX(IZID1,3)*ZMIX(IZID2,3)+
+ & ZMIX(IZID1,4)*ZMIX(IZID2,4))/2D0
+ DO 1640 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1640
+ EI=KCHG(IABS(I),1)/3D0
+ FCOL=1D0
+ IF(ABS(I).GE.11) FCOL=3D0
+ XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
+ XRQ=-EI*XW
+ XLQ=XLQ/XW1
+ XRQ=XRQ/XW1
+C...Factored out sqrt(2)
+ FR1=TANW*EI*ZMIX(IZID1,1)
+ FR2=TANW*EI*ZMIX(IZID2,1)
+ FL1=-(SIGN(1D0,EI)*ZMIX(IZID1,2)-TANW*
+ & (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID1,1))/2D0
+ FL2=-(SIGN(1D0,EI)*ZMIX(IZID2,2)-TANW*
+ & (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID2,1))/2D0
+ FR12=FR1**2
+ FR22=FR2**2
+ FL12=FL1**2
+ FL22=FL2**2
+ XML2=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2
+ XMR2=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2
+ FACS=OLPP**2*(XLQ**2+XRQ**2)*(WU2+WT2-2D0*XS2)*(SH2/PROPZ2)
+ FACT=FL12*FL22*(WT2*SH2/(TH-XML2)**2+WU2*SH2/(UH-XML2)**2-
+ & 2D0*XS2*SH2/(TH-XML2)/(UH-XML2))
+ FACU=FR12*FR22*(WT2*SH2/(TH-XMR2)**2+WU2*SH2/(UH-XMR2)**2-
+ & 2D0*XS2*SH2/(TH-XMR2)/(UH-XMR2))
+ FACST=2D0*REPRPZ*OLPP*XLQ*FL1*FL2*( (WT2-XS2)*SH2/
+ & (TH-XML2) + (WU2-XS2)*SH2/(UH-XML2) )
+ FACSU=-2D0*REPRPZ*OLPP*XRQ*FR1*FR2*( (WT2-XS2)*SH2/
+ & (TH-XMR2) + (WU2-XS2)*SH2/(UH-XMR2) )
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGG1*FCOL*(FACS+FACT+FACU+FACST+FACSU)
+ 1640 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.230) THEN
+ IF(ISUB.EQ.226) THEN
+C...f + fbar -> ~chi+_1 + ~chi-_1
+ FACGG1=COMFAC*AEM**2/3D0/XW**2
+ ZM12=SQM3
+ ZM22=SQM4
+ WU2 = (UH-ZM12)*(UH-ZM22)/SH2
+ WT2 = (TH-ZM12)*(TH-ZM22)/SH2
+ WS2 = SMW(IZID1)*SMW(IZID2)/SH
+ PROPZ2 = (SH-SQMZ)**2 + SQMZ*ZWID**2
+ REPRPZ = (SH-SQMZ)/PROPZ2
+ DIFF=0D0
+ IF(IZID1.EQ.IZID2) DIFF=1D0
+ DO 1650 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1650
+ EI=KCHG(IABS(I),1)/3D0
+ FCOL=1D0
+ IF(IABS(I).GE.11) FCOL=3D0
+ XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
+ XRQ=-EI*XW
+ XLQ=XLQ/XW1
+ XRQ=XRQ/XW1
+ XLQ2=XLQ**2
+ XRQ2=XRQ**2
+ OLP=-VMIX(IZID1,1)*VMIX(IZID2,1)-
+ & VMIX(IZID1,2)*VMIX(IZID2,2)/2D0+XW*DIFF
+ ORP=-UMIX(IZID1,1)*UMIX(IZID2,1)-
+ & UMIX(IZID1,2)*UMIX(IZID2,2)/2D0+XW*DIFF
+ ORP2=ORP**2
+ OLP2=OLP**2
+C...u-type quark - d-type squark
+ IF(MOD(I,2).EQ.0) THEN
+ FACT0 = UMIX(IZID1,1)*UMIX(IZID2,1)
+ XML2=PMAS(PYCOMP(KSUSY1+IABS(I)-1),1)**2
+C...d-type quark - u-type squark
+ ELSE
+ FACT0 = VMIX(IZID1,1)*VMIX(IZID2,1)
+ XML2=PMAS(PYCOMP(KSUSY1+IABS(I)+1),1)**2
+ ENDIF
+ FACA=2D0*XW**2*DIFF*(WT2+WU2+2D0*ABS(WS2))*EI**2
+ FACZ=0.5D0*((XLQ2+XRQ2)*(OLP2+ORP2)*(WT2+WU2)+
+ & 4D0*(XLQ2+XRQ2)*OLP*ORP*WS2-(XLQ2-XRQ2)*(OLP2-ORP2)*
+ & (WU2-WT2))*SH2/PROPZ2
+ FACT=FACT0**2/4D0*WT2*SH2/(TH-XML2)**2
+ FACAZ=XW*REPRPZ*DIFF*( (XLQ+XRQ)*(OLP+ORP)*(WU2+
+ & WT2+2D0*ABS(WS2))-(XLQ-XRQ)*(OLP-ORP)*(WU2-WT2) )*SH*(-EI)
+ FACTA=XW*DIFF/(TH-XML2)*(WT2+ABS(WS2))*SH*FACT0*(-EI)
+ FACTZ=REPRPZ/(TH-XML2)*XLQ*FACT0*(OLP*WT2+ORP*WS2)*SH2
+ FACSUM=FACGG1*(FACA+FACAZ+FACZ+FACT+FACTA+FACTZ)*FCOL
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ IF(IZID1.EQ.IZID2) THEN
+ SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ ELSE
+ SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),2)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),3)
+ ENDIF
+ 1650 CONTINUE
+
+ ELSEIF(ISUB.EQ.229) THEN
+C...q + qbar' -> ~chi0_1 + ~chi+-_1
+ FACGG1=COMFAC*AEM**2/6D0/XW**2
+ ZM12=SQM3
+ ZM22=SQM4
+ ZMU2 = PMAS(PYCOMP(KSUSY1+2),1)**2
+ ZMD2 = PMAS(PYCOMP(KSUSY1+1),1)**2
+ WU2 = (UH-ZM12)*(UH-ZM22)/SH2
+ WT2 = (TH-ZM12)*(TH-ZM22)/SH2
+ WS2 = SMW(IZID1)*SMZ(IZID2)/SH
+ RT2I = 1D0/SQRT(2D0)
+ PROPW = ((SH-SQMW)**2+WWID**2*SQMW)
+ OL=-RT2I*ZMIX(IZID2,4)*VMIX(IZID1,2)+
+ & ZMIX(IZID2,2)*VMIX(IZID1,1)
+ OR= RT2I*ZMIX(IZID2,3)*UMIX(IZID1,2)+
+ & ZMIX(IZID2,2)*UMIX(IZID1,1)
+ OL2=OL**2
+ OR2=OR**2
+ CROSS=2D0*OL*OR
+ FACST0=UMIX(IZID1,1)
+ FACSU0=VMIX(IZID1,1)
+ FACSU0=FACSU0*(0.5D0*ZMIX(IZID2,2)+TANW*ZMIX(IZID2,1)/6D0)
+ FACST0=FACST0*(-0.5D0*ZMIX(IZID2,2)+TANW*ZMIX(IZID2,1)/6D0)
+ FACT0=FACST0**2
+ FACU0=FACSU0**2
+ FACTU0=FACSU0*FACST0
+ FACST = -2D0*(SH-SQMW)/PROPW/(TH-ZMD2)*(WT2*SH2*OR
+ & + SH2*WS2*OL)*FACST0
+ FACSU = 2D0*(SH-SQMW)/PROPW/(UH-ZMU2)*(WU2*SH2*OL
+ & + SH2*WS2*OR)*FACSU0
+ FACT = WT2*SH2/(TH-ZMD2)**2*FACT0
+ FACU = WU2*SH2/(UH-ZMU2)**2*FACU0
+ FACTU = -2D0*WS2*SH2/(TH-ZMD2)/(UH-ZMU2)*FACTU0
+ FACW = (OR2*WT2+OL2*WU2+CROSS*WS2)/PROPW*SH2
+ FACGG1=FACGG1*(FACW+FACT+FACTU+FACU+FACSU+FACST)
+ DO 1670 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 1670
+ DO 1660 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 1660
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1660
+ FCKM=3D0
+ IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
+ KCHW=2
+ IF(KCHSUM.LT.0) KCHW=3
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACGG1*FCKM*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
+ 1660 CONTINUE
+ 1670 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.240) THEN
+ IF(ISUB.EQ.237) THEN
+C...q + qbar -> gluino + ~chi0_1
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
+ FAC0=COMFAC*AS*AEM*4D0/9D0/XW
+ GM2=SQM3
+ ZM2=SQM4
+ DO 1680 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1680
+ EI=KCHG(IABS(I),1)/3D0
+ IA=IABS(I)
+ XLQC = -TANW*EI*ZMIX(IZID,1)
+ XRQC =(SIGN(1D0,EI)*ZMIX(IZID,2)-TANW*
+ & (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID,1))/2D0
+ XLQ2=XLQC**2
+ XRQ2=XRQC**2
+ XML2=PMAS(PYCOMP(KSUSY1+IA),1)**2
+ XMR2=PMAS(PYCOMP(KSUSY2+IA),1)**2
+ ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XML2)**2
+ AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XML2)**2
+ ATUKIN=SMZ(IZID)*SQRT(GM2)*SH/(TH-XML2)/(UH-XML2)
+ SGCHIL=XLQ2*(ATKIN+AUKIN-2D0*ATUKIN)
+ ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XMR2)**2
+ AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XMR2)**2
+ ATUKIN=SMZ(IZID)*SQRT(GM2)*SH/(TH-XMR2)/(UH-XMR2)
+ SGCHIR=XRQ2*(ATKIN+AUKIN-2D0*ATUKIN)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FAC0*(SGCHIL+SGCHIR)
+ 1680 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.250) THEN
+ IF(ISUB.EQ.241) THEN
+C...q + qbar' -> ~chi+-_1 + gluino
+ FACWG=COMFAC*AS*AEM/XW*2D0/9D0
+ GM2=SQM3
+ ZM2=SQM4
+ FAC01=2D0*UMIX(IZID,1)*VMIX(IZID,1)
+ FAC0=UMIX(IZID,1)**2
+ FAC1=VMIX(IZID,1)**2
+ DO 1700 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 1700
+ DO 1690 J=MMIN2,MMAX2
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 1690
+ IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1690
+ FCKM=1D0
+ IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
+ KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
+ KCHW=2
+ IF(KCHSUM.LT.0) KCHW=3
+ XMU2=PMAS(PYCOMP(KSUSY1+2),1)**2
+ XMD2=PMAS(PYCOMP(KSUSY1+1),1)**2
+ ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XMU2)**2
+ AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XMD2)**2
+ ATUKIN=SMW(IZID)*SQRT(GM2)*SH/(TH-XMU2)/(UH-XMD2)
+ XMU2=PMAS(PYCOMP(KSUSY2+2),1)**2
+ XMD2=PMAS(PYCOMP(KSUSY2+1),1)**2
+ ATKIN=(ATKIN+(TH-GM2)*(TH-ZM2)/(TH-XMU2)**2)/2D0
+ AUKIN=(AUKIN+(UH-GM2)*(UH-ZM2)/(UH-XMD2)**2)/2D0
+ ATUKIN=(ATUKIN+SMW(IZID)*SQRT(GM2)*
+ & SH/(TH-XMU2)/(UH-XMD2))/2D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACWG*FCKM*(FAC0*ATKIN+FAC1*AUKIN-
+ & FAC01*ATUKIN)*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
+ 1690 CONTINUE
+ 1700 CONTINUE
+
+ ELSEIF(ISUB.EQ.243) THEN
+C...q + qbar -> gluino + gluino
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ XMT=SQM3-TH
+ XMU=SQM3-UH
+ DO 1710 I=MMINA,MMAXA
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1710
+ NCHN=NCHN+1
+ XSU=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2-UH
+ XST=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2-TH
+ FACGG1=COMFAC*AS**2*8D0/3D0*( (XMT**2+XMU**2+
+ & 2D0*SQM3*SH)/SH2 +4D0/9D0*(XMT**2/XST**2+
+ & XMU**2/XSU**2) - (XMT**2+SH*SQM3)/SH/XST +
+ & SQM3*SH/XST/XSU/9D0- (XMU**2+SH*SQM3)/SH/XSU )
+ XSU=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2-UH
+ XST=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2-TH
+ FACGG2=COMFAC*AS**2*8D0/3D0*( (XMT**2+XMU**2+
+ & 2D0*SQM3*SH)/SH2 +4D0/9D0*(XMT**2/XST**2+
+ & XMU**2/XSU**2) - (XMT**2+SH*SQM3)/SH/XST +
+ & SQM3*SH/XST/XSU/9D0- (XMU**2+SH*SQM3)/SH/XSU )
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+C...1/2 for identical particles
+ SIGH(NCHN)=0.25D0*(FACGG1+FACGG2)
+ 1710 CONTINUE
+
+ ELSEIF(ISUB.EQ.244) THEN
+C...g + g -> gluino + gluino
+ COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ XMT=SQM3-TH
+ XMU=SQM3-UH
+ FACQQ1=COMFAC*AS**2*9D0/4D0*(
+ & (XMT*XMU-2D0*SQM3*(TH+SQM3))/XMT**2 -
+ & (XMT*XMU+SQM3*(UH-TH))/SH/XMT )
+ FACQQ2=COMFAC*AS**2*9D0/4D0*(
+ & (XMU*XMT-2D0*SQM3*(UH+SQM3))/XMU**2 -
+ & (XMU*XMT+SQM3*(TH-UH))/SH/XMU )
+ FACQQ3=COMFAC*AS**2*9D0/4D0*(2D0*XMT*XMU/SH2 +
+ & SQM3*(SH-4D0*SQM3)/XMT/XMU)
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1720
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1/2D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ2/2D0
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=3
+ SIGH(NCHN)=FACQQ3/2D0
+ 1720 CONTINUE
+
+ ELSEIF(ISUB.EQ.246) THEN
+C...g + q_j -> ~chi0_1 + ~q_j
+ FAC0=COMFAC*AS*AEM/6D0/XW
+ ZM2=SQM4
+ QM2=SQM3
+ FACZQ0=FAC0*( (ZM2-TH)/SH +
+ & (UH-ZM2)*(UH+QM2)/(UH-QM2)**2 -
+ & (SH*(UH+ZM2)+2D0*(QM2-ZM2)*(ZM2-UH))/SH/(UH-QM2) )
+ KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
+ DO 1740 I=-KFNSQ,KFNSQ,2*KFNSQ
+ IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1740
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1740
+ EI=KCHG(IABS(I),1)/3D0
+ IA=IABS(I)
+ XRQZ = -TANW*EI*ZMIX(IZID,1)
+ XLQZ =(SIGN(1D0,EI)*ZMIX(IZID,2)-TANW*
+ & (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID,1))/2D0
+ IF(ILR.EQ.0) THEN
+ BS=XLQZ**2*SFMIX(IA,1)**2+XRQZ**2*SFMIX(IA,2)**2
+ ELSE
+ BS=XLQZ**2*SFMIX(IA,3)**2+XRQZ**2*SFMIX(IA,4)**2
+ ENDIF
+ FACZQ=FACZQ0*BS
+ KCHQ=2
+ IF(I.LT.0) KCHQ=3
+ DO 1730 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1730
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1730
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZQ*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
+ 1730 CONTINUE
+ 1740 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.260) THEN
+ IF(ISUB.EQ.254) THEN
+C...g + q_j -> ~chi1_1 + ~q_i
+ FAC0=COMFAC*AS*AEM/12D0/XW
+ ZM2=SQM4
+ QM2=SQM3
+ AU=UMIX(IZID,1)**2
+ AD=VMIX(IZID,1)**2
+ FACZQ0=FAC0*( (ZM2-TH)/SH +
+ & (UH-ZM2)*(UH+QM2)/(UH-QM2)**2 -
+ & (SH*(UH+ZM2)+2D0*(QM2-ZM2)*(ZM2-UH))/SH/(UH-QM2) )
+ KFNSQ1=MOD(KFPR(ISUBSV,1),KSUSY1)
+ IF(MOD(KFNSQ1,2).EQ.0) THEN
+ KFNSQ=KFNSQ1-1
+ KCHW=2
+ ELSE
+ KFNSQ=KFNSQ1+1
+ KCHW=3
+ ENDIF
+ DO 1760 I=-KFNSQ,KFNSQ,2*KFNSQ
+ IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1760
+ IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1760
+ IA=IABS(I)
+ IF(MOD(IA,2).EQ.0) THEN
+ FACZQ=FACZQ0*AU
+ ELSE
+ FACZQ=FACZQ0*AD
+ ENDIF
+ FACZQ=FACZQ*SFMIX(KFNSQ1,1+2*ILR)**2
+ KCHQ=2
+ IF(I.LT.0) KCHQ=3
+ KCHWQ=KCHW
+ IF(I.LT.0) KCHWQ=5-KCHW
+ DO 1750 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1750
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1750
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACZQ*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHWQ)
+ 1750 CONTINUE
+ 1760 CONTINUE
+
+ ELSEIF(ISUB.EQ.258) THEN
+C...g + q_j -> gluino + ~q_i
+ XG2=SQM4
+ XQ2=SQM3
+ XMT=XG2-TH
+ XMU=XG2-UH
+ XST=XQ2-TH
+ XSU=XQ2-UH
+ FACQG1=0.5D0*4D0/9D0*XMT/SH + (XMT*SH+2D0*XG2*XST)/XMT**2 -
+ & ( (SH-XQ2+XG2)*(-XST)-SH*XG2 )/SH/(-XMT) +
+ & 0.5D0*1D0/2D0*( XST*(TH+2D0*UH+XG2)-XMT*(SH-2D0*XST) +
+ & (-XMU)*(TH+XG2+2D0*XQ2) )/2D0/XMT/XSU
+ FACQG2= 4D0/9D0*(-XMU)*(UH+XQ2)/XSU**2 + 1D0/18D0*
+ & (SH*(UH+XG2)
+ & +2D0*(XQ2-XG2)*XMU)/SH/(-XSU) + 0.5D0*4D0/9D0*XMT/SH +
+ & 0.5D0*1D0/2D0*(XST*(TH+2D0*UH+XG2)-XMT*(SH-2D0*XST)+
+ & (-XMU)*(TH+XG2+2D0*XQ2))/2D0/XMT/XSU
+ FACQG1=COMFAC*AS**2*FACQG1/2D0
+ FACQG2=COMFAC*AS**2*FACQG2/2D0
+ KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
+ DO 1780 I=-KFNSQ,KFNSQ,2*KFNSQ
+ IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1780
+ IF(I.EQ.0.OR.IABS(I).GT.10) GOTO 1780
+ KCHQ=2
+ IF(I.LT.0) KCHQ=3
+ FACSEL=RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
+ DO 1770 ISDE=1,2
+ IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1770
+ IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1770
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQG1*FACSEL
+ NCHN=NCHN+1
+ ISIG(NCHN,ISDE)=I
+ ISIG(NCHN,3-ISDE)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQG2*FACSEL
+ 1770 CONTINUE
+ 1780 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.270) THEN
+ IF(ISUB.EQ.261) THEN
+C...q_i + q_ibar -> ~t_1 + ~t_1bar
+ FACQQ1=COMFAC*( (UH*TH-SQM3*SQM4)/ SH**2 )*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
+ FAC0=AS**2*4D0/9D0
+ DO 1790 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1790
+ IF(IA.GE.11.AND.IA.LE.18) THEN
+ EI=KCHG(IA,1)/3D0
+ EJ=KCHG(KFNSQ,1)/3D0
+ T3I=SIGN(1D0,EI)/2D0
+ T3J=SIGN(1D0,EJ)/2D0
+ XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,2*ILR+1)**2
+ XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,2*ILR+2)**2
+ XLF=2D0*(T3I-EI*XW)
+ XRF=2D0*(-EI*XW)
+ TAA=0.5D0*(EI*EJ)**2
+ TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/64D0/XW**2/XW1**2
+ TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
+ TAZ=EI*EJ*(XLQ+XRQ)*(XLF+XRF)/8D0/XW/XW1
+ TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
+ FAC0=AEM**2*12D0*(TAA+TZZ+TAZ)
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1*FAC0
+ 1790 CONTINUE
+
+ ELSEIF(ISUB.EQ.263) THEN
+C...f + fbar -> ~t1 + ~t2bar
+ DO 1800 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1800
+ EI=KCHG(IABS(I),1)/3D0
+ TT3I=SIGN(1D0,EI)/2D0
+ EJ=2D0/3D0
+ TT3J=1D0/2D0
+ FCOL=1D0
+C...Color factor for e+ e-
+ IF(IA.GE.11) FCOL=3D0
+ XLQ=2D0*(TT3J-EJ*XW)
+ XRQ=2D0*(-EJ*XW)
+ XLF=2D0*(TT3I-EI*XW)
+ XRF=2D0*(-EI*XW)
+ TZZ=(XLF**2+XRF**2)*(XLQ-XRQ)**2/64D0/XW**2/XW1**2
+ TZZ=TZZ*(SFMIX(6,1)*SFMIX(6,2))**2
+ TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
+C...Factor of 2 for t1 t2bar + t2 t1bar
+ FACQQ1=2D0*COMFAC*AEM**2*TZZ*FCOL*4D0
+ FACQQ1=FACQQ1*( UH*TH-SQM3*SQM4 )/SH2
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ1*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
+ 1800 CONTINUE
+
+ ELSEIF(ISUB.EQ.264) THEN
+C...g + g -> ~t_1 + ~t_1bar
+ XSU=SQM3-UH
+ XST=SQM3-TH
+ FAC0=COMFAC*AS**2*(7D0/48D0+3D0*(UH-TH)**2/16D0/SH2 )*0.5D0*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ FACQQ1=FAC0*(0.5D0+2D0*SQM3*TH/XST**2 + 2D0*SQM3**2/XSU/XST)
+ FACQQ2=FAC0*(0.5D0+2D0*SQM3*UH/XSU**2 + 2D0*SQM3**2/XSU/XST)
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1810
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ2
+ 1810 CONTINUE
+ ENDIF
+
+ ELSEIF(ISUB.LE.280) THEN
+ IF(ISUB.EQ.271) THEN
+C...q + q' -> ~q + ~q' (~g exchange)
+ XMG2=PMAS(PYCOMP(KSUSY1+21),1)**2
+ XMT=XMG2-TH
+ XMU=XMG2-UH
+ XSU1=SQM3-UH
+ XSU2=SQM4-UH
+ XST1=SQM3-TH
+ XST2=SQM4-TH
+ IF(ILR.EQ.1) THEN
+ FACQQ1=COMFAC*AS**2*4D0/9D0*( -(XST1*XST2+SH*TH)/XMT**2 )
+ FACQQ2=COMFAC*AS**2*4D0/9D0*( -(XSU1*XSU2+SH*UH)/XMU**2 )
+ FACQQB=0.0D0
+ ELSE
+ FACQQ1=0.5D0*COMFAC*AS**2*4D0/9D0*( SH*XMG2/XMT**2 )
+ FACQQ2=0.5D0*COMFAC*AS**2*4D0/9D0*( SH*XMG2/XMU**2 )
+ FACQQB=0.5D0*COMFAC*AS**2*4D0/9D0*( -2D0*SH*XMG2/3D0/
+ & XMT/XMU )
+ ENDIF
+ KFNSQI=MOD(KFPR(ISUBSV,1),KSUSY1)
+ KFNSQJ=MOD(KFPR(ISUBSV,2),KSUSY1)
+ DO 1830 I=-KFNSQI,KFNSQI,2*KFNSQI
+ IF(I.LT.MMIN1.OR.I.GT.MMAX1) GOTO 1830
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 1830
+ KCHQ=2
+ IF(I.LT.0) KCHQ=3
+ DO 1820 J=-KFNSQJ,KFNSQJ,2*KFNSQJ
+ IF(J.LT.MMIN2.OR.J.GT.MMAX2) GOTO 1820
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 1820
+ IF(I*J.LT.0) GOTO 1820
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
+ IF(I.EQ.J) THEN
+ IF(ISUBSV.LE.272) THEN
+ SIGH(NCHN)=(FACQQ1+0.5D0*FACQQB)*RKF*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ+2)
+ ELSE
+ SIGH(NCHN)=(FACQQ1+0.5D0*FACQQB)*RKF*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=2
+ IF(ISUBSV.LE.272) THEN
+ SIGH(NCHN)=(FACQQ2+0.5D0*FACQQB)*RKF*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ+2)
+ ELSE
+ SIGH(NCHN)=(FACQQ2+0.5D0*FACQQB)*RKF*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
+ ENDIF
+ ENDIF
+ 1820 CONTINUE
+ 1830 CONTINUE
+
+ ELSEIF(ISUB.EQ.274) THEN
+C...q + qbar -> ~q' + ~qbar'
+ XMG2=PMAS(PYCOMP(KSUSY1+21),1)**2
+ XMT=XMG2-TH
+ XMU=XMG2-UH
+ IF(ILR.EQ.0) THEN
+ FACQQ1=COMFAC*AS**2*4D0/9D0*(
+ & (UH*TH-SQM3*SQM4)/XMT**2 )
+ FACQQB=COMFAC*AS**2*4D0/9D0*(
+ & (UH*TH-SQM3*SQM4)/SH2*(2D0-2D0/3D0*SH/XMT**2))
+ FACQQB=FACQQB+FACQQ1
+ ELSE
+ FACQQ1=COMFAC*AS**2*4D0/9D0*( XMG2*SH/XMT**2 )
+ FACQQB=FACQQ1
+ ENDIF
+ KFNSQI=MOD(KFPR(ISUBSV,1),KSUSY1)
+ KFNSQJ=MOD(KFPR(ISUBSV,2),KSUSY1)
+ DO 1850 I=-KFNSQI,KFNSQI,2*KFNSQI
+ IF(I.LT.MMIN1.OR.I.GT.MMAX1) GOTO 1850
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 1850
+ KCHQ=2
+ IF(I.LT.0) KCHQ=3
+ DO 1840 J=-KFNSQJ,KFNSQJ,2*KFNSQJ
+ IF(J.LT.MMIN2.OR.J.GT.MMAX2) GOTO 1840
+ JA=IABS(J)
+ IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 1840
+ IF(I*J.GT.0) GOTO 1840
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=J
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
+ & WIDS(PYCOMP(KFPR(ISUBSV,2)),5-KCHQ)
+ IF(I.EQ.-J) SIGH(NCHN)=FACQQB*RKF*
+ & WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ 1840 CONTINUE
+ 1850 CONTINUE
+
+ ELSEIF(ISUB.EQ.277) THEN
+C...q_i + q_ibar -> ~q_j + ~q_jbar ,i .ne. j
+C...if i .eq. j covered in 274
+ FACQQ1=COMFAC*( (UH*TH-SQM3*SQM4)/ SH**2 )
+ KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
+ FAC0=0D0
+ DO 1860 I=MMIN1,MMAX1
+ IA=IABS(I)
+ IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.
+ & KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1860
+ IF(IA.EQ.KFNSQ) GOTO 1860
+ IF(IA.EQ.11.OR.IA.EQ.13.OR.IA.EQ.15) THEN
+ EI=KCHG(IA,1)/3D0
+ EJ=KCHG(KFNSQ,1)/3D0
+ T3J=SIGN(0.5D0,EJ)
+ T3I=SIGN(1D0,EI)/2D0
+ IF(ILR.EQ.0) THEN
+ XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,1)
+ XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,2)
+ ELSE
+ XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,3)
+ XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,4)
+ ENDIF
+ XLF=2D0*(T3I-EI*XW)
+ XRF=2D0*(-EI*XW)
+ IF(ILR.EQ.0) THEN
+ XRQ=0D0
+ ELSE
+ XLQ=0D0
+ ENDIF
+ TAA=0.5D0*(EI*EJ)**2
+ TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/64D0/XW**2/XW1**2
+ TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
+ TAZ=EI*EJ*(XLQ+XRQ)*(XLF+XRF)/8D0/XW/XW1
+ TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
+ FAC0=AEM**2*12D0*(TAA+TZZ+TAZ)
+ ELSEIF(IA.LE.6) THEN
+ FAC0=AS**2*8D0/9D0/2D0
+ ENDIF
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=I
+ ISIG(NCHN,2)=-I
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1*FAC0*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ 1860 CONTINUE
+
+ ELSEIF(ISUB.EQ.279) THEN
+C...g + g -> ~q_j + ~q_jbar
+ XSU=SQM3-UH
+ XST=SQM3-TH
+C...5=RKF because ~t ~tbar treated separately
+ FAC0=RKF*COMFAC*AS**2*( 7D0/48D0+3D0*(UH-TH)**2/16D0/SH2 )
+ FACQQ1=FAC0*(0.5D0+2D0*SQM3*TH/XST**2 + 2D0*SQM3**2/XSU/XST)
+ FACQQ2=FAC0*(0.5D0+2D0*SQM3*UH/XSU**2 + 2D0*SQM3**2/XSU/XST)
+ IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1870
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=1
+ SIGH(NCHN)=FACQQ1/2D0*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ NCHN=NCHN+1
+ ISIG(NCHN,1)=21
+ ISIG(NCHN,2)=21
+ ISIG(NCHN,3)=2
+ SIGH(NCHN)=FACQQ2/2D0*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
+ 1870 CONTINUE
+
+ ENDIF
+CMRENNA--
+ ENDIF
+
+C...Multiply with parton distributions
+ IF(ISUB.LE.90.OR.ISUB.GE.96) THEN
+ DO 1880 ICHN=1,NCHN
+ IF(MINT(45).GE.2) THEN
+ KFL1=ISIG(ICHN,1)
+ SIGH(ICHN)=SIGH(ICHN)*XSFX(1,KFL1)
+ ENDIF
+ IF(MINT(46).GE.2) THEN
+ KFL2=ISIG(ICHN,2)
+ SIGH(ICHN)=SIGH(ICHN)*XSFX(2,KFL2)
+ ENDIF
+ SIGS=SIGS+SIGH(ICHN)
+ 1880 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPDFU
+C...Gives electron, photon, pi+, neutron, proton and hyperon
+C...parton distributions according to a few different parametrizations.
+C...Note that what is coded is x times the probability distribution,
+C...i.e. xq(x,Q2) etc.
+
+ SUBROUTINE PYPDFU(KF,X,Q2,XPQ)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
+ &XPDIR(-6:6)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT8/
+C...Local arrays.
+ DIMENSION XPQ(-25:25),XPEL(-25:25),XPGA(-6:6),VXPGA(-6:6),
+ &XPPI(-6:6),XPPR(-6:6)
+
+C...Interface to PDFLIB.
+ COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
+ SAVE /W50513/
+ DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
+ &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
+ CHARACTER*20 PARM(20)
+ DATA VALUE/20*0D0/,PARM/20*' '/
+
+C...Data related to Schuler-Sjostrand photon distributions.
+ DATA ALAMGA/0.2D0/, PMCGA/1.3D0/, PMBGA/4.6D0/
+
+C...Reset parton distributions.
+ MINT(92)=0
+ DO 100 KFL=-25,25
+ XPQ(KFL)=0D0
+ 100 CONTINUE
+
+C...Check x and particle species.
+ IF(X.LE.0D0.OR.X.GE.1D0) THEN
+ WRITE(MSTU(11),5000) X
+ RETURN
+ ENDIF
+ KFA=IABS(KF)
+ IF(KFA.NE.11.AND.KFA.NE.22.AND.KFA.NE.211.AND.KFA.NE.2112.AND.
+ &KFA.NE.2212.AND.KFA.NE.3122.AND.KFA.NE.3112.AND.KFA.NE.3212
+ &.AND.KFA.NE.3222.AND.KFA.NE.3312.AND.KFA.NE.3322.AND.
+ &KFA.NE.3334.AND.KFA.NE.111) THEN
+ WRITE(MSTU(11),5100) KF
+ RETURN
+ ENDIF
+
+C...Electron parton distribution call.
+ IF(KFA.EQ.11) THEN
+ CALL PYPDEL(X,Q2,XPEL)
+ DO 110 KFL=-25,25
+ XPQ(KFL)=XPEL(KFL)
+ 110 CONTINUE
+
+C...Photon parton distribution call (VDM+anomalous).
+ ELSEIF(KFA.EQ.22.AND.MINT(109).LE.1) THEN
+ IF(MSTP(56).EQ.1.AND.MSTP(55).EQ.1) THEN
+ CALL PYPDGA(X,Q2,XPGA)
+ DO 120 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 120 CONTINUE
+ ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.MSTP(55).LE.8) THEN
+ Q2MX=Q2
+ P2MX=0.36D0
+ IF(MSTP(55).GE.7) P2MX=4.0D0
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGGAM(MSTP(55)-4,X,Q2MX,0D0,MSTP(60),F2GAM,XPGA)
+ DO 130 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 130 CONTINUE
+ VINT(231)=P2MX
+ ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.9.AND.MSTP(55).LE.12) THEN
+ Q2MX=Q2
+ P2MX=0.36D0
+ IF(MSTP(55).GE.11) P2MX=4.0D0
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGGAM(MSTP(55)-8,X,Q2MX,0D0,MSTP(60),F2GAM,XPGA)
+ DO 140 KFL=-6,6
+ XPQ(KFL)=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
+ 140 CONTINUE
+ VINT(231)=P2MX
+ ELSEIF(MSTP(56).EQ.2) THEN
+C...Call PDFLIB parton distributions.
+ PARM(1)='NPTYPE'
+ VALUE(1)=3
+ PARM(2)='NGROUP'
+ VALUE(2)=MSTP(55)/1000
+ PARM(3)='NSET'
+ VALUE(3)=MOD(MSTP(55),1000)
+ IF(MINT(93).NE.3000000+MSTP(55)) THEN
+ CALL PDFSET(PARM,VALUE)
+ MINT(93)=3000000+MSTP(55)
+ ENDIF
+ XX=X
+ QQ=SQRT(MAX(0D0,Q2MIN,Q2))
+ IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
+ CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
+ VINT(231)=Q2MIN
+ XPQ(0)=GLU
+ XPQ(1)=DNV
+ XPQ(-1)=DNV
+ XPQ(2)=UPV
+ XPQ(-2)=UPV
+ XPQ(3)=STR
+ XPQ(-3)=STR
+ XPQ(4)=CHM
+ XPQ(-4)=CHM
+ XPQ(5)=BOT
+ XPQ(-5)=BOT
+ XPQ(6)=TOP
+ XPQ(-6)=TOP
+ ELSE
+ WRITE(MSTU(11),5200) KF,MSTP(56),MSTP(55)
+ ENDIF
+
+C...Pion/gammaVDM parton distribution call.
+ ELSEIF(KFA.EQ.211.OR.KFA.EQ.111.OR.(KFA.EQ.22.AND.
+ & MINT(109).EQ.2)) THEN
+ IF(KFA.EQ.22.AND.MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.
+ & MSTP(55).LE.12) THEN
+ ISET=1+MOD(MSTP(55)-1,4)
+ Q2MX=Q2
+ P2MX=0.36D0
+ IF(ISET.GE.3) P2MX=4.0D0
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGVMD(ISET,2,X,Q2MX,P2MX,ALAMGA,XPGA,VXPGA)
+ DO 150 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 150 CONTINUE
+ VINT(231)=P2MX
+ ELSEIF(MSTP(54).EQ.1.AND.MSTP(53).GE.1.AND.MSTP(53).LE.3) THEN
+ CALL PYPDPI(X,Q2,XPPI)
+ DO 160 KFL=-6,6
+ XPQ(KFL)=XPPI(KFL)
+ 160 CONTINUE
+ ELSEIF(MSTP(54).EQ.2) THEN
+C...Call PDFLIB parton distributions.
+ PARM(1)='NPTYPE'
+ VALUE(1)=2
+ PARM(2)='NGROUP'
+ VALUE(2)=MSTP(53)/1000
+ PARM(3)='NSET'
+ VALUE(3)=MOD(MSTP(53),1000)
+ IF(MINT(93).NE.2000000+MSTP(53)) THEN
+ CALL PDFSET(PARM,VALUE)
+ MINT(93)=2000000+MSTP(53)
+ ENDIF
+ XX=X
+ QQ=SQRT(MAX(0D0,Q2MIN,Q2))
+ IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
+ CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
+ VINT(231)=Q2MIN
+ XPQ(0)=GLU
+ XPQ(1)=DSEA
+ XPQ(-1)=UPV+DSEA
+ XPQ(2)=UPV+USEA
+ XPQ(-2)=USEA
+ XPQ(3)=STR
+ XPQ(-3)=STR
+ XPQ(4)=CHM
+ XPQ(-4)=CHM
+ XPQ(5)=BOT
+ XPQ(-5)=BOT
+ XPQ(6)=TOP
+ XPQ(-6)=TOP
+ ELSE
+ WRITE(MSTU(11),5200) KF,MSTP(54),MSTP(53)
+ ENDIF
+
+C...Anomalous photon parton distribution call.
+ ELSEIF(KFA.EQ.22.AND.MINT(109).EQ.3) THEN
+ Q2MX=Q2
+ P2MX=PARP(15)**2
+ IF(MSTP(56).EQ.1.AND.MSTP(55).LE.8) THEN
+ IF(MSTP(55).EQ.5.OR.MSTP(55).EQ.6) P2MX=0.36D0
+ IF(MSTP(55).EQ.7.OR.MSTP(55).EQ.8) P2MX=4.0D0
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA,VXPGA)
+ DO 170 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 170 CONTINUE
+ VINT(231)=P2MX
+ ELSEIF(MSTP(56).EQ.1) THEN
+ IF(MSTP(55).EQ.9.OR.MSTP(55).EQ.10) P2MX=0.36D0
+ IF(MSTP(55).EQ.11.OR.MSTP(55).EQ.12) P2MX=4.0D0
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGGAM(MSTP(55)-8,X,Q2MX,0D0,MSTP(60),F2GM,XPGA)
+ DO 180 KFL=-6,6
+ XPQ(KFL)=MAX(0D0,XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL))
+ 180 CONTINUE
+ VINT(231)=P2MX
+ ELSEIF(MSTP(56).EQ.2) THEN
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA,VXPGA)
+ DO 190 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 190 CONTINUE
+ VINT(231)=P2MX
+ ELSEIF(MSTP(55).GE.1.AND.MSTP(55).LE.5) THEN
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGVMD(0,MSTP(55),X,Q2MX,P2MX,PARP(1),XPGA,VXPGA)
+ DO 200 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 200 CONTINUE
+ VINT(231)=P2MX
+ ELSE
+ 210 RKF=11D0*PYR(0)
+ KFR=1
+ IF(RKF.GT.1D0) KFR=2
+ IF(RKF.GT.5D0) KFR=3
+ IF(RKF.GT.6D0) KFR=4
+ IF(RKF.GT.10D0) KFR=5
+ IF(KFR.EQ.4.AND.Q2.LT.PMCGA**2) GOTO 210
+ IF(KFR.EQ.5.AND.Q2.LT.PMBGA**2) GOTO 210
+ IF(MSTP(57).EQ.0) Q2MX=P2MX
+ CALL PYGVMD(0,KFR,X,Q2MX,P2MX,PARP(1),XPGA,VXPGA)
+ DO 220 KFL=-6,6
+ XPQ(KFL)=XPGA(KFL)
+ 220 CONTINUE
+ VINT(231)=P2MX
+ ENDIF
+
+C...Proton parton distribution call.
+ ELSE
+ IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.11) THEN
+ CALL PYPDPR(X,Q2,XPPR)
+ DO 230 KFL=-6,6
+ XPQ(KFL)=XPPR(KFL)
+ 230 CONTINUE
+ ELSEIF(MSTP(52).EQ.2) THEN
+C...Call PDFLIB parton distributions.
+ PARM(1)='NPTYPE'
+ VALUE(1)=1
+ PARM(2)='NGROUP'
+ VALUE(2)=MSTP(51)/1000
+ PARM(3)='NSET'
+ VALUE(3)=MOD(MSTP(51),1000)
+ IF(MINT(93).NE.1000000+MSTP(51)) THEN
+ CALL PDFSET(PARM,VALUE)
+ MINT(93)=1000000+MSTP(51)
+ ENDIF
+ XX=X
+ QQ=SQRT(MAX(0D0,Q2MIN,Q2))
+ IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
+ CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
+ VINT(231)=Q2MIN
+ XPQ(0)=GLU
+ XPQ(1)=DNV+DSEA
+ XPQ(-1)=DSEA
+ XPQ(2)=UPV+USEA
+ XPQ(-2)=USEA
+ XPQ(3)=STR
+ XPQ(-3)=STR
+ XPQ(4)=CHM
+ XPQ(-4)=CHM
+ XPQ(5)=BOT
+ XPQ(-5)=BOT
+ XPQ(6)=TOP
+ XPQ(-6)=TOP
+ ELSE
+ WRITE(MSTU(11),5200) KF,MSTP(52),MSTP(51)
+ ENDIF
+ ENDIF
+
+C...Isospin average for pi0/gammaVDM.
+ IF(KFA.EQ.111.OR.(KFA.EQ.22.AND.MINT(109).EQ.2)) THEN
+ IF(KFA.EQ.22.AND.MSTP(55).GE.5.AND.MSTP(55).LE.12) THEN
+ XPV=XPQ(2)-XPQ(1)
+ XPQ(2)=XPQ(1)
+ XPQ(-2)=XPQ(-1)
+ ELSE
+ XPS=0.5D0*(XPQ(1)+XPQ(-2))
+ XPV=0.5D0*(XPQ(2)+XPQ(-1))-XPS
+ XPQ(2)=XPS
+ XPQ(-1)=XPS
+ ENDIF
+ IF(KFA.EQ.22.AND.MINT(105).LE.223) THEN
+ XPQ(1)=XPQ(1)+0.2D0*XPV
+ XPQ(-1)=XPQ(-1)+0.2D0*XPV
+ XPQ(2)=XPQ(2)+0.8D0*XPV
+ XPQ(-2)=XPQ(-2)+0.8D0*XPV
+ ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.333) THEN
+ XPQ(3)=XPQ(3)+XPV
+ XPQ(-3)=XPQ(-3)+XPV
+ ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.443) THEN
+ XPQ(4)=XPQ(4)+XPV
+ XPQ(-4)=XPQ(-4)+XPV
+ IF(MSTP(55).GE.9) THEN
+ DO 240 KFL=-6,6
+ XPQ(KFL)=0D0
+ 240 CONTINUE
+ ENDIF
+ ELSE
+ XPQ(1)=XPQ(1)+0.5D0*XPV
+ XPQ(-1)=XPQ(-1)+0.5D0*XPV
+ XPQ(2)=XPQ(2)+0.5D0*XPV
+ XPQ(-2)=XPQ(-2)+0.5D0*XPV
+ ENDIF
+
+C...Rescale for gammaVDM by effective gamma -> rho coupling.
+ IF(KFA.EQ.22.AND.MINT(109).EQ.2) THEN
+ DO 250 KFL=-6,6
+ XPQ(KFL)=VINT(281)*XPQ(KFL)
+ 250 CONTINUE
+ VINT(232)=VINT(281)*XPV
+ ENDIF
+
+C...Isospin conjugation for neutron.
+ ELSEIF(KFA.EQ.2112) THEN
+ XPS=XPQ(1)
+ XPQ(1)=XPQ(2)
+ XPQ(2)=XPS
+ XPS=XPQ(-1)
+ XPQ(-1)=XPQ(-2)
+ XPQ(-2)=XPS
+
+C...Simple recipes for hyperon (average valence parton distribution).
+ ELSEIF(KFA.EQ.3122.OR.KFA.EQ.3112.OR.KFA.EQ.3212.OR.KFA.EQ.3222
+ & .OR.KFA.EQ.3312.OR.KFA.EQ.3322.OR.KFA.EQ.3334) THEN
+ XPVAL=(XPQ(1)+XPQ(2)-XPQ(-1)-XPQ(-2))/3D0
+ XPSEA=0.5D0*(XPQ(-1)+XPQ(-2))
+ XPQ(1)=XPSEA
+ XPQ(2)=XPSEA
+ XPQ(-1)=XPSEA
+ XPQ(-2)=XPSEA
+ XPQ(KFA/1000)=XPQ(KFA/1000)+XPVAL
+ XPQ(MOD(KFA/100,10))=XPQ(MOD(KFA/100,10))+XPVAL
+ XPQ(MOD(KFA/10,10))=XPQ(MOD(KFA/10,10))+XPVAL
+ ENDIF
+
+C...Charge conjugation for antiparticle.
+ IF(KF.LT.0) THEN
+ DO 260 KFL=1,25
+ IF(KFL.EQ.21.OR.KFL.EQ.22.OR.KFL.EQ.23.OR.KFL.EQ.25) GOTO 260
+ XPS=XPQ(KFL)
+ XPQ(KFL)=XPQ(-KFL)
+ XPQ(-KFL)=XPS
+ 260 CONTINUE
+ ENDIF
+
+C...Allow gluon also in position 21.
+ XPQ(21)=XPQ(0)
+
+C...Check positivity and reset above maximum allowed flavour.
+ DO 270 KFL=-25,25
+ XPQ(KFL)=MAX(0D0,XPQ(KFL))
+ IF(IABS(KFL).GT.MSTP(58).AND.IABS(KFL).LE.8) XPQ(KFL)=0D0
+ 270 CONTINUE
+
+C...Formats for error printouts.
+ 5000 FORMAT(' Error: x value outside physical range; x =',1P,D12.3)
+ 5100 FORMAT(' Error: illegal particle code for parton distribution;',
+ &' KF =',I5)
+ 5200 FORMAT(' Error: unknown parton distribution; KF, library, set =',
+ &3I5)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPDFL
+C...Gives proton parton distribution at small x and/or Q^2 according to
+C...correct limiting behaviour.
+
+ SUBROUTINE PYPDFL(KF,X,Q2,XPQ)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
+C...Local arrays.
+ DIMENSION XPQ(-25:25),XPA(-25:25),XPB(-25:25),WTSB(-3:3)
+ DATA RMR/0.92D0/,RMP/0.38D0/,WTSB/0.5D0,1D0,1D0,5D0,1D0,1D0,0.5D0/
+
+C...Send everything but protons/neutrons/VMD pions directly to PYPDFU.
+ MINT(92)=0
+ KFA=IABS(KF)
+ IACC=0
+ IF((KFA.EQ.2212.OR.KFA.EQ.2112).AND.MSTP(57).GE.2) IACC=1
+ IF(KFA.EQ.211.AND.MSTP(57).GE.3) IACC=1
+ IF(KFA.EQ.22.AND.MINT(109).EQ.2.AND.MSTP(57).GE.3) IACC=1
+ IF(IACC.EQ.0) THEN
+ CALL PYPDFU(KF,X,Q2,XPQ)
+ RETURN
+ ENDIF
+
+C...Reset. Check x.
+ DO 100 KFL=-25,25
+ XPQ(KFL)=0D0
+ 100 CONTINUE
+ IF(X.LE.0D0.OR.X.GE.1D0) THEN
+ WRITE(MSTU(11),5000) X
+ RETURN
+ ENDIF
+
+C...Define valence content.
+ KFC=KF
+ NV1=2
+ NV2=1
+ IF(KF.EQ.2212) THEN
+ KFV1=2
+ KFV2=1
+ ELSEIF(KF.EQ.-2212) THEN
+ KFV1=-2
+ KFV2=-1
+ ELSEIF(KF.EQ.2112) THEN
+ KFV1=1
+ KFV2=2
+ ELSEIF(KF.EQ.-2112) THEN
+ KFV1=-1
+ KFV2=-2
+ ELSEIF(KF.EQ.211) THEN
+ NV1=1
+ KFV1=2
+ KFV2=-1
+ ELSEIF(KF.EQ.-211) THEN
+ NV1=1
+ KFV1=-2
+ KFV2=1
+ ELSEIF(MINT(105).LE.223) THEN
+ KFV1=1
+ WTV1=0.2D0
+ KFV2=2
+ WTV2=0.8D0
+ ELSEIF(MINT(105).EQ.333) THEN
+ KFV1=3
+ WTV1=1.0D0
+ KFV2=1
+ WTV2=0.0D0
+ ELSEIF(MINT(105).EQ.443) THEN
+ KFV1=4
+ WTV1=1.0D0
+ KFV2=1
+ WTV2=0.0D0
+ ENDIF
+
+C...Do naive evaluation and find min Q^2, boundary Q^2 and x_0.
+ CALL PYPDFU(KFC,X,Q2,XPA)
+ Q2MN=MAX(3D0,VINT(231))
+ Q2B=2D0+0.052D0**2*EXP(3.56D0*SQRT(MAX(0D0,-LOG(3D0*X))))
+ XMN=EXP(-(LOG((Q2MN-2D0)/0.052D0**2)/3.56D0)**2)/3D0
+
+C...Large Q2 and large x: naive call is enough.
+ IF(Q2.GT.Q2MN.AND.Q2.GT.Q2B) THEN
+ DO 110 KFL=-25,25
+ XPQ(KFL)=XPA(KFL)
+ 110 CONTINUE
+ MINT(92)=1
+
+C...Small Q2 and large x: dampen boundary value.
+ ELSEIF(X.GT.XMN) THEN
+
+C...Evaluate at boundary and define dampening factors.
+ CALL PYPDFU(KFC,X,Q2MN,XPA)
+ FV=(Q2*(Q2MN+RMR)/(Q2MN*(Q2+RMR)))**(0.55D0*(1D0-X)/(1D0-XMN))
+ FS=(Q2*(Q2MN+RMP)/(Q2MN*(Q2+RMP)))**1.08D0
+
+C...Separate valence and sea parts of parton distribution.
+ IF(KFA.NE.22) THEN
+ XFV1=XPA(KFV1)-XPA(-KFV1)
+ XPA(KFV1)=XPA(-KFV1)
+ XFV2=XPA(KFV2)-XPA(-KFV2)
+ XPA(KFV2)=XPA(-KFV2)
+ ELSE
+ XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
+ XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
+ XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
+ XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
+ ENDIF
+
+C...Dampen valence and sea separately. Put back together.
+ DO 120 KFL=-25,25
+ XPQ(KFL)=FS*XPA(KFL)
+ 120 CONTINUE
+ IF(KFA.NE.22) THEN
+ XPQ(KFV1)=XPQ(KFV1)+FV*XFV1
+ XPQ(KFV2)=XPQ(KFV2)+FV*XFV2
+ ELSE
+ XPQ(KFV1)=XPQ(KFV1)+FV*WTV1*VINT(232)
+ XPQ(-KFV1)=XPQ(-KFV1)+FV*WTV1*VINT(232)
+ XPQ(KFV2)=XPQ(KFV2)+FV*WTV2*VINT(232)
+ XPQ(-KFV2)=XPQ(-KFV2)+FV*WTV2*VINT(232)
+ ENDIF
+ MINT(92)=2
+
+C...Large Q2 and small x: interpolate behaviour.
+ ELSEIF(Q2.GT.Q2MN) THEN
+
+C...Evaluate at extremes and define coefficients for interpolation.
+ CALL PYPDFU(KFC,XMN,Q2MN,XPA)
+ VI232A=VINT(232)
+ CALL PYPDFU(KFC,X,Q2B,XPB)
+ VI232B=VINT(232)
+ FLA=LOG(Q2B/Q2)/LOG(Q2B/Q2MN)
+ FVA=(X/XMN)**0.45D0*FLA
+ FSA=(X/XMN)**(-0.08D0)*FLA
+ FB=1D0-FLA
+
+C...Separate valence and sea parts of parton distribution.
+ IF(KFA.NE.22) THEN
+ XFVA1=XPA(KFV1)-XPA(-KFV1)
+ XPA(KFV1)=XPA(-KFV1)
+ XFVA2=XPA(KFV2)-XPA(-KFV2)
+ XPA(KFV2)=XPA(-KFV2)
+ XFVB1=XPB(KFV1)-XPB(-KFV1)
+ XPB(KFV1)=XPB(-KFV1)
+ XFVB2=XPB(KFV2)-XPB(-KFV2)
+ XPB(KFV2)=XPB(-KFV2)
+ ELSE
+ XPA(KFV1)=XPA(KFV1)-WTV1*VI232A
+ XPA(-KFV1)=XPA(-KFV1)-WTV1*VI232A
+ XPA(KFV2)=XPA(KFV2)-WTV2*VI232A
+ XPA(-KFV2)=XPA(-KFV2)-WTV2*VI232A
+ XPB(KFV1)=XPB(KFV1)-WTV1*VI232B
+ XPB(-KFV1)=XPB(-KFV1)-WTV1*VI232B
+ XPB(KFV2)=XPB(KFV2)-WTV2*VI232B
+ XPB(-KFV2)=XPB(-KFV2)-WTV2*VI232B
+ ENDIF
+
+C...Interpolate for valence and sea. Put back together.
+ DO 130 KFL=-25,25
+ XPQ(KFL)=FSA*XPA(KFL)+FB*XPB(KFL)
+ 130 CONTINUE
+ IF(KFA.NE.22) THEN
+ XPQ(KFV1)=XPQ(KFV1)+(FVA*XFVA1+FB*XFVB1)
+ XPQ(KFV2)=XPQ(KFV2)+(FVA*XFVA2+FB*XFVB2)
+ ELSE
+ XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
+ XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
+ XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
+ XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
+ ENDIF
+ MINT(92)=3
+
+C...Small Q2 and small x: dampen boundary value and add term.
+ ELSE
+
+C...Evaluate at boundary and define dampening factors.
+ CALL PYPDFU(KFC,XMN,Q2MN,XPA)
+ FB=(XMN-X)*(Q2MN-Q2)/(XMN*Q2MN)
+ FA=1D0-FB
+ FVC=(X/XMN)**0.45D0*(Q2/(Q2+RMR))**0.55D0
+ FVA=FVC*FA*((Q2MN+RMR)/Q2MN)**0.55D0
+ FVB=FVC*FB*1.10D0*XMN**0.45D0*0.11D0
+ FSC=(X/XMN)**(-0.08D0)*(Q2/(Q2+RMP))**1.08D0
+ FSA=FSC*FA*((Q2MN+RMP)/Q2MN)**1.08D0
+ FSB=FSC*FB*0.21D0*XMN**(-0.08D0)*0.21D0
+
+C...Separate valence and sea parts of parton distribution.
+ IF(KFA.NE.22) THEN
+ XFV1=XPA(KFV1)-XPA(-KFV1)
+ XPA(KFV1)=XPA(-KFV1)
+ XFV2=XPA(KFV2)-XPA(-KFV2)
+ XPA(KFV2)=XPA(-KFV2)
+ ELSE
+ XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
+ XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
+ XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
+ XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
+ ENDIF
+
+C...Dampen valence and sea separately. Add constant terms.
+C...Put back together.
+ DO 140 KFL=-25,25
+ XPQ(KFL)=FSA*XPA(KFL)
+ 140 CONTINUE
+ IF(KFA.NE.22) THEN
+ DO 150 KFL=-3,3
+ XPQ(KFL)=XPQ(KFL)+FSB*WTSB(KFL)
+ 150 CONTINUE
+ XPQ(KFV1)=XPQ(KFV1)+(FVA*XFV1+FVB*NV1)
+ XPQ(KFV2)=XPQ(KFV2)+(FVA*XFV2+FVB*NV2)
+ ELSE
+ DO 160 KFL=-3,3
+ XPQ(KFL)=XPQ(KFL)+VINT(281)*FSB*WTSB(KFL)
+ 160 CONTINUE
+ XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
+ XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
+ XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
+ XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
+ ENDIF
+ XPQ(21)=XPQ(0)
+ MINT(92)=4
+ ENDIF
+
+C...Format for error printout.
+ 5000 FORMAT(' Error: x value outside physical range; x =',1P,D12.3)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPDEL
+C...Gives electron parton distribution.
+
+ SUBROUTINE PYPDEL(X,Q2,XPEL)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
+C...Local arrays.
+ DIMENSION XPEL(-25:25),XPGA(-6:6),SXP(0:6)
+
+C...Interface to PDFLIB.
+ COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
+ SAVE /W50513/
+ DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
+ &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
+ CHARACTER*20 PARM(20)
+ DATA VALUE/20*0D0/,PARM/20*' '/
+
+C...Some common constants.
+ DO 100 KFL=-25,25
+ XPEL(KFL)=0D0
+ 100 CONTINUE
+ AEM=PARU(101)
+ PME=PMAS(11,1)
+ XL=LOG(MAX(1D-10,X))
+ X1L=LOG(MAX(1D-10,1D0-X))
+ HLE=LOG(MAX(3D0,Q2/PME**2))
+ HBE2=(AEM/PARU(1))*(HLE-1D0)
+
+C...Electron inside electron, see R. Kleiss et al., in Z physics at
+C...LEP 1, CERN 89-08, p. 34
+ IF(MSTP(59).LE.1) THEN
+ HDE=1D0+(AEM/PARU(1))*(1.5D0*HLE+1.289868D0)+(AEM/PARU(1))**2*
+ & (-2.164868D0*HLE**2+9.840808D0*HLE-10.130464D0)
+ HEE=HBE2*(1D0-X)**(HBE2-1D0)*SQRT(MAX(0D0,HDE))-
+ & 0.5D0*HBE2*(1D0+X)+HBE2**2/8D0*((1D0+X)*(-4D0*X1L+3D0*XL)-
+ & 4D0*XL/(1D0-X)-5D0-X)
+ ELSE
+ HEE=HBE2*(1D0-X)**(HBE2-1D0)*EXP(0.172784D0*HBE2)/
+ & PYGAMM(1D0+HBE2)-0.5D0*HBE2*(1D0+X)+HBE2**2/8D0*((1D0+X)*
+ & (-4D0*X1L+3D0*XL)-4D0*XL/(1D0-X)-5D0-X)
+ ENDIF
+ IF(X.GT.0.9999D0.AND.X.LE.0.999999D0) THEN
+ HEE=HEE*100D0**HBE2/(100D0**HBE2-1D0)
+ ELSEIF(X.GT.0.999999D0) THEN
+ HEE=0D0
+ ENDIF
+ XPEL(11)=X*HEE
+
+C...Photon and (transverse) W- inside electron.
+ AEMP=PYALEM(PME*SQRT(MAX(0D0,Q2)))/PARU(2)
+ IF(MSTP(13).LE.1) THEN
+ HLG=HLE
+ ELSE
+ HLG=LOG(MAX(1D0,(PARP(13)/PME**2)*(1D0-X)/X**2))
+ ENDIF
+ XPEL(22)=AEMP*HLG*(1D0+(1D0-X)**2)
+ HLW=LOG(1D0+Q2/PMAS(24,1)**2)/(4D0*PARU(102))
+ XPEL(-24)=AEMP*HLW*(1D0+(1D0-X)**2)
+
+C...Electron or positron inside photon inside electron.
+ IF(MSTP(12).EQ.1) THEN
+ XFSEA=0.5D0*(AEMP*(HLE-1D0))**2*(4D0/3D0+X-X**2-4D0*X**3/3D0+
+ & 2D0*X*(1D0+X)*XL)
+ XPEL(11)=XPEL(11)+XFSEA
+ XPEL(-11)=XFSEA
+
+C...Initialize PDFLIB photon parton distributions.
+ IF(MSTP(56).EQ.2) THEN
+ PARM(1)='NPTYPE'
+ VALUE(1)=3
+ PARM(2)='NGROUP'
+ VALUE(2)=MSTP(55)/1000
+ PARM(3)='NSET'
+ VALUE(3)=MOD(MSTP(55),1000)
+ IF(MINT(93).NE.3000000+MSTP(55)) THEN
+ CALL PDFSET(PARM,VALUE)
+ MINT(93)=3000000+MSTP(55)
+ ENDIF
+ ENDIF
+
+C...Quarks and gluons inside photon inside electron:
+C...numerical convolution required.
+ DO 110 KFL=0,6
+ SXP(KFL)=0D0
+ 110 CONTINUE
+ SUMXPP=0D0
+ ITER=-1
+ 120 ITER=ITER+1
+ SUMXP=SUMXPP
+ NSTP=2**(ITER-1)
+ IF(ITER.EQ.0) NSTP=2
+ DO 130 KFL=0,6
+ SXP(KFL)=0.5D0*SXP(KFL)
+ 130 CONTINUE
+ WTSTP=0.5D0/NSTP
+ IF(ITER.EQ.0) WTSTP=0.5D0
+C...Pick grid of x_{gamma} values logarithmically even.
+ DO 150 ISTP=1,NSTP
+ IF(ITER.EQ.0) THEN
+ XLE=XL*(ISTP-1)
+ ELSE
+ XLE=XL*(ISTP-0.5D0)/NSTP
+ ENDIF
+ XE=MIN(0.999999D0,EXP(XLE))
+ XG=MIN(0.999999D0,X/XE)
+C...Evaluate photon inside electron parton distribution for convolution.
+ XPGP=1D0+(1D0-XE)**2
+ IF(MSTP(13).LE.1) THEN
+ XPGP=XPGP*HLE
+ ELSE
+ XPGP=XPGP*LOG(MAX(1D0,(PARP(13)/PME**2)*(1D0-XE)/XE**2))
+ ENDIF
+C...Evaluate photon parton distributions for convolution.
+ IF(MSTP(56).EQ.1) THEN
+ CALL PYPDGA(XG,Q2,XPGA)
+ DO 140 KFL=0,5
+ SXP(KFL)=SXP(KFL)+WTSTP*XPGP*XPGA(KFL)
+ 140 CONTINUE
+ ELSEIF(MSTP(56).EQ.2) THEN
+C...Call PDFLIB parton distributions.
+ XX=XG
+ QQ=SQRT(MAX(0D0,Q2MIN,Q2))
+ IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
+ CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
+ SXP(0)=SXP(0)+WTSTP*XPGP*GLU
+ SXP(1)=SXP(1)+WTSTP*XPGP*DNV
+ SXP(2)=SXP(2)+WTSTP*XPGP*UPV
+ SXP(3)=SXP(3)+WTSTP*XPGP*STR
+ SXP(4)=SXP(4)+WTSTP*XPGP*CHM
+ SXP(5)=SXP(5)+WTSTP*XPGP*BOT
+ SXP(6)=SXP(6)+WTSTP*XPGP*TOP
+ ENDIF
+ 150 CONTINUE
+ SUMXPP=SXP(0)+2D0*SXP(1)+2D0*SXP(2)
+ IF(ITER.LE.2.OR.(ITER.LE.7.AND.ABS(SUMXPP-SUMXP).GT.
+ & PARP(14)*(SUMXPP+SUMXP))) GOTO 120
+
+C...Put convolution into output arrays.
+ FCONV=AEMP*(-XL)
+ XPEL(0)=FCONV*SXP(0)
+ DO 160 KFL=1,6
+ XPEL(KFL)=FCONV*SXP(KFL)
+ XPEL(-KFL)=XPEL(KFL)
+ 160 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPDGA
+C...Gives photon parton distribution.
+
+ SUBROUTINE PYPDGA(X,Q2,XPGA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYPARS/,/PYINT1/
+C...Local arrays.
+ DIMENSION XPGA(-6:6),DGAG(4,3),DGBG(4,3),DGCG(4,3),DGAN(4,3),
+ &DGBN(4,3),DGCN(4,3),DGDN(4,3),DGEN(4,3),DGAS(4,3),DGBS(4,3),
+ &DGCS(4,3),DGDS(4,3),DGES(4,3)
+
+C...The following data lines are coefficients needed in the
+C...Drees and Grassie photon parton distribution parametrization.
+ DATA DGAG/-.207D0,.6158D0,1.074D0,0.D0,.8926D-2,.6594D0,
+ &.4766D0,.1975D-1,.03197D0,1.018D0,.2461D0,.2707D-1/
+ DATA DGBG/-.1987D0,.6257D0,8.352D0,5.024D0,.5085D-1,.2774D0,
+ &-.3906D0,-.3212D0,-.618D-2,.9476D0,-.6094D0,-.1067D-1/
+ DATA DGCG/5.119D0,-.2752D0,-6.993D0,2.298D0,-.2313D0,.1382D0,
+ &6.542D0,.5162D0,-.1216D0,.9047D0,2.653D0,.2003D-2/
+ DATA DGAN/2.285D0,-.1526D-1,1330.D0,4.219D0,-.3711D0,1.061D0,
+ &4.758D0,-.1503D-1,15.8D0,-.9464D0,-.5D0,-.2118D0/
+ DATA DGBN/6.073D0,-.8132D0,-41.31D0,3.165D0,-.1717D0,.7815D0,
+ &1.535D0,.7067D-2,2.742D0,-.7332D0,.7148D0,3.287D0/
+ DATA DGCN/-.4202D0,.1778D-1,.9216D0,.18D0,.8766D-1,.2197D-1,
+ &.1096D0,.204D0,.2917D-1,.4657D-1,.1785D0,.4811D-1/
+ DATA DGDN/-.8083D-1,.6346D0,1.208D0,.203D0,-.8915D0,.2857D0,
+ &2.973D0,.1185D0,-.342D-1,.7196D0,.7338D0,.8139D-1/
+ DATA DGEN/.5526D-1,1.136D0,.9512D0,.1163D-1,-.1816D0,.5866D0,
+ &2.421D0,.4059D0,-.2302D-1,.9229D0,.5873D0,-.79D-4/
+ DATA DGAS/16.69D0,-.7916D0,1099.D0,4.428D0,-.1207D0,1.071D0,
+ &1.977D0,-.8625D-2,6.734D0,-1.008D0,-.8594D-1,.7625D-1/
+ DATA DGBS/.176D0,.4794D-1,1.047D0,.25D-1,25.D0,-1.648D0,
+ &-.1563D-1,6.438D0,59.88D0,-2.983D0,4.48D0,.9686D0/
+ DATA DGCS/-.208D-1,.3386D-2,4.853D0,.8404D0,-.123D-1,1.162D0,
+ &.4824D0,-.11D-1,-.3226D-2,.8432D0,.3616D0,.1383D-2/
+ DATA DGDS/-.1685D-1,1.353D0,1.426D0,1.239D0,-.9194D-1,.7912D0,
+ &.6397D0,2.327D0,-.3321D-1,.9475D0,-.3198D0,.2132D-1/
+ DATA DGES/-.1986D0,1.1D0,1.136D0,-.2779D0,.2015D-1,.9869D0,
+ &-.7036D-1,.1694D-1,.1059D0,.6954D0,-.6663D0,.3683D0/
+
+C...Photon parton distribution from Drees and Grassie.
+C...Allowed variable range: 1 GeV^2 < Q^2 < 10000 GeV^2.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0D0
+ 100 CONTINUE
+ VINT(231)=1D0
+ IF(MSTP(57).LE.0) THEN
+ T=LOG(1D0/0.16D0)
+ ELSE
+ T=LOG(MIN(1D4,MAX(1D0,Q2))/0.16D0)
+ ENDIF
+ X1=1D0-X
+ NF=3
+ IF(Q2.GT.25D0) NF=4
+ IF(Q2.GT.300D0) NF=5
+ NFE=NF-2
+ AEM=PARU(101)
+
+C...Evaluate gluon content.
+ DGA=DGAG(1,NFE)*T**DGAG(2,NFE)+DGAG(3,NFE)*T**(-DGAG(4,NFE))
+ DGB=DGBG(1,NFE)*T**DGBG(2,NFE)+DGBG(3,NFE)*T**(-DGBG(4,NFE))
+ DGC=DGCG(1,NFE)*T**DGCG(2,NFE)+DGCG(3,NFE)*T**(-DGCG(4,NFE))
+ XPGL=DGA*X**DGB*X1**DGC
+
+C...Evaluate up- and down-type quark content.
+ DGA=DGAN(1,NFE)*T**DGAN(2,NFE)+DGAN(3,NFE)*T**(-DGAN(4,NFE))
+ DGB=DGBN(1,NFE)*T**DGBN(2,NFE)+DGBN(3,NFE)*T**(-DGBN(4,NFE))
+ DGC=DGCN(1,NFE)*T**DGCN(2,NFE)+DGCN(3,NFE)*T**(-DGCN(4,NFE))
+ DGD=DGDN(1,NFE)*T**DGDN(2,NFE)+DGDN(3,NFE)*T**(-DGDN(4,NFE))
+ DGE=DGEN(1,NFE)*T**DGEN(2,NFE)+DGEN(3,NFE)*T**(-DGEN(4,NFE))
+ XPQN=X*(X**2+X1**2)/(DGA-DGB*LOG(X1))+DGC*X**DGD*X1**DGE
+ DGA=DGAS(1,NFE)*T**DGAS(2,NFE)+DGAS(3,NFE)*T**(-DGAS(4,NFE))
+ DGB=DGBS(1,NFE)*T**DGBS(2,NFE)+DGBS(3,NFE)*T**(-DGBS(4,NFE))
+ DGC=DGCS(1,NFE)*T**DGCS(2,NFE)+DGCS(3,NFE)*T**(-DGCS(4,NFE))
+ DGD=DGDS(1,NFE)*T**DGDS(2,NFE)+DGDS(3,NFE)*T**(-DGDS(4,NFE))
+ DGE=DGES(1,NFE)*T**DGES(2,NFE)+DGES(3,NFE)*T**(-DGES(4,NFE))
+ DGF=9D0
+ IF(NF.EQ.4) DGF=10D0
+ IF(NF.EQ.5) DGF=55D0/6D0
+ XPQS=DGF*X*(X**2+X1**2)/(DGA-DGB*LOG(X1))+DGC*X**DGD*X1**DGE
+ IF(NF.LE.3) THEN
+ XPQU=(XPQS+9D0*XPQN)/6D0
+ XPQD=(XPQS-4.5D0*XPQN)/6D0
+ ELSEIF(NF.EQ.4) THEN
+ XPQU=(XPQS+6D0*XPQN)/8D0
+ XPQD=(XPQS-6D0*XPQN)/8D0
+ ELSE
+ XPQU=(XPQS+7.5D0*XPQN)/10D0
+ XPQD=(XPQS-5D0*XPQN)/10D0
+ ENDIF
+
+C...Put into output arrays.
+ XPGA(0)=AEM*XPGL
+ XPGA(1)=AEM*XPQD
+ XPGA(2)=AEM*XPQU
+ XPGA(3)=AEM*XPQD
+ IF(NF.GE.4) XPGA(4)=AEM*XPQU
+ IF(NF.GE.5) XPGA(5)=AEM*XPQD
+ DO 110 KFL=1,6
+ XPGA(-KFL)=XPGA(KFL)
+ 110 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGGAM
+C...Constructs the F2 and parton distributions of the photon
+C...by summing homogeneous (VMD) and inhomogeneous (anomalous) terms.
+C...For F2, c and b are included by the Bethe-Heitler formula;
+C...in the 'MSbar' scheme additionally a Cgamma term is added.
+C...Contains the SaS sets 1D, 1M, 2D and 2M.
+C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
+
+ SUBROUTINE PYGGAM(ISET,X,Q2,P2,IP2,F2GM,XPDFGM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
+ &XPDIR(-6:6)
+ COMMON/PYINT9/VXPVMD(-6:6),VXPANL(-6:6),VXPANH(-6:6),VXPDGM(-6:6)
+ SAVE /PYINT8/,/PYINT9/
+C...Local arrays.
+ DIMENSION XPDFGM(-6:6),XPGA(-6:6), VXPGA(-6:6)
+C...Charm and bottom masses (low to compensate for J/psi etc.).
+ DATA PMC/1.3D0/, PMB/4.6D0/
+C...alpha_em and alpha_em/(2*pi).
+ DATA AEM/0.007297D0/, AEM2PI/0.0011614D0/
+C...Lambda value for 4 flavours.
+ DATA ALAM/0.20D0/
+C...Mixture u/(u+d), = 0.5 for incoherent and = 0.8 for coherent sum.
+ DATA FRACU/0.8D0/
+C...VMD couplings f_V**2/(4*pi).
+ DATA FRHO/2.20D0/, FOMEGA/23.6D0/, FPHI/18.4D0/
+C...Masses for rho (=omega) and phi.
+ DATA PMRHO/0.770D0/, PMPHI/1.020D0/
+C...Number of points in integration for IP2=1.
+ DATA NSTEP/100/
+
+C...Reset output.
+ F2GM=0D0
+ DO 100 KFL=-6,6
+ XPDFGM(KFL)=0D0
+ XPVMD(KFL)=0D0
+ XPANL(KFL)=0D0
+ XPANH(KFL)=0D0
+ XPBEH(KFL)=0D0
+ XPDIR(KFL)=0D0
+ VXPVMD(KFL)=0D0
+ VXPANL(KFL)=0D0
+ VXPANH(KFL)=0D0
+ VXPDGM(KFL)=0D0
+ 100 CONTINUE
+
+C...Set Q0 cut-off parameter as function of set used.
+ IF(ISET.LE.2) THEN
+ Q0=0.6D0
+ ELSE
+ Q0=2D0
+ ENDIF
+ Q02=Q0**2
+
+C...Scale choice for off-shell photon; common factors.
+ Q2A=Q2
+ FACNOR=1D0
+ IF(IP2.EQ.1) THEN
+ P2MX=P2+Q02
+ Q2A=Q2+P2*Q02/MAX(Q02,Q2)
+ FACNOR=LOG(Q2/Q02)/NSTEP
+ ELSEIF(IP2.EQ.2) THEN
+ P2MX=MAX(P2,Q02)
+ ELSEIF(IP2.EQ.3) THEN
+ P2MX=P2+Q02
+ Q2A=Q2+P2*Q02/MAX(Q02,Q2)
+ ELSEIF(IP2.EQ.4) THEN
+ P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ ELSEIF(IP2.EQ.5) THEN
+ P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ P2MX=Q0*SQRT(P2MXA)
+ FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MX)
+ ELSEIF(IP2.EQ.6) THEN
+ P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ P2MX=MAX(0D0,1D0-P2/Q2)*P2MX+MIN(1D0,P2/Q2)*MAX(P2,Q02)
+ ELSE
+ P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
+ & ((Q2+P2)*(Q02+P2)))
+ P2MX=Q0*SQRT(P2MXA)
+ P2MXB=P2MX
+ P2MX=MAX(0D0,1D0-P2/Q2)*P2MX+MIN(1D0,P2/Q2)*MAX(P2,Q02)
+ P2MXB=MAX(0D0,1D0-P2/Q2)*P2MXB+MIN(1D0,P2/Q2)*P2MXA
+ FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MXB)
+ ENDIF
+
+C...Call VMD parametrization for d quark and use to give rho, omega,
+C...phi. Note dipole dampening for off-shell photon.
+ CALL PYGVMD(ISET,1,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ XFVAL=VXPGA(1)
+ XPGA(1)=XPGA(2)
+ XPGA(-1)=XPGA(-2)
+ FACUD=AEM*(1D0/FRHO+1D0/FOMEGA)*(PMRHO**2/(PMRHO**2+P2))**2
+ FACS=AEM*(1D0/FPHI)*(PMPHI**2/(PMPHI**2+P2))**2
+ DO 110 KFL=-5,5
+ XPVMD(KFL)=(FACUD+FACS)*XPGA(KFL)
+ 110 CONTINUE
+ XPVMD(1)=XPVMD(1)+(1D0-FRACU)*FACUD*XFVAL
+ XPVMD(2)=XPVMD(2)+FRACU*FACUD*XFVAL
+ XPVMD(3)=XPVMD(3)+FACS*XFVAL
+ XPVMD(-1)=XPVMD(-1)+(1D0-FRACU)*FACUD*XFVAL
+ XPVMD(-2)=XPVMD(-2)+FRACU*FACUD*XFVAL
+ XPVMD(-3)=XPVMD(-3)+FACS*XFVAL
+ VXPVMD(1)=(1D0-FRACU)*FACUD*XFVAL
+ VXPVMD(2)=FRACU*FACUD*XFVAL
+ VXPVMD(3)=FACS*XFVAL
+ VXPVMD(-1)=(1D0-FRACU)*FACUD*XFVAL
+ VXPVMD(-2)=FRACU*FACUD*XFVAL
+ VXPVMD(-3)=FACS*XFVAL
+
+ IF(IP2.NE.1) THEN
+C...Anomalous parametrizations for different strategies
+C...for off-shell photons; except full integration.
+
+C...Call anomalous parametrization for d + u + s.
+ CALL PYGANO(-3,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ DO 120 KFL=-5,5
+ XPANL(KFL)=FACNOR*XPGA(KFL)
+ VXPANL(KFL)=FACNOR*VXPGA(KFL)
+ 120 CONTINUE
+
+C...Call anomalous parametrization for c and b.
+ CALL PYGANO(4,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ DO 130 KFL=-5,5
+ XPANH(KFL)=FACNOR*XPGA(KFL)
+ VXPANH(KFL)=FACNOR*VXPGA(KFL)
+ 130 CONTINUE
+ CALL PYGANO(5,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
+ DO 140 KFL=-5,5
+ XPANH(KFL)=XPANH(KFL)+FACNOR*XPGA(KFL)
+ VXPANH(KFL)=VXPANH(KFL)+FACNOR*VXPGA(KFL)
+ 140 CONTINUE
+
+ ELSE
+C...Special option: loop over flavours and integrate over k2.
+ DO 170 KF=1,5
+ DO 160 ISTEP=1,NSTEP
+ Q2STEP=Q02*(Q2/Q02)**((ISTEP-0.5D0)/NSTEP)
+ IF((KF.EQ.4.AND.Q2STEP.LT.PMC**2).OR.
+ & (KF.EQ.5.AND.Q2STEP.LT.PMB**2)) GOTO 160
+ CALL PYGVMD(0,KF,X,Q2,Q2STEP,ALAM,XPGA,VXPGA)
+ FACQ=AEM2PI*(Q2STEP/(Q2STEP+P2))**2*FACNOR
+ IF(MOD(KF,2).EQ.0) FACQ=FACQ*(8D0/9D0)
+ IF(MOD(KF,2).EQ.1) FACQ=FACQ*(2D0/9D0)
+ DO 150 KFL=-5,5
+ IF(KF.LE.3) XPANL(KFL)=XPANL(KFL)+FACQ*XPGA(KFL)
+ IF(KF.GE.4) XPANH(KFL)=XPANH(KFL)+FACQ*XPGA(KFL)
+ IF(KF.LE.3) VXPANL(KFL)=VXPANL(KFL)+FACQ*VXPGA(KFL)
+ IF(KF.GE.4) VXPANH(KFL)=VXPANH(KFL)+FACQ*VXPGA(KFL)
+ 150 CONTINUE
+ 160 CONTINUE
+ 170 CONTINUE
+ ENDIF
+
+C...Call Bethe-Heitler term expression for charm and bottom.
+ CALL PYGBEH(4,X,Q2,P2,PMC**2,XPBH)
+ XPBEH(4)=XPBH
+ XPBEH(-4)=XPBH
+ CALL PYGBEH(5,X,Q2,P2,PMB**2,XPBH)
+ XPBEH(5)=XPBH
+ XPBEH(-5)=XPBH
+
+C...For MSbar subtraction call C^gamma term expression for d, u, s.
+ IF(ISET.EQ.2.OR.ISET.EQ.4) THEN
+ CALL PYGDIR(X,Q2,P2,Q02,XPGA)
+ DO 180 KFL=-5,5
+ XPDIR(KFL)=XPGA(KFL)
+ 180 CONTINUE
+ ENDIF
+
+C...Store result in output array.
+ DO 190 KFL=-5,5
+ CHSQ=1D0/9D0
+ IF(IABS(KFL).EQ.2.OR.IABS(KFL).EQ.4) CHSQ=4D0/9D0
+ XPF2=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
+ IF(KFL.NE.0) F2GM=F2GM+CHSQ*XPF2
+ XPDFGM(KFL)=XPVMD(KFL)+XPANL(KFL)+XPANH(KFL)
+ VXPDGM(KFL)=VXPVMD(KFL)+VXPANL(KFL)+VXPANH(KFL)
+ 190 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGVMD
+C...Evaluates the VMD parton distributions of a photon,
+C...evolved homogeneously from an initial scale P2 to Q2.
+C...Does not include dipole suppression factor.
+C...ISET is parton distribution set, see above;
+C...additionally ISET=0 is used for the evolution of an anomalous photon
+C...which branched at a scale P2 and then evolved homogeneously to Q2.
+C...ALAM is the 4-flavour Lambda, which is automatically converted
+C...to 3- and 5-flavour equivalents as needed.
+C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
+
+ SUBROUTINE PYGVMD(ISET,KF,X,Q2,P2,ALAM,XPGA,VXPGA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Local arrays and data.
+ DIMENSION XPGA(-6:6), VXPGA(-6:6)
+ DATA PMC/1.3D0/, PMB/4.6D0/, AEM/0.007297D0/, AEM2PI/0.0011614D0/
+
+C...Reset output.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0D0
+ VXPGA(KFL)=0D0
+ 100 CONTINUE
+ KFA=IABS(KF)
+
+C...Calculate Lambda; protect against unphysical Q2 and P2 input.
+ ALAM3=ALAM*(PMC/ALAM)**(2D0/27D0)
+ ALAM5=ALAM*(ALAM/PMB)**(2D0/23D0)
+ P2EFF=MAX(P2,1.2D0*ALAM3**2)
+ IF(KFA.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
+ IF(KFA.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
+ Q2EFF=MAX(Q2,P2EFF)
+
+C...Find number of flavours at lower and upper scale.
+ NFP=4
+ IF(P2EFF.LT.PMC**2) NFP=3
+ IF(P2EFF.GT.PMB**2) NFP=5
+ NFQ=4
+ IF(Q2EFF.LT.PMC**2) NFQ=3
+ IF(Q2EFF.GT.PMB**2) NFQ=5
+
+C...Find s as sum of 3-, 4- and 5-flavour parts.
+ S=0D0
+ IF(NFP.EQ.3) THEN
+ Q2DIV=PMC**2
+ IF(NFQ.EQ.3) Q2DIV=Q2EFF
+ S=S+(6D0/27D0)*LOG(LOG(Q2DIV/ALAM3**2)/LOG(P2EFF/ALAM3**2))
+ ENDIF
+ IF(NFP.LE.4.AND.NFQ.GE.4) THEN
+ P2DIV=P2EFF
+ IF(NFP.EQ.3) P2DIV=PMC**2
+ Q2DIV=Q2EFF
+ IF(NFQ.EQ.5) Q2DIV=PMB**2
+ S=S+(6D0/25D0)*LOG(LOG(Q2DIV/ALAM**2)/LOG(P2DIV/ALAM**2))
+ ENDIF
+ IF(NFQ.EQ.5) THEN
+ P2DIV=PMB**2
+ IF(NFP.EQ.5) P2DIV=P2EFF
+ S=S+(6D0/23D0)*LOG(LOG(Q2EFF/ALAM5**2)/LOG(P2DIV/ALAM5**2))
+ ENDIF
+
+C...Calculate frequent combinations of x and s.
+ X1=1D0-X
+ XL=-LOG(X)
+ S2=S**2
+ S3=S**3
+ S4=S**4
+
+C...Evaluate homogeneous anomalous parton distributions below or
+C...above threshold.
+ IF(ISET.EQ.0) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ & (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = X * 1.5D0 * (X**2+X1**2)
+ XGLU = 0D0
+ XSEA = 0D0
+ ELSE
+ XVAL = (1.5D0/(1D0-0.197D0*S+4.33D0*S2)*X**2 +
+ & (1.5D0+2.10D0*S)/(1D0+3.29D0*S)*X1**2 +
+ & 5.23D0*S/(1D0+1.17D0*S+19.9D0*S3)*X*X1) *
+ & X**(1D0/(1D0+1.5D0*S)) * (1D0-X**2)**(2.667D0*S)
+ XGLU = 4D0*S/(1D0+4.76D0*S+15.2D0*S2+29.3D0*S4) *
+ & X**(-2.03D0*S/(1D0+2.44D0*S)) * (X1*XL)**(1.333D0*S) *
+ & ((4D0*X**2+7D0*X+4D0)*X1/3D0 - 2D0*X*(1D0+X)*XL)
+ XSEA = S2/(1D0+4.54D0*S+8.19D0*S2+8.05D0*S3) *
+ & X**(-1.54D0*S/(1D0+1.29D0*S)) * X1**(2.667D0*S) *
+ & ((8D0-73D0*X+62D0*X**2)*X1/9D0 + (3D0-8D0*X**2/3D0)*X*XL +
+ & (2D0*X-1D0)*X*XL**2)
+ ENDIF
+
+C...Evaluate set 1D parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.1) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ & (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = 1.294D0 * X**0.80D0 * X1**0.76D0
+ XGLU = 1.273D0 * X**0.40D0 * X1**1.76D0
+ XSEA = 0.100D0 * X1**3.76D0
+ ELSE
+ XVAL = 1.294D0/(1D0+0.252D0*S+3.079D0*S2) *
+ & X**(0.80D0-0.13D0*S) * X1**(0.76D0+0.667D0*S) * XL**(2D0*S)
+ XGLU = 7.90D0*S/(1D0+5.50D0*S) * EXP(-5.16D0*S) *
+ & X**(-1.90D0*S/(1D0+3.60D0*S)) * X1**1.30D0 *
+ & XL**(0.50D0+3D0*S) + 1.273D0 * EXP(-10D0*S) *
+ & X**0.40D0 * X1**(1.76D0+3D0*S)
+ XSEA = (0.1D0-0.397D0*S2+1.121D0*S3)/
+ & (1D0+5.61D0*S2+5.26D0*S3) * X**(-7.32D0*S2/(1D0+10.3D0*S2)) *
+ & X1**((3.76D0+15D0*S+12D0*S2)/(1D0+4D0*S))
+ XSEA0 = 0.100D0 * X1**3.76D0
+ ENDIF
+
+C...Evaluate set 1M parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.2) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ & (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = 0.8477D0 * X**0.51D0 * X1**1.37D0
+ XGLU = 3.42D0 * X**0.255D0 * X1**2.37D0
+ XSEA = 0D0
+ ELSE
+ XVAL = 0.8477D0/(1D0+1.37D0*S+2.18D0*S2+3.73D0*S3) *
+ & X**(0.51D0+0.21D0*S) * X1**1.37D0 * XL**(2.667D0*S)
+ XGLU = 24D0*S/(1D0+9.6D0*S+0.92D0*S2+14.34D0*S3) *
+ & EXP(-5.94D0*S) * X**((-0.013D0-1.80D0*S)/(1D0+3.14D0*S)) *
+ & X1**(2.37D0+0.4D0*S) * XL**(0.32D0+3.6D0*S) + 3.42D0 *
+ & EXP(-12D0*S) * X**0.255D0 * X1**(2.37D0+3D0*S)
+ XSEA = 0.842D0*S/(1D0+21.3D0*S-33.2D0*S2+229D0*S3) *
+ & X**((0.13D0-2.90D0*S)/(1D0+5.44D0*S)) * X1**(3.45D0+0.5D0*S) *
+ & XL**(2.8D0*S)
+ XSEA0 = 0D0
+ ENDIF
+
+C...Evaluate set 2D parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.3) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ & (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = X**0.46D0 * X1**0.64D0 + 0.76D0 * X
+ XGLU = 1.925D0 * X1**2
+ XSEA = 0.242D0 * X1**4
+ ELSE
+ XVAL = (1D0+0.186D0*S)/(1D0-0.209D0*S+1.495D0*S2) *
+ & X**(0.46D0+0.25D0*S) *
+ & X1**((0.64D0+0.14D0*S+5D0*S2)/(1D0+S)) * XL**(1.9D0*S) +
+ & (0.76D0+0.4D0*S) * X * X1**(2.667D0*S)
+ XGLU = (1.925D0+5.55D0*S+147D0*S2)/(1D0-3.59D0*S+3.32D0*S2) *
+ & EXP(-18.67D0*S) *
+ & X**((-5.81D0*S-5.34D0*S2)/(1D0+29D0*S-4.26D0*S2))
+ & * X1**((2D0-5.9D0*S)/(1D0+1.7D0*S)) *
+ & XL**(9.3D0*S/(1D0+1.7D0*S))
+ XSEA = (0.242D0-0.252D0*S+1.19D0*S2)/
+ & (1D0-0.607D0*S+21.95D0*S2) *
+ & X**(-12.1D0*S2/(1D0+2.62D0*S+16.7D0*S2)) * X1**4 * XL**S
+ XSEA0 = 0.242D0 * X1**4
+ ENDIF
+
+C...Evaluate set 2M parton distributions below or above threshold.
+ ELSEIF(ISET.EQ.4) THEN
+ IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
+ & (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
+ XVAL = 1.168D0 * X**0.50D0 * X1**2.60D0 + 0.965D0 * X
+ XGLU = 1.808D0 * X1**2
+ XSEA = 0.209D0 * X1**4
+ ELSE
+ XVAL = (1.168D0+1.771D0*S+29.35D0*S2) * EXP(-5.776D0*S) *
+ & X**((0.5D0+0.208D0*S)/(1D0-0.794D0*S+1.516D0*S2)) *
+ & X1**((2.6D0+7.6D0*S)/(1D0+5D0*S)) *
+ & XL**(5.15D0*S/(1D0+2D0*S)) +
+ & (0.965D0+22.35D0*S)/(1D0+18.4D0*S) * X * X1**(2.667D0*S)
+ XGLU = (1.808D0+29.9D0*S)/(1D0+26.4D0*S) * EXP(-5.28D0*S) *
+ & X**((-5.35D0*S-10.11D0*S2)/(1D0+31.71D0*S)) *
+ & X1**((2D0-7.3D0*S+4D0*S2)/(1D0+2.5D0*S)) *
+ & XL**(10.9D0*S/(1D0+2.5D0*S))
+ XSEA = (0.209D0+0.644D0*S2)/(1D0+0.319D0*S+17.6D0*S2) *
+ & X**((-0.373D0*S-7.71D0*S2)/(1D0+0.815D0*S+11.0D0*S2)) *
+ & X1**(4D0+S) * XL**(0.45D0*S)
+ XSEA0 = 0.209D0 * X1**4
+ ENDIF
+ ENDIF
+
+C...Threshold factors for c and b sea.
+ SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
+ XCHM=0D0
+ IF(Q2.GT.PMC**2.AND.Q2.GT.1.001D0*P2EFF) THEN
+ SCH=MAX(0D0,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ IF(ISET.EQ.0) THEN
+ XCHM=XSEA*(1D0-(SCH/SLL)**2)
+ ELSE
+ XCHM=MAX(0D0,XSEA-XSEA0*X1**(2.667D0*S))*(1D0-SCH/SLL)
+ ENDIF
+ ENDIF
+ XBOT=0D0
+ IF(Q2.GT.PMB**2.AND.Q2.GT.1.001D0*P2EFF) THEN
+ SBT=MAX(0D0,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ IF(ISET.EQ.0) THEN
+ XBOT=XSEA*(1D0-(SBT/SLL)**2)
+ ELSE
+ XBOT=MAX(0D0,XSEA-XSEA0*X1**(2.667D0*S))*(1D0-SBT/SLL)
+ ENDIF
+ ENDIF
+
+C...Fill parton distributions.
+ XPGA(0)=XGLU
+ XPGA(1)=XSEA
+ XPGA(2)=XSEA
+ XPGA(3)=XSEA
+ XPGA(4)=XCHM
+ XPGA(5)=XBOT
+ XPGA(KFA)=XPGA(KFA)+XVAL
+ DO 110 KFL=1,5
+ XPGA(-KFL)=XPGA(KFL)
+ 110 CONTINUE
+ VXPGA(KFA)=XVAL
+ VXPGA(-KFA)=XVAL
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGANO
+C...Evaluates the parton distributions of the anomalous photon,
+C...inhomogeneously evolved from a scale P2 (where it vanishes) to Q2.
+C...KF=0 gives the sum over (up to) 5 flavours,
+C...KF<0 limits to flavours up to abs(KF),
+C...KF>0 is for flavour KF only.
+C...ALAM is the 4-flavour Lambda, which is automatically converted
+C...to 3- and 5-flavour equivalents as needed.
+C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
+
+ SUBROUTINE PYGANO(KF,X,Q2,P2,ALAM,XPGA,VXPGA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Local arrays and data.
+ DIMENSION XPGA(-6:6), VXPGA(-6:6), ALAMSQ(3:5)
+ DATA PMC/1.3D0/, PMB/4.6D0/, AEM/0.007297D0/, AEM2PI/0.0011614D0/
+
+C...Reset output.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0D0
+ VXPGA(KFL)=0D0
+ 100 CONTINUE
+ IF(Q2.LE.P2) RETURN
+ KFA=IABS(KF)
+
+C...Calculate Lambda; protect against unphysical Q2 and P2 input.
+ ALAMSQ(3)=(ALAM*(PMC/ALAM)**(2D0/27D0))**2
+ ALAMSQ(4)=ALAM**2
+ ALAMSQ(5)=(ALAM*(ALAM/PMB)**(2D0/23D0))**2
+ P2EFF=MAX(P2,1.2D0*ALAMSQ(3))
+ IF(KF.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
+ IF(KF.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
+ Q2EFF=MAX(Q2,P2EFF)
+ XL=-LOG(X)
+
+C...Find number of flavours at lower and upper scale.
+ NFP=4
+ IF(P2EFF.LT.PMC**2) NFP=3
+ IF(P2EFF.GT.PMB**2) NFP=5
+ NFQ=4
+ IF(Q2EFF.LT.PMC**2) NFQ=3
+ IF(Q2EFF.GT.PMB**2) NFQ=5
+
+C...Define range of flavour loop.
+ IF(KF.EQ.0) THEN
+ KFLMN=1
+ KFLMX=5
+ ELSEIF(KF.LT.0) THEN
+ KFLMN=1
+ KFLMX=KFA
+ ELSE
+ KFLMN=KFA
+ KFLMX=KFA
+ ENDIF
+
+C...Loop over flavours the photon can branch into.
+ DO 110 KFL=KFLMN,KFLMX
+
+C...Light flavours: calculate t range and (approximate) s range.
+ IF(KFL.LE.3.AND.(KFL.EQ.1.OR.KFL.EQ.KF)) THEN
+ TDIFF=LOG(Q2EFF/P2EFF)
+ S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ IF(NFQ.GT.NFP) THEN
+ Q2DIV=PMB**2
+ IF(NFQ.EQ.4) Q2DIV=PMC**2
+ SNFQ=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ SNFP=(6D0/(33D0-2D0*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
+ & LOG(P2EFF/ALAMSQ(NFQ-1)))
+ S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
+ ENDIF
+ IF(NFQ.EQ.5.AND.NFP.EQ.3) THEN
+ Q2DIV=PMC**2
+ SNF4=(6D0/(33D0-2D0*4))*LOG(LOG(Q2DIV/ALAMSQ(4))/
+ & LOG(P2EFF/ALAMSQ(4)))
+ SNF3=(6D0/(33D0-2D0*3))*LOG(LOG(Q2DIV/ALAMSQ(3))/
+ & LOG(P2EFF/ALAMSQ(3)))
+ S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNF3-SNF4)
+ ENDIF
+
+C...u and s quark do not need a separate treatment when d has been done.
+ ELSEIF(KFL.EQ.2.OR.KFL.EQ.3) THEN
+
+C...Charm: as above, but only include range above c threshold.
+ ELSEIF(KFL.EQ.4) THEN
+ IF(Q2.LE.PMC**2) GOTO 110
+ P2EFF=MAX(P2EFF,PMC**2)
+ Q2EFF=MAX(Q2EFF,P2EFF)
+ TDIFF=LOG(Q2EFF/P2EFF)
+ S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ IF(NFQ.EQ.5.AND.NFP.EQ.4) THEN
+ Q2DIV=PMB**2
+ SNFQ=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ SNFP=(6D0/(33D0-2D0*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
+ & LOG(P2EFF/ALAMSQ(NFQ-1)))
+ S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
+ ENDIF
+
+C...Bottom: as above, but only include range above b threshold.
+ ELSEIF(KFL.EQ.5) THEN
+ IF(Q2.LE.PMB**2) GOTO 110
+ P2EFF=MAX(P2EFF,PMB**2)
+ Q2EFF=MAX(Q2,P2EFF)
+ TDIFF=LOG(Q2EFF/P2EFF)
+ S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
+ & LOG(P2EFF/ALAMSQ(NFQ)))
+ ENDIF
+
+C...Evaluate flavour-dependent prefactor (charge^2 etc.).
+ CHSQ=1D0/9D0
+ IF(KFL.EQ.2.OR.KFL.EQ.4) CHSQ=4D0/9D0
+ FAC=AEM2PI*2D0*CHSQ*TDIFF
+
+C...Evaluate parton distributions (normalized to unit momentum sum).
+ IF(KFL.EQ.1.OR.KFL.EQ.4.OR.KFL.EQ.5.OR.KFL.EQ.KF) THEN
+ XVAL= ((1.5D0+2.49D0*S+26.9D0*S**2)/(1D0+32.3D0*S**2)*X**2 +
+ & (1.5D0-0.49D0*S+7.83D0*S**2)/(1D0+7.68D0*S**2)*(1D0-X)**2 +
+ & 1.5D0*S/(1D0-3.2D0*S+7D0*S**2)*X*(1D0-X)) *
+ & X**(1D0/(1D0+0.58D0*S)) * (1D0-X**2)**(2.5D0*S/(1D0+10D0*S))
+ XGLU= 2D0*S/(1D0+4D0*S+7D0*S**2) *
+ & X**(-1.67D0*S/(1D0+2D0*S)) * (1D0-X**2)**(1.2D0*S) *
+ & ((4D0*X**2+7D0*X+4D0)*(1D0-X)/3D0 - 2D0*X*(1D0+X)*XL)
+ XSEA= 0.333D0*S**2/(1D0+4.90D0*S+4.69D0*S**2+21.4D0*S**3) *
+ & X**(-1.18D0*S/(1D0+1.22D0*S)) * (1D0-X)**(1.2D0*S) *
+ & ((8D0-73D0*X+62D0*X**2)*(1D0-X)/9D0 +
+ & (3D0-8D0*X**2/3D0)*X*XL + (2D0*X-1D0)*X*XL**2)
+
+C...Threshold factors for c and b sea.
+ SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
+ XCHM=0D0
+ IF(Q2.GT.PMC**2.AND.Q2.GT.1.001D0*P2EFF) THEN
+ SCH=MAX(0D0,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ XCHM=XSEA*(1D0-(SCH/SLL)**3)
+ ENDIF
+ XBOT=0D0
+ IF(Q2.GT.PMB**2.AND.Q2.GT.1.001D0*P2EFF) THEN
+ SBT=MAX(0D0,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
+ XBOT=XSEA*(1D0-(SBT/SLL)**3)
+ ENDIF
+ ENDIF
+
+C...Add contribution of each valence flavour.
+ XPGA(0)=XPGA(0)+FAC*XGLU
+ XPGA(1)=XPGA(1)+FAC*XSEA
+ XPGA(2)=XPGA(2)+FAC*XSEA
+ XPGA(3)=XPGA(3)+FAC*XSEA
+ XPGA(4)=XPGA(4)+FAC*XCHM
+ XPGA(5)=XPGA(5)+FAC*XBOT
+ XPGA(KFL)=XPGA(KFL)+FAC*XVAL
+ VXPGA(KFL)=VXPGA(KFL)+FAC*XVAL
+ 110 CONTINUE
+ DO 120 KFL=1,5
+ XPGA(-KFL)=XPGA(KFL)
+ VXPGA(-KFL)=VXPGA(KFL)
+ 120 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGBEH
+C...Evaluates the Bethe-Heitler cross section for heavy flavour
+C...production.
+C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
+
+ SUBROUTINE PYGBEH(KF,X,Q2,P2,PM2,XPBH)
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local data.
+ DATA AEM2PI/0.0011614D0/
+
+C...Reset output.
+ XPBH=0D0
+ SIGBH=0D0
+
+C...Check kinematics limits.
+ IF(X.GE.Q2/(4D0*PM2+Q2+P2)) RETURN
+ W2=Q2*(1D0-X)/X-P2
+ BETA2=1D0-4D0*PM2/W2
+ IF(BETA2.LT.1D-10) RETURN
+ BETA=SQRT(BETA2)
+ RMQ=4D0*PM2/Q2
+
+C...Simple case: P2 = 0.
+ IF(P2.LT.1D-4) THEN
+ IF(BETA.LT.0.99D0) THEN
+ XBL=LOG((1D0+BETA)/(1D0-BETA))
+ ELSE
+ XBL=LOG((1D0+BETA)**2*W2/(4D0*PM2))
+ ENDIF
+ SIGBH=BETA*(8D0*X*(1D0-X)-1D0-RMQ*X*(1D0-X))+
+ & XBL*(X**2+(1D0-X)**2+RMQ*X*(1D0-3D0*X)-0.5D0*RMQ**2*X**2)
+
+C...Complicated case: P2 > 0, based on approximation of
+C...C.T. Hill and G.G. Ross, Nucl. Phys. B148 (1979) 373
+ ELSE
+ RPQ=1D0-4D0*X**2*P2/Q2
+ IF(RPQ.GT.1D-10) THEN
+ RPBE=SQRT(RPQ*BETA2)
+ IF(RPBE.LT.0.99D0) THEN
+ XBL=LOG((1D0+RPBE)/(1D0-RPBE))
+ XBI=2D0*RPBE/(1D0-RPBE**2)
+ ELSE
+ RPBESN=4D0*PM2/W2+(4D0*X**2*P2/Q2)*BETA2
+ XBL=LOG((1D0+RPBE)**2/RPBESN)
+ XBI=2D0*RPBE/RPBESN
+ ENDIF
+ SIGBH=BETA*(6D0*X*(1D0-X)-1D0)+
+ & XBL*(X**2+(1D0-X)**2+RMQ*X*(1D0-3D0*X)-0.5D0*RMQ**2*X**2)+
+ & XBI*(2D0*X/Q2)*(PM2*X*(2D0-RMQ)-P2*X)
+ ENDIF
+ ENDIF
+
+C...Multiply by charge-squared etc. to get parton distribution.
+ CHSQ=1D0/9D0
+ IF(IABS(KF).EQ.2.OR.IABS(KF).EQ.4) CHSQ=4D0/9D0
+ XPBH=3D0*CHSQ*AEM2PI*X*SIGBH
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGDIR
+C...Evaluates the direct contribution, i.e. the C^gamma term,
+C...as needed in MSbar parametrizations.
+C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
+
+ SUBROUTINE PYGDIR(X,Q2,P2,Q02,XPGA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Local array and data.
+ DIMENSION XPGA(-6:6)
+ DATA PMC/1.3D0/, PMB/4.6D0/, AEM2PI/0.0011614D0/
+
+C...Reset output.
+ DO 100 KFL=-6,6
+ XPGA(KFL)=0D0
+ 100 CONTINUE
+
+C...Evaluate common x-dependent expression.
+ XTMP = (X**2+(1D0-X)**2) * (-LOG(X)) - 1D0
+ CGAM = 3D0*AEM2PI*X * (XTMP*(1D0+P2/(P2+Q02)) + 6D0*X*(1D0-X))
+
+C...d, u, s part by simple charge factor.
+ XPGA(1)=(1D0/9D0)*CGAM
+ XPGA(2)=(4D0/9D0)*CGAM
+ XPGA(3)=(1D0/9D0)*CGAM
+
+C...Also fill for antiquarks.
+ DO 110 KF=1,5
+ XPGA(-KF)=XPGA(KF)
+ 110 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPDPI
+C...Gives pi+ parton distribution according to two different
+C...parametrizations.
+
+ SUBROUTINE PYPDPI(X,Q2,XPPI)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYPARS/,/PYINT1/
+C...Local arrays.
+ DIMENSION XPPI(-6:6),COW(3,5,4,2),XQ(9),TS(6)
+
+C...The following data lines are coefficients needed in the
+C...Owens pion parton distribution parametrizations, see below.
+C...Expansion coefficients for up and down valence quark distributions.
+ DATA ((COW(IP,IS,1,1),IS=1,5),IP=1,3)/
+ &4.0000D-01, 7.0000D-01, 0.0000D+00, 0.0000D+00, 0.0000D+00,
+ &-6.2120D-02, 6.4780D-01, 0.0000D+00, 0.0000D+00, 0.0000D+00,
+ &-7.1090D-03, 1.3350D-02, 0.0000D+00, 0.0000D+00, 0.0000D+00/
+ DATA ((COW(IP,IS,1,2),IS=1,5),IP=1,3)/
+ &4.0000D-01, 6.2800D-01, 0.0000D+00, 0.0000D+00, 0.0000D+00,
+ &-5.9090D-02, 6.4360D-01, 0.0000D+00, 0.0000D+00, 0.0000D+00,
+ &-6.5240D-03, 1.4510D-02, 0.0000D+00, 0.0000D+00, 0.0000D+00/
+C...Expansion coefficients for gluon distribution.
+ DATA ((COW(IP,IS,2,1),IS=1,5),IP=1,3)/
+ &8.8800D-01, 0.0000D+00, 3.1100D+00, 6.0000D+00, 0.0000D+00,
+ &-1.8020D+00, -1.5760D+00, -1.3170D-01, 2.8010D+00, -1.7280D+01,
+ &1.8120D+00, 1.2000D+00, 5.0680D-01, -1.2160D+01, 2.0490D+01/
+ DATA ((COW(IP,IS,2,2),IS=1,5),IP=1,3)/
+ &7.9400D-01, 0.0000D+00, 2.8900D+00, 6.0000D+00, 0.0000D+00,
+ &-9.1440D-01, -1.2370D+00, 5.9660D-01, -3.6710D+00, -8.1910D+00,
+ &5.9660D-01, 6.5820D-01, -2.5500D-01, -2.3040D+00, 7.7580D+00/
+C...Expansion coefficients for (up+down+strange) quark sea distribution.
+ DATA ((COW(IP,IS,3,1),IS=1,5),IP=1,3)/
+ &9.0000D-01, 0.0000D+00, 5.0000D+00, 0.0000D+00, 0.0000D+00,
+ &-2.4280D-01, -2.1200D-01, 8.6730D-01, 1.2660D+00, 2.3820D+00,
+ &1.3860D-01, 3.6710D-03, 4.7470D-02, -2.2150D+00, 3.4820D-01/
+ DATA ((COW(IP,IS,3,2),IS=1,5),IP=1,3)/
+ &9.0000D-01, 0.0000D+00, 5.0000D+00, 0.0000D+00, 0.0000D+00,
+ &-1.4170D-01, -1.6970D-01, -2.4740D+00, -2.5340D+00, 5.6210D-01,
+ &-1.7400D-01, -9.6230D-02, 1.5750D+00, 1.3780D+00, -2.7010D-01/
+C...Expansion coefficients for charm quark sea distribution.
+ DATA ((COW(IP,IS,4,1),IS=1,5),IP=1,3)/
+ &0.0000D+00, -2.2120D-02, 2.8940D+00, 0.0000D+00, 0.0000D+00,
+ &7.9280D-02, -3.7850D-01, 9.4330D+00, 5.2480D+00, 8.3880D+00,
+ &-6.1340D-02, -1.0880D-01, -1.0852D+01, -7.1870D+00, -1.1610D+01/
+ DATA ((COW(IP,IS,4,2),IS=1,5),IP=1,3)/
+ &0.0000D+00, -8.8200D-02, 1.9240D+00, 0.0000D+00, 0.0000D+00,
+ &6.2290D-02, -2.8920D-01, 2.4240D-01, -4.4630D+00, -8.3670D-01,
+ &-4.0990D-02, -1.0820D-01, 2.0360D+00, 5.2090D+00, -4.8400D-02/
+
+C...Euler's beta function, requires ordinary Gamma function
+ EULBET(X,Y)=PYGAMM(X)*PYGAMM(Y)/PYGAMM(X+Y)
+
+C...Reset output array.
+ DO 100 KFL=-6,6
+ XPPI(KFL)=0D0
+ 100 CONTINUE
+
+ IF(MSTP(53).LE.2) THEN
+C...Pion parton distributions from Owens.
+C...Allowed variable range: 4 GeV^2 < Q^2 < approx 2000 GeV^2.
+
+C...Determine set, Lambda and s expansion variable.
+ NSET=MSTP(53)
+ IF(NSET.EQ.1) ALAM=0.2D0
+ IF(NSET.EQ.2) ALAM=0.4D0
+ VINT(231)=4D0
+ IF(MSTP(57).LE.0) THEN
+ SD=0D0
+ ELSE
+ Q2IN=MIN(2D3,MAX(4D0,Q2))
+ SD=LOG(LOG(Q2IN/ALAM**2)/LOG(4D0/ALAM**2))
+ ENDIF
+
+C...Calculate parton distributions.
+ DO 120 KFL=1,4
+ DO 110 IS=1,5
+ TS(IS)=COW(1,IS,KFL,NSET)+COW(2,IS,KFL,NSET)*SD+
+ & COW(3,IS,KFL,NSET)*SD**2
+ 110 CONTINUE
+ IF(KFL.EQ.1) THEN
+ XQ(KFL)=X**TS(1)*(1D0-X)**TS(2)/EULBET(TS(1),TS(2)+1D0)
+ ELSE
+ XQ(KFL)=TS(1)*X**TS(2)*(1D0-X)**TS(3)*(1D0+TS(4)*X+
+ & TS(5)*X**2)
+ ENDIF
+ 120 CONTINUE
+
+C...Put into output array.
+ XPPI(0)=XQ(2)
+ XPPI(1)=XQ(3)/6D0
+ XPPI(2)=XQ(1)+XQ(3)/6D0
+ XPPI(3)=XQ(3)/6D0
+ XPPI(4)=XQ(4)
+ XPPI(-1)=XQ(1)+XQ(3)/6D0
+ XPPI(-2)=XQ(3)/6D0
+ XPPI(-3)=XQ(3)/6D0
+ XPPI(-4)=XQ(4)
+
+C...Leading order pion parton distributions from Gluck, Reya and Vogt.
+C...Allowed variable range: 0.25 GeV^2 < Q^2 < 10^8 GeV^2 and
+C...10^-5 < x < 1.
+ ELSE
+
+C...Determine s expansion variable and some x expressions.
+ VINT(231)=0.25D0
+ IF(MSTP(57).LE.0) THEN
+ SD=0D0
+ ELSE
+ Q2IN=MIN(1D8,MAX(0.25D0,Q2))
+ SD=LOG(LOG(Q2IN/0.232D0**2)/LOG(0.25D0/0.232D0**2))
+ ENDIF
+ SD2=SD**2
+ XL=-LOG(X)
+ XS=SQRT(X)
+
+C...Evaluate valence, gluon and sea distributions.
+ XFVAL=(0.519D0+0.180D0*SD-0.011D0*SD2)*X**(0.499D0-0.027D0*SD)*
+ & (1D0+(0.381D0-0.419D0*SD)*XS)*(1D0-X)**(0.367D0+0.563D0*SD)
+ XFGLU=(X**(0.482D0+0.341D0*SQRT(SD))*((0.678D0+0.877D0*
+ & SD-0.175D0*SD2)+
+ & (0.338D0-1.597D0*SD)*XS+(-0.233D0*SD+0.406D0*SD2)*X)+
+ & SD**0.599D0*EXP(-(0.618D0+2.070D0*SD)+SQRT(3.676D0*SD**1.263D0*
+ & XL)))*
+ & (1D0-X)**(0.390D0+1.053D0*SD)
+ XFSEA=SD**0.55D0*(1D0-0.748D0*XS+(0.313D0+0.935D0*SD)*X)*(1D0-
+ & X)**3.359D0*
+ & EXP(-(4.433D0+1.301D0*SD)+SQRT((9.30D0-0.887D0*SD)*SD**0.56D0*
+ & XL))/
+ & XL**(2.538D0-0.763D0*SD)
+ IF(SD.LE.0.888D0) THEN
+ XFCHM=0D0
+ ELSE
+ XFCHM=(SD-0.888D0)**1.02D0*(1D0+1.008D0*X)*(1D0-X)**(1.208D0+
+ & 0.771D0*SD)*
+ & EXP(-(4.40D0+1.493D0*SD)+SQRT((2.032D0+1.901D0*SD)*SD**0.39D0*
+ & XL))
+ ENDIF
+ IF(SD.LE.1.351D0) THEN
+ XFBOT=0D0
+ ELSE
+ XFBOT=(SD-1.351D0)**1.03D0*(1D0-X)**(0.697D0+0.855D0*SD)*
+ & EXP(-(4.51D0+1.490D0*SD)+SQRT((3.056D0+1.694D0*SD)*SD**0.39D0*
+ & XL))
+ ENDIF
+
+C...Put into output array.
+ XPPI(0)=XFGLU
+ XPPI(1)=XFSEA
+ XPPI(2)=XFSEA
+ XPPI(3)=XFSEA
+ XPPI(4)=XFCHM
+ XPPI(5)=XFBOT
+ DO 130 KFL=1,5
+ XPPI(-KFL)=XPPI(KFL)
+ 130 CONTINUE
+ XPPI(2)=XPPI(2)+XFVAL
+ XPPI(-1)=XPPI(-1)+XFVAL
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPDPR
+C...Gives proton parton distributions according to a few different
+C...parametrizations.
+
+ SUBROUTINE PYPDPR(X,Q2,XPPR)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
+C...Arrays and data.
+ DIMENSION XPPR(-6:6),Q2MIN(6)
+ DATA Q2MIN/ 2.56D0, 2.56D0, 2.56D0, 0.4D0, 0.4D0, 0.4D0/
+
+C...Reset output array.
+ DO 100 KFL=-6,6
+ XPPR(KFL)=0D0
+ 100 CONTINUE
+
+C...Common preliminaries.
+ NSET=MAX(1,MIN(6,MSTP(51)))
+ VINT(231)=Q2MIN(NSET)
+ IF(MSTP(57).EQ.0) THEN
+ Q2L=Q2MIN(NSET)
+ ELSE
+ Q2L=MAX(Q2MIN(NSET),Q2)
+ ENDIF
+
+ IF(NSET.GE.1.AND.NSET.LE.3) THEN
+C...Interface to the CTEQ 3 parton distributions.
+ QRT=SQRT(MAX(1D0,Q2L))
+
+C...Loop over flavours.
+ DO 110 I=-6,6
+ IF(I.LE.0) THEN
+ XPPR(I)=PYCTEQ(NSET,I,X,QRT)
+ ELSEIF(I.LE.2) THEN
+ XPPR(I)=PYCTEQ(NSET,I,X,QRT)+XPPR(-I)
+ ELSE
+ XPPR(I)=XPPR(-I)
+ ENDIF
+ 110 CONTINUE
+
+ ELSEIF(NSET.GE.4.AND.NSET.LE.6) THEN
+C...Interface to the GRV 94 distributions.
+ IF(NSET.EQ.4) THEN
+ CALL PYGRVL (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
+ ELSEIF(NSET.EQ.5) THEN
+ CALL PYGRVM (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
+ ELSE
+ CALL PYGRVD (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
+ ENDIF
+
+C...Put into output array.
+ XPPR(0)=GL
+ XPPR(-1)=0.5D0*(UDB+DEL)
+ XPPR(-2)=0.5D0*(UDB-DEL)
+ XPPR(-3)=SB
+ XPPR(-4)=CHM
+ XPPR(-5)=BOT
+ XPPR(1)=DV+XPPR(-1)
+ XPPR(2)=UV+XPPR(-2)
+ XPPR(3)=SB
+ XPPR(4)=CHM
+ XPPR(5)=BOT
+
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYCTEQ
+C...Gives the CTEQ 3 parton distribution function sets in
+C...parametrized form, of October 24, 1994.
+C...Authors: H.L. Lai, J. Botts, J. Huston, J.G. Morfin, J.F. Owens,
+C...J. Qiu, W.K. Tung and H. Weerts.
+
+ FUNCTION PYCTEQ (ISET, IPRT, X, Q)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+
+C...Data on Lambda values of fits, minimum Q and quark masses.
+ DIMENSION ALM(3), QMS(4:6)
+ DATA ALM / 0.177D0, 0.239D0, 0.247D0 /
+ DATA QMN / 1.60D0 /, (QMS(I), I=4,6) / 1.60D0, 5.00D0, 180.0D0 /
+
+C....Check flavour thresholds. Set up QI for SB.
+ IP = IABS(IPRT)
+ IF(IP .GE. 4) THEN
+ IF(Q .LE. QMS(IP)) THEN
+ PYCTEQ = 0D0
+ RETURN
+ ENDIF
+ QI = QMS(IP)
+ ELSE
+ QI = QMN
+ ENDIF
+
+C...Use "standard lambda" of parametrization program for expansion.
+ ALAM = ALM (ISET)
+ SBL = LOG(Q/ALAM) / LOG(QI/ALAM)
+ SB = LOG (SBL)
+ SB2 = SB*SB
+ SB3 = SB2*SB
+
+C...Expansion for CTEQ3L.
+ IF(ISET .EQ. 1) THEN
+ IF(IPRT .EQ. 2) THEN
+ A0=Exp( 0.1907D+00+0.4205D-01*SB +0.2752D+00*SB2-
+ & 0.3171D+00*SB3)
+ A1= 0.4611D+00+0.2331D-01*SB -0.3403D-01*SB2+0.3174D-01*SB3
+ A2= 0.3504D+01+0.5739D+00*SB +0.2676D+00*SB2-0.1553D+00*SB3
+ A3= 0.7452D+01-0.6742D+01*SB +0.2849D+01*SB2-0.1964D+00*SB3
+ A4= 0.1116D+01-0.3435D+00*SB +0.2865D+00*SB2-0.1288D+00*SB3
+ A5= 0.6659D-01+0.2714D+00*SB -0.2688D+00*SB2+0.2763D+00*SB3
+ ELSEIF(IPRT .EQ. 1) THEN
+ A0=Exp( 0.1141D+00+0.4764D+00*SB -0.1745D+01*SB2+
+ & 0.7728D+00*SB3)
+ A1= 0.4275D+00-0.1290D+00*SB +0.3609D+00*SB2-0.1689D+00*SB3
+ A2= 0.3000D+01+0.2946D+01*SB -0.4117D+01*SB2+0.1989D+01*SB3
+ A3=-0.1302D+01+0.2322D+01*SB -0.4258D+01*SB2+0.2109D+01*SB3
+ A4= 0.2586D+01-0.1920D+00*SB -0.3754D+00*SB2+0.2731D+00*SB3
+ A5=-0.2251D+00-0.5374D+00*SB +0.2245D+01*SB2-0.1034D+01*SB3
+ ELSEIF(IPRT .EQ. 0) THEN
+ A0=Exp(-0.7631D+00-0.7241D+00*SB -0.1170D+01*SB2+
+ & 0.5343D+00*SB3)
+ A1=-0.3573D+00+0.3469D+00*SB -0.3396D+00*SB2+0.9188D-01*SB3
+ A2= 0.5604D+01+0.7458D+00*SB -0.5082D+00*SB2+0.1844D+00*SB3
+ A3= 0.1549D+02-0.1809D+02*SB +0.1162D+02*SB2-0.3483D+01*SB3
+ A4= 0.9881D+00+0.1364D+00*SB -0.4421D+00*SB2+0.2051D+00*SB3
+ A5=-0.9505D-01+0.3259D+01*SB -0.1547D+01*SB2+0.2918D+00*SB3
+ ELSEIF(IPRT .EQ. -1) THEN
+ A0=Exp(-0.2449D+01-0.3513D+01*SB +0.4529D+01*SB2-
+ & 0.2031D+01*SB3)
+ A1=-0.4050D+00+0.3411D+00*SB -0.3669D+00*SB2+0.1109D+00*SB3
+ A2= 0.7470D+01-0.2982D+01*SB +0.5503D+01*SB2-0.2419D+01*SB3
+ A3= 0.1503D+02+0.1638D+01*SB -0.8772D+01*SB2+0.3852D+01*SB3
+ A4= 0.1137D+01-0.1006D+01*SB +0.1485D+01*SB2-0.6389D+00*SB3
+ A5=-0.5299D+00+0.3160D+01*SB -0.3104D+01*SB2+0.1219D+01*SB3
+ ELSEIF(IPRT .EQ. -2) THEN
+ A0=Exp(-0.2740D+01-0.7987D-01*SB -0.9015D+00*SB2-
+ & 0.9872D-01*SB3)
+ A1=-0.3909D+00+0.1244D+00*SB -0.4487D-01*SB2+0.1277D-01*SB3
+ A2= 0.9163D+01+0.2823D+00*SB -0.7720D+00*SB2-0.9360D-02*SB3
+ A3= 0.1080D+02-0.3915D+01*SB -0.1153D+01*SB2+0.2649D+01*SB3
+ A4= 0.9894D+00-0.1647D+00*SB -0.9426D-02*SB2+0.2945D-02*SB3
+ A5=-0.3395D+00+0.6998D+00*SB +0.7000D+00*SB2-0.6730D-01*SB3
+ ELSEIF(IPRT .EQ. -3) THEN
+ A0=Exp(-0.3640D+01+0.1250D+01*SB -0.2914D+01*SB2+
+ & 0.8390D+00*SB3)
+ A1=-0.3595D+00-0.5259D-01*SB +0.3122D+00*SB2-0.1642D+00*SB3
+ A2= 0.7305D+01+0.9727D+00*SB -0.9788D+00*SB2-0.5193D-01*SB3
+ A3= 0.1198D+02-0.1799D+02*SB +0.2614D+02*SB2-0.1091D+02*SB3
+ A4= 0.9882D+00-0.6101D+00*SB +0.9737D+00*SB2-0.4935D+00*SB3
+ A5=-0.1186D+00-0.3231D+00*SB +0.3074D+01*SB2-0.1274D+01*SB3
+ ELSEIF(IPRT .EQ. -4) THEN
+ A0=SB** 0.1122D+01*Exp(-0.3718D+01-0.1335D+01*SB +
+ & 0.1651D-01*SB2)
+ A1=-0.4719D+00+0.7509D+00*SB -0.8420D+00*SB2+0.2901D+00*SB3
+ A2= 0.6194D+01-0.1641D+01*SB +0.4907D+01*SB2-0.2523D+01*SB3
+ A3= 0.4426D+01-0.4270D+01*SB +0.6581D+01*SB2-0.3474D+01*SB3
+ A4= 0.2683D+00+0.9876D+00*SB -0.7612D+00*SB2+0.1780D+00*SB3
+ A5=-0.4547D+00+0.4410D+01*SB -0.3712D+01*SB2+0.1245D+01*SB3
+ ELSEIF(IPRT .EQ. -5) THEN
+ A0=SB** 0.9838D+00*Exp(-0.2548D+01-0.7660D+01*SB +
+ & 0.3702D+01*SB2)
+ A1=-0.3122D+00-0.2120D+00*SB +0.5716D+00*SB2-0.3773D+00*SB3
+ A2= 0.6257D+01-0.8214D-01*SB -0.2537D+01*SB2+0.2981D+01*SB3
+ A3=-0.6723D+00+0.2131D+01*SB +0.9599D+01*SB2-0.7910D+01*SB3
+ A4= 0.9169D-01+0.4295D-01*SB -0.5017D+00*SB2+0.3811D+00*SB3
+ A5= 0.2402D+00+0.2656D+01*SB -0.1586D+01*SB2+0.2880D+00*SB3
+ ELSEIF(IPRT .EQ. -6) THEN
+ A0=SB** 0.1001D+01*Exp(-0.6934D+01+0.3050D+01*SB -
+ & 0.6943D+00*SB2)
+ A1=-0.1713D+00-0.5167D+00*SB +0.1241D+01*SB2-0.1703D+01*SB3
+ A2= 0.6169D+01+0.3023D+01*SB -0.1972D+02*SB2+0.1069D+02*SB3
+ A3= 0.4439D+01-0.1746D+02*SB +0.1225D+02*SB2+0.8350D+00*SB3
+ A4= 0.5458D+00-0.4586D+00*SB +0.9089D+00*SB2-0.4049D+00*SB3
+ A5= 0.3207D+01-0.3362D+01*SB +0.5877D+01*SB2-0.7659D+01*SB3
+ ENDIF
+
+C...Expansion for CTEQ3M.
+ ELSEIF(ISET .EQ. 2) THEN
+ IF(IPRT .EQ. 2) THEN
+ A0=Exp( 0.2259D+00+0.1237D+00*SB +0.3035D+00*SB2-
+ & 0.2935D+00*SB3)
+ A1= 0.5085D+00+0.1651D-01*SB -0.3592D-01*SB2+0.2782D-01*SB3
+ A2= 0.3732D+01+0.4901D+00*SB +0.2218D+00*SB2-0.1116D+00*SB3
+ A3= 0.7011D+01-0.6620D+01*SB +0.2557D+01*SB2-0.1360D+00*SB3
+ A4= 0.8969D+00-0.2429D+00*SB +0.1811D+00*SB2-0.6888D-01*SB3
+ A5= 0.8636D-01+0.2558D+00*SB -0.3082D+00*SB2+0.2535D+00*SB3
+ ELSEIF(IPRT .EQ. 1) THEN
+ A0=Exp(-0.7266D+00-0.1584D+01*SB +0.1259D+01*SB2-
+ & 0.4305D-01*SB3)
+ A1= 0.5285D+00-0.3721D+00*SB +0.5150D+00*SB2-0.1697D+00*SB3
+ A2= 0.4075D+01+0.8282D+00*SB -0.4496D+00*SB2+0.2107D+00*SB3
+ A3= 0.3279D+01+0.5066D+01*SB -0.9134D+01*SB2+0.2897D+01*SB3
+ A4= 0.4399D+00-0.5888D+00*SB +0.4802D+00*SB2-0.1664D+00*SB3
+ A5= 0.3678D+00-0.8929D+00*SB +0.1592D+01*SB2-0.5713D+00*SB3
+ ELSEIF(IPRT .EQ. 0) THEN
+ A0=Exp(-0.2318D+00-0.9779D+00*SB -0.3783D+00*SB2+
+ & 0.1037D-01*SB3)
+ A1=-0.2916D+00+0.1754D+00*SB -0.1884D+00*SB2+0.6116D-01*SB3
+ A2= 0.5349D+01+0.7460D+00*SB +0.2319D+00*SB2-0.2622D+00*SB3
+ A3= 0.6920D+01-0.3454D+01*SB +0.2027D+01*SB2-0.7626D+00*SB3
+ A4= 0.1013D+01+0.1423D+00*SB -0.1798D+00*SB2+0.1872D-01*SB3
+ A5=-0.5465D-01+0.2303D+01*SB -0.9584D+00*SB2+0.3098D+00*SB3
+ ELSEIF(IPRT .EQ. -1) THEN
+ A0=Exp(-0.2328D+01-0.3061D+01*SB +0.3620D+01*SB2-
+ & 0.1602D+01*SB3)
+ A1=-0.3358D+00+0.3198D+00*SB -0.4210D+00*SB2+0.1571D+00*SB3
+ A2= 0.8478D+01-0.3112D+01*SB +0.5243D+01*SB2-0.2255D+01*SB3
+ A3= 0.1971D+02+0.3389D+00*SB -0.5268D+01*SB2+0.2099D+01*SB3
+ A4= 0.1128D+01-0.4701D+00*SB +0.7779D+00*SB2-0.3506D+00*SB3
+ A5=-0.4708D+00+0.3341D+01*SB -0.3375D+01*SB2+0.1353D+01*SB3
+ ELSEIF(IPRT .EQ. -2) THEN
+ A0=Exp(-0.2906D+01-0.1069D+00*SB -0.1055D+01*SB2+
+ & 0.2496D+00*SB3)
+ A1=-0.2875D+00+0.6571D-01*SB -0.1987D-01*SB2-0.1800D-02*SB3
+ A2= 0.9854D+01-0.2715D+00*SB -0.7407D+00*SB2+0.2888D+00*SB3
+ A3= 0.1583D+02-0.7687D+01*SB +0.3428D+01*SB2-0.3327D+00*SB3
+ A4= 0.9763D+00+0.7599D-01*SB -0.2128D+00*SB2+0.6852D-01*SB3
+ A5=-0.8444D-02+0.9434D+00*SB +0.4152D+00*SB2-0.1481D+00*SB3
+ ELSEIF(IPRT .EQ. -3) THEN
+ A0=Exp(-0.3780D+01+0.2499D+01*SB -0.4962D+01*SB2+
+ & 0.1936D+01*SB3)
+ A1=-0.2639D+00-0.1575D+00*SB +0.3584D+00*SB2-0.1646D+00*SB3
+ A2= 0.8082D+01+0.2794D+01*SB -0.5438D+01*SB2+0.2321D+01*SB3
+ A3= 0.1811D+02-0.2000D+02*SB +0.1951D+02*SB2-0.6904D+01*SB3
+ A4= 0.9822D+00+0.4972D+00*SB -0.8690D+00*SB2+0.3415D+00*SB3
+ A5= 0.1772D+00-0.6078D+00*SB +0.3341D+01*SB2-0.1473D+01*SB3
+ ELSEIF(IPRT .EQ. -4) THEN
+ A0=SB** 0.1122D+01*Exp(-0.4232D+01-0.1808D+01*SB +
+ & 0.5348D+00*SB2)
+ A1=-0.2824D+00+0.5846D+00*SB -0.7230D+00*SB2+0.2419D+00*SB3
+ A2= 0.5683D+01-0.2948D+01*SB +0.5916D+01*SB2-0.2560D+01*SB3
+ A3= 0.2051D+01+0.4795D+01*SB -0.4271D+01*SB2+0.4174D+00*SB3
+ A4= 0.1737D+00+0.1717D+01*SB -0.1978D+01*SB2+0.6643D+00*SB3
+ A5= 0.8689D+00+0.3500D+01*SB -0.3283D+01*SB2+0.1026D+01*SB3
+ ELSEIF(IPRT .EQ. -5) THEN
+ A0=SB** 0.9906D+00*Exp(-0.1496D+01-0.6576D+01*SB +
+ & 0.1569D+01*SB2)
+ A1=-0.2140D+00-0.6419D-01*SB -0.2741D-02*SB2+0.3185D-02*SB3
+ A2= 0.5781D+01+0.1049D+00*SB -0.3930D+00*SB2+0.5174D+00*SB3
+ A3=-0.9420D+00+0.5511D+00*SB +0.8817D+00*SB2+0.1903D+01*SB3
+ A4= 0.2418D-01+0.4232D-01*SB -0.1244D-01*SB2-0.2365D-01*SB3
+ A5= 0.7664D+00+0.1794D+01*SB -0.4917D+00*SB2-0.1284D+00*SB3
+ ELSEIF(IPRT .EQ. -6) THEN
+ A0=SB** 0.1000D+01*Exp(-0.8460D+01+0.1154D+01*SB +
+ & 0.8838D+01*SB2)
+ A1=-0.4316D-01-0.2976D+00*SB +0.3174D+00*SB2-0.1429D+01*SB3
+ A2= 0.4910D+01+0.2273D+01*SB +0.5631D+01*SB2-0.1994D+02*SB3
+ A3= 0.1190D+02-0.2000D+02*SB -0.2000D+02*SB2+0.1292D+02*SB3
+ A4= 0.5771D+00-0.2552D+00*SB +0.7510D+00*SB2+0.6923D+00*SB3
+ A5= 0.4402D+01-0.1627D+01*SB -0.2085D+01*SB2-0.6737D+01*SB3
+ ENDIF
+
+C...Expansion for CTEQ3D.
+ ELSEIF(ISET .EQ. 3) THEN
+ IF(IPRT .EQ. 2) THEN
+ A0=Exp( 0.2148D+00+0.5814D-01*SB +0.2734D+00*SB2-
+ & 0.2902D+00*SB3)
+ A1= 0.4810D+00+0.1657D-01*SB -0.3800D-01*SB2+0.3125D-01*SB3
+ A2= 0.3509D+01+0.3923D+00*SB +0.4010D+00*SB2-0.1932D+00*SB3
+ A3= 0.7055D+01-0.6552D+01*SB +0.3466D+01*SB2-0.5657D+00*SB3
+ A4= 0.1061D+01-0.3453D+00*SB +0.4089D+00*SB2-0.1817D+00*SB3
+ A5= 0.8687D-01+0.2548D+00*SB -0.2967D+00*SB2+0.2647D+00*SB3
+ ELSEIF(IPRT .EQ. 1) THEN
+ A0=Exp( 0.3961D+00+0.4914D+00*SB -0.1728D+01*SB2+
+ & 0.7257D+00*SB3)
+ A1= 0.4162D+00-0.1419D+00*SB +0.3680D+00*SB2-0.1618D+00*SB3
+ A2= 0.3248D+01+0.3028D+01*SB -0.4307D+01*SB2+0.1920D+01*SB3
+ A3=-0.1100D+01+0.2184D+01*SB -0.3820D+01*SB2+0.1717D+01*SB3
+ A4= 0.2082D+01-0.2756D+00*SB +0.3043D+00*SB2-0.1260D+00*SB3
+ A5=-0.4822D+00-0.5706D+00*SB +0.2243D+01*SB2-0.9760D+00*SB3
+ ELSEIF(IPRT .EQ. 0) THEN
+ A0=Exp(-0.4665D+00-0.7554D+00*SB -0.3323D+00*SB2-
+ & 0.2734D-04*SB3)
+ A1=-0.3359D+00+0.2395D+00*SB -0.2377D+00*SB2+0.7059D-01*SB3
+ A2= 0.5451D+01+0.6086D+00*SB +0.8606D-01*SB2-0.1425D+00*SB3
+ A3= 0.1026D+02-0.9352D+01*SB +0.4879D+01*SB2-0.1150D+01*SB3
+ A4= 0.9935D+00-0.5017D-01*SB -0.1707D-01*SB2-0.1464D-02*SB3
+ A5=-0.4160D-01+0.2305D+01*SB -0.1063D+01*SB2+0.3211D+00*SB3
+ ELSEIF(IPRT .EQ. -1) THEN
+ A0=Exp(-0.2714D+01-0.2868D+01*SB +0.3700D+01*SB2-
+ & 0.1671D+01*SB3)
+ A1=-0.3893D+00+0.3341D+00*SB -0.3897D+00*SB2+0.1420D+00*SB3
+ A2= 0.8359D+01-0.3267D+01*SB +0.5327D+01*SB2-0.2245D+01*SB3
+ A3= 0.2359D+02-0.5669D+01*SB -0.4602D+01*SB2+0.3153D+01*SB3
+ A4= 0.1106D+01-0.4745D+00*SB +0.7739D+00*SB2-0.3417D+00*SB3
+ A5=-0.5557D+00+0.3433D+01*SB -0.3390D+01*SB2+0.1354D+01*SB3
+ ELSEIF(IPRT .EQ. -2) THEN
+ A0=Exp(-0.3323D+01+0.2296D+00*SB -0.1109D+01*SB2+
+ & 0.2223D+00*SB3)
+ A1=-0.3410D+00+0.8847D-01*SB -0.1111D-01*SB2-0.5927D-02*SB3
+ A2= 0.9753D+01-0.5182D+00*SB -0.4670D+00*SB2+0.1921D+00*SB3
+ A3= 0.1977D+02-0.1600D+02*SB +0.9481D+01*SB2-0.1864D+01*SB3
+ A4= 0.9818D+00+0.2839D-02*SB -0.1188D+00*SB2+0.3584D-01*SB3
+ A5=-0.7934D-01+0.1004D+01*SB +0.3704D+00*SB2-0.1220D+00*SB3
+ ELSEIF(IPRT .EQ. -3) THEN
+ A0=Exp(-0.3985D+01+0.2855D+01*SB -0.5208D+01*SB2+
+ & 0.1937D+01*SB3)
+ A1=-0.3337D+00-0.1150D+00*SB +0.3691D+00*SB2-0.1709D+00*SB3
+ A2= 0.7968D+01+0.3641D+01*SB -0.6599D+01*SB2+0.2642D+01*SB3
+ A3= 0.1873D+02-0.1999D+02*SB +0.1734D+02*SB2-0.5813D+01*SB3
+ A4= 0.9731D+00+0.5082D+00*SB -0.8780D+00*SB2+0.3231D+00*SB3
+ A5=-0.5542D-01-0.4189D+00*SB +0.3309D+01*SB2-0.1439D+01*SB3
+ ELSEIF(IPRT .EQ. -4) THEN
+ A0=SB** 0.1105D+01*Exp(-0.3952D+01-0.1901D+01*SB +
+ & 0.5137D+00*SB2)
+ A1=-0.3543D+00+0.6055D+00*SB -0.6941D+00*SB2+0.2278D+00*SB3
+ A2= 0.5955D+01-0.2629D+01*SB +0.5337D+01*SB2-0.2300D+01*SB3
+ A3= 0.1933D+01+0.4882D+01*SB -0.3810D+01*SB2+0.2290D+00*SB3
+ A4= 0.1806D+00+0.1655D+01*SB -0.1893D+01*SB2+0.6395D+00*SB3
+ A5= 0.4790D+00+0.3612D+01*SB -0.3152D+01*SB2+0.9684D+00*SB3
+ ELSEIF(IPRT .EQ. -5) THEN
+ A0=SB** 0.9818D+00*Exp(-0.1825D+01-0.7464D+01*SB +
+ & 0.2143D+01*SB2)
+ A1=-0.2604D+00-0.1400D+00*SB +0.1702D+00*SB2-0.8476D-01*SB3
+ A2= 0.6005D+01+0.6275D+00*SB -0.2535D+01*SB2+0.2219D+01*SB3
+ A3=-0.9067D+00+0.1149D+01*SB +0.1974D+01*SB2+0.4716D+01*SB3
+ A4= 0.3915D-01+0.5945D-01*SB -0.9844D-01*SB2+0.2783D-01*SB3
+ A5= 0.5500D+00+0.1994D+01*SB -0.6727D+00*SB2-0.1510D+00*SB3
+ ELSEIF(IPRT .EQ. -6) THEN
+ A0=SB** 0.1002D+01*Exp(-0.8553D+01+0.3793D+00*SB +
+ & 0.9998D+01*SB2)
+ A1=-0.5870D-01-0.2792D+00*SB +0.6526D+00*SB2-0.1984D+01*SB3
+ A2= 0.4716D+01+0.4473D+00*SB +0.1128D+02*SB2-0.1937D+02*SB3
+ A3= 0.1289D+02-0.1742D+02*SB -0.1983D+02*SB2-0.9274D+00*SB3
+ A4= 0.5647D+00-0.2732D+00*SB +0.1074D+01*SB2+0.5981D+00*SB3
+ A5= 0.4390D+01-0.1262D+01*SB -0.9026D+00*SB2-0.9394D+01*SB3
+ ENDIF
+ ENDIF
+
+C...Calculation of x * f(x, Q).
+ PYCTEQ = MAX(0D0, A0 *(X**A1) *((1D0-X)**A2) *(1D0+A3*(X**A4))
+ & *(LOG(1D0+1D0/X))**A5 )
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGRVL
+C...Gives the GRV 94 L (leading order) parton distribution function set
+C...in parametrized form.
+C...Authors: M. Glueck, E. Reya and A. Vogt.
+
+ SUBROUTINE PYGRVL (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION (A - Z)
+
+C...Common expressions.
+ MU2 = 0.23D0
+ LAM2 = 0.2322D0 * 0.2322D0
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+
+C...uv :
+ NU = 2.284D0 + 0.802D0 * S + 0.055D0 * S2
+ AKU = 0.590D0 - 0.024D0 * S
+ BKU = 0.131D0 + 0.063D0 * S
+ AU = -0.449D0 - 0.138D0 * S - 0.076D0 * S2
+ BU = 0.213D0 + 2.669D0 * S - 0.728D0 * S2
+ CU = 8.854D0 - 9.135D0 * S + 1.979D0 * S2
+ DU = 2.997D0 + 0.753D0 * S - 0.076D0 * S2
+ UV = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
+
+C...dv :
+ ND = 0.371D0 + 0.083D0 * S + 0.039D0 * S2
+ AKD = 0.376D0
+ BKD = 0.486D0 + 0.062D0 * S
+ AD = -0.509D0 + 3.310D0 * S - 1.248D0 * S2
+ BD = 12.41D0 - 10.52D0 * S + 2.267D0 * S2
+ CD = 6.373D0 - 6.208D0 * S + 1.418D0 * S2
+ DD = 3.691D0 + 0.799D0 * S - 0.071D0 * S2
+ DV = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
+
+C...del :
+ NE = 0.082D0 + 0.014D0 * S + 0.008D0 * S2
+ AKE = 0.409D0 - 0.005D0 * S
+ BKE = 0.799D0 + 0.071D0 * S
+ AE = -38.07D0 + 36.13D0 * S - 0.656D0 * S2
+ BE = 90.31D0 - 74.15D0 * S + 7.645D0 * S2
+ CE = 0.0D0
+ DE = 7.486D0 + 1.217D0 * S - 0.159D0 * S2
+ DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
+
+C...udb :
+ ALX = 1.451D0
+ BEX = 0.271D0
+ AKX = 0.410D0 - 0.232D0 * S
+ BKX = 0.534D0 - 0.457D0 * S
+ AGX = 0.890D0 - 0.140D0 * S
+ BGX = -0.981D0
+ CX = 0.320D0 + 0.683D0 * S
+ DX = 4.752D0 + 1.164D0 * S + 0.286D0 * S2
+ EX = 4.119D0 + 1.713D0 * S
+ ESX = 0.682D0 + 2.978D0 * S
+ UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
+ & DX, EX, ESX)
+
+C...sb :
+ STS = 0D0
+ ALS = 0.914D0
+ BES = 0.577D0
+ AKS = 1.798D0 - 0.596D0 * S
+ AS = -5.548D0 + 3.669D0 * DS - 0.616D0 * S
+ BS = 18.92D0 - 16.73D0 * DS + 5.168D0 * S
+ DST = 6.379D0 - 0.350D0 * S + 0.142D0 * S2
+ EST = 3.981D0 + 1.638D0 * S
+ ESS = 6.402D0
+ SB = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
+
+C...cb :
+ STC = 0.888D0
+ ALC = 1.01D0
+ BEC = 0.37D0
+ AKC = 0D0
+ AC = 0D0
+ BC = 4.24D0 - 0.804D0 * S
+ DCT = 3.46D0 - 1.076D0 * S
+ ECT = 4.61D0 + 1.49D0 * S
+ ESC = 2.555D0 + 1.961D0 * S
+ CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
+
+C...bb :
+ STB = 1.351D0
+ ALB = 1.00D0
+ BEB = 0.51D0
+ AKB = 0D0
+ AB = 0D0
+ BB = 1.848D0
+ DBT = 2.929D0 + 1.396D0 * S
+ EBT = 4.71D0 + 1.514D0 * S
+ ESB = 4.02D0 + 1.239D0 * S
+ BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
+
+C...gl :
+ ALG = 0.524D0
+ BEG = 1.088D0
+ AKG = 1.742D0 - 0.930D0 * S
+ BKG = - 0.399D0 * S2
+ AG = 7.486D0 - 2.185D0 * S
+ BG = 16.69D0 - 22.74D0 * S + 5.779D0 * S2
+ CG = -25.59D0 + 29.71D0 * S - 7.296D0 * S2
+ DG = 2.792D0 + 2.215D0 * S + 0.422D0 * S2 - 0.104D0 * S3
+ EG = 0.807D0 + 2.005D0 * S
+ ESG = 3.841D0 + 0.316D0 * S
+ GL = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG,
+ & DG, EG, ESG)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGRVM
+C...Gives the GRV 94 M (MSbar) parton distribution function set
+C...in parametrized form.
+C...Authors: M. Glueck, E. Reya and A. Vogt.
+
+ SUBROUTINE PYGRVM (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION (A - Z)
+
+C...Common expressions.
+ MU2 = 0.34D0
+ LAM2 = 0.248D0 * 0.248D0
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+
+C...uv :
+ NU = 1.304D0 + 0.863D0 * S
+ AKU = 0.558D0 - 0.020D0 * S
+ BKU = 0.183D0 * S
+ AU = -0.113D0 + 0.283D0 * S - 0.321D0 * S2
+ BU = 6.843D0 - 5.089D0 * S + 2.647D0 * S2 - 0.527D0 * S3
+ CU = 7.771D0 - 10.09D0 * S + 2.630D0 * S2
+ DU = 3.315D0 + 1.145D0 * S - 0.583D0 * S2 + 0.154D0 * S3
+ UV = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
+
+C...dv :
+ ND = 0.102D0 - 0.017D0 * S + 0.005D0 * S2
+ AKD = 0.270D0 - 0.019D0 * S
+ BKD = 0.260D0
+ AD = 2.393D0 + 6.228D0 * S - 0.881D0 * S2
+ BD = 46.06D0 + 4.673D0 * S - 14.98D0 * S2 + 1.331D0 * S3
+ CD = 17.83D0 - 53.47D0 * S + 21.24D0 * S2
+ DD = 4.081D0 + 0.976D0 * S - 0.485D0 * S2 + 0.152D0 * S3
+ DV = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
+
+C...del :
+ NE = 0.070D0 + 0.042D0 * S - 0.011D0 * S2 + 0.004D0 * S3
+ AKE = 0.409D0 - 0.007D0 * S
+ BKE = 0.782D0 + 0.082D0 * S
+ AE = -29.65D0 + 26.49D0 * S + 5.429D0 * S2
+ BE = 90.20D0 - 74.97D0 * S + 4.526D0 * S2
+ CE = 0.0D0
+ DE = 8.122D0 + 2.120D0 * S - 1.088D0 * S2 + 0.231D0 * S3
+ DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
+
+C...udb :
+ ALX = 0.877D0
+ BEX = 0.561D0
+ AKX = 0.275D0
+ BKX = 0.0D0
+ AGX = 0.997D0
+ BGX = 3.210D0 - 1.866D0 * S
+ CX = 7.300D0
+ DX = 9.010D0 + 0.896D0 * DS + 0.222D0 * S2
+ EX = 3.077D0 + 1.446D0 * S
+ ESX = 3.173D0 - 2.445D0 * DS + 2.207D0 * S
+ UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
+ & DX, EX, ESX)
+
+C...sb :
+ STS = 0D0
+ ALS = 0.756D0
+ BES = 0.216D0
+ AKS = 1.690D0 + 0.650D0 * DS - 0.922D0 * S
+ AS = -4.329D0 + 1.131D0 * S
+ BS = 9.568D0 - 1.744D0 * S
+ DST = 9.377D0 + 1.088D0 * DS - 1.320D0 * S + 0.130D0 * S2
+ EST = 3.031D0 + 1.639D0 * S
+ ESS = 5.837D0 + 0.815D0 * S
+ SB = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
+
+C...cb :
+ STC = 0.820D0
+ ALC = 0.98D0
+ BEC = 0D0
+ AKC = -0.625D0 - 0.523D0 * S
+ AC = 0D0
+ BC = 1.896D0 + 1.616D0 * S
+ DCT = 4.12D0 + 0.683D0 * S
+ ECT = 4.36D0 + 1.328D0 * S
+ ESC = 0.677D0 + 0.679D0 * S
+ CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
+
+C...bb :
+ STB = 1.297D0
+ ALB = 0.99D0
+ BEB = 0D0
+ AKB = - 0.193D0 * S
+ AB = 0D0
+ BB = 0D0
+ DBT = 3.447D0 + 0.927D0 * S
+ EBT = 4.68D0 + 1.259D0 * S
+ ESB = 1.892D0 + 2.199D0 * S
+ BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
+
+C...gl :
+ ALG = 1.014D0
+ BEG = 1.738D0
+ AKG = 1.724D0 + 0.157D0 * S
+ BKG = 0.800D0 + 1.016D0 * S
+ AG = 7.517D0 - 2.547D0 * S
+ BG = 34.09D0 - 52.21D0 * DS + 17.47D0 * S
+ CG = 4.039D0 + 1.491D0 * S
+ DG = 3.404D0 + 0.830D0 * S
+ EG = -1.112D0 + 3.438D0 * S - 0.302D0 * S2
+ ESG = 3.256D0 - 0.436D0 * S
+ GL = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG, DG, EG, ESG)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGRVD
+C...Gives the GRV 94 D (DIS) parton distribution function set
+C...in parametrized form.
+C...Authors: M. Glueck, E. Reya and A. Vogt.
+
+ SUBROUTINE PYGRVD (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION (A - Z)
+
+C...Common expressions.
+ MU2 = 0.34D0
+ LAM2 = 0.248D0 * 0.248D0
+ S = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
+ DS = SQRT (S)
+ S2 = S * S
+ S3 = S2 * S
+
+C...uv :
+ NU = 2.484D0 + 0.116D0 * S + 0.093D0 * S2
+ AKU = 0.563D0 - 0.025D0 * S
+ BKU = 0.054D0 + 0.154D0 * S
+ AU = -0.326D0 - 0.058D0 * S - 0.135D0 * S2
+ BU = -3.322D0 + 8.259D0 * S - 3.119D0 * S2 + 0.291D0 * S3
+ CU = 11.52D0 - 12.99D0 * S + 3.161D0 * S2
+ DU = 2.808D0 + 1.400D0 * S - 0.557D0 * S2 + 0.119D0 * S3
+ UV = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
+
+C...dv :
+ ND = 0.156D0 - 0.017D0 * S
+ AKD = 0.299D0 - 0.022D0 * S
+ BKD = 0.259D0 - 0.015D0 * S
+ AD = 3.445D0 + 1.278D0 * S + 0.326D0 * S2
+ BD = -6.934D0 + 37.45D0 * S - 18.95D0 * S2 + 1.463D0 * S3
+ CD = 55.45D0 - 69.92D0 * S + 20.78D0 * S2
+ DD = 3.577D0 + 1.441D0 * S - 0.683D0 * S2 + 0.179D0 * S3
+ DV = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
+
+C...del :
+ NE = 0.099D0 + 0.019D0 * S + 0.002D0 * S2
+ AKE = 0.419D0 - 0.013D0 * S
+ BKE = 1.064D0 - 0.038D0 * S
+ AE = -44.00D0 + 98.70D0 * S - 14.79D0 * S2
+ BE = 28.59D0 - 40.94D0 * S - 13.66D0 * S2 + 2.523D0 * S3
+ CE = 84.57D0 - 108.8D0 * S + 31.52D0 * S2
+ DE = 7.469D0 + 2.480D0 * S - 0.866D0 * S2
+ DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
+
+C...udb :
+ ALX = 1.215D0
+ BEX = 0.466D0
+ AKX = 0.326D0 + 0.150D0 * S
+ BKX = 0.956D0 + 0.405D0 * S
+ AGX = 0.272D0
+ BGX = 3.794D0 - 2.359D0 * DS
+ CX = 2.014D0
+ DX = 7.941D0 + 0.534D0 * DS - 0.940D0 * S + 0.410D0 * S2
+ EX = 3.049D0 + 1.597D0 * S
+ ESX = 4.396D0 - 4.594D0 * DS + 3.268D0 * S
+ UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
+ & DX, EX, ESX)
+
+C...sb :
+ STS = 0D0
+ ALS = 0.175D0
+ BES = 0.344D0
+ AKS = 1.415D0 - 0.641D0 * DS
+ AS = 0.580D0 - 9.763D0 * DS + 6.795D0 * S - 0.558D0 * S2
+ BS = 5.617D0 + 5.709D0 * DS - 3.972D0 * S
+ DST = 13.78D0 - 9.581D0 * S + 5.370D0 * S2 - 0.996D0 * S3
+ EST = 4.546D0 + 0.372D0 * S2
+ ESS = 5.053D0 - 1.070D0 * S + 0.805D0 * S2
+ SB = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
+
+C...cb :
+ STC = 0.820D0
+ ALC = 0.98D0
+ BEC = 0D0
+ AKC = -0.625D0 - 0.523D0 * S
+ AC = 0D0
+ BC = 1.896D0 + 1.616D0 * S
+ DCT = 4.12D0 + 0.683D0 * S
+ ECT = 4.36D0 + 1.328D0 * S
+ ESC = 0.677D0 + 0.679D0 * S
+ CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
+
+C...bb :
+ STB = 1.297D0
+ ALB = 0.99D0
+ BEB = 0D0
+ AKB = - 0.193D0 * S
+ AB = 0D0
+ BB = 0D0
+ DBT = 3.447D0 + 0.927D0 * S
+ EBT = 4.68D0 + 1.259D0 * S
+ ESB = 1.892D0 + 2.199D0 * S
+ BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
+
+C...gl :
+ ALG = 1.258D0
+ BEG = 1.846D0
+ AKG = 2.423D0
+ BKG = 2.427D0 + 1.311D0 * S - 0.153D0 * S2
+ AG = 25.09D0 - 7.935D0 * S
+ BG = -14.84D0 - 124.3D0 * DS + 72.18D0 * S
+ CG = 590.3D0 - 173.8D0 * S
+ DG = 5.196D0 + 1.857D0 * S
+ EG = -1.648D0 + 3.988D0 * S - 0.432D0 * S2
+ ESG = 3.232D0 - 0.542D0 * S
+ GL = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG, DG, EG, ESG)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGRVV
+C...Auxiliary for the GRV 94 parton distribution functions
+C...for u and d valence and d-u sea.
+C...Authors: M. Glueck, E. Reya and A. Vogt.
+
+ FUNCTION PYGRVV (X, N, AK, BK, A, B, C, D)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION (A - Z)
+
+C...Evaluation.
+ DX = SQRT (X)
+ PYGRVV = N * X**AK * (1D0+ A*X**BK + X * (B + C*DX)) *
+ & (1D0- X)**D
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGRVW
+C...Auxiliary for the GRV 94 parton distribution functions
+C...for d+u sea and gluon.
+C...Authors: M. Glueck, E. Reya and A. Vogt.
+
+ FUNCTION PYGRVW (X, S, AL, BE, AK, BK, A, B, C, D, E, ES)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION (A - Z)
+
+C...Evaluation.
+ LX = LOG (1D0/X)
+ PYGRVW = (X**AK * (A + X * (B + X*C)) * LX**BK + S**AL
+ & * EXP (-E + SQRT (ES * S**BE * LX))) * (1D0- X)**D
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGRVS
+C...Auxiliary for the GRV 94 parton distribution functions
+C...for s, c and b sea.
+C...Authors: M. Glueck, E. Reya and A. Vogt.
+
+ FUNCTION PYGRVS (X, S, STH, AL, BE, AK, AG, B, D, E, ES)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION (A - Z)
+
+C...Evaluation.
+ IF(S.LE.STH) THEN
+ PYGRVS = 0D0
+ ELSE
+ DX = SQRT (X)
+ LX = LOG (1D0/X)
+ PYGRVS = (S - STH)**AL / LX**AK * (1D0+ AG*DX + B*X) *
+ & (1D0- X)**D * EXP (-E + SQRT (ES * S**BE * LX))
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYHFTH
+C...Gives threshold attractive/repulsive factor for heavy flavour
+C...production.
+
+ FUNCTION PYHFTH(SH,SQM,FRATT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYDAT1/,/PYPARS/,/PYINT1/
+
+C...Value for alpha_strong.
+ IF(MSTP(35).LE.1) THEN
+ ALSSG=PARP(35)
+ ELSE
+ MST115=MSTU(115)
+ MSTU(115)=MSTP(36)
+ Q2BN=SQRT(MAX(1D0,SQM*((SQRT(SH)-2D0*SQRT(SQM))**2+
+ & PARP(36)**2)))
+ ALSSG=PYALPS(Q2BN)
+ MSTU(115)=MST115
+ ENDIF
+
+C...Evaluate attractive and repulsive factors.
+ XATTR=4D0*PARU(1)*ALSSG/(3D0*SQRT(MAX(1D-20,1D0-4D0*SQM/SH)))
+ FATTR=XATTR/(1D0-EXP(-MIN(50D0,XATTR)))
+ XREPU=PARU(1)*ALSSG/(6D0*SQRT(MAX(1D-20,1D0-4D0*SQM/SH)))
+ FREPU=XREPU/(EXP(MIN(50D0,XREPU))-1D0)
+ PYHFTH=FRATT*FATTR+(1D0-FRATT)*FREPU
+ VINT(138)=PYHFTH
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSPLI
+C...Splits a hadron remnant into two (partons or hadron + parton)
+C...in case it is more complicated than just a quark or a diquark.
+
+ SUBROUTINE PYSPLI(KF,KFLIN,KFLCH,KFLSP)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ SAVE /PYPARS/,/PYINT1/
+C...Local array.
+ DIMENSION KFL(3)
+
+C...Preliminaries. Parton composition.
+ KFA=IABS(KF)
+ KFS=ISIGN(1,KF)
+ KFL(1)=MOD(KFA/1000,10)
+ KFL(2)=MOD(KFA/100,10)
+ KFL(3)=MOD(KFA/10,10)
+ IF(KFA.EQ.22.AND.MINT(109).EQ.2) THEN
+ KFL(2)=INT(1.5D0+PYR(0))
+ IF(MINT(105).EQ.333) KFL(2)=3
+ IF(MINT(105).EQ.443) KFL(2)=4
+ KFL(3)=KFL(2)
+ ELSEIF((KFA.EQ.111.OR.KFA.EQ.113).AND.PYR(0).GT.0.5D0) THEN
+ KFL(2)=2
+ KFL(3)=2
+ ELSEIF(KFA.EQ.223.AND.PYR(0).GT.0.5D0) THEN
+ KFL(2)=1
+ KFL(3)=1
+ ENDIF
+ IF(KFLIN.NE.21.AND.KFLIN.NE.22.AND.KFLIN.NE.23) THEN
+ KFLR=KFLIN*KFS
+ ELSE
+ KFLR=KFLIN
+ ENDIF
+ KFLCH=0
+
+C...Subdivide lepton.
+ IF(KFA.GE.11.AND.KFA.LE.18) THEN
+ IF(KFLR.EQ.KFA) THEN
+ KFLSP=KFS*22
+ ELSEIF(KFLR.EQ.22) THEN
+ KFLSP=KFA
+ ELSEIF(KFLR.EQ.-24.AND.MOD(KFA,2).EQ.1) THEN
+ KFLSP=KFA+1
+ ELSEIF(KFLR.EQ.24.AND.MOD(KFA,2).EQ.0) THEN
+ KFLSP=KFA-1
+ ELSEIF(KFLR.EQ.21) THEN
+ KFLSP=KFA
+ KFLCH=KFS*21
+ ELSE
+ KFLSP=KFA
+ KFLCH=-KFLR
+ ENDIF
+
+C...Subdivide photon.
+ ELSEIF(KFA.EQ.22.AND.MINT(109).NE.2) THEN
+ IF(KFLR.NE.21) THEN
+ KFLSP=-KFLR
+ ELSE
+ RAGR=0.75D0*PYR(0)
+ KFLSP=1
+ IF(RAGR.GT.0.125D0) KFLSP=2
+ IF(RAGR.GT.0.625D0) KFLSP=3
+ IF(PYR(0).GT.0.5D0) KFLSP=-KFLSP
+ KFLCH=-KFLSP
+ ENDIF
+
+C...Subdivide Reggeon or Pomeron.
+ ELSEIF(KFA.EQ.28.OR.KFA.EQ.29) THEN
+ IF(KFLIN.EQ.21) THEN
+ KFLSP=KFS*21
+ ELSE
+ KFLSP=-KFLIN
+ ENDIF
+
+C...Subdivide meson.
+ ELSEIF(KFL(1).EQ.0) THEN
+ KFL(2)=KFL(2)*(-1)**KFL(2)
+ KFL(3)=-KFL(3)*(-1)**IABS(KFL(2))
+ IF(KFLR.EQ.KFL(2)) THEN
+ KFLSP=KFL(3)
+ ELSEIF(KFLR.EQ.KFL(3)) THEN
+ KFLSP=KFL(2)
+ ELSEIF(KFLR.EQ.21.AND.PYR(0).GT.0.5D0) THEN
+ KFLSP=KFL(2)
+ KFLCH=KFL(3)
+ ELSEIF(KFLR.EQ.21) THEN
+ KFLSP=KFL(3)
+ KFLCH=KFL(2)
+ ELSEIF(KFLR*KFL(2).GT.0) THEN
+ CALL PYKFDI(-KFLR,KFL(2),KFDUMP,KFLCH)
+ KFLSP=KFL(3)
+ ELSE
+ CALL PYKFDI(-KFLR,KFL(3),KFDUMP,KFLCH)
+ KFLSP=KFL(2)
+ ENDIF
+
+C...Subdivide baryon.
+ ELSE
+ NAGR=0
+ DO 100 J=1,3
+ IF(KFLR.EQ.KFL(J)) NAGR=NAGR+1
+ 100 CONTINUE
+ IF(NAGR.GE.1) THEN
+ RAGR=0.00001D0+(NAGR-0.00002D0)*PYR(0)
+ IAGR=0
+ DO 110 J=1,3
+ IF(KFLR.EQ.KFL(J)) RAGR=RAGR-1D0
+ IF(IAGR.EQ.0.AND.RAGR.LE.0D0) IAGR=J
+ 110 CONTINUE
+ ELSE
+ IAGR=1.00001D0+2.99998D0*PYR(0)
+ ENDIF
+ ID1=1
+ IF(IAGR.EQ.1) ID1=2
+ IF(IAGR.EQ.1.AND.KFL(3).GT.KFL(2)) ID1=3
+ ID2=6-IAGR-ID1
+ KSP=3
+ IF(MOD(KFA,10).EQ.2.AND.KFL(1).EQ.KFL(2)) THEN
+ IF(IAGR.NE.3.AND.PYR(0).GT.0.25D0) KSP=1
+ ELSEIF(MOD(KFA,10).EQ.2.AND.KFL(2).GE.KFL(3)) THEN
+ IF(IAGR.NE.1.AND.PYR(0).GT.0.25D0) KSP=1
+ ELSEIF(MOD(KFA,10).EQ.2) THEN
+ IF(IAGR.EQ.1) KSP=1
+ IF(IAGR.NE.1.AND.PYR(0).GT.0.75D0) KSP=1
+ ENDIF
+ KFLSP=1000*KFL(ID1)+100*KFL(ID2)+KSP
+ IF(KFLR.EQ.21) THEN
+ KFLCH=KFL(IAGR)
+ ELSEIF(NAGR.EQ.0.AND.KFLR.GT.0) THEN
+ CALL PYKFDI(-KFLR,KFL(IAGR),KFDUMP,KFLCH)
+ ELSEIF(NAGR.EQ.0) THEN
+ CALL PYKFDI(10000+KFLSP,-KFLR,KFDUMP,KFLCH)
+ KFLSP=KFL(IAGR)
+ ENDIF
+ ENDIF
+
+C...Add on correct sign for result.
+ KFLCH=KFLCH*KFS
+ KFLSP=KFLSP*KFS
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGAMM
+C...Gives ordinary Gamma function Gamma(x) for positive, real arguments;
+C...see M. Abramowitz, I. A. Stegun: Handbook of Mathematical Functions
+C...(Dover, 1965) 6.1.36.
+
+ FUNCTION PYGAMM(X)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Local array and data.
+ DIMENSION B(8)
+ DATA B/-0.577191652D0,0.988205891D0,-0.897056937D0,0.918206857D0,
+ &-0.756704078D0,0.482199394D0,-0.193527818D0,0.035868343D0/
+
+ NX=INT(X)
+ DX=X-NX
+
+ PYGAMM=1D0
+ DXP=1D0
+ DO 100 I=1,8
+ DXP=DXP*DX
+ PYGAMM=PYGAMM+B(I)*DXP
+ 100 CONTINUE
+ IF(X.LT.1D0) THEN
+ PYGAMM=PYGAMM/X
+ ELSE
+ DO 110 IX=1,NX-1
+ PYGAMM=(X-IX)*PYGAMM
+ 110 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYWAUX
+C...Calculates real and imaginary parts of the auxiliary functions W1
+C...and W2; see R. K. Ellis, I. Hinchliffe, M. Soldate and J. J. van
+C...der Bij, Nucl. Phys. B297 (1988) 221.
+
+ SUBROUTINE PYWAUX(IAUX,EPS,WRE,WIM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+ ASINH(X)=LOG(X+SQRT(X**2+1D0))
+ ACOSH(X)=LOG(X+SQRT(X**2-1D0))
+
+ IF(EPS.LT.0D0) THEN
+ IF(IAUX.EQ.1) WRE=2D0*SQRT(1D0-EPS)*ASINH(SQRT(-1D0/EPS))
+ IF(IAUX.EQ.2) WRE=4D0*(ASINH(SQRT(-1D0/EPS)))**2
+ WIM=0D0
+ ELSEIF(EPS.LT.1D0) THEN
+ IF(IAUX.EQ.1) WRE=2D0*SQRT(1D0-EPS)*ACOSH(SQRT(1D0/EPS))
+ IF(IAUX.EQ.2) WRE=4D0*(ACOSH(SQRT(1D0/EPS)))**2-PARU(1)**2
+ IF(IAUX.EQ.1) WIM=-PARU(1)*SQRT(1D0-EPS)
+ IF(IAUX.EQ.2) WIM=-4D0*PARU(1)*ACOSH(SQRT(1D0/EPS))
+ ELSE
+ IF(IAUX.EQ.1) WRE=2D0*SQRT(EPS-1D0)*ASIN(SQRT(1D0/EPS))
+ IF(IAUX.EQ.2) WRE=-4D0*(ASIN(SQRT(1D0/EPS)))**2
+ WIM=0D0
+ ENDIF
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYI3AU
+C...Calculates real and imaginary parts of the auxiliary function I3;
+C...see R. K. Ellis, I. Hinchliffe, M. Soldate and J. J. van der Bij,
+C...Nucl. Phys. B297 (1988) 221.
+
+ SUBROUTINE PYI3AU(EPS,RAT,Y3RE,Y3IM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+ BE=0.5D0*(1D0+SQRT(1D0+RAT*EPS))
+ IF(EPS.LT.1D0) GA=0.5D0*(1D0+SQRT(1D0-EPS))
+
+ IF(EPS.LT.0D0) THEN
+ IF(ABS(EPS).LT.1.D-4.AND.ABS(RAT*EPS).LT.1.D-4) THEN
+ F3RE=PYSPEN(-0.25D0*EPS/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)-
+ & PYSPEN((1D0-0.25D0*EPS)/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)+
+ & PYSPEN(0.25D0*(RAT+1D0)*EPS/(1D0+0.25D0*RAT*EPS),0D0,1)-
+ & PYSPEN((RAT+1D0)/RAT,0D0,1)+0.5D0*(LOG(1D0+0.25D0*RAT*EPS)**2-
+ & LOG(0.25D0*RAT*EPS)**2)+LOG(1D0-0.25D0*EPS)*
+ & LOG((1D0+0.25D0*(RAT-1D0)*EPS)/(1D0+0.25D0*RAT*EPS))+
+ & LOG(-0.25D0*EPS)*LOG(0.25D0*RAT*EPS/(1D0+0.25D0*(RAT-1D0)*
+ & EPS))
+ ELSEIF(ABS(EPS).LT.1.D-4.AND.ABS(RAT*EPS).GE.1.D-4) THEN
+ F3RE=PYSPEN(-0.25D0*EPS/(BE-0.25D0*EPS),0D0,1)-
+ & PYSPEN((1D0-0.25D0*EPS)/(BE-0.25D0*EPS),0D0,1)+
+ & PYSPEN((BE-1D0+0.25D0*EPS)/BE,0D0,1)-
+ & PYSPEN((BE-1D0+0.25D0*EPS)/(BE-1D0),0D0,1)+
+ & 0.5D0*(LOG(BE)**2-LOG(BE-1D0)**2)+
+ & LOG(1D0-0.25D0*EPS)*LOG((BE-0.25D0*EPS)/BE)+
+ & LOG(-0.25D0*EPS)*LOG((BE-1D0)/(BE-0.25D0*EPS))
+ ELSEIF(ABS(EPS).GE.1.D-4.AND.ABS(RAT*EPS).LT.1.D-4) THEN
+ F3RE=PYSPEN((GA-1D0)/(GA+0.25D0*RAT*EPS),0D0,1)-
+ & PYSPEN(GA/(GA+0.25D0*RAT*EPS),0D0,1)+
+ & PYSPEN((1D0+0.25D0*RAT*EPS-GA)/(1D0+0.25D0*RAT*EPS),0D0,1)-
+ & PYSPEN((1D0+0.25D0*RAT*EPS-GA)/(0.25D0*RAT*EPS),0D0,1)+
+ & 0.5D0*(LOG(1D0+0.25D0*RAT*EPS)**2-LOG(0.25D0*RAT*EPS)**2)+
+ & LOG(GA)*LOG((GA+0.25D0*RAT*EPS)/(1D0+0.25D0*RAT*EPS))+
+ & LOG(GA-1D0)*LOG(0.25D0*RAT*EPS/(GA+0.25D0*RAT*EPS))
+ ELSE
+ F3RE=PYSPEN((GA-1D0)/(GA+BE-1D0),0D0,1)-
+ & PYSPEN(GA/(GA+BE-1D0),0D0,1)+PYSPEN((BE-GA)/BE,0D0,1)-
+ & PYSPEN((BE-GA)/(BE-1D0),0D0,1)+0.5D0*(LOG(BE)**2-
+ & LOG(BE-1D0)**2)+LOG(GA)*LOG((GA+BE-1D0)/BE)+
+ & LOG(GA-1D0)*LOG((BE-1D0)/(GA+BE-1D0))
+ ENDIF
+ F3IM=0D0
+ ELSEIF(EPS.LT.1D0) THEN
+ IF(ABS(EPS).LT.1.D-4.AND.ABS(RAT*EPS).LT.1.D-4) THEN
+ F3RE=PYSPEN(-0.25D0*EPS/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)-
+ & PYSPEN((1D0-0.25D0*EPS)/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)+
+ & PYSPEN((1D0-0.25D0*EPS)/(-0.25D0*(RAT+1D0)*EPS),0D0,1)-
+ & PYSPEN(1D0/(RAT+1D0),0D0,1)+LOG((1D0-0.25D0*EPS)/
+ & (0.25D0*EPS))*LOG((1D0+0.25D0*(RAT-1D0)*EPS)/
+ & (0.25D0*(RAT+1D0)*EPS))
+ F3IM=-PARU(1)*LOG((1D0+0.25D0*(RAT-1D0)*EPS)/
+ & (0.25D0*(RAT+1D0)*EPS))
+ ELSEIF(ABS(EPS).LT.1.D-4.AND.ABS(RAT*EPS).GE.1.D-4) THEN
+ F3RE=PYSPEN(-0.25D0*EPS/(BE-0.25D0*EPS),0D0,1)-
+ & PYSPEN((1D0-0.25D0*EPS)/(BE-0.25D0*EPS),0D0,1)+
+ & PYSPEN((1D0-0.25D0*EPS)/(1D0-0.25D0*EPS-BE),0D0,1)-
+ & PYSPEN(-0.25D0*EPS/(1D0-0.25D0*EPS-BE),0D0,1)+
+ & LOG((1D0-0.25D0*EPS)/(0.25D0*EPS))*
+ & LOG((BE-0.25D0*EPS)/(BE-1D0+0.25D0*EPS))
+ F3IM=-PARU(1)*LOG((BE-0.25D0*EPS)/(BE-1D0+0.25D0*EPS))
+ ELSEIF(ABS(EPS).GE.1.D-4.AND.ABS(RAT*EPS).LT.1.D-4) THEN
+ F3RE=PYSPEN((GA-1D0)/(GA+0.25D0*RAT*EPS),0D0,1)-
+ & PYSPEN(GA/(GA+0.25D0*RAT*EPS),0D0,1)+
+ & PYSPEN(GA/(GA-1D0-0.25D0*RAT*EPS),0D0,1)-
+ & PYSPEN((GA-1D0)/(GA-1D0-0.25D0*RAT*EPS),0D0,1)+
+ & LOG(GA/(1D0-GA))*LOG((GA+0.25D0*RAT*EPS)/
+ & (1D0+0.25D0*RAT*EPS-GA))
+ F3IM=-PARU(1)*LOG((GA+0.25D0*RAT*EPS)/
+ & (1D0+0.25D0*RAT*EPS-GA))
+ ELSE
+ F3RE=PYSPEN((GA-1D0)/(GA+BE-1D0),0D0,1)-
+ & PYSPEN(GA/(GA+BE-1D0),0D0,1)+PYSPEN(GA/(GA-BE),0D0,1)-
+ & PYSPEN((GA-1D0)/(GA-BE),0D0,1)+LOG(GA/(1D0-GA))*
+ & LOG((GA+BE-1D0)/(BE-GA))
+ F3IM=-PARU(1)*LOG((GA+BE-1D0)/(BE-GA))
+ ENDIF
+ ELSE
+ RSQ=EPS/(EPS-1D0+(2D0*BE-1D0)**2)
+ RCTHE=RSQ*(1D0-2D0*BE/EPS)
+ RSTHE=SQRT(MAX(0D0,RSQ-RCTHE**2))
+ RCPHI=RSQ*(1D0+2D0*(BE-1D0)/EPS)
+ RSPHI=SQRT(MAX(0D0,RSQ-RCPHI**2))
+ R=SQRT(RSQ)
+ THE=ACOS(MAX(-0.999999D0,MIN(0.999999D0,RCTHE/R)))
+ PHI=ACOS(MAX(-0.999999D0,MIN(0.999999D0,RCPHI/R)))
+ F3RE=PYSPEN(RCTHE,RSTHE,1)+PYSPEN(RCTHE,-RSTHE,1)-
+ & PYSPEN(RCPHI,RSPHI,1)-PYSPEN(RCPHI,-RSPHI,1)+
+ & (PHI-THE)*(PHI+THE-PARU(1))
+ F3IM=PYSPEN(RCTHE,RSTHE,2)+PYSPEN(RCTHE,-RSTHE,2)-
+ & PYSPEN(RCPHI,RSPHI,2)-PYSPEN(RCPHI,-RSPHI,2)
+ ENDIF
+
+ Y3RE=2D0/(2D0*BE-1D0)*F3RE
+ Y3IM=2D0/(2D0*BE-1D0)*F3IM
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYSPEN
+C...Calculates real and imaginary part of Spence function; see
+C...G. 't Hooft and M. Veltman, Nucl. Phys. B153 (1979) 365.
+
+ FUNCTION PYSPEN(XREIN,XIMIN,IREIM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+C...Local array and data.
+ DIMENSION B(0:14)
+ DATA B/
+ &1.000000D+00, -5.000000D-01, 1.666667D-01,
+ &0.000000D+00, -3.333333D-02, 0.000000D+00,
+ &2.380952D-02, 0.000000D+00, -3.333333D-02,
+ &0.000000D+00, 7.575757D-02, 0.000000D+00,
+ &-2.531135D-01, 0.000000D+00, 1.166667D+00/
+
+ XRE=XREIN
+ XIM=XIMIN
+ IF(ABS(1D0-XRE).LT.1.D-6.AND.ABS(XIM).LT.1.D-6) THEN
+ IF(IREIM.EQ.1) PYSPEN=PARU(1)**2/6D0
+ IF(IREIM.EQ.2) PYSPEN=0D0
+ RETURN
+ ENDIF
+
+ XMOD=SQRT(XRE**2+XIM**2)
+ IF(XMOD.LT.1.D-6) THEN
+ IF(IREIM.EQ.1) PYSPEN=0D0
+ IF(IREIM.EQ.2) PYSPEN=0D0
+ RETURN
+ ENDIF
+
+ XARG=SIGN(ACOS(XRE/XMOD),XIM)
+ SP0RE=0D0
+ SP0IM=0D0
+ SGN=1D0
+ IF(XMOD.GT.1D0) THEN
+ ALGXRE=LOG(XMOD)
+ ALGXIM=XARG-SIGN(PARU(1),XARG)
+ SP0RE=-PARU(1)**2/6D0-(ALGXRE**2-ALGXIM**2)/2D0
+ SP0IM=-ALGXRE*ALGXIM
+ SGN=-1D0
+ XMOD=1D0/XMOD
+ XARG=-XARG
+ XRE=XMOD*COS(XARG)
+ XIM=XMOD*SIN(XARG)
+ ENDIF
+ IF(XRE.GT.0.5D0) THEN
+ ALGXRE=LOG(XMOD)
+ ALGXIM=XARG
+ XRE=1D0-XRE
+ XIM=-XIM
+ XMOD=SQRT(XRE**2+XIM**2)
+ XARG=SIGN(ACOS(XRE/XMOD),XIM)
+ ALGYRE=LOG(XMOD)
+ ALGYIM=XARG
+ SP0RE=SP0RE+SGN*(PARU(1)**2/6D0-(ALGXRE*ALGYRE-ALGXIM*ALGYIM))
+ SP0IM=SP0IM-SGN*(ALGXRE*ALGYIM+ALGXIM*ALGYRE)
+ SGN=-SGN
+ ENDIF
+
+ XRE=1D0-XRE
+ XIM=-XIM
+ XMOD=SQRT(XRE**2+XIM**2)
+ XARG=SIGN(ACOS(XRE/XMOD),XIM)
+ ZRE=-LOG(XMOD)
+ ZIM=-XARG
+
+ SPRE=0D0
+ SPIM=0D0
+ SAVERE=1D0
+ SAVEIM=0D0
+ DO 100 I=0,14
+ IF(MAX(ABS(SAVERE),ABS(SAVEIM)).LT.1D-30) GOTO 110
+ TERMRE=(SAVERE*ZRE-SAVEIM*ZIM)/DBLE(I+1)
+ TERMIM=(SAVERE*ZIM+SAVEIM*ZRE)/DBLE(I+1)
+ SAVERE=TERMRE
+ SAVEIM=TERMIM
+ SPRE=SPRE+B(I)*TERMRE
+ SPIM=SPIM+B(I)*TERMIM
+ 100 CONTINUE
+
+ 110 IF(IREIM.EQ.1) PYSPEN=SP0RE+SGN*SPRE
+ IF(IREIM.EQ.2) PYSPEN=SP0IM+SGN*SPIM
+
+ RETURN
+ END
+
+C***********************************************************************
+
+C...PYQQBH
+C...Calculates the matrix element for the processes
+C...g + g or q + qbar -> Q + Qbar + H (normally with Q = t).
+C...REDUCE output and part of the rest courtesy Z. Kunszt, see
+C...Z. Kunszt, Nucl. Phys. B247 (1984) 339.
+
+ SUBROUTINE PYQQBH(WTQQBH)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT2/
+C...Local arrays and function.
+ DIMENSION PP(15,4),CLR(8,8),FM(10,10),RM(8,8),DX(8)
+ DOT(I,J)=PP(I,4)*PP(J,4)-PP(I,1)*PP(J,1)-PP(I,2)*PP(J,2)-
+ &PP(I,3)*PP(J,3)
+
+C...Mass parameters.
+ WTQQBH=0D0
+ ISUB=MINT(1)
+ SHPR=SQRT(VINT(26))*VINT(1)
+ PQ=PMAS(PYCOMP(KFPR(ISUB,2)),1)
+ PH=SQRT(VINT(21))*VINT(1)
+ SPQ=PQ**2
+ SPH=PH**2
+
+C...Set up outgoing kinematics: 1=t, 2=tbar, 3=H.
+ DO 100 I=1,2
+ PT=SQRT(MAX(0D0,VINT(197+5*I)))
+ PP(I,1)=PT*COS(VINT(198+5*I))
+ PP(I,2)=PT*SIN(VINT(198+5*I))
+ 100 CONTINUE
+ PP(3,1)=-PP(1,1)-PP(2,1)
+ PP(3,2)=-PP(1,2)-PP(2,2)
+ PMS1=SPQ+PP(1,1)**2+PP(1,2)**2
+ PMS2=SPQ+PP(2,1)**2+PP(2,2)**2
+ PMS3=SPH+PP(3,1)**2+PP(3,2)**2
+ PMT3=SQRT(PMS3)
+ PP(3,3)=PMT3*SINH(VINT(211))
+ PP(3,4)=PMT3*COSH(VINT(211))
+ PMS12=(SHPR-PP(3,4))**2-PP(3,3)**2
+ PP(1,3)=(-PP(3,3)*(PMS12+PMS1-PMS2)+
+ &VINT(213)*(SHPR-PP(3,4))*VINT(220))/(2D0*PMS12)
+ PP(2,3)=-PP(1,3)-PP(3,3)
+ PP(1,4)=SQRT(PMS1+PP(1,3)**2)
+ PP(2,4)=SQRT(PMS2+PP(2,3)**2)
+
+C...Set up incoming kinematics and derived momentum combinations.
+ DO 110 I=4,5
+ PP(I,1)=0D0
+ PP(I,2)=0D0
+ PP(I,3)=-0.5D0*SHPR*(-1)**I
+ PP(I,4)=-0.5D0*SHPR
+ 110 CONTINUE
+ DO 120 J=1,4
+ PP(6,J)=PP(1,J)+PP(2,J)
+ PP(7,J)=PP(1,J)+PP(3,J)
+ PP(8,J)=PP(1,J)+PP(4,J)
+ PP(9,J)=PP(1,J)+PP(5,J)
+ PP(10,J)=-PP(2,J)-PP(3,J)
+ PP(11,J)=-PP(2,J)-PP(4,J)
+ PP(12,J)=-PP(2,J)-PP(5,J)
+ PP(13,J)=-PP(4,J)-PP(5,J)
+ 120 CONTINUE
+
+C...Derived kinematics invariants.
+ X1=DOT(1,2)
+ X2=DOT(1,3)
+ X3=DOT(1,4)
+ X4=DOT(1,5)
+ X5=DOT(2,3)
+ X6=DOT(2,4)
+ X7=DOT(2,5)
+ X8=DOT(3,4)
+ X9=DOT(3,5)
+ X10=DOT(4,5)
+
+C...Propagators.
+ SS1=DOT(7,7)-SPQ
+ SS2=DOT(8,8)-SPQ
+ SS3=DOT(9,9)-SPQ
+ SS4=DOT(10,10)-SPQ
+ SS5=DOT(11,11)-SPQ
+ SS6=DOT(12,12)-SPQ
+ SS7=DOT(13,13)
+ DX(1)=SS1*SS6
+ DX(2)=SS2*SS6
+ DX(3)=SS2*SS4
+ DX(4)=SS1*SS5
+ DX(5)=SS3*SS5
+ DX(6)=SS3*SS4
+ DX(7)=SS7*SS1
+ DX(8)=SS7*SS4
+
+C...Define colour coefficients for g + g -> Q + Qbar + H.
+ IF(ISUB.EQ.121.OR.ISUB.EQ.181.OR.ISUB.EQ.186) THEN
+ DO 140 I=1,3
+ DO 130 J=1,3
+ CLR(I,J)=16D0/3D0
+ CLR(I+3,J+3)=16D0/3D0
+ CLR(I,J+3)=-2D0/3D0
+ CLR(I+3,J)=-2D0/3D0
+ 130 CONTINUE
+ 140 CONTINUE
+ DO 160 L=1,2
+ DO 150 I=1,3
+ CLR(I,6+L)=-6D0
+ CLR(I+3,6+L)=6D0
+ CLR(6+L,I)=-6D0
+ CLR(6+L,I+3)=6D0
+ 150 CONTINUE
+ 160 CONTINUE
+ DO 180 K1=1,2
+ DO 170 K2=1,2
+ CLR(6+K1,6+K2)=12D0
+ 170 CONTINUE
+ 180 CONTINUE
+
+C...Evaluate matrix elements for g + g -> Q + Qbar + H.
+ FM(1,1)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+2*X2+X4+X9+2*
+ & X7+X5)+8*PQ**2*PH**2*(-X1-X4+2*X7)+16*PQ**2*(X2*X9+4*X2*
+ & X7+X2*X5-2*X4*X7-2*X9*X7)+8*PH**2*X4*X7-16*X2*X9*X7
+ FM(1,2)=16*PQ**6+8*PQ**4*(-2*X1+X2-2*X3-2*X4-4*X10+X9-X8+2
+ & *X7-4*X6+X5)+8*PQ**2*(-2*X1*X2-2*X2*X4-2*X2*X10+X2*X7-2*
+ & X2*X6-2*X3*X7+2*X4*X7+4*X10*X7-X9*X7-X8*X7)+16*X2*X7*(X4+
+ & X10)
+ FM(1,3)=16*PQ**6-4*PQ**4*PH**2+8*PQ**4*(-2*X1+2*X2-2*X3-4*
+ & X4-8*X10+X9+X8-2*X7-4*X6+2*X5)-(4*PQ**2*PH**2)*(X1+X4+X10
+ & +X6)+8*PQ**2*(-2*X1*X2-2*X1*X10+X1*X9+X1*X8-2*X1*X5+X2**2
+ & -4*X2*X4-5*X2*X10+X2*X8-X2*X7-3*X2*X6+X2*X5+X3*X9+2*X3*X7
+ & -X3*X5+X4*X8+2*X4*X6-3*X4*X5-5*X10*X5+X9*X8+X9*X6+X9*X5+
+ & X8*X7-4*X6*X5+X5**2)-(16*X2*X5)*(X1+X4+X10+X6)
+ FM(1,4)=16*PQ**6+4*PQ**4*PH**2+16*PQ**4*(-X1+X2-X3-X4+X10-
+ & X9-X8+2*X7+2*X6-X5)+4*PQ**2*PH**2*(X1+X3+X4+X10+2*X7+2*X6
+ & )+8*PQ**2*(4*X1*X10+4*X1*X7+4*X1*X6+2*X2*X10-X2*X9-X2*X8+
+ & 4*X2*X7+4*X2*X6-X2*X5+4*X10*X5+4*X7*X5+4*X6*X5)-(8*PH**2*
+ & X1)*(X10+X7+X6)+16*X2*X5*(X10+X7+X6)
+ FM(1,5)=8*PQ**4*(-2*X1-2*X4+X10-X9)+4*PQ**2*(4*X1**2-2*X1*
+ & X2+8*X1*X3+6*X1*X10-2*X1*X9+4*X1*X8+4*X1*X7+4*X1*X6+2*X1*
+ & X5+X2*X10+4*X3*X4-X3*X9+2*X3*X7+3*X4*X8-2*X4*X6+2*X4*X5-4
+ & *X10*X7+3*X10*X5-3*X9*X6+3*X8*X7-4*X7**2+4*X7*X5)+8*(X1**
+ & 2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9+X1*X3*X5-X1*X4*
+ & X8-X1*X4*X5+X1*X10*X9+X1*X9*X7+X1*X9*X6-X1*X8*X7-X2*X3*X7
+ & +X2*X4*X6-X2*X10*X7-X2*X7**2+X3*X7*X5-X4*X10*X5-X4*X7*X5-
+ & X4*X6*X5)
+ FM(1,6)=16*PQ**4*(-4*X1-X4+X9-X7)+4*PQ**2*PH**2*(-2*X1-X4-
+ & X7)+16*PQ**2*(-2*X1**2-3*X1*X2-2*X1*X4-3*X1*X9-2*X1*X7-3*
+ & X1*X5-2*X2*X4-2*X7*X5)-8*PH**2*X4*X7+8*(-X1*X2*X9-2*X1*X2
+ & *X5-X1*X9**2-X1*X9*X5+X2**2*X7-X2*X4*X5+X2*X9*X7-X2*X7*X5
+ & +X4*X9*X5+X4*X5**2)
+ FM(1,7)=8*PQ**4*(2*X3+X4+3*X10+X9+2*X8+3*X7+6*X6)+2*PQ**2*
+ & PH**2*(-2*X3-X4+3*X10+3*X7+6*X6)+4*PQ**2*(4*X1*X10+4*X1*
+ & X7+8*X1*X6+6*X2*X10+X2*X9+2*X2*X8+6*X2*X7+12*X2*X6-8*X3*
+ & X7+4*X4*X7+4*X4*X6+4*X10*X5+4*X9*X7+4*X9*X6-8*X8*X7+4*X7*
+ & X5+8*X6*X5)+4*PH**2*(-X1*X10-X1*X7-2*X1*X6+2*X3*X7-X4*X7-
+ & X4*X6)+8*X2*(X10*X5+X9*X7+X9*X6-2*X8*X7+X7*X5+2*X6*X5)
+ FM(1,8)=8*PQ**4*(2*X3+X4+3*X10+2*X9+X8+3*X7+6*X6)+2*PQ**2*
+ & PH**2*(-2*X3-X4+2*X10+X7+2*X6)+4*PQ**2*(4*X1*X10-2*X1*X9+
+ & 2*X1*X8+4*X1*X7+8*X1*X6+5*X2*X10+2*X2*X9+X2*X8+4*X2*X7+8*
+ & X2*X6-X3*X9-8*X3*X7+2*X3*X5+2*X4*X9-X4*X8+4*X4*X7+4*X4*X6
+ & +4*X4*X5+5*X10*X5+X9**2-X9*X8+2*X9*X7+5*X9*X6+X9*X5-7*X8*
+ & X7+2*X8*X5+2*X7*X5+10*X6*X5)+2*PH**2*(-X1*X10+X3*X7-2*X4*
+ & X7+X4*X6)+4*(-X1*X9**2+X1*X9*X8-2*X1*X9*X5-X1*X8*X5+2*X2*
+ & X10*X5+X2*X9*X7+X2*X9*X6-2*X2*X8*X7+3*X2*X6*X5+X3*X9*X5+
+ & X3*X5**2+X4*X9*X5-2*X4*X8*X5+2*X4*X5**2)
+ FM(2,2)=16*PQ**6+16*PQ**4*(-X1+X3-X4-X10+X7-X6)+16*PQ**2*(
+ & X3*X10+X3*X7+X3*X6+X4*X7+X10*X7)-16*X3*X10*X7
+ FM(2,3)=16*PQ**6+8*PQ**4*(-2*X1+X2+2*X3-4*X4-4*X10-X9+X8-2
+ & *X7-2*X6+X5)+8*PQ**2*(-2*X1*X5+4*X3*X10-X3*X9-X3*X8-2*X3*
+ & X7+2*X3*X6+X3*X5-2*X4*X5-2*X10*X5-2*X6*X5)+16*X3*X5*(X10+
+ & X6)
+ FM(2,4)=8*PQ**4*(-2*X1-2*X3+X10-X8)+4*PQ**2*(4*X1**2-2*X1*
+ & X2+8*X1*X4+6*X1*X10+4*X1*X9-2*X1*X8+4*X1*X7+4*X1*X6+2*X1*
+ & X5+X2*X10+4*X3*X4+3*X3*X9-2*X3*X7+2*X3*X5-X4*X8+2*X4*X6-4
+ & *X10*X6+3*X10*X5+3*X9*X6-3*X8*X7-4*X6**2+4*X6*X5)+8*(-X1
+ & **2*X9+X1**2*X8+X1*X2*X7-X1*X2*X6-X1*X3*X9-X1*X3*X5+X1*X4
+ & *X8+X1*X4*X5+X1*X10*X8-X1*X9*X6+X1*X8*X7+X1*X8*X6+X2*X3*
+ & X7-X2*X4*X6-X2*X10*X6-X2*X6**2-X3*X10*X5-X3*X7*X5-X3*X6*
+ & X5+X4*X6*X5)
+ FM(2,5)=16*PQ**4*X10+8*PQ**2*(2*X1**2+2*X1*X3+2*X1*X4+2*X1
+ & *X10+2*X1*X7+2*X1*X6+X3*X7+X4*X6)+8*(-2*X1**3-2*X1**2*X3-
+ & 2*X1**2*X4-2*X1**2*X10-2*X1**2*X7-2*X1**2*X6-2*X1*X3*X4-
+ & X1*X3*X10-2*X1*X3*X6-X1*X4*X10-2*X1*X4*X7-X1*X10**2-X1*
+ & X10*X7-X1*X10*X6-2*X1*X7*X6+X3**2*X7-X3*X4*X7-X3*X4*X6+X3
+ & *X10*X7+X3*X7**2-X3*X7*X6+X4**2*X6+X4*X10*X6-X4*X7*X6+X4*
+ & X6**2)
+ FM(2,6)=8*PQ**4*(-2*X1+X10-X9-2*X7)+4*PQ**2*(4*X1**2+2*X1*
+ & X2+4*X1*X3+4*X1*X4+6*X1*X10-2*X1*X9+4*X1*X8+8*X1*X6-2*X1*
+ & X5+4*X2*X4+3*X2*X10+2*X2*X7-3*X3*X9-2*X3*X7-4*X4**2-4*X4*
+ & X10+3*X4*X8+2*X4*X6+X10*X5-X9*X6+3*X8*X7+4*X7*X6)+8*(X1**
+ & 2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9+X1*X3*X5+X1*X4*
+ & X9-X1*X4*X8-X1*X4*X5+X1*X10*X9+X1*X9*X6-X1*X8*X7-X2*X3*X7
+ & -X2*X4*X7+X2*X4*X6-X2*X10*X7+X3*X7*X5-X4**2*X5-X4*X10*X5-
+ & X4*X6*X5)
+ FM(2,7)=8*PQ**4*(X3+2*X4+3*X10+X7+2*X6)+4*PQ**2*(-4*X1*X3-
+ & 2*X1*X4-2*X1*X10+X1*X9-X1*X8-4*X1*X7-2*X1*X6+X2*X3+2*X2*
+ & X4+3*X2*X10+X2*X7+2*X2*X6-6*X3*X4-6*X3*X10-2*X3*X9-2*X3*
+ & X7-4*X3*X6-X3*X5-6*X4**2-6*X4*X10-3*X4*X9-X4*X8-4*X4*X7-2
+ & *X4*X6-2*X4*X5-3*X10*X9-3*X10*X8-6*X10*X7-6*X10*X6+X10*X5
+ & +X9*X7-2*X8*X7-2*X8*X6-6*X7*X6+X7*X5-6*X6**2+2*X6*X5)+4*(
+ & -X1**2*X9+X1**2*X8-2*X1*X2*X10-3*X1*X2*X7-3*X1*X2*X6+X1*
+ & X3*X9-X1*X3*X5+X1*X4*X9+X1*X4*X8+X1*X4*X5+X1*X10*X9+X1*
+ & X10*X8-X1*X9*X6+X1*X8*X6+X2*X3*X7-3*X2*X4*X7-X2*X4*X6-3*
+ & X2*X10*X7-3*X2*X10*X6-3*X2*X7*X6-3*X2*X6**2-2*X3*X4*X5-X3
+ & *X10*X5-X3*X6*X5-X4**2*X5-X4*X10*X5+X4*X6*X5)
+ FM(2,8)=8*PQ**4*(X3+2*X4+3*X10+X7+2*X6)+4*PQ**2*(-4*X1*X3-
+ & 2*X1*X4-2*X1*X10-X1*X9+X1*X8-4*X1*X7-2*X1*X6+X2*X3+2*X2*
+ & X4+X2*X10-X2*X7-2*X2*X6-6*X3*X4-6*X3*X10-2*X3*X9+X3*X8-2*
+ & X3*X7-4*X3*X6+X3*X5-6*X4**2-6*X4*X10-2*X4*X9-4*X4*X7-2*X4
+ & *X6+2*X4*X5-3*X10*X9-3*X10*X8-6*X10*X7-6*X10*X6+3*X10*X5-
+ & X9*X6-2*X8*X7-3*X8*X6-6*X7*X6+X7*X5-6*X6**2+2*X6*X5)+4*(
+ & X1**2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6-3*X1*X3*X5+X1*X4*X9-
+ & X1*X4*X8-3*X1*X4*X5+X1*X10*X9+X1*X10*X8-2*X1*X10*X5+X1*X9
+ & *X6+X1*X8*X7+X1*X8*X6-X2*X4*X7+X2*X4*X6-X2*X10*X7-X2*X10*
+ & X6-2*X2*X7*X6-X2*X6**2-3*X3*X4*X5-3*X3*X10*X5+X3*X7*X5-3*
+ & X3*X6*X5-3*X4**2*X5-3*X4*X10*X5-X4*X6*X5)
+ FM(3,3)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+X2+2*X3+X8+X6
+ & +2*X5)+8*PQ**2*PH**2*(-X1+2*X3-X6)+16*PQ**2*(X2*X5-2*X3*
+ & X8-2*X3*X6+4*X3*X5+X8*X5)+8*PH**2*X3*X6-16*X3*X8*X5
+ FM(3,4)=16*PQ**4*(-4*X1-X3+X8-X6)+4*PQ**2*PH**2*(-2*X1-X3-
+ & X6)+16*PQ**2*(-2*X1**2-3*X1*X2-2*X1*X3-3*X1*X8-2*X1*X6-3*
+ & X1*X5-2*X2*X3-2*X6*X5)-8*PH**2*X3*X6+8*(-X1*X2*X8-2*X1*X2
+ & *X5-X1*X8**2-X1*X8*X5+X2**2*X6-X2*X3*X5+X2*X8*X6-X2*X6*X5
+ & +X3*X8*X5+X3*X5**2)
+ FM(3,5)=8*PQ**4*(-2*X1+X10-X8-2*X6)+4*PQ**2*(4*X1**2+2*X1*
+ & X2+4*X1*X3+4*X1*X4+6*X1*X10+4*X1*X9-2*X1*X8+8*X1*X7-2*X1*
+ & X5+4*X2*X3+3*X2*X10+2*X2*X6-4*X3**2-4*X3*X10+3*X3*X9+2*X3
+ & *X7-3*X4*X8-2*X4*X6+X10*X5+3*X9*X6-X8*X7+4*X7*X6)+8*(-X1
+ & **2*X9+X1**2*X8+X1*X2*X7-X1*X2*X6-X1*X3*X9+X1*X3*X8-X1*X3
+ & *X5+X1*X4*X8+X1*X4*X5+X1*X10*X8-X1*X9*X6+X1*X8*X7+X2*X3*
+ & X7-X2*X3*X6-X2*X4*X6-X2*X10*X6-X3**2*X5-X3*X10*X5-X3*X7*
+ & X5+X4*X6*X5)
+ FM(3,6)=16*PQ**6+4*PQ**4*PH**2+16*PQ**4*(-X1-X2+2*X3+2*X4+
+ & X10-X9-X8-X7-X6+X5)+4*PQ**2*PH**2*(X1+2*X3+2*X4+X10+X7+X6
+ & )+8*PQ**2*(4*X1*X3+4*X1*X4+4*X1*X10+4*X2*X3+4*X2*X4+4*X2*
+ & X10-X2*X5+4*X3*X5+4*X4*X5+2*X10*X5-X9*X5-X8*X5)-(8*PH**2*
+ & X1)*(X3+X4+X10)+16*X2*X5*(X3+X4+X10)
+ FM(3,7)=8*PQ**4*(3*X3+6*X4+3*X10+X9+2*X8+2*X7+X6)+2*PQ**2*
+ & PH**2*(X3+2*X4+2*X10-2*X7-X6)+4*PQ**2*(4*X1*X3+8*X1*X4+4*
+ & X1*X10+2*X1*X9-2*X1*X8+2*X2*X3+10*X2*X4+5*X2*X10+2*X2*X9+
+ & X2*X8+2*X2*X7+4*X2*X6-7*X3*X9+2*X3*X8-8*X3*X7+4*X3*X6+4*
+ & X3*X5+5*X4*X8+4*X4*X6+8*X4*X5+5*X10*X5-X9*X8-X9*X6+X9*X5+
+ & X8**2-X8*X7+2*X8*X6+2*X8*X5)+2*PH**2*(-X1*X10+X3*X7-2*X3*
+ & X6+X4*X6)+4*(-X1*X2*X9-2*X1*X2*X8+X1*X9*X8-X1*X8**2+X2**2
+ & *X7+2*X2**2*X6+3*X2*X4*X5+2*X2*X10*X5-2*X2*X9*X6+X2*X8*X7
+ & +X2*X8*X6-2*X3*X9*X5+X3*X8*X5+X4*X8*X5)
+ FM(3,8)=8*PQ**4*(3*X3+6*X4+3*X10+2*X9+X8+2*X7+X6)+2*PQ**2*
+ & PH**2*(3*X3+6*X4+3*X10-2*X7-X6)+4*PQ**2*(4*X1*X3+8*X1*X4+
+ & 4*X1*X10+4*X2*X3+8*X2*X4+4*X2*X10-8*X3*X9+4*X3*X8-8*X3*X7
+ & +4*X3*X6+6*X3*X5+4*X4*X8+4*X4*X6+12*X4*X5+6*X10*X5+2*X9*
+ & X5+X8*X5)+4*PH**2*(-X1*X3-2*X1*X4-X1*X10+2*X3*X7-X3*X6-X4
+ & *X6)+8*X5*(X2*X3+2*X2*X4+X2*X10-2*X3*X9+X3*X8+X4*X8)
+ FM(4,4)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+2*X2+X3+X8+2*
+ & X6+X5)+8*PQ**2*PH**2*(-X1-X3+2*X6)+16*PQ**2*(X2*X8+4*X2*
+ & X6+X2*X5-2*X3*X6-2*X8*X6)+8*PH**2*X3*X6-16*X2*X8*X6
+ FM(4,5)=16*PQ**6+8*PQ**4*(-2*X1+X2-2*X3-2*X4-4*X10-X9+X8-4
+ & *X7+2*X6+X5)+8*PQ**2*(-2*X1*X2-2*X2*X3-2*X2*X10-2*X2*X7+
+ & X2*X6+2*X3*X6-2*X4*X6+4*X10*X6-X9*X6-X8*X6)+16*X2*X6*(X3+
+ & X10)
+ FM(4,6)=16*PQ**6-4*PQ**4*PH**2+8*PQ**4*(-2*X1+2*X2-4*X3-2*
+ & X4-8*X10+X9+X8-4*X7-2*X6+2*X5)-(4*PQ**2*PH**2)*(X1+X3+X10
+ & +X7)+8*PQ**2*(-2*X1*X2-2*X1*X10+X1*X9+X1*X8-2*X1*X5+X2**2
+ & -4*X2*X3-5*X2*X10+X2*X9-3*X2*X7-X2*X6+X2*X5+X3*X9+2*X3*X7
+ & -3*X3*X5+X4*X8+2*X4*X6-X4*X5-5*X10*X5+X9*X8+X9*X6+X8*X7+
+ & X8*X5-4*X7*X5+X5**2)-(16*X2*X5)*(X1+X3+X10+X7)
+ FM(4,7)=8*PQ**4*(-X3-2*X4-3*X10-2*X9-X8-6*X7-3*X6)+2*PQ**2
+ & *PH**2*(X3+2*X4-3*X10-6*X7-3*X6)+4*PQ**2*(-4*X1*X10-8*X1*
+ & X7-4*X1*X6-6*X2*X10-2*X2*X9-X2*X8-12*X2*X7-6*X2*X6-4*X3*
+ & X7-4*X3*X6+8*X4*X6-4*X10*X5+8*X9*X6-4*X8*X7-4*X8*X6-8*X7*
+ & X5-4*X6*X5)+4*PH**2*(X1*X10+2*X1*X7+X1*X6+X3*X7+X3*X6-2*
+ & X4*X6)+8*X2*(-X10*X5+2*X9*X6-X8*X7-X8*X6-2*X7*X5-X6*X5)
+ FM(4,8)=8*PQ**4*(-X3-2*X4-3*X10-X9-2*X8-6*X7-3*X6)+2*PQ**2
+ & *PH**2*(X3+2*X4-2*X10-2*X7-X6)+4*PQ**2*(-4*X1*X10-2*X1*X9
+ & +2*X1*X8-8*X1*X7-4*X1*X6-5*X2*X10-X2*X9-2*X2*X8-8*X2*X7-4
+ & *X2*X6+X3*X9-2*X3*X8-4*X3*X7-4*X3*X6-4*X3*X5+X4*X8+8*X4*
+ & X6-2*X4*X5-5*X10*X5+X9*X8+7*X9*X6-2*X9*X5-X8**2-5*X8*X7-2
+ & *X8*X6-X8*X5-10*X7*X5-2*X6*X5)+2*PH**2*(X1*X10-X3*X7+2*X3
+ & *X6-X4*X6)+4*(-X1*X9*X8+X1*X9*X5+X1*X8**2+2*X1*X8*X5-2*X2
+ & *X10*X5+2*X2*X9*X6-X2*X8*X7-X2*X8*X6-3*X2*X7*X5+2*X3*X9*
+ & X5-X3*X8*X5-2*X3*X5**2-X4*X8*X5-X4*X5**2)
+ FM(5,5)=16*PQ**6+16*PQ**4*(-X1-X3+X4-X10-X7+X6)+16*PQ**2*(
+ & X3*X6+X4*X10+X4*X7+X4*X6+X10*X6)-16*X4*X10*X6
+ FM(5,6)=16*PQ**6+8*PQ**4*(-2*X1+X2-4*X3+2*X4-4*X10+X9-X8-2
+ & *X7-2*X6+X5)+8*PQ**2*(-2*X1*X5-2*X3*X5+4*X4*X10-X4*X9-X4*
+ & X8+2*X4*X7-2*X4*X6+X4*X5-2*X10*X5-2*X7*X5)+16*X4*X5*(X10+
+ & X7)
+ FM(5,7)=8*PQ**4*(-2*X3-X4-3*X10-2*X7-X6)+4*PQ**2*(2*X1*X3+
+ & 4*X1*X4+2*X1*X10+X1*X9-X1*X8+2*X1*X7+4*X1*X6-2*X2*X3-X2*
+ & X4-3*X2*X10-2*X2*X7-X2*X6+6*X3**2+6*X3*X4+6*X3*X10+X3*X9+
+ & 3*X3*X8+2*X3*X7+4*X3*X6+2*X3*X5+6*X4*X10+2*X4*X8+4*X4*X7+
+ & 2*X4*X6+X4*X5+3*X10*X9+3*X10*X8+6*X10*X7+6*X10*X6-X10*X5+
+ & 2*X9*X7+2*X9*X6-X8*X6+6*X7**2+6*X7*X6-2*X7*X5-X6*X5)+4*(-
+ & X1**2*X9+X1**2*X8+2*X1*X2*X10+3*X1*X2*X7+3*X1*X2*X6-X1*X3
+ & *X9-X1*X3*X8-X1*X3*X5-X1*X4*X8+X1*X4*X5-X1*X10*X9-X1*X10*
+ & X8-X1*X9*X7+X1*X8*X7+X2*X3*X7+3*X2*X3*X6-X2*X4*X6+3*X2*
+ & X10*X7+3*X2*X10*X6+3*X2*X7**2+3*X2*X7*X6+X3**2*X5+2*X3*X4
+ & *X5+X3*X10*X5-X3*X7*X5+X4*X10*X5+X4*X7*X5)
+ FM(5,8)=8*PQ**4*(-2*X3-X4-3*X10-2*X7-X6)+4*PQ**2*(2*X1*X3+
+ & 4*X1*X4+2*X1*X10-X1*X9+X1*X8+2*X1*X7+4*X1*X6-2*X2*X3-X2*
+ & X4-X2*X10+2*X2*X7+X2*X6+6*X3**2+6*X3*X4+6*X3*X10+2*X3*X8+
+ & 2*X3*X7+4*X3*X6-2*X3*X5+6*X4*X10-X4*X9+2*X4*X8+4*X4*X7+2*
+ & X4*X6-X4*X5+3*X10*X9+3*X10*X8+6*X10*X7+6*X10*X6-3*X10*X5+
+ & 3*X9*X7+2*X9*X6+X8*X7+6*X7**2+6*X7*X6-2*X7*X5-X6*X5)+4*(
+ & X1**2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9-X1*X3*X8+3*
+ & X1*X3*X5+3*X1*X4*X5-X1*X10*X9-X1*X10*X8+2*X1*X10*X5-X1*X9
+ & *X7-X1*X9*X6-X1*X8*X7-X2*X3*X7+X2*X3*X6+X2*X10*X7+X2*X10*
+ & X6+X2*X7**2+2*X2*X7*X6+3*X3**2*X5+3*X3*X4*X5+3*X3*X10*X5+
+ & X3*X7*X5+3*X4*X10*X5+3*X4*X7*X5-X4*X6*X5)
+ FM(6,6)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+X2+2*X4+X9+X7
+ & +2*X5)+8*PQ**2*PH**2*(-X1+2*X4-X7)+16*PQ**2*(X2*X5-2*X4*
+ & X9-2*X4*X7+4*X4*X5+X9*X5)+8*PH**2*X4*X7-16*X4*X9*X5
+ FM(6,7)=8*PQ**4*(-6*X3-3*X4-3*X10-2*X9-X8-X7-2*X6)+2*PQ**2
+ & *PH**2*(-2*X3-X4-2*X10+X7+2*X6)+4*PQ**2*(-8*X1*X3-4*X1*X4
+ & -4*X1*X10+2*X1*X9-2*X1*X8-10*X2*X3-2*X2*X4-5*X2*X10-X2*X9
+ & -2*X2*X8-4*X2*X7-2*X2*X6-5*X3*X9-4*X3*X7-8*X3*X5-2*X4*X9+
+ & 7*X4*X8-4*X4*X7+8*X4*X6-4*X4*X5-5*X10*X5-X9**2+X9*X8-2*X9
+ & *X7+X9*X6-2*X9*X5+X8*X7-X8*X5)+2*PH**2*(X1*X10-X3*X7+2*X4
+ & *X7-X4*X6)+4*(2*X1*X2*X9+X1*X2*X8+X1*X9**2-X1*X9*X8-2*X2
+ & **2*X7-X2**2*X6-3*X2*X3*X5-2*X2*X10*X5-X2*X9*X7-X2*X9*X6+
+ & 2*X2*X8*X7-X3*X9*X5-X4*X9*X5+2*X4*X8*X5)
+ FM(6,8)=8*PQ**4*(-6*X3-3*X4-3*X10-X9-2*X8-X7-2*X6)+2*PQ**2
+ & *PH**2*(-6*X3-3*X4-3*X10+X7+2*X6)+4*PQ**2*(-8*X1*X3-4*X1*
+ & X4-4*X1*X10-8*X2*X3-4*X2*X4-4*X2*X10-4*X3*X9-4*X3*X7-12*
+ & X3*X5-4*X4*X9+8*X4*X8-4*X4*X7+8*X4*X6-6*X4*X5-6*X10*X5-X9
+ & *X5-2*X8*X5)+4*PH**2*(2*X1*X3+X1*X4+X1*X10+X3*X7+X4*X7-2*
+ & X4*X6)+8*X5*(-2*X2*X3-X2*X4-X2*X10-X3*X9-X4*X9+2*X4*X8)
+ FM(7,7)=72*PQ**4*X10+18*PQ**2*PH**2*X10+8*PQ**2*(X1*X10+9*
+ & X2*X10+7*X3*X7+2*X3*X6+2*X4*X7+7*X4*X6+X10*X5+2*X9*X7+7*
+ & X9*X6+7*X8*X7+2*X8*X6)+2*PH**2*(-X1*X10-7*X3*X7-2*X3*X6-2
+ & *X4*X7-7*X4*X6)+4*X2*(X10*X5+2*X9*X7+7*X9*X6+7*X8*X7+2*X8
+ & *X6)
+ FM(7,8)=72*PQ**4*X10+2*PQ**2*PH**2*X10+4*PQ**2*(2*X1*X10+
+ & 10*X2*X10+7*X3*X9+2*X3*X8+14*X3*X7+4*X3*X6+2*X4*X9+7*X4*
+ & X8+4*X4*X7+14*X4*X6+10*X10*X5+X9**2+7*X9*X8+2*X9*X7+7*X9*
+ & X6+X8**2+7*X8*X7+2*X8*X6)+2*PH**2*(7*X1*X10-7*X3*X7-2*X3*
+ & X6-2*X4*X7-7*X4*X6)+2*(-2*X1*X9**2-14*X1*X9*X8-2*X1*X8**2
+ & +2*X2*X10*X5+2*X2*X9*X7+7*X2*X9*X6+7*X2*X8*X7+2*X2*X8*X6+
+ & 7*X3*X9*X5+2*X3*X8*X5+2*X4*X9*X5+7*X4*X8*X5)
+ FM(8,8)=72*PQ**4*X10+18*PQ**2*PH**2*X10+8*PQ**2*(X1*X10+X2
+ & *X10+7*X3*X9+2*X3*X8+7*X3*X7+2*X3*X6+2*X4*X9+7*X4*X8+2*X4
+ & *X7+7*X4*X6+9*X10*X5)+2*PH**2*(-X1*X10-7*X3*X7-2*X3*X6-2*
+ & X4*X7-7*X4*X6)+4*X5*(X2*X10+7*X3*X9+2*X3*X8+2*X4*X9+7*X4*
+ & X8)
+ FM(9,9)=-4*PQ**4*X10-PQ**2*PH**2*X10+4*PQ**2*(-X1*X10-X2*X10+
+ & X3*X7+X4*X6-X10*X5+X9*X6+X8*X7)+PH**2*(X1*X10-X3*X7-X4*X6
+ & )+2*X2*(-X10*X5+X9*X6+X8*X7)
+ FM(9,10)=-4*PQ**4*X10-PQ**2*PH**2*X10+2*PQ**2*(-2*X1*X10-2*X2*
+ & X10+2*X3*X9+2*X3*X7+2*X4*X6-2*X10*X5+X9*X8+2*X8*X7)+PH**2
+ & *(X1*X10-X3*X7-X4*X6)+2*(-X1*X9*X8-X2*X10*X5+X2*X8*X7+X3*
+ & X9*X5)
+ FMXX=-4*PQ**4*X10-PQ**2*PH**2*X10+2*PQ**2*(-2*X1*X10-2*X2*
+ & X10+2*X4*X8+2*X4*X6+2*X3*X7-2*X10*X5+X9*X8+2*X9*X6)+PH**2
+ & *(X1*X10-X3*X7-X4*X6)+2*(-X1*X9*X8-X2*X10*X5+X2*X9*X6+X4*
+ & X8*X5)
+ FM(9,10)=0.5D0*(FMXX+FM(9,10))
+ FM(10,10)=-4*PQ**4*X10-PQ**2*PH**2*X10+4*PQ**2*(-X1*X10-X2*X10+
+ & X3*X7+X4*X6-X10*X5+X9*X3+X8*X4)+PH**2*(X1*X10-X3*X7-X4*X6
+ & )+2*X5*(-X10*X2+X9*X3+X8*X4)
+
+C...Repackage matrix elements.
+ DO 200 I=1,8
+ DO 190 J=1,8
+ RM(I,J)=FM(I,J)
+ 190 CONTINUE
+ 200 CONTINUE
+ RM(7,7)=FM(7,7)-2D0*FM(9,9)
+ RM(7,8)=FM(7,8)-2D0*FM(9,10)
+ RM(8,8)=FM(8,8)-2D0*FM(10,10)
+
+C...Produce final result: matrix elements * colours * propagators.
+ DO 220 I=1,8
+ DO 210 J=I,8
+ FAC=8D0
+ IF(I.EQ.J)FAC=4D0
+ WTQQBH=WTQQBH+RM(I,J)*FAC*CLR(I,J)/(DX(I)*DX(J))
+ 210 CONTINUE
+ 220 CONTINUE
+ WTQQBH=-WTQQBH/256D0
+
+ ELSE
+C...Evaluate matrix elements for q + qbar -> Q + Qbar + H.
+ A11=-8D0*PQ**4*X10-2D0*PQ**2*PH**2*X10-(8D0*PQ**2)*(X2*X10+X3
+ & *X7+X4*X6+X9*X6+X8*X7)+2D0*PH**2*(X3*X7+X4*X6)-(4D0*X2)*(X9
+ & *X6+X8*X7)
+ A12=-8D0*PQ**4*X10+4D0*PQ**2*(-X2*X10-X3*X9-2D0*X3*X7-X4*X8-
+ & 2D0*X4*X6-X10*X5-X9*X8-X9*X6-X8*X7)+2D0*PH**2*(-X1*X10+X3*X7
+ & +X4*X6)+2D0*(2D0*X1*X9*X8-X2*X9*X6-X2*X8*X7-X3*X9*X5-X4*X8*
+ & X5)
+ A22=-8D0*PQ**4*X10-2D0*PQ**2*PH**2*X10-(8D0*PQ**2)*(X3*X9+X3*
+ & X7+X4*X8+X4*X6+X10*X5)+2D0*PH**2*(X3*X7+X4*X6)-(4D0*X5)*(X3
+ & *X9+X4*X8)
+
+C...Produce final result: matrix elements * propagators.
+ A11=A11/DX(7)**2
+ A12=A12/(DX(7)*DX(8))
+ A22=A22/DX(8)**2
+ WTQQBH=-(A11+A22+2D0*A12)/8D0
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYMSIN
+C...Initializes supersymmetry: finds sparticle masses and
+C...branching ratios and stores this information.
+C...AUTHOR: STEPHEN MRENNA
+
+ SUBROUTINE PYMSIN
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYPARS/,/PYINT4/,/PYMSSM/,
+ &/PYSSMT/
+
+C...Local variables.
+ INTEGER NSTR
+ DOUBLE PRECISION ALFA,BETA
+ DOUBLE PRECISION TANB,AL,BE,COSA,COSB,SINA,SINB,XW,AEM,FACT
+ DOUBLE PRECISION PYALEM
+ INTEGER I,J,J1,J2,I1,I2,I3,IKNT,K1
+ INTEGER KC,LKNT,IDLAM(200,3),IDLAM0(100,3),LKNT0
+ DOUBLE PRECISION XLAM(0:200),XLAM0(0:200),XALL
+ DOUBLE PRECISION WDTP(0:200),WDTE(0:200,0:5)
+ DOUBLE PRECISION ATERM,TAN2T,THETA,DENOM
+ DOUBLE PRECISION XARG,COS2B,XMW2,XMZ2
+ DOUBLE PRECISION COSW,SINW,WDMIN,WDMAX
+ DOUBLE PRECISION DELM,XMDIF,BRLIM
+ DOUBLE PRECISION DX,DY,DS,DMU2,DMA2,DQ2,DU2,DD2,DL2,DE2,DHU2,DHD2
+ DOUBLE PRECISION ARG,SGNMU,R,GAM
+ INTEGER IS1,IS2,IS3,IS4,JS1,JS2,JS3,JS4,KS1,KS2,KS3,KS4
+ INTEGER IMSSM,KFHIGG
+ INTEGER IRPRTY
+ INTEGER KFSUSY(36)
+ DATA KFSUSY/
+ &1000001,2000001,1000002,2000002,1000003,2000003,
+ &1000004,2000004,1000005,2000005,1000006,2000006,
+ &1000011,2000011,1000012,2000012,1000013,2000013,
+ &1000014,2000014,1000015,2000015,1000016,2000016,
+ &1000021,1000022,1000023,1000025,1000035,1000024,
+ &1000037,1000039, 25, 35, 36, 37/
+
+C...Do nothing if SUSY not requested.
+ IMSSM=IMSS(1)
+ IF(IMSSM.EQ.0) RETURN
+
+C...First part of routine: set masses and couplings.
+
+C...Reset mixing values in sfermion sector to pure left/right.
+ DO 100 I=1,16
+ SFMIX(I,1)=1D0
+ SFMIX(I,4)=1D0
+ SFMIX(I,2)=0D0
+ SFMIX(I,3)=0D0
+ 100 CONTINUE
+
+C...Common couplings.
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ COSB=COS(BETA)
+ SINB=TANB*COSB
+ COS2B=COS(2D0*BETA)
+ ALFA=RMSS(18)
+ XMW2=PMAS(24,1)**2
+ XMZ2=PMAS(23,1)**2
+ XW=PARU(102)
+
+C...Define sparticle masses for a general MSSM simulation.
+ IF(IMSSM.EQ.1) THEN
+ IF(IMSS(9).EQ.0) RMSS(22)=RMSS(9)
+ DO 110 I=1,5,2
+ KC=PYCOMP(KSUSY1+I)
+ PMAS(KC,1)=SQRT(RMSS(8)**2-(2D0*XMW2+XMZ2)*COS2B/6D0)
+ KC=PYCOMP(KSUSY2+I)
+ PMAS(KC,1)=SQRT(RMSS(9)**2+(XMW2-XMZ2)*COS2B/3D0)
+ KC=PYCOMP(KSUSY1+I+1)
+ PMAS(KC,1)=SQRT(RMSS(8)**2+(4D0*XMW2-XMZ2)*COS2B/6D0)
+ KC=PYCOMP(KSUSY2+I+1)
+ PMAS(KC,1)=SQRT(RMSS(22)**2-(XMW2-XMZ2)*COS2B*2D0/3D0)
+ 110 CONTINUE
+ XARG=RMSS(6)**2-PMAS(24,1)**2*ABS(COS(2D0*BETA))
+ IF(XARG.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' SNEUTRINO MASS IS NEGATIVE'//
+ & ' FROM THE SUM RULE. '
+ WRITE(MSTU(11),*) ' TRY A SMALLER VALUE OF TAN(BETA). '
+ RETURN
+ ELSE
+ XARG=SQRT(XARG)
+ ENDIF
+ DO 120 I=11,15,2
+ PMAS(PYCOMP(KSUSY1+I),1)=RMSS(6)
+ PMAS(PYCOMP(KSUSY2+I),1)=RMSS(7)
+ PMAS(PYCOMP(KSUSY1+I+1),1)=XARG
+ PMAS(PYCOMP(KSUSY2+I+1),1)=9999D0
+ 120 CONTINUE
+ IF(IMSS(8).EQ.1) THEN
+ RMSS(13)=RMSS(6)
+ RMSS(14)=RMSS(7)
+ ENDIF
+
+C...Alternatively derive masses from SUGRA relations.
+ ELSEIF(IMSSM.EQ.2) THEN
+ CALL PYAPPS
+ ENDIF
+
+C...Add in extra D-term contributions.
+ IF(IMSS(7).EQ.1) THEN
+ R=0.43D0
+ DX=RMSS(23)
+ DY=RMSS(24)
+ DS=RMSS(25)
+ WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
+ WRITE(MSTU(11),*) 'C NEW DTERMS ADDED TO SCALAR MASSES '
+ WRITE(MSTU(11),*) 'C IN A U(B-L) THEORY '
+ WRITE(MSTU(11),*) 'C DX = ',DX
+ WRITE(MSTU(11),*) 'C DY = ',DY
+ WRITE(MSTU(11),*) 'C DS = ',DS
+ WRITE(MSTU(11),*) 'C '
+ DY=R*DY-4D0/33D0*(1D0-R)*DX+(1D0-R)/33D0*DS
+ WRITE(MSTU(11),*) 'C DY AT THE WEAK SCALE = ',DY
+ WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
+ DQ2=DY/6D0-DX/3D0-DS/3D0
+ DU2=-2D0*DY/3D0-DX/3D0-DS/3D0
+ DD2=DY/3D0+DX-2D0*DS/3D0
+ DL2=-DY/2D0+DX-2D0*DS/3D0
+ DE2=DY-DX/3D0-DS/3D0
+ DHU2=DY/2D0+2D0*DX/3D0+2D0*DS/3D0
+ DHD2=-DY/2D0-2D0*DX/3D0+DS
+ DMU2=(-DY/2D0-2D0/3D0*DX+(COSB**2-2D0*SINB**2/3D0)*DS)
+ & /ABS(COS2B)
+ DMA2 = 2D0*DMU2+DHU2+DHD2
+ DO 130 I=1,5,2
+ KC=PYCOMP(KSUSY1+I)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DQ2)
+ KC=PYCOMP(KSUSY2+I)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DD2)
+ KC=PYCOMP(KSUSY1+I+1)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DQ2)
+ KC=PYCOMP(KSUSY2+I+1)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DU2)
+ 130 CONTINUE
+ DO 140 I=11,15,2
+ KC=PYCOMP(KSUSY1+I)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DL2)
+ KC=PYCOMP(KSUSY2+I)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DE2)
+ KC=PYCOMP(KSUSY1+I+1)
+ PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DL2)
+ 140 CONTINUE
+ IF(RMSS(4)**2+DMU2.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' MU2 DRIVEN NEGATIVE '
+ STOP
+ ENDIF
+ SGNMU=SIGN(1D0,RMSS(4))
+ RMSS(4)=SGNMU*SQRT(RMSS(4)**2+DMU2)
+ ARG=RMSS(10)**2*SIGN(1D0,RMSS(10))+DQ2
+ RMSS(10)=SIGN(SQRT(ABS(ARG)),ARG)
+ ARG=RMSS(11)**2*SIGN(1D0,RMSS(11))+DD2
+ RMSS(11)=SIGN(SQRT(ABS(ARG)),ARG)
+ ARG=RMSS(12)**2*SIGN(1D0,RMSS(12))+DU2
+ RMSS(12)=SIGN(SQRT(ABS(ARG)),ARG)
+ ARG=RMSS(13)**2*SIGN(1D0,RMSS(13))+DL2
+ RMSS(13)=SIGN(SQRT(ABS(ARG)),ARG)
+ ARG=RMSS(14)**2*SIGN(1D0,RMSS(14))+DE2
+ RMSS(14)=SIGN(SQRT(ABS(ARG)),ARG)
+ IF( RMSS(19)**2 + DMA2 .LE. 50D0 ) THEN
+ WRITE(MSTU(11),*) ' MA DRIVEN TOO LOW '
+ STOP
+ ENDIF
+ RMSS(19)=SQRT(RMSS(19)**2+DMA2)
+ RMSS(6)=SQRT(RMSS(6)**2+DL2)
+ RMSS(7)=SQRT(RMSS(7)**2+DE2)
+ WRITE(MSTU(11),*) ' MTL = ',RMSS(10)
+ WRITE(MSTU(11),*) ' MBR = ',RMSS(11)
+ WRITE(MSTU(11),*) ' MTR = ',RMSS(12)
+ WRITE(MSTU(11),*) ' SEL = ',RMSS(6),RMSS(13)
+ WRITE(MSTU(11),*) ' SER = ',RMSS(7),RMSS(14)
+ ENDIF
+
+C...Fix the third generation sfermions.
+ CALL PYTHRG
+ XARG=RMSS(13)**2-PMAS(24,1)**2*ABS(COS2B)
+ IF(XARG.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' TAU SNEUTRINO MASS IS NEGATIVE FROM'//
+ & ' THE SUM RULE. '
+ WRITE(MSTU(11),*) ' TRY A SMALLER VALUE OF TAN(BETA). '
+ RETURN
+ ELSE
+ PMAS(PYCOMP(KSUSY1+16),1)=SQRT(XARG)
+ ENDIF
+
+C...Fix the neutralino--chargino--gluino sector.
+ CALL PYINOM
+
+C...Fix the Higgs sector.
+ CALL PYHGGM(ALFA)
+
+C...Choose the Gunion-Haber convention.
+ ALFA=-ALFA
+ RMSS(18)=ALFA
+
+C...Print information on mass parameters.
+ IF(IMSSM.EQ.2.AND.MSTP(122).GT.0) THEN
+ WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
+ WRITE(MSTU(11),*) ' USING APPROXIMATE SUGRA RELATIONS '
+ WRITE(MSTU(11),*) ' M0 = ',RMSS(8)
+ WRITE(MSTU(11),*) ' M1/2=',RMSS(1)
+ WRITE(MSTU(11),*) ' TANB=',RMSS(5)
+ WRITE(MSTU(11),*) ' MU = ',RMSS(4)
+ WRITE(MSTU(11),*) ' AT = ',RMSS(16)
+ WRITE(MSTU(11),*) ' MA = ',RMSS(19)
+ WRITE(MSTU(11),*) ' MTOP=',PMAS(6,1)
+ WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
+ ENDIF
+ IF(IMSS(20).EQ.1) THEN
+ WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
+ WRITE(MSTU(11),*) ' DEBUG MODE '
+ WRITE(MSTU(11),*) ' UMIX = ',UMIX(1,1),UMIX(1,2),
+ & UMIX(2,1),UMIX(2,2)
+ WRITE(MSTU(11),*) ' VMIX = ',VMIX(1,1),VMIX(1,2),
+ & VMIX(2,1),VMIX(2,2)
+ WRITE(MSTU(11),*) ' ZMIX = ',ZMIX
+ WRITE(MSTU(11),*) ' ALFA = ',ALFA
+ WRITE(MSTU(11),*) ' BETA = ',BETA
+ WRITE(MSTU(11),*) ' STOP = ',(SFMIX(6,I),I=1,4)
+ WRITE(MSTU(11),*) ' SBOT = ',(SFMIX(5,I),I=1,4)
+ WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
+ ENDIF
+
+C...Set up the Higgs couplings - needed here since initialization
+C...in PYINRE did not yet occur when PYWIDT is called below.
+ AL=ALFA
+ BE=BETA
+ SINA=SIN(AL)
+ COSA=COS(AL)
+ COSB=COS(BE)
+ SINB=TANB*COSB
+C...tanb (used for H+)
+ PARU(141)=TANB
+
+C...Firstly: h
+C...Coupling to d-type quarks
+ PARU(161)=SINA/COSB
+C...Coupling to u-type quarks
+ PARU(162)=-COSA/SINB
+C...Coupling to leptons
+ PARU(163)=PARU(161)
+C...Coupling to Z
+ PARU(164)=SIN(BE-AL)
+C...Coupling to W
+ PARU(165)=PARU(164)
+C...Coupling to H+
+ PARU(168)=-SIN(BE-AL)-COS(2D0*BE)*SIN(BE+AL)/2D0/(1D0-XW)
+
+C...Secondly: H
+C...Coupling to d-type quarks
+ PARU(171)=-COSA/COSB
+C...Coupling to u-type quarks
+ PARU(172)=-SINA/SINB
+C...Coupling to leptons
+ PARU(173)=PARU(171)
+C...Coupling to Z
+ PARU(174)=COS(BE-AL)
+C...Coupling to W
+ PARU(175)=PARU(174)
+C...Coupling to h
+ PARU(176)=COS(2D0*AL)*COS(BE+AL)-2D0*SIN(2D0*AL)*SIN(BE+AL)
+C...Coupling to A
+ PARU(177)=COS(2D0*BE)*COS(BE+AL)
+C...Coupling to H+
+ PARU(178)=-COS(BE-AL)+COS(2D0*BE)*COS(BE+AL)/2D0/(1D0-XW)
+
+C...Thirdly, A
+C...Coupling to d-type quarks
+ PARU(181)=TANB
+C...Coupling to u-type quarks
+ PARU(182)=1D0/PARU(181)
+C...Coupling to leptons
+ PARU(183)=PARU(181)
+ PARU(184)=0D0
+ PARU(185)=0D0
+C...Coupling to Z h
+ PARU(186)=COS(BE-AL)
+C...Coupling to Z H
+ PARU(187)=SIN(BE-AL)
+ PARU(188)=0D0
+ PARU(189)=0D0
+ PARU(190)=0D0
+
+C...Finally: H+
+C...Coupling to W h
+ PARU(195)=COS(BE-AL)
+
+C...Tell that all Higgs couplings have been set.
+ MSTP(4)=1
+
+C...Second part of routine: set decay modes and branching ratios.
+
+C...Allow chi10 -> gravitino + gamma or not.
+ KC=PYCOMP(KSUSY1+39)
+ IF( IMSS(11) .NE. 0 ) THEN
+ PMAS(KC,1)=RMSS(21)/1000000000D0
+ PMAS(KC,2)=0.0001D0
+ IRPRTY=0
+ WRITE(MSTU(11),*) ' ALLOWING DECAYS TO GRAVITINOS '
+ ELSE
+ PMAS(KC,1)=9999D0
+ IRPRTY=1
+ ENDIF
+
+C...Loop over sparticle and Higgs species.
+ PMCHI1=PMAS(PYCOMP(KSUSY1+22),1)
+ DO 200 I=1,36
+ KF=KFSUSY(I)
+ KC=PYCOMP(KF)
+ LKNT=0
+
+C...Sfermion decays.
+ IF(I.LE.24) THEN
+C...First check to see if sneutrino is lighter than chi10.
+ IF((I.EQ.15.OR.I.EQ.19.OR.I.EQ.23).AND.
+ & PMAS(KC,1).LT.PMCHI1) THEN
+ ELSE
+ CALL PYSFDC(KF,XLAM,IDLAM,LKNT)
+ ENDIF
+
+C...Gluino decays.
+ ELSEIF(I.EQ.25) THEN
+ CALL PYGLUI(KF,XLAM,IDLAM,LKNT)
+
+C...Neutralino decays.
+ ELSEIF(I.GE.26.AND.I.LE.29) THEN
+ CALL PYNJDC(KF,XLAM,IDLAM,LKNT)
+C...chi10 stable or chi10 -> gravitino + gamma.
+ IF(I.EQ.26.AND.IRPRTY.EQ.1) THEN
+ PMAS(KC,2)=1D-6
+ MDCY(KC,1)=0
+ MWID(KC)=0
+ ENDIF
+
+C...Chargino decays.
+ ELSEIF(I.GE.30.AND.I.LE.31) THEN
+ CALL PYCJDC(KF,XLAM,IDLAM,LKNT)
+
+C...Gravitino is stable.
+ ELSEIF(I.EQ.32) THEN
+ MDCY(KC,1)=0
+ MWID(KC)=0
+
+C...Higgs decays.
+ ELSEIF(I.GE.33.AND.I.LE.36) THEN
+C...Calculate decays to non-SUSY particles.
+ CALL PYWIDT(KF,PMAS(KC,1)**2,WDTP,WDTE)
+ LKNT=0
+ DO 150 I1=0,100
+ XLAM(I1)=0D0
+ 150 CONTINUE
+ DO 170 I1=1,MDCY(KC,3)
+ K1=MDCY(KC,2)+I1-1
+ IF(IABS(KFDP(K1,1)).GT.KSUSY1.OR.
+ & IABS(KFDP(K1,2)).GT.KSUSY1) GOTO 170
+ XLAM(I1)=WDTP(I1)
+ XLAM(0)=XLAM(0)+XLAM(I1)
+ DO 160 J1=1,3
+ IDLAM(I1,J1)=KFDP(K1,J1)
+ 160 CONTINUE
+ LKNT=LKNT+1
+ 170 CONTINUE
+C...Add the decays to SUSY particles.
+ CALL PYHEXT(KF,XLAM,IDLAM,LKNT)
+ ENDIF
+
+C...Set stable particles.
+ IF(LKNT.EQ.0) THEN
+ MDCY(KC,1)=0
+ MWID(KC)=0
+ PMAS(KC,2)=1D-6
+ PMAS(KC,3)=1D-5
+ PMAS(KC,4)=0D0
+
+C...Store branching ratios in the standard tables.
+ ELSE
+ IDC=MDCY(KC,2)+MDCY(KC,3)-1
+ DELM=1D6
+ DO 190 IL=1,LKNT
+ IDCSV=IDC
+ 180 IDC=IDC+1
+ IF(IDC.EQ.MDCY(KC,2)+MDCY(KC,3)) IDC=MDCY(KC,2)
+ IF(IDLAM(IL,1).EQ.KFDP(IDC,1).AND.IDLAM(IL,2).EQ.
+ & KFDP(IDC,2).AND.IDLAM(IL,3).EQ.KFDP(IDC,3)) THEN
+ BRAT(IDC)=XLAM(IL)/XLAM(0)
+ XMDIF=PMAS(KC,1)
+ IF(MDME(IDC,1).GE.1) THEN
+ XMDIF=XMDIF-PMAS(PYCOMP(KFDP(IDC,1)),1)-
+ & PMAS(PYCOMP(KFDP(IDC,2)),1)
+ IF(KFDP(IDC,3).NE.0) XMDIF=XMDIF-
+ & PMAS(PYCOMP(KFDP(IDC,3)),1)
+ ENDIF
+ IF(I.LE.32) THEN
+ IF(XMDIF.GE.0D0) THEN
+ DELM=MIN(DELM,XMDIF)
+ ELSE
+ WRITE(MSTU(11),*) ' ERROR WITH DELM ',DELM,XMDIF
+ WRITE(MSTU(11),*) ' KF = ',KF
+ WRITE(MSTU(11),*) ' KF(decay) = ',(KFDP(IDC,J),J=1,3)
+ ENDIF
+ ENDIF
+ GOTO 190
+ ELSEIF(IDC.EQ.IDCSV) THEN
+ WRITE(MSTU(11),*) ' Error in PYMSIN: SUSY decay ',
+ & 'channel not recognized:'
+ WRITE(MSTU(11),*) KF,' -> ',(IDLAM(I,J),J=1,3)
+ GOTO 190
+ ELSE
+ GOTO 180
+ ENDIF
+ 190 CONTINUE
+
+C...Store width, cutoff and lifetime.
+ PMAS(KC,2)=XLAM(0)
+ IF(PMAS(KC,2).LT.0.1D0*DELM) THEN
+ PMAS(KC,3)=PMAS(KC,2)*10D0
+ ELSE
+ PMAS(KC,3)=0.95D0*DELM
+ ENDIF
+ IF(PMAS(KC,2).NE.0D0) THEN
+ PMAS(KC,4)=PARU(3)/PMAS(KC,2)*1D-12
+ ENDIF
+ ENDIF
+ 200 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYAPPS
+C...Uses approximate analytical formulae to determine the full set of
+C...MSSM parameters from SUGRA input.
+C...See M. Drees and S.P. Martin, hep-ph/9504124
+
+ SUBROUTINE PYAPPS
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/
+
+ XMT=PMAS(6,1)
+ XMZ2=PMAS(23,1)**2
+ XMW2=PMAS(24,1)**2
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ XW=PARU(102)
+ XMG=RMSS(1)
+ XMG2=XMG*XMG
+ XM0=RMSS(8)
+ XM02=XM0*XM0
+ AT=-RMSS(16)
+ RMSS(15)=AT
+ RMSS(17)=AT
+ COSB=COS(BETA)
+ SINB=TANB*COSB
+
+ DTERM=XMZ2*COS(2D0*BETA)
+ XMER=SQRT(XM02+0.15D0*XMG2-XW*DTERM)
+ XMEL=SQRT(XM02+0.52D0*XMG2-(0.5D0-XW)*DTERM)
+ RMSS(6)=XMEL
+ RMSS(7)=XMER
+ XMUR=SQRT(PYRNMQ(2,2D0/3D0*XW*DTERM))
+ XMDR=SQRT(PYRNMQ(3,-1D0/3D0*XW*DTERM))
+ XMUL=SQRT(PYRNMQ(1,(0.5D0-2D0/3D0*XW)*DTERM))
+ XMDL=SQRT(PYRNMQ(1,-(0.5D0-1D0/3D0*XW)*DTERM))
+ DO 100 I=1,5,2
+ PMAS(PYCOMP(KSUSY1+I),1)=XMDL
+ PMAS(PYCOMP(KSUSY2+I),1)=XMDR
+ PMAS(PYCOMP(KSUSY1+I+1),1)=XMUL
+ PMAS(PYCOMP(KSUSY2+I+1),1)=XMUR
+ 100 CONTINUE
+ XARG=XMEL**2-XMW2*ABS(COS(2D0*BETA))
+ IF(XARG.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' SNEUTRINO MASS IS NEGATIVE'//
+ & ' FROM THE SUM RULE. '
+ WRITE(MSTU(11),*) ' TRY A SMALLER VALUE OF TAN(BETA). '
+ RETURN
+ ELSE
+ XARG=SQRT(XARG)
+ ENDIF
+ DO 110 I=11,15,2
+ PMAS(PYCOMP(KSUSY1+I),1)=XMEL
+ PMAS(PYCOMP(KSUSY2+I),1)=XMER
+ PMAS(PYCOMP(KSUSY1+I+1),1)=XARG
+ PMAS(PYCOMP(KSUSY2+I+1),1)=9999D0
+ 110 CONTINUE
+ XMNU=XARG
+
+ RMT=PYRNMT(XMT)
+ XTOP=(RMT/150D0/SINB)**2*(.9D0*XM02+2.1D0*XMG2+
+ &(1D0-(RMT/190D0/SINB)**3)*(.24D0*AT**2+AT*XMG))
+ RMB=3D0
+ XBOT=(RMB/150D0/COSB)**2*(.9D0*XM02+2.1D0*XMG2+
+ &(1D0-(RMB/190D0/COSB)**3)*(.24D0*AT**2+AT*XMG))
+ XTAU=1D-4/COSB**2*(XM02+0.15D0*XMG2+AT**2/3D0)
+ ATP=AT*(1D0-(RMT/190D0/SINB)**2)+XMG*(3.47D0-1.9D0*(RMT/190D0/
+ &SINB)**2)
+ RMSS(16)=-ATP
+ XMU2=-XM02-0.52D0*XMG2-0.5D0*XMZ2+XTOP/(1D0-1D0/TANB**2)
+ XMA2=(XMNU**2+XMU2-XBOT-XTAU/3D0)/SINB**2
+ XMU=SIGN(SQRT(XMU2),RMSS(4))
+ RMSS(4)=XMU
+ RMSS(19)=SQRT(XMA2)
+ ARG=XM02+0.15D0*XMG2-2D0*XTAU/3D0-XW*DTERM
+ IF(ARG.GT.0D0) THEN
+ RMSS(14)=SQRT(ARG)
+ ELSE
+ WRITE(MSTU(11),*) ' RIGHT STAU MASS < 0 '
+ STOP
+ ENDIF
+ ARG=XM02+0.52D0*XMG2-XTAU/3D0-(0.5D0-XW)*DTERM
+ IF(ARG.GT.0D0) THEN
+ RMSS(13)=SQRT(ARG)
+ ELSE
+ WRITE(MSTU(11),*) ' LEFT STAU MASS < 0 '
+ STOP
+ ENDIF
+ ARG=PYRNMQ(1,-(XBOT+XTOP)/3D0)
+ IF(ARG.GT.0D0) THEN
+ RMSS(10)=SQRT(ARG)
+ ELSE
+ RMSS(10)=-SQRT(-ARG)
+ ENDIF
+ ARG=PYRNMQ(2,-2D0*XTOP/3D0)
+ IF(ARG.GT.0D0) THEN
+ RMSS(12)=SQRT(ARG)
+ ELSE
+ RMSS(12)=-SQRT(-ARG)
+ ENDIF
+ ARG=PYRNMQ(3,-2D0*XBOT/3D0)
+ IF(ARG.GT.0D0) THEN
+ RMSS(11)=SQRT(ARG)
+ ELSE
+ RMSS(11)=-SQRT(-ARG)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRNMQ
+C...Determines the running mass of quarks.
+
+ FUNCTION PYRNMQ(ID,DTERM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblock.
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYMSSM/
+
+C...Local variables.
+ DOUBLE PRECISION PI,R
+ DOUBLE PRECISION TOL
+ DOUBLE PRECISION CI(3)
+ EXTERNAL PYALPS
+ DATA TOL/0.001D0/
+ DATA PI,R/3.141592654D0,.61803399D0/
+ DATA CI/0.47D0,0.07D0,0.02D0/
+
+ C=1D0-R
+ CA=CI(ID)
+ AG=(0.71D0)**2/4D0/PI
+ AG=RMSS(20)
+ XM0=RMSS(8)
+ XMG=RMSS(1)
+ XM02=XM0*XM0
+ XMG2=XMG*XMG
+
+ AS=PYALPS(XM02+6D0*XMG2)
+ CG=8D0/9D0*((AS/AG)**2-1D0)
+ BX=XM02+(CA+CG)*XMG2+DTERM
+ AX=MIN(50D0**2,0.5D0*BX)
+ CX=MAX(2000D0**2,2D0*BX)
+
+ X0=AX
+ X3=CX
+ IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
+ X1=BX
+ X2=BX+C*(CX-BX)
+ ELSE
+ X2=BX
+ X1=BX-C*(BX-AX)
+ ENDIF
+ AS1=PYALPS(X1)
+ CG=8D0/9D0*((AS1/AG)**2-1D0)
+ F1=ABS(XM02+(CA+CG)*XMG2+DTERM-X1)
+ AS2=PYALPS(X2)
+ CG=8D0/9D0*((AS2/AG)**2-1D0)
+ F2=ABS(XM02+(CA+CG)*XMG2+DTERM-X2)
+ 100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
+ IF(F2.LT.F1) THEN
+ X0=X1
+ X1=X2
+ X2=R*X1+C*X3
+ F1=F2
+ AS2=PYALPS(X2)
+ CG=8D0/9D0*((AS2/AG)**2-1D0)
+ F2=ABS(XM02+(CA+CG)*XMG2+DTERM-X2)
+ ELSE
+ X3=X2
+ X2=X1
+ X1=R*X2+C*X0
+ F2=F1
+ AS1=PYALPS(X1)
+ CG=8D0/9D0*((AS1/AG)**2-1D0)
+ F1=ABS(XM02+(CA+CG)*XMG2+DTERM-X1)
+ ENDIF
+ GOTO 100
+ ENDIF
+ IF(F1.LT.F2) THEN
+ PYRNMQ=X1
+ XMIN=X1
+ ELSE
+ PYRNMQ=X2
+ XMIN=X2
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRNMT
+C...Determines the running mass of the top quark.
+
+ FUNCTION PYRNMT(XMT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblock.
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYMSSM/
+
+C...Local variables.
+ DOUBLE PRECISION XMT
+ DOUBLE PRECISION PI,R
+ DOUBLE PRECISION TOL
+ EXTERNAL PYALPS
+ DATA TOL/0.001D0/
+ DATA PI,R/3.141592654D0,0.61803399D0/
+
+ C=1D0-R
+
+ BX=XMT
+ AX=MIN(50D0,BX*0.5D0)
+ CX=MAX(300D0,2D0*BX)
+
+ X0=AX
+ X3=CX
+ IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
+ X1=BX
+ X2=BX+C*(CX-BX)
+ ELSE
+ X2=BX
+ X1=BX-C*(BX-AX)
+ ENDIF
+ AS1=PYALPS(X1**2)/PI
+ F1=ABS(XMT/(1D0+4D0/3D0*AS1+11D0*AS1**2)-X1)
+ AS2=PYALPS(X2**2)/PI
+ F2=ABS(XMT/(1D0+4D0/3D0*AS2+11D0*AS2**2)-X2)
+ 100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
+ IF(F2.LT.F1) THEN
+ X0=X1
+ X1=X2
+ X2=R*X1+C*X3
+ F1=F2
+ AS2=PYALPS(X2**2)/PI
+ F2=ABS(XMT/(1D0+4D0/3D0*AS2+11D0*AS2**2)-X2)
+ ELSE
+ X3=X2
+ X2=X1
+ X1=R*X2+C*X0
+ F2=F1
+ AS1=PYALPS(X1**2)/PI
+ F1=ABS(XMT/(1D0+4D0/3D0*AS1+11D0*AS1**2)-X1)
+ ENDIF
+ GOTO 100
+ ENDIF
+ IF(F1.LT.F2) THEN
+ PYRNMT=X1
+ XMIN=X1
+ ELSE
+ PYRNMT=X2
+ XMIN=X2
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTHRG
+C...Calculates the mass eigenstates of the third generation sfermions.
+C...Created: 5-31-96
+
+ SUBROUTINE PYTHRG
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
+
+C...Local variables.
+ DOUBLE PRECISION BETA
+ DOUBLE PRECISION PYRNMT
+ DOUBLE PRECISION AM2(2,2),RT(2,2),DI(2,2)
+ DOUBLE PRECISION XMZ2,XMW2,TANB,XMU,COS2B,XMQL2,XMQR2
+ DOUBLE PRECISION XMF,XMF2,DIFF,SAME,XMF12,XMF22,SMALL
+ DOUBLE PRECISION SIN2T,COS2T,TWOT,ATR,AMQR,XXX,YYY,AMQL
+ INTEGER ID1(3),ID2(3),ID3(3),ID4(3)
+ INTEGER IF,I,J,II,JJ,IT,L
+ LOGICAL DTERM
+ DATA SMALL/1D-3/
+ DATA ID1/10,10,13/
+ DATA ID2/5,6,15/
+ DATA ID3/15,16,17/
+ DATA ID4/11,12,14/
+ DATA DTERM/.TRUE./
+
+ XMZ2=PMAS(23,1)**2
+ XMW2=PMAS(24,1)**2
+ TANB=RMSS(5)
+ XMU=-RMSS(4)
+ BETA=ATAN(TANB)
+ COS2B=COS(2D0*BETA)
+
+C...OPTION TO FIX T1, T2, B1 MASSES AND MIXINGS
+
+ IOPT=IMSS(5)
+ IF(IOPT.EQ.1) THEN
+ CTT=RMSS(27)
+ CTT2=CTT**2
+ STT2=1D0-CTT2
+ STT=SQRT(STT2)
+ XM12=RMSS(12)**2
+ XM22=RMSS(10)**2
+ XMQL2=CTT2*XM12+STT2*XM22
+ XMQR2=STT2*XM12+CTT2*XM22
+ XMFR=PMAS(6,1)
+ XMF2=PYRNMT(XMFR)**2
+ ATOP=-XMU/TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
+ ATMT=SQRT(XMF2)*(ATOP+XMU/TANB)
+ XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
+ IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
+ STT=-STT
+ ATOP=-XMU/TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
+ ENDIF
+ RMSS(16)=ATOP
+C......SUBTRACT OUT D-TERM AND FERMION MASS
+ XMQL2=XMQL2-XMF2-(4D0*XMW2-XMZ2)*COS2B/6D0
+ XMQR2=XMQR2-XMF2+(XMW2-XMZ2)*COS2B*2D0/3D0
+ IF(XMQL2.GE.0D0) THEN
+ RMSS(10)=SQRT(XMQL2)
+ ELSE
+ RMSS(10)=-SQRT(-XMQL2)
+ ENDIF
+ IF(XMQR2.GE.0D0) THEN
+ RMSS(12)=SQRT(XMQR2)
+ ELSE
+ RMSS(12)=-SQRT(-XMQR2)
+ ENDIF
+C SAME FOR SBOTTOM SQUARK
+ CTT=RMSS(26)
+ CTT2=CTT**2
+ STT2=1D0-CTT2
+ STT=MAX(SQRT(STT2),1D-6)
+ XMF=3D00
+ XMF2=XMF**2
+ XM12=RMSS(11)**2
+ XMQL2=RMSS(10)**2-(2D0*XMW2+XMZ2)*COS2B/6D0+XMF2
+ IF(ABS(CTT).EQ.1D0) THEN
+ XM22=XM12
+ XM12=XMQL2
+ XMQR2=XM22
+ ELSEIF(CTT.EQ.0D0) THEN
+ XM22=XMQL2
+ XMQR2=XM12
+ ELSE
+ XM22=(XMQL2-CTT2*XM12)/STT2
+ XMQR2=STT2*XM12+CTT2*XM22
+ ENDIF
+ ABOT=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
+ ATMT=SQRT(XMF2)*(ABOT+XMU*TANB)
+ XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
+ IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
+ STT=-STT
+ ABOT=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
+ ENDIF
+ RMSS(15)=ABOT
+C......SUBTRACT OUT D-TERM AND FERMION MASS
+ XMQR2=XMQR2-(XMW2-XMZ2)*COS2B/3D0-XMF2
+ IF(XMQR2.GE.0D0) THEN
+ RMSS(11)=SQRT(XMQR2)
+ ELSE
+ RMSS(11)=-SQRT(-XMQR2)
+ ENDIF
+ ENDIF
+
+ DO 170 L=1,3
+ AMQL=RMSS(ID1(L))
+ IF(AMQL.LT.0D0) THEN
+ XMQL2=-AMQL**2
+ ELSE
+ XMQL2=AMQL**2
+ ENDIF
+ IF=ID2(L)
+ XMF=PMAS(IF,1)
+ IF(L.EQ.1) XMF=3D0
+ IF(L.EQ.2) XMF=PYRNMT(XMF)
+ XMF2=XMF**2
+ ATR=RMSS(ID3(L))
+ AMQR=RMSS(ID4(L))
+ IF(AMQR.LT.0D0) THEN
+ XMQR2=-AMQR**2
+ ELSE
+ XMQR2=AMQR**2
+ ENDIF
+ AM2(1,1)=XMQL2+XMF2
+ AM2(2,2)=XMQR2+XMF2
+ IF(DTERM) THEN
+ IF(L.EQ.1) THEN
+ AM2(1,1)=AM2(1,1)-(2D0*XMW2+XMZ2)*COS2B/6D0
+ AM2(2,2)=AM2(2,2)+(XMW2-XMZ2)*COS2B/3D0
+ AM2(1,2)=XMF*(ATR+XMU*TANB)
+ ELSEIF(L.EQ.2) THEN
+ AM2(1,1)=AM2(1,1)+(4D0*XMW2-XMZ2)*COS2B/6D0
+ AM2(2,2)=AM2(2,2)-(XMW2-XMZ2)*COS2B*2D0/3D0
+ AM2(1,2)=XMF*(ATR+XMU/TANB)
+ ELSEIF(L.EQ.3) THEN
+ IF(IMSS(8).EQ.1) THEN
+ AM2(1,1)=RMSS(6)**2
+ AM2(2,2)=RMSS(7)**2
+ AM2(1,2)=0D0
+ RMSS(13)=RMSS(6)
+ RMSS(14)=RMSS(7)
+ ELSE
+ AM2(1,2)=XMF*(ATR+XMU*TANB)
+ ENDIF
+ ENDIF
+ ENDIF
+ AM2(2,1)=AM2(1,2)
+ SAME=0.5D0*(AM2(1,1)+AM2(2,2))
+ DIFF=0.5D0*SQRT((AM2(1,1)-AM2(2,2))**2+4D0*AM2(1,2)*AM2(2,1))
+ XMF12=SAME-DIFF
+ XMF22=SAME+DIFF
+ IF(XMF12.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' NEGATIVE**2 MASS FOR SFERMION '
+ STOP
+ ENDIF
+ IT=0
+ IF(XMF22-XMF12.GT.0D0) THEN
+ RT(1,1) = SQRT((XMF22-AM2(1,1))/(XMF22-XMF12))
+ RT(2,2) = RT(1,1)
+ RT(1,2) = -SIGN(SQRT(1D0-RT(1,1)**2),AM2(1,2)/(XMF22-XMF12))
+ RT(2,1) = -RT(1,2)
+ ELSE
+ RT(1,1) = 1D0
+ RT(2,2) = RT(1,1)
+ RT(1,2) = 0D0
+ RT(2,1) = -RT(1,2)
+ ENDIF
+ 100 CONTINUE
+ IT=IT+1
+
+ DO 140 I=1,2
+ DO 130 JJ=1,2
+ DI(I,JJ)=0D0
+ DO 120 II=1,2
+ DO 110 J=1,2
+ DI(I,JJ)=DI(I,JJ)+RT(I,J)*AM2(J,II)*RT(JJ,II)
+ 110 CONTINUE
+ 120 CONTINUE
+ 130 CONTINUE
+ 140 CONTINUE
+
+ IF(DI(1,1).GT.DI(2,2)) THEN
+ WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION '
+ WRITE(MSTU(11),*) L,SQRT(XMF12),SQRT(XMF22)
+ WRITE(MSTU(11),*) AM2
+ WRITE(MSTU(11),*) DI
+ WRITE(MSTU(11),*) RT
+ DI(1,1)=-RT(2,1)
+ DI(2,2)=RT(1,2)
+ DI(1,2)=-RT(2,2)
+ DI(2,1)=RT(1,1)
+ DO 160 I=1,2
+ DO 150 J=1,2
+ RT(I,J)=DI(I,J)
+ 150 CONTINUE
+ 160 CONTINUE
+ GOTO 100
+ ELSEIF(ABS(DI(1,2)*DI(2,1)/DI(1,1)/DI(2,2)).GT.SMALL) THEN
+ WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION,'//
+ & ' OFF DIAGONAL ELEMENTS '
+ WRITE(MSTU(11),*) 'MASSES = ',L,SQRT(XMF12),SQRT(XMF22)
+ WRITE(MSTU(11),*) DI
+ WRITE(MSTU(11),*) ' ROTATION = ',RT
+C...STOP
+ ELSEIF(DI(1,1).LT.0D0.OR.DI(2,2).LT.0D0) THEN
+ WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION,'//
+ & ' NEGATIVE MASSES '
+ STOP
+ ENDIF
+ PMAS(PYCOMP(KSUSY1+IF),1)=SQRT(XMF12)
+ PMAS(PYCOMP(KSUSY2+IF),1)=SQRT(XMF22)
+ SFMIX(IF,1)=RT(1,1)
+ SFMIX(IF,2)=RT(1,2)
+ SFMIX(IF,3)=RT(2,1)
+ SFMIX(IF,4)=RT(2,2)
+ 170 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYINOM
+C...Finds the mass eigenstates and mixing matrices for neutralinos
+C...and charginos.
+
+ SUBROUTINE PYINOM
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
+
+C...Local variables.
+ DOUBLE PRECISION XMW,XMZ
+ DOUBLE PRECISION AR(4,4),WR(4),ZR(4,4)
+ DOUBLE PRECISION ZP(4,4)
+ DOUBLE PRECISION DETX,XI(2,2)
+ DOUBLE PRECISION XXX,YYY,XMH,XML
+ DOUBLE PRECISION COSW,SINW
+ DOUBLE PRECISION XMU
+ DOUBLE PRECISION TERMB,TERMC,DISCR,XMH2,XML2
+ DOUBLE PRECISION TANB,AL,BE,COSA,COSB,SINA,SINB,XW
+ DOUBLE PRECISION XM1,XM2,XM3,BETA
+ DOUBLE PRECISION Q2,AEM,A1,A2,A3,AQ,RM1,RM2
+ DOUBLE PRECISION ARG,X0,X1,AX0,AX1,AT,BT
+ DOUBLE PRECISION Y0,Y1,AMGX0,AM1X0,AMGX1,AM1X1
+ DOUBLE PRECISION ARGX0,AR1X0,ARGX1,AR1X1
+ DOUBLE PRECISION PYALPS,PYALEM
+ DOUBLE PRECISION PYRNM3
+ INTEGER IERR,INDEX(4),I,J,K,L,IOPT,ILR,KFNCHI(4)
+ DATA KFNCHI/1000022,1000023,1000025,1000035/
+
+ IOPT=IMSS(2)
+ IF(IMSS(1).EQ.2) THEN
+ IOPT=1
+ ENDIF
+C...M1, M2, AND M3 ARE INDEPENDENT
+ IF(IOPT.EQ.0) THEN
+ XM1=RMSS(1)
+ XM2=RMSS(2)
+ XM3=RMSS(3)
+ ELSEIF(IOPT.GE.1) THEN
+ Q2=PMAS(23,1)**2
+ AEM=PYALEM(Q2)
+ A2=AEM/PARU(102)
+ A1=AEM/(1D0-PARU(102))
+ XM1=RMSS(1)
+ XM2=RMSS(2)
+ IF(IMSS(1).EQ.2) XM1=RMSS(1)/RMSS(20)*A1*5D0/3D0
+ IF(IOPT.EQ.1) THEN
+ XM2=XM1*A2/A1*3D0/5D0
+ ELSEIF(IOPT.EQ.3) THEN
+ XM1=XM2*5D0/3D0*A1/A2
+ ENDIF
+ XM3=PYRNM3(XM2/A2)
+ IF(XM3.LE.0D0) THEN
+ WRITE(MSTU(11),*) ' ERROR WITH M3 = ',XM3
+ STOP
+ ENDIF
+ ENDIF
+
+C...GLUINO MASS
+ IF(IMSS(3).EQ.1) THEN
+ PMAS(PYCOMP(KSUSY1+21),1)=XM3
+ ELSE
+ AQ=0D0
+ DO 110 I=1,4
+ DO 100 ILR=1,2
+ RM1=PMAS(PYCOMP(ILR*KSUSY1+I),1)**2/XM3**2
+ AQ=AQ+0.5D0*((2D0-RM1)*(RM1*LOG(RM1)-1D0)
+ & +(1D0-RM1)**2*LOG(ABS(1D0-RM1)))
+ 100 CONTINUE
+ 110 CONTINUE
+
+ DO 130 I=5,6
+ DO 120 ILR=1,2
+ RM1=PMAS(PYCOMP(ILR*KSUSY1+I),1)**2/XM3**2
+ RM2=PMAS(I,1)**2/XM3**2
+ ARG=(RM1-RM2-1D0)**2-4D0*RM2**2
+ IF(ARG.GE.0D0) THEN
+ X0=0.5D0*(1D0+RM2-RM1-SQRT(ARG))
+ AX0=ABS(X0)
+ X1=0.5D0*(1D0+RM2-RM1+SQRT(ARG))
+ AX1=ABS(X1)
+ IF(X0.EQ.1D0) THEN
+ AT=-1D0
+ BT=0.25D0
+ ELSEIF(X0.EQ.0D0) THEN
+ AT=0D0
+ BT=-0.25D0
+ ELSE
+ AT=0.5D0*LOG(ABS(1D0-X0))*(1D0-X0**2)+
+ & 0.5D0*X0**2*LOG(AX0)
+ BT=(-1D0-2D0*X0)/4D0
+ ENDIF
+ IF(X1.EQ.1D0) THEN
+ AT=-1D0+AT
+ BT=0.25D0+BT
+ ELSEIF(X1.EQ.0D0) THEN
+ AT=0D0+AT
+ BT=-0.25D0+BT
+ ELSE
+ AT=0.5D0*LOG(ABS(1D0-X1))*(1D0-X1**2)+0.5D0*
+ & X1**2*LOG(AX1)+AT
+ BT=(-1D0-2D0*X1)/4D0+BT
+ ENDIF
+ AQ=AQ+AT+BT
+ ELSE
+ X0=0.5D0*(1D0+RM2-RM1)
+ Y0=-0.5D0*SQRT(-ARG)
+ AMGX0=SQRT(X0**2+Y0**2)
+ AM1X0=SQRT((1D0-X0)**2+Y0**2)
+ ARGX0=ATAN2(-X0,-Y0)
+ AR1X0=ATAN2(1D0-X0,Y0)
+ X1=X0
+ Y1=-Y0
+ AMGX1=AMGX0
+ AM1X1=AM1X0
+ ARGX1=ATAN2(-X1,-Y1)
+ AR1X1=ATAN2(1D0-X1,Y1)
+ AT=0.5D0*LOG(AM1X0)*(1D0-X0**2+3D0*Y0**2)
+ & +0.5D0*(X0**2-Y0**2)*LOG(AMGX0)
+ BT=(-1D0-2D0*X0)/4D0+X0*Y0*( AR1X0-ARGX0 )
+ AT=AT+0.5D0*LOG(AM1X1)*(1D0-X1**2+3D0*Y1**2)
+ & +0.5D0*(X1**2-Y1**2)*LOG(AMGX1)
+ BT=BT+(-1D0-2D0*X1)/4D0+X1*Y1*( AR1X1-ARGX1 )
+ AQ=AQ+AT+BT
+ ENDIF
+ 120 CONTINUE
+ 130 CONTINUE
+ PMAS(PYCOMP(KSUSY1+21),1)=XM3*(1D0+PYALPS(XM3**2)/(2D0*PARU(2))*
+ & (15D0+AQ))
+ ENDIF
+
+C...NEUTRALINO MASSES
+ XMZ=PMAS(23,1)
+ XMW=PMAS(24,1)
+ XMU=RMSS(4)
+ SINW=SQRT(PARU(102))
+ COSW=SQRT(1D0-PARU(102))
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ COSB=COS(BETA)
+ SINB=TANB*COSB
+ AR(1,1) = XM1
+ AR(2,2) = XM2
+ AR(3,3) = 0D0
+ AR(4,4) = 0D0
+ AR(1,2) = 0D0
+ AR(2,1) = 0D0
+ AR(1,3) = -XMZ*SINW*COSB
+ AR(3,1) = AR(1,3)
+ AR(1,4) = XMZ*SINW*SINB
+ AR(4,1) = AR(1,4)
+ AR(2,3) = XMZ*COSW*COSB
+ AR(3,2) = AR(2,3)
+ AR(2,4) = -XMZ*COSW*SINB
+ AR(4,2) = AR(2,4)
+ AR(3,4) = -XMU
+ AR(4,3) = -XMU
+ CALL PYEIG4(AR,WR,ZR)
+ DO 150 I=1,4
+ SMZ(I)=WR(I)
+ PMAS(PYCOMP(KFNCHI(I)),1)=ABS(SMZ(I))
+ DO 140 J=1,4
+ ZMIX(I,J)=ZR(I,J)
+ IF(ABS(ZMIX(I,J)).LT.1D-6) ZMIX(I,J)=0D0
+ 140 CONTINUE
+ 150 CONTINUE
+
+C...CHARGINO MASSES
+ AR(1,1) = XM2
+ AR(2,2) = XMU
+ AR(1,2) = SQRT(2D0)*XMW*SINB
+ AR(2,1) = SQRT(2D0)*XMW*COSB
+ TERMB=AR(1,1)**2+AR(2,2)**2+AR(1,2)**2+AR(2,1)**2
+ TERMC=(AR(1,1)**2-AR(2,2)**2)**2+(AR(1,2)**2-AR(2,1)**2)**2
+ TERMC=TERMC+2D0*(AR(1,1)**2+AR(2,2)**2)*
+ &(AR(1,2)**2+AR(2,1)**2)+
+ &8D0*AR(1,1)*AR(2,2)*AR(1,2)*AR(2,1)
+ DISCR=TERMC
+ IF(DISCR.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' PROBLEM WITH DISCR '
+ ELSE
+ DISCR=SQRT(DISCR)
+ ENDIF
+ XML2=0.5D0*(TERMB-DISCR)
+ XMH2=0.5D0*(TERMB+DISCR)
+ XML=SQRT(XML2)
+ XMH=SQRT(XMH2)
+ PMAS(PYCOMP(KSUSY1+24),1)=XML
+ PMAS(PYCOMP(KSUSY1+37),1)=XMH
+ SMW(1)=XML
+ SMW(2)=XMH
+ XXX=AR(1,1)**2+AR(2,1)**2
+ YYY=AR(1,1)*AR(1,2)+AR(2,2)*AR(2,1)
+ VMIX(2,2) = YYY/SQRT(YYY**2+(XML2-XXX)**2)
+ VMIX(1,1) = SIGN(VMIX(2,2),AR(1,1)*AR(2,2)-0.5D0*AR(1,2)**2)
+ VMIX(2,1) = -(XML2-XXX)/SQRT(YYY**2+(XML2-XXX)**2)
+ VMIX(1,2) = -SIGN(VMIX(2,1),AR(1,1)*AR(2,2)-0.5D0*AR(1,2)**2)
+ ZR(1,1) = XML
+ ZR(1,2) = 0D0
+ ZR(2,1) = 0D0
+ ZR(2,2) = XMH
+ DETX = AR(1,1)*AR(2,2)-AR(1,2)*AR(2,1)
+ XI(1,1) = AR(2,2)/DETX
+ XI(2,2) = AR(1,1)/DETX
+ XI(1,2) = -AR(1,2)/DETX
+ XI(2,1) = -AR(2,1)/DETX
+ DO 190 I=1,2
+ DO 180 J=1,2
+ UMIX(I,J)=0D0
+ DO 170 K=1,2
+ DO 160 L=1,2
+ UMIX(I,J)=UMIX(I,J)+ZR(I,K)*VMIX(K,L)*XI(L,J)
+ 160 CONTINUE
+ 170 CONTINUE
+ 180 CONTINUE
+ 190 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRNM3
+C...Calculates the running of M3, the SU(3) gluino mass parameter.
+
+ FUNCTION PYRNM3(RGUT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DOUBLE PRECISION PI,R
+ DOUBLE PRECISION TOL
+ EXTERNAL PYALPS
+ DATA TOL/0.001D0/
+ DATA PI,R/3.141592654D0,0.61803399D0/
+
+ C=1D0-R
+
+ BX=RGUT*PYALPS(RGUT**2)
+ AX=MIN(50D0,BX*0.5D0)
+ CX=MAX(2000D0,2D0*BX)
+
+ X0=AX
+ X3=CX
+ IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
+ X1=BX
+ X2=BX+C*(CX-BX)
+ ELSE
+ X2=BX
+ X1=BX-C*(BX-AX)
+ ENDIF
+ AS1=PYALPS(X1**2)
+ F1=ABS(X1-RGUT*AS1)
+ AS2=PYALPS(X2**2)
+ F2=ABS(X2-RGUT*AS2)
+ 100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
+ IF(F2.LT.F1) THEN
+ X0=X1
+ X1=X2
+ X2=R*X1+C*X3
+ F1=F2
+ AS2=PYALPS(X2**2)
+ F2=ABS(X2-RGUT*AS2)
+ ELSE
+ X3=X2
+ X2=X1
+ X1=R*X2+C*X0
+ F2=F1
+ AS1=PYALPS(X1**2)
+ F1=ABS(X1-RGUT*AS1)
+ ENDIF
+ GOTO 100
+ ENDIF
+ IF(F1.LT.F2) THEN
+ PYRNM3=X1
+ XMIN=X1
+ ELSE
+ PYRNM3=X2
+ XMIN=X2
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYEIG4
+C...Finds eigenvalues and eigenvectors to a 4 * 4 matrix.
+C...Specific application: mixing in neutralino sector.
+
+ SUBROUTINE PYEIG4(A,W,Z)
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Arrays: in call and local.
+ DIMENSION A(4,4),W(4),Z(4,4),X(4),D(4,4),E(4)
+
+C...Coefficients of fourth-degree equation from matrix.
+C...x**4 + b3 * x**3 + b2 * x**2 + b1 * x + b0 = 0.
+ B3=-(A(1,1)+A(2,2)+A(3,3)+A(4,4))
+ B2=0D0
+ DO 110 I=1,3
+ DO 100 J=I+1,4
+ B2=B2+A(I,I)*A(J,J)-A(I,J)*A(J,I)
+ 100 CONTINUE
+ 110 CONTINUE
+ B1=0D0
+ B0=0D0
+ DO 120 I=1,4
+ I1=MOD(I,4)+1
+ I2=MOD(I+1,4)+1
+ I3=MOD(I+2,4)+1
+ B1=B1+A(I,I)*(-A(I1,I1)*A(I2,I2)+A(I1,I2)*A(I2,I1)+
+ & A(I1,I3)*A(I3,I1)+A(I2,I3)*A(I3,I2))-
+ & A(I,I1)*A(I1,I2)*A(I2,I)-A(I,I2)*A(I2,I1)*A(I1,I)
+ B0=B0+(-1D0)**(I+1)*A(1,I)*(
+ & A(2,I1)*(A(3,I2)*A(4,I3)-A(3,I3)*A(4,I2))+
+ & A(2,I2)*(A(3,I3)*A(4,I1)-A(3,I1)*A(4,I3))+
+ & A(2,I3)*(A(3,I1)*A(4,I2)-A(3,I2)*A(4,I1)))
+ 120 CONTINUE
+
+C...Coefficients of third-degree equation needed for
+C...separation into two second-degree equations.
+C...u**3 + c2 * u**2 + c1 * u + c0 = 0.
+ C2=-B2
+ C1=B1*B3-4D0*B0
+ C0=-B1**2-B0*B3**2+4D0*B0*B2
+ CQ=C1/3D0-C2**2/9D0
+ CR=C1*C2/6D0-C0/2D0-C2**3/27D0
+ CQR=CQ**3+CR**2
+
+C...Cases with one or three real roots.
+ IF(CQR.GE.0D0) THEN
+ S1=(CR+SQRT(CQR))**(1D0/3D0)
+ S2=(CR-SQRT(CQR))**(1D0/3D0)
+ U=S1+S2-C2/3D0
+ ELSE
+ SABS=SQRT(-CQ)
+ THE=ACOS(CR/SABS**3)/3D0
+ SRE=SABS*COS(THE)
+ U=2D0*SRE-C2/3D0
+ ENDIF
+
+C...Find and solve two second-degree equations.
+ P1=B3/2D0-SQRT(B3**2/4D0+U-B2)
+ P2=B3/2D0+SQRT(B3**2/4D0+U-B2)
+ Q1=U/2D0+SQRT(U**2/4D0-B0)
+ Q2=U/2D0-SQRT(U**2/4D0-B0)
+ IF(ABS(P1*Q1+P2*Q2-B1).LT.ABS(P1*Q2+P2*Q1-B1)) THEN
+ QSAV=Q1
+ Q1=Q2
+ Q2=QSAV
+ ENDIF
+ X(1)=-P1/2D0+SQRT(P1**2/4D0-Q1)
+ X(2)=-P1/2D0-SQRT(P1**2/4D0-Q1)
+ X(3)=-P2/2D0+SQRT(P2**2/4D0-Q2)
+ X(4)=-P2/2D0-SQRT(P2**2/4D0-Q2)
+
+C...Order eigenvalues in asceding mass.
+ W(1)=X(1)
+ DO 150 I1=2,4
+ DO 130 I2=I1-1,1,-1
+ IF(ABS(X(I1)).GE.ABS(W(I2))) GOTO 140
+ W(I2+1)=W(I2)
+ 130 CONTINUE
+ 140 W(I2+1)=X(I1)
+ 150 CONTINUE
+
+C...Find equation system for eigenvectors.
+ DO 250 I=1,4
+ DO 170 J1=1,4
+ D(J1,J1)=A(J1,J1)-W(I)
+ DO 160 J2=J1+1,4
+ D(J1,J2)=A(J1,J2)
+ D(J2,J1)=A(J2,J1)
+ 160 CONTINUE
+ 170 CONTINUE
+
+C...Find largest element in matrix.
+ DAMAX=0D0
+ DO 190 J1=1,4
+ DO 180 J2=1,4
+ IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 180
+ JA=J1
+ JB=J2
+ DAMAX=ABS(D(J1,J2))
+ 180 CONTINUE
+ 190 CONTINUE
+
+C...Subtract others by multiple of row selected above.
+ DAMAX=0D0
+ DO 210 J3=JA+1,JA+3
+ J1=J3-4*((J3-1)/4)
+ RL=D(J1,JB)/D(JA,JB)
+ DO 200 J2=1,4
+ D(J1,J2)=D(J1,J2)-RL*D(JA,J2)
+ IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 200
+ JC=J1
+ JD=J2
+ DAMAX=ABS(D(J1,J2))
+ 200 CONTINUE
+ 210 CONTINUE
+
+C...Do one more subtraction of a row.
+ DAMAX=0D0
+ DO 230 J3=JC+1,JC+3
+ J1=J3-4*((J3-1)/4)
+ IF(J1.EQ.JA) GOTO 230
+ RL=D(J1,JD)/D(JC,JD)
+ DO 220 J2=1,4
+ IF(J2.EQ.JB) GOTO 220
+ D(J1,J2)=D(J1,J2)-RL*D(JC,J2)
+ IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 220
+ JE=J1
+ DAMAX=ABS(D(J1,J2))
+ 220 CONTINUE
+ 230 CONTINUE
+
+C...Construct unnormalized eigenvector.
+ JF1=JD+1-4*(JD/4)
+ JF2=JD+2-4*((JD+1)/4)
+ IF(JF1.EQ.JB) JF1=JD+3-4*((JD+2)/4)
+ IF(JF2.EQ.JB) JF2=JD+3-4*((JD+2)/4)
+ E(JF1)=-D(JE,JF2)
+ E(JF2)=D(JE,JF1)
+ E(JD)=-(D(JC,JF1)*E(JF1)+D(JC,JF2)*E(JF2))/D(JC,JD)
+ E(JB)=-(D(JA,JF1)*E(JF1)+D(JA,JF2)*E(JF2)+D(JA,JD)*E(JD))/
+ & D(JA,JB)
+
+C...Normalize and fill in final array.
+ EA=SQRT(E(1)**2+E(2)**2+E(3)**2+E(4)**2)
+ SGN=(-1D0)**INT(PYR(0)+0.5D0)
+ DO 240 J=1,4
+ Z(I,J)=SGN*E(J)/EA
+ 240 CONTINUE
+ 250 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYHGGM
+C...Determines the Higgs boson mass spectrum using several inputs.
+
+ SUBROUTINE PYHGGM(ALPHA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYMSSM/
+
+C...Local variables.
+ DOUBLE PRECISION AT,AB,XMU,TANB,XM32,XMT2
+ DOUBLE PRECISION ALPHA
+ INTEGER I,J,IHOPT,II,JJ,IT
+ DOUBLE PRECISION DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD
+ DOUBLE PRECISION DMU,DMH,DHM,DMHCH,DSA,DCA,DTANBA
+ DOUBLE PRECISION DMC,DMDR,DMHP,DHMP,DAMP
+ DOUBLE PRECISION DSTOP1,DSTOP2,DSBOT1,DSBOT2
+
+ IHOPT=IMSS(4)
+ IF(IHOPT.EQ.2) THEN
+ ALPHA=RMSS(18)
+ RETURN
+ ENDIF
+ AT=RMSS(16)
+ AB=RMSS(15)
+ XMU=RMSS(4)
+ TANB=RMSS(5)
+
+ DMA=RMSS(19)
+ DTANB=TANB
+ DMQ=RMSS(10)
+ DMUR=RMSS(12)
+ DMDR=RMSS(11)
+ DMTOP=PMAS(6,1)
+ DMC=PMAS(PYCOMP(KSUSY1+37),1)
+ DAU=AT
+ DAD=AB
+ DMU=XMU
+
+ IF(IHOPT.EQ.0) THEN
+ CALL PYSUBH (DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD,DMU,DMH,DHM,
+ & DMHCH,DSA,DCA,DTANBA)
+ ELSEIF(IHOPT.EQ.1) THEN
+ CALL PYSUBH (DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD,DMU,DMH,DHM,
+ & DMHCH,DSA,DCA,DTANBA)
+ CALL PYPOLE(3,DMC,DMA,DTANB,DMQ,DMUR,DMDR,DMTOP,DAU,DAD,DMU,
+ & DMH,DMHP,DHM,DHMP,DAMP,DSA,DCA,
+ & DSTOP1,DSTOP2,DSBOT1,DSBOT2,DTANBA)
+ DMH=DMHP
+ DHM=DHMP
+ DMA=DAMP
+ IF(ABS(PMAS(PYCOMP(1000006),1)-DSTOP2).GT.1D-1) THEN
+ WRITE(MSTU(11),*) ' STOP1 MASS DOES NOT MATCH IN PYHGGM '
+ WRITE(MSTU(11),*) ' STOP1 MASSES = ',
+ & PMAS(PYCOMP(1000006),1),DSTOP2
+ ENDIF
+ IF(ABS(PMAS(PYCOMP(2000006),1)-DSTOP1).GT.1D-1) THEN
+ WRITE(MSTU(11),*) ' STOP2 MASS DOES NOT MATCH IN PYHGGM '
+ WRITE(MSTU(11),*) ' STOP2 MASSES = ',
+ & PMAS(PYCOMP(2000006),1),DSTOP1
+ ENDIF
+ IF(ABS(PMAS(PYCOMP(1000005),1)-DSBOT2).GT.1D-1) THEN
+ WRITE(MSTU(11),*) ' SBOT1 MASS DOES NOT MATCH IN PYHGGM '
+ WRITE(MSTU(11),*) ' SBOT1 MASSES = ',
+ & PMAS(PYCOMP(1000005),1),DSBOT2
+ ENDIF
+ IF(ABS(PMAS(PYCOMP(2000005),1)-DSBOT1).GT.1D-1) THEN
+ WRITE(MSTU(11),*) ' SBOT2 MASS DOES NOT MATCH IN PYHGGM '
+ WRITE(MSTU(11),*) ' SBOT2 MASSES = ',
+ & PMAS(PYCOMP(2000005),1),DSBOT1
+ ENDIF
+
+ ENDIF
+
+ ALPHA=ACOS(DCA)
+
+ PMAS(25,1)=DMH
+ PMAS(35,1)=DHM
+ PMAS(36,1)=DMA
+ PMAS(37,1)=DMHCH
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSUBH
+C...This routine computes the renormalization group improved
+C...values of Higgs masses and couplings in the MSSM.
+
+C...Program based on the work by M. Carena, J.R. Espinosa,
+c...M. Quiros and C.E.M. Wagner, CERN-preprint CERN-TH/95-45
+
+C...Input: MA,TANB = TAN(BETA),MQ,MUR,MTOP,AU,AD,MU
+C...All masses in GeV units. MA is the CP-odd Higgs mass,
+C...MTOP is the physical top mass, MQ and MUR are the soft
+C...supersymmetry breaking mass parameters of left handed
+C...and right handed stops respectively, AU and AD are the
+C...stop and sbottom trilinear soft breaking terms,
+C...respectively, and MU is the supersymmetric
+C...Higgs mass parameter. We use the conventions from
+C...the physics report of Haber and Kane: left right
+C...stop mixing term proportional to (AU - MU/TANB)
+C...We use as input TANB defined at the scale MTOP
+
+C...Output: MH,HM,MHCH, SA = SIN(ALPHA), CA= COS(ALPHA), TANBA
+C...where MH and HM are the lightest and heaviest CP-even
+C...Higgs masses, MHCH is the charged Higgs mass and
+C...ALPHA is the Higgs mixing angle
+C...TANBA is the angle TANB at the CP-odd Higgs mass scale
+
+C...Range of validity:
+C...(STOP1**2 - STOP2**2)/(STOP2**2 + STOP1**2) < 0.5
+C...(SBOT1**2 - SBOT2**2)/(SBOT2**2 + SBOT2**2) < 0.5
+C...where STOP1, STOP2, SBOT1 and SBOT2 are the stop and
+C...are the sbottom mass eigenvalues, respectively. This
+C...range automatically excludes the existence of tachyons.
+C...For the charged Higgs mass computation, the method is
+C...valid if
+C...2 * |MB * AD* TANB| < M_SUSY**2, 2 * |MTOP * AU| < M_SUSY**2
+C...2 * |MB * MU * TANB| < M_SUSY**2, 2 * |MTOP * MU| < M_SUSY**2
+C...where M_SUSY**2 is the average of the squared stop mass
+C...eigenvalues, M_SUSY**2 = (STOP1**2 + STOP2**2)/2. The sbottom
+C...masses have been assumed to be of order of the stop ones
+C...M_SUSY**2 = (MQ**2 + MUR**2)*0.5 + MTOP**2
+
+ SUBROUTINE PYSUBH (XMA,TANB,XMQ,XMUR,XMTOP,AU,AD,XMU,XMH,XHM,
+ &XMHCH,SA,CA,TANBA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+C...Local variables.
+ DOUBLE PRECISION PYALEM,PYALPS
+ DOUBLE PRECISION TANB,XMQ,XMUR,XMTOP,AU,AD,XMU,XMH,XHM
+ DOUBLE PRECISION XMHCH,SA,CA
+ DOUBLE PRECISION XMA,AEM,ALP1,ALP2,ALPH3Z,V,PI
+ DOUBLE PRECISION Q02
+ DOUBLE PRECISION TANBA,TANBT,XMB,ALP3
+ DOUBLE PRECISION RMTOP,XMS,T,SINB,COSB
+ DOUBLE PRECISION XLAM1,XLAM2,XLAM3,XLAM4,XLAM5,XLAM6
+ DOUBLE PRECISION XLAM7,XAU,XAD,G1,G2,G3,HU,HD,HU2
+ DOUBLE PRECISION HD2,HU4,HD4,SINBT,COSBT
+ DOUBLE PRECISION TRM2,DETM2,XMH2,XHM2,XMHCH2
+ DOUBLE PRECISION SINALP,COSALP,AUD,PI2,XMS2,XMS4,AD2
+ DOUBLE PRECISION COS2BT,AU2,XMU2,XMZ,XMS3
+
+ XMZ = PMAS(23,1)
+ Q02=XMZ**2
+ AEM=PYALEM(Q02)
+ ALP1=AEM/(1D0-PARU(102))
+ ALP2=AEM/PARU(102)
+ ALPH3Z=PYALPS(Q02)
+
+ ALP1 = 0.0101D0
+ ALP2 = 0.0337D0
+ ALPH3Z = 0.12D0
+
+ V = 174.1D0
+ PI = PARU(1)
+ TANBA = TANB
+ TANBT = TANB
+
+C...MBOTTOM(MTOP) = 3. GEV
+ XMB = 3D0
+ ALP3 = ALPH3Z/(1D0 +(11D0 - 10D0/3D0)/4D0/PI*ALPH3Z*
+ &LOG(XMTOP**2/XMZ**2))
+
+C...RMTOP= RUNNING TOP QUARK MASS
+ RMTOP = XMTOP/(1D0+4D0*ALP3/3D0/PI)
+ XMS = ((XMQ**2 + XMUR**2)/2D0 + XMTOP**2)**0.5D0
+ T = LOG(XMS**2/XMTOP**2)
+ SINB = TANB/((1D0 + TANB**2)**0.5D0)
+ COSB = SINB/TANB
+C...IF(MA.LE.XMTOP) TANBA = TANBT
+ IF(XMA.GT.XMTOP)
+ &TANBA = TANBT*(1D0-3D0/32D0/PI**2*
+ &(RMTOP**2/V**2/SINB**2-XMB**2/V**2/COSB**2)*
+ &LOG(XMA**2/XMTOP**2))
+
+ SINBT = TANBT/SQRT(1D0 + TANBT**2)
+ COSBT = 1D0/SQRT(1D0 + TANBT**2)
+ COS2BT = (TANBT**2 - 1D0)/(TANBT**2 + 1D0)
+ G1 = SQRT(ALP1*4D0*PI)
+ G2 = SQRT(ALP2*4D0*PI)
+ G3 = SQRT(ALP3*4D0*PI)
+ HU = RMTOP/V/SINBT
+ HD = XMB/V/COSBT
+ HU2=HU*HU
+ HD2=HD*HD
+ HU4=HU2*HU2
+ HD4=HD2*HD2
+ AU2=AU**2
+ AD2=AD**2
+ XMS2=XMS**2
+ XMS3=XMS**3
+ XMS4=XMS2*XMS2
+ XMU2=XMU*XMU
+ PI2=PI*PI
+
+ XAU = (2D0*AU2/XMS2)*(1D0 - AU2/12D0/XMS2)
+ XAD = (2D0*AD2/XMS2)*(1D0 - AD2/12D0/XMS2)
+ AUD = (-6D0*XMU2/XMS2 - ( XMU2- AD*AU)**2/XMS4
+ &+ 3D0*(AU + AD)**2/XMS2)/6D0
+ XLAM1 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HD2*T/8D0/PI2)
+ &+(3D0*HD4/8D0/PI2) * (T + XAD/2D0 + (3D0*HD2/2D0 + HU2/2D0
+ &- 8D0*G3**2) * (XAD*T + T**2)/16D0/PI2)
+ &-(3D0*HU4* XMU**4/96D0/PI2/XMS4) * (1+ (9D0*HU2 -5D0* HD2
+ &- 16D0*G3**2) *T/16D0/PI2)
+ XLAM2 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HU2*T/8D0/PI2)
+ &+(3D0*HU4/8D0/PI2) * (T + XAU/2D0 + (3D0*HU2/2D0 + HD2/2D0
+ &- 8D0*G3**2) * (XAU*T + T**2)/16D0/PI2)
+ &-(3D0*HD4* XMU**4/96D0/PI2/XMS4) * (1+ (9D0*HD2 -5D0* HU2
+ &- 16D0*G3**2) *T/16D0/PI2)
+ XLAM3 = ((G2**2 - G1**2)/4D0)*(1D0-3D0*
+ &(HU2 + HD2)*T/16D0/PI2)
+ &+(6D0*HU2*HD2/16D0/PI2) * (T + AUD/2D0 + (HU2 + HD2
+ &- 8D0*G3**2) * (AUD*T + T**2)/16D0/PI2)
+ &+(3D0*HU4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AU2/
+ &XMS4)* (1D0+ (6D0*HU2 -2D0* HD2/2D0
+ &- 16D0*G3**2) *T/16D0/PI2)
+ &+(3D0*HD4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AD2/
+ &XMS4)*(1D0+ (6D0*HD2 -2D0* HU2
+ &- 16D0*G3**2) *T/16D0/PI2)
+ XLAM4 = (- G2**2/2D0)*(1D0-3D0*(HU2 + HD2)*T/16D0/PI2)
+ &-(6D0*HU2*HD2/16D0/PI2) * (T + AUD/2D0 + (HU2 + HD2
+ &- 8D0*G3**2) * (AUD*T + T**2)/16D0/PI2)
+ &+(3D0*HU4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AU2/
+ &XMS4)*
+ &(1+ (6D0*HU2 -2D0* HD2
+ &- 16D0*G3**2) *T/16D0/PI2)
+ &+(3D0*HD4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AD2/
+ &XMS4)*
+ &(1+ (6D0*HD2 -2D0* HU2/2D0
+ &- 16D0*G3**2) *T/16D0/PI2)
+ XLAM5 = -(3D0*HU4* XMU2*AU2/96D0/PI2/XMS4) *
+ &(1- (2D0*HD2 -6D0* HU2 + 16D0*G3**2) *T/16D0/PI2)
+ &-(3D0*HD4* XMU2*AD2/96D0/PI2/XMS4) *
+ &(1- (2D0*HU2 -6D0* HD2 + 16D0*G3**2) *T/16D0/PI2)
+ XLAM6 = (3D0*HU4* XMU**3*AU/96D0/PI2/XMS4) *
+ &(1- (7D0*HD2/2D0 -15D0* HU2/2D0 + 16D0*G3**2) *T/16D0/PI2)
+ &+(3D0*HD4* XMU *(AD**3/XMS3 - 6D0*AD/XMS )/96D0/PI2/XMS) *
+ &(1- (HU2/2D0 -9D0* HD2/2D0 + 16D0*G3**2) *T/16D0/PI2)
+ XLAM7 = (3D0*HD4* XMU**3*AD/96D0/PI2/XMS4) *
+ &(1- (7D0*HU2/2D0 -15D0* HD2/2D0 + 16D0*G3**2) *T/16D0/PI2)
+ &+(3D0*HU4* XMU *(AU**3/XMS3 - 6D0*AU/XMS )/96D0/PI2/XMS) *
+ &(1- (HD2/2D0 -9D0* HU2/2D0 + 16D0*G3**2) *T/16D0/PI2)
+ TRM2 = XMA**2 + 2D0*V**2* (XLAM1* COSBT**2 +
+ &2D0* XLAM6*SINBT*COSBT
+ &+ XLAM5*SINBT**2 + XLAM2* SINBT**2 + 2D0* XLAM7*SINBT*COSBT
+ &+ XLAM5*COSBT**2)
+ DETM2 = 4D0*V**4*(-(SINBT*COSBT*(XLAM3 + XLAM4) +
+ &XLAM6*COSBT**2
+ &+ XLAM7* SINBT**2)**2 + (XLAM1* COSBT**2 +
+ &2D0* XLAM6* COSBT*SINBT
+ &+ XLAM5*SINBT**2)*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
+ &+ XLAM5*COSBT**2)) + XMA**2*2D0*V**2 *
+ &((XLAM1* COSBT**2 +2D0*
+ &XLAM6* COSBT*SINBT + XLAM5*SINBT**2)*COSBT**2 +
+ &(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT + XLAM5*COSBT**2)
+ &*SINBT**2
+ &+2D0*SINBT*COSBT* (SINBT*COSBT*(XLAM3
+ &+ XLAM4) + XLAM6*COSBT**2
+ &+ XLAM7* SINBT**2))
+
+ XMH2 = (TRM2 - SQRT(TRM2**2 - 4D0* DETM2))/2D0
+ XHM2 = (TRM2 + SQRT(TRM2**2 - 4D0* DETM2))/2D0
+ XHM = SQRT(XHM2)
+ XMH = SQRT(XMH2)
+ XMHCH2 = XMA**2 + (XLAM5 - XLAM4)* V**2
+ XMHCH = SQRT(XMHCH2)
+
+ SINALP = SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0) -
+ &((2D0*V**2*(XLAM1* COSBT**2 + 2D0*
+ &XLAM6* COSBT*SINBT
+ &+ XLAM5*SINBT**2) + XMA**2*SINBT**2)
+ &- (2D0*V**2*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
+ &+ XLAM5*COSBT**2) + XMA**2*COSBT**2)))/
+ &SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0))/2D0**0.5D0
+
+ COSALP = (2D0*(2D0*V**2*(SINBT*COSBT*(XLAM3 + XLAM4) +
+ &XLAM6*COSBT**2 + XLAM7* SINBT**2) -
+ &XMA**2*SINBT*COSBT))/2D0**0.5D0/
+ &SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0)*
+ &(((TRM2**2 - 4D0* DETM2)**0.5D0) -
+ &((2D0*V**2*(XLAM1* COSBT**2 + 2D0*
+ &XLAM6* COSBT*SINBT
+ &+ XLAM5*SINBT**2) + XMA**2*SINBT**2)
+ &- (2D0*V**2*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
+ &+ XLAM5*COSBT**2) + XMA**2*COSBT**2))))
+
+ SA = -SINALP
+ CA = -COSALP
+
+ 100 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPOLE
+C...This subroutine computes the CP-even higgs and CP-odd pole
+c...Higgs masses and mixing angles.
+
+C...Program based on the work by M. Carena, M. Quiros
+C...and C.E.M. Wagner, "Effective potential methods and
+C...the Higgs mass spectrum in the MSSM", CERN-TH/95-157
+
+C...Inputs: IHIGGS(explained below),MCHI,MA,TANB,MQ,MUR,MDR,MTOP,
+C...AT,AB,MU
+C...where MCHI is the largest chargino mass, MA is the running
+C...CP-odd higgs mass, TANB is the value of the ratio of vacuum
+C...expectaion values at the scale MTOP, MQ is the third generation
+C...left handed squark mass parameter, MUR is the third generation
+C...right handed stop mass parameter, MDR is the third generation
+C...right handed sbottom mass parameter, MTOP is the pole top quark
+C...mass; AT,AB are the soft supersymmetry breaking trilinear
+C...couplings of the stop and sbottoms, respectively, and MU is the
+C...supersymmetric mass parameter
+
+C...The parameter IHIGGS=0,1,2,3 corresponds to the
+c...number of Higgses whose pole mass is computed
+c...by the subroutine PYVACU(...). If IHIGGS=0 only running
+c...masses are given, what makes the running of the program
+c...much faster and it is quite generally a good approximation
+c...(for a theoretical discussion see ref. below).
+c...If IHIGGS=1, only the pole
+c...mass for H is computed. If IHIGGS=2, then h and H, and
+c...if IHIGGS=3, then h,H,A polarizations are computed
+
+C...Output: MH and MHP which are the lightest CP-even Higgs running
+C...and pole masses, respectively; HM and HMP are the heaviest CP-even
+C...Higgs running and pole masses, repectively; SA and CA are the
+C...SIN(ALPHA) and COS(ALPHA) where ALPHA is the Higgs mixing angle
+C...AMP is the CP-odd Higgs pole mass. STOP1,STOP2,SBOT1 and SBOT2
+C...are the stop and sbottom mass eigenvalues. Finally, TANBA is
+C...the value of TANB at the CP-odd Higgs mass scale
+
+C...This subroutine makes use of CERN library subroutine
+C...integration package, which makes the computation of the
+C...pole Higgs masses somewhat faster. We thank P. Janot for this
+C...improvement. Those who are not able to call the CERN
+C...libraries, please use the subroutine SUBHPOLE2.F, which
+C...although somewhat slower, gives identical results
+
+ SUBROUTINE PYPOLE(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,XMU,
+ &XMH,XMHP,HM,HMP,AMP,SA,CA,STOP1,STOP2,SBOT1,SBOT2,TANBA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+ CALL PYVACU(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,XMU,
+ &XMH,XMHP,HM,HMP,AMP,STOP1,STOP2,SBOT1,SBOT2,
+ &SA,CA,STOP1W,STOP2W,TANBA)
+ SINB = TANB/(TANB**2+1D0)**0.5D0
+ COSB = 1D0/(TANB**2+1D0)**0.5D0
+ SINBMA = SINB*CA - COSB*SA
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYVACU
+C...Computes Higgs masses and mixing angles, see PYPOLE above.
+
+ SUBROUTINE PYVACU(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,
+ &XMT,AT,AB,XMU,XMH,XMHP,HM,HMP,AMP,STOP1,STOP2,
+ &SBOT1,SBOT2,SA,CA,STOP1W,STOP2W,TANBA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Parameters.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DIMENSION DELTA(2,2),COUPT(2,2),T(2,2),SSTOP2(2),
+ &SSBOT2(2),B(2,2),COUPB(2,2),
+ &HCOUPT(2,2),HCOUPB(2,2),
+ &ACOUPT(2,2),ACOUPB(2,2),PR(3), POLAR(3)
+
+ DELTA(1,1) = 1D0
+ DELTA(2,2) = 1D0
+ DELTA(1,2) = 0D0
+ DELTA(2,1) = 0D0
+ V = 174.1D0
+ XMZ=91.18D0
+ PI=3.14159D0
+ ALP3Z=0.12D0
+ ALP3=1D0/(1D0/ALP3Z+23D0/6D0/PI*LOG(XMT/XMZ))
+
+C RXMT = XMT/(1D0+4*ALP3/3D0/PI)
+ RXMT = PYRNMT(XMT)
+
+ HT = RXMT /V
+ CALL PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,
+ &XMU,XMH,HM,SA,CA,TANBA)
+ SINB = TANB/(TANB**2+1D0)**0.5D0
+ COSB = 1D0/(TANB**2+1D0)**0.5D0
+ COS2B = SINB**2 - COSB**2
+ SINBPA = SINB*CA + COSB*SA
+ COSBPA = COSB*CA - SINB*SA
+ RMBOT = 3D0
+ XMQ2 = XMQ**2
+ XMUR2 = XMUR**2
+ IF(XMUR.LT.0D0) XMUR2=-XMUR2
+ XMDR2 = XMDR**2
+ XMST11 = RXMT**2 + XMQ2 - 0.35D0*XMZ**2*COS2B
+ XMST22 = RXMT**2 + XMUR2 - 0.15D0*XMZ**2*COS2B
+ IF(XMST11.LT.0D0) GOTO 500
+ IF(XMST22.LT.0D0) GOTO 500
+ XMSB11 = RMBOT**2 + XMQ2 + 0.42D0*XMZ**2*COS2B
+ XMSB22 = RMBOT**2 + XMDR2 + 0.08D0*XMZ**2*COS2B
+ IF(XMSB11.LT.0D0) GOTO 500
+ IF(XMSB22.LT.0D0) GOTO 500
+ WMST11 = RXMT**2 + XMQ2
+ WMST22 = RXMT**2 + XMUR2
+ XMST12 = RXMT*(AT - XMU/TANB)
+ XMSB12 = RMBOT*(AB - XMU*TANB)
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...STOP EIGENVALUES CALCULATION
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ STOP12 = 0.5D0*(XMST11+XMST22) +
+ &0.5D0*((XMST11+XMST22)**2 -
+ &4D0*(XMST11*XMST22 - XMST12**2))**0.5D0
+ STOP22 = 0.5D0*(XMST11+XMST22) -
+ &0.5D0*((XMST11+XMST22)**2 - 4D0*(XMST11*XMST22 -
+ &XMST12**2))**0.5D0
+
+ IF(STOP22.LT.0D0) GOTO 500
+ SSTOP2(1) = STOP12
+ SSTOP2(2) = STOP22
+ STOP1 = STOP12**0.5D0
+ STOP2 = STOP22**0.5D0
+ STOP1W = STOP1
+ STOP2W = STOP2
+
+ IF(XMST12.EQ.0D0) XST11 = 1D0
+ IF(XMST12.EQ.0D0) XST12 = 0D0
+ IF(XMST12.EQ.0D0) XST21 = 0D0
+ IF(XMST12.EQ.0D0) XST22 = 1D0
+
+ IF(XMST12.EQ.0D0) GOTO 110
+
+ 100 XST11 = XMST12/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
+ XST12 = - (XMST11-STOP12)/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
+ XST21 = XMST12/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
+ XST22 = - (XMST11-STOP22)/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
+
+ 110 T(1,1) = XST11
+ T(2,2) = XST22
+ T(1,2) = XST12
+ T(2,1) = XST21
+
+ SBOT12 = 0.5D0*(XMSB11+XMSB22) +
+ &0.5D0*((XMSB11+XMSB22)**2 -
+ &4D0*(XMSB11*XMSB22 - XMSB12**2))**0.5D0
+ SBOT22 = 0.5D0*(XMSB11+XMSB22) -
+ &0.5D0*((XMSB11+XMSB22)**2 - 4D0*(XMSB11*XMSB22 -
+ &XMSB12**2))**0.5D0
+ IF(SBOT22.LT.0D0) GOTO 500
+ SBOT1 = SBOT12**0.5D0
+ SBOT2 = SBOT22**0.5D0
+
+ SSBOT2(1) = SBOT12
+ SSBOT2(2) = SBOT22
+
+ IF(XMSB12.EQ.0D0) XSB11 = 1D0
+ IF(XMSB12.EQ.0D0) XSB12 = 0D0
+ IF(XMSB12.EQ.0D0) XSB21 = 0D0
+ IF(XMSB12.EQ.0D0) XSB22 = 1D0
+
+ IF(XMSB12.EQ.0D0) GOTO 130
+
+ 120 XSB11 = XMSB12/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
+ XSB12 = - (XMSB11-SBOT12)/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
+ XSB21 = XMSB12/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
+ XSB22 = - (XMSB11-SBOT22)/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
+
+ 130 B(1,1) = XSB11
+ B(2,2) = XSB22
+ B(1,2) = XSB12
+ B(2,1) = XSB21
+
+
+ SINT = 0.2320D0
+ SQR = 2D0**0.5D0
+ VP = 174.1D0*SQR
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...STARTING OF LIGHT HIGGS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ IF(IHIGGS.EQ.0) GOTO 490
+
+ DO 150 I = 1,2
+ DO 140 J = 1,2
+ COUPT(I,J) =
+ & SINT*XMZ**2*2D0*SQR/174.1D0/3D0*SINBPA*(DELTA(I,J) +
+ & (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
+ & -RXMT**2/174.1D0**2*VP/SINB*CA*DELTA(I,J)
+ & -RXMT/VP/SINB*(AT*CA + XMU*SA)*(T(1,I)*T(2,J) +
+ & T(1,J)*T(2,I))
+ 140 CONTINUE
+ 150 CONTINUE
+
+
+ DO 170 I = 1,2
+ DO 160 J = 1,2
+ COUPB(I,J) =
+ & -SINT*XMZ**2*2D0*SQR/174.1D0/6D0*SINBPA*(DELTA(I,J) +
+ & (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
+ & +RMBOT**2/174.1D0**2*VP/COSB*SA*DELTA(I,J)
+ & +RMBOT/VP/COSB*(AB*SA + XMU*CA)*(B(1,I)*B(2,J) +
+ & B(1,J)*B(2,I))
+ 160 CONTINUE
+ 170 CONTINUE
+
+ PRUN = XMH
+ EPS = 1D-4*PRUN
+ ITER = 0
+ 180 ITER = ITER + 1
+ DO 230 I3 = 1,3
+
+ PR(I3)=PRUN+(I3-2)*EPS/2
+ P2=PR(I3)**2
+ POLT = 0D0
+ DO 200 I = 1,2
+ DO 190 J = 1,2
+ POLT = POLT + COUPT(I,J)**2*3D0*
+ & PYFINT(P2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
+ 190 CONTINUE
+ 200 CONTINUE
+ POLB = 0D0
+ DO 220 I = 1,2
+ DO 210 J = 1,2
+ POLB = POLB + COUPB(I,J)**2*3D0*
+ & PYFINT(P2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
+ 210 CONTINUE
+ 220 CONTINUE
+ RXMT2 = RXMT**2
+ XMT2=XMT**2
+
+ POLTT =
+ & 3D0*RXMT**2/8D0/PI**2/ V **2*
+ & CA**2/SINB**2 *
+ & (-2D0*XMT**2+0.5D0*P2)*
+ & PYFINT(P2,XMT2,XMT2)
+
+ POL = POLT + POLB + POLTT
+ POLAR(I3) = P2 - XMH**2 - POL
+ 230 CONTINUE
+ DERIV = (POLAR(3)-POLAR(1))/EPS
+ DRUN = - POLAR(2)/DERIV
+ PRUN = PRUN + DRUN
+ P2 = PRUN**2
+ IF( ABS(DRUN) .LT. 1D-4 ) GOTO 240
+ GOTO 180
+ 240 CONTINUE
+
+ XMHP = P2**0.5D0
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...END OF LIGHT HIGGS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ 250 IF(IHIGGS.EQ.1) GOTO 490
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C... STARTING OF HEAVY HIGGS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ DO 270 I = 1,2
+ DO 260 J = 1,2
+ HCOUPT(I,J) =
+ & -SINT*XMZ**2*2D0*SQR/174.1D0/3D0*COSBPA*(DELTA(I,J) +
+ & (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
+ & -RXMT**2/174.1D0**2*VP/SINB*SA*DELTA(I,J)
+ & -RXMT/VP/SINB*(AT*SA - XMU*CA)*(T(1,I)*T(2,J) +
+ & T(1,J)*T(2,I))
+ 260 CONTINUE
+ 270 CONTINUE
+
+ DO 290 I = 1,2
+ DO 280 J = 1,2
+ HCOUPB(I,J) =
+ & SINT*XMZ**2*2D0*SQR/174.1D0/6D0*COSBPA*(DELTA(I,J) +
+ & (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
+ & -RMBOT**2/174.1D0**2*VP/COSB*CA*DELTA(I,J)
+ & -RMBOT/VP/COSB*(AB*CA - XMU*SA)*(B(1,I)*B(2,J) +
+ & B(1,J)*B(2,I))
+ HCOUPB(I,J)=0D0
+ 280 CONTINUE
+ 290 CONTINUE
+
+ PRUN = HM
+ EPS = 1D-4*PRUN
+ ITER = 0
+ 300 ITER = ITER + 1
+ DO 350 I3 = 1,3
+ PR(I3)=PRUN+(I3-2)*EPS/2
+ HP2=PR(I3)**2
+
+ HPOLT = 0D0
+ DO 320 I = 1,2
+ DO 310 J = 1,2
+ HPOLT = HPOLT + HCOUPT(I,J)**2*3D0*
+ & PYFINT(HP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
+ 310 CONTINUE
+ 320 CONTINUE
+
+ HPOLB = 0D0
+ DO 340 I = 1,2
+ DO 330 J = 1,2
+ HPOLB = HPOLB + HCOUPB(I,J)**2*3D0*
+ & PYFINT(HP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
+ 330 CONTINUE
+ 340 CONTINUE
+
+ RXMT2 = RXMT**2
+ XMT2 = XMT**2
+
+ HPOLTT =
+ & 3D0*RXMT**2/8D0/PI**2/ V **2*
+ & SA**2/SINB**2 *
+ & (-2D0*XMT**2+0.5D0*HP2)*
+ & PYFINT(HP2,XMT2,XMT2)
+
+ HPOL = HPOLT + HPOLB + HPOLTT
+ POLAR(I3) =HP2-HM**2-HPOL
+ 350 CONTINUE
+ DERIV = (POLAR(3)-POLAR(1))/EPS
+ DRUN = - POLAR(2)/DERIV
+ PRUN = PRUN + DRUN
+ HP2 = PRUN**2
+ IF( ABS(DRUN) .LT. 1D-4 ) GOTO 360
+ GOTO 300
+ 360 CONTINUE
+
+
+ 370 CONTINUE
+ HMP = HP2**0.5D0
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C... END OF HEAVY HIGGS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ IF(IHIGGS.EQ.2) GOTO 490
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...BEGINNING OF PSEUDOSCALAR HIGGS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ DO 390 I = 1,2
+ DO 380 J = 1,2
+ ACOUPT(I,J) =
+ & -RXMT/VP/SINB*(AT*COSB + XMU*SINB)*
+ & (T(1,I)*T(2,J) -T(1,J)*T(2,I))
+ 380 CONTINUE
+ 390 CONTINUE
+ DO 410 I = 1,2
+ DO 400 J = 1,2
+ ACOUPB(I,J) =
+ & RMBOT/VP/COSB*(AB*SINB + XMU*COSB)*
+ & (B(1,I)*B(2,J) -B(1,J)*B(2,I))
+ 400 CONTINUE
+ 410 CONTINUE
+
+ PRUN = XMA
+ EPS = 1D-4*PRUN
+ ITER = 0
+ 420 ITER = ITER + 1
+ DO 470 I3 = 1,3
+ PR(I3)=PRUN+(I3-2)*EPS/2
+ AP2=PR(I3)**2
+ APOLT = 0D0
+ DO 440 I = 1,2
+ DO 430 J = 1,2
+ APOLT = APOLT + ACOUPT(I,J)**2*3D0*
+ & PYFINT(AP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
+ 430 CONTINUE
+ 440 CONTINUE
+ APOLB = 0D0
+ DO 460 I = 1,2
+ DO 450 J = 1,2
+ APOLB = APOLB + ACOUPB(I,J)**2*3D0*
+ & PYFINT(AP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
+ 450 CONTINUE
+ 460 CONTINUE
+ RXMT2 = RXMT**2
+ XMT2=XMT**2
+ APOLTT =
+ & 3D0*RXMT**2/8D0/PI**2/ V **2*
+ & COSB**2/SINB**2 *
+ & (-0.5D0*AP2)*
+ & PYFINT(AP2,XMT2,XMT2)
+ APOL = APOLT + APOLB + APOLTT
+ POLAR(I3) = AP2 - XMA**2 -APOL
+ 470 CONTINUE
+ DERIV = (POLAR(3)-POLAR(1))/EPS
+ DRUN = - POLAR(2)/DERIV
+ PRUN = PRUN + DRUN
+ AP2 = PRUN**2
+ IF( ABS(DRUN) .LT. 1D-4 ) GOTO 480
+ GOTO 420
+ 480 CONTINUE
+
+ AMP = AP2**0.5D0
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...END OF PSEUDOSCALAR HIGGS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ IF(IHIGGS.EQ.3) GOTO 490
+
+ 490 CONTINUE
+ RETURN
+ 500 CONTINUE
+ WRITE(MSTU(11),*) ' EXITING IN PYVACU '
+ WRITE(MSTU(11),*) ' XMST11,XMST22 = ',XMST11,XMST22
+ WRITE(MSTU(11),*) ' XMSB11,XMSB22 = ',XMSB11,XMSB22
+ WRITE(MSTU(11),*) ' STOP22,SBOT22 = ',STOP22,SBOT22
+ STOP
+ END
+
+C*********************************************************************
+
+C...PYRGHM
+C...Auxiliary routine to PYVACU for SUSY Higgs calculations.
+
+ SUBROUTINE PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDL,XMT,AU,AD,XMU,
+ &XMHP,HMP,SA,CA,TANBA)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DIMENSION VH(2,2),XM2(2,2),XM2P(2,2)
+
+ XMZ = 91.18D0
+ ALP1 = 0.0101D0
+ ALP2 = 0.0337D0
+ ALP3Z = 0.12D0
+ V = 174.1D0
+ PI = 3.14159D0
+ TANBA = TANB
+ TANBT = TANB
+
+C...MBOTTOM(XMT) = 3. GEV
+ XMB = 3D0
+ ALP3 = ALP3Z/(1D0 +(11D0 - 10D0/3D0)/4D0/PI*ALP3Z*
+ &LOG(XMT**2/XMZ**2))
+
+C...RXMT= RUNNING TOP QUARK MASS
+ RXMT = XMT/(1D0+4D0*ALP3/3D0/PI)
+ TQ = LOG((XMQ**2+XMT**2)/XMT**2)
+ TU = LOG((XMUR**2 + XMT**2)/XMT**2)
+ TD = LOG((XMDL**2 + XMT**2)/XMT**2)
+ SINB = TANB/((1D0 + TANB**2)**0.5D0)
+ COSB = SINB/TANB
+ IF(XMA.GT.XMT)
+ &TANBA = TANB*(1D0-3D0/32D0/PI**2*
+ &(RXMT**2/V**2/SINB**2-XMB**2/V**2/COSB**2)*
+ &LOG(XMA**2/XMT**2))
+ IF(XMA.LT.XMT.OR.XMA.EQ.XMT) TANBT = TANBA
+ SINB = TANBT/((1D0 + TANBT**2)**0.5D0)
+ COSB = 1D0/((1D0 + TANBT**2)**0.5D0)
+ COS2B = (TANBT**2 - 1D0)/(TANBT**2 + 1D0)
+ G1 = (ALP1*4D0*PI)**0.5D0
+ G2 = (ALP2*4D0*PI)**0.5D0
+ G3 = (ALP3*4D0*PI)**0.5D0
+ HU = RXMT/V/SINB
+ HD = XMB/V/COSB
+
+ CALL PYGFXX(XMA,TANBA,XMQ,XMUR,XMDL,XMT,AU,AD,
+ &XMU,VH,STOP1,STOP2)
+
+ IF(XMQ.GT.XMUR) TP = TQ - TU
+ IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) TP = TU - TQ
+ IF(XMQ.GT.XMUR) TDP = TU
+ IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) TDP = TQ
+ IF(XMQ.GT.XMDL) TPD = TQ - TD
+ IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) TPD = TD - TQ
+ IF(XMQ.GT.XMDL) TDPD = TD
+ IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) TDPD = TQ
+
+ IF(XMQ.GT.XMDL) DLAM1 = 6D0/96D0/PI**2*G1**2*HD**2*TPD
+ IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) DLAM1 = 3D0/32D0/PI**2*
+ &HD**2*(G1**2/3D0+G2**2)*TPD
+
+ IF(XMQ.GT.XMUR) DLAM2 =12D0/96D0/PI**2*G1**2*HU**2*TP
+ IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) DLAM2 = 3D0/32D0/PI**2*
+ &HU**2*(-G1**2/3D0+G2**2)*TP
+
+ DLAM3 = 0D0
+ DLAM4 = 0D0
+
+ IF(XMQ.GT.XMDL) DLAM3 = -1D0/32D0/PI**2*G1**2*HD**2*TPD
+ IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) DLAM3 = 3D0/64D0/PI**2*HD**2*
+ &(G2**2-G1**2/3D0)*TPD
+
+ IF(XMQ.GT.XMUR) DLAM3 = DLAM3 -
+ &1D0/16D0/PI**2*G1**2*HU**2*TP
+ IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) DLAM3 = DLAM3 +
+ &3D0/64D0/PI**2*HU**2*(G2**2+G1**2/3D0)*TP
+
+ IF(XMQ.LT.XMUR) DLAM4 = -3D0/32D0/PI**2*G2**2*HU**2*TP
+ IF(XMQ.LT.XMDL) DLAM4 = DLAM4 - 3D0/32D0/PI**2*G2**2*
+ &HD**2*TPD
+
+ XLAM1 = ((G1**2 + G2**2)/4D0)*
+ &(1D0-3D0*HD**2*(TPD + TDPD)/8D0/PI**2)
+ &+(3D0*HD**4/16D0/PI**2) *TPD*(1D0
+ &+ (3D0*HD**2/2D0 + HU**2/2D0
+ &- 8D0*G3**2) * (TPD + 2D0*TDPD)/16D0/PI**2)
+ &+(3D0*HD**4/8D0/PI**2) *TDPD*(1D0 + (3D0*HD**2/2D0 + HU**2/2D0
+ &- 8D0*G3**2) * TDPD/16D0/PI**2) + DLAM1
+ XLAM2 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HU**2*
+ &(TP + TDP)/8D0/PI**2)
+ &+(3D0*HU**4/16D0/PI**2) *TP*(1D0
+ &+ (3D0*HU**2/2D0 + HD**2/2D0
+ &- 8D0*G3**2) * (TP + 2D0*TDP)/16D0/PI**2)
+ &+(3D0*HU**4/8D0/PI**2) *TDP*(1D0 + (3D0*HU**2/2D0 + HD**2/2D0
+ &- 8D0*G3**2) * TDP/16D0/PI**2) + DLAM2
+ XLAM3 = ((G2**2 - G1**2)/4D0)*(1D0-3D0*
+ &(HU**2)*(TP + TDP)/16D0/PI**2 -3D0*
+ &(HD**2)*(TPD + TDPD)/16D0/PI**2) +DLAM3
+ XLAM4 = (- G2**2/2D0)*(1D0
+ &-3D0*(HU**2)*(TP + TDP)/16D0/PI**2
+ &-3D0*(HD**2)*(TPD + TDPD)/16D0/PI**2) +DLAM4
+
+ XLAM5 = 0D0
+ XLAM6 = 0D0
+ XLAM7 = 0D0
+
+ XM2(1,1) = 2D0*V**2*(XLAM1*COSB**2+2D0*XLAM6*
+ &COSB*SINB + XLAM5*SINB**2) + XMA**2*SINB**2
+
+ XM2(2,2) = 2D0*V**2*(XLAM5*COSB**2+2D0*XLAM7*
+ &COSB*SINB + XLAM2*SINB**2) + XMA**2*COSB**2
+ XM2(1,2) = 2D0*V**2*(XLAM6*COSB**2+(XLAM3+XLAM4)*
+ &COSB*SINB + XLAM7*SINB**2) - XMA**2*SINB*COSB
+
+ XM2(2,1) = XM2(1,2)
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...THIS IS THE CONTRIBUTION FROM LIGHT CHARGINOS/NEUTRALINOS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ XMSSU=(0.5D0*(XMQ**2+XMUR**2)+XMT**2)**0.5D0
+
+ IF(XMC.GT.XMSSU) GOTO 100
+ IF(XMC.LT.XMT) XMC=XMT
+
+ TCHAR=LOG(XMSSU**2/XMC**2)
+
+ DEL12=(9D0/64D0/PI**2*G2**4+5D0/192D0/PI**2*G1**4)*TCHAR
+ DEL3P4=(3D0/64D0/PI**2*G2**4+7D0/192D0/PI**2*G1**4
+ &+4D0/32/PI**2*G1**2*G2**2)*TCHAR
+
+ DEM112=2D0*DEL12*V**2*COSB**2
+ DEM222=2D0*DEL12*V**2*SINB**2
+ DEM122=2D0*DEL3P4*V**2*SINB*COSB
+
+ XM2(1,1)=XM2(1,1)+DEM112
+ XM2(2,2)=XM2(2,2)+DEM222
+ XM2(1,2)=XM2(1,2)+DEM122
+ XM2(2,1)=XM2(2,1)+DEM122
+
+ 100 CONTINUE
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...END OF CHARGINOS/NEUTRALINOS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+
+ DO 120 I = 1,2
+ DO 110 J = 1,2
+ XM2P(I,J) = XM2(I,J) + VH(I,J)
+ 110 CONTINUE
+ 120 CONTINUE
+
+ TRM2P = XM2P(1,1) + XM2P(2,2)
+ DETM2P = XM2P(1,1)*XM2P(2,2) - XM2P(1,2)*XM2P(2,1)
+
+ XMH2P = (TRM2P - (TRM2P**2 - 4D0* DETM2P)**0.5D0)/2D0
+ HM2P = (TRM2P + (TRM2P**2 - 4D0* DETM2P)**0.5D0)/2D0
+ HMP = HM2P**0.5D0
+ IF(XMH2P.LT.0D0) GOTO 130
+ XMHP = XMH2P**0.5D0
+ S2ALP = 2D0*XM2P(1,2)/(TRM2P**2-4D0*DETM2P)**0.5D0
+ C2ALP = (XM2P(1,1)-XM2P(2,2))/(TRM2P**2-4D0*DETM2P)**0.5D0
+ IF(C2ALP.GT.0D0) ALP = ASIN(S2ALP)/2D0
+ IF(C2ALP.LT.0D0) ALP = -PI/2D0-ASIN(S2ALP)/2D0
+ SA = SIN(ALP)
+ CA = COS(ALP)
+ SQBMA = (SINB*CA - COSB*SA)**2
+ 130 XIN = 1D0
+ 140 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGFXX
+C...Auxiliary routine to PYRGHM for SUSY Higgs calculations.
+
+ SUBROUTINE PYGFXX(XMA,TANB,XMQ,XMUR,XMDL,XMT,AT,AB,XMU,VH,
+ &STOP1,STOP2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DIMENSION DIAH(2),VH(2,2),VH1(2,2),VH2(2,2),
+ &VH3T(2,2),VH3B(2,2),
+ &HMIX(2,2),AL(2,2),XM2(2,2)
+
+C...Statement function.
+ G(X,Y) = 2D0 - (X+Y)/(X-Y)*LOG(X/Y)
+
+ IF(DABS(XMU).LT.0.000001D0) XMU = 0.000001D0
+ XMQ2 = XMQ**2
+ XMUR2 = XMUR**2
+ XMDL2 = XMDL**2
+ TANBA = TANB
+ SINBA = TANBA/(TANBA**2+1D0)**0.5D0
+ COSBA = SINBA/TANBA
+
+ SINB = TANB/(TANB**2+1D0)**0.5D0
+ COSB = SINB/TANB
+ PI = 3.14159D0
+ G2 = (0.0336D0*4D0*PI)**0.5D0
+ G12 = (0.0101D0*4D0*PI)
+ G1 = G12**0.5D0
+ XMZ = 91.18D0
+ V = 174.1D0
+ MW = (G2**2*V**2/2D0)**0.5D0
+ ALP3 = 0.12D0/(1D0+23/12D0/PI*0.12D0*LOG(XMT**2/XMZ**2))
+
+ XMB = 3D0
+ IF(XMQ.GT.XMUR) XMST = XMQ
+ IF(XMUR.GT.XMQ.OR.XMUR.EQ.XMQ) XMST = XMUR
+
+ XMSUT = (XMST**2 + XMT**2)**0.5D0
+
+ IF(XMQ.GT.XMDL) XMSB = XMQ
+ IF(XMDL.GT.XMQ.OR.XMDL.EQ.XMQ) XMSB = XMDL
+
+ XMSUB = (XMSB**2 + XMB**2)**0.5D0
+
+ TT = LOG(XMSUT**2/XMT**2)
+ TB = LOG(XMSUB**2/XMT**2)
+
+ RXMT = XMT/(1D0+4D0*ALP3/3D0/PI)
+ HT = RXMT/(174.1D0*SINB)
+ HTST = RXMT/174.1D0
+ HB = XMB/174.1D0/COSB
+ G32 = ALP3*4D0*PI
+ BT2 = -(8D0*G32 - 9D0*HT**2/2D0 - HB**2/2D0)/(4D0*PI)**2
+ BB2 = -(8D0*G32 - 9D0*HB**2/2D0 - HT**2/2D0)/(4D0*PI)**2
+ AL2 = 3D0/8D0/PI**2*HT**2
+ BT2ST = -(8D0*G32 - 9D0*HTST**2/2D0)/(4D0*PI)**2
+ ALST = 3D0/8D0/PI**2*HTST**2
+ AL1 = 3D0/8D0/PI**2*HB**2
+
+ AL(1,1) = AL1
+ AL(1,2) = (AL2+AL1)/2D0
+ AL(2,1) = (AL2+AL1)/2D0
+ AL(2,2) = AL2
+
+ XMT4 = RXMT**4*(1D0+2D0*BT2*TT- AL2*TT)
+ XMT2 = SQRT(XMT4)
+ XMBOT4 = XMB**4*(1D0+2D0*BB2*TB - AL1*TB)
+ XMBOT2 = SQRT(XMBOT4)
+
+ IF(XMA.GT.XMT) THEN
+ VI = 174.1D0*(1D0 + 3D0/32D0/PI**2*HTST**2*
+ & LOG(XMT**2/XMA**2))
+ H1I = VI* COSBA
+ H2I = VI*SINBA
+ H1T = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMA**2/XMSUT**2))**0.25D0
+ H2T = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMA**2/XMSUT**2))**0.25D0
+ H1B = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMA**2/XMSUB**2))**0.25D0
+ H2B = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMA**2/XMSUB**2))**0.25D0
+ ELSE
+ VI = 174.1D0
+ H1I = VI*COSB
+ H2I = VI*SINB
+ H1T = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMT**2/XMSUT**2))**0.25D0
+ H2T = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMT**2/XMSUT**2))**0.25D0
+ H1B = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMT**2/XMSUB**2))**0.25D0
+ H2B = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMT**2/XMSUB**2))**0.25D0
+ ENDIF
+
+ TANBST = H2T/H1T
+ SINBT = TANBST/(1D0+TANBST**2)**0.5D0
+ COSBT = SINBT/TANBST
+
+ TANBSB = H2B/H1B
+ SINBB = TANBSB/(1D0+TANBSB**2)**0.5D0
+ COSBB = SINBB/TANBSB
+
+ STOP12 = (XMQ2 + XMUR2)*0.5D0 + XMT2
+ &+1D0/8D0*(G2**2+G1**2)*(H1T**2-H2T**2)
+ &+(((G2**2-5D0*G1**2/3D0)/4D0*(H1T**2-H2T**2) +
+ &XMQ2 - XMUR2)**2*0.25D0 + XMT2*(AT-XMU/TANBST)**2)**0.5D0
+ STOP22 = (XMQ2 + XMUR2)*0.5D0 + XMT2
+ &+1D0/8D0*(G2**2+G1**2)*(H1T**2-H2T**2)
+ &- (((G2**2-5D0*G1**2/3D0)/4D0*(H1T**2-H2T**2) +
+ &XMQ2 - XMUR2)**2*0.25D0
+ &+ XMT2*(AT-XMU/TANBST)**2)**0.5D0
+ IF(STOP22.LT.0D0) GOTO 120
+ SBOT12 = (XMQ2 + XMDL2)*0.5D0
+ &- 1D0/8D0*(G2**2+G1**2)*(H1B**2-H2B**2)
+ &+ (((G1**2/3D0-G2**2)/4D0*(H1B**2-H2B**2) +
+ &XMQ2 - XMDL2)**2*0.25D0 + XMBOT2*(AB-XMU*TANBSB)**2)**0.5D0
+ SBOT22 = (XMQ2 + XMDL2)*0.5D0
+ &- 1D0/8D0*(G2**2+G1**2)*(H1B**2-H2B**2)
+ &- (((G1**2/3D0-G2**2)/4D0*(H1B**2-H2B**2) +
+ &XMQ2 - XMDL2)**2*0.25D0 + XMBOT2*(AB-XMU*TANBSB)**2)**0.5D0
+ IF(SBOT22.LT.0D0) GOTO 120
+
+ STOP1 = STOP12**0.5D0
+ STOP2 = STOP22**0.5D0
+ SBOT1 = SBOT12**0.5D0
+ SBOT2 = SBOT22**0.5D0
+
+ VH1(1,1) = 1D0/TANBST
+ VH1(2,1) = -1D0
+ VH1(1,2) = -1D0
+ VH1(2,2) = TANBST
+ VH2(1,1) = TANBST
+ VH2(1,2) = -1D0
+ VH2(2,1) = -1D0
+ VH2(2,2) = 1D0/TANBST
+
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+C...D-TERMS
+CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+ STW=0.2320D0
+
+ F1T=(XMQ2-XMUR2)/(STOP12-STOP22)*(0.5D0-4D0/3D0*STW)*
+ &LOG(STOP1/STOP2)
+ &+(0.5D0-2D0/3D0*STW)*LOG(STOP1*STOP2/(XMQ2+XMT2))
+ &+ 2D0/3D0*STW*LOG(STOP1*STOP2/(XMUR2+XMT2))
+
+ F1B=(XMQ2-XMDL2)/(SBOT12-SBOT22)*(-0.5D0+2D0/3D0*STW)*
+ &LOG(SBOT1/SBOT2)
+ &+(-0.5D0+1D0/3D0*STW)*LOG(SBOT1*SBOT2/(XMQ2+XMBOT2))
+ &- 1D0/3D0*STW*LOG(SBOT1*SBOT2/(XMDL2+XMBOT2))
+
+ F2T=XMT2**0.5D0*(AT-XMU/TANBST)/(STOP12-STOP22)*
+ &(-0.5D0*LOG(STOP12/STOP22)
+ &+(4D0/3D0*STW-0.5D0)*(XMQ2-XMUR2)/(STOP12-STOP22)*
+ &G(STOP12,STOP22))
+
+ F2B=XMBOT2**0.5D0*(AB-XMU*TANBSB)/(SBOT12-SBOT22)*
+ &(0.5D0*LOG(SBOT12/SBOT22)
+ &+(-2D0/3D0*STW+0.5D0)*(XMQ2-XMDL2)/(SBOT12-SBOT22)*
+ &G(SBOT12,SBOT22))
+
+ VH3B(1,1) = XMBOT4/(COSBB**2)*(LOG(SBOT1**2*SBOT2**2/
+ &(XMQ2+XMBOT2)/(XMDL2+XMBOT2))
+ &+ 2D0*(AB*(AB-XMU*TANBSB)/(SBOT1**2-SBOT2**2))*
+ &LOG(SBOT1**2/SBOT2**2)) +
+ &XMBOT4/(COSBB**2)*(AB*(AB-XMU*TANBSB)/
+ &(SBOT1**2-SBOT2**2))**2*G(SBOT12,SBOT22)
+
+ VH3T(1,1) =
+ &XMT4/(SINBT**2)*(XMU*(-AT+XMU/TANBST)/(STOP1**2
+ &-STOP2**2))**2*G(STOP12,STOP22)
+
+ VH3B(1,1)=VH3B(1,1)+
+ &XMZ**2*(2*XMBOT2*F1B-XMBOT2**0.5D0*AB*F2B)
+
+ VH3T(1,1) = VH3T(1,1) +
+ &XMZ**2*(XMT2**0.5D0*XMU/TANBST*F2T)
+
+ VH3T(2,2) = XMT4/(SINBT**2)*(LOG(STOP1**2*STOP2**2/
+ &(XMQ2+XMT2)/(XMUR2+XMT2))
+ &+ 2D0*(AT*(AT-XMU/TANBST)/(STOP1**2-STOP2**2))*
+ &LOG(STOP1**2/STOP2**2)) +
+ &XMT4/(SINBT**2)*(AT*(AT-XMU/TANBST)/
+ &(STOP1**2-STOP2**2))**2*G(STOP12,STOP22)
+
+ VH3B(2,2) =
+ &XMBOT4/(COSBB**2)*(XMU*(-AB+XMU*TANBSB)/(SBOT1**2
+ &-SBOT2**2))**2*G(SBOT12,SBOT22)
+
+ VH3T(2,2)=VH3T(2,2)+
+ &XMZ**2*(-2*XMT2*F1T+XMT2**0.5D0*AT*F2T)
+
+ VH3B(2,2) = VH3B(2,2) -XMZ**2*XMBOT2**0.5D0*XMU*TANBSB*F2B
+
+ VH3T(1,2) = -
+ &XMT4/(SINBT**2)*XMU*(AT-XMU/TANBST)/
+ &(STOP1**2-STOP2**2)*(LOG(STOP1**2/STOP2**2) + AT*
+ &(AT - XMU/TANBST)/(STOP1**2-STOP2**2)*G(STOP12,STOP22))
+
+ VH3B(1,2) =
+ &- XMBOT4/(COSBB**2)*XMU*(AT-XMU*TANBSB)/
+ &(SBOT1**2-SBOT2**2)*(LOG(SBOT1**2/SBOT2**2) + AB*
+ &(AB - XMU*TANBSB)/(SBOT1**2-SBOT2**2)*G(SBOT12,SBOT22))
+
+ VH3T(1,2)=VH3T(1,2) +
+ &XMZ**2*(XMT2/TANBST*F1T-XMT2**0.5D0*(AT/TANBST+XMU)/2D0*F2T)
+
+ VH3B(1,2)=VH3B(1,2)
+ &+XMZ**2*(-XMBOT2*TANBSB*F1B+XMBOT2**0.5D0*(AB*TANBSB+XMU)/2D0*F2B)
+
+ VH3T(2,1) = VH3T(1,2)
+ VH3B(2,1) = VH3B(1,2)
+
+ TQ = LOG((XMQ2 + XMT2)/XMT2)
+ TU = LOG((XMUR2+XMT2)/XMT2)
+ TQD = LOG((XMQ2 + XMB**2)/XMB**2)
+ TD = LOG((XMDL2+XMB**2)/XMB**2)
+
+ DO 110 I = 1,2
+ DO 100 J = 1,2
+
+ VH(I,J) =
+ & 6D0/(8D0*PI**2*(H1T**2+H2T**2))
+ & *VH3T(I,J)*0.5D0*(1D0-AL(I,J)*TT/2D0) +
+ & 6D0/(8D0*PI**2*(H1B**2+H2B**2))
+ & *VH3B(I,J)*0.5D0*(1D0-AL(I,J)*TB/2D0)
+
+ 100 CONTINUE
+ 110 CONTINUE
+
+ GOTO 150
+ 120 DO 140 I =1,2
+ DO 130 J = 1,2
+ VH(I,J) = -1D+15
+ 130 CONTINUE
+ 140 CONTINUE
+
+ 150 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYFINT
+C...Auxiliary routine to PYVACU for SUSY Higgs calculations.
+
+ FUNCTION PYFINT(A,B,C)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblock.
+ COMMON/PYINTS/XXM(20)
+ SAVE/PYINTS/
+
+C...Local variables.
+ EXTERNAL PYFISB
+
+ XXM(1)=A
+ XXM(2)=B
+ XXM(3)=C
+ XLO=0D0
+ XHI=1D0
+ PYFINT = PYGAUS(PYFISB,XLO,XHI,1D-3)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYFISB
+C...Auxiliary routine to PYFINT for SUSY Higgs calculations.
+
+ FUNCTION PYFISB(X)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblock.
+ COMMON/PYINTS/XXM(20)
+ SAVE/PYINTS/
+
+ PYFISB = LOG(ABS(X*XXM(2)+(1-X)*XXM(3)-X*(1-X)*XXM(1))/
+ &(X*(XXM(2)-XXM(3))+XXM(3)))
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSFDC
+C...Calculates decays of sfermions.
+
+ SUBROUTINE PYSFDC(KFIN,XLAM,IDLAM,IKNT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
+
+C...Local variables.
+ INTEGER KFIN,KCIN
+ DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,XMZ,
+ &XMZ2,AXMJ,AXMI
+ DOUBLE PRECISION XMI2,XMI3,XMJ2,XMA2,XMB2,XMFP
+ DOUBLE PRECISION PYLAMF,XL
+ DOUBLE PRECISION TANW,XW,AEM,C1,AS
+ DOUBLE PRECISION CA,CB,AL,AR,BL,BR,ALP,ARP,BLP,BRP
+ DOUBLE PRECISION CH1,CH2,CH3,CH4
+ DOUBLE PRECISION XMBOT,XMTOP
+ DOUBLE PRECISION XLAM(0:200)
+ INTEGER IDLAM(200,3)
+ INTEGER LKNT,IX,IC,ILR,IDU,J,IJ,I,IKNT,IFL,IFP,II
+ DOUBLE PRECISION SR2
+ DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K
+ DOUBLE PRECISION CW
+ DOUBLE PRECISION BETA,ALFA,XMU,AT,AB,ATRIT,ATRIB,ATRIL
+ DOUBLE PRECISION COSA,SINA,TANB
+ DOUBLE PRECISION PYALEM,PI,PYALPS,EI,PYRNMT
+ DOUBLE PRECISION GHRR,GHLL,GHLR,CF,XMB,BLR
+ INTEGER IG,KF1,KF2,ILR2,IDP
+ INTEGER IGG(4),KFNCHI(4),KFCCHI(2)
+ DATA IGG/23,25,35,36/
+ DATA PI/3.141592654D0/
+ DATA SR2/1.4142136D0/
+ DATA KFNCHI/1000022,1000023,1000025,1000035/
+ DATA KFCCHI/1000024,1000037/
+
+C...COUNT THE NUMBER OF DECAY MODES
+ LKNT=0
+
+C...NO NU_R DECAYS
+ IF(KFIN.EQ.KSUSY2+12.OR.KFIN.EQ.KSUSY2+14.OR.
+ &KFIN.EQ.KSUSY2+16) RETURN
+
+ XMW=PMAS(24,1)
+ XMW2=XMW**2
+ XMZ=PMAS(23,1)
+ XMZ2=XMZ**2
+ XW=PARU(102)
+ TANW = SQRT(XW/(1D0-XW))
+ CW=SQRT(1D0-XW)
+
+C...KCIN
+ KCIN=PYCOMP(KFIN)
+C...ILR is 1 for left and 2 for right.
+ ILR=KFIN/KSUSY1
+C...IFL is matching non-SUSY flavour.
+ IFL=MOD(KFIN,KSUSY1)
+C...IDU is weak isospin, 1 for down and 2 for up.
+ IDU=2-MOD(IFL,2)
+
+ XMI=PMAS(KCIN,1)
+ XMI2=XMI**2
+ AEM=PYALEM(XMI2)
+ AS =PYALPS(XMI2)
+ C1=AEM/XW
+ XMI3=XMI**3
+ EI=KCHG(IFL,1)/3D0
+
+ XMBOT=3D0
+ XMTOP=PYRNMT(PMAS(6,1))
+ XMBOT=0D0
+
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ ALFA=RMSS(18)
+ CBETA=COS(BETA)
+ SBETA=TANB*CBETA
+ SINA=SIN(ALFA)
+ COSA=COS(ALFA)
+ XMU=-RMSS(4)
+ ATRIT=RMSS(16)
+ ATRIB=RMSS(15)
+ ATRIL=RMSS(17)
+
+C...2-BODY DECAYS OF SFERMION -> GRAVITINO + FERMION
+
+ IF(IMSS(11).EQ.1) THEN
+ XMP=RMSS(28)
+ IDG=39+KSUSY1
+ XMGR=PMAS(PYCOMP(IDG),1)
+ XFAC=(XMI2/(XMP*XMGR))**2*XMI/48D0/PI
+ IF(IFL.EQ.5) THEN
+ XMF=XMBOT
+ ELSEIF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ ELSE
+ XMF=PMAS(IFL,1)
+ ENDIF
+ IF(XMI.GT.XMGR+XMF) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=IFL
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*(1D0-XMF**2/XMI2)**4
+ ENDIF
+ ENDIF
+
+C...2-BODY DECAYS OF SFERMION -> FERMION + GAUGE/GAUGINO
+
+C...CHARGED DECAYS:
+ DO 100 IX=1,2
+C...DI -> U CHI1-,CHI2-
+ IF(IDU.EQ.1) THEN
+ XMFP=PMAS(IFL+1,1)
+ XMF =PMAS(IFL,1)
+C...UI -> D CHI1+,CHI2+
+ ELSE
+ XMFP=PMAS(IFL-1,1)
+ XMF =PMAS(IFL,1)
+ ENDIF
+ XMJ=SMW(IX)
+ AXMJ=ABS(XMJ)
+ IF(XMI.GE.AXMJ+XMFP) THEN
+ XMA2=XMJ**2
+ XMB2=XMFP**2
+ IF(IDU.EQ.2) THEN
+ IF(IFL.EQ.6) THEN
+ XMFP=XMBOT
+ XMF =XMTOP
+ ELSEIF(IFL.LT.6) THEN
+ XMF=0D0
+ XMFP=0D0
+ ENDIF
+ BL=VMIX(IX,1)
+ AL=-XMFP*UMIX(IX,2)/SR2/XMW/CBETA
+ BR=-XMF*VMIX(IX,2)/SR2/XMW/SBETA
+ AR=0D0
+ ELSE
+ IF(IFL.EQ.5) THEN
+ XMF =XMBOT
+ XMFP=XMTOP
+ ELSEIF(IFL.LT.5) THEN
+ XMF=0D0
+ XMFP=0D0
+ ENDIF
+ BL=UMIX(IX,1)
+ AL=-XMFP*VMIX(IX,2)/SR2/XMW/SBETA
+ BR=-XMF*UMIX(IX,2)/SR2/XMW/CBETA
+ AR=0D0
+ ENDIF
+
+ ALP=SFMIX(IFL,1)*AL + SFMIX(IFL,2)*AR
+ BLP=SFMIX(IFL,1)*BL + SFMIX(IFL,2)*BR
+ ARP=SFMIX(IFL,4)*AR + SFMIX(IFL,3)*AL
+ BRP=SFMIX(IFL,4)*BR + SFMIX(IFL,3)*BL
+ AL=ALP
+ BL=BLP
+ AR=ARP
+ BR=BRP
+
+C...F1 -> F` CHI
+ IF(ILR.EQ.1) THEN
+ CA=AL
+ CB=BL
+C...F2 -> F` CHI
+ ELSE
+ CA=AR
+ CB=BR
+ ENDIF
+ LKNT=LKNT+1
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+C...SPIN AVERAGE = 1/1 NOT 1/2....NO COLOR ENHANCEMENT
+ XLAM(LKNT)=2D0*C1/8D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
+ & (CA**2+CB**2)-4D0*CA*CB*XMJ*XMFP)
+ IDLAM(LKNT,3)=0
+ IF(IDU.EQ.1) THEN
+ IDLAM(LKNT,1)=-KFCCHI(IX)
+ IDLAM(LKNT,2)=IFL+1
+ ELSE
+ IDLAM(LKNT,1)=KFCCHI(IX)
+ IDLAM(LKNT,2)=IFL-1
+ ENDIF
+ ENDIF
+ 100 CONTINUE
+
+C...NEUTRAL DECAYS
+ DO 110 IX=1,4
+C...DI -> D CHI10
+ XMF=PMAS(IFL,1)
+ XMJ=SMZ(IX)
+ AXMJ=ABS(XMJ)
+ IF(XMI.GE.AXMJ+XMF) THEN
+ XMA2=XMJ**2
+ XMB2=XMF**2
+ IF(IDU.EQ.1) THEN
+ IF(IFL.EQ.5) THEN
+ XMF=XMBOT
+ ELSEIF(IFL.LT.5) THEN
+ XMF=0D0
+ ENDIF
+ BL=-ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI+1)
+ AL=XMF*ZMIX(IX,3)/XMW/CBETA
+ AR=-2D0*EI*TANW*ZMIX(IX,1)
+ BR=AL
+ ELSE
+ IF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ ELSEIF(IFL.LT.5) THEN
+ XMF=0D0
+ ENDIF
+ BL=ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-1)
+ AL=XMF*ZMIX(IX,4)/XMW/SBETA
+ AR=-2D0*EI*TANW*ZMIX(IX,1)
+ BR=AL
+ ENDIF
+
+ ALP=SFMIX(IFL,1)*AL + SFMIX(IFL,2)*AR
+ BLP=SFMIX(IFL,1)*BL + SFMIX(IFL,2)*BR
+ ARP=SFMIX(IFL,4)*AR + SFMIX(IFL,3)*AL
+ BRP=SFMIX(IFL,4)*BR + SFMIX(IFL,3)*BL
+ AL=ALP
+ BL=BLP
+ AR=ARP
+ BR=BRP
+
+C...F1 -> F CHI
+ IF(ILR.EQ.1) THEN
+ CA=AL
+ CB=BL
+C...F2 -> F CHI
+ ELSE
+ CA=AR
+ CB=BR
+ ENDIF
+ LKNT=LKNT+1
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+C...SPIN AVERAGE = 1/1 NOT 1/2....NO COLOR ENHANCEMENT
+ XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
+ & (CA**2+CB**2)-4D0*CA*CB*XMJ*XMF)
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=IFL
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 110 CONTINUE
+
+C...2-BODY DECAYS TO SM GAUGE AND HIGGS BOSONS
+C...IG=23,25,35,36
+ DO 120 II=1,4
+ IG=IGG(II)
+ IF(ILR.EQ.1) GOTO 120
+ XMB=PMAS(IG,1)
+ XMSF1=PMAS(PYCOMP(KFIN-KSUSY1),1)
+ IF(XMI.LT.XMSF1+XMB) GOTO 120
+ IF(IG.EQ.23) THEN
+ BL=-SIGN(.5D0,EI)/CW+EI*XW/CW
+ BR=EI*XW/CW
+ BLR=0D0
+ ELSEIF(IG.EQ.25) THEN
+ IF(IFL.EQ.5) THEN
+ XMF=XMBOT
+ ELSEIF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ ELSEIF(IFL.LT.5) THEN
+ XMF=0D0
+ ELSE
+ XMF=PMAS(IFL,1)
+ ENDIF
+ IF(IDU.EQ.2) THEN
+ GHLL=XMZ/CW*(0.5D0-EI*XW)*(-SIN(ALFA+BETA))+
+ & XMF**2/XMW*COSA/SBETA
+ GHRR=XMZ/CW*(EI*XW)*(-SIN(ALFA+BETA))+
+ & XMF**2/XMW*COSA/SBETA
+ ELSE
+ GHLL=XMZ/CW*(0.5D0-EI*XW)*(-SIN(ALFA+BETA))+
+ & XMF**2/XMW*(-SINA)/CBETA
+ GHRR=XMZ/CW*(EI*XW)*(-SIN(ALFA+BETA))+
+ & XMF**2/XMW*(-SINA)/CBETA
+ ENDIF
+ IF(IFL.EQ.5) THEN
+ AT=ATRIB
+ ELSEIF(IFL.EQ.6) THEN
+ AT=ATRIT
+ ELSEIF(IFL.EQ.15) THEN
+ AT=ATRIL
+ ELSE
+ AT=0D0
+ ENDIF
+ IF(IDU.EQ.2) THEN
+ GHLR=XMF/2D0/XMW/SBETA*(-XMU*SINA+
+ & AT*COSA)
+ ELSE
+ GHLR=XMF/2D0/XMW/CBETA*(XMU*COSA-
+ & AT*SINA)
+ ENDIF
+ BL=GHLL
+ BR=GHRR
+ BLR=-GHLR
+ ELSEIF(IG.EQ.35) THEN
+ IF(IFL.EQ.5) THEN
+ XMF=XMBOT
+ ELSEIF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ ELSEIF(IFL.LT.5) THEN
+ XMF=0D0
+ ELSE
+ XMF=PMAS(IFL,1)
+ ENDIF
+ IF(IDU.EQ.2) THEN
+ GHLL=XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)+
+ & XMF**2/XMW*SINA/SBETA
+ GHRR=XMZ/CW*(EI*XW)*COS(ALFA+BETA)+
+ & XMF**2/XMW*SINA/SBETA
+ ELSE
+ GHLL=XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)+
+ & XMF**2/XMW*COSA/CBETA
+ GHRR=XMZ/CW*(EI*XW)*COS(ALFA+BETA)+
+ & XMF**2/XMW*COSA/CBETA
+ ENDIF
+ IF(IFL.EQ.5) THEN
+ AT=ATRIB
+ ELSEIF(IFL.EQ.6) THEN
+ AT=ATRIT
+ ELSEIF(IFL.EQ.15) THEN
+ AT=ATRIL
+ ELSE
+ AT=0D0
+ ENDIF
+ IF(IDU.EQ.2) THEN
+ GHLR=XMF/2D0/XMW/SBETA*(XMU*COSA+
+ & AT*SINA)
+ ELSE
+ GHLR=XMF/2D0/XMW/CBETA*(XMU*SINA+
+ & AT*COSA)
+ ENDIF
+ BL=GHLL
+ BR=GHRR
+ BLR=GHLR
+ ELSEIF(IG.EQ.36) THEN
+ GHLL=0D0
+ GHRR=0D0
+ IF(IFL.EQ.5) THEN
+ XMF=XMBOT
+ ELSEIF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ ELSEIF(IFL.LT.5) THEN
+ XMF=0D0
+ ELSE
+ XMF=PMAS(IFL,1)
+ ENDIF
+ IF(IFL.EQ.5) THEN
+ AT=ATRIB
+ ELSEIF(IFL.EQ.6) THEN
+ AT=ATRIT
+ ELSEIF(IFL.EQ.15) THEN
+ AT=ATRIL
+ ELSE
+ AT=0D0
+ ENDIF
+ IF(IDU.EQ.2) THEN
+ GHLR=XMF/2D0/XMW*(-XMU+AT/TANB)
+ ELSE
+ GHLR=XMF/2D0/XMW/(-XMU+AT*TANB)
+ ENDIF
+ BL=GHLL
+ BR=GHRR
+ BLR=GHLR
+ ENDIF
+ AL=SFMIX(IFL,1)*SFMIX(IFL,3)*BL+
+ & SFMIX(IFL,2)*SFMIX(IFL,4)*BR+
+ & (SFMIX(IFL,1)*SFMIX(IFL,4)+SFMIX(IFL,3)*SFMIX(IFL,2))*BLR
+ XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
+ LKNT=LKNT+1
+ IF(IG.EQ.23) THEN
+ XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
+ ELSE
+ XLAM(LKNT)=C1/4D0/XMI3*SQRT(XL)*AL**2
+ ENDIF
+ IDLAM(LKNT,3)=0
+ IDLAM(LKNT,1)=KFIN-KSUSY1
+ IDLAM(LKNT,2)=IG
+ 120 CONTINUE
+
+C...SF -> SF' + W
+ XMB=PMAS(24,1)
+ IF(MOD(IFL,2).EQ.0) THEN
+ KF1=KSUSY1+IFL-1
+ ELSE
+ KF1=KSUSY1+IFL+1
+ ENDIF
+ KF2=KF1+KSUSY1
+ XMSF1=PMAS(PYCOMP(KF1),1)
+ XMSF2=PMAS(PYCOMP(KF2),1)
+ IF(XMI.GT.XMB+XMSF1) THEN
+ IF(MOD(IFL,2).EQ.0) THEN
+ IF(ILR.EQ.1) THEN
+ AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL-1,1)
+ ELSE
+ AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL-1,1)
+ ENDIF
+ ELSE
+ IF(ILR.EQ.1) THEN
+ AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL+1,1)
+ ELSE
+ AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL+1,1)
+ ENDIF
+ ENDIF
+ XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
+ IDLAM(LKNT,3)=0
+ IDLAM(LKNT,1)=KF1
+ IDLAM(LKNT,2)=SIGN(24,KCHG(IFL,1))
+ ENDIF
+ IF(XMI.GT.XMB+XMSF2) THEN
+ IF(MOD(IFL,2).EQ.0) THEN
+ IF(ILR.EQ.1) THEN
+ AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL-1,3)
+ ELSE
+ AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL-1,3)
+ ENDIF
+ ELSE
+ IF(ILR.EQ.1) THEN
+ AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL+1,3)
+ ELSE
+ AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL+1,3)
+ ENDIF
+ ENDIF
+ XL=PYLAMF(XMI2,XMSF2**2,XMB**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
+ IDLAM(LKNT,3)=0
+ IDLAM(LKNT,1)=KF2
+ IDLAM(LKNT,2)=SIGN(24,KCHG(IFL,1))
+ ENDIF
+
+C...SF -> SF' + HC
+ XMB=PMAS(37,1)
+ IF(MOD(IFL,2).EQ.0) THEN
+ KF1=KSUSY1+IFL-1
+ ELSE
+ KF1=KSUSY1+IFL+1
+ ENDIF
+ KF2=KF1+KSUSY1
+ XMSF1=PMAS(PYCOMP(KF1),1)
+ XMSF2=PMAS(PYCOMP(KF2),1)
+ IF(XMI.GT.XMB+XMSF1) THEN
+ XMF=0D0
+ XMFP=0D0
+ AT=0D0
+ AB=0D0
+ IF(MOD(IFL,2).EQ.0) THEN
+C...T1-> B1 HC
+ IF(ILR.EQ.1) THEN
+ CH1=-SFMIX(IFL,1)*SFMIX(IFL-1,1)
+ CH2= SFMIX(IFL,2)*SFMIX(IFL-1,2)
+ CH3=-SFMIX(IFL,1)*SFMIX(IFL-1,2)
+ CH4=-SFMIX(IFL,2)*SFMIX(IFL-1,1)
+C...T2-> B1 HC
+ ELSE
+ CH1= SFMIX(IFL,3)*SFMIX(IFL-1,1)
+ CH2=-SFMIX(IFL,4)*SFMIX(IFL-1,2)
+ CH3= SFMIX(IFL,3)*SFMIX(IFL-1,2)
+ CH4= SFMIX(IFL,4)*SFMIX(IFL-1,1)
+ ENDIF
+ IF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ XMFP=XMBOT
+ AT=ATRIT
+ AB=ATRIB
+ ENDIF
+ ELSE
+C...B1 -> T1 HC
+ IF(ILR.EQ.1) THEN
+ CH1=-SFMIX(IFL+1,1)*SFMIX(IFL,1)
+ CH2= SFMIX(IFL+1,2)*SFMIX(IFL,2)
+ CH3=-SFMIX(IFL+1,1)*SFMIX(IFL,2)
+ CH4=-SFMIX(IFL+1,2)*SFMIX(IFL,1)
+C...B2-> T1 HC
+ ELSE
+ CH1= SFMIX(IFL,3)*SFMIX(IFL+1,1)
+ CH2=-SFMIX(IFL,4)*SFMIX(IFL+1,2)
+ CH3= SFMIX(IFL,4)*SFMIX(IFL+1,1)
+ CH4= SFMIX(IFL,3)*SFMIX(IFL+1,2)
+ ENDIF
+ IF(IFL.EQ.5) THEN
+ XMF=XMTOP
+ XMFP=XMBOT
+ AT=ATRIT
+ AB=ATRIB
+ ENDIF
+ ENDIF
+ XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
+ LKNT=LKNT+1
+ AL=CH1*(XMW2*2D0*CBETA*SBETA-XMFP**2*TANB-XMF**2/TANB)+
+ & CH2*2D0*XMF*XMFP/(2D0*CBETA*SBETA)+
+ & CH3*XMFP*(-XMU+AB*TANB)+CH4*XMF*(-XMU+AT/TANB)
+ XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)/XMW2*AL**2
+ IDLAM(LKNT,3)=0
+ IDLAM(LKNT,1)=KF1
+ IDLAM(LKNT,2)=SIGN(37,KCHG(IFL,1))
+ ENDIF
+ IF(XMI.GT.XMB+XMSF2) THEN
+ XMF=0D0
+ XMFP=0D0
+ AT=0D0
+ AB=0D0
+ IF(MOD(IFL,2).EQ.0) THEN
+C...T1-> B2 HC
+ IF(ILR.EQ.1) THEN
+ CH1= SFMIX(IFL-1,3)*SFMIX(IFL,1)
+ CH2=-SFMIX(IFL-1,4)*SFMIX(IFL,2)
+ CH3= SFMIX(IFL-1,4)*SFMIX(IFL,1)
+ CH4= SFMIX(IFL-1,3)*SFMIX(IFL,2)
+C...T2-> B2 HC
+ ELSE
+ CH1= -SFMIX(IFL,3)*SFMIX(IFL-1,3)
+ CH2= SFMIX(IFL,4)*SFMIX(IFL-1,4)
+ CH3= -SFMIX(IFL,3)*SFMIX(IFL-1,4)
+ CH4= -SFMIX(IFL,4)*SFMIX(IFL-1,3)
+ ENDIF
+ IF(IFL.EQ.6) THEN
+ XMF=XMTOP
+ XMFP=XMBOT
+ AT=ATRIT
+ AB=ATRIB
+ ENDIF
+ ELSE
+C...B1 -> T2 HC
+ IF(ILR.EQ.1) THEN
+ CH1= SFMIX(IFL+1,3)*SFMIX(IFL,1)
+ CH2=-SFMIX(IFL+1,4)*SFMIX(IFL,2)
+ CH3= SFMIX(IFL+1,3)*SFMIX(IFL,2)
+ CH4= SFMIX(IFL+1,4)*SFMIX(IFL,1)
+C...B2-> T2 HC
+ ELSE
+ CH1= -SFMIX(IFL+1,3)*SFMIX(IFL,3)
+ CH2= SFMIX(IFL+1,4)*SFMIX(IFL,4)
+ CH3= -SFMIX(IFL+1,3)*SFMIX(IFL,4)
+ CH4= -SFMIX(IFL+1,4)*SFMIX(IFL,3)
+ ENDIF
+ IF(IFL.EQ.5) THEN
+ XMF=XMTOP
+ XMFP=XMBOT
+ AT=ATRIT
+ AB=ATRIB
+ ENDIF
+ ENDIF
+ XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
+ LKNT=LKNT+1
+ AL=CH1*(XMW2*2D0*CBETA*SBETA-XMFP**2*TANB-XMF**2/TANB)+
+ & CH2*2D0*XMF*XMFP/(2D0*CBETA*SBETA)+
+ & CH3*XMFP*(-XMU+AB*TANB)+CH4*XMF*(-XMU+AT/TANB)
+ XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)/XMW2*AL**2
+ IDLAM(LKNT,3)=0
+ IDLAM(LKNT,1)=KF2
+ IDLAM(LKNT,2)=SIGN(37,KCHG(IFL,1))
+ ENDIF
+
+C...2-BODY DECAYS OF SQUARK -> QUARK GLUINO
+
+ IF(IFL.LE.6) THEN
+ XMFP=0D0
+ XMF=0D0
+ IF(IFL.EQ.6) XMF=PMAS(6,1)
+ IF(IFL.EQ.5) XMF=PMAS(5,1)
+ XMJ=PMAS(PYCOMP(KSUSY1+21),1)
+ AXMJ=ABS(XMJ)
+ IF(XMI.GE.AXMJ+XMF) THEN
+ AL=-SFMIX(IFL,2)
+ BL=SFMIX(IFL,1)
+ AR=-SFMIX(IFL,4)
+ BR=SFMIX(IFL,3)
+C...F1 -> F CHI
+ IF(ILR.EQ.1) THEN
+ CA=AL
+ CB=BL
+C...F2 -> F CHI
+ ELSE
+ CA=AR
+ CB=BR
+ ENDIF
+ LKNT=LKNT+1
+ XMA2=XMJ**2
+ XMB2=XMF**2
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+ XLAM(LKNT)=4D0/3D0*AS/2D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
+ & (CA**2+CB**2)-4D0*CA*CB*XMJ*XMF)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=IFL
+ IDLAM(LKNT,3)=0
+ ENDIF
+ ENDIF
+
+C...IF NOTHING ELSE FOR T1, THEN T1* -> C+CHI0
+ IF(KFIN.EQ.KSUSY1+6.AND.PMAS(KCIN,1).GT.
+ &PMAS(PYCOMP(KSUSY1+22),1)+PMAS(4,1)) THEN
+C...THIS IS A BACK-OF-THE-ENVELOPE ESTIMATE
+C...M = 1/(16PI**2)G**3 = G*2/(4PI) G/(4PI) = C1 * G/(4PI)
+C...M*M = C1**2 * G**2/(16PI**2)
+C...G = 1/(8PI)P/MI**2 * M*M = C1**3/(32PI**2)*LAM/(2*MI**3)
+ LKNT=LKNT+1
+ XL=PYLAMF(XMI2,0D0,PMAS(PYCOMP(KSUSY1+22),1)**2)
+ XLAM(LKNT)=C1**3/64D0/PI**2/XMI3*SQRT(XL)
+ IF(XLAM(LKNT).EQ.0) XLAM(LKNT)=1D-3
+ IDLAM(LKNT,1)=KSUSY1+22
+ IDLAM(LKNT,2)=4
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+ IKNT=LKNT
+ XLAM(0)=0D0
+ DO 130 I=1,IKNT
+ IF(XLAM(I).LT.0D0) XLAM(I)=0D0
+ XLAM(0)=XLAM(0)+XLAM(I)
+ 130 CONTINUE
+ IF(XLAM(0).EQ.0D0) XLAM(0)=1D-3
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGLUI
+C...Calculates gluino decay modes.
+
+ SUBROUTINE PYGLUI(KFIN,XLAM,IDLAM,IKNT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ COMMON/PYINTS/XXM(20)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
+
+C...Local variables.
+ INTEGER KFIN,KCIN,KF
+ DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
+ &XMZ,XMZ2,AXMJ,AXMI
+ DOUBLE PRECISION XMI2,XMI3,XMJ2,XMA2,XMB2,XMFP
+ DOUBLE PRECISION C1L,C1R,D1L,D1R
+ DOUBLE PRECISION C2L,C2R,D2L,D2R
+ DOUBLE PRECISION PYLAMF,XL
+ DOUBLE PRECISION TANW,XW,AEM,C1,AS,S12MAX,S12MIN
+ DOUBLE PRECISION CA,CB,AL,AR,BL,BR
+ DOUBLE PRECISION ALFA,BETA
+ DOUBLE PRECISION SW,CW,SINB,COSB,QT,T3
+ DOUBLE PRECISION XLAM(0:200)
+ INTEGER IDLAM(200,3)
+ INTEGER LKNT,IX,IC,ILR,IDU,J,IJ,I,IKNT,IFL
+ DOUBLE PRECISION SR2
+ DOUBLE PRECISION GAM
+ DOUBLE PRECISION PYALEM,PI,PYALPS,EI
+ DOUBLE PRECISION PYGAUS
+ EXTERNAL PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
+ DOUBLE PRECISION PREC
+ INTEGER KFNCHI(4),KFCCHI(2)
+ DATA PI/3.141592654D0/
+ DATA SR2/1.4142136D0/
+ DATA PREC/1D-2/
+ DATA KFNCHI/1000022,1000023,1000025,1000035/
+ DATA KFCCHI/1000024,1000037/
+
+C...COUNT THE NUMBER OF DECAY MODES
+ LKNT=0
+ IF(KFIN.NE.KSUSY1+21) RETURN
+ KCIN=PYCOMP(KFIN)
+
+ XMW=PMAS(24,1)
+ XMW2=XMW**2
+ XMZ=PMAS(23,1)
+ XMZ2=XMZ**2
+ XW=PARU(102)
+ TANW = SQRT(XW/(1D0-XW))
+
+ XMI=PMAS(KCIN,1)
+ AXMI=ABS(XMI)
+ XMI2=XMI**2
+ AEM=PYALEM(XMI2)
+ AS =PYALPS(XMI2)
+ C1=AEM/XW
+ XMI3=XMI**3
+ BETA=ATAN(RMSS(5))
+
+C...2-BODY DECAYS OF GLUINO -> GRAVITINO GLUON
+
+ IF(IMSS(11).EQ.1) THEN
+ XMP=RMSS(28)
+ IDG=39+KSUSY1
+ XMGR=PMAS(PYCOMP(IDG),1)
+ XFAC=(XMI2/(XMP*XMGR))**2*XMI/48D0/PI
+ IF(AXMI.GT.XMGR) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=21
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC
+ ENDIF
+ ENDIF
+
+C...2-BODY DECAYS OF GLUINO -> QUARK SQUARK
+
+ DO 110 IFL=1,6
+ DO 100 ILR=1,2
+ XMJ=PMAS(PYCOMP(ILR*KSUSY1+IFL),1)
+ AXMJ=ABS(XMJ)
+ XMF=PMAS(IFL,1)
+ IDU=3-(1+MOD(IFL,2))
+ IF(XMI.GE.AXMJ+XMF) THEN
+ AL=SFMIX(IFL,1)
+ BL=SFMIX(IFL,2)
+ AR=SFMIX(IFL,3)
+ BR=SFMIX(IFL,4)
+C...F1 -> F CHI
+ IF(ILR.EQ.1) THEN
+ CA=AL
+ CB=BL
+C...F2 -> F CHI
+ ELSE
+ CA=AR
+ CB=BR
+ ENDIF
+ LKNT=LKNT+1
+ XMA2=XMJ**2
+ XMB2=XMF**2
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+ XLAM(LKNT)=4D0/8D0*AS/4D0/XMI3*SQRT(XL)*((XMI2+XMB2-XMA2)*
+ & (CA**2+CB**2)+4D0*CA*CB*XMI*XMF)
+ IDLAM(LKNT,1)=ILR*KSUSY1+IFL
+ IDLAM(LKNT,2)=-IFL
+ IDLAM(LKNT,3)=0
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...3-BODY DECAYS TO GAUGINO FERMION-FERMION
+C...GLUINO -> NI Q QBAR
+ DO 160 IX=1,4
+ XMJ=SMZ(IX)
+ AXMJ=ABS(XMJ)
+ IF(XMI.GE.AXMJ) THEN
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
+ XXM(7)=1D6
+ XXM(8)=0D0
+ XXM(9)=0D0
+ XXM(10)=0D0
+ S12MIN=0D0
+ S12MAX=(XMI-AXMJ)**2
+C...D-TYPE QUARKS
+ XXM(11)=0D0
+ XXM(12)=0D0
+ XXM(13)=1D0
+ XXM(14)=-SR2*(-0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
+ XXM(15)=1D0
+ XXM(16)=SR2*(-TANW*ZMIX(IX,1)/3D0)
+ IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 120
+ IF(XMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-2)
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=1
+ IDLAM(LKNT,3)=-1
+ ENDIF
+ IF(XMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=3
+ IDLAM(LKNT,3)=-3
+ ENDIF
+ 120 CONTINUE
+ IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 130
+ IF(XMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
+ CALL PYTBBN(IX,80,-1D0/3D0,AXMI,GAM)
+ LKNT=LKNT+1
+ XLAM(LKNT)=GAM
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=5
+ IDLAM(LKNT,3)=-5
+ ENDIF
+C...U-TYPE QUARKS
+ 130 CONTINUE
+ XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
+ XXM(13)=1D0
+ XXM(14)=-SR2*(0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
+ XXM(15)=1D0
+ XXM(16)=SR2*(2D0*TANW*ZMIX(IX,1)/3D0)
+ IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 140
+ IF(XMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-2)
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=2
+ IDLAM(LKNT,3)=-2
+ ENDIF
+ IF(XMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=4
+ IDLAM(LKNT,3)=-4
+ ENDIF
+ 140 CONTINUE
+C...INCLUDE THE DECAY GLUINO -> NJ + T + T~
+C...IF THE DECAY GLUINO -> ST + T CANNOT OCCUR
+ IF(XMI.GE.PMAS(PYCOMP(KSUSY1+6),1)+PMAS(6,1)) GOTO 150
+ XMF=PMAS(6,1)
+ IF(XMI.GE.AXMJ+2D0*XMF) THEN
+ CALL PYTBBN(IX,80,2D0/3D0,AXMI,GAM)
+ LKNT=LKNT+1
+ XLAM(LKNT)=GAM
+ IDLAM(LKNT,1)=KFNCHI(IX)
+ IDLAM(LKNT,2)=6
+ IDLAM(LKNT,3)=-6
+ ENDIF
+ 150 CONTINUE
+ ENDIF
+ 160 CONTINUE
+
+C...GLUINO -> CI Q QBAR'
+ DO 190 IX=1,2
+ XMJ=SMW(IX)
+ AXMJ=ABS(XMJ)
+ IF(XMI.GE.AXMJ) THEN
+ S12MIN=0D0
+ S12MAX=(AXMI-AXMJ)**2
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ XXM(5)=0D0
+ XXM(6)=0D0
+ XXM(9)=1D6
+ XXM(10)=0D0
+ XXM(7)=UMIX(IX,1)*SR2
+ XXM(8)=VMIX(IX,1)*SR2
+ XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
+ IF( XXM(11).LT.AXMI .OR. XXM(12).LT.AXMI ) GOTO 170
+ IF(XMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(IX)
+ IDLAM(LKNT,2)=1
+ IDLAM(LKNT,3)=-2
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ENDIF
+ IF(XMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(IX)
+ IDLAM(LKNT,2)=3
+ IDLAM(LKNT,3)=-4
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ENDIF
+ 170 CONTINUE
+
+ IF(XMI.GE.PMAS(PYCOMP(KSUSY1+5),1)+PMAS(5,1)) GOTO 180
+ IF(XMI.GE.PMAS(PYCOMP(KSUSY1+6),1)+PMAS(6,1)) GOTO 180
+ XMF=PMAS(6,1)
+ XMFP=PMAS(5,1)
+ IF(XMI.GE.AXMJ+XMF+XMFP) THEN
+ CALL PYTBBC(IX,80,AXMI,GAM)
+ LKNT=LKNT+1
+ XLAM(LKNT)=GAM
+ IDLAM(LKNT,1)=KFCCHI(IX)
+ IDLAM(LKNT,2)=5
+ IDLAM(LKNT,3)=-6
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ENDIF
+ 180 CONTINUE
+ ENDIF
+ 190 CONTINUE
+
+ IKNT=LKNT
+ XLAM(0)=0D0
+ DO 200 I=1,IKNT
+ IF(XLAM(I).LT.0D0) XLAM(I)=0D0
+ XLAM(0)=XLAM(0)+XLAM(I)
+ 200 CONTINUE
+ IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTBBN
+C...Calculates the three-body decay of gluinos into
+C...neutralinos and third generation fermions.
+
+ SUBROUTINE PYTBBN(I,NN,E,XMGLU,GAM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
+
+C...Local variables.
+ EXTERNAL PYSIMP,PYLAMF
+ INTEGER LIN,NN
+ DOUBLE PRECISION COSD,SIND,COSD2,SIND2,COS2D,SIN2D
+ DOUBLE PRECISION HL,HR,FL,FR,HL2,HR2,FL2,FR2
+ DOUBLE PRECISION XMS2(2),XM,XM2,XMG,XMG2,XMR,XMR2
+ DOUBLE PRECISION SBAR,SMIN,SMAX,XMQA,W,GRS,G(0:6),SUMME(0:100)
+ DOUBLE PRECISION FF,HH,HFL,HFR,HRFL,HLFR,XMQ4,XM24
+ DOUBLE PRECISION XLN1,XLN2,B1,B2
+ DOUBLE PRECISION E,XMGLU,GAM
+ DOUBLE PRECISION PYSIMP,PYLAMF
+ DOUBLE PRECISION HRB(4),HLB(4),FLB(4),FRB(4)
+ SAVE HRB,HLB,FLB,FRB
+ DOUBLE PRECISION ALPHAW,ALPHAS,GSU2
+ DOUBLE PRECISION HLT(4),HRT(4),FLT(4),FRT(4)
+ SAVE HLT,HRT,FLT,FRT
+ DOUBLE PRECISION AMC(2),AMN(4),AN(4,4),ZN(3),FLU(4),FRU(4),
+ &FLD(4),FRD(4)
+ SAVE AMC,AMN,AN,ZN,FLU,FRU,FLD,FRD
+ DOUBLE PRECISION AMBOT,AMSB(2),SINC,COSC
+ DOUBLE PRECISION AMTOP,AMST(2),SINA,COSA
+ SAVE AMSB,AMST
+ DOUBLE PRECISION SINW,COSW,TANW,COSW2,SINW2
+ DOUBLE PRECISION ROT1(4,4)
+ LOGICAL IFIRST
+ SAVE IFIRST
+ DATA IFIRST/.TRUE./
+
+ TANB=RMSS(5)
+ SINB=TANB/SQRT(1D0+TANB**2)
+ COSB=SINB/TANB
+ XW=PARU(102)
+ SINW=SQRT(XW)
+ COSW=SQRT(1D0-XW)
+ TANW=SINW/COSW
+ AMW=PMAS(24,1)
+ COSC=SFMIX(5,1)
+ SINC=SFMIX(5,3)
+ COSA=SFMIX(6,1)
+ SINA=SFMIX(6,3)
+ AMBOT=0D0
+ AMTOP=PYRNMT(PMAS(6,1))
+ W2=SQRT(2D0)
+ FAKT1=AMBOT/W2/AMW/COSB
+ FAKT2=AMTOP/W2/AMW/SINB
+ IF(IFIRST) THEN
+ DO 110 II=1,4
+ AMN(II)=SMZ(II)
+ DO 100 J=1,4
+ ROT1(II,J)=0D0
+ AN(II,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+ ROT1(1,1)=COSW
+ ROT1(1,2)=-SINW
+ ROT1(2,1)=-ROT1(1,2)
+ ROT1(2,2)=ROT1(1,1)
+ ROT1(3,3)=COSB
+ ROT1(3,4)=SINB
+ ROT1(4,3)=-ROT1(3,4)
+ ROT1(4,4)=ROT1(3,3)
+ DO 140 II=1,4
+ DO 130 J=1,4
+ DO 120 JJ=1,4
+ AN(II,J)=AN(II,J)+ZMIX(II,JJ)*ROT1(JJ,J)
+ 120 CONTINUE
+ 130 CONTINUE
+ 140 CONTINUE
+ DO 150 J=1,4
+ ZN(1)=-FAKT2*(-SINB*AN(J,3)+COSB*AN(J,4))
+ ZN(2)=-2D0*W2/3D0*SINW*(TANW*AN(J,2)-AN(J,1))
+ ZN(3)=-2*W2/3D0*SINW*AN(J,1)-W2*(0.5D0-2D0/3D0*
+ & XW)*AN(J,2)/COSW
+ HRT(J)=ZN(1)*COSA-ZN(3)*SINA
+ HLT(J)=ZN(1)*COSA+ZN(2)*SINA
+ FLT(J)=ZN(3)*COSA+ZN(1)*SINA
+ FRT(J)=ZN(2)*COSA-ZN(1)*SINA
+ FLU(J)=ZN(3)
+ FRU(J)=ZN(2)
+ ZN(1)=-FAKT1*(COSB*AN(J,3)+SINB*AN(J,4))
+ ZN(2)=W2/3D0*SINW*(TANW*AN(J,2)-AN(J,1))
+ ZN(3)=W2/3D0*SINW*AN(J,1)+W2*(0.5D0-XW/3D0)*AN(J,2)/COSW
+ HRB(J)=ZN(1)*COSC-ZN(3)*SINC
+ HLB(J)=ZN(1)*COSC+ZN(2)*SINC
+ FLB(J)=ZN(3)*COSC+ZN(1)*SINC
+ FRB(J)=ZN(2)*COSC-ZN(1)*SINC
+ FLD(J)=ZN(3)
+ FRD(J)=ZN(2)
+ 150 CONTINUE
+ AMST(1)=PMAS(PYCOMP(KSUSY1+6),1)
+ AMST(2)=PMAS(PYCOMP(KSUSY2+6),1)
+ AMSB(1)=PMAS(PYCOMP(KSUSY1+5),1)
+ AMSB(2)=PMAS(PYCOMP(KSUSY2+5),1)
+ IFIRST=.FALSE.
+ ENDIF
+
+ IF(NINT(3D0*E).EQ.2) THEN
+ HL=HLT(I)
+ HR=HRT(I)
+ FL=FLT(I)
+ FR=FRT(I)
+ COSD=SFMIX(6,1)
+ SIND=SFMIX(6,3)
+ XMS2(1)=PMAS(PYCOMP(KSUSY1+6),1)**2
+ XMS2(2)=PMAS(PYCOMP(KSUSY2+6),1)**2
+ XM=PMAS(6,1)
+ ELSE
+ HL=HLB(I)
+ HR=HRB(I)
+ FL=FLB(I)
+ FR=FRB(I)
+ COSD=SFMIX(5,1)
+ SIND=SFMIX(5,3)
+ XMS2(1)=PMAS(PYCOMP(KSUSY1+5),1)**2
+ XMS2(2)=PMAS(PYCOMP(KSUSY2+5),1)**2
+ XM=PMAS(5,1)
+ ENDIF
+ COSD2=COSD*COSD
+ SIND2=SIND*SIND
+ COS2D=COSD2-SIND2
+ SIN2D=SIND*COSD*2D0
+ HL2=HL*HL
+ HR2=HR*HR
+ FL2=FL*FL
+ FR2=FR*FR
+ FF=FL*FR
+ HH=HL*HR
+ HFL=HL*FL
+ HFR=HR*FR
+ HRFL=HR*FL
+ HLFR=HL*FR
+ XM2=XM*XM
+ XMG=XMGLU
+ XMG2=XMG*XMG
+ ALPHAW=PYALEM(XMG2)
+ ALPHAS=PYALPS(XMG2)
+ XMR=AMN(I)
+ XMR2=XMR*XMR
+ XMQ4=XMG*XM2*XMR
+ XM24=(XMG2+XM2)*(XM2+XMR2)
+ SMIN=4D0*XM2
+ SMAX=(XMG-ABS(XMR))**2
+ XMQA=XMG2+2D0*XM2+XMR2
+ DO 170 LIN=1,NN-1
+ SBAR=SMIN+DBLE(LIN)*(SMAX-SMIN)/DBLE(NN)
+ GRS=SBAR-XMQA
+ W=PYLAMF(XMG2,XMR2,SBAR)*(0.25D0-XM2/SBAR)
+ W=DSQRT(W)
+ XLN1=LOG(ABS((GRS/2D0+XMS2(1)-W)/(GRS/2D0+XMS2(1)+W)))
+ XLN2=LOG(ABS((GRS/2D0+XMS2(2)-W)/(GRS/2D0+XMS2(2)+W)))
+ B1=1D0/(GRS/2D0+XMS2(1)-W)-1D0/(GRS/2D0+XMS2(1)+W)
+ B2=1D0/(GRS/2D0+XMS2(2)-W)-1D0/(GRS/2D0+XMS2(2)+W)
+ G(0)=-2D0*(HL2+FL2+HR2+FR2+(HFR-HFL)*SIN2D
+ & +2D0*(FF*SIND2-HH*COSD2))*W
+ G(1)=((HL2+FL2)*(XMQA-2D0*XMS2(1)-2D0*XM*XMG*SIN2D)
+ & +4D0*HFL*XM*XMR)*XLN1
+ & +((HL2+FL2)*((XMQA-XMS2(1))*XMS2(1)-XM24
+ & +2D0*XM*XMG*(XM2+XMR2-XMS2(1))*SIN2D)
+ & -4D0*HFL*XMR*XM*(XMG2+XM2-XMS2(1))
+ & +8D0*HFL*XMQ4*SIN2D)*B1
+ G(2)=((HR2+FR2)*(XMQA-2D0*XMS2(2)+2D0*XM*XMG*SIN2D)
+ & +4D0*HFR*XMR*XM)*XLN2
+ & +((HR2+FR2)*((XMQA-XMS2(2))*XMS2(2)-XM24
+ & +2D0*XMG*XM*SIN2D*(XMS2(2)-XM2-XMR2))
+ & +4D0*HFR*XM*XMR*(XMS2(2)-XMG2-XM2)
+ & -8D0*HFR*XMQ4*SIN2D)*B2
+ G(3)=(2D0*HFL*SIN2D*(XMS2(1)*(GRS+XMS2(1))+XM2*(SBAR-XMG2-XMR2)
+ & +XMG2*XMR2+XM2*XM2)-2D0*XMR*XMG*(HL2*SIND2+FL2*COSD2)*SBAR
+ & -2D0*XMG*XM*HFL*(SBAR+XMR2-XMG2)
+ & +XMR*XM*(HL2+FL2)*SIN2D*(SBAR+XMG2-XMR2)
+ & -4D0*XMQ4*(HL2-FL2)*COS2D)/(GRS+2D0*XMS2(1))*XLN1
+ G(4)=4D0*COS2D*XM*XMG/(XMS2(1)-XMS2(2))*
+ & (((HLFR+HRFL)*(XM2+XMR2)+2D0*XM*XMR*(HH+FF))*(XLN1-XLN2)
+ & +(HLFR+HRFL)*(XMS2(2)*XLN2-XMS2(1)*XLN1))
+ G(5)=(2D0*(HH*COSD2-FF*SIND2)
+ & *((XMS2(2)*(XMS2(2)+GRS)+XM2*XM2+XMG2*XMR2)*XLN2
+ & +(XMS2(1)*(XMS2(1)+GRS)+XM2*XM2+XMG2*XMR2)*XLN1)
+ & +XM*((HH-FF)*SIN2D*XMG-(HRFL-HLFR)*XMR)
+ & *((GRS+XMS2(1)*2D0)*XLN1-(GRS+XMS2(2)*2D0)*XLN2)
+ & +((HRFL-HLFR)*XMR*(SIN2D*XMG*(SBAR-4D0*XM2)
+ & +COS2D*XM*(SBAR+XMG2-XMR2))
+ & +2D0*(FF*COSD2-HH*SIND2)*XM2*(SBAR-XMG2-XMR2))
+ & *(XLN1+XLN2))/(GRS+XMS2(1)+XMS2(2))
+ G(6)=(-2D0*HFR*SIN2D*(XMS2(2)*(GRS+XMS2(2))+XM2*(SBAR-XMG2-XMR2)
+ & +XMG2*XMR2+XM2*XM2)-2D0*XMR*XMG*(HR2*SIND2+FR2*COSD2)*SBAR
+ & -2D0*XMG*XM*HFR*(SBAR+XMR2-XMG2)
+ & -XMR*XM*(HR2+FR2)*SIN2D*(SBAR+XMG2-XMR2)
+ & -4D0*XMQ4*(HR2-FR2)*COS2D)/(GRS+2D0*XMS2(2))*XLN2
+ SUMME(LIN)=0D0
+ DO 160 J=0,6
+ SUMME(LIN)=SUMME(LIN)+G(J)
+ 160 CONTINUE
+ 170 CONTINUE
+ SUMME(0)=0D0
+ SUMME(NN)=0D0
+ GAM = ALPHAW * ALPHAS * PYSIMP(SUMME,SMIN,SMAX,NN)
+ &/ (16D0 * PARU(1) * PARU(102) * XMGLU**3)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTBBC
+C...Calculates the three-body decay of gluinos into
+C...charginos and third generation fermions.
+
+ SUBROUTINE PYTBBC(I,NN,XMGLU,GAM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
+
+C...Local variables.
+ EXTERNAL PYSIMP,PYLAMF
+ INTEGER I,NN,LIN
+ DOUBLE PRECISION XMG,XMG2,XMB,XMB2,XMR,XMR2
+ DOUBLE PRECISION XMT,XMT2,XMST(4),XMSB(4)
+ DOUBLE PRECISION ULR(2),VLR(2),XMQ2,XMQ4,AM,W,SBAR,SMIN,SMAX
+ DOUBLE PRECISION SUMME(0:100),A(4,8)
+ DOUBLE PRECISION COS2A,SIN2A,COS2C,SIN2C
+ DOUBLE PRECISION GRS,XMQ3,XMGBTR,XMGTBR,ANT1,ANT2,ANB1,ANB2
+ DOUBLE PRECISION XMGLU,GAM
+ DOUBLE PRECISION PYSIMP,PYLAMF
+ DOUBLE PRECISION XX1(2),XX2(2),AAA(2),BBB(2),CCC(2),
+ &DDD(2),EEE(2),FFF(2)
+ SAVE XX1,XX2,AAA,BBB,CCC,DDD,EEE,FFF
+ DOUBLE PRECISION ALPHAW,ALPHAS,GSU2
+ DOUBLE PRECISION AMC(2),AMN(4)
+ SAVE AMC,AMN
+ DOUBLE PRECISION AMBOT,AMSB(2),SINC,COSC
+ DOUBLE PRECISION AMTOP,AMST(2),SINA,COSA
+ SAVE AMSB,AMST
+ DOUBLE PRECISION SINW,COSW,TANW,COSW2,SINW2
+ LOGICAL IFIRST
+ SAVE IFIRST
+ DATA IFIRST/.TRUE./
+
+ TANB=RMSS(5)
+ SINB=TANB/SQRT(1D0+TANB**2)
+ COSB=SINB/TANB
+ XW=PARU(102)
+ SINW=SQRT(XW)
+ COSW=SQRT(1D0-XW)
+ AMW=PMAS(24,1)
+ COSC=SFMIX(5,1)
+ SINC=SFMIX(5,3)
+ COSA=SFMIX(6,1)
+ SINA=SFMIX(6,3)
+ AMBOT=0D0
+ AMTOP=PYRNMT(PMAS(6,1))
+ W2=SQRT(2D0)
+ AMW=PMAS(24,1)
+ FAKT1=AMBOT/W2/AMW/COSB
+ FAKT2=AMTOP/W2/AMW/SINB
+ IF(IFIRST) THEN
+ AMC(1)=SMW(1)
+ AMC(2)=SMW(2)
+ DO 100 JJ=1,2
+ CCC(JJ)=FAKT1*UMIX(JJ,2)*SINC-UMIX(JJ,1)*COSC
+ EEE(JJ)=FAKT2*VMIX(JJ,2)*COSC
+ DDD(JJ)=FAKT1*UMIX(JJ,2)*COSC+UMIX(JJ,1)*SINC
+ FFF(JJ)=FAKT2*VMIX(JJ,2)*SINC
+ XX1(JJ)=FAKT2*VMIX(JJ,2)*SINA-VMIX(JJ,1)*COSA
+ AAA(JJ)=FAKT1*UMIX(JJ,2)*COSA
+ XX2(JJ)=FAKT2*VMIX(JJ,2)*COSA+VMIX(JJ,1)*SINA
+ BBB(JJ)=FAKT1*UMIX(JJ,2)*SINA
+ 100 CONTINUE
+ AMST(1)=PMAS(PYCOMP(KSUSY1+6),1)
+ AMST(2)=PMAS(PYCOMP(KSUSY2+6),1)
+ AMSB(1)=PMAS(PYCOMP(KSUSY1+5),1)
+ AMSB(2)=PMAS(PYCOMP(KSUSY2+5),1)
+ IFIRST=.FALSE.
+ ENDIF
+ AMTOP=PMAS(6,1)
+
+ ULR(1)=XX1(I)*XX1(I)+AAA(I)*AAA(I)
+ ULR(2)=XX2(I)*XX2(I)+BBB(I)*BBB(I)
+ VLR(1)=CCC(I)*CCC(I)+EEE(I)*EEE(I)
+ VLR(2)=DDD(I)*DDD(I)+FFF(I)*FFF(I)
+
+ COS2A=COSA**2-SINA**2
+ SIN2A=SINA*COSA*2D0
+ COS2C=COSC**2-SINC**2
+ SIN2C=SINC*COSC*2D0
+
+ XMG=XMGLU
+ XMT=AMTOP
+ XMB=0D0
+ XMR=AMC(I)
+ XMG2=XMG*XMG
+ ALPHAW=PYALEM(XMG2)
+ ALPHAS=PYALPS(XMG2)
+ XMT2=XMT*XMT
+ XMB2=XMB*XMB
+ XMR2=XMR*XMR
+ XMQ2=XMG2+XMT2+XMB2+XMR2
+ XMQ4=XMG*XMT*XMB*XMR
+ XMQ3=XMG2*XMR2+XMT2*XMB2
+ XMGBTR=(XMG2+XMB2)*(XMT2+XMR2)
+ XMGTBR=(XMG2+XMT2)*(XMB2+XMR2)
+
+ XMST(1)=AMST(1)*AMST(1)
+ XMST(2)=AMST(1)*AMST(1)
+ XMST(3)=AMST(2)*AMST(2)
+ XMST(4)=AMST(2)*AMST(2)
+ XMSB(1)=AMSB(1)*AMSB(1)
+ XMSB(2)=AMSB(2)*AMSB(2)
+ XMSB(3)=AMSB(1)*AMSB(1)
+ XMSB(4)=AMSB(2)*AMSB(2)
+
+ A(1,1)=-COSA*SINC*CCC(I)*AAA(I)-SINA*COSC*EEE(I)*XX1(I)
+ A(1,2)=XMG*XMB*(COSA*COSC*CCC(I)*AAA(I)+SINA*SINC*EEE(I)*XX1(I))
+ A(1,3)=-XMG*XMR*(COSA*COSC*CCC(I)*XX1(I)+SINA*SINC*EEE(I)*AAA(I))
+ A(1,4)=XMB*XMR*(COSA*SINC*CCC(I)*XX1(I)+SINA*COSC*EEE(I)*AAA(I))
+ A(1,5)=XMG*XMT*(COSA*COSC*EEE(I)*XX1(I)+SINA*SINC*CCC(I)*AAA(I))
+ A(1,6)=-XMT*XMB*(COSA*SINC*EEE(I)*XX1(I)+SINA*COSC*CCC(I)*AAA(I))
+ A(1,7)=XMT*XMR*(COSA*SINC*EEE(I)*AAA(I)+SINA*COSC*CCC(I)*XX1(I))
+ A(1,8)=-XMQ4*(COSA*COSC*EEE(I)*AAA(I)+SINA*SINC*CCC(I)*XX1(I))
+
+ A(2,1)=-COSA*COSC*DDD(I)*AAA(I)-SINA*SINC*FFF(I)*XX1(I)
+ A(2,2)=-XMG*XMB*(COSA*SINC*DDD(I)*AAA(I)+SINA*COSC*FFF(I)*XX1(I))
+ A(2,3)=XMG*XMR*(COSA*SINC*DDD(I)*XX1(I)+SINA*COSC*FFF(I)*AAA(I))
+ A(2,4)=XMB*XMR*(COSA*COSC*DDD(I)*XX1(I)+SINA*SINC*FFF(I)*AAA(I))
+ A(2,5)=XMG*XMT*(COSA*SINC*FFF(I)*XX1(I)+SINA*COSC*DDD(I)*AAA(I))
+ A(2,6)=XMT*XMB*(COSA*COSC*FFF(I)*XX1(I)+SINA*SINC*DDD(I)*AAA(I))
+ A(2,7)=-XMT*XMR*(COSA*COSC*FFF(I)*AAA(I)+SINA*SINC*DDD(I)*XX1(I))
+ A(2,8)=-XMQ4*(COSA*SINC*FFF(I)*AAA(I)+SINA*COSC*DDD(I)*XX1(I))
+
+ A(3,1)=-COSA*COSC*EEE(I)*XX2(I)-SINA*SINC*CCC(I)*BBB(I)
+ A(3,2)=XMG*XMB*(COSA*SINC*EEE(I)*XX2(I)+SINA*COSC*CCC(I)*BBB(I))
+ A(3,3)=XMG*XMR*(COSA*SINC*EEE(I)*BBB(I)+SINA*COSC*CCC(I)*XX2(I))
+ A(3,4)=-XMB*XMR*(COSA*COSC*EEE(I)*BBB(I)+SINA*SINC*CCC(I)*XX2(I))
+ A(3,5)=-XMG*XMT*(COSA*SINC*CCC(I)*BBB(I)+SINA*COSC*EEE(I)*XX2(I))
+ A(3,6)=XMT*XMB*(COSA*COSC*CCC(I)*BBB(I)+SINA*SINC*EEE(I)*XX2(I))
+ A(3,7)=XMT*XMR*(COSA*COSC*CCC(I)*XX2(I)+SINA*SINC*EEE(I)*BBB(I))
+ A(3,8)=-XMQ4*(COSA*SINC*CCC(I)*XX2(I)+SINA*COSC*EEE(I)*BBB(I))
+
+ A(4,1)=-COSA*SINC*FFF(I)*XX2(I)-SINA*COSC*DDD(I)*BBB(I)
+ A(4,2)=-XMG*XMB*(COSA*COSC*FFF(I)*XX2(I)+SINA*SINC*DDD(I)*BBB(I))
+ A(4,3)=-XMG*XMR*(COSA*COSC*FFF(I)*BBB(I)+SINA*SINC*DDD(I)*XX2(I))
+ A(4,4)=-XMB*XMR*(COSA*SINC*FFF(I)*BBB(I)+SINA*COSC*DDD(I)*XX2(I))
+ A(4,5)=-XMG*XMT*(COSA*COSC*DDD(I)*BBB(I)+SINA*SINC*FFF(I)*XX2(I))
+ A(4,6)=-XMT*XMB*(COSA*SINC*DDD(I)*BBB(I)+SINA*COSC*FFF(I)*XX2(I))
+ A(4,7)=-XMT*XMR*(COSA*SINC*DDD(I)*XX2(I)+SINA*COSC*FFF(I)*BBB(I))
+ A(4,8)=-XMQ4*(COSA*COSC*DDD(I)*XX2(I)+SINA*SINC*FFF(I)*BBB(I))
+
+ SMAX=(XMG-ABS(XMR))**2
+ SMIN=(XMB+XMT)**2+0.1D0
+
+ DO 120 LIN=0,NN-1
+ SBAR=SMIN+DBLE(LIN)*(SMAX-SMIN)/DBLE(NN)
+ AM=(XMG2-XMR2)*(XMT2-XMB2)/2D0/SBAR
+ GRS=SBAR-XMQ2
+ W=PYLAMF(SBAR,XMB2,XMT2)*PYLAMF(SBAR,XMG2,XMR2)
+ W=DSQRT(W)/2D0/SBAR
+ ANT1=LOG(ABS((GRS/2D0+AM+XMST(1)-W)/(GRS/2D0+AM+XMST(1)+W)))
+ ANT2=LOG(ABS((GRS/2D0+AM+XMST(3)-W)/(GRS/2D0+AM+XMST(3)+W)))
+ ANB1=LOG(ABS((GRS/2D0-AM+XMSB(1)-W)/(GRS/2D0-AM+XMSB(1)+W)))
+ ANB2=LOG(ABS((GRS/2D0-AM+XMSB(2)-W)/(GRS/2D0-AM+XMSB(2)+W)))
+ SUMME(LIN)=-ULR(1)*W+(ULR(1)*(XMQ2/2D0-XMST(1)-XMG*XMT*SIN2A)
+ & +2D0*XX1(I)*AAA(I)*XMR*XMB)*ANT1
+ & +(ULR(1)/2D0*(XMST(1)*(XMQ2-XMST(1))-XMGTBR
+ & -2D0*XMG*XMT*SIN2A*(XMST(1)-XMB2-XMR2))
+ & +2D0*XX1(I)*AAA(I)*XMR*XMB*(XMST(1)-XMG2-XMT2)
+ & +4D0*SIN2A*XX1(I)*AAA(I)*XMQ4)
+ & *(1D0/(GRS/2D0+AM+XMST(1)-W)-1D0/(GRS/2D0+AM+XMST(1)+W))
+ SUMME(LIN)=SUMME(LIN)-ULR(2)*W
+ & +(ULR(2)*(XMQ2/2D0-XMST(3)+XMG*XMT*SIN2A)
+ & -2D0*XX2(I)*BBB(I)*XMR*XMB)*ANT2
+ & +(ULR(2)/2D0*(XMST(3)*(XMQ2-XMST(3))-XMGTBR
+ & +2D0*XMG*XMT*SIN2A*(XMST(3)-XMB2-XMR2))
+ & -2D0*XX2(I)*BBB(I)*XMR*XMB*(XMST(3)-XMG2-XMT2)
+ & +4D0*SIN2A*XX2(I)*BBB(I)*XMQ4)
+ & *(1D0/(GRS/2D0+AM+XMST(3)-W)-1D0/(GRS/2D0+AM+XMST(3)+W))
+ SUMME(LIN)=SUMME(LIN)-VLR(1)*W
+ & +(VLR(1)*(XMQ2/2D0-XMSB(1)-XMG*XMB*SIN2C)
+ & +2D0*CCC(I)*EEE(I)*XMR*XMT)*ANB1
+ & +(VLR(1)/2D0*(XMSB(1)*(XMQ2-XMSB(1))-XMGBTR
+ & -2D0*XMG*XMB*SIN2C*(XMSB(1)-XMT2-XMR2))
+ & +2D0*CCC(I)*EEE(I)*XMR*XMT*(XMSB(1)-XMG2-XMB2)
+ & +4D0*SIN2C*CCC(I)*EEE(I)*XMQ4)
+ & *(1D0/(GRS/2D0-AM+XMSB(1)-W)-1D0/(GRS/2D0-AM+XMSB(1)+W))
+ SUMME(LIN)=SUMME(LIN)-VLR(2)*W
+ & +(VLR(2)*(XMQ2/2D0-XMSB(2)+XMG*XMB*SIN2C)
+ & -2D0*DDD(I)*FFF(I)*XMR*XMT)*ANB2
+ & +(VLR(2)/2D0*(XMSB(2)*(XMQ2-XMSB(2))-XMGBTR
+ & +2D0*XMG*XMB*SIN2C*(XMSB(2)-XMT2-XMR2))
+ & -2D0*DDD(I)*FFF(I)*XMR*XMT*(XMSB(2)-XMG2-XMB2)
+ & +4D0*SIN2C*DDD(I)*FFF(I)*XMQ4)
+ & *(1D0/(GRS/2D0-AM+XMSB(2)-W)-1D0/(GRS/2D0-AM+XMSB(2)+W))
+ SUMME(LIN)=SUMME(LIN)+2D0*XMG*XMT*COS2A/(XMST(3)-XMST(1))
+ & *((AAA(I)*BBB(I)-XX1(I)*XX2(I))
+ & *((XMST(3)-XMB2-XMR2)*ANT2-(XMST(1)-XMB2-XMR2)*ANT1)
+ & +2D0*(AAA(I)*XX2(I)-XX1(I)*BBB(I))*XMB*XMR*(ANT2-ANT1))
+ SUMME(LIN)=SUMME(LIN)+2D0*XMG*XMB*COS2C/(XMSB(2)-XMSB(1))
+ & *((EEE(I)*FFF(I)-CCC(I)*DDD(I))
+ & *((XMSB(2)-XMT2-XMR2)*ANB2-(XMSB(1)-XMT2-XMR2)*ANB1)
+ & +2D0*(EEE(I)*DDD(I)-CCC(I)*FFF(I))*XMT*XMR*(ANB2-ANB1))
+ DO 110 J=1,4
+ SUMME(LIN)=SUMME(LIN)-2D0*A(J,1)*W
+ & +((-A(J,1)*(XMSB(J)*(GRS+XMSB(J))+XMQ3)
+ & +A(J,2)*(XMSB(J)-XMT2-XMR2)+A(J,3)*(SBAR-XMB2-XMT2)
+ & +A(J,4)*(XMSB(J)+SBAR-XMB2-XMR2)
+ & -A(J,5)*(XMSB(J)+SBAR-XMG2-XMT2)+A(J,6)*(XMG2+XMR2-SBAR)
+ & -A(J,7)*(XMSB(J)-XMG2-XMB2)+2D0*A(J,8))
+ & *LOG(ABS((GRS/2D0+XMSB(J)-AM-W)/(GRS/2D0+XMSB(J)-AM+W)))
+ & -(A(J,1)*(XMST(J)*(GRS+XMST(J))+XMQ3)
+ & +A(J,2)*(XMST(J)+SBAR-XMG2-XMB2)-A(J,3)*(SBAR-XMB2-XMT2)
+ & +A(J,4)*(XMST(J)-XMG2-XMT2)-A(J,5)*(XMST(J)-XMR2-XMB2)
+ & -A(J,6)*(XMG2+XMR2-SBAR)
+ & -A(J,7)*(XMST(J)+SBAR-XMT2-XMR2)-2D0*A(J,8))
+ & *LOG(ABS((GRS/2D0+XMST(J)+AM-W)/(GRS/2D0+XMST(J)+AM+W))))
+ & /(GRS+XMSB(J)+XMST(J))
+ 110 CONTINUE
+ 120 CONTINUE
+ SUMME(NN)=0D0
+ GAM= ALPHAW * ALPHAS * PYSIMP(SUMME,SMIN,SMAX,NN)
+ &/ (16D0 * PARU(1) * PARU(102) * XMGLU**3)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYNJDC
+C...Calculates decay widths for the neutralinos (admixtures of
+C...Bino, W3-ino, Higgs1-ino, Higgs2-ino)
+
+C...Input: KCIN = KF code for particle
+C...Output: XLAM = widths
+C... IDLAM = KF codes for decay particles
+C... IKNT = number of decay channels defined
+C...AUTHOR: STEPHEN MRENNA
+C...Last change:
+C...10-15-95: force decay chi^0_2 -> chi^0_1 + gamma
+C...when CHIGAMMA .NE. 0
+C...10 FEB 96: Calculate this decay for small tan(beta)
+
+ SUBROUTINE PYNJDC(KFIN,XLAM,IDLAM,IKNT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ COMMON/PYINTS/XXM(20)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
+
+C...Local variables.
+ INTEGER KFIN,KCIN
+ DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
+ &XMZ,XMZ2,AXMJ,AXMI
+ DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG,XMK
+ DOUBLE PRECISION S12MIN,S12MAX
+ DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2
+ DOUBLE PRECISION PYLAMF,XL,QIJ,RIJ
+ DOUBLE PRECISION TANW,XW,AEM,C1,AS,EI,T3
+ DOUBLE PRECISION PYX2XH,PYX2XG
+ DOUBLE PRECISION XLAM(0:200)
+ INTEGER IDLAM(200,3)
+ INTEGER LKNT,IX,IH,J,IJ,I,IKNT,FID
+ INTEGER ITH(3),KF1,KF2
+ INTEGER ITHC
+ DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
+ DOUBLE PRECISION SR2
+ DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K
+ DOUBLE PRECISION GAMCON,XMT1,XMT2
+ DOUBLE PRECISION PYALEM,PI,PYALPS
+ DOUBLE PRECISION AL,BL,AR,BR,ALP,ARP,BLP,BRP
+ DOUBLE PRECISION RAT1,RAT2
+ DOUBLE PRECISION T3T,CA,CB,FCOL
+ DOUBLE PRECISION ALFA,BETA,TANB
+ DOUBLE PRECISION PYGAUS,PYXXGA
+ EXTERNAL PYXXW5,PYGAUS,PYXXZ5
+ DOUBLE PRECISION PREC
+ INTEGER KFNCHI(4),KFCCHI(2)
+ DATA ETAH/1D0,1D0,-1D0/
+ DATA ITH/25,35,36/
+ DATA ITHC/37/
+ DATA PREC/1D-2/
+ DATA PI/3.141592654D0/
+ DATA SR2/1.4142136D0/
+ DATA KFNCHI/1000022,1000023,1000025,1000035/
+ DATA KFCCHI/1000024,1000037/
+
+C...COUNT THE NUMBER OF DECAY MODES
+ LKNT=0
+
+ XMW=PMAS(24,1)
+ XMW2=XMW**2
+ XMZ=PMAS(23,1)
+ XMZ2=XMZ**2
+ XW=1D0-XMW2/XMZ2
+ TANW = SQRT(XW/(1D0-XW))
+
+C...IX IS 1 - 4 DEPENDING ON SEQUENCE NUMBER
+ KCIN=PYCOMP(KFIN)
+ IX=1
+ IF(KFIN.EQ.KFNCHI(2)) IX=2
+ IF(KFIN.EQ.KFNCHI(3)) IX=3
+ IF(KFIN.EQ.KFNCHI(4)) IX=4
+
+ XMI=SMZ(IX)
+ XMI2=XMI**2
+ AXMI=ABS(XMI)
+ AEM=PYALEM(XMI2)
+ AS =PYALPS(XMI2)
+ C1=AEM/XW
+ XMI3=ABS(XMI**3)
+
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ ALFA=RMSS(18)
+ CBETA=COS(BETA)
+ SBETA=TANB*CBETA
+ CALFA=COS(ALFA)
+ SALFA=SIN(ALFA)
+
+C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
+ IF(IX.EQ.1.AND.IMSS(11).EQ.0) THEN
+ RETURN
+ ENDIF
+
+C...FORCE CHI0_2 -> CHI0_1 + GAMMA
+ IF(IX.EQ.2 .AND. IMSS(10).NE.0 ) THEN
+ XMJ=SMZ(1)
+ AXMJ=ABS(XMJ)
+ LKNT=LKNT+1
+ GAMCON=AEM**3/8D0/PI/XMW2/XW
+ XMT1=(PMAS(PYCOMP(KSUSY1+6),1)/PMAS(6,1))**2
+ XMT2=(PMAS(PYCOMP(KSUSY2+6),1)/PMAS(6,1))**2
+ XLAM(LKNT)=PYXXGA(GAMCON,AXMI,AXMJ,XMT1,XMT2)
+ IDLAM(LKNT,1)=KSUSY1+22
+ IDLAM(LKNT,2)=22
+ IDLAM(LKNT,3)=0
+ WRITE(MSTU(11),*) 'FORCED N2 -> N1 + GAMMA ',XLAM(LKNT)
+ GOTO 290
+ ENDIF
+
+C...GRAVITINO DECAY MODES
+
+ IF(IMSS(11).EQ.1) THEN
+ XMP=RMSS(28)
+ IDG=39+KSUSY1
+ XMGR=PMAS(PYCOMP(IDG),1)
+ SINW=SQRT(XW)
+ COSW=SQRT(1D0-XW)
+ XFAC=(XMI2/(XMP*XMGR))**2*AXMI/48D0/PI
+ IF(AXMI.GT.XMGR+PMAS(22,1)) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=22
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*(ZMIX(IX,1)*COSW+ZMIX(IX,2)*SINW)**2
+ ENDIF
+ IF(AXMI.GT.XMGR+XMZ) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=23
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*((ZMIX(IX,1)*SINW-ZMIX(IX,2)*COSW)**2 +
+ $ .5D0*(ZMIX(IX,3)*CBETA-ZMIX(IX,4)*SBETA)**2)*(1D0-XMZ2/XMI2)**4
+ ENDIF
+ IF(AXMI.GT.XMGR+PMAS(25,1)) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=25
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*((ZMIX(IX,3)*SALFA-ZMIX(IX,4)*CALFA)**2)*
+ $ .5D0*(1D0-PMAS(25,1)**2/XMI2)**4
+ ENDIF
+ IF(AXMI.GT.XMGR+PMAS(35,1)) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=35
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*((ZMIX(IX,3)*CALFA+ZMIX(IX,4)*SALFA)**2)*
+ $ .5D0*(1D0-PMAS(35,1)**2/XMI2)**4
+ ENDIF
+ IF(AXMI.GT.XMGR+PMAS(36,1)) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=36
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*((ZMIX(IX,3)*SBETA+ZMIX(IX,4)*CBETA)**2)*
+ $ .5D0*(1D0-PMAS(36,1)**2/XMI2)**4
+ ENDIF
+ ENDIF
+
+ DO 180 IJ=1,IX-1
+ XMJ=SMZ(IJ)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+
+C...CHI0_I -> CHI0_J + GAMMA
+ IF(AXMI.GE.AXMJ.AND.SBETA/CBETA.LE.2D0) THEN
+ RAT1=ZMIX(IJ,1)**2+ZMIX(IJ,2)**2
+ RAT1=RAT1/( 1D-6+ZMIX(IX,3)**2+ZMIX(IX,4)**2 )
+ RAT2=ZMIX(IX,1)**2+ZMIX(IX,2)**2
+ RAT2=RAT2/( 1D-6+ZMIX(IJ,3)**2+ZMIX(IJ,4)**2 )
+ IF((RAT1.GT. 0.90D0 .AND. RAT1.LT. 1.10D0) .OR.
+ & (RAT2.GT. 0.90D0 .AND. RAT2.LT. 1.10D0)) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=22
+ IDLAM(LKNT,3)=0
+ GAMCON=AEM**3/8D0/PI/XMW2/XW
+ XMT1=(PMAS(PYCOMP(KSUSY1+6),1)/PMAS(6,1))**2
+ XMT2=(PMAS(PYCOMP(KSUSY2+6),1)/PMAS(6,1))**2
+ XLAM(LKNT)=PYXXGA(GAMCON,AXMI,AXMJ,XMT1,XMT2)
+ ENDIF
+ ENDIF
+
+C...CHI0_I -> CHI0_J + Z0
+ IF(AXMI.GE.AXMJ+XMZ) THEN
+ LKNT=LKNT+1
+ GL=-0.5D0*(ZMIX(IX,3)*ZMIX(IJ,3)-ZMIX(IX,4)*ZMIX(IJ,4))
+ GR=-GL
+ XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMZ,GL,GR)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=23
+ IDLAM(LKNT,3)=0
+ ELSEIF(AXMI.GE.AXMJ) THEN
+ FID=11
+ EI=KCHG(FID,1)/3D0
+ T3=-0.5D0
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ XXM(5)=PMAS(PYCOMP(KSUSY1+11),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+11),1)
+ XXM(7)=XMZ
+ XXM(8)=PMAS(23,2)
+ XXM(9)=-0.5D0*(ZMIX(IX,3)*ZMIX(IJ,3)-ZMIX(IX,4)*ZMIX(IJ,4))
+ XXM(10)=-XXM(9)
+ XXM(11)=(T3-EI*XW)/(1D0-XW)
+ XXM(12)=-EI*XW/(1D0-XW)
+ XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
+ XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
+ XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
+ XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
+ S12MIN=0D0
+ S12MAX=(AXMI-AXMJ)**2
+
+C...CHARGED LEPTONS
+ IF( XXM(5).LT.AXMI ) THEN
+ XXM(5)=1D6
+ ENDIF
+ IF(XXM(6).LT.AXMI ) THEN
+ XXM(6)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+2D0*PMAS(11,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=11
+ IDLAM(LKNT,3)=-11
+ IF(AXMI.GE.AXMJ+2D0*PMAS(13,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=13
+ IDLAM(LKNT,3)=-13
+ ENDIF
+ ENDIF
+ 100 CONTINUE
+ IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
+ XXM(5)=PMAS(PYCOMP(KSUSY1+15),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+15),1)
+ ELSE
+ XXM(6)=PMAS(PYCOMP(KSUSY1+15),1)
+ XXM(5)=PMAS(PYCOMP(KSUSY2+15),1)
+ ENDIF
+ IF( XXM(5).LT.AXMI ) THEN
+ XXM(5)=1D6
+ ENDIF
+ IF(XXM(6).LT.AXMI ) THEN
+ XXM(6)=1D6
+ ENDIF
+
+ IF(AXMI.GE.AXMJ+2D0*PMAS(15,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=15
+ IDLAM(LKNT,3)=-15
+ ENDIF
+
+C...NEUTRINOS
+ 110 CONTINUE
+ FID=12
+ EI=KCHG(FID,1)/3D0
+ T3=0.5D0
+ XXM(5)=PMAS(PYCOMP(KSUSY1+12),1)
+ XXM(6)=1D6
+ XXM(11)=(T3-EI*XW)/(1D0-XW)
+ XXM(12)=-EI*XW/(1D0-XW)
+ XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
+ XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
+ XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
+ XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
+
+ IF( XXM(5).LT.AXMI ) THEN
+ XXM(5)=1D6
+ ENDIF
+
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=12
+ IDLAM(LKNT,3)=-12
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=14
+ IDLAM(LKNT,3)=-14
+ 120 CONTINUE
+ XXM(5)=PMAS(PYCOMP(KSUSY1+16),1)
+ IF( XXM(5).LT.AXMI ) THEN
+ XXM(5)=1D6
+ ENDIF
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=16
+ IDLAM(LKNT,3)=-16
+
+C...D-TYPE QUARKS
+ 130 CONTINUE
+ XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
+ FID=1
+ EI=KCHG(FID,1)/3D0
+ T3=-0.5D0
+
+ XXM(11)=(T3-EI*XW)/(1D0-XW)
+ XXM(12)=-EI*XW/(1D0-XW)
+ XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
+ XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
+ XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
+ XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
+
+ IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 140
+ IF( XXM(5).LT.AXMI ) THEN
+ XXM(5)=1D6
+ ELSEIF( XXM(6).LT.AXMI ) THEN
+ XXM(6)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=1
+ IDLAM(LKNT,3)=-1
+ IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=3
+ IDLAM(LKNT,3)=-3
+ ENDIF
+ ENDIF
+ 140 CONTINUE
+ IF(ABS(SFMIX(5,1)).GT.ABS(SFMIX(5,2))) THEN
+ XXM(5)=PMAS(PYCOMP(KSUSY1+5),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+5),1)
+ ELSE
+ XXM(6)=PMAS(PYCOMP(KSUSY1+5),1)
+ XXM(5)=PMAS(PYCOMP(KSUSY2+5),1)
+ ENDIF
+ IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 150
+ IF(XXM(5).LT.AXMI) THEN
+ XXM(5)=1D6
+ ELSEIF(XXM(6).LT.AXMI) THEN
+ XXM(6)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=5
+ IDLAM(LKNT,3)=-5
+ ENDIF
+
+C...U-TYPE QUARKS
+ 150 CONTINUE
+ XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
+ FID=2
+ EI=KCHG(FID,1)/3D0
+ T3=0.5D0
+
+ XXM(11)=(T3-EI*XW)/(1D0-XW)
+ XXM(12)=-EI*XW/(1D0-XW)
+ XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
+ XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
+ XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
+ XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
+
+ IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 160
+ IF(XXM(5).LT.AXMI) THEN
+ XXM(5)=1D6
+ ELSEIF(XXM(6).LT.AXMI) THEN
+ XXM(6)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=2
+ IDLAM(LKNT,3)=-2
+ IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=4
+ IDLAM(LKNT,3)=-4
+ ENDIF
+ ENDIF
+ 160 CONTINUE
+ ENDIF
+
+C...CHI0_I -> CHI0_J + H0_K
+ EH(1)=SIN(ALFA)
+ EH(2)=COS(ALFA)
+ EH(3)=-SIN(BETA)
+ DH(1)=COS(ALFA)
+ DH(2)=-SIN(ALFA)
+ DH(3)=COS(BETA)
+
+ QIJ=ZMIX(IX,3)*ZMIX(IJ,2)+ZMIX(IJ,3)*ZMIX(IX,2)-
+ & TANW*(ZMIX(IX,3)*ZMIX(IJ,1)+ZMIX(IJ,3)*ZMIX(IX,1))
+ RIJ=ZMIX(IX,4)*ZMIX(IJ,2)+ZMIX(IJ,4)*ZMIX(IX,2)-
+ & TANW*(ZMIX(IX,4)*ZMIX(IJ,1)+ZMIX(IJ,4)*ZMIX(IX,1))
+
+ DO 170 IH=1,3
+ XMH=PMAS(ITH(IH),1)
+ XMH2=XMH**2
+ IF(AXMI.GE.AXMJ+XMH) THEN
+ LKNT=LKNT+1
+ XL=PYLAMF(XMI2,XMJ2,XMH2)
+ F21K=0.5D0*(QIJ*EH(IH)+RIJ*DH(IH))
+ F12K=F21K
+C...SIGN OF MASSES I,J
+ XMK=XMJ
+ IF(IH.EQ.3) XMK=-XMK
+ XLAM(LKNT)=PYX2XH(C1,XMI,XMK,XMH,F12K,F21K)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=ITH(IH)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 170 CONTINUE
+ 180 CONTINUE
+
+C...CHI0_I -> CHI+_J + W-
+ DO 220 IJ=1,2
+ XMJ=SMW(IJ)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+ IF(AXMI.GE.AXMJ+XMW) THEN
+ LKNT=LKNT+1
+ GL=ZMIX(IX,2)*VMIX(IJ,1)-ZMIX(IX,4)*VMIX(IJ,2)/SR2
+ GR=ZMIX(IX,2)*UMIX(IJ,1)+ZMIX(IX,3)*UMIX(IJ,2)/SR2
+ XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMW,GL,GR)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=-24
+ IDLAM(LKNT,3)=0
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-KFCCHI(IJ)
+ IDLAM(LKNT,2)=24
+ IDLAM(LKNT,3)=0
+ ELSEIF(AXMI.GE.AXMJ) THEN
+ S12MIN=0D0
+ S12MAX=(AXMI-AXMJ)**2
+ XXM(5)=ZMIX(IX,2)*VMIX(IJ,1)-ZMIX(IX,4)*VMIX(IJ,2)/SR2
+ XXM(6)=ZMIX(IX,2)*UMIX(IJ,1)+ZMIX(IX,3)*UMIX(IJ,2)/SR2
+
+C...LEPTONS
+ FID=11
+ EI=KCHG(FID,1)/3D0
+ T3=-0.5D0
+ XXM(7)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*UMIX(IJ,1)
+ FID=12
+ EI=KCHG(FID,1)/3D0
+ T3=0.5D0
+ XXM(8)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*VMIX(IJ,1)
+
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ XXM(9)=PMAS(24,1)
+ XXM(10)=PMAS(24,2)
+ XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+12),1)
+ IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 190
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ELSEIF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+PMAS(11,1)+PMAS(12,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=11
+ IDLAM(LKNT,3)=-12
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ IF(AXMI.GE.AXMJ+PMAS(13,1)+PMAS(14,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=13
+ IDLAM(LKNT,3)=-14
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ENDIF
+ ENDIF
+ 190 CONTINUE
+ IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
+ XXM(11)=PMAS(PYCOMP(KSUSY1+15),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
+ ELSE
+ XXM(11)=PMAS(PYCOMP(KSUSY2+15),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
+ ENDIF
+
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ENDIF
+ IF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+PMAS(15,1)+PMAS(16,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=15
+ IDLAM(LKNT,3)=-16
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ENDIF
+
+C...NOW, DO THE QUARKS
+ 200 CONTINUE
+ FID=1
+ EI=KCHG(FID,1)/3D0
+ T3=-0.5D0
+ XXM(7)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*UMIX(IJ,1)
+ FID=2
+ EI=KCHG(FID,1)/3D0
+ T3=0.5D0
+ XXM(8)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*VMIX(IJ,1)
+
+ XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
+ IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 210
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ELSEIF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+PMAS(2,1)+PMAS(1,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=1
+ IDLAM(LKNT,3)=-2
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=3
+ IDLAM(LKNT,3)=-4
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ENDIF
+ ENDIF
+ 210 CONTINUE
+ ENDIF
+ 220 CONTINUE
+ 230 CONTINUE
+
+C...CHI0_I -> CHI+_I + H-
+ DO 240 IJ=1,2
+ XMJ=SMW(IJ)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+ XMHP=PMAS(ITHC,1)
+ XMHP2=XMHP**2
+ IF(AXMI.GE.AXMJ+XMHP) THEN
+ LKNT=LKNT+1
+ GL=CBETA*(ZMIX(IX,4)*VMIX(IJ,1)+(ZMIX(IX,2)+
+ & ZMIX(IX,1)*TANW)*VMIX(IJ,2)/SR2)
+ GR=SBETA*(ZMIX(IX,3)*UMIX(IJ,1)-(ZMIX(IX,2)+
+ & ZMIX(IX,1)*TANW)*UMIX(IJ,2)/SR2)
+ XLAM(LKNT)=PYX2XH(C1,XMI,XMJ,XMHP,GL,GR)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=-ITHC
+ IDLAM(LKNT,3)=0
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
+ ELSE
+
+ ENDIF
+ 240 CONTINUE
+
+C...2-BODY DECAYS TO FERMION SFERMION
+ DO 250 J=1,16
+ IF(J.GE.7.AND.J.LE.10) GOTO 250
+ KF1=KSUSY1+J
+ KF2=KSUSY2+J
+ XMSF1=PMAS(PYCOMP(KF1),1)
+ XMSF2=PMAS(PYCOMP(KF2),1)
+ XMF=PMAS(J,1)
+ IF(J.LE.6) THEN
+ FCOL=3D0
+ ELSE
+ FCOL=1D0
+ ENDIF
+
+ EI=KCHG(J,1)/3D0
+ T3T=SIGN(1D0,EI)
+ IF(J.EQ.12.OR.J.EQ.14.OR.J.EQ.16) T3T=1D0
+ IF(MOD(J,2).EQ.0) THEN
+ BL=T3T*ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-T3T)
+ AL=XMF*ZMIX(IX,4)/XMW/SBETA
+ AR=-2D0*EI*TANW*ZMIX(IX,1)
+ BR=AL
+ ELSE
+ BL=T3T*ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-T3T)
+ AL=XMF*ZMIX(IX,3)/XMW/CBETA
+ AR=-2D0*EI*TANW*ZMIX(IX,1)
+ BR=AL
+ ENDIF
+
+C...D~ D_L
+ IF(AXMI.GE.XMF+XMSF1) THEN
+ LKNT=LKNT+1
+ XMA2=XMSF1**2
+ XMB2=XMF**2
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+ CA=AL*SFMIX(J,1)+AR*SFMIX(J,2)
+ CB=BL*SFMIX(J,1)+BR*SFMIX(J,2)
+ XLAM(LKNT)=0.5D0*FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
+ & (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
+ IDLAM(LKNT,1)=KF1
+ IDLAM(LKNT,2)=-J
+ IDLAM(LKNT,3)=0
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+C...D~ D_R
+ IF(AXMI.GE.XMF+XMSF2) THEN
+ LKNT=LKNT+1
+ XMA2=XMSF2**2
+ XMB2=XMF**2
+ CA=AL*SFMIX(J,3)+AR*SFMIX(J,4)
+ CB=BL*SFMIX(J,3)+BR*SFMIX(J,4)
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+ XLAM(LKNT)=0.5D0*FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
+ & (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
+ IDLAM(LKNT,1)=KF2
+ IDLAM(LKNT,2)=-J
+ IDLAM(LKNT,3)=0
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
+ IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 250 CONTINUE
+
+C...3-BODY DECAY TO Q Q~ GLUINO
+ XMJ=PMAS(PYCOMP(KSUSY1+21),1)
+ IF(AXMI.GE.XMJ) THEN
+ AXMJ=ABS(XMJ)
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
+ XXM(7)=1D6
+ XXM(8)=0D0
+ XXM(9)=0D0
+ XXM(10)=0D0
+ S12MIN=0D0
+ S12MAX=(AXMI-AXMJ)**2
+C...ALL QUARKS BUT T
+ XXM(11)=0D0
+ XXM(12)=0D0
+ XXM(13)=1D0
+ XXM(14)=-SR2*(-0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
+ XXM(15)=1D0
+ XXM(16)=SR2*(-TANW*ZMIX(IX,1)/3D0)
+ IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 260
+ IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=4D0*C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=1
+ IDLAM(LKNT,3)=-1
+ IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=3
+ IDLAM(LKNT,3)=-3
+ ENDIF
+ ENDIF
+ 260 CONTINUE
+ IF(ABS(SFMIX(5,1)).GT.ABS(SFMIX(5,2))) THEN
+ XXM(5)=PMAS(PYCOMP(KSUSY1+5),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+5),1)
+ ELSE
+ XXM(6)=PMAS(PYCOMP(KSUSY1+5),1)
+ XXM(5)=PMAS(PYCOMP(KSUSY2+5),1)
+ ENDIF
+ IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 270
+ IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=5
+ IDLAM(LKNT,3)=-5
+ ENDIF
+C...U-TYPE QUARKS
+ 270 CONTINUE
+ XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
+ XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
+ XXM(13)=1D0
+ XXM(14)=-SR2*(0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
+ XXM(15)=1D0
+ XXM(16)=SR2*(2D0*TANW*ZMIX(IX,1)/3D0)
+ IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 280
+ IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=2
+ IDLAM(LKNT,3)=-2
+ IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=4
+ IDLAM(LKNT,3)=-4
+ ENDIF
+ ENDIF
+ 280 CONTINUE
+ ENDIF
+
+ 290 IKNT=LKNT
+ XLAM(0)=0D0
+ DO 300 I=1,IKNT
+ IF(XLAM(I).LT.0D0) XLAM(I)=0D0
+ XLAM(0)=XLAM(0)+XLAM(I)
+ 300 CONTINUE
+ IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYCJDC
+C...Calculate decay widths for the charginos (admixtures of
+C...charged Wino and charged Higgsino.
+
+C...Input: KCIN = KF code for particle
+C...Output: XLAM = widths
+C... IDLAM = KF codes for decay particles
+C... IKNT = number of decay channels defined
+C...AUTHOR: STEPHEN MRENNA
+C...Last change:
+C...10-16-95: force decay chi^+_1 -> chi^0_1 e+ nu_e
+C...when CHIENU .NE. 0
+
+ SUBROUTINE PYCJDC(KFIN,XLAM,IDLAM,IKNT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ COMMON/PYINTS/XXM(20)
+ SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
+
+C...Local variables.
+ INTEGER KFIN,KCIN
+ DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
+ &XMZ,XMZ2,AXMJ,AXMI
+ DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG
+ DOUBLE PRECISION S12MIN,S12MAX
+ DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2,XMK
+ DOUBLE PRECISION PYLAMF,XL
+ DOUBLE PRECISION TANW,XW,AEM,C1,AS,EI,T3,BETA,ALFA
+ DOUBLE PRECISION PYX2XH,PYX2XG
+ DOUBLE PRECISION XLAM(0:200)
+ INTEGER IDLAM(200,3)
+ INTEGER LKNT,IX,IH,J,IJ,I,IKNT,FID
+ INTEGER ITH(3)
+ INTEGER ITHC
+ DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
+ DOUBLE PRECISION SR2
+ DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K,TANB
+
+ DOUBLE PRECISION PYALEM,PI,PYALPS
+ DOUBLE PRECISION AL,BL,AR,BR,ALP,BLP,ARP,BRP
+ DOUBLE PRECISION CA,CB,FCOL
+ INTEGER KF1,KF2,ISF
+ INTEGER KFNCHI(4),KFCCHI(2)
+
+ DOUBLE PRECISION TEMP
+ DOUBLE PRECISION PYGAUS
+ EXTERNAL PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
+ DOUBLE PRECISION PREC
+ DATA ITH/25,35,36/
+ DATA ITHC/37/
+ DATA ETAH/1D0,1D0,-1D0/
+ DATA SR2/1.4142136D0/
+ DATA PI/3.141592654D0/
+ DATA PREC/1D-2/
+ DATA KFNCHI/1000022,1000023,1000025,1000035/
+ DATA KFCCHI/1000024,1000037/
+
+C...COUNT THE NUMBER OF DECAY MODES
+ LKNT=0
+ XMW=PMAS(24,1)
+ XMW2=XMW**2
+ XMZ=PMAS(23,1)
+ XMZ2=XMZ**2
+ XW=1D0-XMW2/XMZ2
+ TANW = SQRT(XW/(1D0-XW))
+
+C...1 OR 2 DEPENDING ON CHARGINO TYPE
+ IX=1
+ IF(KFIN.EQ.KFCCHI(2)) IX=2
+ KCIN=PYCOMP(KFIN)
+
+ XMI=SMW(IX)
+ XMI2=XMI**2
+ AXMI=ABS(XMI)
+ AEM=PYALEM(XMI2)
+ AS =PYALPS(XMI2)
+ C1=AEM/XW
+ XMI3=ABS(XMI**3)
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ CBETA=COS(BETA)
+ SBETA=TANB*CBETA
+ ALFA=RMSS(18)
+
+C...GRAVITINO DECAY MODES
+
+ IF(IMSS(11).EQ.1) THEN
+ XMP=RMSS(28)
+ IDG=39+KSUSY1
+ XMGR=PMAS(PYCOMP(IDG),1)
+ SINW=SQRT(XW)
+ COSW=SQRT(1D0-XW)
+ XFAC=(XMI2/(XMP*XMGR))**2*AXMI/48D0/PI
+ IF(AXMI.GT.XMGR+XMW) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=24
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*(.5D0*(VMIX(IX,1)**2+UMIX(IX,1)**2)+
+ & .5D0*((VMIX(IX,2)*SBETA)**2+(UMIX(IX,2)*CBETA)**2))*
+ & (1D0-XMW2/XMI2)**4
+ ENDIF
+ IF(AXMI.GT.XMGR+PMAS(37,1)) THEN
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=IDG
+ IDLAM(LKNT,2)=37
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XFAC*(.5D0*((VMIX(IX,2)*CBETA)**2+
+ & (UMIX(IX,2)*SBETA)**2))
+ & *(1D0-PMAS(37,1)**2/XMI2)**4
+ ENDIF
+ ENDIF
+
+C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
+ IF(IX.EQ.1) GOTO 150
+ XMJ=SMW(1)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+
+C...CHI_2+ -> CHI_1+ + Z0
+ IF(AXMI.GE.AXMJ+XMZ) THEN
+ LKNT=LKNT+1
+ GL=VMIX(2,1)*VMIX(1,1)+0.5D0*VMIX(2,2)*VMIX(1,2)
+ GR=UMIX(2,1)*UMIX(1,1)+0.5D0*UMIX(2,2)*UMIX(1,2)
+ XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMZ,GL,GR)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=23
+ IDLAM(LKNT,3)=0
+
+C...CHARGED LEPTONS
+ ELSEIF(AXMI.GE.AXMJ) THEN
+ XXM(5)=-(VMIX(2,1)*VMIX(1,1)+0.5D0*VMIX(2,2)*VMIX(1,2))
+ XXM(6)=-(UMIX(2,1)*UMIX(1,1)+0.5D0*UMIX(2,2)*UMIX(1,2))
+ XXM(9)=XMZ
+ XXM(10)=PMAS(23,2)
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ S12MIN=0D0
+ S12MAX=(AXMJ-AXMI)**2
+ XXM(7)= (-0.5D0+XW)/(1D0-XW)
+ XXM(8)= XW/(1D0-XW)
+ XXM(11)=PMAS(PYCOMP(KSUSY1+12),1)
+ XXM(12)=VMIX(2,1)*VMIX(1,1)
+ IF( XXM(11).LT.AXMI ) THEN
+ XXM(11)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+2D0*PMAS(11,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=11
+ IDLAM(LKNT,3)=-11
+ IF(AXMI.GE.AXMJ+2D0*PMAS(13,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=13
+ IDLAM(LKNT,3)=-13
+ IF(AXMI.GE.AXMJ+2D0*PMAS(15,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=15
+ IDLAM(LKNT,3)=-15
+ ENDIF
+ ENDIF
+ ENDIF
+
+C...NEUTRINOS
+ 100 CONTINUE
+ XXM(7)= (0.5D0)/(1D0-XW)
+ XXM(8)= 0D0
+ XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
+ XXM(12)=UMIX(2,1)*UMIX(1,1)
+ IF( XXM(11).LT.AXMI ) THEN
+ XXM(11)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+2D0*PMAS(12,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=12
+ IDLAM(LKNT,3)=-12
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=14
+ IDLAM(LKNT,3)=-14
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=16
+ IDLAM(LKNT,3)=-16
+ ENDIF
+
+C...D-TYPE QUARKS
+ 110 CONTINUE
+ XXM(7)= (-0.5D0+XW/3D0)/(1D0-XW)
+ XXM(8)= XW/3D0/(1D0-XW)
+ XXM(11)=PMAS(PYCOMP(KSUSY1+2),1)
+ XXM(12)=VMIX(2,1)*VMIX(1,1)
+ IF( XXM(11).LT.AXMI ) GOTO 120
+ IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=1
+ IDLAM(LKNT,3)=-1
+ IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=3
+ IDLAM(LKNT,3)=-3
+ IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=5
+ IDLAM(LKNT,3)=-5
+ ENDIF
+ ENDIF
+ ENDIF
+
+C...U-TYPE QUARKS
+ 120 CONTINUE
+ XXM(7)= (0.5D0-2D0*XW/3D0)/(1D0-XW)
+ XXM(8)= -2D0*XW/3D0/(1D0-XW)
+ XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(12)=UMIX(2,1)*UMIX(1,1)
+ IF( XXM(11).LT.AXMI ) GOTO 130
+ IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=2
+ IDLAM(LKNT,3)=-2
+ IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=4
+ IDLAM(LKNT,3)=-4
+ ENDIF
+ ENDIF
+ 130 CONTINUE
+ ENDIF
+
+C...CHI_2+ -> CHI_1+ + H0_K
+ EH(2)=COS(ALFA)
+ EH(1)=SIN(ALFA)
+ EH(3)=-SBETA
+ DH(2)=-SIN(ALFA)
+ DH(1)=COS(ALFA)
+ DH(3)=COS(BETA)
+ DO 140 IH=1,3
+ XMH=PMAS(ITH(IH),1)
+ XMH2=XMH**2
+C...NO 3-BODY OPTION
+ IF(AXMI.GE.AXMJ+XMH) THEN
+ LKNT=LKNT+1
+ XL=PYLAMF(XMI2,XMJ2,XMH2)
+ F21K=(VMIX(2,1)*UMIX(1,2)*EH(IH) -
+ & VMIX(2,2)*UMIX(1,1)*DH(IH))/SR2
+ F12K=(VMIX(1,1)*UMIX(2,2)*EH(IH) -
+ & VMIX(1,2)*UMIX(2,1)*DH(IH))/SR2
+ XMK=XMJ*ETAH(IH)
+ XLAM(LKNT)=PYX2XH(C1,XMI,XMK,XMH,F12K,F21K)
+ IDLAM(LKNT,1)=KFCCHI(1)
+ IDLAM(LKNT,2)=ITH(IH)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 140 CONTINUE
+
+C...CHI1 JUMPS TO HERE
+ 150 CONTINUE
+
+C...CHI+_I -> CHI0_J + W+
+ DO 180 IJ=1,4
+ XMJ=SMZ(IJ)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+ IF(AXMI.GE.AXMJ+XMW) THEN
+ LKNT=LKNT+1
+ GL=ZMIX(IJ,2)*VMIX(IX,1)-ZMIX(IJ,4)*VMIX(IX,2)/SR2
+ GR=ZMIX(IJ,2)*UMIX(IX,1)+ZMIX(IJ,3)*UMIX(IX,2)/SR2
+ XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMW,GL,GR)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=24
+ IDLAM(LKNT,3)=0
+
+C...LEPTONS
+ ELSEIF(AXMI.GE.AXMJ) THEN
+ XMF1=0D0
+ XMF2=0D0
+ S12MIN=(XMF1+XMF2)**2
+ S12MAX=(AXMJ-AXMI)**2
+ XXM(5)=-1D0/SR2*ZMIX(IJ,4)*VMIX(IX,2)+ZMIX(IJ,2)*VMIX(IX,1)
+ XXM(6)= 1D0/SR2*ZMIX(IJ,3)*UMIX(IX,2)+ZMIX(IJ,2)*UMIX(IX,1)
+ FID=11
+ EI=KCHG(FID,1)/3D0
+ T3=-0.5D0
+ XXM(7)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*UMIX(IX,1)
+ FID=12
+ EI=KCHG(FID,1)/3D0
+ T3=0.5D0
+ XXM(8)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*VMIX(IX,1)
+
+ XXM(4)=XMI
+ XXM(1)=XMF1
+ XXM(2)=XMJ
+ XXM(3)=XMF2
+ XXM(9)=PMAS(24,1)
+ XXM(10)=PMAS(24,2)
+ XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+12),1)
+
+C...1/(2PI)**3*/(32*M**3)*G^4, G^2/(4*PI)= AEM/XW,
+C...--> 1/(16PI)/M**3*(AEM/XW)**2
+
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ENDIF
+ IF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+PMAS(11,1)+PMAS(12,1)) THEN
+ LKNT=LKNT+1
+ TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=-11
+ IDLAM(LKNT,3)=12
+
+C...ONLY DECAY CHI+1 -> E+ NU_E
+ IF( IMSS(12).NE. 0 ) GOTO 220
+ IF(AXMI.GE.AXMJ+PMAS(13,1)+PMAS(14,1)) THEN
+ LKNT=LKNT+1
+ XXM(11)=PMAS(PYCOMP(KSUSY1+13),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+14),1)
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ELSEIF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=-13
+ IDLAM(LKNT,3)=14
+ IF(AXMI.GE.AXMJ+PMAS(15,1)+PMAS(16,1)) THEN
+ LKNT=LKNT+1
+ IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
+ XXM(11)=PMAS(PYCOMP(KSUSY1+15),1)
+ ELSE
+ XXM(11)=PMAS(PYCOMP(KSUSY2+15),1)
+ ENDIF
+ XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ENDIF
+ IF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=-15
+ IDLAM(LKNT,3)=16
+ ENDIF
+ ENDIF
+ ENDIF
+
+C...NOW, DO THE QUARKS
+ 160 CONTINUE
+ FID=1
+ EI=KCHG(FID,1)/3D0
+ T3=-0.5D0
+ XXM(7)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*UMIX(IX,1)
+ FID=1
+ EI=KCHG(FID,1)/3D0
+ T3=0.5D0
+ XXM(8)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*VMIX(IX,1)
+
+ XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
+ IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 170
+ IF(XXM(11).LT.AXMI) THEN
+ XXM(11)=1D6
+ ELSEIF(XXM(12).LT.AXMI) THEN
+ XXM(12)=1D6
+ ENDIF
+ IF(AXMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=-1
+ IDLAM(LKNT,3)=2
+ IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=-3
+ IDLAM(LKNT,3)=4
+ ENDIF
+ ENDIF
+ 170 CONTINUE
+ ENDIF
+ 180 CONTINUE
+
+C...CHI+_I -> CHI0_J + H+
+ DO 190 IJ=1,4
+ XMJ=SMZ(IJ)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+ XMHP=PMAS(ITHC,1)
+ XMHP2=XMHP**2
+ IF(AXMI.GE.AXMJ+XMHP) THEN
+ LKNT=LKNT+1
+ GL=CBETA*(ZMIX(IJ,4)*VMIX(IX,1)+(ZMIX(IJ,2)+
+ & ZMIX(IJ,1)*TANW)*VMIX(IX,2)/SR2)
+ GR=SBETA*(ZMIX(IJ,3)*UMIX(IX,1)-(ZMIX(IJ,2)+
+ & ZMIX(IJ,1)*TANW)*UMIX(IX,2)/SR2)
+ XLAM(LKNT)=PYX2XH(C1,XMI,XMJ,XMHP,GL,GR)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=ITHC
+ IDLAM(LKNT,3)=0
+ ELSE
+
+ ENDIF
+ 190 CONTINUE
+
+C...2-BODY DECAYS TO FERMION SFERMION
+ DO 200 J=1,16
+ IF(J.GE.7.AND.J.LE.10) GOTO 200
+ IF(MOD(J,2).EQ.0) THEN
+ KF1=KSUSY1+J-1
+ ELSE
+ KF1=KSUSY1+J+1
+ ENDIF
+ KF2=KF1+KSUSY1
+ XMSF1=PMAS(PYCOMP(KF1),1)
+ XMSF2=PMAS(PYCOMP(KF2),1)
+ XMF=PMAS(J,1)
+ IF(J.LE.6) THEN
+ FCOL=3D0
+ ELSE
+ FCOL=1D0
+ ENDIF
+
+C...U~ D_L
+ IF(MOD(J,2).EQ.0) THEN
+ XMFP=PMAS(J-1,1)
+ AL=UMIX(IX,1)
+ BL=-XMF*VMIX(IX,2)/XMW/SBETA/SR2
+ AR=-XMFP*UMIX(IX,2)/XMW/CBETA/SR2
+ BR=0D0
+ ISF=J-1
+ ELSE
+ XMFP=PMAS(J+1,1)
+ AL=VMIX(IX,1)
+ BL=-XMF*UMIX(IX,2)/XMW/CBETA/SR2
+ BR=0D0
+ AR=-XMFP*VMIX(IX,2)/XMW/SBETA/SR2
+ ISF=J+1
+ ENDIF
+
+C...~U_L D
+ IF(AXMI.GE.XMF+XMSF1) THEN
+ LKNT=LKNT+1
+ XMA2=XMSF1**2
+ XMB2=XMF**2
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+ CA=AL*SFMIX(ISF,1)+AR*SFMIX(ISF,2)
+ CB=BL*SFMIX(ISF,1)+BR*SFMIX(ISF,2)
+ XLAM(LKNT)=FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
+ & (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
+ IDLAM(LKNT,3)=0
+ IF(MOD(J,2).EQ.0) THEN
+ IDLAM(LKNT,1)=-KF1
+ IDLAM(LKNT,2)=J
+ ELSE
+ IDLAM(LKNT,1)=KF1
+ IDLAM(LKNT,2)=-J
+ ENDIF
+ ENDIF
+
+C...U~ D_R
+ IF(AXMI.GE.XMF+XMSF2) THEN
+ LKNT=LKNT+1
+ XMA2=XMSF2**2
+ XMB2=XMF**2
+ CA=AL*SFMIX(ISF,3)+AR*SFMIX(ISF,4)
+ CB=BL*SFMIX(ISF,3)+BR*SFMIX(ISF,4)
+ XL=PYLAMF(XMI2,XMA2,XMB2)
+ XLAM(LKNT)=FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
+ & (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
+ IDLAM(LKNT,3)=0
+ IF(MOD(J,2).EQ.0) THEN
+ IDLAM(LKNT,1)=-KF2
+ IDLAM(LKNT,2)=J
+ ELSE
+ IDLAM(LKNT,1)=KF2
+ IDLAM(LKNT,2)=-J
+ ENDIF
+ ENDIF
+ 200 CONTINUE
+
+C...3-BODY DECAY TO Q Q~' GLUINO, ONLY IF IT CANNOT PROCEED THROUGH
+C...A 2-BODY -- 2-BODY CHAIN
+ XMJ=PMAS(PYCOMP(KSUSY1+21),1)
+ IF(AXMI.GE.XMJ) THEN
+ AXMJ=ABS(XMJ)
+ S12MIN=0D0
+ S12MAX=(AXMI-AXMJ)**2
+ XXM(1)=0D0
+ XXM(2)=XMJ
+ XXM(3)=0D0
+ XXM(4)=XMI
+ XXM(5)=0D0
+ XXM(6)=0D0
+ XXM(9)=1D6
+ XXM(10)=0D0
+ XXM(7)=UMIX(IX,1)*SR2
+ XXM(8)=VMIX(IX,1)*SR2
+ XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
+ XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
+ IF( XXM(11).LT.AXMI .OR. XXM(12).LT.AXMI ) GOTO 210
+ IF(AXMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=4D0*C1*AS/XMI3/(16D0*PI)*
+ & PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=-1
+ IDLAM(LKNT,3)=2
+ IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=XLAM(LKNT-1)
+ IDLAM(LKNT,1)=KSUSY1+21
+ IDLAM(LKNT,2)=-3
+ IDLAM(LKNT,3)=4
+ ENDIF
+ ENDIF
+ 210 CONTINUE
+ ENDIF
+
+ 220 IKNT=LKNT
+ XLAM(0)=0D0
+ DO 230 I=1,IKNT
+ XLAM(0)=XLAM(0)+XLAM(I)
+ IF(XLAM(I).LT.0D0) THEN
+ WRITE(MSTU(11),*) ' XLAM(I) = ',XLAM(I),KCIN,
+ & (IDLAM(I,J),J=1,3)
+ XLAM(I)=0D0
+ ENDIF
+ 230 CONTINUE
+ IF(XLAM(0).EQ.0D0) THEN
+ XLAM(0)=1D-6
+ WRITE(MSTU(11),*) ' XLAM(0) = ',XLAM(0)
+ WRITE(MSTU(11),*) LKNT
+ WRITE(MSTU(11),*) (XLAM(J),J=1,LKNT)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXXZ5
+C...Calculates chi0 -> chi0 + f + ~f.
+
+ FUNCTION PYXXZ5(X)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYINTS/XXM(20)
+ SAVE /PYDAT1/,/PYINTS/
+
+C...Local variables.
+ DOUBLE PRECISION PYXXZ5,X
+ DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,WPROP2
+ DOUBLE PRECISION WW,WF1,WF2,WFL1,WFL2
+ DOUBLE PRECISION SIJ
+ DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSU,XMSD
+ DOUBLE PRECISION LE,RE,LE2,RE2,OL2,OR2,FLI,FLJ,FRI,FRJ
+ DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
+ INTEGER I
+ DATA SR2/1.4142136D0/
+
+C...Statement functions.
+C...Integral from x to y of (t-a)(b-t) dt.
+ TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
+C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
+ TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
+ &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
+C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
+ TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
+ &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
+C...Integral from x to y of (t-a)/(b-t) dt.
+ UTINT(X,Y,A,B)=LOG(ABS((X-A)/(B-X)*(B-Y)/(Y-A)))/(B-A)
+C...Integral from x to y of 1/(t-a) dt.
+ TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
+
+ XM12=XXM(1)**2
+ XM22=XXM(2)**2
+ XM32=XXM(3)**2
+ S=XXM(4)**2
+ S13=X
+
+ S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
+ S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
+ &( (X-XM22-S)**2 -4D0*XM22*S ) )
+
+ S23MIN=(S23AVE-S23DEL)
+ S23MAX=(S23AVE+S23DEL)
+
+ XMV=XXM(7)
+ XMG=XXM(8)
+ XMSD=XXM(5)**2
+ XMSU=XXM(6)**2
+ OL=XXM(9)
+ OR=XXM(10)
+ OL2=OL**2
+ OR2=OR**2
+ LE=XXM(11)
+ RE=XXM(12)
+ LE2=LE**2
+ RE2=RE**2
+ FLI=XXM(13)
+ FLJ=XXM(14)
+ FRI=XXM(15)
+ FRJ=XXM(16)
+
+ WPROP2=(S13-XMV**2)**2+(XMV*XMG)**2
+ SIJ=2D0*XXM(2)*XXM(4)*S13
+
+ IF(XMV.LE.1000D0) THEN
+ WW=2D0*(LE2+RE2)*(OL2)*( 2D0*TINT(S23MAX,S23MIN,XM22,S)
+ & +SIJ*(S23MAX-S23MIN) )/WPROP2
+ IF(XXM(5).LE.10000D0) THEN
+ WFL1=2D0*FLI*FLJ*OL*LE*( 2D0*TINT2(S23MAX,S23MIN,XM22,S,XMSD)
+ & + SIJ*TPROP(S23MAX,S23MIN,XMSD) )
+ WFL1=WFL1*(S13-XMV**2)/WPROP2
+ ELSE
+ WFL1=0D0
+ ENDIF
+ IF(XXM(6).LE.10000D0) THEN
+ WFL2=2D0*FRI*FRJ*OR*RE*( 2D0*TINT2(S23MAX,S23MIN,XM22,S,XMSU)
+ & + SIJ*TPROP(S23MAX,S23MIN,XMSU) )
+ WFL2=WFL2*(S13-XMV**2)/WPROP2
+ ELSE
+ WFL2=0D0
+ ENDIF
+ ELSE
+ WW=0D0
+ WFL1=0D0
+ WFL2=0D0
+ ENDIF
+ IF(XXM(5).LE.10000D0) THEN
+ WF1=0.5D0*(FLI*FLJ)**2*( 2D0*TINT3(S23MAX,S23MIN,XM22,S,XMSD)
+ & + SIJ*UTINT(S23MAX,S23MIN,XMSD,XM22+S-S13-XMSD) )
+ ELSE
+ WF1=0D0
+ ENDIF
+ IF(XXM(6).LE.10000D0) THEN
+ WF2=0.5D0*(FRI*FRJ)**2*( 2D0*TINT3(S23MAX,S23MIN,XM22,S,XMSU)
+ & + SIJ*UTINT(S23MAX,S23MIN,XMSU,XM22+S-S13-XMSU) )
+ ELSE
+ WF2=0D0
+ ENDIF
+
+C...WFL1=0.0
+C...WFL2=0.0
+ PYXXZ5=(WW+WF1+WF2+WFL1+WFL2)
+ IF(PYXXZ5.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXZ5 '
+ WRITE(MSTU(11),*) XXM(1),XXM(2),XXM(3),XXM(4)
+ WRITE(MSTU(11),*) (XXM(I),I=5,8)
+ WRITE(MSTU(11),*) (XXM(I),I=9,12)
+ WRITE(MSTU(11),*) (XXM(I),I=13,16)
+ WRITE(MSTU(11),*) WW,WF1,WF2,WFL1,WFL2
+ WRITE(MSTU(11),*) S23MIN,S23MAX
+ PYXXZ5=0D0
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXXW5
+C...Calculates chi0(+) -> chi+(0) + f + ~f'.
+
+ FUNCTION PYXXW5(X)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYINTS/XXM(20)
+ SAVE /PYDAT1/,/PYINTS/
+
+C...Local variables.
+ DOUBLE PRECISION PYXXW5,X
+ DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,S12,WPROP2
+ DOUBLE PRECISION WW,WU,WD,WWU,WWD,WUD
+ DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSD,XMSU
+ DOUBLE PRECISION SIJ
+ DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
+ INTEGER IK
+ SAVE IK
+ DATA IK/0/
+ DATA SR2/1.4142136D0/
+
+C...Statement functions.
+C...Integral from x to y of (t-a)(b-t) dt.
+ TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
+C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
+ TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
+ &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
+C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
+ TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
+ &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
+C...Integral from x to y of (t-a)/(b-t) dt.
+ UTINT(X,Y,A,B)=LOG(ABS((X-A)/(B-X)*(B-Y)/(Y-A)))/(B-A)
+C...Integral from x to y of 1/(t-a) dt.
+ TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
+
+ XM12=XXM(1)**2
+ XM22=XXM(2)**2
+ XM32=XXM(3)**2
+ S=XXM(4)**2
+ S13=X
+ IF(XXM(1).EQ.0.AND.XXM(3).EQ.0D0) THEN
+ S23AVE=0.5D0*(XM22+S-S13)
+ S23DEL=0.5D0*SQRT( (X-XM22-S)**2-4D0*XM22*S )
+ ELSE
+ S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
+ S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
+ & ( (X-XM22-S)**2 -4D0*XM22*S ) )
+ ENDIF
+ S23MIN=(S23AVE-S23DEL)
+ S23MAX=(S23AVE+S23DEL)
+ IF(S23DEL.LT.1D-3) THEN
+ PYXXW5=0D0
+ RETURN
+ ENDIF
+ XMV=XXM(9)
+ XMG=XXM(10)
+ XMSD=XXM(11)**2
+ XMSU=XXM(12)**2
+ OL=XXM(5)
+ OR=XXM(6)
+ FLD=XXM(7)
+ FLU=XXM(8)
+
+ WPROP2=((S13-XMV**2)**2+(XMV*XMG)**2)
+ SIJ=S13*XXM(2)*XXM(4)
+ IF(XMV.LE.1000D0) THEN
+ WW=(OR**2+OL**2)*TINT(S23MAX,S23MIN,XM22,S)
+ & -2D0*OL*OR*SIJ*(S23MAX-S23MIN)
+ WW=WW/WPROP2
+ IF(XXM(11).LE.10000D0) THEN
+ WWD=OL*SIJ*TPROP(S23MAX,S23MIN,XMSD)
+ & -OR*TINT2(S23MAX,S23MIN,XM22,S,XMSD)
+ WWD=-WWD*SR2*FLD
+ WWD=WWD*(S13-XMV**2)/WPROP2
+ ELSE
+ WWD=0D0
+ ENDIF
+ IF(XXM(12).LE.10000D0) THEN
+ WWU=OR*SIJ*TPROP(S23MAX,S23MIN,XMSU)
+ & -OL*TINT2(S23MAX,S23MIN,XM22,S,XMSU)
+ WWU=WWU*SR2*FLU
+ WWU=WWU*(S13-XMV**2)/WPROP2
+ ELSE
+ WWU=0D0
+ ENDIF
+ ELSE
+ WW=0D0
+ WWD=0D0
+ WWU=0D0
+ ENDIF
+ IF(XXM(12).LE.10000D0) THEN
+ WU=0.5D0*FLU**2*TINT3(S23MAX,S23MIN,XM22,S,XMSU)
+ ELSE
+ WU=0D0
+ ENDIF
+ IF(XXM(11).LE.10000D0) THEN
+ WD=0.5D0*FLD**2*TINT3(S23MAX,S23MIN,XM22,S,XMSD)
+ ELSE
+ WD=0D0
+ ENDIF
+ IF(XXM(11).LE.10000D0.AND.XXM(12).LE.10000D0) THEN
+ WUD=FLU*FLD*SIJ*UTINT(S23MAX,S23MIN,XMSD,XM22+S-S13-XMSU)
+ ELSE
+ WUD=0D0
+ ENDIF
+
+ PYXXW5=WW+WU+WD+WWU+WWD+WUD
+
+ IF(PYXXW5.LT.0D0) THEN
+ IF(IK.EQ.0) THEN
+ WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXW5 '
+ WRITE(MSTU(11),*) WW,WU,WD
+ WRITE(MSTU(11),*) WWD,WWU,WUD
+ WRITE(MSTU(11),*) SQRT(S13)
+ WRITE(MSTU(11),*) TINT(S23MAX,S23MIN,XM22,S)
+ IK=1
+ ENDIF
+ PYXXW5=0D0
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXXGA
+C...Calculates chi0_i -> chi0_j + gamma.
+
+ FUNCTION PYXXGA(C0,XM1,XM2,XMTR,XMTL)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DOUBLE PRECISION PYXXGA,C0,XM1,XM2,XMTR,XMTL
+ DOUBLE PRECISION F1,F2
+
+ F1=(1D0+XMTR/(1D0-XMTR)*LOG(XMTR))/(1D0-XMTR)
+ F2=(1D0+XMTL/(1D0-XMTL)*LOG(XMTL))/(1D0-XMTL)
+ PYXXGA=C0*((XM1**2-XM2**2)/XM1)**3
+ PYXXGA=PYXXGA*(2D0/3D0*(F1+F2)-13D0/12D0)**2
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYX2XG
+C...Calculates the decay rate for ino -> ino + gauge boson.
+
+ FUNCTION PYX2XG(C1,XM1,XM2,XM3,GL,GR)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DOUBLE PRECISION PYX2XG,XM1,XM2,XM3,GL,GR
+ DOUBLE PRECISION XL,PYLAMF,C1
+ DOUBLE PRECISION XMI2,XMJ2,XMV2,XMI3
+
+ XMI2=XM1**2
+ XMI3=ABS(XM1**3)
+ XMJ2=XM2**2
+ XMV2=XM3**2
+ XL=PYLAMF(XMI2,XMJ2,XMV2)
+ PYX2XG=C1/8D0/XMI3*SQRT(XL)
+ &*((GL**2+GR**2)*(XL+3D0*XMV2*(XMI2+XMJ2-XMV2))-
+ &12D0*GL*GR*XM1*XM2*XMV2)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYX2XH
+C...Calculates the decay rate for ino -> ino + H.
+
+ FUNCTION PYX2XH(C1,XM1,XM2,XM3,GL,GR)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DOUBLE PRECISION PYX2XH,XM1,XM2,XM3,GL,GR
+ DOUBLE PRECISION XL,PYLAMF,C1
+ DOUBLE PRECISION XMI2,XMJ2,XMV2,XMI3
+
+ XMI2=XM1**2
+ XMI3=ABS(XM1**3)
+ XMJ2=XM2**2
+ XMV2=XM3**2
+ XL=PYLAMF(XMI2,XMJ2,XMV2)
+ PYX2XH=C1/8D0/XMI3*SQRT(XL)
+ &*((GL**2+GR**2)*(XMI2+XMJ2-XMV2)+
+ &4D0*GL*GR*XM1*XM2)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXXZ2
+C...Calculates chi+ -> chi+ + f + ~f.
+
+ FUNCTION PYXXZ2(X)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYINTS/XXM(20)
+ SAVE /PYDAT1/,/PYINTS/
+
+C...Local variables.
+ DOUBLE PRECISION PYXXZ2,X
+ DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,S12,WPROP2
+ DOUBLE PRECISION WW,WU,WD,WWU,WWD,WUD
+ DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSL
+ DOUBLE PRECISION SIJ
+ DOUBLE PRECISION LE,RE,LE2,RE2,OL2,OR2,CT
+ DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
+ INTEGER I
+ DATA SR2/1.4142136D0/
+
+C...Statement functions.
+C...Integral from x to y of (t-a)(b-t) dt.
+ TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
+C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
+ TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
+ &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
+C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
+ TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
+ &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
+C...Integral from x to y of 1/(t-a) dt.
+ TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
+
+ XM12=XXM(1)**2
+ XM22=XXM(2)**2
+ XM32=XXM(3)**2
+ S=XXM(4)**2
+ S13=X
+ IF(XXM(1).EQ.0.AND.XXM(3).EQ.0D0) THEN
+ S23AVE=0.5D0*(XM22+S-S13)
+ S23DEL=0.5D0*SQRT( (X-XM22-S)**2-4D0*XM22*S )
+ ELSE
+ S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
+ S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
+ & ( (X-XM22-S)**2 -4D0*XM22*S ) )
+ ENDIF
+ S23MIN=(S23AVE-S23DEL)
+ S23MAX=(S23AVE+S23DEL)
+ IF(S23DEL.LT.1D-3) THEN
+ PYXXZ2=0D0
+ RETURN
+ ENDIF
+
+ XMV=XXM(9)
+ XMG=XXM(10)
+ XMSL=XXM(11)**2
+ OL=XXM(5)
+ OR=XXM(6)
+ OL2=OL**2
+ OR2=OR**2
+ LE=XXM(7)
+ RE=XXM(8)
+ LE2=LE**2
+ RE2=RE**2
+ CT=XXM(12)
+
+ WPROP2=(S13-XMV**2)**2+(XMV*XMG)**2
+ SIJ=XXM(2)*XXM(4)*S13
+ WW=(LE2+RE2)*(OR2+OL2)*2D0*TINT(S23MAX,S23MIN,XM22,S)
+ &- 4D0*(LE2+RE2)*OL*OR*SIJ*(S23MAX-S23MIN)
+ WW=WW/WPROP2
+ IF(XMSL.GT.1D4*S) THEN
+ WD=0D0
+ WWD=0D0
+ ELSE
+ WD=0.5D0*CT**2*TINT3(S23MAX,S23MIN,XM22,S,XMSL)
+ WWD=OL*TINT2(S23MAX,S23MIN,XM22,S,XMSL)-
+ & OR*SIJ*TPROP(S23MAX,S23MIN,XMSL)
+ WWD=2D0*WWD*LE*CT*(S13-XMV**2)/WPROP2
+ ENDIF
+
+ PYXXZ2=(WW+WD+WWD)
+ IF(PYXXZ2.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXZ2 '
+ WRITE(MSTU(11),*) WW,WD,WWD
+ WRITE(MSTU(11),*) S23MIN,S23MAX
+ WRITE(MSTU(11),*) (XXM(I),I=1,4)
+ WRITE(MSTU(11),*) (XXM(I),I=5,8)
+ WRITE(MSTU(11),*) (XXM(I),I=9,12)
+ PYXXZ2=0D0
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYHEXT
+C...Calculates the non-standard decay modes of the Higgs boson.
+
+ SUBROUTINE PYHEXT(KFIN,XLAM,IDLAM,IKNT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
+ &SFMIX(16,4)
+ SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYMSSM/,/PYSSMT/
+
+C...Local variables.
+ INTEGER KFIN
+ DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
+ &XMZ,XMZ2,AXMJ,AXMI
+ DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG
+ DOUBLE PRECISION S12MIN,S12MAX
+ DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2
+ DOUBLE PRECISION PYLAMF,XL,CF,EI
+ INTEGER IDU,IC,ILR,IFL
+ DOUBLE PRECISION TANW,XW,AEM,C1,AS
+ DOUBLE PRECISION PYH2XX,GHLL,GHRR,GHLR
+ DOUBLE PRECISION XLAM(0:200)
+ INTEGER IDLAM(200,3)
+ INTEGER LKNT,IX,IH,J,IJ,I,IKNT,IK
+ INTEGER ITH(4)
+ INTEGER KFNCHI(4),KFCCHI(2)
+ DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
+ DOUBLE PRECISION SR2
+ DOUBLE PRECISION BETA,ALFA
+ DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K,TANB
+ DOUBLE PRECISION PYALEM,PI,PYALPS
+ DOUBLE PRECISION AL,BL,AR,BR,ALP,ARP,BLP,BRP,ALR
+ DOUBLE PRECISION XMK,AXMK,XMK2,COSA,SINA,CW,XML
+ DOUBLE PRECISION XMUZ,ATRIT,ATRIB,ATRIL
+ DOUBLE PRECISION XMJL,XMJR,XM1,XM2
+ DATA ITH/25,35,36,37/
+ DATA ETAH/1D0,1D0,-1D0/
+ DATA SR2/1.4142136D0/
+ DATA PI/3.141592654D0/
+ DATA KFNCHI/1000022,1000023,1000025,1000035/
+ DATA KFCCHI/1000024,1000037/
+
+C...COUNT THE NUMBER OF DECAY MODES
+ LKNT=IKNT
+
+ XMW=PMAS(24,1)
+ XMW2=XMW**2
+ XMZ=PMAS(23,1)
+ XMZ2=XMZ**2
+ XW=PARU(102)
+ TANW = SQRT(XW/(1D0-XW))
+ CW=SQRT(1D0-XW)
+
+C...1 - 4 DEPENDING ON Higgs species.
+ IH=1
+ IF(KFIN.EQ.ITH(2)) IH=2
+ IF(KFIN.EQ.ITH(3)) IH=3
+ IF(KFIN.EQ.ITH(4)) IH=4
+
+ XMI=PMAS(KFIN,1)
+ XMI2=XMI**2
+ AXMI=ABS(XMI)
+ AEM=PYALEM(XMI2)
+ AS =PYALPS(XMI2)
+ C1=AEM/XW
+ XMI3=ABS(XMI**3)
+
+ TANB=RMSS(5)
+ BETA=ATAN(TANB)
+ CBETA=COS(BETA)
+ SBETA=TANB*CBETA
+ ALFA=RMSS(18)
+ COSA=COS(ALFA)
+ SINA=SIN(ALFA)
+ ATRIT=RMSS(16)
+ ATRIB=RMSS(15)
+ ATRIL=RMSS(17)
+ XMUZ=-RMSS(4)
+
+ IF(IH.EQ.4) GOTO 180
+
+C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
+C...H0_K -> CHI0_I + CHI0_J
+ EH(1)=SINA
+ EH(2)=COSA
+ EH(3)=-SBETA
+ DH(1)=COSA
+ DH(2)=-SINA
+ DH(3)=CBETA
+ DO 110 IJ=1,4
+ XMJ=SMZ(IJ)
+ AXMJ=ABS(XMJ)
+ DO 100 IK=1,IJ
+ XMK=SMZ(IK)
+ AXMK=ABS(XMK)
+ IF(AXMI.GE.AXMJ+AXMK) THEN
+ LKNT=LKNT+1
+ F21K=0.5D0*
+ & EH(IH)*( ZMIX(IK,3)*ZMIX(IJ,2)+ZMIX(IJ,3)*ZMIX(IK,2)
+ & -TANW*(ZMIX(IK,3)*ZMIX(IJ,1)+ZMIX(IJ,3)*ZMIX(IK,1)) )+
+ & 0.5D0*DH(IH)*( ZMIX(IK,4)*ZMIX(IJ,2)+ZMIX(IJ,4)*ZMIX(IK,2)
+ & -TANW*(ZMIX(IK,4)*ZMIX(IJ,1)+ZMIX(IJ,4)*ZMIX(IK,1)) )
+ F12K=0.5D0*
+ & EH(IH)*(ZMIX(IJ,3)*ZMIX(IK,2)+ZMIX(IK,3)*ZMIX(IJ,2)
+ & -TANW*(ZMIX(IJ,3)*ZMIX(IK,1)+ZMIX(IK,3)*ZMIX(IJ,1)))+
+ & 0.5D0*DH(IH)*( ZMIX(IJ,4)*ZMIX(IK,2)+ZMIX(IK,4)*ZMIX(IJ,2)
+ & -TANW*(ZMIX(IJ,4)*ZMIX(IK,1)+ZMIX(IK,4)*ZMIX(IJ,1)) )
+C...SIGN OF MASSES I,J
+ XML=XMK*ETAH(IH)
+ XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,XML,F12K,F21K)
+ IF(IJ.EQ.IK) XLAM(LKNT)=XLAM(LKNT)*0.5D0
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=KFNCHI(IK)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...H0_K -> CHI+_I CHI-_J
+ DO 130 IJ=1,2
+ XMJ=SMW(IJ)
+ AXMJ=ABS(XMJ)
+ DO 120 IK=1,2
+ XMK=SMW(IK)
+ AXMK=ABS(XMK)
+ IF(AXMI.GE.AXMJ+AXMK) THEN
+ LKNT=LKNT+1
+ F21K=(VMIX(IJ,1)*UMIX(IK,2)*EH(IH) -
+ & VMIX(IJ,2)*UMIX(IK,1)*DH(IH))/SR2
+ F12K=(VMIX(IK,1)*UMIX(IJ,2)*EH(IH) -
+ & VMIX(IK,2)*UMIX(IJ,1)*DH(IH))/SR2
+ XML=-XMK*ETAH(IH)
+ XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,XML,F12K,F21K)
+ IDLAM(LKNT,1)=KFCCHI(IJ)
+ IDLAM(LKNT,2)=-KFCCHI(IK)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 120 CONTINUE
+ 130 CONTINUE
+
+C...HIGGS TO SFERMION SFERMION
+ DO 160 IFL=1,16
+ IF(IFL.GE.7.AND.IFL.LE.10) GOTO 160
+ IJ=KSUSY1+IFL
+ XMJL=PMAS(PYCOMP(IJ),1)
+ XMJR=PMAS(PYCOMP(IJ+KSUSY1),1)
+ IF(AXMI.GE.2D0*MIN(XMJL,XMJR)) THEN
+ XMJ=XMJL
+ XMJ2=XMJ**2
+ XL=PYLAMF(XMI2,XMJ2,XMJ2)
+ XMF=PMAS(IFL,1)
+ EI=KCHG(IFL,1)/3D0
+ IDU=2-MOD(IFL,2)
+
+ IF(IH.EQ.1) THEN
+ IF(IDU.EQ.1) THEN
+ GHLL=-XMZ/CW*(0.5D0+EI*XW)*SIN(ALFA+BETA)+
+ & XMF**2/XMW*SINA/CBETA
+ GHRR=XMZ/CW*(EI*XW)*SIN(ALFA+BETA)+
+ & XMF**2/XMW*SINA/CBETA
+ IF(IFL.EQ.5) THEN
+ GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*COSA-
+ & ATRIB*SINA)
+ ELSEIF(IFL.EQ.15) THEN
+ GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*COSA-
+ & ATRIL*SINA)
+ ELSE
+ GHLR=0D0
+ ENDIF
+ ELSE
+ GHLL=XMZ/CW*(0.5D0-EI*XW)*SIN(ALFA+BETA)-
+ & XMF**2/XMW*COSA/SBETA
+ GHRR=XMZ/CW*(EI*XW)*SIN(ALFA+BETA)-
+ & XMF**2/XMW*COSA/SBETA
+ IF(IFL.EQ.6) THEN
+ GHLR=XMF/2D0/XMW/SBETA*(XMUZ*SINA-
+ & ATRIT*COSA)
+ ELSE
+ GHLR=0D0
+ ENDIF
+ ENDIF
+
+ ELSEIF(IH.EQ.2) THEN
+ IF(IDU.EQ.1) THEN
+ GHLL=XMZ/CW*(0.5D0+EI*XW)*COS(ALFA+BETA)-
+ & XMF**2/XMW*COSA/CBETA
+ GHRR=-XMZ/CW*(EI*XW)*COS(ALFA+BETA)-
+ & XMF**2/XMW*COSA/CBETA
+ IF(IFL.EQ.5) THEN
+ GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*SINA+
+ & ATRIB*COSA)
+ ELSEIF(IFL.EQ.15) THEN
+ GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*SINA+
+ & ATRIL*COSA)
+ ELSE
+ GHLR=0D0
+ ENDIF
+ ELSE
+ GHLL=-XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)-
+ & XMF**2/XMW*SINA/SBETA
+ GHRR=-XMZ/CW*(EI*XW)*COS(ALFA+BETA)-
+ & XMF**2/XMW*SINA/SBETA
+ IF(IFL.EQ.6) THEN
+ GHLR=-XMF/2D0/XMW/SBETA*(XMUZ*COSA+
+ & ATRIT*SINA)
+ ELSE
+ GHLR=0D0
+ ENDIF
+ ENDIF
+
+ ELSEIF(IH.EQ.3) THEN
+ GHLL=0D0
+ GHRR=0D0
+ GHLR=0D0
+ IF(IDU.EQ.1) THEN
+ IF(IFL.EQ.5) THEN
+ GHLR=XMF/2D0/XMW*(ATRIB*TANB-XMUZ)
+ ELSEIF(IFL.EQ.15) THEN
+ GHLR=XMF/2D0/XMW*(ATRIL*TANB-XMUZ)
+ ENDIF
+ ELSE
+ IF(IFL.EQ.6) THEN
+ GHLR=XMF/2D0/XMW*(ATRIT/TANB-XMUZ)
+ ENDIF
+ ENDIF
+ ENDIF
+ IF(IH.EQ.3) GOTO 140
+
+ AL=SFMIX(IFL,1)**2
+ AR=SFMIX(IFL,2)**2
+ ALR=SFMIX(IFL,1)*SFMIX(IFL,2)
+ IF(IFL.LE.6) THEN
+ CF=3D0
+ ELSE
+ CF=1D0
+ ENDIF
+
+ IF(AXMI.GE.2D0*XMJ) THEN
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GHLL*AL+GHRR*AR
+ & +2D0*GHLR*ALR)**2
+ IDLAM(LKNT,1)=IJ
+ IDLAM(LKNT,2)=-IJ
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+ IF(AXMI.GE.2D0*XMJR) THEN
+ LKNT=LKNT+1
+ AL=SFMIX(IFL,3)**2
+ AR=SFMIX(IFL,4)**2
+ ALR=SFMIX(IFL,3)*SFMIX(IFL,4)
+ XMJ=XMJR
+ XMJ2=XMJ**2
+ XL=PYLAMF(XMI2,XMJ2,XMJ2)
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GHLL*AL+GHRR*AR
+ & +2D0*GHLR*ALR)**2
+ IDLAM(LKNT,1)=IJ+KSUSY1
+ IDLAM(LKNT,2)=-(IJ+KSUSY1)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 140 CONTINUE
+
+ IF(AXMI.GE.XMJL+XMJR) THEN
+ LKNT=LKNT+1
+ AL=SFMIX(IFL,1)*SFMIX(IFL,3)
+ AR=SFMIX(IFL,2)*SFMIX(IFL,4)
+ ALR=SFMIX(IFL,1)*SFMIX(IFL,4)+SFMIX(IFL,2)*SFMIX(IFL,3)
+ XMJ=XMJR
+ XMJ2=XMJ**2
+ XL=PYLAMF(XMI2,XMJ2,XMJL**2)
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GHLL*AL+GHRR*AR)**2
+ IDLAM(LKNT,1)=IJ
+ IDLAM(LKNT,2)=-(IJ+KSUSY1)
+ IDLAM(LKNT,3)=0
+ LKNT=LKNT+1
+ IDLAM(LKNT,1)=-IJ
+ IDLAM(LKNT,2)=IJ+KSUSY1
+ IDLAM(LKNT,3)=0
+ XLAM(LKNT)=XLAM(LKNT-1)
+ ENDIF
+ ENDIF
+ 150 CONTINUE
+ 160 CONTINUE
+ 170 CONTINUE
+
+ GOTO 230
+ 180 CONTINUE
+
+C...H+ -> CHI+_I + CHI0_J
+ DO 200 IJ=1,4
+ XMJ=SMZ(IJ)
+ AXMJ=ABS(XMJ)
+ XMJ2=XMJ**2
+ DO 190 IK=1,2
+ XMK=SMW(IK)
+ AXMK=ABS(XMK)
+ XMK2=XMK**2
+ IF(AXMI.GE.AXMJ+AXMK) THEN
+ LKNT=LKNT+1
+ GL=CBETA*(ZMIX(IJ,4)*VMIX(IK,1)+(ZMIX(IJ,2)+ZMIX(IJ,1)*
+ & TANW)*VMIX(IK,2)/SR2)
+ GR=SBETA*(ZMIX(IJ,3)*UMIX(IK,1)-(ZMIX(IJ,2)+ZMIX(IJ,1)*
+ & TANW)*UMIX(IK,2)/SR2)
+ XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,-XMK,GL,GR)
+ IDLAM(LKNT,1)=KFNCHI(IJ)
+ IDLAM(LKNT,2)=KFCCHI(IK)
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 190 CONTINUE
+ 200 CONTINUE
+
+ GL=-XMW/SR2*(SIN(2D0*BETA)-PMAS(6,1)**2/TANB/XMW2)
+ GR=-PMAS(6,1)/SR2/XMW*(XMUZ-ATRIT/TANB)
+ AL=0D0
+ AR=0D0
+ CF=3D0
+
+C...H+ -> T_1 B_1~
+ XM1=PMAS(PYCOMP(KSUSY1+6),1)
+ XM2=PMAS(PYCOMP(KSUSY1+5),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GL*SFMIX(6,1)*SFMIX(5,1)+GR*SFMIX(6,2)*SFMIX(5,1))**2
+ IDLAM(LKNT,1)=KSUSY1+6
+ IDLAM(LKNT,2)=-(KSUSY1+5)
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+C...H+ -> T_2 B_1~
+ XM1=PMAS(PYCOMP(KSUSY2+6),1)
+ XM2=PMAS(PYCOMP(KSUSY1+5),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GL*SFMIX(6,3)*SFMIX(5,1)+GR*SFMIX(6,4)*SFMIX(5,1))**2
+ IDLAM(LKNT,1)=KSUSY2+6
+ IDLAM(LKNT,2)=-(KSUSY1+5)
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+C...H+ -> T_1 B_2~
+ XM1=PMAS(PYCOMP(KSUSY1+6),1)
+ XM2=PMAS(PYCOMP(KSUSY2+5),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GL*SFMIX(6,1)*SFMIX(5,3)+GR*SFMIX(6,2)*SFMIX(5,3))**2
+ IDLAM(LKNT,1)=KSUSY1+6
+ IDLAM(LKNT,2)=-(KSUSY2+5)
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+C...H+ -> T_2 B_2~
+ XM1=PMAS(PYCOMP(KSUSY2+6),1)
+ XM2=PMAS(PYCOMP(KSUSY2+5),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
+ & (GL*SFMIX(6,3)*SFMIX(5,3)+GR*SFMIX(6,4)*SFMIX(5,3))**2
+ IDLAM(LKNT,1)=KSUSY2+6
+ IDLAM(LKNT,2)=-(KSUSY2+5)
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+C...H+ -> UL DL~
+ GL=-XMW/SR2*SIN(2D0*BETA)
+ DO 210 IJ=1,3,2
+ XM1=PMAS(PYCOMP(KSUSY1+IJ),1)
+ XM2=PMAS(PYCOMP(KSUSY1+IJ+1),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2
+ IDLAM(LKNT,1)=-(KSUSY1+IJ)
+ IDLAM(LKNT,2)=KSUSY1+IJ+1
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 210 CONTINUE
+
+C...H+ -> EL~ NUL
+ CF=1D0
+ DO 220 IJ=11,13,2
+ XM1=PMAS(PYCOMP(KSUSY1+IJ),1)
+ XM2=PMAS(PYCOMP(KSUSY1+IJ+1),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2
+ IDLAM(LKNT,1)=-(KSUSY1+IJ)
+ IDLAM(LKNT,2)=KSUSY1+IJ+1
+ IDLAM(LKNT,3)=0
+ ENDIF
+ 220 CONTINUE
+
+C...H+ -> TAU1 NUTAUL
+ XM1=PMAS(PYCOMP(KSUSY1+15),1)
+ XM2=PMAS(PYCOMP(KSUSY1+16),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2*SFMIX(15,1)**2
+ IDLAM(LKNT,1)=-(KSUSY1+15)
+ IDLAM(LKNT,2)= KSUSY1+16
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+C...H+ -> TAU2 NUTAUL
+ XM1=PMAS(PYCOMP(KSUSY2+15),1)
+ XM2=PMAS(PYCOMP(KSUSY1+16),1)
+ IF(XMI.GE.XM1+XM2) THEN
+ XL=PYLAMF(XMI2,XM1**2,XM2**2)
+ LKNT=LKNT+1
+ XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2*SFMIX(15,3)**2
+ IDLAM(LKNT,1)=-(KSUSY2+15)
+ IDLAM(LKNT,2)= KSUSY1+16
+ IDLAM(LKNT,3)=0
+ ENDIF
+
+ 230 CONTINUE
+ IKNT=LKNT
+ XLAM(0)=0D0
+ DO 240 I=1,IKNT
+ IF(XLAM(I).LE.0D0) XLAM(I)=0D0
+ XLAM(0)=XLAM(0)+XLAM(I)
+ 240 CONTINUE
+ IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYH2XX
+C...Calculates the decay rate for a Higgs to an ino pair.
+
+ FUNCTION PYH2XX(C1,XM1,XM2,XM3,GL,GR)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+C...Local variables.
+ DOUBLE PRECISION PYH2XX,XM1,XM2,XM3,GL,GR
+ DOUBLE PRECISION XL,PYLAMF,C1
+ DOUBLE PRECISION XMI2,XMJ2,XMK2,XMI3
+
+ XMI2=XM1**2
+ XMI3=ABS(XM1**3)
+ XMJ2=XM2**2
+ XMK2=XM3**2
+ XL=PYLAMF(XMI2,XMJ2,XMK2)
+ PYH2XX=C1/4D0/XMI3*SQRT(XL)
+ &*((GL**2+GR**2)*(XMI2-XMJ2-XMK2)-
+ &4D0*GL*GR*XM3*XM2)
+ IF(PYH2XX.LT.0D0) THEN
+ WRITE(MSTU(11),*) ' NEGATIVE WIDTH IN PYH2XX '
+ WRITE(MSTU(11),*) XMI2,XMJ2,XMK2,GL,GR,XM1,XM2,XM3
+ STOP
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGAUS
+C...Integration by adaptive Gaussian quadrature.
+C...Adapted from the CERNLIB DGAUSS routine by K.S. Kolbig.
+
+ FUNCTION PYGAUS(F, A, B, EPS)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local declarations.
+ EXTERNAL F
+ DOUBLE PRECISION W(12), X(12)
+ DATA X( 1) /9.6028985649753623D-1/, W( 1) /1.0122853629037626D-1/
+ DATA X( 2) /7.9666647741362674D-1/, W( 2) /2.2238103445337447D-1/
+ DATA X( 3) /5.2553240991632899D-1/, W( 3) /3.1370664587788729D-1/
+ DATA X( 4) /1.8343464249564980D-1/, W( 4) /3.6268378337836198D-1/
+ DATA X( 5) /9.8940093499164993D-1/, W( 5) /2.7152459411754095D-2/
+ DATA X( 6) /9.4457502307323258D-1/, W( 6) /6.2253523938647893D-2/
+ DATA X( 7) /8.6563120238783174D-1/, W( 7) /9.5158511682492785D-2/
+ DATA X( 8) /7.5540440835500303D-1/, W( 8) /1.2462897125553387D-1/
+ DATA X( 9) /6.1787624440264375D-1/, W( 9) /1.4959598881657673D-1/
+ DATA X(10) /4.5801677765722739D-1/, W(10) /1.6915651939500254D-1/
+ DATA X(11) /2.8160355077925891D-1/, W(11) /1.8260341504492359D-1/
+ DATA X(12) /9.5012509837637440D-2/, W(12) /1.8945061045506850D-1/
+
+C...The Gaussian quadrature algorithm.
+ H = 0D0
+ IF(B .EQ. A) GO TO 140
+ CONST = 5D-3 / ABS(B-A)
+ BB = A
+ 100 CONTINUE
+ AA = BB
+ BB = B
+ 110 CONTINUE
+ C1 = 0.5D0*(BB+AA)
+ C2 = 0.5D0*(BB-AA)
+ S8 = 0D0
+ DO 120 I = 1, 4
+ U = C2*X(I)
+ S8 = S8 + W(I) * (F(C1+U) + F(C1-U))
+ 120 CONTINUE
+ S16 = 0D0
+ DO 130 I = 5, 12
+ U = C2*X(I)
+ S16 = S16 + W(I) * (F(C1+U) + F(C1-U))
+ 130 CONTINUE
+ S16 = C2*S16
+ IF(DABS(S16-C2*S8) .LE. EPS*(1D0+DABS(S16))) THEN
+ H = H + S16
+ IF(BB .NE. B) GO TO 100
+ ELSE
+ BB = C1
+ IF(1D0 + CONST*ABS(C2) .NE. 1D0) GO TO 110
+ H = 0D0
+ CALL PYERRM(18,'(PYGAUS:) too high accuracy required')
+ GO TO 140
+ ENDIF
+ 140 CONTINUE
+ PYGAUS = H
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSIMP
+C...Simpson formula for an integral.
+
+ FUNCTION PYSIMP(Y,X0,X1,N)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DOUBLE PRECISION Y,X0,X1,H,S
+ DIMENSION Y(0:N)
+
+ S=0D0
+ H=(X1-X0)/N
+ DO 100 I=0,N-2,2
+ S=S+Y(I)+4D0*Y(I+1)+Y(I+2)
+ 100 CONTINUE
+ PYSIMP=S*H/3D0
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYLAMF
+C...The standard lambda function.
+
+ FUNCTION PYLAMF(X,Y,Z)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+
+C...Local variables.
+ DOUBLE PRECISION PYLAMF,X,Y,Z
+
+ PYLAMF=(X-(Y+Z))**2-4D0*Y*Z
+ IF(PYLAMF.LT.0D0) PYLAMF=0D0
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTBDY
+C...Generates 3-body decays of gauginos.
+
+ SUBROUTINE PYTBDY(XM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYPARS/
+
+C...Local variables.
+ DOUBLE PRECISION XM(5)
+ DOUBLE PRECISION S12MIN,S12MAX,YJACO1,S23AVE,S23DF1,S23DF2
+ DOUBLE PRECISION D1,D2,D3,P1,P2,P3,CTHE1,STHE1,CTHE3,STHE3
+ DOUBLE PRECISION CPHI1,SPHI1
+ DOUBLE PRECISION S23DEL,EPS
+ DOUBLE PRECISION GOLDEN,AX,BX,CX,TOL,XMIN,R,C
+ PARAMETER (R=0.61803399D0,C=1D0-R,TOL=1D-3)
+ DOUBLE PRECISION F1,F2,X0,X1,X2,X3
+ DATA EPS/1D-6/
+
+C...GENERATE S12
+ S12MIN=(XM(1)+XM(2))**2
+ S12MAX=(XM(5)-XM(3))**2
+ YJACO1=S12MAX-S12MIN
+
+C...FIND S12*
+ AX=S12MIN
+ CX=S12MAX
+ BX=S12MIN+0.5D0*YJACO1
+ X0=AX
+ X3=CX
+ IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
+ X1=BX
+ X2=BX+C*(CX-BX)
+ ELSE
+ X2=BX
+ X1=BX-C*(BX-AX)
+ ENDIF
+
+C...SOLVE FOR F1 AND F2
+ S23DF1=(X1-XM(2)**2-XM(1)**2)**2
+ &-(2D0*XM(1)*XM(2))**2
+ S23DF2=(X1-XM(3)**2-XM(5)**2)**2
+ &-(2D0*XM(3)*XM(5))**2
+ S23DF1=S23DF1*EPS
+ S23DF2=S23DF2*EPS
+ S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X1)
+ F1=-2D0*S23DEL/EPS
+ S23DF1=(X2-XM(2)**2-XM(1)**2)**2
+ &-(2D0*XM(1)*XM(2))**2
+ S23DF2=(X2-XM(3)**2-XM(5)**2)**2
+ &-(2D0*XM(3)*XM(5))**2
+ S23DF1=S23DF1*EPS
+ S23DF2=S23DF2*EPS
+ S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X2)
+ F2=-2D0*S23DEL/EPS
+
+ 100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2)))THEN
+ IF(F2.LT.F1)THEN
+ X0=X1
+ X1=X2
+ X2=R*X1+C*X3
+ F1=F2
+ S23DF1=(X2-XM(2)**2-XM(1)**2)**2
+ & -(2D0*XM(1)*XM(2))**2
+ S23DF2=(X2-XM(3)**2-XM(5)**2)**2
+ & -(2D0*XM(3)*XM(5))**2
+ S23DF1=S23DF1*EPS
+ S23DF2=S23DF2*EPS
+ S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X2)
+ F2=-2D0*S23DEL/EPS
+ ELSE
+ X3=X2
+ X2=X1
+ X1=R*X2+C*X0
+ F2=F1
+ S23DF1=(X1-XM(2)**2-XM(1)**2)**2
+ & -(2D0*XM(1)*XM(2))**2
+ S23DF2=(X1-XM(3)**2-XM(5)**2)**2
+ & -(2D0*XM(3)*XM(5))**2
+ S23DF1=S23DF1*EPS
+ S23DF2=S23DF2*EPS
+ S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X1)
+ F1=-2D0*S23DEL/EPS
+ ENDIF
+ GOTO 100
+ ENDIF
+C...WE WANT THE MAXIMUM, NOT THE MINIMUM
+ IF(F1.LT.F2)THEN
+ GOLDEN=-F1
+ XMIN=X1
+ ELSE
+ GOLDEN=-F2
+ XMIN=X2
+ ENDIF
+
+ IKNT=0
+ 110 S12=S12MIN+PYR(0)*YJACO1
+ IKNT=IKNT+1
+C...GENERATE S23
+ S23AVE=XM(2)**2+XM(3)**2-(S12+XM(2)**2-XM(1)**2)
+ &*(S12+XM(3)**2-XM(5)**2)/(2D0*S12)
+ S23DF1=(S12-XM(2)**2-XM(1)**2)**2
+ &-(2D0*XM(1)*XM(2))**2
+ S23DF2=(S12-XM(3)**2-XM(5)**2)**2
+ &-(2D0*XM(3)*XM(5))**2
+ S23DF1=S23DF1*EPS
+ S23DF2=S23DF2*EPS
+ S23DEL=SQRT(S23DF1*S23DF2)/(2D0*S12)
+ S23DEL=S23DEL/EPS
+ S23MIN=S23AVE-S23DEL
+ S23MAX=S23AVE+S23DEL
+ YJACO2=S23MAX-S23MIN
+ S23=S23MIN+PYR(0)*YJACO2
+
+C...CHECK THE SAMPLING
+ IF(IKNT.GT.100) THEN
+ WRITE(MSTU(11),*) ' IKNT > 100 IN PYTBDY '
+ GOTO 120
+ ENDIF
+ IF(YJACO2.LT.PYR(0)*GOLDEN) GOTO 110
+ 120 D3=(XM(5)**2+XM(3)**2-S12)/(2D0*XM(5))
+ D1=(XM(5)**2+XM(1)**2-S23)/(2D0*XM(5))
+ D2=XM(5)-D1-D3
+ P1=SQRT(D1*D1-XM(1)**2)
+ P2=SQRT(D2*D2-XM(2)**2)
+ P3=SQRT(D3*D3-XM(3)**2)
+ CTHE1=2D0*PYR(0)-1D0
+ ANG1=2D0*PYR(0)*PARU(1)
+ CPHI1=COS(ANG1)
+ SPHI1=SIN(ANG1)
+ ARG=1D0-CTHE1**2
+ IF(ARG.LT.0D0.AND.ARG.GT.-1D-3) ARG=0D0
+ STHE1=SQRT(ARG)
+ P(N+1,1)=P1*STHE1*CPHI1
+ P(N+1,2)=P1*STHE1*SPHI1
+ P(N+1,3)=P1*CTHE1
+ P(N+1,4)=D1
+
+C...GET CPHI3
+ ANG3=2D0*PYR(0)*PARU(1)
+ CPHI3=COS(ANG3)
+ SPHI3=SIN(ANG3)
+ CTHE3=(P2**2-P1**2-P3**2)/2D0/P1/P3
+ ARG=1D0-CTHE3**2
+ IF(ARG.LT.0D0.AND.ARG.GT.-1D-3) ARG=0D0
+ STHE3=SQRT(ARG)
+ P(N+3,1)=-P3*STHE3*CPHI3*CTHE1*CPHI1
+ &+P3*STHE3*SPHI3*SPHI1
+ &+P3*CTHE3*STHE1*CPHI1
+ P(N+3,2)=-P3*STHE3*CPHI3*CTHE1*SPHI1
+ &-P3*STHE3*SPHI3*CPHI1
+ &+P3*CTHE3*STHE1*SPHI1
+ P(N+3,3)=P3*STHE3*CPHI3*STHE1
+ &+P3*CTHE3*CTHE1
+ P(N+3,4)=D3
+
+ DO 130 I=1,3
+ P(N+2,I)=-P(N+1,I)-P(N+3,I)
+ 130 CONTINUE
+ P(N+2,4)=D2
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PY1ENT
+C...Stores one parton/particle in commonblock PYJETS.
+
+ SUBROUTINE PY1ENT(IP,KF,PE,THE,PHI)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Standard checks.
+ MSTU(28)=0
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IPA=MAX(1,IABS(IP))
+ IF(IPA.GT.MSTU(4)) CALL PYERRM(21,
+ &'(PY1ENT:) writing outside PYJETS memory')
+ KC=PYCOMP(KF)
+ IF(KC.EQ.0) CALL PYERRM(12,'(PY1ENT:) unknown flavour code')
+
+C...Find mass. Reset K, P and V vectors.
+ PM=0D0
+ IF(MSTU(10).EQ.1) PM=P(IPA,5)
+ IF(MSTU(10).GE.2) PM=PYMASS(KF)
+ DO 100 J=1,5
+ K(IPA,J)=0
+ P(IPA,J)=0D0
+ V(IPA,J)=0D0
+ 100 CONTINUE
+
+C...Store parton/particle in K and P vectors.
+ K(IPA,1)=1
+ IF(IP.LT.0) K(IPA,1)=2
+ K(IPA,2)=KF
+ P(IPA,5)=PM
+ P(IPA,4)=MAX(PE,PM)
+ PA=SQRT(P(IPA,4)**2-P(IPA,5)**2)
+ P(IPA,1)=PA*SIN(THE)*COS(PHI)
+ P(IPA,2)=PA*SIN(THE)*SIN(PHI)
+ P(IPA,3)=PA*COS(THE)
+
+C...Set N. Optionally fragment/decay.
+ N=IPA
+ IF(IP.EQ.0) CALL PYEXEC
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PY2ENT
+C...Stores two partons/particles in their CM frame,
+C...with the first along the +z axis.
+
+ SUBROUTINE PY2ENT(IP,KF1,KF2,PECM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Standard checks.
+ MSTU(28)=0
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IPA=MAX(1,IABS(IP))
+ IF(IPA.GT.MSTU(4)-1) CALL PYERRM(21,
+ &'(PY2ENT:) writing outside PYJETS memory')
+ KC1=PYCOMP(KF1)
+ KC2=PYCOMP(KF2)
+ IF(KC1.EQ.0.OR.KC2.EQ.0) CALL PYERRM(12,
+ &'(PY2ENT:) unknown flavour code')
+
+C...Find masses. Reset K, P and V vectors.
+ PM1=0D0
+ IF(MSTU(10).EQ.1) PM1=P(IPA,5)
+ IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
+ PM2=0D0
+ IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
+ IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
+ DO 110 I=IPA,IPA+1
+ DO 100 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...Check flavours.
+ KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
+ KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
+ IF(MSTU(19).EQ.1) THEN
+ MSTU(19)=0
+ ELSE
+ IF(KQ1+KQ2.NE.0.AND.KQ1+KQ2.NE.4) CALL PYERRM(2,
+ & '(PY2ENT:) unphysical flavour combination')
+ ENDIF
+ K(IPA,2)=KF1
+ K(IPA+1,2)=KF2
+
+C...Store partons/particles in K vectors for normal case.
+ IF(IP.GE.0) THEN
+ K(IPA,1)=1
+ IF(KQ1.NE.0.AND.KQ2.NE.0) K(IPA,1)=2
+ K(IPA+1,1)=1
+
+C...Store partons in K vectors for parton shower evolution.
+ ELSE
+ K(IPA,1)=3
+ K(IPA+1,1)=3
+ K(IPA,4)=MSTU(5)*(IPA+1)
+ K(IPA,5)=K(IPA,4)
+ K(IPA+1,4)=MSTU(5)*IPA
+ K(IPA+1,5)=K(IPA+1,4)
+ ENDIF
+
+C...Check kinematics and store partons/particles in P vectors.
+ IF(PECM.LE.PM1+PM2) CALL PYERRM(13,
+ &'(PY2ENT:) energy smaller than sum of masses')
+ PA=SQRT(MAX(0D0,(PECM**2-PM1**2-PM2**2)**2-(2D0*PM1*PM2)**2))/
+ &(2D0*PECM)
+ P(IPA,3)=PA
+ P(IPA,4)=SQRT(PM1**2+PA**2)
+ P(IPA,5)=PM1
+ P(IPA+1,3)=-PA
+ P(IPA+1,4)=SQRT(PM2**2+PA**2)
+ P(IPA+1,5)=PM2
+
+C...Set N. Optionally fragment/decay.
+ N=IPA+1
+ IF(IP.EQ.0) CALL PYEXEC
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PY3ENT
+C...Stores three partons or particles in their CM frame,
+C...with the first along the +z axis and the third in the (x,z)
+C...plane with x > 0.
+
+ SUBROUTINE PY3ENT(IP,KF1,KF2,KF3,PECM,X1,X3)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Standard checks.
+ MSTU(28)=0
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IPA=MAX(1,IABS(IP))
+ IF(IPA.GT.MSTU(4)-2) CALL PYERRM(21,
+ &'(PY3ENT:) writing outside PYJETS memory')
+ KC1=PYCOMP(KF1)
+ KC2=PYCOMP(KF2)
+ KC3=PYCOMP(KF3)
+ IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0) CALL PYERRM(12,
+ &'(PY3ENT:) unknown flavour code')
+
+C...Find masses. Reset K, P and V vectors.
+ PM1=0D0
+ IF(MSTU(10).EQ.1) PM1=P(IPA,5)
+ IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
+ PM2=0D0
+ IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
+ IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
+ PM3=0D0
+ IF(MSTU(10).EQ.1) PM3=P(IPA+2,5)
+ IF(MSTU(10).GE.2) PM3=PYMASS(KF3)
+ DO 110 I=IPA,IPA+2
+ DO 100 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...Check flavours.
+ KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
+ KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
+ KQ3=KCHG(KC3,2)*ISIGN(1,KF3)
+ IF(MSTU(19).EQ.1) THEN
+ MSTU(19)=0
+ ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0) THEN
+ ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.(KQ1+KQ3.EQ.0.OR.
+ & KQ1+KQ3.EQ.4)) THEN
+ ELSE
+ CALL PYERRM(2,'(PY3ENT:) unphysical flavour combination')
+ ENDIF
+ K(IPA,2)=KF1
+ K(IPA+1,2)=KF2
+ K(IPA+2,2)=KF3
+
+C...Store partons/particles in K vectors for normal case.
+ IF(IP.GE.0) THEN
+ K(IPA,1)=1
+ IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0)) K(IPA,1)=2
+ K(IPA+1,1)=1
+ IF(KQ2.NE.0.AND.KQ3.NE.0) K(IPA+1,1)=2
+ K(IPA+2,1)=1
+
+C...Store partons in K vectors for parton shower evolution.
+ ELSE
+ K(IPA,1)=3
+ K(IPA+1,1)=3
+ K(IPA+2,1)=3
+ KCS=4
+ IF(KQ1.EQ.-1) KCS=5
+ K(IPA,KCS)=MSTU(5)*(IPA+1)
+ K(IPA,9-KCS)=MSTU(5)*(IPA+2)
+ K(IPA+1,KCS)=MSTU(5)*(IPA+2)
+ K(IPA+1,9-KCS)=MSTU(5)*IPA
+ K(IPA+2,KCS)=MSTU(5)*IPA
+ K(IPA+2,9-KCS)=MSTU(5)*(IPA+1)
+ ENDIF
+
+C...Check kinematics.
+ MKERR=0
+ IF(0.5D0*X1*PECM.LE.PM1.OR.0.5D0*(2D0-X1-X3)*PECM.LE.PM2.OR.
+ &0.5D0*X3*PECM.LE.PM3) MKERR=1
+ PA1=SQRT(MAX(1D-10,(0.5D0*X1*PECM)**2-PM1**2))
+ PA2=SQRT(MAX(1D-10,(0.5D0*(2D0-X1-X3)*PECM)**2-PM2**2))
+ PA3=SQRT(MAX(1D-10,(0.5D0*X3*PECM)**2-PM3**2))
+ CTHE2=(PA3**2-PA1**2-PA2**2)/(2D0*PA1*PA2)
+ CTHE3=(PA2**2-PA1**2-PA3**2)/(2D0*PA1*PA3)
+ IF(ABS(CTHE2).GE.1.001D0.OR.ABS(CTHE3).GE.1.001D0) MKERR=1
+ CTHE3=MAX(-1D0,MIN(1D0,CTHE3))
+ IF(MKERR.NE.0) CALL PYERRM(13,
+ &'(PY3ENT:) unphysical kinematical variable setup')
+
+C...Store partons/particles in P vectors.
+ P(IPA,3)=PA1
+ P(IPA,4)=SQRT(PA1**2+PM1**2)
+ P(IPA,5)=PM1
+ P(IPA+2,1)=PA3*SQRT(1D0-CTHE3**2)
+ P(IPA+2,3)=PA3*CTHE3
+ P(IPA+2,4)=SQRT(PA3**2+PM3**2)
+ P(IPA+2,5)=PM3
+ P(IPA+1,1)=-P(IPA+2,1)
+ P(IPA+1,3)=-P(IPA,3)-P(IPA+2,3)
+ P(IPA+1,4)=SQRT(P(IPA+1,1)**2+P(IPA+1,3)**2+PM2**2)
+ P(IPA+1,5)=PM2
+
+C...Set N. Optionally fragment/decay.
+ N=IPA+2
+ IF(IP.EQ.0) CALL PYEXEC
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PY4ENT
+C...Stores four partons or particles in their CM frame, with
+C...the first along the +z axis, the last in the xz plane with x > 0
+C...and the second having y < 0 and y > 0 with equal probability.
+
+ SUBROUTINE PY4ENT(IP,KF1,KF2,KF3,KF4,PECM,X1,X2,X4,X12,X14)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Standard checks.
+ MSTU(28)=0
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IPA=MAX(1,IABS(IP))
+ IF(IPA.GT.MSTU(4)-3) CALL PYERRM(21,
+ &'(PY4ENT:) writing outside PYJETS momory')
+ KC1=PYCOMP(KF1)
+ KC2=PYCOMP(KF2)
+ KC3=PYCOMP(KF3)
+ KC4=PYCOMP(KF4)
+ IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0.OR.KC4.EQ.0) CALL PYERRM(12,
+ &'(PY4ENT:) unknown flavour code')
+
+C...Find masses. Reset K, P and V vectors.
+ PM1=0D0
+ IF(MSTU(10).EQ.1) PM1=P(IPA,5)
+ IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
+ PM2=0D0
+ IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
+ IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
+ PM3=0D0
+ IF(MSTU(10).EQ.1) PM3=P(IPA+2,5)
+ IF(MSTU(10).GE.2) PM3=PYMASS(KF3)
+ PM4=0D0
+ IF(MSTU(10).EQ.1) PM4=P(IPA+3,5)
+ IF(MSTU(10).GE.2) PM4=PYMASS(KF4)
+ DO 110 I=IPA,IPA+3
+ DO 100 J=1,5
+ K(I,J)=0
+ P(I,J)=0D0
+ V(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...Check flavours.
+ KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
+ KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
+ KQ3=KCHG(KC3,2)*ISIGN(1,KF3)
+ KQ4=KCHG(KC4,2)*ISIGN(1,KF4)
+ IF(MSTU(19).EQ.1) THEN
+ MSTU(19)=0
+ ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0.AND.KQ4.EQ.0) THEN
+ ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.KQ3.EQ.2.AND.(KQ1+KQ4.EQ.0.OR.
+ & KQ1+KQ4.EQ.4)) THEN
+ ELSEIF(KQ1.NE.0.AND.KQ1+KQ2.EQ.0.AND.KQ3.NE.0.AND.KQ3+KQ4.EQ.0D0)
+ & THEN
+ ELSE
+ CALL PYERRM(2,'(PY4ENT:) unphysical flavour combination')
+ ENDIF
+ K(IPA,2)=KF1
+ K(IPA+1,2)=KF2
+ K(IPA+2,2)=KF3
+ K(IPA+3,2)=KF4
+
+C...Store partons/particles in K vectors for normal case.
+ IF(IP.GE.0) THEN
+ K(IPA,1)=1
+ IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0.OR.KQ4.NE.0)) K(IPA,1)=2
+ K(IPA+1,1)=1
+ IF(KQ2.NE.0.AND.KQ1+KQ2.NE.0.AND.(KQ3.NE.0.OR.KQ4.NE.0))
+ & K(IPA+1,1)=2
+ K(IPA+2,1)=1
+ IF(KQ3.NE.0.AND.KQ4.NE.0) K(IPA+2,1)=2
+ K(IPA+3,1)=1
+
+C...Store partons for parton shower evolution from q-g-g-qbar or
+C...g-g-g-g event.
+ ELSEIF(KQ1+KQ2.NE.0) THEN
+ K(IPA,1)=3
+ K(IPA+1,1)=3
+ K(IPA+2,1)=3
+ K(IPA+3,1)=3
+ KCS=4
+ IF(KQ1.EQ.-1) KCS=5
+ K(IPA,KCS)=MSTU(5)*(IPA+1)
+ K(IPA,9-KCS)=MSTU(5)*(IPA+3)
+ K(IPA+1,KCS)=MSTU(5)*(IPA+2)
+ K(IPA+1,9-KCS)=MSTU(5)*IPA
+ K(IPA+2,KCS)=MSTU(5)*(IPA+3)
+ K(IPA+2,9-KCS)=MSTU(5)*(IPA+1)
+ K(IPA+3,KCS)=MSTU(5)*IPA
+ K(IPA+3,9-KCS)=MSTU(5)*(IPA+2)
+
+C...Store partons for parton shower evolution from q-qbar-q-qbar event.
+ ELSE
+ K(IPA,1)=3
+ K(IPA+1,1)=3
+ K(IPA+2,1)=3
+ K(IPA+3,1)=3
+ K(IPA,4)=MSTU(5)*(IPA+1)
+ K(IPA,5)=K(IPA,4)
+ K(IPA+1,4)=MSTU(5)*IPA
+ K(IPA+1,5)=K(IPA+1,4)
+ K(IPA+2,4)=MSTU(5)*(IPA+3)
+ K(IPA+2,5)=K(IPA+2,4)
+ K(IPA+3,4)=MSTU(5)*(IPA+2)
+ K(IPA+3,5)=K(IPA+3,4)
+ ENDIF
+
+C...Check kinematics.
+ MKERR=0
+ IF(0.5D0*X1*PECM.LE.PM1.OR.0.5D0*X2*PECM.LE.PM2.OR.
+ &0.5D0*(2D0-X1-X2-X4)*PECM.LE.PM3.OR.0.5D0*X4*PECM.LE.PM4)
+ &MKERR=1
+ PA1=SQRT(MAX(1D-10,(0.5D0*X1*PECM)**2-PM1**2))
+ PA2=SQRT(MAX(1D-10,(0.5D0*X2*PECM)**2-PM2**2))
+ PA4=SQRT(MAX(1D-10,(0.5D0*X4*PECM)**2-PM4**2))
+ X24=X1+X2+X4-1D0-X12-X14+(PM3**2-PM1**2-PM2**2-PM4**2)/PECM**2
+ CTHE4=(X1*X4-2D0*X14)*PECM**2/(4D0*PA1*PA4)
+ IF(ABS(CTHE4).GE.1.002D0) MKERR=1
+ CTHE4=MAX(-1D0,MIN(1D0,CTHE4))
+ STHE4=SQRT(1D0-CTHE4**2)
+ CTHE2=(X1*X2-2D0*X12)*PECM**2/(4D0*PA1*PA2)
+ IF(ABS(CTHE2).GE.1.002D0) MKERR=1
+ CTHE2=MAX(-1D0,MIN(1D0,CTHE2))
+ STHE2=SQRT(1D0-CTHE2**2)
+ CPHI2=((X2*X4-2D0*X24)*PECM**2-4D0*PA2*CTHE2*PA4*CTHE4)/
+ &MAX(1D-8*PECM**2,4D0*PA2*STHE2*PA4*STHE4)
+ IF(ABS(CPHI2).GE.1.05D0) MKERR=1
+ CPHI2=MAX(-1D0,MIN(1D0,CPHI2))
+ IF(MKERR.EQ.1) CALL PYERRM(13,
+ &'(PY4ENT:) unphysical kinematical variable setup')
+
+C...Store partons/particles in P vectors.
+ P(IPA,3)=PA1
+ P(IPA,4)=SQRT(PA1**2+PM1**2)
+ P(IPA,5)=PM1
+ P(IPA+3,1)=PA4*STHE4
+ P(IPA+3,3)=PA4*CTHE4
+ P(IPA+3,4)=SQRT(PA4**2+PM4**2)
+ P(IPA+3,5)=PM4
+ P(IPA+1,1)=PA2*STHE2*CPHI2
+ P(IPA+1,2)=PA2*STHE2*SQRT(1D0-CPHI2**2)*(-1D0)**INT(PYR(0)+0.5D0)
+ P(IPA+1,3)=PA2*CTHE2
+ P(IPA+1,4)=SQRT(PA2**2+PM2**2)
+ P(IPA+1,5)=PM2
+ P(IPA+2,1)=-P(IPA+1,1)-P(IPA+3,1)
+ P(IPA+2,2)=-P(IPA+1,2)
+ P(IPA+2,3)=-P(IPA,3)-P(IPA+1,3)-P(IPA+3,3)
+ P(IPA+2,4)=SQRT(P(IPA+2,1)**2+P(IPA+2,2)**2+P(IPA+2,3)**2+PM3**2)
+ P(IPA+2,5)=PM3
+
+C...Set N. Optionally fragment/decay.
+ N=IPA+3
+ IF(IP.EQ.0) CALL PYEXEC
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYJOIN
+C...Connects a sequence of partons with colour flow indices,
+C...as required for subsequent shower evolution (or other operations).
+
+ SUBROUTINE PYJOIN(NJOIN,IJOIN)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local array.
+ DIMENSION IJOIN(*)
+
+C...Check that partons are of right types to be connected.
+ IF(NJOIN.LT.2) GOTO 120
+ KQSUM=0
+ DO 100 IJN=1,NJOIN
+ I=IJOIN(IJN)
+ IF(I.LE.0.OR.I.GT.N) GOTO 120
+ IF(K(I,1).LT.1.OR.K(I,1).GT.3) GOTO 120
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 120
+ KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
+ IF(KQ.EQ.0) GOTO 120
+ IF(IJN.NE.1.AND.IJN.NE.NJOIN.AND.KQ.NE.2) GOTO 120
+ IF(KQ.NE.2) KQSUM=KQSUM+KQ
+ IF(IJN.EQ.1) KQS=KQ
+ 100 CONTINUE
+ IF(KQSUM.NE.0) GOTO 120
+
+C...Connect the partons sequentially (closing for gluon loop).
+ KCS=(9-KQS)/2
+ IF(KQS.EQ.2) KCS=INT(4.5D0+PYR(0))
+ DO 110 IJN=1,NJOIN
+ I=IJOIN(IJN)
+ K(I,1)=3
+ IF(IJN.NE.1) IP=IJOIN(IJN-1)
+ IF(IJN.EQ.1) IP=IJOIN(NJOIN)
+ IF(IJN.NE.NJOIN) IN=IJOIN(IJN+1)
+ IF(IJN.EQ.NJOIN) IN=IJOIN(1)
+ K(I,KCS)=MSTU(5)*IN
+ K(I,9-KCS)=MSTU(5)*IP
+ IF(IJN.EQ.1.AND.KQS.NE.2) K(I,9-KCS)=0
+ IF(IJN.EQ.NJOIN.AND.KQS.NE.2) K(I,KCS)=0
+ 110 CONTINUE
+
+C...Error exit: no action taken.
+ RETURN
+ 120 CALL PYERRM(12,
+ &'(PYJOIN:) given entries can not be joined by one string')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYGIVE
+C...Sets values of commonblock variables.
+
+ SUBROUTINE PYGIVE(CHIN)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYDAT4/CHAF(500,2)
+ CHARACTER CHAF*16
+ COMMON/PYDATR/MRPY(6),RRPY(100)
+ COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
+ COMMON/PYINT6/PROC(0:500)
+ CHARACTER PROC*28
+ COMMON/PYINT7/SIGT(0:6,0:6,0:5)
+ COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
+ &XPDIR(-6:6)
+ COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYDATR/,
+ &/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,
+ &/PYINT5/,/PYINT6/,/PYINT7/,/PYINT8/,/PYMSSM/
+C...Local arrays and character variables.
+ CHARACTER CHIN*(*),CHFIX*104,CHBIT*104,CHOLD*8,CHNEW*8,CHOLD2*28,
+ &CHNEW2*28,CHNAM*6,CHVAR(49)*6,CHALP(2)*26,CHIND*8,CHINI*10,
+ &CHINR*16
+ DIMENSION MSVAR(49,8)
+
+C...For each variable to be translated give: name,
+C...integer/real/character, no. of indices, lower&upper index bounds.
+ DATA CHVAR/'N','K','P','V','MSTU','PARU','MSTJ','PARJ','KCHG',
+ &'PMAS','PARF','VCKM','MDCY','MDME','BRAT','KFDP','CHAF','MRPY',
+ &'RRPY','MSEL','MSUB','KFIN','CKIN','MSTP','PARP','MSTI','PARI',
+ &'MINT','VINT','ISET','KFPR','COEF','ICOL','XSFX','ISIG','SIGH',
+ &'MWID','WIDS','NGEN','XSEC','PROC','SIGT','XPVMD','XPANL',
+ &'XPANH','XPBEH','XPDIR','IMSS','RMSS'/
+ DATA ((MSVAR(I,J),J=1,8),I=1,49)/ 1,7*0, 1,2,1,4000,1,5,2*0,
+ &2,2,1,4000,1,5,2*0, 2,2,1,4000,1,5,2*0, 1,1,1,200,4*0,
+ &2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
+ &1,2,1,500,1,4,2*0, 2,2,1,500,1,4,2*0, 2,1,1,2000,4*0,
+ &2,2,1,4,1,4,2*0, 1,2,1,500,1,3,2*0, 1,2,1,4000,1,2,2*0,
+ &2,1,1,4000,4*0, 1,2,1,4000,1,5,2*0, 3,2,1,500,1,2,2*0,
+ &1,1,1,6,4*0, 2,1,1,100,4*0,
+ &1,7*0, 1,1,1,500,4*0, 1,2,1,2,-40,40,2*0, 2,1,1,200,4*0,
+ &1,1,1,200,4*0, 2,1,1,200,4*0, 1,1,1,200,4*0, 2,1,1,200,4*0,
+ &1,1,1,400,4*0, 2,1,1,400,4*0, 1,1,1,500,4*0,
+ &1,2,1,500,1,2,2*0, 2,2,1,500,1,20,2*0, 1,3,1,40,1,4,1,2,
+ &2,2,1,2,-40,40,2*0, 1,2,1,1000,1,3,2*0, 2,1,1,1000,4*0,
+ &1,1,1,500,4*0, 2,2,1,500,1,5,2*0, 1,2,0,500,1,3,2*0,
+ &2,2,0,500,1,3,2*0, 4,1,0,500,4*0, 2,3,0,6,0,6,0,5,
+ &2,1,-6,6,4*0, 2,1,-6,6,4*0, 2,1,-6,6,4*0,
+ &2,1,-6,6,4*0, 2,1,-6,6,4*0, 1,1,0,99,4*0, 2,1,0,99,4*0/
+ DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
+ &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
+
+C...Length of character variable. Subdivide it into instructions.
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ CHBIT=CHIN//' '
+ LBIT=101
+ 100 LBIT=LBIT-1
+ IF(CHBIT(LBIT:LBIT).EQ.' ') GOTO 100
+ LTOT=0
+ DO 110 LCOM=1,LBIT
+ IF(CHBIT(LCOM:LCOM).EQ.' ') GOTO 110
+ LTOT=LTOT+1
+ CHFIX(LTOT:LTOT)=CHBIT(LCOM:LCOM)
+ 110 CONTINUE
+ LLOW=0
+ 120 LHIG=LLOW+1
+ 130 LHIG=LHIG+1
+ IF(LHIG.LE.LTOT.AND.CHFIX(LHIG:LHIG).NE.';') GOTO 130
+ LBIT=LHIG-LLOW-1
+ CHBIT(1:LBIT)=CHFIX(LLOW+1:LHIG-1)
+
+C...Identify commonblock variable.
+ LNAM=1
+ 140 LNAM=LNAM+1
+ IF(CHBIT(LNAM:LNAM).NE.'('.AND.CHBIT(LNAM:LNAM).NE.'='.AND.
+ &LNAM.LE.6) GOTO 140
+ CHNAM=CHBIT(1:LNAM-1)//' '
+ DO 160 LCOM=1,LNAM-1
+ DO 150 LALP=1,26
+ IF(CHNAM(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP)) CHNAM(LCOM:LCOM)=
+ & CHALP(2)(LALP:LALP)
+ 150 CONTINUE
+ 160 CONTINUE
+ IVAR=0
+ DO 170 IV=1,49
+ IF(CHNAM.EQ.CHVAR(IV)) IVAR=IV
+ 170 CONTINUE
+ IF(IVAR.EQ.0) THEN
+ CALL PYERRM(18,'(PYGIVE:) do not recognize variable '//CHNAM)
+ LLOW=LHIG
+ IF(LLOW.LT.LTOT) GOTO 120
+ RETURN
+ ENDIF
+
+C...Identify any indices.
+ I1=0
+ I2=0
+ I3=0
+ NINDX=0
+ IF(CHBIT(LNAM:LNAM).EQ.'(') THEN
+ LIND=LNAM
+ 180 LIND=LIND+1
+ IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 180
+ CHIND=' '
+ IF((CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.'c')
+ & .AND.(IVAR.EQ.9.OR.IVAR.EQ.10.OR.IVAR.EQ.13.OR.IVAR.EQ.17))
+ & THEN
+ CHIND(LNAM-LIND+11:8)=CHBIT(LNAM+2:LIND-1)
+ READ(CHIND,'(I8)') KF
+ I1=PYCOMP(KF)
+ ELSEIF(CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.
+ & 'c') THEN
+ CALL PYERRM(18,'(PYGIVE:) not allowed to use C index for '//
+ & CHNAM)
+ LLOW=LHIG
+ IF(LLOW.LT.LTOT) GOTO 120
+ RETURN
+ ELSE
+ CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
+ READ(CHIND,'(I8)') I1
+ ENDIF
+ LNAM=LIND
+ IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
+ NINDX=1
+ ENDIF
+ IF(CHBIT(LNAM:LNAM).EQ.',') THEN
+ LIND=LNAM
+ 190 LIND=LIND+1
+ IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 190
+ CHIND=' '
+ CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
+ READ(CHIND,'(I8)') I2
+ LNAM=LIND
+ IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
+ NINDX=2
+ ENDIF
+ IF(CHBIT(LNAM:LNAM).EQ.',') THEN
+ LIND=LNAM
+ 200 LIND=LIND+1
+ IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 200
+ CHIND=' '
+ CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
+ READ(CHIND,'(I8)') I3
+ LNAM=LIND+1
+ NINDX=3
+ ENDIF
+
+C...Check that indices allowed.
+ IERR=0
+ IF(NINDX.NE.MSVAR(IVAR,2)) IERR=1
+ IF(NINDX.GE.1.AND.(I1.LT.MSVAR(IVAR,3).OR.I1.GT.MSVAR(IVAR,4)))
+ &IERR=2
+ IF(NINDX.GE.2.AND.(I2.LT.MSVAR(IVAR,5).OR.I2.GT.MSVAR(IVAR,6)))
+ &IERR=3
+ IF(NINDX.EQ.3.AND.(I3.LT.MSVAR(IVAR,7).OR.I3.GT.MSVAR(IVAR,8)))
+ &IERR=4
+ IF(CHBIT(LNAM:LNAM).NE.'=') IERR=5
+ IF(IERR.GE.1) THEN
+ CALL PYERRM(18,'(PYGIVE:) unallowed indices for '//
+ & CHBIT(1:LNAM-1))
+ LLOW=LHIG
+ IF(LLOW.LT.LTOT) GOTO 120
+ RETURN
+ ENDIF
+
+C...Save old value of variable.
+ IF(IVAR.EQ.1) THEN
+ IOLD=N
+ ELSEIF(IVAR.EQ.2) THEN
+ IOLD=K(I1,I2)
+ ELSEIF(IVAR.EQ.3) THEN
+ ROLD=P(I1,I2)
+ ELSEIF(IVAR.EQ.4) THEN
+ ROLD=V(I1,I2)
+ ELSEIF(IVAR.EQ.5) THEN
+ IOLD=MSTU(I1)
+ ELSEIF(IVAR.EQ.6) THEN
+ ROLD=PARU(I1)
+ ELSEIF(IVAR.EQ.7) THEN
+ IOLD=MSTJ(I1)
+ ELSEIF(IVAR.EQ.8) THEN
+ ROLD=PARJ(I1)
+ ELSEIF(IVAR.EQ.9) THEN
+ IOLD=KCHG(I1,I2)
+ ELSEIF(IVAR.EQ.10) THEN
+ ROLD=PMAS(I1,I2)
+ ELSEIF(IVAR.EQ.11) THEN
+ ROLD=PARF(I1)
+ ELSEIF(IVAR.EQ.12) THEN
+ ROLD=VCKM(I1,I2)
+ ELSEIF(IVAR.EQ.13) THEN
+ IOLD=MDCY(I1,I2)
+ ELSEIF(IVAR.EQ.14) THEN
+ IOLD=MDME(I1,I2)
+ ELSEIF(IVAR.EQ.15) THEN
+ ROLD=BRAT(I1)
+ ELSEIF(IVAR.EQ.16) THEN
+ IOLD=KFDP(I1,I2)
+ ELSEIF(IVAR.EQ.17) THEN
+ CHOLD=CHAF(I1,I2)
+ ELSEIF(IVAR.EQ.18) THEN
+ IOLD=MRPY(I1)
+ ELSEIF(IVAR.EQ.19) THEN
+ ROLD=RRPY(I1)
+ ELSEIF(IVAR.EQ.20) THEN
+ IOLD=MSEL
+ ELSEIF(IVAR.EQ.21) THEN
+ IOLD=MSUB(I1)
+ ELSEIF(IVAR.EQ.22) THEN
+ IOLD=KFIN(I1,I2)
+ ELSEIF(IVAR.EQ.23) THEN
+ ROLD=CKIN(I1)
+ ELSEIF(IVAR.EQ.24) THEN
+ IOLD=MSTP(I1)
+ ELSEIF(IVAR.EQ.25) THEN
+ ROLD=PARP(I1)
+ ELSEIF(IVAR.EQ.26) THEN
+ IOLD=MSTI(I1)
+ ELSEIF(IVAR.EQ.27) THEN
+ ROLD=PARI(I1)
+ ELSEIF(IVAR.EQ.28) THEN
+ IOLD=MINT(I1)
+ ELSEIF(IVAR.EQ.29) THEN
+ ROLD=VINT(I1)
+ ELSEIF(IVAR.EQ.30) THEN
+ IOLD=ISET(I1)
+ ELSEIF(IVAR.EQ.31) THEN
+ IOLD=KFPR(I1,I2)
+ ELSEIF(IVAR.EQ.32) THEN
+ ROLD=COEF(I1,I2)
+ ELSEIF(IVAR.EQ.33) THEN
+ IOLD=ICOL(I1,I2,I3)
+ ELSEIF(IVAR.EQ.34) THEN
+ ROLD=XSFX(I1,I2)
+ ELSEIF(IVAR.EQ.35) THEN
+ IOLD=ISIG(I1,I2)
+ ELSEIF(IVAR.EQ.36) THEN
+ ROLD=SIGH(I1)
+ ELSEIF(IVAR.EQ.37) THEN
+ IOLD=MWID(I1)
+ ELSEIF(IVAR.EQ.38) THEN
+ ROLD=WIDS(I1,I2)
+ ELSEIF(IVAR.EQ.39) THEN
+ IOLD=NGEN(I1,I2)
+ ELSEIF(IVAR.EQ.40) THEN
+ ROLD=XSEC(I1,I2)
+ ELSEIF(IVAR.EQ.41) THEN
+ CHOLD2=PROC(I1)
+ ELSEIF(IVAR.EQ.42) THEN
+ ROLD=SIGT(I1,I2,I3)
+ ELSEIF(IVAR.EQ.43) THEN
+ ROLD=XPVMD(I1)
+ ELSEIF(IVAR.EQ.44) THEN
+ ROLD=XPANL(I1)
+ ELSEIF(IVAR.EQ.45) THEN
+ ROLD=XPANH(I1)
+ ELSEIF(IVAR.EQ.46) THEN
+ ROLD=XPBEH(I1)
+ ELSEIF(IVAR.EQ.47) THEN
+ ROLD=XPDIR(I1)
+ ELSEIF(IVAR.EQ.48) THEN
+ IOLD=IMSS(I1)
+ ELSEIF(IVAR.EQ.49) THEN
+ ROLD=RMSS(I1)
+ ENDIF
+
+C...Print current value of variable. Loop back.
+ IF(LNAM.GE.LBIT) THEN
+ CHBIT(LNAM:14)=' '
+ CHBIT(15:60)=' has the value '
+ IF(MSVAR(IVAR,1).EQ.1) THEN
+ WRITE(CHBIT(51:60),'(I10)') IOLD
+ ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
+ WRITE(CHBIT(47:60),'(F14.5)') ROLD
+ ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
+ CHBIT(53:60)=CHOLD
+ ELSE
+ CHBIT(33:60)=CHOLD
+ ENDIF
+ IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
+ LLOW=LHIG
+ IF(LLOW.LT.LTOT) GOTO 120
+ RETURN
+ ENDIF
+
+C...Read in new variable value.
+ IF(MSVAR(IVAR,1).EQ.1) THEN
+ CHINI=' '
+ CHINI(LNAM-LBIT+11:10)=CHBIT(LNAM+1:LBIT)
+ READ(CHINI,'(I10)') INEW
+ ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
+ CHINR=' '
+ CHINR(LNAM-LBIT+17:16)=CHBIT(LNAM+1:LBIT)
+ READ(CHINR,*) RNEW
+ ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
+ CHNEW=CHBIT(LNAM+1:LBIT)//' '
+ ELSE
+ CHNEW2=CHBIT(LNAM+1:LBIT)//' '
+ ENDIF
+
+C...Store new variable value.
+ IF(IVAR.EQ.1) THEN
+ N=INEW
+ ELSEIF(IVAR.EQ.2) THEN
+ K(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.3) THEN
+ P(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.4) THEN
+ V(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.5) THEN
+ MSTU(I1)=INEW
+ ELSEIF(IVAR.EQ.6) THEN
+ PARU(I1)=RNEW
+ ELSEIF(IVAR.EQ.7) THEN
+ MSTJ(I1)=INEW
+ ELSEIF(IVAR.EQ.8) THEN
+ PARJ(I1)=RNEW
+ ELSEIF(IVAR.EQ.9) THEN
+ KCHG(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.10) THEN
+ PMAS(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.11) THEN
+ PARF(I1)=RNEW
+ ELSEIF(IVAR.EQ.12) THEN
+ VCKM(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.13) THEN
+ MDCY(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.14) THEN
+ MDME(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.15) THEN
+ BRAT(I1)=RNEW
+ ELSEIF(IVAR.EQ.16) THEN
+ KFDP(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.17) THEN
+ CHAF(I1,I2)=CHNEW
+ ELSEIF(IVAR.EQ.18) THEN
+ MRPY(I1)=INEW
+ ELSEIF(IVAR.EQ.19) THEN
+ RRPY(I1)=RNEW
+ ELSEIF(IVAR.EQ.20) THEN
+ MSEL=INEW
+ ELSEIF(IVAR.EQ.21) THEN
+ MSUB(I1)=INEW
+ ELSEIF(IVAR.EQ.22) THEN
+ KFIN(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.23) THEN
+ CKIN(I1)=RNEW
+ ELSEIF(IVAR.EQ.24) THEN
+ MSTP(I1)=INEW
+ ELSEIF(IVAR.EQ.25) THEN
+ PARP(I1)=RNEW
+ ELSEIF(IVAR.EQ.26) THEN
+ MSTI(I1)=INEW
+ ELSEIF(IVAR.EQ.27) THEN
+ PARI(I1)=RNEW
+ ELSEIF(IVAR.EQ.28) THEN
+ MINT(I1)=INEW
+ ELSEIF(IVAR.EQ.29) THEN
+ VINT(I1)=RNEW
+ ELSEIF(IVAR.EQ.30) THEN
+ ISET(I1)=INEW
+ ELSEIF(IVAR.EQ.31) THEN
+ KFPR(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.32) THEN
+ COEF(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.33) THEN
+ ICOL(I1,I2,I3)=INEW
+ ELSEIF(IVAR.EQ.34) THEN
+ XSFX(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.35) THEN
+ ISIG(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.36) THEN
+ SIGH(I1)=RNEW
+ ELSEIF(IVAR.EQ.37) THEN
+ MWID(I1)=INEW
+ ELSEIF(IVAR.EQ.38) THEN
+ WIDS(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.39) THEN
+ NGEN(I1,I2)=INEW
+ ELSEIF(IVAR.EQ.40) THEN
+ XSEC(I1,I2)=RNEW
+ ELSEIF(IVAR.EQ.41) THEN
+ PROC(I1)=CHNEW2
+ ELSEIF(IVAR.EQ.42) THEN
+ SIGT(I1,I2,I3)=RNEW
+ ELSEIF(IVAR.EQ.43) THEN
+ XPVMD(I1)=RNEW
+ ELSEIF(IVAR.EQ.44) THEN
+ XPANL(I1)=RNEW
+ ELSEIF(IVAR.EQ.45) THEN
+ XPANH(I1)=RNEW
+ ELSEIF(IVAR.EQ.46) THEN
+ XPBEH(I1)=RNEW
+ ELSEIF(IVAR.EQ.47) THEN
+ XPDIR(I1)=RNEW
+ ELSEIF(IVAR.EQ.48) THEN
+ IMSS(I1)=INEW
+ ELSEIF(IVAR.EQ.49) THEN
+ RMSS(I1)=RNEW
+ ENDIF
+
+C...Write old and new value. Loop back.
+ CHBIT(LNAM:14)=' '
+ CHBIT(15:60)=' changed from to '
+ IF(MSVAR(IVAR,1).EQ.1) THEN
+ WRITE(CHBIT(33:42),'(I10)') IOLD
+ WRITE(CHBIT(51:60),'(I10)') INEW
+ IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
+ ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
+ WRITE(CHBIT(29:42),'(F14.5)') ROLD
+ WRITE(CHBIT(47:60),'(F14.5)') RNEW
+ IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
+ ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
+ CHBIT(35:42)=CHOLD
+ CHBIT(53:60)=CHNEW
+ IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
+ ELSE
+ CHBIT(15:88)=' changed from '//CHOLD2//' to '//CHNEW2
+ IF(MSTU(13).GE.1) WRITE(MSTU(11),5100) CHBIT(1:88)
+ ENDIF
+ LLOW=LHIG
+ IF(LLOW.LT.LTOT) GOTO 120
+
+C...Format statement for output on unit MSTU(11) (by default 6).
+ 5000 FORMAT(5X,A60)
+ 5100 FORMAT(5X,A88)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYEXEC
+C...Administrates the fragmentation and decay chain.
+
+ SUBROUTINE PYEXEC
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYINT4/
+C...Local array.
+ DIMENSION PS(2,6),IJOIN(100)
+
+C...Initialize and reset.
+ MSTU(24)=0
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ MSTU(31)=MSTU(31)+1
+ MSTU(1)=0
+ MSTU(2)=0
+ MSTU(3)=0
+ IF(MSTU(17).LE.0) MSTU(90)=0
+ MCONS=1
+
+C...Sum up momentum, energy and charge for starting entries.
+ NSAV=N
+ DO 110 I=1,2
+ DO 100 J=1,6
+ PS(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+ DO 130 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 130
+ DO 120 J=1,4
+ PS(1,J)=PS(1,J)+P(I,J)
+ 120 CONTINUE
+ PS(1,6)=PS(1,6)+PYCHGE(K(I,2))
+ 130 CONTINUE
+ PARU(21)=PS(1,4)
+
+C...Prepare system for subsequent fragmentation/decay.
+ CALL PYPREP(0)
+
+C...Loop through jet fragmentation and particle decays.
+ MBE=0
+ 140 MBE=MBE+1
+ IP=0
+ 150 IP=IP+1
+ KC=0
+ IF(K(IP,1).GT.0.AND.K(IP,1).LE.10) KC=PYCOMP(K(IP,2))
+ IF(KC.EQ.0) THEN
+
+C...Deal with any remaining undecayed resonance
+C...(normally the task of PYEVNT, so seldom used).
+ ELSEIF(MWID(KC).NE.0) THEN
+ IBEG=IP
+ IF(KCHG(KC,2).NE.0.AND.K(I,1).NE.3) THEN
+ IBEG=IP+1
+ 160 IBEG=IBEG-1
+ IF(IBEG.GE.2.AND.K(IBEG,1).EQ.2) GOTO 160
+ IF(K(IBEG,1).NE.2) IBEG=IBEG+1
+ IEND=IP-1
+ 170 IEND=IEND+1
+ IF(IEND.LT.N.AND.K(IEND,1).EQ.2) GOTO 170
+ IF(IEND.LT.N.AND.KCHG(PYCOMP(K(IEND,2)),2).EQ.0) GOTO 170
+ NJOIN=0
+ DO 180 I=IBEG,IEND
+ IF(KCHG(PYCOMP(K(IEND,2)),2).NE.0) THEN
+ NJOIN=NJOIN+1
+ IJOIN(NJOIN)=I
+ ENDIF
+ 180 CONTINUE
+ ENDIF
+ CALL PYRESD(IP)
+ CALL PYPREP(IBEG)
+
+C...Particle decay if unstable and allowed. Save long-lived particle
+C...decays until second pass after Bose-Einstein effects.
+ ELSEIF(KCHG(KC,2).EQ.0) THEN
+ IF(MSTJ(21).GE.1.AND.MDCY(KC,1).GE.1.AND.(MSTJ(51).LE.0.OR.MBE
+ & .EQ.2.OR.PMAS(KC,2).GE.PARJ(91).OR.IABS(K(IP,2)).EQ.311))
+ & CALL PYDECY(IP)
+
+C...Decay products may develop a shower.
+ IF(MSTJ(92).GT.0) THEN
+ IP1=MSTJ(92)
+ QMAX=SQRT(MAX(0D0,(P(IP1,4)+P(IP1+1,4))**2-(P(IP1,1)+P(IP1+1,
+ & 1))**2-(P(IP1,2)+P(IP1+1,2))**2-(P(IP1,3)+P(IP1+1,3))**2))
+ CALL PYSHOW(IP1,IP1+1,QMAX)
+ CALL PYPREP(IP1)
+ MSTJ(92)=0
+ ELSEIF(MSTJ(92).LT.0) THEN
+ IP1=-MSTJ(92)
+ CALL PYSHOW(IP1,-3,P(IP,5))
+ CALL PYPREP(IP1)
+ MSTJ(92)=0
+ ENDIF
+
+C...Jet fragmentation: string or independent fragmentation.
+ ELSEIF(K(IP,1).EQ.1.OR.K(IP,1).EQ.2) THEN
+ MFRAG=MSTJ(1)
+ IF(MFRAG.GE.1.AND.K(IP,1).EQ.1) MFRAG=2
+ IF(MSTJ(21).GE.2.AND.K(IP,1).EQ.2.AND.N.GT.IP) THEN
+ IF(K(IP+1,1).EQ.1.AND.K(IP+1,3).EQ.K(IP,3).AND.
+ & K(IP,3).GT.0.AND.K(IP,3).LT.IP) THEN
+ IF(KCHG(PYCOMP(K(K(IP,3),2)),2).EQ.0) MFRAG=MIN(1,MFRAG)
+ ENDIF
+ ENDIF
+ IF(MFRAG.EQ.1) CALL PYSTRF(IP)
+ IF(MFRAG.EQ.2) CALL PYINDF(IP)
+ IF(MFRAG.EQ.2.AND.K(IP,1).EQ.1) MCONS=0
+ IF(MFRAG.EQ.2.AND.(MSTJ(3).LE.0.OR.MOD(MSTJ(3),5).EQ.0)) MCONS=0
+ ENDIF
+
+C...Loop back if enough space left in PYJETS and no error abort.
+ IF(MSTU(24).NE.0.AND.MSTU(21).GE.2) THEN
+ ELSEIF(IP.LT.N.AND.N.LT.MSTU(4)-20-MSTU(32)) THEN
+ GOTO 150
+ ELSEIF(IP.LT.N) THEN
+ CALL PYERRM(11,'(PYEXEC:) no more memory left in PYJETS')
+ ENDIF
+
+C...Include simple Bose-Einstein effect parametrization if desired.
+ IF(MBE.EQ.1.AND.MSTJ(51).GE.1) THEN
+ CALL PYBOEI(NSAV)
+ GOTO 140
+ ENDIF
+
+C...Check that momentum, energy and charge were conserved.
+ DO 200 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 200
+ DO 190 J=1,4
+ PS(2,J)=PS(2,J)+P(I,J)
+ 190 CONTINUE
+ PS(2,6)=PS(2,6)+PYCHGE(K(I,2))
+ 200 CONTINUE
+ PDEV=(ABS(PS(2,1)-PS(1,1))+ABS(PS(2,2)-PS(1,2))+ABS(PS(2,3)-
+ &PS(1,3))+ABS(PS(2,4)-PS(1,4)))/(1D0+ABS(PS(2,4))+ABS(PS(1,4)))
+ IF(MCONS.EQ.1.AND.PDEV.GT.PARU(11)) CALL PYERRM(15,
+ &'(PYEXEC:) four-momentum was not conserved')
+ IF(MCONS.EQ.1.AND.ABS(PS(2,6)-PS(1,6)).GT.0.1D0) CALL PYERRM(15,
+ &'(PYEXEC:) charge was not conserved')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPREP
+C...Rearranges partons along strings. Allows small systems
+C...to collapse into one or two particles and checks flavours.
+
+ SUBROUTINE PYPREP(IP)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
+C...Local arrays.
+ DIMENSION DPS(5),DPC(5),UE(3)
+
+C...Rearrange parton shower product listing along strings: begin loop.
+ I1=N
+ DO 130 MQGST=1,2
+ DO 120 I=MAX(1,IP),N
+ IF(K(I,1).NE.3) GOTO 120
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 120
+ KQ=KCHG(KC,2)
+ IF(KQ.EQ.0.OR.(MQGST.EQ.1.AND.KQ.EQ.2)) GOTO 120
+
+C...Pick up loose string end.
+ KCS=4
+ IF(KQ*ISIGN(1,K(I,2)).LT.0) KCS=5
+ IA=I
+ NSTP=0
+ 100 NSTP=NSTP+1
+ IF(NSTP.GT.4*N) THEN
+ CALL PYERRM(14,'(PYPREP:) caught in infinite loop')
+ RETURN
+ ENDIF
+
+C...Copy undecayed parton.
+ IF(K(IA,1).EQ.3) THEN
+ IF(I1.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYPREP:) no more memory left in PYJETS')
+ RETURN
+ ENDIF
+ I1=I1+1
+ K(I1,1)=2
+ IF(NSTP.GE.2.AND.KCHG(PYCOMP(K(IA,2)),2).NE.2) K(I1,1)=1
+ K(I1,2)=K(IA,2)
+ K(I1,3)=IA
+ K(I1,4)=0
+ K(I1,5)=0
+ DO 110 J=1,5
+ P(I1,J)=P(IA,J)
+ V(I1,J)=V(IA,J)
+ 110 CONTINUE
+ K(IA,1)=K(IA,1)+10
+ IF(K(I1,1).EQ.1) GOTO 120
+ ENDIF
+
+C...Go to next parton in colour space.
+ IB=IA
+ IF(MOD(K(IB,KCS)/MSTU(5)**2,2).EQ.0.AND.MOD(K(IB,KCS),MSTU(5))
+ & .NE.0) THEN
+ IA=MOD(K(IB,KCS),MSTU(5))
+ K(IB,KCS)=K(IB,KCS)+MSTU(5)**2
+ MREV=0
+ ELSE
+ IF(K(IB,KCS).GE.2*MSTU(5)**2.OR.MOD(K(IB,KCS)/MSTU(5),
+ & MSTU(5)).EQ.0) KCS=9-KCS
+ IA=MOD(K(IB,KCS)/MSTU(5),MSTU(5))
+ K(IB,KCS)=K(IB,KCS)+2*MSTU(5)**2
+ MREV=1
+ ENDIF
+ IF(IA.LE.0.OR.IA.GT.N) THEN
+ CALL PYERRM(12,'(PYPREP:) colour rearrangement failed')
+ RETURN
+ ENDIF
+ IF(MOD(K(IA,4)/MSTU(5),MSTU(5)).EQ.IB.OR.MOD(K(IA,5)/MSTU(5),
+ & MSTU(5)).EQ.IB) THEN
+ IF(MREV.EQ.1) KCS=9-KCS
+ IF(MOD(K(IA,KCS)/MSTU(5),MSTU(5)).NE.IB) KCS=9-KCS
+ K(IA,KCS)=K(IA,KCS)+2*MSTU(5)**2
+ ELSE
+ IF(MREV.EQ.0) KCS=9-KCS
+ IF(MOD(K(IA,KCS),MSTU(5)).NE.IB) KCS=9-KCS
+ K(IA,KCS)=K(IA,KCS)+MSTU(5)**2
+ ENDIF
+ IF(IA.NE.I) GOTO 100
+ K(I1,1)=1
+ 120 CONTINUE
+ 130 CONTINUE
+ N=I1
+ IF(MSTJ(14).LT.0) RETURN
+
+C...Find lowest-mass colour singlet jet system, OK if above threshold.
+ IF(MSTJ(14).EQ.0) GOTO 320
+ NS=N
+ 140 NSIN=N-NS
+ PDM=1D0+PARJ(32)
+ IC=0
+ DO 190 I=MAX(1,IP),NS
+ IF(K(I,1).NE.1.AND.K(I,1).NE.2) THEN
+ ELSEIF(K(I,1).EQ.2.AND.IC.EQ.0) THEN
+ NSIN=NSIN+1
+ IC=I
+ DO 150 J=1,4
+ DPS(J)=P(I,J)
+ 150 CONTINUE
+ MSTJ(93)=1
+ DPS(5)=PYMASS(K(I,2))
+ ELSEIF(K(I,1).EQ.2) THEN
+ DO 160 J=1,4
+ DPS(J)=DPS(J)+P(I,J)
+ 160 CONTINUE
+ ELSEIF(IC.NE.0.AND.KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
+ DO 170 J=1,4
+ DPS(J)=DPS(J)+P(I,J)
+ 170 CONTINUE
+ MSTJ(93)=1
+ DPS(5)=DPS(5)+PYMASS(K(I,2))
+ PD=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))-
+ & DPS(5)
+ IF(PD.LT.PDM) THEN
+ PDM=PD
+ DO 180 J=1,5
+ DPC(J)=DPS(J)
+ 180 CONTINUE
+ IC1=IC
+ IC2=I
+ ENDIF
+ IC=0
+ ELSE
+ NSIN=NSIN+1
+ ENDIF
+ 190 CONTINUE
+ IF(PDM.GE.PARJ(32)) GOTO 320
+
+C...Fill small-mass system as cluster.
+ NSAV=N
+ PECM=SQRT(MAX(0D0,DPC(4)**2-DPC(1)**2-DPC(2)**2-DPC(3)**2))
+ K(N+1,1)=11
+ K(N+1,2)=91
+ K(N+1,3)=IC1
+ K(N+1,4)=N+2
+ K(N+1,5)=N+3
+ P(N+1,1)=DPC(1)
+ P(N+1,2)=DPC(2)
+ P(N+1,3)=DPC(3)
+ P(N+1,4)=DPC(4)
+ P(N+1,5)=PECM
+
+C...Form two particles from flavours of lowest-mass system, if feasible.
+ K(N+2,1)=1
+ K(N+3,1)=1
+ IF(MSTU(16).NE.2) THEN
+ K(N+2,3)=N+1
+ K(N+3,3)=N+1
+ ELSE
+ K(N+2,3)=IC1
+ K(N+3,3)=IC2
+ ENDIF
+ K(N+2,4)=0
+ K(N+3,4)=0
+ K(N+2,5)=0
+ K(N+3,5)=0
+ IF(IABS(K(IC1,2)).NE.21) THEN
+ KC1=PYCOMP(K(IC1,2))
+ KC2=PYCOMP(K(IC2,2))
+ IF(KC1.EQ.0.OR.KC2.EQ.0) GOTO 320
+ KQ1=KCHG(KC1,2)*ISIGN(1,K(IC1,2))
+ KQ2=KCHG(KC2,2)*ISIGN(1,K(IC2,2))
+ IF(KQ1+KQ2.NE.0) GOTO 320
+C.. Start with qq, if there is one. Only allow for rank 1 popcorn meson
+ 200 K1=K(IC1,2)
+ IF(IABS(K(IC2,2)).GT.10) K1=K(IC2,2)
+ MSTU(125)=0
+ CALL PYDCYK(K1,0,KFLN,K(N+2,2))
+ CALL PYDCYK(K(IC1,2)+K(IC2,2)-K1,-KFLN,KFLDMP,K(N+3,2))
+ IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 200
+ ELSE
+ IF(IABS(K(IC2,2)).NE.21) GOTO 320
+C.. No room for popcorn mesons in closed string -> 2 hadrons.
+ MSTU(125)=0
+ 210 CALL PYDCYK(1+INT((2D0+PARJ(2))*PYR(0)),0,KFLN,KFDMP)
+ CALL PYDCYK(KFLN,0,KFLM,K(N+2,2))
+ CALL PYDCYK(-KFLN,-KFLM,KFLDMP,K(N+3,2))
+ IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 210
+ ENDIF
+ P(N+2,5)=PYMASS(K(N+2,2))
+ P(N+3,5)=PYMASS(K(N+3,2))
+ IF(P(N+2,5)+P(N+3,5)+PARJ(64).GE.PECM.AND.NSIN.EQ.1) GOTO 320
+ IF(P(N+2,5)+P(N+3,5)+PARJ(64).GE.PECM) GOTO 260
+
+C...Perform two-particle decay of jet system, if possible.
+ IF(PECM.GE.0.02D0*DPC(4)) THEN
+ PA=SQRT((PECM**2-(P(N+2,5)+P(N+3,5))**2)*(PECM**2-
+ & (P(N+2,5)-P(N+3,5))**2))/(2D0*PECM)
+ UE(3)=2D0*PYR(0)-1D0
+ PHI=PARU(2)*PYR(0)
+ UE(1)=SQRT(1D0-UE(3)**2)*COS(PHI)
+ UE(2)=SQRT(1D0-UE(3)**2)*SIN(PHI)
+ DO 220 J=1,3
+ P(N+2,J)=PA*UE(J)
+ P(N+3,J)=-PA*UE(J)
+ 220 CONTINUE
+ P(N+2,4)=SQRT(PA**2+P(N+2,5)**2)
+ P(N+3,4)=SQRT(PA**2+P(N+3,5)**2)
+ MSTU(33)=1
+ CALL PYROBO(N+2,N+3,0D0,0D0,DPC(1)/DPC(4),DPC(2)/DPC(4),
+ & DPC(3)/DPC(4))
+ ELSE
+ NP=0
+ DO 230 I=IC1,IC2
+ IF(K(I,1).EQ.1.OR.K(I,1).EQ.2) NP=NP+1
+ 230 CONTINUE
+ HA=P(IC1,4)*P(IC2,4)-P(IC1,1)*P(IC2,1)-P(IC1,2)*P(IC2,2)-
+ & P(IC1,3)*P(IC2,3)
+ IF(NP.GE.3.OR.HA.LE.1.25D0*P(IC1,5)*P(IC2,5)) GOTO 260
+ HD1=0.5D0*(P(N+2,5)**2-P(IC1,5)**2)
+ HD2=0.5D0*(P(N+3,5)**2-P(IC2,5)**2)
+ HR=SQRT(MAX(0D0,((HA-HD1-HD2)**2-(P(N+2,5)*P(N+3,5))**2)/
+ & (HA**2-(P(IC1,5)*P(IC2,5))**2)))-1D0
+ HC=P(IC1,5)**2+2D0*HA+P(IC2,5)**2
+ HK1=((P(IC2,5)**2+HA)*HR+HD1-HD2)/HC
+ HK2=((P(IC1,5)**2+HA)*HR+HD2-HD1)/HC
+ DO 240 J=1,4
+ P(N+2,J)=(1D0+HK1)*P(IC1,J)-HK2*P(IC2,J)
+ P(N+3,J)=(1D0+HK2)*P(IC2,J)-HK1*P(IC1,J)
+ 240 CONTINUE
+ ENDIF
+ DO 250 J=1,4
+ V(N+1,J)=V(IC1,J)
+ V(N+2,J)=V(IC1,J)
+ V(N+3,J)=V(IC2,J)
+ 250 CONTINUE
+ V(N+1,5)=0D0
+ V(N+2,5)=0D0
+ V(N+3,5)=0D0
+ N=N+3
+ GOTO 300
+
+C...Else form one particle from the flavours available, if possible.
+ 260 K(N+1,5)=N+2
+ IF(IABS(K(IC1,2)).GT.100.AND.IABS(K(IC2,2)).GT.100) THEN
+ GOTO 320
+ ELSEIF(IABS(K(IC1,2)).NE.21) THEN
+ CALL PYKFDI(K(IC1,2),K(IC2,2),KFLDMP,K(N+2,2))
+ ELSE
+ KFLN=1+INT((2D0+PARJ(2))*PYR(0))
+ CALL PYKFDI(KFLN,-KFLN,KFLDMP,K(N+2,2))
+ ENDIF
+ IF(K(N+2,2).EQ.0) GOTO 260
+ P(N+2,5)=PYMASS(K(N+2,2))
+
+C...Find parton/particle which combines to largest extra mass.
+ IR=0
+ HA=0D0
+ HSM=0D0
+ DO 280 MCOMB=1,3
+ IF(IR.NE.0) GOTO 280
+ DO 270 I=MAX(1,IP),N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10.OR.(I.GE.IC1.AND.I.LE.IC2
+ & .AND.K(I,1).GE.1.AND.K(I,1).LE.2)) GOTO 270
+ IF(MCOMB.EQ.1) KCI=PYCOMP(K(I,2))
+ IF(MCOMB.EQ.1.AND.KCI.EQ.0) GOTO 270
+ IF(MCOMB.EQ.1.AND.KCHG(KCI,2).EQ.0.AND.I.LE.NS) GOTO 270
+ IF(MCOMB.EQ.2.AND.IABS(K(I,2)).GT.10.AND.IABS(K(I,2)).LE.100)
+ & GOTO 270
+ HCR=DPC(4)*P(I,4)-DPC(1)*P(I,1)-DPC(2)*P(I,2)-DPC(3)*P(I,3)
+ HSR=2D0*HCR+PECM**2-P(N+2,5)**2-2D0*P(N+2,5)*P(I,5)
+ IF(HSR.GT.HSM) THEN
+ IR=I
+ HA=HCR
+ HSM=HSR
+ ENDIF
+ 270 CONTINUE
+ 280 CONTINUE
+
+C...Shuffle energy and momentum to put new particle on mass shell.
+ IF(IR.NE.0) THEN
+ HB=PECM**2+HA
+ HC=P(N+2,5)**2+HA
+ HD=P(IR,5)**2+HA
+ HK2=0.5D0*(HB*SQRT(MAX(0D0,((HB+HC)**2-4D0*(HB+HD)*P(N+2,5)**2)/
+ & (HA**2-(PECM*P(IR,5))**2)))-(HB+HC))/(HB+HD)
+ HK1=(0.5D0*(P(N+2,5)**2-PECM**2)+HD*HK2)/HB
+ DO 290 J=1,4
+ P(N+2,J)=(1D0+HK1)*DPC(J)-HK2*P(IR,J)
+ P(IR,J)=(1D0+HK2)*P(IR,J)-HK1*DPC(J)
+ V(N+1,J)=V(IC1,J)
+ V(N+2,J)=V(IC1,J)
+ 290 CONTINUE
+ V(N+1,5)=0D0
+ V(N+2,5)=0D0
+ N=N+2
+ ELSE
+ CALL PYERRM(3,'(PYPREP:) no match for collapsing cluster')
+ RETURN
+ ENDIF
+
+C...Mark collapsed system and store daughter pointers. Iterate.
+ 300 DO 310 I=IC1,IC2
+ IF((K(I,1).EQ.1.OR.K(I,1).EQ.2).AND.KCHG(PYCOMP(K(I,2)),2).NE.0)
+ & THEN
+ K(I,1)=K(I,1)+10
+ IF(MSTU(16).NE.2) THEN
+ K(I,4)=NSAV+1
+ K(I,5)=NSAV+1
+ ELSE
+ K(I,4)=NSAV+2
+ K(I,5)=N
+ ENDIF
+ ENDIF
+ 310 CONTINUE
+ IF(N.LT.MSTU(4)-MSTU(32)-5) GOTO 140
+
+C...Check flavours and invariant masses in parton systems.
+ 320 NP=0
+ KFN=0
+ KQS=0
+ DO 330 J=1,5
+ DPS(J)=0D0
+ 330 CONTINUE
+ DO 360 I=MAX(1,IP),N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 360
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 360
+ KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
+ IF(KQ.EQ.0) GOTO 360
+ NP=NP+1
+ IF(KQ.NE.2) THEN
+ KFN=KFN+1
+ KQS=KQS+KQ
+ MSTJ(93)=1
+ DPS(5)=DPS(5)+PYMASS(K(I,2))
+ ENDIF
+ DO 340 J=1,4
+ DPS(J)=DPS(J)+P(I,J)
+ 340 CONTINUE
+ IF(K(I,1).EQ.1) THEN
+ IF(NP.NE.1.AND.(KFN.EQ.1.OR.KFN.GE.3.OR.KQS.NE.0)) CALL
+ & PYERRM(2,'(PYPREP:) unphysical flavour combination')
+ IF(NP.NE.1.AND.DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2.LT.
+ & (0.9D0*PARJ(32)+DPS(5))**2) CALL PYERRM(3,
+ & '(PYPREP:) too small mass in jet system')
+**sr
+C IF(NP.NE.1.AND.DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2.LT.
+C & (0.9D0*PARJ(32)+DPS(5))**2)
+C & WRITE(*,*) 'I,DPS',I,DPS
+**
+ NP=0
+ KFN=0
+ KQS=0
+ DO 350 J=1,5
+ DPS(J)=0D0
+ 350 CONTINUE
+ ENDIF
+ 360 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSTRF
+C...Handles the fragmentation of an arbitrary colour singlet
+C...jet system according to the Lund string fragmentation model.
+
+ SUBROUTINE PYSTRF(IP)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays. All MOPS variables ends with MO
+ DIMENSION DPS(5),KFL(3),PMQ(3),PX(3),PY(3),GAM(3),IE(2),PR(2),
+ &IN(9),DHM(4),DHG(4),DP(5,5),IRANK(2),MJU(4),IJU(3),PJU(5,5),
+ &TJU(5),KFJH(2),NJS(2),KFJS(2),PJS(4,5),MSTU9T(8),PARU9T(8),
+ &INMO(9),PM2QMO(2),XTMO(2)
+
+C...Function: four-product of two vectors.
+ FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
+ DFOUR(I,J)=DP(I,4)*DP(J,4)-DP(I,1)*DP(J,1)-DP(I,2)*DP(J,2)-
+ &DP(I,3)*DP(J,3)
+
+C...Reset counters. Identify parton system.
+ MSTJ(91)=0
+ NSAV=N
+ MSTU90=MSTU(90)
+ NP=0
+ KQSUM=0
+ DO 100 J=1,5
+ DPS(J)=0D0
+ 100 CONTINUE
+ MJU(1)=0
+ MJU(2)=0
+ I=IP-1
+ 110 I=I+1
+ IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
+ CALL PYERRM(12,'(PYSTRF:) failed to reconstruct jet system')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(K(I,1).NE.1.AND.K(I,1).NE.2.AND.K(I,1).NE.41) GOTO 110
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 110
+ KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
+ IF(KQ.EQ.0) GOTO 110
+ IF(N+5*NP+11.GT.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Take copy of partons to be considered. Check flavour sum.
+ NP=NP+1
+ DO 120 J=1,5
+ K(N+NP,J)=K(I,J)
+ P(N+NP,J)=P(I,J)
+ IF(J.NE.4) DPS(J)=DPS(J)+P(I,J)
+ 120 CONTINUE
+ DPS(4)=DPS(4)+SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ K(N+NP,3)=I
+ IF(KQ.NE.2) KQSUM=KQSUM+KQ
+ IF(K(I,1).EQ.41) THEN
+ KQSUM=KQSUM+2*KQ
+ IF(KQSUM.EQ.KQ) MJU(1)=N+NP
+ IF(KQSUM.NE.KQ) MJU(2)=N+NP
+ ENDIF
+ IF(K(I,1).EQ.2.OR.K(I,1).EQ.41) GOTO 110
+ IF(KQSUM.NE.0) THEN
+ CALL PYERRM(12,'(PYSTRF:) unphysical flavour combination')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Boost copied system to CM frame (for better numerical precision).
+ IF(ABS(DPS(3)).LT.0.99D0*DPS(4)) THEN
+ MBST=0
+ MSTU(33)=1
+ CALL PYROBO(N+1,N+NP,0D0,0D0,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
+ & -DPS(3)/DPS(4))
+ ELSE
+ MBST=1
+ HHBZ=SQRT(MAX(1D-6,DPS(4)+DPS(3))/MAX(1D-6,DPS(4)-DPS(3)))
+ DO 130 I=N+1,N+NP
+ HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
+ IF(P(I,3).GT.0D0) THEN
+ HHPEZ=(P(I,4)+P(I,3))/HHBZ
+ P(I,3)=0.5D0*(HHPEZ-HHPMT/HHPEZ)
+ P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
+ ELSE
+ HHPEZ=(P(I,4)-P(I,3))*HHBZ
+ P(I,3)=-0.5D0*(HHPEZ-HHPMT/HHPEZ)
+ P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
+ ENDIF
+ 130 CONTINUE
+ ENDIF
+
+C...Search for very nearby partons that may be recombined.
+ NTRYR=0
+ PARU12=PARU(12)
+ PARU13=PARU(13)
+ MJU(3)=MJU(1)
+ MJU(4)=MJU(2)
+ NR=NP
+ 140 IF(NR.GE.3) THEN
+ PDRMIN=2D0*PARU12
+ DO 150 I=N+1,N+NR
+ IF(I.EQ.N+NR.AND.IABS(K(N+1,2)).NE.21) GOTO 150
+ I1=I+1
+ IF(I.EQ.N+NR) I1=N+1
+ IF(K(I,1).EQ.41.OR.K(I1,1).EQ.41) GOTO 150
+ IF(MJU(1).NE.0.AND.I1.LT.MJU(1).AND.IABS(K(I1,2)).NE.21)
+ & GOTO 150
+ IF(MJU(2).NE.0.AND.I.GT.MJU(2).AND.IABS(K(I,2)).NE.21)
+ & GOTO 150
+ PAP=SQRT((P(I,1)**2+P(I,2)**2+P(I,3)**2)*(P(I1,1)**2+
+ & P(I1,2)**2+P(I1,3)**2))
+ PVP=P(I,1)*P(I1,1)+P(I,2)*P(I1,2)+P(I,3)*P(I1,3)
+ PDR=4D0*(PAP-PVP)**2/MAX(1D-6,PARU13**2*PAP+2D0*(PAP-PVP))
+ IF(PDR.LT.PDRMIN) THEN
+ IR=I
+ PDRMIN=PDR
+ ENDIF
+ 150 CONTINUE
+
+C...Recombine very nearby partons to avoid machine precision problems.
+ IF(PDRMIN.LT.PARU12.AND.IR.EQ.N+NR) THEN
+ DO 160 J=1,4
+ P(N+1,J)=P(N+1,J)+P(N+NR,J)
+ 160 CONTINUE
+ P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
+ & P(N+1,3)**2))
+ NR=NR-1
+ GOTO 140
+ ELSEIF(PDRMIN.LT.PARU12) THEN
+ DO 170 J=1,4
+ P(IR,J)=P(IR,J)+P(IR+1,J)
+ 170 CONTINUE
+ P(IR,5)=SQRT(MAX(0D0,P(IR,4)**2-P(IR,1)**2-P(IR,2)**2-
+ & P(IR,3)**2))
+ DO 190 I=IR+1,N+NR-1
+ K(I,2)=K(I+1,2)
+ DO 180 J=1,5
+ P(I,J)=P(I+1,J)
+ 180 CONTINUE
+ 190 CONTINUE
+ IF(IR.EQ.N+NR-1) K(IR,2)=K(N+NR,2)
+ NR=NR-1
+ IF(MJU(1).GT.IR) MJU(1)=MJU(1)-1
+ IF(MJU(2).GT.IR) MJU(2)=MJU(2)-1
+ GOTO 140
+ ENDIF
+ ENDIF
+ NTRYR=NTRYR+1
+
+C...Reset particle counter. Skip ahead if no junctions are present;
+C...this is usually the case!
+ NRS=MAX(5*NR+11,NP)
+ NTRY=0
+ 200 NTRY=NTRY+1
+ IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
+ PARU12=4D0*PARU12
+ PARU13=2D0*PARU13
+ GOTO 140
+ ELSEIF(NTRY.GT.100) THEN
+ CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ I=N+NRS
+ MSTU(90)=MSTU90
+ IF(MJU(1).EQ.0.AND.MJU(2).EQ.0) GOTO 580
+ IF(MSTJ(12).GE.4) CALL PYERRM(29,'(PYSTRF:) sorry,'//
+ & ' junction strings not handled by MSTJ(12)>3 options')
+ DO 570 JT=1,2
+ NJS(JT)=0
+ IF(MJU(JT).EQ.0) GOTO 570
+ JS=3-2*JT
+
+C...Find and sum up momentum on three sides of junction. Check flavours.
+ DO 220 IU=1,3
+ IJU(IU)=0
+ DO 210 J=1,5
+ PJU(IU,J)=0D0
+ 210 CONTINUE
+ 220 CONTINUE
+ IU=0
+ DO 240 I1=N+1+(JT-1)*(NR-1),N+NR+(JT-1)*(1-NR),JS
+ IF(K(I1,2).NE.21.AND.IU.LE.2) THEN
+ IU=IU+1
+ IJU(IU)=I1
+ ENDIF
+ DO 230 J=1,4
+ PJU(IU,J)=PJU(IU,J)+P(I1,J)
+ 230 CONTINUE
+ 240 CONTINUE
+ DO 250 IU=1,3
+ PJU(IU,5)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
+ 250 CONTINUE
+ IF(K(IJU(3),2)/100.NE.10*K(IJU(1),2)+K(IJU(2),2).AND.
+ & K(IJU(3),2)/100.NE.10*K(IJU(2),2)+K(IJU(1),2)) THEN
+ CALL PYERRM(12,'(PYSTRF:) unphysical flavour combination')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Calculate (approximate) boost to rest frame of junction.
+ T12=(PJU(1,1)*PJU(2,1)+PJU(1,2)*PJU(2,2)+PJU(1,3)*PJU(2,3))/
+ & (PJU(1,5)*PJU(2,5))
+ T13=(PJU(1,1)*PJU(3,1)+PJU(1,2)*PJU(3,2)+PJU(1,3)*PJU(3,3))/
+ & (PJU(1,5)*PJU(3,5))
+ T23=(PJU(2,1)*PJU(3,1)+PJU(2,2)*PJU(3,2)+PJU(2,3)*PJU(3,3))/
+ & (PJU(2,5)*PJU(3,5))
+ T11=SQRT((2D0/3D0)*(1D0-T12)*(1D0-T13)/(1D0-T23))
+ T22=SQRT((2D0/3D0)*(1D0-T12)*(1D0-T23)/(1D0-T13))
+ TSQ=SQRT((2D0*T11*T22+T12-1D0)*(1D0+T12))
+ T1F=(TSQ-T22*(1D0+T12))/(1D0-T12**2)
+ T2F=(TSQ-T11*(1D0+T12))/(1D0-T12**2)
+ DO 260 J=1,3
+ TJU(J)=-(T1F*PJU(1,J)/PJU(1,5)+T2F*PJU(2,J)/PJU(2,5))
+ 260 CONTINUE
+ TJU(4)=SQRT(1D0+TJU(1)**2+TJU(2)**2+TJU(3)**2)
+ DO 270 IU=1,3
+ PJU(IU,5)=TJU(4)*PJU(IU,4)-TJU(1)*PJU(IU,1)-TJU(2)*PJU(IU,2)-
+ & TJU(3)*PJU(IU,3)
+ 270 CONTINUE
+
+C...Put junction at rest if motion could give inconsistencies.
+ IF(PJU(1,5)+PJU(2,5).GT.PJU(1,4)+PJU(2,4)) THEN
+ DO 280 J=1,3
+ TJU(J)=0D0
+ 280 CONTINUE
+ TJU(4)=1D0
+ PJU(1,5)=PJU(1,4)
+ PJU(2,5)=PJU(2,4)
+ PJU(3,5)=PJU(3,4)
+ ENDIF
+
+C...Start preparing for fragmentation of two strings from junction.
+ ISTA=I
+ DO 550 IU=1,2
+ NS=IJU(IU+1)-IJU(IU)
+
+C...Junction strings: find longitudinal string directions.
+ DO 310 IS=1,NS
+ IS1=IJU(IU)+IS-1
+ IS2=IJU(IU)+IS
+ DO 290 J=1,5
+ DP(1,J)=0.5D0*P(IS1,J)
+ IF(IS.EQ.1) DP(1,J)=P(IS1,J)
+ DP(2,J)=0.5D0*P(IS2,J)
+ IF(IS.EQ.NS) DP(2,J)=-PJU(IU,J)
+ 290 CONTINUE
+ IF(IS.EQ.NS) DP(2,4)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+
+ & PJU(IU,3)**2)
+ IF(IS.EQ.NS) DP(2,5)=0D0
+ DP(3,5)=DFOUR(1,1)
+ DP(4,5)=DFOUR(2,2)
+ DHKC=DFOUR(1,2)
+ IF(DP(3,5)+2D0*DHKC+DP(4,5).LE.0D0) THEN
+ DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
+ DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
+ DP(3,5)=0D0
+ DP(4,5)=0D0
+ DHKC=DFOUR(1,2)
+ ENDIF
+ DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
+ DHK1=0.5D0*((DP(4,5)+DHKC)/DHKS-1D0)
+ DHK2=0.5D0*((DP(3,5)+DHKC)/DHKS-1D0)
+ IN1=N+NR+4*IS-3
+ P(IN1,5)=SQRT(DP(3,5)+2D0*DHKC+DP(4,5))
+ DO 300 J=1,4
+ P(IN1,J)=(1D0+DHK1)*DP(1,J)-DHK2*DP(2,J)
+ P(IN1+1,J)=(1D0+DHK2)*DP(2,J)-DHK1*DP(1,J)
+ 300 CONTINUE
+ 310 CONTINUE
+
+C...Junction strings: initialize flavour, momentum and starting pos.
+ ISAV=I
+ MSTU91=MSTU(90)
+ 320 NTRY=NTRY+1
+ IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
+ PARU12=4D0*PARU12
+ PARU13=2D0*PARU13
+ GOTO 140
+ ELSEIF(NTRY.GT.100) THEN
+ CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ I=ISAV
+ MSTU(90)=MSTU91
+ IRANKJ=0
+ IE(1)=K(N+1+(JT/2)*(NP-1),3)
+ IN(4)=N+NR+1
+ IN(5)=IN(4)+1
+ IN(6)=N+NR+4*NS+1
+ DO 340 JQ=1,2
+ DO 330 IN1=N+NR+2+JQ,N+NR+4*NS-2+JQ,4
+ P(IN1,1)=2-JQ
+ P(IN1,2)=JQ-1
+ P(IN1,3)=1D0
+ 330 CONTINUE
+ 340 CONTINUE
+ KFL(1)=K(IJU(IU),2)
+ PX(1)=0D0
+ PY(1)=0D0
+ GAM(1)=0D0
+ DO 350 J=1,5
+ PJU(IU+3,J)=0D0
+ 350 CONTINUE
+
+C...Junction strings: find initial transverse directions.
+ DO 360 J=1,4
+ DP(1,J)=P(IN(4),J)
+ DP(2,J)=P(IN(4)+1,J)
+ DP(3,J)=0D0
+ DP(4,J)=0D0
+ 360 CONTINUE
+ DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
+ DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
+ DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
+ DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
+ DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
+ IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
+ IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
+ IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
+ IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
+ DHC12=DFOUR(1,2)
+ DHCX1=DFOUR(3,1)/DHC12
+ DHCX2=DFOUR(3,2)/DHC12
+ DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
+ DHCY1=DFOUR(4,1)/DHC12
+ DHCY2=DFOUR(4,2)/DHC12
+ DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
+ DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
+ DO 370 J=1,4
+ DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
+ P(IN(6),J)=DP(3,J)
+ P(IN(6)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
+ & DHCYX*DP(3,J))
+ 370 CONTINUE
+
+C...Junction strings: produce new particle, origin.
+ 380 I=I+1
+ IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IRANKJ=IRANKJ+1
+ K(I,1)=1
+ K(I,3)=IE(1)
+ K(I,4)=0
+ K(I,5)=0
+
+C...Junction strings: generate flavour, hadron, pT, z and Gamma.
+ 390 CALL PYKFDI(KFL(1),0,KFL(3),K(I,2))
+ IF(K(I,2).EQ.0) GOTO 320
+ IF(IRANKJ.EQ.1.AND.IABS(KFL(1)).LE.10.AND.
+ & IABS(KFL(3)).GT.10) THEN
+ IF(PYR(0).GT.PARJ(19)) GOTO 390
+ ENDIF
+ P(I,5)=PYMASS(K(I,2))
+ CALL PYPTDI(KFL(1),PX(3),PY(3))
+ PR(1)=P(I,5)**2+(PX(1)+PX(3))**2+(PY(1)+PY(3))**2
+ CALL PYZDIS(KFL(1),KFL(3),PR(1),Z)
+ IF(IABS(KFL(1)).GE.4.AND.IABS(KFL(1)).LE.8.AND.
+ & MSTU(90).LT.8) THEN
+ MSTU(90)=MSTU(90)+1
+ MSTU(90+MSTU(90))=I
+ PARU(90+MSTU(90))=Z
+ ENDIF
+ GAM(3)=(1D0-Z)*(GAM(1)+PR(1)/Z)
+ DO 400 J=1,3
+ IN(J)=IN(3+J)
+ 400 CONTINUE
+
+C...Junction strings: stepping within or from 'low' string region easy.
+ IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
+ & P(IN(1),5)**2.GE.PR(1)) THEN
+ P(IN(1)+2,4)=Z*P(IN(1)+2,3)
+ P(IN(2)+2,4)=PR(1)/(P(IN(1)+2,4)*P(IN(1),5)**2)
+ DO 410 J=1,4
+ P(I,J)=(PX(1)+PX(3))*P(IN(3),J)+(PY(1)+PY(3))*P(IN(3)+1,J)
+ 410 CONTINUE
+ GOTO 500
+ ELSEIF(IN(1)+1.EQ.IN(2)) THEN
+ P(IN(2)+2,4)=P(IN(2)+2,3)
+ P(IN(2)+2,1)=1D0
+ IN(2)=IN(2)+4
+ IF(IN(2).GT.N+NR+4*NS) GOTO 320
+ IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
+ P(IN(1)+2,4)=P(IN(1)+2,3)
+ P(IN(1)+2,1)=0D0
+ IN(1)=IN(1)+4
+ ENDIF
+ ENDIF
+
+C...Junction strings: find new transverse directions.
+ 420 IF(IN(1).GT.N+NR+4*NS.OR.IN(2).GT.N+NR+4*NS.OR.
+ & IN(1).GT.IN(2)) GOTO 320
+ IF(IN(1).NE.IN(4).OR.IN(2).NE.IN(5)) THEN
+ DO 430 J=1,4
+ DP(1,J)=P(IN(1),J)
+ DP(2,J)=P(IN(2),J)
+ DP(3,J)=0D0
+ DP(4,J)=0D0
+ 430 CONTINUE
+ DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
+ DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
+ DHC12=DFOUR(1,2)
+ IF(DHC12.LE.1D-2) THEN
+ P(IN(1)+2,4)=P(IN(1)+2,3)
+ P(IN(1)+2,1)=0D0
+ IN(1)=IN(1)+4
+ GOTO 420
+ ENDIF
+ IN(3)=N+NR+4*NS+5
+ DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
+ DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
+ DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
+ IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
+ IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
+ IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
+ IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
+ DHCX1=DFOUR(3,1)/DHC12
+ DHCX2=DFOUR(3,2)/DHC12
+ DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
+ DHCY1=DFOUR(4,1)/DHC12
+ DHCY2=DFOUR(4,2)/DHC12
+ DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
+ DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
+ DO 440 J=1,4
+ DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
+ P(IN(3),J)=DP(3,J)
+ P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
+ & DHCYX*DP(3,J))
+ 440 CONTINUE
+C...Express pT with respect to new axes, if sensible.
+ PXP=-(PX(3)*FOUR(IN(6),IN(3))+PY(3)*FOUR(IN(6)+1,IN(3)))
+ PYP=-(PX(3)*FOUR(IN(6),IN(3)+1)+PY(3)*FOUR(IN(6)+1,IN(3)+1))
+ IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01D0) THEN
+ PX(3)=PXP
+ PY(3)=PYP
+ ENDIF
+ ENDIF
+
+C...Junction strings: sum up known four-momentum, coefficients for m2.
+ DO 470 J=1,4
+ DHG(J)=0D0
+ P(I,J)=PX(1)*P(IN(6),J)+PY(1)*P(IN(6)+1,J)+PX(3)*P(IN(3),J)+
+ & PY(3)*P(IN(3)+1,J)
+ DO 450 IN1=IN(4),IN(1)-4,4
+ P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
+ 450 CONTINUE
+ DO 460 IN2=IN(5),IN(2)-4,4
+ P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
+ 460 CONTINUE
+ 470 CONTINUE
+ DHM(1)=FOUR(I,I)
+ DHM(2)=2D0*FOUR(I,IN(1))
+ DHM(3)=2D0*FOUR(I,IN(2))
+ DHM(4)=2D0*FOUR(IN(1),IN(2))
+
+C...Junction strings: find coefficients for Gamma expression.
+ DO 490 IN2=IN(1)+1,IN(2),4
+ DO 480 IN1=IN(1),IN2-1,4
+ DHC=2D0*FOUR(IN1,IN2)
+ DHG(1)=DHG(1)+P(IN1+2,1)*P(IN2+2,1)*DHC
+ IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-P(IN2+2,1)*DHC
+ IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+P(IN1+2,1)*DHC
+ IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
+ 480 CONTINUE
+ 490 CONTINUE
+
+C...Junction strings: solve (m2, Gamma) equation system for energies.
+ DHS1=DHM(3)*DHG(4)-DHM(4)*DHG(3)
+ IF(ABS(DHS1).LT.1D-4) GOTO 320
+ DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(2)*DHG(3)-DHG(4)*
+ & (P(I,5)**2-DHM(1))+DHG(2)*DHM(3)
+ DHS3=DHM(2)*(GAM(3)-DHG(1))-DHG(2)*(P(I,5)**2-DHM(1))
+ P(IN(2)+2,4)=0.5D0*(SQRT(MAX(0D0,DHS2**2-4D0*DHS1*DHS3))/
+ & ABS(DHS1)-DHS2/DHS1)
+ IF(DHM(2)+DHM(4)*P(IN(2)+2,4).LE.0D0) GOTO 320
+ P(IN(1)+2,4)=(P(I,5)**2-DHM(1)-DHM(3)*P(IN(2)+2,4))/
+ & (DHM(2)+DHM(4)*P(IN(2)+2,4))
+
+C...Junction strings: step to new region if necessary.
+ IF(P(IN(2)+2,4).GT.P(IN(2)+2,3)) THEN
+ P(IN(2)+2,4)=P(IN(2)+2,3)
+ P(IN(2)+2,1)=1D0
+ IN(2)=IN(2)+4
+ IF(IN(2).GT.N+NR+4*NS) GOTO 320
+ IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
+ P(IN(1)+2,4)=P(IN(1)+2,3)
+ P(IN(1)+2,1)=0D0
+ IN(1)=IN(1)+4
+ ENDIF
+ GOTO 420
+ ELSEIF(P(IN(1)+2,4).GT.P(IN(1)+2,3)) THEN
+ P(IN(1)+2,4)=P(IN(1)+2,3)
+ P(IN(1)+2,1)=0D0
+ IN(1)=IN(1)+JS
+ GOTO 890
+ ENDIF
+
+C...Junction strings: particle four-momentum, remainder, loop back.
+ 500 DO 510 J=1,4
+ P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+
+ & P(IN(2)+2,4)*P(IN(2),J)
+ PJU(IU+3,J)=PJU(IU+3,J)+P(I,J)
+ 510 CONTINUE
+ IF(P(I,4).LT.P(I,5)) GOTO 320
+ PJU(IU+3,5)=TJU(4)*PJU(IU+3,4)-TJU(1)*PJU(IU+3,1)-
+ & TJU(2)*PJU(IU+3,2)-TJU(3)*PJU(IU+3,3)
+ IF(PJU(IU+3,5).LT.PJU(IU,5)) THEN
+ KFL(1)=-KFL(3)
+ PX(1)=-PX(3)
+ PY(1)=-PY(3)
+ GAM(1)=GAM(3)
+ IF(IN(3).NE.IN(6)) THEN
+ DO 520 J=1,4
+ P(IN(6),J)=P(IN(3),J)
+ P(IN(6)+1,J)=P(IN(3)+1,J)
+ 520 CONTINUE
+ ENDIF
+ DO 530 JQ=1,2
+ IN(3+JQ)=IN(JQ)
+ P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
+ P(IN(JQ)+2,1)=P(IN(JQ)+2,1)-(3-2*JQ)*P(IN(JQ)+2,4)
+ 530 CONTINUE
+ GOTO 380
+ ENDIF
+
+C...Junction strings: save quantities left after each string.
+ IF(IABS(KFL(1)).GT.10) GOTO 320
+ I=I-1
+ KFJH(IU)=KFL(1)
+ DO 540 J=1,4
+ PJU(IU+3,J)=PJU(IU+3,J)-P(I+1,J)
+ 540 CONTINUE
+ 550 CONTINUE
+
+C...Junction strings: put together to new effective string endpoint.
+ NJS(JT)=I-ISTA
+ KFJS(JT)=K(K(MJU(JT+2),3),2)
+ KFLS=2*INT(PYR(0)+3D0*PARJ(4)/(1D0+3D0*PARJ(4)))+1
+ IF(KFJH(1).EQ.KFJH(2)) KFLS=3
+ IF(ISTA.NE.I) KFJS(JT)=ISIGN(1000*MAX(IABS(KFJH(1)),
+ & IABS(KFJH(2)))+100*MIN(IABS(KFJH(1)),IABS(KFJH(2)))+
+ & KFLS,KFJH(1))
+ DO 560 J=1,4
+ PJS(JT,J)=PJU(1,J)+PJU(2,J)+P(MJU(JT),J)
+ PJS(JT+2,J)=PJU(4,J)+PJU(5,J)
+ 560 CONTINUE
+ PJS(JT,5)=SQRT(MAX(0D0,PJS(JT,4)**2-PJS(JT,1)**2-PJS(JT,2)**2-
+ & PJS(JT,3)**2))
+ 570 CONTINUE
+
+C...Open versus closed strings. Choose breakup region for latter.
+ 580 IF(MJU(1).NE.0.AND.MJU(2).NE.0) THEN
+ NS=MJU(2)-MJU(1)
+ NB=MJU(1)-N
+ ELSEIF(MJU(1).NE.0) THEN
+ NS=N+NR-MJU(1)
+ NB=MJU(1)-N
+ ELSEIF(MJU(2).NE.0) THEN
+ NS=MJU(2)-N
+ NB=1
+ ELSEIF(IABS(K(N+1,2)).NE.21) THEN
+ NS=NR-1
+ NB=1
+ ELSE
+ NS=NR+1
+ W2SUM=0D0
+ DO 590 IS=1,NR
+ P(N+NR+IS,1)=0.5D0*FOUR(N+IS,N+IS+1-NR*(IS/NR))
+ W2SUM=W2SUM+P(N+NR+IS,1)
+ 590 CONTINUE
+ W2RAN=PYR(0)*W2SUM
+ NB=0
+ 600 NB=NB+1
+ W2SUM=W2SUM-P(N+NR+NB,1)
+ IF(W2SUM.GT.W2RAN.AND.NB.LT.NR) GOTO 600
+ ENDIF
+
+C...Find longitudinal string directions (i.e. lightlike four-vectors).
+ DO 630 IS=1,NS
+ IS1=N+IS+NB-1-NR*((IS+NB-2)/NR)
+ IS2=N+IS+NB-NR*((IS+NB-1)/NR)
+ DO 610 J=1,5
+ DP(1,J)=P(IS1,J)
+ IF(IABS(K(IS1,2)).EQ.21) DP(1,J)=0.5D0*DP(1,J)
+ IF(IS1.EQ.MJU(1)) DP(1,J)=PJS(1,J)-PJS(3,J)
+ DP(2,J)=P(IS2,J)
+ IF(IABS(K(IS2,2)).EQ.21) DP(2,J)=0.5D0*DP(2,J)
+ IF(IS2.EQ.MJU(2)) DP(2,J)=PJS(2,J)-PJS(4,J)
+ 610 CONTINUE
+ DP(3,5)=DFOUR(1,1)
+ DP(4,5)=DFOUR(2,2)
+ DHKC=DFOUR(1,2)
+ IF(DP(3,5)+2D0*DHKC+DP(4,5).LE.0D0) THEN
+ DP(3,5)=DP(1,5)**2
+ DP(4,5)=DP(2,5)**2
+ DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2+DP(1,5)**2)
+ DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2+DP(2,5)**2)
+ DHKC=DFOUR(1,2)
+ ENDIF
+ DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
+ DHK1=0.5D0*((DP(4,5)+DHKC)/DHKS-1D0)
+ DHK2=0.5D0*((DP(3,5)+DHKC)/DHKS-1D0)
+ IN1=N+NR+4*IS-3
+ P(IN1,5)=SQRT(DP(3,5)+2D0*DHKC+DP(4,5))
+ DO 620 J=1,4
+ P(IN1,J)=(1D0+DHK1)*DP(1,J)-DHK2*DP(2,J)
+ P(IN1+1,J)=(1D0+DHK2)*DP(2,J)-DHK1*DP(1,J)
+ 620 CONTINUE
+ 630 CONTINUE
+
+C...Begin initialization: sum up energy, set starting position.
+ ISAV=I
+ MSTU91=MSTU(90)
+ 640 NTRY=NTRY+1
+ IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
+ PARU12=4D0*PARU12
+ PARU13=2D0*PARU13
+ GOTO 140
+ ELSEIF(NTRY.GT.100) THEN
+ CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ I=ISAV
+ MSTU(90)=MSTU91
+ DO 660 J=1,4
+ P(N+NRS,J)=0D0
+ DO 650 IS=1,NR
+ P(N+NRS,J)=P(N+NRS,J)+P(N+IS,J)
+ 650 CONTINUE
+ 660 CONTINUE
+ DO 680 JT=1,2
+ IRANK(JT)=0
+ IF(MJU(JT).NE.0) IRANK(JT)=NJS(JT)
+ IF(NS.GT.NR) IRANK(JT)=1
+ IE(JT)=K(N+1+(JT/2)*(NP-1),3)
+ IN(3*JT+1)=N+NR+1+4*(JT/2)*(NS-1)
+ IN(3*JT+2)=IN(3*JT+1)+1
+ IN(3*JT+3)=N+NR+4*NS+2*JT-1
+ DO 670 IN1=N+NR+2+JT,N+NR+4*NS-2+JT,4
+ P(IN1,1)=2-JT
+ P(IN1,2)=JT-1
+ P(IN1,3)=1D0
+ 670 CONTINUE
+ 680 CONTINUE
+C.. MOPS variables and switches
+ NRVMO=0
+ XBMO=1D0
+ MSTU(121)=0
+ MSTU(122)=0
+
+C...Initialize flavour and pT variables for open string.
+ IF(NS.LT.NR) THEN
+ PX(1)=0D0
+ PY(1)=0D0
+ IF(NS.EQ.1.AND.MJU(1)+MJU(2).EQ.0) CALL PYPTDI(0,PX(1),PY(1))
+ PX(2)=-PX(1)
+ PY(2)=-PY(1)
+ DO 690 JT=1,2
+ KFL(JT)=K(IE(JT),2)
+ IF(MJU(JT).NE.0) KFL(JT)=KFJS(JT)
+ MSTJ(93)=1
+ PMQ(JT)=PYMASS(KFL(JT))
+ GAM(JT)=0D0
+ 690 CONTINUE
+
+C...Closed string: random initial breakup flavour, pT and vertex.
+ ELSE
+ KFL(3)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
+ IBMO=0
+ 700 CALL PYKFDI(KFL(3),0,KFL(1),KDUMP)
+C.. Closed string: first vertex diq attempt => enforced second
+C.. vertex diq
+ IF(IABS(KFL(1)).GT.10)THEN
+ IBMO=1
+ MSTU(121)=0
+ GOTO 700
+ ENDIF
+ IF(IBMO.EQ.1) MSTU(121)=-1
+ KFL(2)=-KFL(1)
+ CALL PYPTDI(KFL(1),PX(1),PY(1))
+ PX(2)=-PX(1)
+ PY(2)=-PY(1)
+ PR3=MIN(25D0,0.1D0*P(N+NR+1,5)**2)
+ 710 CALL PYZDIS(KFL(1),KFL(2),PR3,Z)
+ ZR=PR3/(Z*P(N+NR+1,5)**2)
+ IF(ZR.GE.1D0) GOTO 710
+ DO 720 JT=1,2
+ MSTJ(93)=1
+ PMQ(JT)=PYMASS(KFL(JT))
+ GAM(JT)=PR3*(1D0-Z)/Z
+ IN1=N+NR+3+4*(JT/2)*(NS-1)
+ P(IN1,JT)=1D0-Z
+ P(IN1,3-JT)=JT-1
+ P(IN1,3)=(2-JT)*(1D0-Z)+(JT-1)*Z
+ P(IN1+1,JT)=ZR
+ P(IN1+1,3-JT)=2-JT
+ P(IN1+1,3)=(2-JT)*(1D0-ZR)+(JT-1)*ZR
+ 720 CONTINUE
+ ENDIF
+C.. MOPS variables
+ DO 730 JT=1,2
+ XTMO(JT)=1D0
+ PM2QMO(JT)=PMQ(JT)**2
+ IF(IABS(KFL(JT)).GT.10) PM2QMO(JT)=0D0
+ 730 CONTINUE
+
+C...Find initial transverse directions (i.e. spacelike four-vectors).
+ DO 770 JT=1,2
+ IF(JT.EQ.1.OR.NS.EQ.NR-1) THEN
+ IN1=IN(3*JT+1)
+ IN3=IN(3*JT+3)
+ DO 740 J=1,4
+ DP(1,J)=P(IN1,J)
+ DP(2,J)=P(IN1+1,J)
+ DP(3,J)=0D0
+ DP(4,J)=0D0
+ 740 CONTINUE
+ DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
+ DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
+ DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
+ DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
+ DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
+ IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
+ IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
+ IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
+ IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
+ DHC12=DFOUR(1,2)
+ DHCX1=DFOUR(3,1)/DHC12
+ DHCX2=DFOUR(3,2)/DHC12
+ DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
+ DHCY1=DFOUR(4,1)/DHC12
+ DHCY2=DFOUR(4,2)/DHC12
+ DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
+ DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
+ DO 750 J=1,4
+ DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
+ P(IN3,J)=DP(3,J)
+ P(IN3+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
+ & DHCYX*DP(3,J))
+ 750 CONTINUE
+ ELSE
+ DO 760 J=1,4
+ P(IN3+2,J)=P(IN3,J)
+ P(IN3+3,J)=P(IN3+1,J)
+ 760 CONTINUE
+ ENDIF
+ 770 CONTINUE
+
+C...Remove energy used up in junction string fragmentation.
+ IF(MJU(1)+MJU(2).GT.0) THEN
+ DO 790 JT=1,2
+ IF(NJS(JT).EQ.0) GOTO 790
+ DO 780 J=1,4
+ P(N+NRS,J)=P(N+NRS,J)-PJS(JT+2,J)
+ 780 CONTINUE
+ 790 CONTINUE
+ ENDIF
+
+C...Produce new particle: side, origin.
+ 800 I=I+1
+ IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+C.. New side priority for popcorn systems
+ IF(MSTU(121).LE.0)THEN
+ JT=1.5D0+PYR(0)
+ IF(IABS(KFL(3-JT)).GT.10) JT=3-JT
+ IF(IABS(KFL(3-JT)).GE.4.AND.IABS(KFL(3-JT)).LE.8) JT=3-JT
+ ENDIF
+ JR=3-JT
+ JS=3-2*JT
+ IRANK(JT)=IRANK(JT)+1
+ K(I,1)=1
+ K(I,3)=IE(JT)
+ K(I,4)=0
+ K(I,5)=0
+
+C...Generate flavour, hadron and pT.
+ 810 CONTINUE
+ CALL PYKFDI(KFL(JT),0,KFL(3),K(I,2))
+ IF(K(I,2).EQ.0) GOTO 640
+ MU90MO=MSTU(90)
+ IF(MSTU(121).EQ.-1) GOTO 840
+ IF(IRANK(JT).EQ.1.AND.IABS(KFL(JT)).LE.10.AND.
+ &IABS(KFL(3)).GT.10) THEN
+ IF(PYR(0).GT.PARJ(19)) GOTO 810
+ ENDIF
+ P(I,5)=PYMASS(K(I,2))
+ CALL PYPTDI(KFL(JT),PX(3),PY(3))
+ PR(JT)=P(I,5)**2+(PX(JT)+PX(3))**2+(PY(JT)+PY(3))**2
+
+C...Final hadrons for small invariant mass.
+ MSTJ(93)=1
+ PMQ(3)=PYMASS(KFL(3))
+ PARJST=PARJ(33)
+ IF(MSTJ(11).EQ.2) PARJST=PARJ(34)
+ WMIN=PARJST+PMQ(1)+PMQ(2)+PARJ(36)*PMQ(3)
+ IF(IABS(KFL(JT)).GT.10.AND.IABS(KFL(3)).GT.10) WMIN=
+ &WMIN-0.5D0*PARJ(36)*PMQ(3)
+ WREM2=FOUR(N+NRS,N+NRS)
+ IF(WREM2.LT.0.10D0) GOTO 640
+ IF(WREM2.LT.MAX(WMIN*(1D0+(2D0*PYR(0)-1D0)*PARJ(37)),
+ &PARJ(32)+PMQ(1)+PMQ(2))**2) GOTO 1010
+
+C...Choose z, which gives Gamma. Shift z for heavy flavours.
+ CALL PYZDIS(KFL(JT),KFL(3),PR(JT),Z)
+ IF(IABS(KFL(JT)).GE.4.AND.IABS(KFL(JT)).LE.8.AND.
+ &MSTU(90).LT.8) THEN
+ MSTU(90)=MSTU(90)+1
+ MSTU(90+MSTU(90))=I
+ PARU(90+MSTU(90))=Z
+ ENDIF
+ KFL1A=IABS(KFL(1))
+ KFL2A=IABS(KFL(2))
+ IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
+ &MOD(KFL2A/1000,10)).GE.4) THEN
+ PR(JR)=(PMQ(JR)+PMQ(3))**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
+ PW12=SQRT(MAX(0D0,(WREM2-PR(1)-PR(2))**2-4D0*PR(1)*PR(2)))
+ Z=(WREM2+PR(JT)-PR(JR)+PW12*(2D0*Z-1D0))/(2D0*WREM2)
+ PR(JR)=(PMQ(JR)+PARJST)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
+ IF((1D0-Z)*(WREM2-PR(JT)/Z).LT.PR(JR)) GOTO 1010
+ ENDIF
+ GAM(3)=(1D0-Z)*(GAM(JT)+PR(JT)/Z)
+
+C.. MOPS baryon model modification
+ XTMO3=(1D0-Z)*XTMO(JT)
+ IF(IABS(KFL(3)).LE.10) NRVMO=0
+ IF(IABS(KFL(3)).GT.10.AND.MSTJ(12).GE.4) THEN
+ GTSTMO=1D0
+ PTSTMO=1D0
+ RTSTMO=PYR(0)
+ IF(IABS(KFL(JT)).LE.10)THEN
+ XBMO=MIN(XTMO3,1D0-(2D-10))
+ GBMO=GAM(3)
+ PMMO=0D0
+ PGMO=GBMO+LOG(1D0-XBMO)*PM2QMO(JT)
+ GTSTMO=1D0-PARF(192)**PGMO
+ ELSE
+ IF(IRANK(JT).EQ.1) THEN
+ GBMO=GAM(JT)
+ PMMO=0D0
+ XBMO=1D0
+ ENDIF
+ IF(XBMO.LT.1D0-(1D-10))THEN
+ PGNMO=GBMO*XTMO3/XBMO+PM2QMO(JT)*LOG(1D0-XTMO3)
+ GTSTMO=(1D0-PARF(192)**PGNMO)/(1D0-PARF(192)**PGMO)
+ PGMO=PGNMO
+ ENDIF
+ IF(MSTJ(12).GE.5)THEN
+ PMNMO=SQRT((XBMO-XTMO3)*(GAM(3)/XTMO3-GBMO/XBMO))
+ PMMO=PMMO+PMAS(PYCOMP(K(I,2)),1)-PMAS(PYCOMP(K(I,2)),3)
+ PTSTMO=EXP((PMMO-PMNMO)*PARF(193))
+ PMMO=PMNMO
+ ENDIF
+ ENDIF
+
+C.. MOPS Accepting popcorn system hadron.
+ IF(PTSTMO*GTSTMO.GT.RTSTMO) THEN
+ IF(IRANK(JT).EQ.1.OR.IABS(KFL(JT)).LE.10) THEN
+ NRVMO=I-N-NR
+ IF(I+NRVMO.GT.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,
+ & '(PYSTRF:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IMO=I
+ KFLMO=KFL(JT)
+ PMQMO=PMQ(JT)
+ PXMO=PX(JT)
+ PYMO=PY(JT)
+ GAMMO=GAM(JT)
+ IRMO=IRANK(JT)
+ XMO=XTMO(JT)
+ DO 830 J=1,9
+ IF(J.LE.5) THEN
+ DO 820 LINE=1,I-N-NR
+ P(MSTU(4)-MSTU(32)-LINE,J)=P(N+NR+LINE,J)
+ K(MSTU(4)-MSTU(32)-LINE,J)=K(N+NR+LINE,J)
+ 820 CONTINUE
+ ENDIF
+ INMO(J)=IN(J)
+ 830 CONTINUE
+ ENDIF
+ ELSE
+C..Reject popcorn system, flag=-1 if enforcing new one
+ MSTU(121)=-1
+ IF(PTSTMO.GT.RTSTMO) MSTU(121)=-2
+ ENDIF
+ ENDIF
+
+
+C..Lift restoring string outside MOPS block
+ 840 IF(MSTU(121).LT.0) THEN
+ IF(MSTU(121).EQ.-2) MSTU(121)=0
+ MSTU(90)=MU90MO
+ NRVMO=0
+ IF(IRANK(JT).EQ.1.OR.IABS(KFL(JT)).LE.10) GOTO 810
+ I=IMO
+ KFL(JT)=KFLMO
+ PMQ(JT)=PMQMO
+ PX(JT)=PXMO
+ PY(JT)=PYMO
+ GAM(JT)=GAMMO
+ IRANK(JT)=IRMO
+ XTMO(JT)=XMO
+ DO 860 J=1,9
+ IF(J.LE.5) THEN
+ DO 850 LINE=1,I-N-NR
+ P(N+NR+LINE,J)=P(MSTU(4)-MSTU(32)-LINE,J)
+ K(N+NR+LINE,J)=K(MSTU(4)-MSTU(32)-LINE,J)
+ 850 CONTINUE
+ ENDIF
+ IN(J)=INMO(J)
+ 860 CONTINUE
+ GOTO 810
+ ENDIF
+ XTMO(JT)=XTMO3
+C.. MOPS end of modification
+
+ DO 870 J=1,3
+ IN(J)=IN(3*JT+J)
+ 870 CONTINUE
+
+C...Stepping within or from 'low' string region easy.
+ IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
+ &P(IN(1),5)**2.GE.PR(JT)) THEN
+ P(IN(JT)+2,4)=Z*P(IN(JT)+2,3)
+ P(IN(JR)+2,4)=PR(JT)/(P(IN(JT)+2,4)*P(IN(1),5)**2)
+ DO 880 J=1,4
+ P(I,J)=(PX(JT)+PX(3))*P(IN(3),J)+(PY(JT)+PY(3))*P(IN(3)+1,J)
+ 880 CONTINUE
+ GOTO 970
+ ELSEIF(IN(1)+1.EQ.IN(2)) THEN
+ P(IN(JR)+2,4)=P(IN(JR)+2,3)
+ P(IN(JR)+2,JT)=1D0
+ IN(JR)=IN(JR)+4*JS
+ IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
+ IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
+ P(IN(JT)+2,4)=P(IN(JT)+2,3)
+ P(IN(JT)+2,JT)=0D0
+ IN(JT)=IN(JT)+4*JS
+ ENDIF
+ ENDIF
+
+C...Find new transverse directions (i.e. spacelike string vectors).
+ 890 IF(JS*IN(1).GT.JS*IN(3*JR+1).OR.JS*IN(2).GT.JS*IN(3*JR+2).OR.
+ &IN(1).GT.IN(2)) GOTO 640
+ IF(IN(1).NE.IN(3*JT+1).OR.IN(2).NE.IN(3*JT+2)) THEN
+ DO 900 J=1,4
+ DP(1,J)=P(IN(1),J)
+ DP(2,J)=P(IN(2),J)
+ DP(3,J)=0D0
+ DP(4,J)=0D0
+ 900 CONTINUE
+ DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
+ DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
+ DHC12=DFOUR(1,2)
+ IF(DHC12.LE.1D-2) THEN
+ P(IN(JT)+2,4)=P(IN(JT)+2,3)
+ P(IN(JT)+2,JT)=0D0
+ IN(JT)=IN(JT)+4*JS
+ GOTO 890
+ ENDIF
+ IN(3)=N+NR+4*NS+5
+ DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
+ DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
+ DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
+ IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
+ IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
+ IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
+ IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
+ DHCX1=DFOUR(3,1)/DHC12
+ DHCX2=DFOUR(3,2)/DHC12
+ DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
+ DHCY1=DFOUR(4,1)/DHC12
+ DHCY2=DFOUR(4,2)/DHC12
+ DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
+ DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
+ DO 910 J=1,4
+ DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
+ P(IN(3),J)=DP(3,J)
+ P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
+ & DHCYX*DP(3,J))
+ 910 CONTINUE
+C...Express pT with respect to new axes, if sensible.
+ PXP=-(PX(3)*FOUR(IN(3*JT+3),IN(3))+PY(3)*
+ & FOUR(IN(3*JT+3)+1,IN(3)))
+ PYP=-(PX(3)*FOUR(IN(3*JT+3),IN(3)+1)+PY(3)*
+ & FOUR(IN(3*JT+3)+1,IN(3)+1))
+ IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01D0) THEN
+ PX(3)=PXP
+ PY(3)=PYP
+ ENDIF
+ ENDIF
+
+C...Sum up known four-momentum. Gives coefficients for m2 expression.
+ DO 940 J=1,4
+ DHG(J)=0D0
+ P(I,J)=PX(JT)*P(IN(3*JT+3),J)+PY(JT)*P(IN(3*JT+3)+1,J)+
+ & PX(3)*P(IN(3),J)+PY(3)*P(IN(3)+1,J)
+ DO 920 IN1=IN(3*JT+1),IN(1)-4*JS,4*JS
+ P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
+ 920 CONTINUE
+ DO 930 IN2=IN(3*JT+2),IN(2)-4*JS,4*JS
+ P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
+ 930 CONTINUE
+ 940 CONTINUE
+ DHM(1)=FOUR(I,I)
+ DHM(2)=2D0*FOUR(I,IN(1))
+ DHM(3)=2D0*FOUR(I,IN(2))
+ DHM(4)=2D0*FOUR(IN(1),IN(2))
+
+C...Find coefficients for Gamma expression.
+ DO 960 IN2=IN(1)+1,IN(2),4
+ DO 950 IN1=IN(1),IN2-1,4
+ DHC=2D0*FOUR(IN1,IN2)
+ DHG(1)=DHG(1)+P(IN1+2,JT)*P(IN2+2,JT)*DHC
+ IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-JS*P(IN2+2,JT)*DHC
+ IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+JS*P(IN1+2,JT)*DHC
+ IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
+ 950 CONTINUE
+ 960 CONTINUE
+
+C...Solve (m2, Gamma) equation system for energies taken.
+ DHS1=DHM(JR+1)*DHG(4)-DHM(4)*DHG(JR+1)
+ IF(ABS(DHS1).LT.1D-4) GOTO 640
+ DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(JT+1)*DHG(JR+1)-DHG(4)*
+ &(P(I,5)**2-DHM(1))+DHG(JT+1)*DHM(JR+1)
+ DHS3=DHM(JT+1)*(GAM(3)-DHG(1))-DHG(JT+1)*(P(I,5)**2-DHM(1))
+ P(IN(JR)+2,4)=0.5D0*(SQRT(MAX(0D0,DHS2**2-4D0*DHS1*DHS3))/
+ &ABS(DHS1)-DHS2/DHS1)
+ IF(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4).LE.0D0) GOTO 640
+ P(IN(JT)+2,4)=(P(I,5)**2-DHM(1)-DHM(JR+1)*P(IN(JR)+2,4))/
+ &(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4))
+
+C...Step to new region if necessary.
+ IF(P(IN(JR)+2,4).GT.P(IN(JR)+2,3)) THEN
+ P(IN(JR)+2,4)=P(IN(JR)+2,3)
+ P(IN(JR)+2,JT)=1D0
+ IN(JR)=IN(JR)+4*JS
+ IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
+ IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
+ P(IN(JT)+2,4)=P(IN(JT)+2,3)
+ P(IN(JT)+2,JT)=0D0
+ IN(JT)=IN(JT)+4*JS
+ ENDIF
+ GOTO 890
+ ELSEIF(P(IN(JT)+2,4).GT.P(IN(JT)+2,3)) THEN
+ P(IN(JT)+2,4)=P(IN(JT)+2,3)
+ P(IN(JT)+2,JT)=0D0
+ IN(JT)=IN(JT)+4*JS
+ GOTO 890
+ ENDIF
+
+C...Four-momentum of particle. Remaining quantities. Loop back.
+ 970 DO 980 J=1,4
+ P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
+ P(N+NRS,J)=P(N+NRS,J)-P(I,J)
+ 980 CONTINUE
+ IF(P(I,4).LT.P(I,5)) GOTO 640
+ KFL(JT)=-KFL(3)
+ PMQ(JT)=PMQ(3)
+ PX(JT)=-PX(3)
+ PY(JT)=-PY(3)
+ GAM(JT)=GAM(3)
+ IF(IN(3).NE.IN(3*JT+3)) THEN
+ DO 990 J=1,4
+ P(IN(3*JT+3),J)=P(IN(3),J)
+ P(IN(3*JT+3)+1,J)=P(IN(3)+1,J)
+ 990 CONTINUE
+ ENDIF
+ DO 1000 JQ=1,2
+ IN(3*JT+JQ)=IN(JQ)
+ P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
+ P(IN(JQ)+2,JT)=P(IN(JQ)+2,JT)-JS*(3-2*JQ)*P(IN(JQ)+2,4)
+ 1000 CONTINUE
+ GOTO 800
+
+C...Final hadron: side, flavour, hadron, mass.
+ 1010 I=I+1
+ K(I,1)=1
+ K(I,3)=IE(JR)
+ K(I,4)=0
+ K(I,5)=0
+ CALL PYKFDI(KFL(JR),-KFL(3),KFLDMP,K(I,2))
+ IF(K(I,2).EQ.0) GOTO 640
+ P(I,5)=PYMASS(K(I,2))
+ PR(JR)=P(I,5)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
+
+C...Final two hadrons: find common setup of four-vectors.
+ JQ=1
+ IF(P(IN(4)+2,3)*P(IN(5)+2,3)*FOUR(IN(4),IN(5)).LT.P(IN(7),3)*
+ &P(IN(8),3)*FOUR(IN(7),IN(8))) JQ=2
+ DHC12=FOUR(IN(3*JQ+1),IN(3*JQ+2))
+ DHR1=FOUR(N+NRS,IN(3*JQ+2))/DHC12
+ DHR2=FOUR(N+NRS,IN(3*JQ+1))/DHC12
+ IF(IN(4).NE.IN(7).OR.IN(5).NE.IN(8)) THEN
+ PX(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3))-PX(JQ)
+ PY(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3)+1)-PY(JQ)
+ PR(3-JQ)=P(I+(JT+JQ-3)**2-1,5)**2+(PX(3-JQ)+(2*JQ-3)*JS*
+ & PX(3))**2+(PY(3-JQ)+(2*JQ-3)*JS*PY(3))**2
+ ENDIF
+
+C...Solve kinematics for final two hadrons, if possible.
+ WREM2=WREM2+(PX(1)+PX(2))**2+(PY(1)+PY(2))**2
+ FD=(SQRT(PR(1))+SQRT(PR(2)))/SQRT(WREM2)
+ IF(MJU(1)+MJU(2).NE.0.AND.I.EQ.ISAV+2.AND.FD.GE.1D0) GOTO 200
+ IF(FD.GE.1D0) GOTO 640
+ FA=WREM2+PR(JT)-PR(JR)
+ IF(MSTJ(11).NE.2) PREV=0.5D0*EXP(MAX(-50D0,LOG(FD)*PARJ(38)*
+ &(PR(1)+PR(2))**2))
+ IF(MSTJ(11).EQ.2) PREV=0.5D0*FD**PARJ(39)
+ FB=SIGN(SQRT(MAX(0D0,FA**2-4D0*WREM2*PR(JT))),JS*(PYR(0)-PREV))
+ KFL1A=IABS(KFL(1))
+ KFL2A=IABS(KFL(2))
+ IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
+ &MOD(KFL2A/1000,10)).GE.6) FB=SIGN(SQRT(MAX(0D0,FA**2-
+ &4D0*WREM2*PR(JT))),DBLE(JS))
+ DO 1020 J=1,4
+ P(I-1,J)=(PX(JT)+PX(3))*P(IN(3*JQ+3),J)+(PY(JT)+PY(3))*
+ & P(IN(3*JQ+3)+1,J)+0.5D0*(DHR1*(FA+FB)*P(IN(3*JQ+1),J)+
+ & DHR2*(FA-FB)*P(IN(3*JQ+2),J))/WREM2
+ P(I,J)=P(N+NRS,J)-P(I-1,J)
+ 1020 CONTINUE
+ IF(P(I-1,4).LT.P(I-1,5).OR.P(I,4).LT.P(I,5)) GOTO 640
+
+C...Mark jets as fragmented and give daughter pointers.
+ N=I-NRS+1
+ DO 1030 I=NSAV+1,NSAV+NP
+ IM=K(I,3)
+ K(IM,1)=K(IM,1)+10
+ IF(MSTU(16).NE.2) THEN
+ K(IM,4)=NSAV+1
+ K(IM,5)=NSAV+1
+ ELSE
+ K(IM,4)=NSAV+2
+ K(IM,5)=N
+ ENDIF
+ 1030 CONTINUE
+
+C...Document string system. Move up particles.
+ NSAV=NSAV+1
+ K(NSAV,1)=11
+ K(NSAV,2)=92
+ K(NSAV,3)=IP
+ K(NSAV,4)=NSAV+1
+ K(NSAV,5)=N
+ DO 1040 J=1,4
+ P(NSAV,J)=DPS(J)
+ V(NSAV,J)=V(IP,J)
+ 1040 CONTINUE
+ P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
+ V(NSAV,5)=0D0
+ DO 1060 I=NSAV+1,N
+ DO 1050 J=1,5
+ K(I,J)=K(I+NRS-1,J)
+ P(I,J)=P(I+NRS-1,J)
+ V(I,J)=0D0
+ 1050 CONTINUE
+ 1060 CONTINUE
+ MSTU91=MSTU(90)
+ DO 1070 IZ=MSTU90+1,MSTU91
+ MSTU9T(IZ)=MSTU(90+IZ)-NRS+1-NSAV+N
+ PARU9T(IZ)=PARU(90+IZ)
+ 1070 CONTINUE
+ MSTU(90)=MSTU90
+
+C...Order particles in rank along the chain. Update mother pointer.
+ DO 1090 I=NSAV+1,N
+ DO 1080 J=1,5
+ K(I-NSAV+N,J)=K(I,J)
+ P(I-NSAV+N,J)=P(I,J)
+ 1080 CONTINUE
+ 1090 CONTINUE
+ I1=NSAV
+ DO 1120 I=N+1,2*N-NSAV
+ IF(K(I,3).NE.IE(1)) GOTO 1120
+ I1=I1+1
+ DO 1100 J=1,5
+ K(I1,J)=K(I,J)
+ P(I1,J)=P(I,J)
+ 1100 CONTINUE
+ IF(MSTU(16).NE.2) K(I1,3)=NSAV
+ DO 1110 IZ=MSTU90+1,MSTU91
+ IF(MSTU9T(IZ).EQ.I) THEN
+ MSTU(90)=MSTU(90)+1
+ MSTU(90+MSTU(90))=I1
+ PARU(90+MSTU(90))=PARU9T(IZ)
+ ENDIF
+ 1110 CONTINUE
+ 1120 CONTINUE
+ DO 1150 I=2*N-NSAV,N+1,-1
+ IF(K(I,3).EQ.IE(1)) GOTO 1150
+ I1=I1+1
+ DO 1130 J=1,5
+ K(I1,J)=K(I,J)
+ P(I1,J)=P(I,J)
+ 1130 CONTINUE
+ IF(MSTU(16).NE.2) K(I1,3)=NSAV
+ DO 1140 IZ=MSTU90+1,MSTU91
+ IF(MSTU9T(IZ).EQ.I) THEN
+ MSTU(90)=MSTU(90)+1
+ MSTU(90+MSTU(90))=I1
+ PARU(90+MSTU(90))=PARU9T(IZ)
+ ENDIF
+ 1140 CONTINUE
+ 1150 CONTINUE
+
+C...Boost back particle system. Set production vertices.
+ IF(MBST.EQ.0) THEN
+ MSTU(33)=1
+ CALL PYROBO(NSAV+1,N,0D0,0D0,DPS(1)/DPS(4),DPS(2)/DPS(4),
+ & DPS(3)/DPS(4))
+ ELSE
+ DO 1160 I=NSAV+1,N
+ HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
+ IF(P(I,3).GT.0D0) THEN
+ HHPEZ=(P(I,4)+P(I,3))*HHBZ
+ P(I,3)=0.5D0*(HHPEZ-HHPMT/HHPEZ)
+ P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
+ ELSE
+ HHPEZ=(P(I,4)-P(I,3))/HHBZ
+ P(I,3)=-0.5D0*(HHPEZ-HHPMT/HHPEZ)
+ P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
+ ENDIF
+ 1160 CONTINUE
+ ENDIF
+ DO 1180 I=NSAV+1,N
+ DO 1170 J=1,4
+ V(I,J)=V(IP,J)
+ 1170 CONTINUE
+ 1180 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYINDF
+C...Handles the fragmentation of a jet system (or a single
+C...jet) according to independent fragmentation models.
+
+ SUBROUTINE PYINDF(IP)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION DPS(5),PSI(4),NFI(3),NFL(3),IFET(3),KFLF(3),
+ &KFLO(2),PXO(2),PYO(2),WO(2)
+
+C.. MOPS error message
+ IF(MSTJ(12).GT.3) CALL PYERRM(9,'(PYINDF:) MSTJ(12)>3 options'//
+ &' are not treated as expected in independent fragmentation')
+
+C...Reset counters. Identify parton system and take copy. Check flavour.
+ NSAV=N
+ MSTU90=MSTU(90)
+ NJET=0
+ KQSUM=0
+ DO 100 J=1,5
+ DPS(J)=0D0
+ 100 CONTINUE
+ I=IP-1
+ 110 I=I+1
+ IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
+ CALL PYERRM(12,'(PYINDF:) failed to reconstruct jet system')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 110
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 110
+ KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
+ IF(KQ.EQ.0) GOTO 110
+ NJET=NJET+1
+ IF(KQ.NE.2) KQSUM=KQSUM+KQ
+ DO 120 J=1,5
+ K(NSAV+NJET,J)=K(I,J)
+ P(NSAV+NJET,J)=P(I,J)
+ DPS(J)=DPS(J)+P(I,J)
+ 120 CONTINUE
+ K(NSAV+NJET,3)=I
+ IF(K(I,1).EQ.2.OR.(MSTJ(3).LE.5.AND.N.GT.I.AND.
+ &K(I+1,1).EQ.2)) GOTO 110
+ IF(NJET.NE.1.AND.KQSUM.NE.0) THEN
+ CALL PYERRM(12,'(PYINDF:) unphysical flavour combination')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Boost copied system to CM frame. Find CM energy and sum flavours.
+ IF(NJET.NE.1) THEN
+ MSTU(33)=1
+ CALL PYROBO(NSAV+1,NSAV+NJET,0D0,0D0,-DPS(1)/DPS(4),
+ & -DPS(2)/DPS(4),-DPS(3)/DPS(4))
+ ENDIF
+ PECM=0D0
+ DO 130 J=1,3
+ NFI(J)=0
+ 130 CONTINUE
+ DO 140 I=NSAV+1,NSAV+NJET
+ PECM=PECM+P(I,4)
+ KFA=IABS(K(I,2))
+ IF(KFA.LE.3) THEN
+ NFI(KFA)=NFI(KFA)+ISIGN(1,K(I,2))
+ ELSEIF(KFA.GT.1000) THEN
+ KFLA=MOD(KFA/1000,10)
+ KFLB=MOD(KFA/100,10)
+ IF(KFLA.LE.3) NFI(KFLA)=NFI(KFLA)+ISIGN(1,K(I,2))
+ IF(KFLB.LE.3) NFI(KFLB)=NFI(KFLB)+ISIGN(1,K(I,2))
+ ENDIF
+ 140 CONTINUE
+
+C...Loop over attempts made. Reset counters.
+ NTRY=0
+ 150 NTRY=NTRY+1
+ IF(NTRY.GT.200) THEN
+ CALL PYERRM(14,'(PYINDF:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ N=NSAV+NJET
+ MSTU(90)=MSTU90
+ DO 160 J=1,3
+ NFL(J)=NFI(J)
+ IFET(J)=0
+ KFLF(J)=0
+ 160 CONTINUE
+
+C...Loop over jets to be fragmented.
+ DO 230 IP1=NSAV+1,NSAV+NJET
+ MSTJ(91)=0
+ NSAV1=N
+ MSTU91=MSTU(90)
+
+C...Initial flavour and momentum values. Jet along +z axis.
+ KFLH=IABS(K(IP1,2))
+ IF(KFLH.GT.10) KFLH=MOD(KFLH/1000,10)
+ KFLO(2)=0
+ WF=P(IP1,4)+SQRT(P(IP1,1)**2+P(IP1,2)**2+P(IP1,3)**2)
+
+C...Initial values for quark or diquark jet.
+ 170 IF(IABS(K(IP1,2)).NE.21) THEN
+ NSTR=1
+ KFLO(1)=K(IP1,2)
+ CALL PYPTDI(0,PXO(1),PYO(1))
+ WO(1)=WF
+
+C...Initial values for gluon treated like random quark jet.
+ ELSEIF(MSTJ(2).LE.2) THEN
+ NSTR=1
+ IF(MSTJ(2).EQ.2) MSTJ(91)=1
+ KFLO(1)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
+ CALL PYPTDI(0,PXO(1),PYO(1))
+ WO(1)=WF
+
+C...Initial values for gluon treated like quark-antiquark jet pair,
+C...sharing energy according to Altarelli-Parisi splitting function.
+ ELSE
+ NSTR=2
+ IF(MSTJ(2).EQ.4) MSTJ(91)=1
+ KFLO(1)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
+ KFLO(2)=-KFLO(1)
+ CALL PYPTDI(0,PXO(1),PYO(1))
+ PXO(2)=-PXO(1)
+ PYO(2)=-PYO(1)
+ WO(1)=WF*PYR(0)**(1D0/3D0)
+ WO(2)=WF-WO(1)
+ ENDIF
+
+C...Initial values for rank, flavour, pT and W+.
+ DO 220 ISTR=1,NSTR
+ 180 I=N
+ MSTU(90)=MSTU91
+ IRANK=0
+ KFL1=KFLO(ISTR)
+ PX1=PXO(ISTR)
+ PY1=PYO(ISTR)
+ W=WO(ISTR)
+
+C...New hadron. Generate flavour and hadron species.
+ 190 I=I+1
+ IF(I.GE.MSTU(4)-MSTU(32)-NJET-5) THEN
+ CALL PYERRM(11,'(PYINDF:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IRANK=IRANK+1
+ K(I,1)=1
+ K(I,3)=IP1
+ K(I,4)=0
+ K(I,5)=0
+ 200 CALL PYKFDI(KFL1,0,KFL2,K(I,2))
+ IF(K(I,2).EQ.0) GOTO 180
+ IF(IRANK.EQ.1.AND.IABS(KFL1).LE.10.AND.IABS(KFL2).GT.10) THEN
+ IF(PYR(0).GT.PARJ(19)) GOTO 200
+ ENDIF
+
+C...Find hadron mass. Generate four-momentum.
+ P(I,5)=PYMASS(K(I,2))
+ CALL PYPTDI(KFL1,PX2,PY2)
+ P(I,1)=PX1+PX2
+ P(I,2)=PY1+PY2
+ PR=P(I,5)**2+P(I,1)**2+P(I,2)**2
+ CALL PYZDIS(KFL1,KFL2,PR,Z)
+ MZSAV=0
+ IF(IABS(KFL1).GE.4.AND.IABS(KFL1).LE.8.AND.MSTU(90).LT.8) THEN
+ MZSAV=1
+ MSTU(90)=MSTU(90)+1
+ MSTU(90+MSTU(90))=I
+ PARU(90+MSTU(90))=Z
+ ENDIF
+ P(I,3)=0.5D0*(Z*W-PR/MAX(1D-4,Z*W))
+ P(I,4)=0.5D0*(Z*W+PR/MAX(1D-4,Z*W))
+ IF(MSTJ(3).GE.1.AND.IRANK.EQ.1.AND.KFLH.GE.4.AND.
+ & P(I,3).LE.0.001D0) THEN
+ IF(W.GE.P(I,5)+0.5D0*PARJ(32)) GOTO 180
+ P(I,3)=0.0001D0
+ P(I,4)=SQRT(PR)
+ Z=P(I,4)/W
+ ENDIF
+
+C...Remaining flavour and momentum.
+ KFL1=-KFL2
+ PX1=-PX2
+ PY1=-PY2
+ W=(1D0-Z)*W
+ DO 210 J=1,5
+ V(I,J)=0D0
+ 210 CONTINUE
+
+C...Check if pL acceptable. Go back for new hadron if enough energy.
+ IF(MSTJ(3).GE.0.AND.P(I,3).LT.0D0) THEN
+ I=I-1
+ IF(MZSAV.EQ.1) MSTU(90)=MSTU(90)-1
+ ENDIF
+ IF(W.GT.PARJ(31)) GOTO 190
+ N=I
+ 220 CONTINUE
+ IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) WF=WF+0.1D0*PARJ(32)
+ IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) GOTO 170
+
+C...Rotate jet to new direction.
+ THE=PYANGL(P(IP1,3),SQRT(P(IP1,1)**2+P(IP1,2)**2))
+ PHI=PYANGL(P(IP1,1),P(IP1,2))
+ MSTU(33)=1
+ CALL PYROBO(NSAV1+1,N,THE,PHI,0D0,0D0,0D0)
+ K(K(IP1,3),4)=NSAV1+1
+ K(K(IP1,3),5)=N
+
+C...End of jet generation loop. Skip conservation in some cases.
+ 230 CONTINUE
+ IF(NJET.EQ.1.OR.MSTJ(3).LE.0) GOTO 490
+ IF(MOD(MSTJ(3),5).NE.0.AND.N-NSAV-NJET.LT.2) GOTO 150
+
+C...Subtract off produced hadron flavours, finished if zero.
+ DO 240 I=NSAV+NJET+1,N
+ KFA=IABS(K(I,2))
+ KFLA=MOD(KFA/1000,10)
+ KFLB=MOD(KFA/100,10)
+ KFLC=MOD(KFA/10,10)
+ IF(KFLA.EQ.0) THEN
+ IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))*(-1)**KFLB
+ IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(I,2))*(-1)**KFLB
+ ELSE
+ IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)-ISIGN(1,K(I,2))
+ IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))
+ IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISIGN(1,K(I,2))
+ ENDIF
+ 240 CONTINUE
+ NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
+ &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
+ IF(NREQ.EQ.0) GOTO 320
+
+C...Take away flavour of low-momentum particles until enough freedom.
+ NREM=0
+ 250 IREM=0
+ P2MIN=PECM**2
+ DO 260 I=NSAV+NJET+1,N
+ P2=P(I,1)**2+P(I,2)**2+P(I,3)**2
+ IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) IREM=I
+ IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) P2MIN=P2
+ 260 CONTINUE
+ IF(IREM.EQ.0) GOTO 150
+ K(IREM,1)=7
+ KFA=IABS(K(IREM,2))
+ KFLA=MOD(KFA/1000,10)
+ KFLB=MOD(KFA/100,10)
+ KFLC=MOD(KFA/10,10)
+ IF(KFLA.GE.4.OR.KFLB.GE.4) K(IREM,1)=8
+ IF(K(IREM,1).EQ.8) GOTO 250
+ IF(KFLA.EQ.0) THEN
+ ISGN=ISIGN(1,K(IREM,2))*(-1)**KFLB
+ IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISGN
+ IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISGN
+ ELSE
+ IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)+ISIGN(1,K(IREM,2))
+ IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISIGN(1,K(IREM,2))
+ IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(IREM,2))
+ ENDIF
+ NREM=NREM+1
+ NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
+ &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
+ IF(NREQ.GT.NREM) GOTO 250
+ DO 270 I=NSAV+NJET+1,N
+ IF(K(I,1).EQ.8) K(I,1)=1
+ 270 CONTINUE
+
+C...Find combination of existing and new flavours for hadron.
+ 280 NFET=2
+ IF(NFL(1)+NFL(2)+NFL(3).NE.0) NFET=3
+ IF(NREQ.LT.NREM) NFET=1
+ IF(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)).EQ.0) NFET=0
+ DO 290 J=1,NFET
+ IFET(J)=1+(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)))*PYR(0)
+ KFLF(J)=ISIGN(1,NFL(1))
+ IF(IFET(J).GT.IABS(NFL(1))) KFLF(J)=ISIGN(2,NFL(2))
+ IF(IFET(J).GT.IABS(NFL(1))+IABS(NFL(2))) KFLF(J)=ISIGN(3,NFL(3))
+ 290 CONTINUE
+ IF(NFET.EQ.2.AND.(IFET(1).EQ.IFET(2).OR.KFLF(1)*KFLF(2).GT.0))
+ &GOTO 280
+ IF(NFET.EQ.3.AND.(IFET(1).EQ.IFET(2).OR.IFET(1).EQ.IFET(3).OR.
+ &IFET(2).EQ.IFET(3).OR.KFLF(1)*KFLF(2).LT.0.OR.KFLF(1)*KFLF(3)
+ &.LT.0.OR.KFLF(1)*(NFL(1)+NFL(2)+NFL(3)).LT.0)) GOTO 280
+ IF(NFET.EQ.0) KFLF(1)=1+INT((2D0+PARJ(2))*PYR(0))
+ IF(NFET.EQ.0) KFLF(2)=-KFLF(1)
+ IF(NFET.EQ.1) KFLF(2)=ISIGN(1+INT((2D0+PARJ(2))*PYR(0)),-KFLF(1))
+ IF(NFET.LE.2) KFLF(3)=0
+ IF(KFLF(3).NE.0) THEN
+ KFLFC=ISIGN(1000*MAX(IABS(KFLF(1)),IABS(KFLF(3)))+
+ & 100*MIN(IABS(KFLF(1)),IABS(KFLF(3)))+1,KFLF(1))
+ IF(KFLF(1).EQ.KFLF(3).OR.(1D0+3D0*PARJ(4))*PYR(0).GT.1D0)
+ & KFLFC=KFLFC+ISIGN(2,KFLFC)
+ ELSE
+ KFLFC=KFLF(1)
+ ENDIF
+ CALL PYKFDI(KFLFC,KFLF(2),KFLDMP,KF)
+ IF(KF.EQ.0) GOTO 280
+ DO 300 J=1,MAX(2,NFET)
+ NFL(IABS(KFLF(J)))=NFL(IABS(KFLF(J)))-ISIGN(1,KFLF(J))
+ 300 CONTINUE
+
+C...Store hadron at random among free positions.
+ NPOS=MIN(1+INT(PYR(0)*NREM),NREM)
+ DO 310 I=NSAV+NJET+1,N
+ IF(K(I,1).EQ.7) NPOS=NPOS-1
+ IF(K(I,1).EQ.1.OR.NPOS.NE.0) GOTO 310
+ K(I,1)=1
+ K(I,2)=KF
+ P(I,5)=PYMASS(K(I,2))
+ P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ 310 CONTINUE
+ NREM=NREM-1
+ NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
+ &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
+ IF(NREM.GT.0) GOTO 280
+
+C...Compensate for missing momentum in global scheme (3 options).
+ 320 IF(MOD(MSTJ(3),5).NE.0.AND.MOD(MSTJ(3),5).NE.4) THEN
+ DO 340 J=1,3
+ PSI(J)=0D0
+ DO 330 I=NSAV+NJET+1,N
+ PSI(J)=PSI(J)+P(I,J)
+ 330 CONTINUE
+ 340 CONTINUE
+ PSI(4)=PSI(1)**2+PSI(2)**2+PSI(3)**2
+ PWS=0D0
+ DO 350 I=NSAV+NJET+1,N
+ IF(MOD(MSTJ(3),5).EQ.1) PWS=PWS+P(I,4)
+ IF(MOD(MSTJ(3),5).EQ.2) PWS=PWS+SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
+ & PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
+ IF(MOD(MSTJ(3),5).EQ.3) PWS=PWS+1D0
+ 350 CONTINUE
+ DO 370 I=NSAV+NJET+1,N
+ IF(MOD(MSTJ(3),5).EQ.1) PW=P(I,4)
+ IF(MOD(MSTJ(3),5).EQ.2) PW=SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
+ & PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
+ IF(MOD(MSTJ(3),5).EQ.3) PW=1D0
+ DO 360 J=1,3
+ P(I,J)=P(I,J)-PSI(J)*PW/PWS
+ 360 CONTINUE
+ P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ 370 CONTINUE
+
+C...Compensate for missing momentum withing each jet separately.
+ ELSEIF(MOD(MSTJ(3),5).EQ.4) THEN
+ DO 390 I=N+1,N+NJET
+ K(I,1)=0
+ DO 380 J=1,5
+ P(I,J)=0D0
+ 380 CONTINUE
+ 390 CONTINUE
+ DO 410 I=NSAV+NJET+1,N
+ IR1=K(I,3)
+ IR2=N+IR1-NSAV
+ K(IR2,1)=K(IR2,1)+1
+ PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
+ & (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
+ DO 400 J=1,3
+ P(IR2,J)=P(IR2,J)+P(I,J)-PLS*P(IR1,J)
+ 400 CONTINUE
+ P(IR2,4)=P(IR2,4)+P(I,4)
+ P(IR2,5)=P(IR2,5)+PLS
+ 410 CONTINUE
+ PSS=0D0
+ DO 420 I=N+1,N+NJET
+ IF(K(I,1).NE.0) PSS=PSS+P(I,4)/(PECM*(0.8D0*P(I,5)+0.2D0))
+ 420 CONTINUE
+ DO 440 I=NSAV+NJET+1,N
+ IR1=K(I,3)
+ IR2=N+IR1-NSAV
+ PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
+ & (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
+ DO 430 J=1,3
+ P(I,J)=P(I,J)-P(IR2,J)/K(IR2,1)+(1D0/(P(IR2,5)*PSS)-1D0)*
+ & PLS*P(IR1,J)
+ 430 CONTINUE
+ P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ 440 CONTINUE
+ ENDIF
+
+C...Scale momenta for energy conservation.
+ IF(MOD(MSTJ(3),5).NE.0) THEN
+ PMS=0D0
+ PES=0D0
+ PQS=0D0
+ DO 450 I=NSAV+NJET+1,N
+ PMS=PMS+P(I,5)
+ PES=PES+P(I,4)
+ PQS=PQS+P(I,5)**2/P(I,4)
+ 450 CONTINUE
+ IF(PMS.GE.PECM) GOTO 150
+ NECO=0
+ 460 NECO=NECO+1
+ PFAC=(PECM-PQS)/(PES-PQS)
+ PES=0D0
+ PQS=0D0
+ DO 480 I=NSAV+NJET+1,N
+ DO 470 J=1,3
+ P(I,J)=PFAC*P(I,J)
+ 470 CONTINUE
+ P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
+ PES=PES+P(I,4)
+ PQS=PQS+P(I,5)**2/P(I,4)
+ 480 CONTINUE
+ IF(NECO.LT.10.AND.ABS(PECM-PES).GT.2D-6*PECM) GOTO 460
+ ENDIF
+
+C...Origin of produced particles and parton daughter pointers.
+ 490 DO 500 I=NSAV+NJET+1,N
+ IF(MSTU(16).NE.2) K(I,3)=NSAV+1
+ IF(MSTU(16).EQ.2) K(I,3)=K(K(I,3),3)
+ 500 CONTINUE
+ DO 510 I=NSAV+1,NSAV+NJET
+ I1=K(I,3)
+ K(I1,1)=K(I1,1)+10
+ IF(MSTU(16).NE.2) THEN
+ K(I1,4)=NSAV+1
+ K(I1,5)=NSAV+1
+ ELSE
+ K(I1,4)=K(I1,4)-NJET+1
+ K(I1,5)=K(I1,5)-NJET+1
+ IF(K(I1,5).LT.K(I1,4)) THEN
+ K(I1,4)=0
+ K(I1,5)=0
+ ENDIF
+ ENDIF
+ 510 CONTINUE
+
+C...Document independent fragmentation system. Remove copy of jets.
+ NSAV=NSAV+1
+ K(NSAV,1)=11
+ K(NSAV,2)=93
+ K(NSAV,3)=IP
+ K(NSAV,4)=NSAV+1
+ K(NSAV,5)=N-NJET+1
+ DO 520 J=1,4
+ P(NSAV,J)=DPS(J)
+ V(NSAV,J)=V(IP,J)
+ 520 CONTINUE
+ P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
+ V(NSAV,5)=0D0
+ DO 540 I=NSAV+NJET,N
+ DO 530 J=1,5
+ K(I-NJET+1,J)=K(I,J)
+ P(I-NJET+1,J)=P(I,J)
+ V(I-NJET+1,J)=V(I,J)
+ 530 CONTINUE
+ 540 CONTINUE
+ N=N-NJET+1
+ DO 550 IZ=MSTU90+1,MSTU(90)
+ MSTU(90+IZ)=MSTU(90+IZ)-NJET+1
+ 550 CONTINUE
+
+C...Boost back particle system. Set production vertices.
+ IF(NJET.NE.1) CALL PYROBO(NSAV+1,N,0D0,0D0,DPS(1)/DPS(4),
+ &DPS(2)/DPS(4),DPS(3)/DPS(4))
+ DO 570 I=NSAV+1,N
+ DO 560 J=1,4
+ V(I,J)=V(IP,J)
+ 560 CONTINUE
+ 570 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYDECY
+C...Handles the decay of unstable particles.
+
+ SUBROUTINE PYDECY(IP)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
+C...Local arrays.
+ DIMENSION VDCY(4),KFLO(4),KFL1(4),PV(10,5),RORD(10),UE(3),BE(3),
+ &WTCOR(10),PTAU(4),PCMTAU(4),DBETAU(3)
+ CHARACTER CIDC*4
+ DATA WTCOR/2D0,5D0,15D0,60D0,250D0,1500D0,1.2D4,1.2D5,150D0,16D0/
+
+C...Functions: momentum in two-particle decays and four-product.
+ PAWT(A,B,C)=SQRT((A**2-(B+C)**2)*(A**2-(B-C)**2))/(2D0*A)
+ FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
+
+C...Initial values.
+ NTRY=0
+ NSAV=N
+ KFA=IABS(K(IP,2))
+ KFS=ISIGN(1,K(IP,2))
+ KC=PYCOMP(KFA)
+ MSTJ(92)=0
+
+C...Choose lifetime and determine decay vertex.
+ IF(K(IP,1).EQ.5) THEN
+ V(IP,5)=0D0
+ ELSEIF(K(IP,1).NE.4) THEN
+ V(IP,5)=-PMAS(KC,4)*LOG(PYR(0))
+ ENDIF
+ DO 100 J=1,4
+ VDCY(J)=V(IP,J)+V(IP,5)*P(IP,J)/P(IP,5)
+ 100 CONTINUE
+
+C...Determine whether decay allowed or not.
+ MOUT=0
+ IF(MSTJ(22).EQ.2) THEN
+ IF(PMAS(KC,4).GT.PARJ(71)) MOUT=1
+ ELSEIF(MSTJ(22).EQ.3) THEN
+ IF(VDCY(1)**2+VDCY(2)**2+VDCY(3)**2.GT.PARJ(72)**2) MOUT=1
+ ELSEIF(MSTJ(22).EQ.4) THEN
+ IF(VDCY(1)**2+VDCY(2)**2.GT.PARJ(73)**2) MOUT=1
+ IF(ABS(VDCY(3)).GT.PARJ(74)) MOUT=1
+ ENDIF
+ IF(MOUT.EQ.1.AND.K(IP,1).NE.5) THEN
+ K(IP,1)=4
+ RETURN
+ ENDIF
+
+C...Interface to external tau decay library (for tau polarization).
+ IF(KFA.EQ.15.AND.MSTJ(28).GE.1) THEN
+
+C...Starting values for pointers and momenta.
+ ITAU=IP
+ DO 110 J=1,4
+ PTAU(J)=P(ITAU,J)
+ PCMTAU(J)=P(ITAU,J)
+ 110 CONTINUE
+
+C...Iterate to find position and code of mother of tau.
+ IMTAU=ITAU
+ 120 IMTAU=K(IMTAU,3)
+
+ IF(IMTAU.EQ.0) THEN
+C...If no known origin then impossible to do anything further.
+ KFORIG=0
+ IORIG=0
+
+ ELSEIF(K(IMTAU,2).EQ.K(ITAU,2)) THEN
+C...If tau -> tau + gamma then add gamma energy and loop.
+ IF(K(K(IMTAU,4),2).EQ.22) THEN
+ DO 130 J=1,4
+ PCMTAU(J)=PCMTAU(J)+P(K(IMTAU,4),J)
+ 130 CONTINUE
+ ELSEIF(K(K(IMTAU,5),2).EQ.22) THEN
+ DO 140 J=1,4
+ PCMTAU(J)=PCMTAU(J)+P(K(IMTAU,5),J)
+ 140 CONTINUE
+ ENDIF
+ GOTO 120
+
+ ELSEIF(IABS(K(IMTAU,2)).GT.100) THEN
+C...If coming from weak decay of hadron then W is not stored in record,
+C...but can be reconstructed by adding neutrino momentum.
+ KFORIG=-ISIGN(24,K(ITAU,2))
+ IORIG=0
+ DO 160 II=K(IMTAU,4),K(IMTAU,5)
+ IF(K(II,2)*ISIGN(1,K(ITAU,2)).EQ.-16) THEN
+ DO 150 J=1,4
+ PCMTAU(J)=PCMTAU(J)+P(II,J)
+ 150 CONTINUE
+ ENDIF
+ 160 CONTINUE
+
+ ELSE
+C...If coming from resonance decay then find latest copy of this
+C...resonance (may not completely agree).
+ KFORIG=K(IMTAU,2)
+ IORIG=IMTAU
+ DO 170 II=IMTAU+1,IP-1
+ IF(K(II,2).EQ.KFORIG.AND.K(II,3).EQ.IORIG.AND.
+ & ABS(P(II,5)-P(IORIG,5)).LT.1D-5*P(IORIG,5)) IORIG=II
+ 170 CONTINUE
+ DO 180 J=1,4
+ PCMTAU(J)=P(IORIG,J)
+ 180 CONTINUE
+ ENDIF
+
+C...Boost tau to rest frame of production process (where known)
+C...and rotate it to sit along +z axis.
+ DO 190 J=1,3
+ DBETAU(J)=PCMTAU(J)/PCMTAU(4)
+ 190 CONTINUE
+ IF(KFORIG.NE.0) CALL PYROBO(ITAU,ITAU,0D0,0D0,-DBETAU(1),
+ & -DBETAU(2),-DBETAU(3))
+ PHITAU=PYANGL(P(ITAU,1),P(ITAU,2))
+ CALL PYROBO(ITAU,ITAU,0D0,-PHITAU,0D0,0D0,0D0)
+ THETAU=PYANGL(P(ITAU,3),P(ITAU,1))
+ CALL PYROBO(ITAU,ITAU,-THETAU,0D0,0D0,0D0,0D0)
+
+C...Call tau decay routine (if meaningful) and fill extra info.
+ IF(KFORIG.NE.0.OR.MSTJ(28).EQ.2) THEN
+ CALL PYTAUD(ITAU,IORIG,KFORIG,NDECAY)
+ DO 200 II=NSAV+1,NSAV+NDECAY
+ K(II,1)=1
+ K(II,3)=IP
+ K(II,4)=0
+ K(II,5)=0
+ 200 CONTINUE
+ N=NSAV+NDECAY
+ ENDIF
+
+C...Boost back decay tau and decay products.
+ DO 210 J=1,4
+ P(ITAU,J)=PTAU(J)
+ 210 CONTINUE
+ IF(KFORIG.NE.0.OR.MSTJ(28).EQ.2) THEN
+ CALL PYROBO(NSAV+1,N,THETAU,PHITAU,0D0,0D0,0D0)
+ IF(KFORIG.NE.0) CALL PYROBO(NSAV+1,N,0D0,0D0,DBETAU(1),
+ & DBETAU(2),DBETAU(3))
+
+C...Skip past ordinary tau decay treatment.
+ MMAT=0
+ MBST=0
+ ND=0
+ GOTO 630
+ ENDIF
+ ENDIF
+
+C...B-Bbar mixing: flip sign of meson appropriately.
+ MMIX=0
+ IF((KFA.EQ.511.OR.KFA.EQ.531).AND.MSTJ(26).GE.1) THEN
+ XBBMIX=PARJ(76)
+ IF(KFA.EQ.531) XBBMIX=PARJ(77)
+ IF(SIN(0.5D0*XBBMIX*V(IP,5)/PMAS(KC,4))**2.GT.PYR(0)) MMIX=1
+ IF(MMIX.EQ.1) KFS=-KFS
+ ENDIF
+
+C...Check existence of decay channels. Particle/antiparticle rules.
+ KCA=KC
+ IF(MDCY(KC,2).GT.0) THEN
+ MDMDCY=MDME(MDCY(KC,2),2)
+ IF(MDMDCY.GT.80.AND.MDMDCY.LE.90) KCA=MDMDCY
+ ENDIF
+ IF(MDCY(KCA,2).LE.0.OR.MDCY(KCA,3).LE.0) THEN
+ CALL PYERRM(9,'(PYDECY:) no decay channel defined')
+ RETURN
+ ENDIF
+ IF(MOD(KFA/1000,10).EQ.0.AND.KCA.EQ.85) KFS=-KFS
+ IF(KCHG(KC,3).EQ.0) THEN
+ KFSP=1
+ KFSN=0
+ IF(PYR(0).GT.0.5D0) KFS=-KFS
+ ELSEIF(KFS.GT.0) THEN
+ KFSP=1
+ KFSN=0
+ ELSE
+ KFSP=0
+ KFSN=1
+ ENDIF
+
+C...Sum branching ratios of allowed decay channels.
+ 220 NOPE=0
+ BRSU=0D0
+ DO 230 IDL=MDCY(KCA,2),MDCY(KCA,2)+MDCY(KCA,3)-1
+ IF(MDME(IDL,1).NE.1.AND.KFSP*MDME(IDL,1).NE.2.AND.
+ & KFSN*MDME(IDL,1).NE.3) GOTO 230
+ IF(MDME(IDL,2).GT.100) GOTO 230
+ NOPE=NOPE+1
+ BRSU=BRSU+BRAT(IDL)
+ 230 CONTINUE
+ IF(NOPE.EQ.0) THEN
+ CALL PYERRM(2,'(PYDECY:) all decay channels closed by user')
+ RETURN
+ ENDIF
+
+C...Select decay channel among allowed ones.
+ 240 RBR=BRSU*PYR(0)
+ IDL=MDCY(KCA,2)-1
+ 250 IDL=IDL+1
+ IF(MDME(IDL,1).NE.1.AND.KFSP*MDME(IDL,1).NE.2.AND.
+ &KFSN*MDME(IDL,1).NE.3) THEN
+ IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1) GOTO 250
+ ELSEIF(MDME(IDL,2).GT.100) THEN
+ IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1) GOTO 250
+ ELSE
+ IDC=IDL
+ RBR=RBR-BRAT(IDL)
+ IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1.AND.RBR.GT.0D0) GOTO 250
+ ENDIF
+
+C...Start readout of decay channel: matrix element, reset counters.
+ MMAT=MDME(IDC,2)
+ 260 NTRY=NTRY+1
+ IF(MOD(NTRY,200).EQ.0) THEN
+ WRITE(CIDC,'(I4)') IDC
+ CALL PYERRM(4,'(PYDECY:) caught in loop for decay channel'//
+ & CIDC)
+ GOTO 240
+ ENDIF
+ IF(NTRY.GT.1000) THEN
+ CALL PYERRM(14,'(PYDECY:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ I=N
+ NP=0
+ NQ=0
+ MBST=0
+ IF(MMAT.GE.11.AND.P(IP,4).GT.20D0*P(IP,5)) MBST=1
+ DO 270 J=1,4
+ PV(1,J)=0D0
+ IF(MBST.EQ.0) PV(1,J)=P(IP,J)
+ 270 CONTINUE
+ IF(MBST.EQ.1) PV(1,4)=P(IP,5)
+ PV(1,5)=P(IP,5)
+ PS=0D0
+ PSQ=0D0
+ MREM=0
+ MHADDY=0
+ IF(KFA.GT.80) MHADDY=1
+C.. Random flavour and popcorn system memory.
+ IRNDMO=0
+ JTMO=0
+ MSTU(121)=0
+ MSTU(125)=10
+
+C...Read out decay products. Convert to standard flavour code.
+ JTMAX=5
+ IF(MDME(IDC+1,2).EQ.101) JTMAX=10
+ DO 280 JT=1,JTMAX
+ IF(JT.LE.5) KP=KFDP(IDC,JT)
+ IF(JT.GE.6) KP=KFDP(IDC+1,JT-5)
+ IF(KP.EQ.0) GOTO 280
+ KPA=IABS(KP)
+ KCP=PYCOMP(KPA)
+ IF(KPA.GT.80) MHADDY=1
+ IF(KCHG(KCP,3).EQ.0.AND.KPA.NE.81.AND.KPA.NE.82) THEN
+ KFP=KP
+ ELSEIF(KPA.NE.81.AND.KPA.NE.82) THEN
+ KFP=KFS*KP
+ ELSEIF(KPA.EQ.81.AND.MOD(KFA/1000,10).EQ.0) THEN
+ KFP=-KFS*MOD(KFA/10,10)
+ ELSEIF(KPA.EQ.81.AND.MOD(KFA/100,10).GE.MOD(KFA/10,10)) THEN
+ KFP=KFS*(100*MOD(KFA/10,100)+3)
+ ELSEIF(KPA.EQ.81) THEN
+ KFP=KFS*(1000*MOD(KFA/10,10)+100*MOD(KFA/100,10)+1)
+ ELSEIF(KP.EQ.82) THEN
+ CALL PYDCYK(-KFS*INT(1D0+(2D0+PARJ(2))*PYR(0)),0,KFP,KDUMP)
+ IF(KFP.EQ.0) GOTO 260
+ KFP=-KFP
+ IRNDMO=1
+ MSTJ(93)=1
+ IF(PV(1,5).LT.PARJ(32)+2D0*PYMASS(KFP)) GOTO 260
+ ELSEIF(KP.EQ.-82) THEN
+ KFP=MSTU(124)
+ ENDIF
+ IF(KPA.EQ.81.OR.KPA.EQ.82) KCP=PYCOMP(KFP)
+
+C...Add decay product to event record or to quark flavour list.
+ KFPA=IABS(KFP)
+ KQP=KCHG(KCP,2)
+ IF(MMAT.GE.11.AND.MMAT.LE.30.AND.KQP.NE.0) THEN
+ NQ=NQ+1
+ KFLO(NQ)=KFP
+C...set rndmflav popcorn system pointer
+ IF(KP.EQ.82.AND.MSTU(121).GT.0) JTMO=NQ
+ MSTJ(93)=2
+ PSQ=PSQ+PYMASS(KFLO(NQ))
+ ELSEIF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.48).AND.NP.EQ.3.AND.
+ & MOD(NQ,2).EQ.1) THEN
+ NQ=NQ-1
+ PS=PS-P(I,5)
+ K(I,1)=1
+ KFI=K(I,2)
+ CALL PYKFDI(KFP,KFI,KFLDMP,K(I,2))
+ IF(K(I,2).EQ.0) GOTO 260
+ MSTJ(93)=1
+ P(I,5)=PYMASS(K(I,2))
+ PS=PS+P(I,5)
+ ELSE
+ I=I+1
+ NP=NP+1
+ IF(MMAT.NE.33.AND.KQP.NE.0) NQ=NQ+1
+ IF(MMAT.EQ.33.AND.KQP.NE.0.AND.KQP.NE.2) NQ=NQ+1
+ K(I,1)=1+MOD(NQ,2)
+ IF(MMAT.EQ.4.AND.JT.LE.2.AND.KFP.EQ.21) K(I,1)=2
+ IF(MMAT.EQ.4.AND.JT.EQ.3) K(I,1)=1
+ K(I,2)=KFP
+ K(I,3)=IP
+ K(I,4)=0
+ K(I,5)=0
+ P(I,5)=PYMASS(KFP)
+ PS=PS+P(I,5)
+ ENDIF
+ 280 CONTINUE
+
+C...Check masses for resonance decays.
+ IF(MHADDY.EQ.0) THEN
+ IF(PS+PARJ(64).GT.PV(1,5)) GOTO 240
+ ENDIF
+
+C...Choose decay multiplicity in phase space model.
+ 290 IF(MMAT.GE.11.AND.MMAT.LE.30) THEN
+ PSP=PS
+ CNDE=PARJ(61)*LOG(MAX((PV(1,5)-PS-PSQ)/PARJ(62),1.1D0))
+ IF(MMAT.EQ.12) CNDE=CNDE+PARJ(63)
+ 300 NTRY=NTRY+1
+C...Reset popcorn flags if new attempt. Re-select rndmflav if failed.
+ IF(IRNDMO.EQ.0) THEN
+ MSTU(121)=0
+ JTMO=0
+ ELSEIF(IRNDMO.EQ.1) THEN
+ IRNDMO=2
+ ELSE
+ GOTO 260
+ ENDIF
+ IF(NTRY.GT.1000) THEN
+ CALL PYERRM(14,'(PYDECY:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(MMAT.LE.20) THEN
+ GAUSS=SQRT(-2D0*CNDE*LOG(MAX(1D-10,PYR(0))))*
+ & SIN(PARU(2)*PYR(0))
+ ND=0.5D0+0.5D0*NP+0.25D0*NQ+CNDE+GAUSS
+ IF(ND.LT.NP+NQ/2.OR.ND.LT.2.OR.ND.GT.10) GOTO 300
+ IF(MMAT.EQ.13.AND.ND.EQ.2) GOTO 300
+ IF(MMAT.EQ.14.AND.ND.LE.3) GOTO 300
+ IF(MMAT.EQ.15.AND.ND.LE.4) GOTO 300
+ ELSE
+ ND=MMAT-20
+ ENDIF
+C.. Set maximum popcorn meson number. Test rndmflav popcorn size.
+ MSTU(125)=ND-NQ/2
+ IF(MSTU(121).GT.MSTU(125)) GOTO 300
+
+C...Form hadrons from flavour content.
+ DO 310 JT=1,4
+ KFL1(JT)=KFLO(JT)
+ 310 CONTINUE
+ IF(ND.EQ.NP+NQ/2) GOTO 330
+ DO 320 I=N+NP+1,N+ND-NQ/2
+C.. Stick to started popcorn system, else pick side at random
+ JT=JTMO
+ IF(JT.EQ.0) JT=1+INT((NQ-1)*PYR(0))
+ CALL PYDCYK(KFL1(JT),0,KFL2,K(I,2))
+ IF(K(I,2).EQ.0) GOTO 300
+ MSTU(125)=MSTU(125)-1
+ JTMO=0
+ IF(MSTU(121).GT.0) JTMO=JT
+ KFL1(JT)=-KFL2
+ 320 CONTINUE
+ 330 JT=2
+ JT2=3
+ JT3=4
+ IF(NQ.EQ.4.AND.PYR(0).LT.PARJ(66)) JT=4
+ IF(JT.EQ.4.AND.ISIGN(1,KFL1(1)*(10-IABS(KFL1(1))))*
+ & ISIGN(1,KFL1(JT)*(10-IABS(KFL1(JT)))).GT.0) JT=3
+ IF(JT.EQ.3) JT2=2
+ IF(JT.EQ.4) JT3=2
+ CALL PYDCYK(KFL1(1),KFL1(JT),KFLDMP,K(N+ND-NQ/2+1,2))
+ IF(K(N+ND-NQ/2+1,2).EQ.0) GOTO 300
+ IF(NQ.EQ.4) CALL PYDCYK(KFL1(JT2),KFL1(JT3),KFLDMP,K(N+ND,2))
+ IF(NQ.EQ.4.AND.K(N+ND,2).EQ.0) GOTO 300
+
+C...Check that sum of decay product masses not too large.
+ PS=PSP
+ DO 340 I=N+NP+1,N+ND
+ K(I,1)=1
+ K(I,3)=IP
+ K(I,4)=0
+ K(I,5)=0
+ P(I,5)=PYMASS(K(I,2))
+ PS=PS+P(I,5)
+ 340 CONTINUE
+ IF(PS+PARJ(64).GT.PV(1,5)) GOTO 300
+
+C...Rescale energy to subtract off spectator quark mass.
+ ELSEIF((MMAT.EQ.31.OR.MMAT.EQ.33.OR.MMAT.EQ.44)
+ & .AND.NP.GE.3) THEN
+ PS=PS-P(N+NP,5)
+ PQT=(P(N+NP,5)+PARJ(65))/PV(1,5)
+ DO 350 J=1,5
+ P(N+NP,J)=PQT*PV(1,J)
+ PV(1,J)=(1D0-PQT)*PV(1,J)
+ 350 CONTINUE
+ IF(PS+PARJ(64).GT.PV(1,5)) GOTO 260
+ ND=NP-1
+ MREM=1
+
+C...Fully specified final state: check mass broadening effects.
+ ELSE
+ IF(NP.GE.2.AND.PS+PARJ(64).GT.PV(1,5)) GOTO 260
+ ND=NP
+ ENDIF
+
+C...Determine position of grandmother, number of sisters.
+ NM=0
+ KFAS=0
+ MSGN=0
+ IF(MMAT.EQ.3) THEN
+ IM=K(IP,3)
+ IF(IM.LT.0.OR.IM.GE.IP) IM=0
+ IF(IM.NE.0) KFAM=IABS(K(IM,2))
+ IF(IM.NE.0) THEN
+ DO 360 IL=MAX(IP-2,IM+1),MIN(IP+2,N)
+ IF(K(IL,3).EQ.IM) NM=NM+1
+ IF(K(IL,3).EQ.IM.AND.IL.NE.IP) ISIS=IL
+ 360 CONTINUE
+ IF(NM.NE.2.OR.KFAM.LE.100.OR.MOD(KFAM,10).NE.1.OR.
+ & MOD(KFAM/1000,10).NE.0) NM=0
+ IF(NM.EQ.2) THEN
+ KFAS=IABS(K(ISIS,2))
+ IF((KFAS.LE.100.OR.MOD(KFAS,10).NE.1.OR.
+ & MOD(KFAS/1000,10).NE.0).AND.KFAS.NE.22) NM=0
+ ENDIF
+ ENDIF
+ ENDIF
+
+C...Kinematics of one-particle decays.
+ IF(ND.EQ.1) THEN
+ DO 370 J=1,4
+ P(N+1,J)=P(IP,J)
+ 370 CONTINUE
+ GOTO 630
+ ENDIF
+
+C...Calculate maximum weight ND-particle decay.
+ PV(ND,5)=P(N+ND,5)
+ IF(ND.GE.3) THEN
+ WTMAX=1D0/WTCOR(ND-2)
+ PMAX=PV(1,5)-PS+P(N+ND,5)
+ PMIN=0D0
+ DO 380 IL=ND-1,1,-1
+ PMAX=PMAX+P(N+IL,5)
+ PMIN=PMIN+P(N+IL+1,5)
+ WTMAX=WTMAX*PAWT(PMAX,PMIN,P(N+IL,5))
+ 380 CONTINUE
+ ENDIF
+
+C...Find virtual gamma mass in Dalitz decay.
+ 390 IF(ND.EQ.2) THEN
+ ELSEIF(MMAT.EQ.2) THEN
+ PMES=4D0*PMAS(11,1)**2
+ PMRHO2=PMAS(131,1)**2
+ PGRHO2=PMAS(131,2)**2
+ 400 PMST=PMES*(P(IP,5)**2/PMES)**PYR(0)
+ WT=(1+0.5D0*PMES/PMST)*SQRT(MAX(0D0,1D0-PMES/PMST))*
+ & (1D0-PMST/P(IP,5)**2)**3*(1D0+PGRHO2/PMRHO2)/
+ & ((1D0-PMST/PMRHO2)**2+PGRHO2/PMRHO2)
+ IF(WT.LT.PYR(0)) GOTO 400
+ PV(2,5)=MAX(2.00001D0*PMAS(11,1),SQRT(PMST))
+
+C...M-generator gives weight. If rejected, try again.
+ ELSE
+ 410 RORD(1)=1D0
+ DO 440 IL1=2,ND-1
+ RSAV=PYR(0)
+ DO 420 IL2=IL1-1,1,-1
+ IF(RSAV.LE.RORD(IL2)) GOTO 430
+ RORD(IL2+1)=RORD(IL2)
+ 420 CONTINUE
+ 430 RORD(IL2+1)=RSAV
+ 440 CONTINUE
+ RORD(ND)=0D0
+ WT=1D0
+ DO 450 IL=ND-1,1,-1
+ PV(IL,5)=PV(IL+1,5)+P(N+IL,5)+(RORD(IL)-RORD(IL+1))*
+ & (PV(1,5)-PS)
+ WT=WT*PAWT(PV(IL,5),PV(IL+1,5),P(N+IL,5))
+ 450 CONTINUE
+ IF(WT.LT.PYR(0)*WTMAX) GOTO 410
+ ENDIF
+
+C...Perform two-particle decays in respective CM frame.
+ 460 DO 480 IL=1,ND-1
+ PA=PAWT(PV(IL,5),PV(IL+1,5),P(N+IL,5))
+ UE(3)=2D0*PYR(0)-1D0
+ PHI=PARU(2)*PYR(0)
+ UE(1)=SQRT(1D0-UE(3)**2)*COS(PHI)
+ UE(2)=SQRT(1D0-UE(3)**2)*SIN(PHI)
+ DO 470 J=1,3
+ P(N+IL,J)=PA*UE(J)
+ PV(IL+1,J)=-PA*UE(J)
+ 470 CONTINUE
+ P(N+IL,4)=SQRT(PA**2+P(N+IL,5)**2)
+ PV(IL+1,4)=SQRT(PA**2+PV(IL+1,5)**2)
+ 480 CONTINUE
+
+C...Lorentz transform decay products to lab frame.
+ DO 490 J=1,4
+ P(N+ND,J)=PV(ND,J)
+ 490 CONTINUE
+ DO 530 IL=ND-1,1,-1
+ DO 500 J=1,3
+ BE(J)=PV(IL,J)/PV(IL,4)
+ 500 CONTINUE
+ GA=PV(IL,4)/PV(IL,5)
+ DO 520 I=N+IL,N+ND
+ BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+ DO 510 J=1,3
+ P(I,J)=P(I,J)+GA*(GA*BEP/(1D0+GA)+P(I,4))*BE(J)
+ 510 CONTINUE
+ P(I,4)=GA*(P(I,4)+BEP)
+ 520 CONTINUE
+ 530 CONTINUE
+
+C...Check that no infinite loop in matrix element weight.
+ NTRY=NTRY+1
+ IF(NTRY.GT.800) GOTO 560
+
+C...Matrix elements for omega and phi decays.
+ IF(MMAT.EQ.1) THEN
+ WT=(P(N+1,5)*P(N+2,5)*P(N+3,5))**2-(P(N+1,5)*FOUR(N+2,N+3))**2
+ & -(P(N+2,5)*FOUR(N+1,N+3))**2-(P(N+3,5)*FOUR(N+1,N+2))**2
+ & +2D0*FOUR(N+1,N+2)*FOUR(N+1,N+3)*FOUR(N+2,N+3)
+ IF(MAX(WT*WTCOR(9)/P(IP,5)**6,0.001D0).LT.PYR(0)) GOTO 390
+
+C...Matrix elements for pi0 or eta Dalitz decay to gamma e+ e-.
+ ELSEIF(MMAT.EQ.2) THEN
+ FOUR12=FOUR(N+1,N+2)
+ FOUR13=FOUR(N+1,N+3)
+ WT=(PMST-0.5D0*PMES)*(FOUR12**2+FOUR13**2)+
+ & PMES*(FOUR12*FOUR13+FOUR12**2+FOUR13**2)
+ IF(WT.LT.PYR(0)*0.25D0*PMST*(P(IP,5)**2-PMST)**2) GOTO 460
+
+C...Matrix element for S0 -> S1 + V1 -> S1 + S2 + S3 (S scalar,
+C...V vector), of form cos**2(theta02) in V1 rest frame, and for
+C...S0 -> gamma + V1 -> gamma + S2 + S3, of form sin**2(theta02).
+ ELSEIF(MMAT.EQ.3.AND.NM.EQ.2) THEN
+ FOUR10=FOUR(IP,IM)
+ FOUR12=FOUR(IP,N+1)
+ FOUR02=FOUR(IM,N+1)
+ PMS1=P(IP,5)**2
+ PMS0=P(IM,5)**2
+ PMS2=P(N+1,5)**2
+ IF(KFAS.NE.22) HNUM=(FOUR10*FOUR12-PMS1*FOUR02)**2
+ IF(KFAS.EQ.22) HNUM=PMS1*(2D0*FOUR10*FOUR12*FOUR02-
+ & PMS1*FOUR02**2-PMS0*FOUR12**2-PMS2*FOUR10**2+PMS1*PMS0*PMS2)
+ HNUM=MAX(1D-6*PMS1**2*PMS0*PMS2,HNUM)
+ HDEN=(FOUR10**2-PMS1*PMS0)*(FOUR12**2-PMS1*PMS2)
+ IF(HNUM.LT.PYR(0)*HDEN) GOTO 460
+
+C...Matrix element for "onium" -> g + g + g or gamma + g + g.
+ ELSEIF(MMAT.EQ.4) THEN
+ HX1=2D0*FOUR(IP,N+1)/P(IP,5)**2
+ HX2=2D0*FOUR(IP,N+2)/P(IP,5)**2
+ HX3=2D0*FOUR(IP,N+3)/P(IP,5)**2
+ WT=((1D0-HX1)/(HX2*HX3))**2+((1D0-HX2)/(HX1*HX3))**2+
+ & ((1D0-HX3)/(HX1*HX2))**2
+ IF(WT.LT.2D0*PYR(0)) GOTO 390
+ IF(K(IP+1,2).EQ.22.AND.(1D0-HX1)*P(IP,5)**2.LT.4D0*PARJ(32)**2)
+ & GOTO 390
+
+C...Effective matrix element for nu spectrum in tau -> nu + hadrons.
+ ELSEIF(MMAT.EQ.41) THEN
+ HX1=2D0*FOUR(IP,N+1)/P(IP,5)**2
+ HXM=MIN(0.75D0,2D0*(1D0-PS/P(IP,5)))
+ IF(HX1*(3D0-2D0*HX1).LT.PYR(0)*HXM*(3D0-2D0*HXM)) GOTO 390
+
+C...Matrix elements for weak decays (only semileptonic for c and b)
+ ELSEIF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48)
+ & .AND.ND.EQ.3) THEN
+ IF(MBST.EQ.0) WT=FOUR(IP,N+1)*FOUR(N+2,N+3)
+ IF(MBST.EQ.1) WT=P(IP,5)*P(N+1,4)*FOUR(N+2,N+3)
+ IF(WT.LT.PYR(0)*P(IP,5)*PV(1,5)**3/WTCOR(10)) GOTO 390
+ ELSEIF(MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48) THEN
+ DO 550 J=1,4
+ P(N+NP+1,J)=0D0
+ DO 540 IS=N+3,N+NP
+ P(N+NP+1,J)=P(N+NP+1,J)+P(IS,J)
+ 540 CONTINUE
+ 550 CONTINUE
+ IF(MBST.EQ.0) WT=FOUR(IP,N+1)*FOUR(N+2,N+NP+1)
+ IF(MBST.EQ.1) WT=P(IP,5)*P(N+1,4)*FOUR(N+2,N+NP+1)
+ IF(WT.LT.PYR(0)*P(IP,5)*PV(1,5)**3/WTCOR(10)) GOTO 390
+ ENDIF
+
+C...Scale back energy and reattach spectator.
+ 560 IF(MREM.EQ.1) THEN
+ DO 570 J=1,5
+ PV(1,J)=PV(1,J)/(1D0-PQT)
+ 570 CONTINUE
+ ND=ND+1
+ MREM=0
+ ENDIF
+
+C...Low invariant mass for system with spectator quark gives particle,
+C...not two jets. Readjust momenta accordingly.
+ IF(MMAT.EQ.31.AND.ND.EQ.3) THEN
+ MSTJ(93)=1
+ PM2=PYMASS(K(N+2,2))
+ MSTJ(93)=1
+ PM3=PYMASS(K(N+3,2))
+ IF(P(N+2,5)**2+P(N+3,5)**2+2D0*FOUR(N+2,N+3).GE.
+ & (PARJ(32)+PM2+PM3)**2) GOTO 630
+ K(N+2,1)=1
+ KFTEMP=K(N+2,2)
+ CALL PYKFDI(KFTEMP,K(N+3,2),KFLDMP,K(N+2,2))
+ IF(K(N+2,2).EQ.0) GOTO 260
+ P(N+2,5)=PYMASS(K(N+2,2))
+ PS=P(N+1,5)+P(N+2,5)
+ PV(2,5)=P(N+2,5)
+ MMAT=0
+ ND=2
+ GOTO 460
+ ELSEIF(MMAT.EQ.44) THEN
+ MSTJ(93)=1
+ PM3=PYMASS(K(N+3,2))
+ MSTJ(93)=1
+ PM4=PYMASS(K(N+4,2))
+ IF(P(N+3,5)**2+P(N+4,5)**2+2D0*FOUR(N+3,N+4).GE.
+ & (PARJ(32)+PM3+PM4)**2) GOTO 600
+ K(N+3,1)=1
+ KFTEMP=K(N+3,2)
+ CALL PYKFDI(KFTEMP,K(N+4,2),KFLDMP,K(N+3,2))
+ IF(K(N+3,2).EQ.0) GOTO 260
+ P(N+3,5)=PYMASS(K(N+3,2))
+ DO 580 J=1,3
+ P(N+3,J)=P(N+3,J)+P(N+4,J)
+ 580 CONTINUE
+ P(N+3,4)=SQRT(P(N+3,1)**2+P(N+3,2)**2+P(N+3,3)**2+P(N+3,5)**2)
+ HA=P(N+1,4)**2-P(N+2,4)**2
+ HB=HA-(P(N+1,5)**2-P(N+2,5)**2)
+ HC=(P(N+1,1)-P(N+2,1))**2+(P(N+1,2)-P(N+2,2))**2+
+ & (P(N+1,3)-P(N+2,3))**2
+ HD=(PV(1,4)-P(N+3,4))**2
+ HE=HA**2-2D0*HD*(P(N+1,4)**2+P(N+2,4)**2)+HD**2
+ HF=HD*HC-HB**2
+ HG=HD*HC-HA*HB
+ HH=(SQRT(HG**2+HE*HF)-HG)/(2D0*HF)
+ DO 590 J=1,3
+ PCOR=HH*(P(N+1,J)-P(N+2,J))
+ P(N+1,J)=P(N+1,J)+PCOR
+ P(N+2,J)=P(N+2,J)-PCOR
+ 590 CONTINUE
+ P(N+1,4)=SQRT(P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2+P(N+1,5)**2)
+ P(N+2,4)=SQRT(P(N+2,1)**2+P(N+2,2)**2+P(N+2,3)**2+P(N+2,5)**2)
+ ND=ND-1
+ ENDIF
+
+C...Check invariant mass of W jets. May give one particle or start over.
+ 600 IF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48)
+ &.AND.IABS(K(N+1,2)).LT.10) THEN
+ PMR=SQRT(MAX(0D0,P(N+1,5)**2+P(N+2,5)**2+2D0*FOUR(N+1,N+2)))
+ MSTJ(93)=1
+ PM1=PYMASS(K(N+1,2))
+ MSTJ(93)=1
+ PM2=PYMASS(K(N+2,2))
+ IF(PMR.GT.PARJ(32)+PM1+PM2) GOTO 610
+ KFLDUM=INT(1.5D0+PYR(0))
+ CALL PYKFDI(K(N+1,2),-ISIGN(KFLDUM,K(N+1,2)),KFLDMP,KF1)
+ CALL PYKFDI(K(N+2,2),-ISIGN(KFLDUM,K(N+2,2)),KFLDMP,KF2)
+ IF(KF1.EQ.0.OR.KF2.EQ.0) GOTO 260
+ PSM=PYMASS(KF1)+PYMASS(KF2)
+ IF((MMAT.EQ.42.OR.MMAT.EQ.48).AND.PMR.GT.PARJ(64)+PSM) GOTO 610
+ IF(MMAT.GE.43.AND.PMR.GT.0.2D0*PARJ(32)+PSM) GOTO 610
+ IF(MMAT.EQ.48) GOTO 390
+ IF(ND.EQ.4.OR.KFA.EQ.15) GOTO 260
+ K(N+1,1)=1
+ KFTEMP=K(N+1,2)
+ CALL PYKFDI(KFTEMP,K(N+2,2),KFLDMP,K(N+1,2))
+ IF(K(N+1,2).EQ.0) GOTO 260
+ P(N+1,5)=PYMASS(K(N+1,2))
+ K(N+2,2)=K(N+3,2)
+ P(N+2,5)=P(N+3,5)
+ PS=P(N+1,5)+P(N+2,5)
+ IF(PS+PARJ(64).GT.PV(1,5)) GOTO 260
+ PV(2,5)=P(N+3,5)
+ MMAT=0
+ ND=2
+ GOTO 460
+ ENDIF
+
+C...Phase space decay of partons from W decay.
+ 610 IF((MMAT.EQ.42.OR.MMAT.EQ.48).AND.IABS(K(N+1,2)).LT.10) THEN
+ KFLO(1)=K(N+1,2)
+ KFLO(2)=K(N+2,2)
+ K(N+1,1)=K(N+3,1)
+ K(N+1,2)=K(N+3,2)
+ DO 620 J=1,5
+ PV(1,J)=P(N+1,J)+P(N+2,J)
+ P(N+1,J)=P(N+3,J)
+ 620 CONTINUE
+ PV(1,5)=PMR
+ N=N+1
+ NP=0
+ NQ=2
+ PS=0D0
+ MSTJ(93)=2
+ PSQ=PYMASS(KFLO(1))
+ MSTJ(93)=2
+ PSQ=PSQ+PYMASS(KFLO(2))
+ MMAT=11
+ GOTO 290
+ ENDIF
+
+C...Boost back for rapidly moving particle.
+ 630 N=N+ND
+ IF(MBST.EQ.1) THEN
+ DO 640 J=1,3
+ BE(J)=P(IP,J)/P(IP,4)
+ 640 CONTINUE
+ GA=P(IP,4)/P(IP,5)
+ DO 660 I=NSAV+1,N
+ BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
+ DO 650 J=1,3
+ P(I,J)=P(I,J)+GA*(GA*BEP/(1D0+GA)+P(I,4))*BE(J)
+ 650 CONTINUE
+ P(I,4)=GA*(P(I,4)+BEP)
+ 660 CONTINUE
+ ENDIF
+
+C...Fill in position of decay vertex.
+ DO 680 I=NSAV+1,N
+ DO 670 J=1,4
+ V(I,J)=VDCY(J)
+ 670 CONTINUE
+ V(I,5)=0D0
+ 680 CONTINUE
+
+C...Set up for parton shower evolution from jets.
+ IF(MSTJ(23).GE.1.AND.MMAT.EQ.4.AND.K(NSAV+1,2).EQ.21) THEN
+ K(NSAV+1,1)=3
+ K(NSAV+2,1)=3
+ K(NSAV+3,1)=3
+ K(NSAV+1,4)=MSTU(5)*(NSAV+2)
+ K(NSAV+1,5)=MSTU(5)*(NSAV+3)
+ K(NSAV+2,4)=MSTU(5)*(NSAV+3)
+ K(NSAV+2,5)=MSTU(5)*(NSAV+1)
+ K(NSAV+3,4)=MSTU(5)*(NSAV+1)
+ K(NSAV+3,5)=MSTU(5)*(NSAV+2)
+ MSTJ(92)=-(NSAV+1)
+ ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.4) THEN
+ K(NSAV+2,1)=3
+ K(NSAV+3,1)=3
+ K(NSAV+2,4)=MSTU(5)*(NSAV+3)
+ K(NSAV+2,5)=MSTU(5)*(NSAV+3)
+ K(NSAV+3,4)=MSTU(5)*(NSAV+2)
+ K(NSAV+3,5)=MSTU(5)*(NSAV+2)
+ MSTJ(92)=NSAV+2
+ ELSEIF(MSTJ(23).GE.1.AND.(MMAT.EQ.32.OR.MMAT.EQ.44).AND.
+ & IABS(K(NSAV+1,2)).LE.10.AND.IABS(K(NSAV+2,2)).LE.10) THEN
+ K(NSAV+1,1)=3
+ K(NSAV+2,1)=3
+ K(NSAV+1,4)=MSTU(5)*(NSAV+2)
+ K(NSAV+1,5)=MSTU(5)*(NSAV+2)
+ K(NSAV+2,4)=MSTU(5)*(NSAV+1)
+ K(NSAV+2,5)=MSTU(5)*(NSAV+1)
+ MSTJ(92)=NSAV+1
+ ELSEIF(MSTJ(23).GE.1.AND.(MMAT.EQ.32.OR.MMAT.EQ.44).AND.
+ & IABS(K(NSAV+1,2)).LE.20.AND.IABS(K(NSAV+2,2)).LE.20) THEN
+ MSTJ(92)=NSAV+1
+ ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.33.AND.IABS(K(NSAV+2,2)).EQ.21)
+ & THEN
+ K(NSAV+1,1)=3
+ K(NSAV+2,1)=3
+ K(NSAV+3,1)=3
+ KCP=PYCOMP(K(NSAV+1,2))
+ KQP=KCHG(KCP,2)*ISIGN(1,K(NSAV+1,2))
+ JCON=4
+ IF(KQP.LT.0) JCON=5
+ K(NSAV+1,JCON)=MSTU(5)*(NSAV+2)
+ K(NSAV+2,9-JCON)=MSTU(5)*(NSAV+1)
+ K(NSAV+2,JCON)=MSTU(5)*(NSAV+3)
+ K(NSAV+3,9-JCON)=MSTU(5)*(NSAV+2)
+ MSTJ(92)=NSAV+1
+ ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.33) THEN
+ K(NSAV+1,1)=3
+ K(NSAV+3,1)=3
+ K(NSAV+1,4)=MSTU(5)*(NSAV+3)
+ K(NSAV+1,5)=MSTU(5)*(NSAV+3)
+ K(NSAV+3,4)=MSTU(5)*(NSAV+1)
+ K(NSAV+3,5)=MSTU(5)*(NSAV+1)
+ MSTJ(92)=NSAV+1
+ ENDIF
+
+C...Mark decayed particle; special option for B-Bbar mixing.
+ IF(K(IP,1).EQ.5) K(IP,1)=15
+ IF(K(IP,1).LE.10) K(IP,1)=11
+ IF(MMIX.EQ.1.AND.MSTJ(26).EQ.2.AND.K(IP,1).EQ.11) K(IP,1)=12
+ K(IP,4)=NSAV+1
+ K(IP,5)=N
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYDCYK
+C...Handles flavour production in the decay of unstable particles
+C...and small string clusters.
+
+ SUBROUTINE PYDCYK(KFL1,KFL2,KFL3,KF)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+
+C.. Call PYKFDI directly if no popcorn option is on
+ IF(MSTJ(12).LT.2) THEN
+ CALL PYKFDI(KFL1,KFL2,KFL3,KF)
+ MSTU(124)=KFL3
+ RETURN
+ ENDIF
+
+ KFL3=0
+ KF=0
+ IF(KFL1.EQ.0) RETURN
+ KF1A=IABS(KFL1)
+ KF2A=IABS(KFL2)
+
+ NSTO=130
+ NMAX=MIN(MSTU(125),10)
+
+C.. Identify rank 0 cluster qq
+ IRANK=1
+ IF(KF1A.GT.10.AND.KF1A.LT.10000) IRANK=0
+
+ IF(KF2A.GT.0)THEN
+C.. Join jets: Fails if store not empty
+ IF(MSTU(121).GT.0) THEN
+ MSTU(121)=0
+ RETURN
+ ENDIF
+ CALL PYKFDI(KFL1,KFL2,KFL3,KF)
+ ELSEIF(KF1A.GT.10.AND.MSTU(121).GT.0)THEN
+C.. Pick popcorn meson from store, return same qq, decrease store
+ KF=MSTU(NSTO+MSTU(121))
+ KFL3=-KFL1
+ MSTU(121)=MSTU(121)-1
+ ELSE
+C.. Generate new flavour. Then done if no diquark is generated
+ 100 CALL PYKFDI(KFL1,0,KFL3,KF)
+ IF(MSTU(121).EQ.-1) GOTO 100
+ MSTU(124)=KFL3
+ IF(KF.EQ.0.OR.IABS(KFL3).LE.10) RETURN
+
+C.. Simple case if no dynamical popcorn suppressions are considered
+ IF(MSTJ(12).LT.4) THEN
+ IF(MSTU(121).EQ.0) RETURN
+ NMES=1
+ KFPREV=-KFL3
+ CALL PYKFDI(KFPREV,0,KFL3,KFM)
+C.. Due to eta+eta' suppr., a qq->M+qq attempt might end as qq->B+q
+ IF(IABS(KFL3).LE.10)THEN
+ KFL3=-KFPREV
+ RETURN
+ ENDIF
+ GOTO 120
+ ENDIF
+
+C test output qq against fake Gamma, then return if no popcorn.
+ GB=2D0
+ IF(IRANK.NE.0)THEN
+ CALL PYZDIS(1,2103,5D0,Z)
+ GB=3D0*(1D0-Z)/Z
+ IF(1D0-PARF(192)**GB.LT.PYR(0)) THEN
+ MSTU(121)=0
+ GOTO 100
+ ENDIF
+ ENDIF
+ IF(MSTU(121).EQ.0) RETURN
+
+C..Set store size memory. Pick fake dynamical variables of qq.
+ NMES=MSTU(121)
+ CALL PYPTDI(1,PX3,PY3)
+ X=1D0
+ POPM=0D0
+ G=GB
+ POPG=GB
+
+C.. Pick next popcorn meson, test with fake dynamical variables
+ 110 KFPREV=-KFL3
+ PX1=-PX3
+ PY1=-PY3
+ CALL PYKFDI(KFPREV,0,KFL3,KFM)
+ IF(MSTU(121).EQ.-1) GOTO 100
+ CALL PYPTDI(KFL3,PX3,PY3)
+ PM=PYMASS(KFM)**2+(PX1+PX3)**2+(PY1+PY3)**2
+ CALL PYZDIS(KFPREV,KFL3,PM,Z)
+ G=(1D0-Z)*(G+PM/Z)
+ X=(1D0-Z)*X
+
+ PTST=1D0
+ GTST=1D0
+ RTST=PYR(0)
+ IF(MSTJ(12).GT.4)THEN
+ POPMN=SQRT((1D0-X)*(G/X-GB))
+ POPM=POPM+PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
+ PTST=EXP((POPM-POPMN)*PARF(193))
+ POPM=POPMN
+ ENDIF
+ IF(IRANK.NE.0)THEN
+ POPGN=X*GB
+ GTST=(1D0-PARF(192)**POPGN)/(1D0-PARF(192)**POPG)
+ POPG=POPGN
+ ENDIF
+ IF(RTST.GT.PTST*GTST)THEN
+ MSTU(121)=0
+ IF(RTST.GT.PTST) MSTU(121)=-1
+ GOTO 100
+ ENDIF
+
+C.. Store meson
+ 120 IF(NMES.LE.NMAX) MSTU(NSTO+MSTU(121)+1)=KFM
+ IF(MSTU(121).GT.0) GOTO 110
+
+C.. Test accepted system size. If OK set global popcorn size variable.
+ IF(NMES.GT.NMAX)THEN
+ KF=0
+ KFL3=0
+ RETURN
+ ENDIF
+ MSTU(121)=NMES
+ ENDIF
+
+ RETURN
+ END
+
+C********************************************************************
+
+C...PYKFDI
+C...Generates a new flavour pair and combines off a hadron
+
+ SUBROUTINE PYKFDI(KFL1,KFL2,KFL3,KF)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION PD(7)
+
+ IF(MSTU(123).EQ.0.AND.MSTJ(12).GT.0) CALL PYKFIN
+
+C...Default flavour values. Input consistency checks.
+ KF1A=IABS(KFL1)
+ KF2A=IABS(KFL2)
+ KFL3=0
+ KF=0
+ IF(KF1A.EQ.0) RETURN
+ IF(KF2A.NE.0)THEN
+ IF(KF1A.LE.10.AND.KF2A.LE.10.AND.KFL1*KFL2.GT.0) RETURN
+ IF(KF1A.GT.10.AND.KF2A.GT.10) RETURN
+ IF((KF1A.GT.10.OR.KF2A.GT.10).AND.KFL1*KFL2.LT.0) RETURN
+ ENDIF
+
+C...Check if tabulated flavour probabilities are to be used.
+ IF(MSTJ(15).EQ.1) THEN
+ IF(MSTJ(12).GE.5) CALL PYERRM(29,
+ & '(PYKFDI:) Sorry, option MSTJ(15)=1 not available' //
+ & ' together with MSTJ(12)>=5 modification')
+ KTAB1=-1
+ IF(KF1A.GE.1.AND.KF1A.LE.6) KTAB1=KF1A
+ KFL1A=MOD(KF1A/1000,10)
+ KFL1B=MOD(KF1A/100,10)
+ KFL1S=MOD(KF1A,10)
+ IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1B.GE.1.AND.KFL1B.LE.4)
+ & KTAB1=6+KFL1A*(KFL1A-2)+2*KFL1B+(KFL1S-1)/2
+ IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1A.EQ.KFL1B) KTAB1=KTAB1-1
+ IF(KF1A.GE.1.AND.KF1A.LE.6) KFL1A=KF1A
+ KTAB2=0
+ IF(KF2A.NE.0) THEN
+ KTAB2=-1
+ IF(KF2A.GE.1.AND.KF2A.LE.6) KTAB2=KF2A
+ KFL2A=MOD(KF2A/1000,10)
+ KFL2B=MOD(KF2A/100,10)
+ KFL2S=MOD(KF2A,10)
+ IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2B.GE.1.AND.KFL2B.LE.4)
+ & KTAB2=6+KFL2A*(KFL2A-2)+2*KFL2B+(KFL2S-1)/2
+ IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2A.EQ.KFL2B) KTAB2=KTAB2-1
+ ENDIF
+ IF(KTAB1.GE.0.AND.KTAB2.GE.0) GOTO 140
+ ENDIF
+
+C.. Recognize rank 0 diquark case
+ 100 IRANK=1
+ KFDIQ=MAX(KF1A,KF2A)
+ IF(KFDIQ.GT.10.AND.KFDIQ.LT.10000) IRANK=0
+
+C.. Join two flavours to meson or baryon. Test for popcorn.
+ IF(KF2A.GT.0)THEN
+ MBARY=0
+ IF(KFDIQ.GT.10) THEN
+ IF(IRANK.EQ.0.AND.MSTJ(12).LT.5)
+ & CALL PYNMES(KFDIQ)
+ IF(MSTU(121).NE.0) RETURN
+ MBARY=2
+ ENDIF
+ KFQOLD=KF1A
+ KFQVER=KF2A
+ GOTO 130
+ ENDIF
+
+C.. Separate incoming flavours, curtain flavour consistency check
+ KFIN=KFL1
+ KFQOLD=KF1A
+ KFQPOP=KF1A/10000
+ IF(KF1A.GT.10)THEN
+ KFIN=-KFL1
+ KFL1A=MOD(KF1A/1000,10)
+ KFL1B=MOD(KF1A/100,10)
+ IF(IRANK.EQ.0)THEN
+ QAWT=1D0
+ IF(KFL1A.GE.3) QAWT=PARF(136+KFL1A/4)
+ IF(KFL1B.GE.3) QAWT=QAWT/PARF(136+KFL1B/4)
+ KFQPOP=KFL1A+(KFL1B-KFL1A)*INT(1D0/(QAWT+1D0)+PYR(0))
+ ENDIF
+ IF(KFQPOP.NE.KFL1B.AND.KFQPOP.NE.KFL1A) RETURN
+ KFQOLD=KFL1A+KFL1B-KFQPOP
+ ENDIF
+
+C...Meson/baryon choice. Set number of mesons if starting a popcorn
+C...system.
+ 110 MBARY=0
+ IF(KF1A.LE.10.AND.MSTJ(12).GT.0)THEN
+ IF(MSTU(121).EQ.-1.OR.(1D0+PARJ(1))*PYR(0).GT.1D0)THEN
+ MBARY=1
+ CALL PYNMES(0)
+ ENDIF
+ ELSEIF(KF1A.GT.10)THEN
+ MBARY=2
+ IF(IRANK.EQ.0) CALL PYNMES(KF1A)
+ IF(MSTU(121).GT.0) MBARY=-1
+ ENDIF
+
+C..x->H+q: Choose single vertex quark. Jump to form hadron.
+ IF(MBARY.EQ.0.OR.MBARY.EQ.2)THEN
+ KFQVER=1+INT((2D0+PARJ(2))*PYR(0))
+ KFL3=ISIGN(KFQVER,-KFIN)
+ GOTO 130
+ ENDIF
+
+C..x->H+qq: (IDW=proper PARF position for diquark weights)
+ IDW=160
+C.. q->B+qq: Get curtain quark, different weights for q->B+B and
+C.. q->B+M+...
+ IF(MBARY.EQ.1)THEN
+ IF(MSTU(121).EQ.0) IDW=150
+ SQWT=PARF(IDW+1)
+ IF(MSTU(121).GT.0) SQWT=SQWT*PARF(135)*PARF(138)**MSTU(121)
+ KFQPOP=1+INT((2D0+SQWT)*PYR(0))
+C.. Shift to s-curtain parameters if needed
+ IF(KFQPOP.GE.3.AND.MSTJ(12).GE.5)THEN
+ PARF(194)=PARF(138)*PARF(139)
+ PARF(193)=PARJ(8)+PARJ(9)
+ ENDIF
+ ENDIF
+
+C.. x->H+qq: Get vertex quark
+ IF(MBARY.EQ.-1.AND.MSTJ(12).GE.5)THEN
+ IDW=MSTU(122)
+ MSTU(121)=MSTU(121)-1
+ IF(IDW.EQ.170) THEN
+ IF(MSTU(121).EQ.0)THEN
+ IPOS=3*MIN(KFQPOP-1,2)+MIN(KFQOLD-1,2)
+ ELSE
+ IPOS=3*3+3*MAX(0,MIN(KFQPOP-2,1))+MIN(KFQOLD-1,2)
+ ENDIF
+ ELSE
+ IF(MSTU(121).EQ.0)THEN
+ IPOS=3*5+5*MIN(KFQPOP-1,3)+MIN(KFQOLD-1,4)
+ ELSE
+ IPOS=3*5+5*4+MIN(KFQOLD-1,4)
+ ENDIF
+ ENDIF
+ IPOS=200+30*IPOS+1
+
+ IMES=-1
+ RMES=PYR(0)*PARF(194)
+ 120 IMES=IMES+1
+ RMES=RMES-PARF(IPOS+IMES)
+ IF(IMES.EQ.30) THEN
+ MSTU(121)=-1
+ KF=-111
+ RETURN
+ ENDIF
+ IF(RMES.GT.0D0) GOTO 120
+ KMUL=IMES/5
+ KFJ=2*KMUL+1
+ IF(KMUL.EQ.2) KFJ=10003
+ IF(KMUL.EQ.3) KFJ=10001
+ IF(KMUL.EQ.4) KFJ=20003
+ IF(KMUL.EQ.5) KFJ=5
+ IDIAG=0
+ KFQVER=MOD(IMES,5)+1
+ IF(KFQVER.GE.KFQOLD) KFQVER=KFQVER+1
+ IF(KFQVER.GT.3)THEN
+ IDIAG=KFQVER-3
+ KFQVER=KFQOLD
+ ENDIF
+ ELSE
+ IF(MBARY.EQ.-1) IDW=170
+ SQWT=PARF(IDW+2)
+ IF(KFQPOP.EQ.3) SQWT=PARF(IDW+3)
+ IF(KFQPOP.GT.3) SQWT=PARF(IDW+3)*(1D0/PARF(IDW+5)+1D0)/2D0
+ KFQVER=MIN(3,1+INT((2D0+SQWT)*PYR(0)))
+ IF(KFQPOP.LT.3.AND.KFQVER.LT.3)THEN
+ KFQVER=KFQPOP
+ IF(PYR(0).GT.PARF(IDW+4)) KFQVER=3-KFQPOP
+ ENDIF
+ ENDIF
+
+C..x->H+qq: form outgoing diquark with KFQPOP flag at 10000-pos
+ KFLDS=3
+ IF(KFQPOP.NE.KFQVER)THEN
+ SWT=PARF(IDW+7)
+ IF(KFQVER.EQ.3) SWT=PARF(IDW+6)
+ IF(KFQPOP.GE.3) SWT=PARF(IDW+5)
+ IF((1D0+SWT)*PYR(0).LT.1D0) KFLDS=1
+ ENDIF
+ KFDIQ=900*MAX(KFQVER,KFQPOP)+100*(KFQVER+KFQPOP)+KFLDS
+ & +10000*KFQPOP
+ KFL3=ISIGN(KFDIQ,KFIN)
+
+C..x->M+y: flavour for meson.
+ 130 IF(MBARY.LE.0)THEN
+ KFLA=MAX(KFQOLD,KFQVER)
+ KFLB=MIN(KFQOLD,KFQVER)
+ KFS=ISIGN(1,KFL1)
+ IF(KFLA.NE.KFQOLD) KFS=-KFS
+C... Form meson, with spin and flavour mixing for diagonal states.
+ IF(MBARY.EQ.-1.AND.MSTJ(12).GE.5)THEN
+ IF(IDIAG.GT.0) KF=110*IDIAG+KFJ
+ IF(IDIAG.EQ.0) KF=(100*KFLA+10*KFLB+KFJ)*KFS*(-1)**KFLA
+ RETURN
+ ENDIF
+ IF(KFLA.LE.2) KMUL=INT(PARJ(11)+PYR(0))
+ IF(KFLA.EQ.3) KMUL=INT(PARJ(12)+PYR(0))
+ IF(KFLA.GE.4) KMUL=INT(PARJ(13)+PYR(0))
+ IF(KMUL.EQ.0.AND.PARJ(14).GT.0D0)THEN
+ IF(PYR(0).LT.PARJ(14)) KMUL=2
+ ELSEIF(KMUL.EQ.1.AND.PARJ(15)+PARJ(16)+PARJ(17).GT.0D0)THEN
+ RMUL=PYR(0)
+ IF(RMUL.LT.PARJ(15)) KMUL=3
+ IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)) KMUL=4
+ IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)+PARJ(17)) KMUL=5
+ ENDIF
+ KFLS=3
+ IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
+ IF(KMUL.EQ.5) KFLS=5
+ IF(KFLA.NE.KFLB)THEN
+ KF=(100*KFLA+10*KFLB+KFLS)*KFS*(-1)**KFLA
+ ELSE
+ RMIX=PYR(0)
+ IMIX=2*KFLA+10*KMUL
+ IF(KFLA.LE.3) KF=110*(1+INT(RMIX+PARF(IMIX-1))+
+ & INT(RMIX+PARF(IMIX)))+KFLS
+ IF(KFLA.GE.4) KF=110*KFLA+KFLS
+ ENDIF
+ IF(KMUL.EQ.2.OR.KMUL.EQ.3) KF=KF+ISIGN(10000,KF)
+ IF(KMUL.EQ.4) KF=KF+ISIGN(20000,KF)
+
+C..Optional extra suppression of eta and eta'.
+C..Allow shift to qq->B+q in old version (set IRANK to 0)
+ IF(KF.EQ.221.OR.KF.EQ.331)THEN
+ IF(PYR(0).GT.PARJ(25+KF/300))THEN
+ IF(KF2A.GT.0) GOTO 130
+ IF(MSTJ(12).LT.4) IRANK=0
+ GOTO 110
+ ENDIF
+ ENDIF
+ MSTU(121)=0
+
+C.. x->B+y: Flavour for baryon
+ ELSE
+ KFLA=KFQVER
+ IF(KF1A.LE.10) KFLA=KFQOLD
+ KFLB=MOD(KFDIQ/1000,10)
+ KFLC=MOD(KFDIQ/100,10)
+ KFLDS=MOD(KFDIQ,10)
+ KFLD=MAX(KFLA,KFLB,KFLC)
+ KFLF=MIN(KFLA,KFLB,KFLC)
+ KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
+
+C... SU(6) factors for formation of baryon.
+ KBARY=3
+ KDMAX=5
+ KFLG=KFLB
+ IF(KFLB.NE.KFLC)THEN
+ KBARY=2*KFLDS-1
+ KDMAX=1+KFLDS/2
+ IF(KFLB.GT.2) KDMAX=KDMAX+2
+ ENDIF
+ IF(KFLA.NE.KFLB.AND.KFLA.NE.KFLC)THEN
+ KBARY=KBARY+1
+ KFLG=KFLA
+ ENDIF
+
+ SU6MAX=PARF(140+KDMAX)
+ SU6DEC=PARJ(18)
+ SU6S =PARF(146)
+ IF(MSTJ(12).GE.5.AND.IRANK.EQ.0) THEN
+ SU6MAX=1D0
+ SU6DEC=1D0
+ SU6S =1D0
+ ENDIF
+ SU6OCT=PARF(60+KBARY)
+ IF(KFLG.GT.MAX(KFLA+KFLB-KFLG,2))THEN
+ SU6OCT=SU6OCT*4*SU6S/(3*SU6S+1)
+ IF(KBARY.EQ.2) SU6OCT=PARF(60+KBARY)*4/(3*SU6S+1)
+ ELSE
+ IF(KBARY.EQ.6) SU6OCT=SU6OCT*(3+SU6S)/(3*SU6S+1)
+ ENDIF
+ SU6WT=SU6OCT+SU6DEC*PARF(70+KBARY)
+
+C.. SU(6) test. Old options enforce new baryon if q->B+qq is rejected.
+ IF(SU6WT.LT.PYR(0)*SU6MAX.AND.KF2A.EQ.0)THEN
+ MSTU(121)=0
+ IF(MSTJ(12).LE.2.AND.MBARY.EQ.1) MSTU(121)=-1
+ GOTO 110
+ ENDIF
+
+C.. Form baryon. Distinguish Lambda- and Sigmalike baryons.
+ KSIG=1
+ KFLS=2
+ IF(SU6WT*PYR(0).GT.SU6OCT) KFLS=4
+ IF(KFLS.EQ.2.AND.KFLD.GT.KFLE.AND.KFLE.GT.KFLF)THEN
+ KSIG=KFLDS/3
+ IF(KFLA.NE.KFLD) KSIG=INT(3*SU6S/(3*SU6S+KFLDS**2)+PYR(0))
+ ENDIF
+ KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+KFLS,KFL1)
+ IF(KSIG.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+KFLS,KFL1)
+ ENDIF
+ RETURN
+
+C...Use tabulated probabilities to select new flavour and hadron.
+ 140 IF(KTAB2.EQ.0.AND.MSTJ(12).LE.0) THEN
+ KT3L=1
+ KT3U=6
+ ELSEIF(KTAB2.EQ.0.AND.KTAB1.GE.7.AND.MSTJ(12).LE.1) THEN
+ KT3L=1
+ KT3U=6
+ ELSEIF(KTAB2.EQ.0) THEN
+ KT3L=1
+ KT3U=22
+ ELSE
+ KT3L=KTAB2
+ KT3U=KTAB2
+ ENDIF
+ RFL=0D0
+ DO 160 KTS=0,2
+ DO 150 KT3=KT3L,KT3U
+ RFL=RFL+PARF(120+80*KTAB1+25*KTS+KT3)
+ 150 CONTINUE
+ 160 CONTINUE
+ RFL=PYR(0)*RFL
+ DO 180 KTS=0,2
+ KTABS=KTS
+ DO 170 KT3=KT3L,KT3U
+ KTAB3=KT3
+ RFL=RFL-PARF(120+80*KTAB1+25*KTS+KT3)
+ IF(RFL.LE.0D0) GOTO 190
+ 170 CONTINUE
+ 180 CONTINUE
+ 190 CONTINUE
+
+C...Reconstruct flavour of produced quark/diquark.
+ IF(KTAB3.LE.6) THEN
+ KFL3A=KTAB3
+ KFL3B=0
+ KFL3=ISIGN(KFL3A,KFL1*(2*KTAB1-13))
+ ELSE
+ KFL3A=1
+ IF(KTAB3.GE.8) KFL3A=2
+ IF(KTAB3.GE.11) KFL3A=3
+ IF(KTAB3.GE.16) KFL3A=4
+ KFL3B=(KTAB3-6-KFL3A*(KFL3A-2))/2
+ KFL3=1000*KFL3A+100*KFL3B+1
+ IF(KFL3A.EQ.KFL3B.OR.KTAB3.NE.6+KFL3A*(KFL3A-2)+2*KFL3B) KFL3=
+ & KFL3+2
+ KFL3=ISIGN(KFL3,KFL1*(13-2*KTAB1))
+ ENDIF
+
+C...Reconstruct meson code.
+ IF(KFL3A.EQ.KFL1A.AND.KFL3B.EQ.KFL1B.AND.(KFL3A.LE.3.OR.
+ &KFL3B.NE.0)) THEN
+ RFL=PYR(0)*(PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
+ & 25*KTABS)+PARF(145+80*KTAB1+25*KTABS))
+ KF=110+2*KTABS+1
+ IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)) KF=220+2*KTABS+1
+ IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
+ & 25*KTABS)) KF=330+2*KTABS+1
+ ELSEIF(KTAB1.LE.6.AND.KTAB3.LE.6) THEN
+ KFLA=MAX(KTAB1,KTAB3)
+ KFLB=MIN(KTAB1,KTAB3)
+ KFS=ISIGN(1,KFL1)
+ IF(KFLA.NE.KF1A) KFS=-KFS
+ KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
+ ELSEIF(KTAB1.GE.7.AND.KTAB3.GE.7) THEN
+ KFS=ISIGN(1,KFL1)
+ IF(KFL1A.EQ.KFL3A) THEN
+ KFLA=MAX(KFL1B,KFL3B)
+ KFLB=MIN(KFL1B,KFL3B)
+ IF(KFLA.NE.KFL1B) KFS=-KFS
+ ELSEIF(KFL1A.EQ.KFL3B) THEN
+ KFLA=KFL3A
+ KFLB=KFL1B
+ KFS=-KFS
+ ELSEIF(KFL1B.EQ.KFL3A) THEN
+ KFLA=KFL1A
+ KFLB=KFL3B
+ ELSEIF(KFL1B.EQ.KFL3B) THEN
+ KFLA=MAX(KFL1A,KFL3A)
+ KFLB=MIN(KFL1A,KFL3A)
+ IF(KFLA.NE.KFL1A) KFS=-KFS
+ ELSE
+ CALL PYERRM(2,'(PYKFDI:) no matching flavours for qq -> qq')
+ GOTO 100
+ ENDIF
+ KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
+
+C...Reconstruct baryon code.
+ ELSE
+ IF(KTAB1.GE.7) THEN
+ KFLA=KFL3A
+ KFLB=KFL1A
+ KFLC=KFL1B
+ ELSE
+ KFLA=KFL1A
+ KFLB=KFL3A
+ KFLC=KFL3B
+ ENDIF
+ KFLD=MAX(KFLA,KFLB,KFLC)
+ KFLF=MIN(KFLA,KFLB,KFLC)
+ KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
+ IF(KTABS.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+2,KFL1)
+ IF(KTABS.GE.1) KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+2*KTABS,KFL1)
+ ENDIF
+
+C...Check that constructed flavour code is an allowed one.
+ IF(KFL2.NE.0) KFL3=0
+ KC=PYCOMP(KF)
+ IF(KC.EQ.0) THEN
+ CALL PYERRM(2,'(PYKFDI:) user-defined flavour probabilities '//
+ & 'failed')
+ GOTO 100
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYNMES
+C...Generates number of popcorn mesons and stores some relevant
+C...parameters.
+
+ SUBROUTINE PYNMES(KFDIQ)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+ MSTU(121)=0
+ IF(MSTJ(12).LT.2) RETURN
+
+C..Old version: Get 1 or 0 popcorn mesons
+ IF(MSTJ(12).LT.5)THEN
+ POPWT=PARF(131)
+ IF(KFDIQ.NE.0) THEN
+ KFDIQA=IABS(KFDIQ)
+ KFA=MOD(KFDIQA/1000,10)
+ KFB=MOD(KFDIQA/100,10)
+ KFS=MOD(KFDIQA,10)
+ POPWT=PARF(132)
+ IF(KFA.EQ.3) POPWT=PARF(133)
+ IF(KFB.EQ.3) POPWT=PARF(134)
+ IF(KFS.EQ.1) POPWT=POPWT*SQRT(PARJ(4))
+ ENDIF
+ MSTU(121)=INT(POPWT/(1D0+POPWT)+PYR(0))
+ RETURN
+ ENDIF
+
+C..New version: Store popcorn- or rank 0 diquark parameters
+ MSTU(122)=170
+ PARF(193)=PARJ(8)
+ PARF(194)=PARF(139)
+ IF(KFDIQ.NE.0) THEN
+ MSTU(122)=180
+ PARF(193)=PARJ(10)
+ PARF(194)=PARF(140)
+ ENDIF
+ IF(PARF(194).LT.1D-5.OR.PARF(194).GT.1D0-1D-5) THEN
+ IF(PARF(194).GT.1D0-1D-5) CALL PYERRM(9,
+ & '(PYNMES:) Neglecting too large popcorn possibility')
+ RETURN
+ ENDIF
+
+C..New version: Get number of popcorn mesons
+ 100 RTST=PYR(0)
+ MSTU(121)=-1
+ 110 MSTU(121)=MSTU(121)+1
+ RTST=RTST/PARF(194)
+ IF(RTST.LT.1D0) GOTO 110
+ IF(KFDIQ.EQ.0.AND.PYR(0)*(2D0+PARF(135)).GT.
+ & (2D0+PARF(135)*PARF(138)**MSTU(121))) GOTO 100
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYKFIN
+C...Precalculates a set of diquark and popcorn weights.
+C.. (Results stored in order SU0,US0,SS1,UU1,SU1,US1,UD1)
+
+ SUBROUTINE PYKFIN
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+ DIMENSION SU6(12),SU6M(7)
+
+ MSTU(123)=1
+C..Curtain tunneling factor T(D,q)/T(ud0,u).
+ IF(MSTJ(12).GE.5) THEN
+ PMUD0=PYMASS(2101)
+ PMUD1=PYMASS(2103)-PMUD0
+ PMUS0=PYMASS(3201)-PMUD0
+ PMUS1=PYMASS(3203)-PMUS0-PMUD0
+ PMSS1=PYMASS(3303)-PMUS0-PMUD0
+ PARF(151)=EXP(-(PARJ(9)+PARJ(8))*PMUS0-PARJ(9)*PARF(191))
+ PARF(152)=EXP(-PARJ(8)*PMUS0)
+ PARF(153)=EXP(-(PARJ(9)+PARJ(8))*PMSS1)*PARF(151)
+ PARF(154)=EXP(-PARJ(8)*PMUD1)
+ PARF(155)=EXP(-(PARJ(9)+PARJ(8))*PMUS1)*PARF(151)
+ PARF(156)=EXP(-PARJ(8)*PMUS1)*PARF(152)
+ PARF(157)=PARF(154)
+ ELSE
+ PAR2M=SQRT(PARJ(2))
+ PAR3M=SQRT(PARJ(3))
+ PAR4M=SQRT(PARJ(4))
+ PARF(151)=PAR2M*PAR3M
+ PARF(152)=PAR3M
+ PARF(153)=PAR2M*PARJ(3)*PAR4M
+ PARF(154)=PAR4M
+ PARF(155)=PAR4M*PARF(151)
+ PARF(156)=PAR4M*PARF(152)
+ PARF(157)=PAR4M
+ ENDIF
+
+C.. Total tunneling factor tau(D,q)=T*vertex*spin.
+ PARF(161)=PARF(151)
+ PARF(162)=PARJ(2)*PARF(152)
+ PARF(163)=PARJ(2)*6D0*PARF(153)
+ PARF(164)=6D0*PARF(154)
+ PARF(165)=3D0*PARF(155)
+ PARF(166)=PARJ(2)*3D0*PARF(156)
+ PARF(167)=3D0*PARF(157)
+
+ DO 100 I=1,7
+ PARF(150+I)=PARF(150+I)*PARF(160+I)
+ 100 CONTINUE
+
+C..Modified SU(6) factors.
+ PARF(146)=1D0
+ IF(MSTJ(12).GE.5) PARF(146)=3D0*PARJ(18)/(2D0*PARJ(18)+1D0)
+ IF(PARJ(18).LT.1D0-1D-5.AND.MSTJ(12).LT.5) CALL PYERRM(9,
+ & '(PYKFIN:) PARJ(18)<1 combined with 0<MSTJ(12)<5 option')
+ DO 110 I=1,6
+ SU6(I)=PARF(60+I)
+ SU6(6+I)=SU6(I)*4*PARF(146)/(3*PARF(146)+1)
+ 110 CONTINUE
+ SU6(8)=SU6(2)*4/(3*PARF(146)+1)
+ SU6(6)=SU6(6)*(3+PARF(146))/(3*PARF(146)+1)
+ DO 120 I=1,6
+ SU6(I)=SU6(I)+PARJ(18)*PARF(70+I)
+ SU6(6+I)=SU6(6+I)+PARJ(18)*PARF(70+I)
+ 120 CONTINUE
+
+C..Total diquark quark*SU(6).
+ PUD0=(2D0*SU6(1)+PARJ(2)*SU6(8))
+ PARF(171)=(SU6(7)+SU6(2)+PARJ(2)*SU6(1))/PUD0
+ PARF(172)=PARF(171)
+ PARF(173)=(2D0*SU6(4)+PARJ(2)*SU6(3))/PUD0
+ PARF(174)=(SU6(3)+SU6(4)+PARJ(2)*SU6(10))/PUD0
+ PARF(175)=(SU6(11)+SU6(6)+PARJ(2)*SU6(5))/PUD0
+ PARF(176)=PARF(175)
+ PARF(177)=(2D0*SU6(5)+PARJ(2)*SU6(12))/PUD0
+
+C..SU(6)max q q' s,c,b
+ SU6MUD =MAX(SU6(1) , SU6(8) )
+ SU6M(7)=MAX(SU6(5) , SU6(12))
+ SU6M(1)=MAX(SU6(7) ,SU6(2),SU6MUD )
+ SU6M(4)=MAX(SU6(3) ,SU6(4),SU6(10))
+ SU6M(5)=MAX(SU6(11),SU6(6),SU6M(7))
+ SU6M(2)=SU6M(1)
+ SU6M(3)=SU6M(4)
+ SU6M(6)=SU6M(5)
+
+ IF(MSTJ(12).GE.5)THEN
+C..New version: tau for rank 0 diquark.
+ PARF(181)=EXP(-PARJ(10)*PMUS0)
+ PARF(182)=PARJ(2)*PARF(181)
+ PARF(183)=6D0*PARJ(2)*EXP(-PARJ(10)*PMSS1)*PARF(181)
+ PARF(184)=3D0*EXP(-PARJ(10)*PMUD1)
+ PARF(185)=3D0*EXP(-PARJ(10)*PMUS1)*PARF(181)
+ PARF(186)=PARJ(2)*PARF(185)
+ PARF(187)=2D0*PARF(184)
+
+C..New version: s/u curtain ratios.
+ WU=1D0+PARF(167)+PARF(162)+PARF(166)+PARF(164)
+ PARF(135)=(2D0*(PARF(161)+PARF(165))+PARF(163))/WU
+ WU=1D0+PARF(187)+PARF(182)+PARF(186)+PARF(184)
+ PARF(136)=(2D0*(PARF(181)+PARF(185))+PARF(183))/WU
+ PARF(137)=(PARF(181)+PARF(185))*
+ & (2D0+PARF(183)/(2D0*PARF(185)))/WU
+ ELSE
+C..Old version: Shuffle PARJ(7) into tau
+ PARF(162)=PARF(162)*PARJ(7)
+ PARF(163)=PARF(163)*PARJ(7)
+ PARF(166)=PARF(166)*PARJ(7)
+
+C..Old version: s/u curtain ratios.
+ WU=1D0+PARF(167)+PARF(162)+PARF(166)+PARF(164)
+ PARF(135)=(2D0*(PARF(161)+PARF(165))+PARF(163))/WU
+ PARF(136)=PARF(135)*PARJ(6)*PARF(161)/PARF(162)
+ PARF(137)=(1D0+PARF(167))*(2D0+PARF(162))/WU
+ ENDIF
+
+C..Combine SU(6), SU(6)max, tau and T into proper products
+ DO 140 I=1,7
+ PARF(180+I)=PARF(180+I)*PARF(170+I)
+ PARF(170+I)=PARF(170+I)*PARF(160+I)
+ PARF(160+I)=PARF(160+I)*SU6M(I)/SU6MUD
+ PARF(150+I)=PARF(150+I)*SU6M(I)/SU6MUD
+ 140 CONTINUE
+
+C..Store SU(6)max, in order UD0,UD1,US0,US1,QQ1
+ PARF(141)=SU6MUD
+ PARF(142)=SU6M(7)
+ PARF(143)=SU6M(1)
+ PARF(144)=SU6M(5)
+ PARF(145)=SU6M(3)
+
+ IF(MSTJ(12).LT.5)THEN
+C.. Old version: Resulting popcorn weights.
+ PARF(138)=PARJ(6)
+ WS=PARF(135)*PARF(138)
+ WQ=WU*PARJ(5)/3D0
+ PARF(132)=WQ*PARF(167)/PARF(157)
+ PARF(133)=WQ*(PARF(166)/PARF(156)+WS*PARF(165)/PARF(155))/2D0
+ PARF(134)=WQ*WS*PARF(163)/PARF(153)
+ PARF(131)=WQ*((1D0+PARF(167))*(1D0+PARF(162)+WS*PARF(161))+
+ & PARF(164)+WS*PARF(163)/2D0)/
+ & ((1D0+PARF(157))*(1D0+2D0*PARF(152))+PARF(154)+PARF(153)/2D0)
+ ELSE
+C..New version: Store weights for popcorn mesons,
+C..get prel. popcorn weights.
+ DO 150 IPOS=201,1400
+ PARF(IPOS)=0D0
+ 150 CONTINUE
+ DO 160 I=138,140
+ PARF(I)=0D0
+ 160 CONTINUE
+ IPOS=200
+ PARF(193)=PARJ(8)
+ DO 240 MR=170,180,10
+ IF(MR.EQ.180) PARF(193)=PARJ(10)
+ SQWT=2D0*(PARF(MR+2)+PARF(MR+6))/(1D0+PARF(MR+7)+PARF(MR+4))
+ QQWT=PARF(MR+4)/(1D0+PARF(MR+7)+PARF(MR+4))
+ DO 230 NMES=0,1
+ IF(NMES.EQ.1) SQWT=PARJ(2)
+ DO 220 KFQPOP=1,4
+ IF(MR.EQ.170.AND.KFQPOP.GT.3) GOTO 220
+ IF(NMES.EQ.0.AND.KFQPOP.GE.3)THEN
+ SQWT=PARF(MR+3)/(PARF(MR+1)+PARF(MR+5))
+ QQWT=0.5D0
+ IF(MR.EQ.170) PARF(193)=PARJ(8)+PARJ(9)
+ IF(KFQPOP.EQ.4) SQWT=SQWT*(1D0/PARF(185)+1D0)/2D0
+ ENDIF
+ DO 210 KFQOLD =1,5
+ IF(MR.EQ.170.AND.KFQOLD.GT.3) GOTO 210
+ IF(MR*NMES.EQ.170.AND.KFQPOP.EQ.1) GOTO 210
+ IF(MR*NMES.EQ.180.AND.KFQPOP.NE.1) GOTO 210
+ WTTOT=0D0
+ WTFAIL=0D0
+ DO 190 KMUL=0,5
+ PJWT=PARJ(12+KMUL)
+ IF(KMUL.EQ.0) PJWT=1D0-PARJ(14)
+ IF(KMUL.EQ.1) PJWT=1D0-PARJ(15)-PARJ(16)-PARJ(17)
+ IF(PJWT.LE.0D0) GOTO 190
+ IF(PJWT.GT.1D0) PJWT=1D0
+ IMES=5*KMUL
+ IMIX=2*KFQOLD+10*KMUL
+ KFJ=2*KMUL+1
+ IF(KMUL.EQ.2) KFJ=10003
+ IF(KMUL.EQ.3) KFJ=10001
+ IF(KMUL.EQ.4) KFJ=20003
+ IF(KMUL.EQ.5) KFJ=5
+ DO 180 KFQVER =1,3
+ KFLA=MAX(KFQOLD,KFQVER)
+ KFLB=MIN(KFQOLD,KFQVER)
+ SWT=PARJ(11+KFLA/3+KFLA/4)
+ IF(KMUL.EQ.0.OR.KMUL.EQ.2) SWT=1D0-SWT
+ SWT=SWT*PJWT
+ QWT=SQWT/(2D0+SQWT)
+ IF(KFQVER.LT.3)THEN
+ IF(KFQVER.EQ.KFQPOP) QWT=(1D0-QWT)*QQWT
+ IF(KFQVER.NE.KFQPOP) QWT=(1D0-QWT)*(1D0-QQWT)
+ ENDIF
+ IF(KFQVER.NE.KFQOLD)THEN
+ IMES=IMES+1
+ KFM=100*KFLA+10*KFLB+KFJ
+ PMM=PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
+ PARF(IPOS+IMES)=QWT*SWT*EXP(-PARF(193)*PMM)
+ WTTOT=WTTOT+PARF(IPOS+IMES)
+ ELSE
+ DO 170 ID=3,5
+ IF(ID.EQ.3) DWT=1D0-PARF(IMIX-1)
+ IF(ID.EQ.4) DWT=PARF(IMIX-1)-PARF(IMIX)
+ IF(ID.EQ.5) DWT=PARF(IMIX)
+ KFM=110*(ID-2)+KFJ
+ PMM=PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
+ PARF(IPOS+5*KMUL+ID)=QWT*SWT*DWT*EXP(-PARF(193)*PMM)
+ IF(KMUL.EQ.0.AND.ID.GT.3) THEN
+ WTFAIL=WTFAIL+QWT*SWT*DWT*(1D0-PARJ(21+ID))
+ PARF(IPOS+5*KMUL+ID)=
+ & PARF(IPOS+5*KMUL+ID)*PARJ(21+ID)
+ ENDIF
+ WTTOT=WTTOT+PARF(IPOS+5*KMUL+ID)
+ 170 CONTINUE
+ ENDIF
+ 180 CONTINUE
+ 190 CONTINUE
+ DO 200 IMES=1,30
+ PARF(IPOS+IMES)=PARF(IPOS+IMES)/(1D0-WTFAIL)
+ 200 CONTINUE
+ IF(MR.EQ.180) PARF(140)=
+ & MAX(PARF(140),WTTOT/(1D0-WTFAIL))
+ IF(MR.EQ.170) PARF(139-KFQPOP/3)=
+ & MAX(PARF(139-KFQPOP/3),WTTOT/(1D0-WTFAIL))
+ IPOS=IPOS+30
+ 210 CONTINUE
+ 220 CONTINUE
+ 230 CONTINUE
+ 240 CONTINUE
+ IF(PARF(139).GT.1D-10) PARF(138)=PARF(138)/PARF(139)
+ MSTU(121)=0
+
+ PARF(186)=PARF(186)/PARF(182)
+ PARF(185)=PARF(185)/PARF(181)
+ ENDIF
+
+C..Recombine diquark weights to flavour and spin ratios
+ DO 250 I=150,170,10
+ WSWQ=(2D0*(PARF(I+1)+PARF(I+5))+PARF(I+3))/
+ & (1D0+PARF(I+7)+PARF(I+4)+PARF(I+2)+PARF(I+6))
+ WSSWSQ=PARF(I+3)/(PARF(I+1)+PARF(I+5))
+ WQSWQQ=2D0*(PARF(I+2)+PARF(I+6))/(1D0+PARF(I+7)+PARF(I+4))
+ WUUWQQ=PARF(I+4)/(1D0+PARF(I+7)+PARF(I+4))
+ PARF(I+5)=PARF(I+5)/PARF(I+1)
+ PARF(I+6)=PARF(I+6)/PARF(I+2)
+ PARF(I+1)=WSWQ
+ PARF(I+2)=WQSWQQ
+ PARF(I+3)=WSSWSQ
+ PARF(I+4)=WUUWQQ
+ 250 CONTINUE
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPTDI
+C...Generates transverse momentum according to a Gaussian.
+
+ SUBROUTINE PYPTDI(KFL,PX,PY)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+C...Generate p_T and azimuthal angle, gives p_x and p_y.
+ KFLA=IABS(KFL)
+ PT=PARJ(21)*SQRT(-LOG(MAX(1D-10,PYR(0))))
+ IF(PARJ(23).GT.PYR(0)) PT=PARJ(24)*PT
+ IF(MSTJ(91).EQ.1) PT=PARJ(22)*PT
+ IF(KFLA.EQ.0.AND.MSTJ(13).LE.0) PT=0D0
+ PHI=PARU(2)*PYR(0)
+ PX=PT*COS(PHI)
+ PY=PT*SIN(PHI)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYZDIS
+C...Generates the longitudinal splitting variable z.
+
+ SUBROUTINE PYZDIS(KFL1,KFL2,PR,Z)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+C...Check if heavy flavour fragmentation.
+ KFLA=IABS(KFL1)
+ KFLB=IABS(KFL2)
+ KFLH=KFLA
+ IF(KFLA.GE.10) KFLH=MOD(KFLA/1000,10)
+
+C...Lund symmetric scaling function: determine parameters of shape.
+ IF(MSTJ(11).EQ.1.OR.(MSTJ(11).EQ.3.AND.KFLH.LE.3).OR.
+ &MSTJ(11).GE.4) THEN
+ FA=PARJ(41)
+ IF(MSTJ(91).EQ.1) FA=PARJ(43)
+ IF(KFLB.GE.10) FA=FA+PARJ(45)
+ FBB=PARJ(42)
+ IF(MSTJ(91).EQ.1) FBB=PARJ(44)
+ FB=FBB*PR
+ FC=1D0
+ IF(KFLA.GE.10) FC=FC-PARJ(45)
+ IF(KFLB.GE.10) FC=FC+PARJ(45)
+ IF(MSTJ(11).GE.4.AND.KFLH.GE.4.AND.KFLH.LE.5) THEN
+ FRED=PARJ(46)
+ IF(MSTJ(11).EQ.5.AND.KFLH.EQ.5) FRED=PARJ(47)
+ FC=FC+FRED*FBB*PARF(100+KFLH)**2
+ ELSEIF(MSTJ(11).GE.4.AND.KFLH.GE.6.AND.KFLH.LE.8) THEN
+ FRED=PARJ(46)
+ IF(MSTJ(11).EQ.5) FRED=PARJ(48)
+ FC=FC+FRED*FBB*PMAS(KFLH,1)**2
+ ENDIF
+ MC=1
+ IF(ABS(FC-1D0).GT.0.01D0) MC=2
+
+C...Determine position of maximum. Special cases for a = 0 or a = c.
+ IF(FA.LT.0.02D0) THEN
+ MA=1
+ ZMAX=1D0
+ IF(FC.GT.FB) ZMAX=FB/FC
+ ELSEIF(ABS(FC-FA).LT.0.01D0) THEN
+ MA=2
+ ZMAX=FB/(FB+FC)
+ ELSE
+ MA=3
+ ZMAX=0.5D0*(FB+FC-SQRT((FB-FC)**2+4D0*FA*FB))/(FC-FA)
+ IF(ZMAX.GT.0.9999D0.AND.FB.GT.100D0) ZMAX=MIN(ZMAX,1D0-FA/FB)
+ ENDIF
+
+C...Subdivide z range if distribution very peaked near endpoint.
+ MMAX=2
+ IF(ZMAX.LT.0.1D0) THEN
+ MMAX=1
+ ZDIV=2.75D0*ZMAX
+ IF(MC.EQ.1) THEN
+ FINT=1D0-LOG(ZDIV)
+ ELSE
+ ZDIVC=ZDIV**(1D0-FC)
+ FINT=1D0+(1D0-1D0/ZDIVC)/(FC-1D0)
+ ENDIF
+ ELSEIF(ZMAX.GT.0.85D0.AND.FB.GT.1D0) THEN
+ MMAX=3
+ FSCB=SQRT(4D0+(FC/FB)**2)
+ ZDIV=FSCB-1D0/ZMAX-(FC/FB)*LOG(ZMAX*0.5D0*(FSCB+FC/FB))
+ IF(MA.GE.2) ZDIV=ZDIV+(FA/FB)*LOG(1D0-ZMAX)
+ ZDIV=MIN(ZMAX,MAX(0D0,ZDIV))
+ FINT=1D0+FB*(1D0-ZDIV)
+ ENDIF
+
+C...Choice of z, preweighted for peaks at low or high z.
+ 100 Z=PYR(0)
+ FPRE=1D0
+ IF(MMAX.EQ.1) THEN
+ IF(FINT*PYR(0).LE.1D0) THEN
+ Z=ZDIV*Z
+ ELSEIF(MC.EQ.1) THEN
+ Z=ZDIV**Z
+ FPRE=ZDIV/Z
+ ELSE
+ Z=(ZDIVC+Z*(1D0-ZDIVC))**(1D0/(1D0-FC))
+ FPRE=(ZDIV/Z)**FC
+ ENDIF
+ ELSEIF(MMAX.EQ.3) THEN
+ IF(FINT*PYR(0).LE.1D0) THEN
+ Z=ZDIV+LOG(Z)/FB
+ FPRE=EXP(FB*(Z-ZDIV))
+ ELSE
+ Z=ZDIV+Z*(1D0-ZDIV)
+ ENDIF
+ ENDIF
+
+C...Weighting according to correct formula.
+ IF(Z.LE.0D0.OR.Z.GE.1D0) GOTO 100
+ FEXP=FC*LOG(ZMAX/Z)+FB*(1D0/ZMAX-1D0/Z)
+ IF(MA.GE.2) FEXP=FEXP+FA*LOG((1D0-Z)/(1D0-ZMAX))
+ FVAL=EXP(MAX(-50D0,MIN(50D0,FEXP)))
+ IF(FVAL.LT.PYR(0)*FPRE) GOTO 100
+
+C...Generate z according to Field-Feynman, SLAC, (1-z)**c OR z**c.
+ ELSE
+ FC=PARJ(50+MAX(1,KFLH))
+ IF(MSTJ(91).EQ.1) FC=PARJ(59)
+ 110 Z=PYR(0)
+ IF(FC.GE.0D0.AND.FC.LE.1D0) THEN
+ IF(FC.GT.PYR(0)) Z=1D0-Z**(1D0/3D0)
+ ELSEIF(FC.GT.-1.AND.FC.LT.0D0) THEN
+ IF(-4D0*FC*Z*(1D0-Z)**2.LT.PYR(0)*((1D0-Z)**2-FC*Z)**2)
+ & GOTO 110
+ ELSE
+ IF(FC.GT.0D0) Z=1D0-Z**(1D0/FC)
+ IF(FC.LT.0D0) Z=Z**(-1D0/FC)
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSHOW
+C...Generates timelike parton showers from given partons.
+
+ SUBROUTINE PYSHOW(IP1,IP2,QMAX)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION PMTH(5,50),PS(5),PMA(4),PMSD(4),IEP(4),IPA(4),
+ &KFLA(4),KFLD(4),KFL(4),ITRY(4),ISI(4),ISL(4),DP(4),DPT(5,4),
+ &KSH(0:40),KCII(2),NIIS(2),IIIS(2,2),THEIIS(2,2),PHIIIS(2,2),
+ &ISII(2)
+
+C...Initialization of cutoff masses etc.
+ IF(MSTJ(41).LE.0.OR.(MSTJ(41).EQ.1.AND.QMAX.LE.PARJ(82)).OR.
+ &QMAX.LE.MIN(PARJ(82),PARJ(83))) RETURN
+ DO 100 IFL=0,40
+ KSH(IFL)=0
+ 100 CONTINUE
+ KSH(21)=1
+ PMTH(1,21)=PYMASS(21)
+ PMTH(2,21)=SQRT(PMTH(1,21)**2+0.25D0*PARJ(82)**2)
+ PMTH(3,21)=2D0*PMTH(2,21)
+ PMTH(4,21)=PMTH(3,21)
+ PMTH(5,21)=PMTH(3,21)
+ PMTH(1,22)=PYMASS(22)
+ PMTH(2,22)=SQRT(PMTH(1,22)**2+0.25D0*PARJ(83)**2)
+ PMTH(3,22)=2D0*PMTH(2,22)
+ PMTH(4,22)=PMTH(3,22)
+ PMTH(5,22)=PMTH(3,22)
+ PMQTH1=PARJ(82)
+ IF(MSTJ(41).GE.2) PMQTH1=MIN(PARJ(82),PARJ(83))
+ PMQTH2=PMTH(2,21)
+ IF(MSTJ(41).GE.2) PMQTH2=MIN(PMTH(2,21),PMTH(2,22))
+ DO 110 IFL=1,8
+ KSH(IFL)=1
+ PMTH(1,IFL)=PYMASS(IFL)
+ PMTH(2,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PMQTH1**2)
+ PMTH(3,IFL)=PMTH(2,IFL)+PMQTH2
+ PMTH(4,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(82)**2)+PMTH(2,21)
+ PMTH(5,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(83)**2)+PMTH(2,22)
+ 110 CONTINUE
+ DO 120 IFL=11,17,2
+ IF(MSTJ(41).GE.2) KSH(IFL)=1
+ PMTH(1,IFL)=PYMASS(IFL)
+ PMTH(2,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(83)**2)
+ PMTH(3,IFL)=PMTH(2,IFL)+PMTH(2,22)
+ PMTH(4,IFL)=PMTH(3,IFL)
+ PMTH(5,IFL)=PMTH(3,IFL)
+ 120 CONTINUE
+ PT2MIN=MAX(0.5D0*PARJ(82),1.1D0*PARJ(81))**2
+ ALAMS=PARJ(81)**2
+ ALFM=LOG(PT2MIN/ALAMS)
+
+C...Store positions of shower initiating partons.
+ IF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.IP2.EQ.0) THEN
+ NPA=1
+ IPA(1)=IP1
+ ELSEIF(MIN(IP1,IP2).GT.0.AND.MAX(IP1,IP2).LE.MIN(N,MSTU(4)-
+ & MSTU(32))) THEN
+ NPA=2
+ IPA(1)=IP1
+ IPA(2)=IP2
+ ELSEIF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.IP2.LT.0
+ & .AND.IP2.GE.-3) THEN
+ NPA=IABS(IP2)
+ DO 130 I=1,NPA
+ IPA(I)=IP1+I-1
+ 130 CONTINUE
+ ELSE
+ CALL PYERRM(12,
+ & '(PYSHOW:) failed to reconstruct showering system')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Check on phase space available for emission.
+ IREJ=0
+ DO 140 J=1,5
+ PS(J)=0D0
+ 140 CONTINUE
+ PM=0D0
+ DO 160 I=1,NPA
+ KFLA(I)=IABS(K(IPA(I),2))
+ PMA(I)=P(IPA(I),5)
+C...Special cutoff masses for t, l, h with variable masses.
+ IFLA=KFLA(I)
+ IF(KFLA(I).GE.6.AND.KFLA(I).LE.8) THEN
+ IFLA=37+KFLA(I)+ISIGN(2,K(IPA(I),2))
+ PMTH(1,IFLA)=PMA(I)
+ PMTH(2,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PMQTH1**2)
+ PMTH(3,IFLA)=PMTH(2,IFLA)+PMQTH2
+ PMTH(4,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PARJ(82)**2)+
+ & PMTH(2,21)
+ PMTH(5,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PARJ(83)**2)+
+ & PMTH(2,22)
+ ENDIF
+ IF(KFLA(I).LE.40) THEN
+ IF(KSH(KFLA(I)).EQ.1) PMA(I)=PMTH(3,IFLA)
+ ENDIF
+ PM=PM+PMA(I)
+ IF(KFLA(I).GT.40) THEN
+ IREJ=IREJ+1
+ ELSE
+ IF(KSH(KFLA(I)).EQ.0.OR.PMA(I).GT.QMAX) IREJ=IREJ+1
+ ENDIF
+ DO 150 J=1,4
+ PS(J)=PS(J)+P(IPA(I),J)
+ 150 CONTINUE
+ 160 CONTINUE
+ IF(IREJ.EQ.NPA) RETURN
+ PS(5)=SQRT(MAX(0D0,PS(4)**2-PS(1)**2-PS(2)**2-PS(3)**2))
+ IF(NPA.EQ.1) PS(5)=PS(4)
+ IF(PS(5).LE.PM+PMQTH1) RETURN
+
+C...Check if 3-jet matrix elements to be used.
+ M3JC=0
+ IF(NPA.EQ.2.AND.MSTJ(47).GE.1) THEN
+ IF(KFLA(1).GE.1.AND.KFLA(1).LE.8.AND.KFLA(2).GE.1.AND.
+ & KFLA(2).LE.8) M3JC=1
+ IF((KFLA(1).EQ.11.OR.KFLA(1).EQ.13.OR.KFLA(1).EQ.15.OR.
+ & KFLA(1).EQ.17).AND.KFLA(2).EQ.KFLA(1)) M3JC=1
+ IF((KFLA(1).EQ.11.OR.KFLA(1).EQ.13.OR.KFLA(1).EQ.15.OR.
+ & KFLA(1).EQ.17).AND.KFLA(2).EQ.KFLA(1)+1) M3JC=1
+ IF((KFLA(1).EQ.12.OR.KFLA(1).EQ.14.OR.KFLA(1).EQ.16.OR.
+ & KFLA(1).EQ.18).AND.KFLA(2).EQ.KFLA(1)-1) M3JC=1
+ IF(MSTJ(47).EQ.2.OR.MSTJ(47).EQ.4) M3JC=1
+ M3JCM=0
+ IF(M3JC.EQ.1.AND.MSTJ(47).GE.3.AND.KFLA(1).EQ.KFLA(2)) THEN
+ M3JCM=1
+ QME=(2D0*PMTH(1,KFLA(1))/PS(5))**2
+ ENDIF
+ ENDIF
+
+C...Find if interference with initial state partons.
+ MIIS=0
+ IF(MSTJ(50).GE.1.AND.MSTJ(50).LE.3.AND.NPA.EQ.2) MIIS=MSTJ(50)
+ IF(MIIS.NE.0) THEN
+ DO 180 I=1,2
+ KCII(I)=0
+ KCA=PYCOMP(KFLA(I))
+ IF(KCA.NE.0) KCII(I)=KCHG(KCA,2)*ISIGN(1,K(IPA(I),2))
+ NIIS(I)=0
+ IF(KCII(I).NE.0) THEN
+ DO 170 J=1,2
+ ICSI=MOD(K(IPA(I),3+J)/MSTU(5),MSTU(5))
+ IF(ICSI.GT.0.AND.ICSI.NE.IPA(1).AND.ICSI.NE.IPA(2).AND.
+ & (KCII(I).EQ.(-1)**(J+1).OR.KCII(I).EQ.2)) THEN
+ NIIS(I)=NIIS(I)+1
+ IIIS(I,NIIS(I))=ICSI
+ ENDIF
+ 170 CONTINUE
+ ENDIF
+ 180 CONTINUE
+ IF(NIIS(1)+NIIS(2).EQ.0) MIIS=0
+ ENDIF
+
+C...Boost interfering initial partons to rest frame
+C...and reconstruct their polar and azimuthal angles.
+ IF(MIIS.NE.0) THEN
+ DO 200 I=1,2
+ DO 190 J=1,5
+ K(N+I,J)=K(IPA(I),J)
+ P(N+I,J)=P(IPA(I),J)
+ V(N+I,J)=0D0
+ 190 CONTINUE
+ 200 CONTINUE
+ DO 220 I=3,2+NIIS(1)
+ DO 210 J=1,5
+ K(N+I,J)=K(IIIS(1,I-2),J)
+ P(N+I,J)=P(IIIS(1,I-2),J)
+ V(N+I,J)=0D0
+ 210 CONTINUE
+ 220 CONTINUE
+ DO 240 I=3+NIIS(1),2+NIIS(1)+NIIS(2)
+ DO 230 J=1,5
+ K(N+I,J)=K(IIIS(2,I-2-NIIS(1)),J)
+ P(N+I,J)=P(IIIS(2,I-2-NIIS(1)),J)
+ V(N+I,J)=0D0
+ 230 CONTINUE
+ 240 CONTINUE
+ CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),0D0,0D0,-PS(1)/PS(4),
+ & -PS(2)/PS(4),-PS(3)/PS(4))
+ PHI=PYANGL(P(N+1,1),P(N+1,2))
+ CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),0D0,-PHI,0D0,0D0,0D0)
+ THE=PYANGL(P(N+1,3),P(N+1,1))
+ CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),-THE,0D0,0D0,0D0,0D0)
+ DO 250 I=3,2+NIIS(1)
+ THEIIS(1,I-2)=PYANGL(P(N+I,3),SQRT(P(N+I,1)**2+P(N+I,2)**2))
+ PHIIIS(1,I-2)=PYANGL(P(N+I,1),P(N+I,2))
+ 250 CONTINUE
+ DO 260 I=3+NIIS(1),2+NIIS(1)+NIIS(2)
+ THEIIS(2,I-2-NIIS(1))=PARU(1)-PYANGL(P(N+I,3),
+ & SQRT(P(N+I,1)**2+P(N+I,2)**2))
+ PHIIIS(2,I-2-NIIS(1))=PYANGL(P(N+I,1),P(N+I,2))
+ 260 CONTINUE
+ ENDIF
+
+C...Define imagined single initiator of shower for parton system.
+ NS=N
+ IF(N.GT.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(NPA.GE.2) THEN
+ K(N+1,1)=11
+ K(N+1,2)=21
+ K(N+1,3)=0
+ K(N+1,4)=0
+ K(N+1,5)=0
+ P(N+1,1)=0D0
+ P(N+1,2)=0D0
+ P(N+1,3)=0D0
+ P(N+1,4)=PS(5)
+ P(N+1,5)=PS(5)
+ V(N+1,5)=PS(5)**2
+ N=N+1
+ ENDIF
+
+C...Loop over partons that may branch.
+ NEP=NPA
+ IM=NS
+ IF(NPA.EQ.1) IM=NS-1
+ 270 IM=IM+1
+ IF(N.GT.NS) THEN
+ IF(IM.GT.N) GOTO 510
+ KFLM=IABS(K(IM,2))
+ IF(KFLM.GT.40) GOTO 270
+ IF(KSH(KFLM).EQ.0) GOTO 270
+ IFLM=KFLM
+ IF(KFLM.GE.6.AND.KFLM.LE.8) IFLM=37+KFLM+ISIGN(2,K(IM,2))
+ IF(P(IM,5).LT.PMTH(2,IFLM)) GOTO 270
+ IGM=K(IM,3)
+ ELSE
+ IGM=-1
+ ENDIF
+ IF(N+NEP.GT.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Position of aunt (sister to branching parton).
+C...Origin and flavour of daughters.
+ IAU=0
+ IF(IGM.GT.0) THEN
+ IF(K(IM-1,3).EQ.IGM) IAU=IM-1
+ IF(N.GE.IM+1.AND.K(IM+1,3).EQ.IGM) IAU=IM+1
+ ENDIF
+ IF(IGM.GE.0) THEN
+ K(IM,4)=N+1
+ DO 280 I=1,NEP
+ K(N+I,3)=IM
+ 280 CONTINUE
+ ELSE
+ K(N+1,3)=IPA(1)
+ ENDIF
+ IF(IGM.LE.0) THEN
+ DO 290 I=1,NEP
+ K(N+I,2)=K(IPA(I),2)
+ 290 CONTINUE
+ ELSEIF(KFLM.NE.21) THEN
+ K(N+1,2)=K(IM,2)
+ K(N+2,2)=K(IM,5)
+ ELSEIF(K(IM,5).EQ.21) THEN
+ K(N+1,2)=21
+ K(N+2,2)=21
+ ELSE
+ K(N+1,2)=K(IM,5)
+ K(N+2,2)=-K(IM,5)
+ ENDIF
+
+C...Reset flags on daughers and tries made.
+ DO 300 IP=1,NEP
+ K(N+IP,1)=3
+ K(N+IP,4)=0
+ K(N+IP,5)=0
+ KFLD(IP)=IABS(K(N+IP,2))
+ IF(KCHG(PYCOMP(KFLD(IP)),2).EQ.0) K(N+IP,1)=1
+ ITRY(IP)=0
+ ISL(IP)=0
+ ISI(IP)=0
+ IF(KFLD(IP).LE.40) THEN
+ IF(KSH(KFLD(IP)).EQ.1) ISI(IP)=1
+ ENDIF
+ 300 CONTINUE
+ ISLM=0
+
+C...Maximum virtuality of daughters.
+ IF(IGM.LE.0) THEN
+ DO 310 I=1,NPA
+ IF(NPA.GE.3) P(N+I,4)=(PS(4)*P(IPA(I),4)-PS(1)*P(IPA(I),1)-
+ & PS(2)*P(IPA(I),2)-PS(3)*P(IPA(I),3))/PS(5)
+ P(N+I,5)=MIN(QMAX,PS(5))
+ IF(NPA.GE.3) P(N+I,5)=MIN(P(N+I,5),P(N+I,4))
+ IF(ISI(I).EQ.0) P(N+I,5)=P(IPA(I),5)
+ 310 CONTINUE
+ ELSE
+ IF(MSTJ(43).LE.2) PEM=V(IM,2)
+ IF(MSTJ(43).GE.3) PEM=P(IM,4)
+ P(N+1,5)=MIN(P(IM,5),V(IM,1)*PEM)
+ P(N+2,5)=MIN(P(IM,5),(1D0-V(IM,1))*PEM)
+ IF(K(N+2,2).EQ.22) P(N+2,5)=PMTH(1,22)
+ ENDIF
+ DO 320 I=1,NEP
+ PMSD(I)=P(N+I,5)
+ IF(ISI(I).EQ.1) THEN
+ IFLD=KFLD(I)
+ IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
+ & ISIGN(2,K(N+I,2))
+ IF(P(N+I,5).LE.PMTH(3,IFLD)) P(N+I,5)=PMTH(1,IFLD)
+ ENDIF
+ V(N+I,5)=P(N+I,5)**2
+ 320 CONTINUE
+
+C...Choose one of the daughters for evolution.
+ 330 INUM=0
+ IF(NEP.EQ.1) INUM=1
+ DO 340 I=1,NEP
+ IF(INUM.EQ.0.AND.ISL(I).EQ.1) INUM=I
+ 340 CONTINUE
+ DO 350 I=1,NEP
+ IF(INUM.EQ.0.AND.ITRY(I).EQ.0.AND.ISI(I).EQ.1) THEN
+ IFLD=KFLD(I)
+ IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
+ & ISIGN(2,K(N+I,2))
+ IF(P(N+I,5).GE.PMTH(2,IFLD)) INUM=I
+ ENDIF
+ 350 CONTINUE
+ IF(INUM.EQ.0) THEN
+ RMAX=0D0
+ DO 360 I=1,NEP
+ IF(ISI(I).EQ.1.AND.PMSD(I).GE.PMQTH2) THEN
+ RPM=P(N+I,5)/PMSD(I)
+ IFLD=KFLD(I)
+ IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
+ & ISIGN(2,K(N+I,2))
+ IF(RPM.GT.RMAX.AND.P(N+I,5).GE.PMTH(2,IFLD)) THEN
+ RMAX=RPM
+ INUM=I
+ ENDIF
+ ENDIF
+ 360 CONTINUE
+ ENDIF
+
+C...Store information on choice of evolving daughter.
+ INUM=MAX(1,INUM)
+ IEP(1)=N+INUM
+ DO 370 I=2,NEP
+ IEP(I)=IEP(I-1)+1
+ IF(IEP(I).GT.N+NEP) IEP(I)=N+1
+ 370 CONTINUE
+ DO 380 I=1,NEP
+ KFL(I)=IABS(K(IEP(I),2))
+ 380 CONTINUE
+ ITRY(INUM)=ITRY(INUM)+1
+ IF(ITRY(INUM).GT.200) THEN
+ CALL PYERRM(14,'(PYSHOW:) caught in infinite loop')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ Z=0.5D0
+ IF(KFL(1).GT.40) GOTO 430
+ IF(KSH(KFL(1)).EQ.0) GOTO 430
+ IFL=KFL(1)
+ IF(KFL(1).GE.6.AND.KFL(1).LE.8) IFL=37+KFL(1)+
+ &ISIGN(2,K(IEP(1),2))
+ IF(P(IEP(1),5).LT.PMTH(2,IFL)) GOTO 430
+
+C...Select side for interference with initial state partons.
+ IF(MIIS.GE.1.AND.IEP(1).LE.NS+3) THEN
+ III=IEP(1)-NS-1
+ ISII(III)=0
+ IF(IABS(KCII(III)).EQ.1.AND.NIIS(III).EQ.1) THEN
+ ISII(III)=1
+ ELSEIF(KCII(III).EQ.2.AND.NIIS(III).EQ.1) THEN
+ IF(PYR(0).GT.0.5D0) ISII(III)=1
+ ELSEIF(KCII(III).EQ.2.AND.NIIS(III).EQ.2) THEN
+ ISII(III)=1
+ IF(PYR(0).GT.0.5D0) ISII(III)=2
+ ENDIF
+ ENDIF
+
+C...Calculate allowed z range.
+ IF(NEP.EQ.1) THEN
+ PMED=PS(4)
+ ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
+ PMED=P(IM,5)
+ ELSE
+ IF(INUM.EQ.1) PMED=V(IM,1)*PEM
+ IF(INUM.EQ.2) PMED=(1D0-V(IM,1))*PEM
+ ENDIF
+ IF(MOD(MSTJ(43),2).EQ.1) THEN
+ ZC=PMTH(2,21)/PMED
+ ZCE=PMTH(2,22)/PMED
+ ELSE
+ ZC=0.5D0*(1D0-SQRT(MAX(0D0,1D0-(2D0*PMTH(2,21)/PMED)**2)))
+ IF(ZC.LT.1D-4) ZC=(PMTH(2,21)/PMED)**2
+ ZCE=0.5D0*(1D0-SQRT(MAX(0D0,1D0-(2D0*PMTH(2,22)/PMED)**2)))
+ IF(ZCE.LT.1D-4) ZCE=(PMTH(2,22)/PMED)**2
+ ENDIF
+ ZC=MIN(ZC,0.491D0)
+ ZCE=MIN(ZCE,0.491D0)
+ IF((MSTJ(41).EQ.1.AND.ZC.GT.0.49D0).OR.(MSTJ(41).GE.2.AND.
+ &MIN(ZC,ZCE).GT.0.49D0)) THEN
+ P(IEP(1),5)=PMTH(1,IFL)
+ V(IEP(1),5)=P(IEP(1),5)**2
+ GOTO 430
+ ENDIF
+
+C...Integral of Altarelli-Parisi z kernel for QCD.
+ IF(MSTJ(49).EQ.0.AND.KFL(1).EQ.21) THEN
+ FBR=6D0*LOG((1D0-ZC)/ZC)+MSTJ(45)*(0.5D0-ZC)
+ ELSEIF(MSTJ(49).EQ.0) THEN
+ FBR=(8D0/3D0)*LOG((1D0-ZC)/ZC)
+
+C...Integral of Altarelli-Parisi z kernel for scalar gluon.
+ ELSEIF(MSTJ(49).EQ.1.AND.KFL(1).EQ.21) THEN
+ FBR=(PARJ(87)+MSTJ(45)*PARJ(88))*(1D0-2D0*ZC)
+ ELSEIF(MSTJ(49).EQ.1) THEN
+ FBR=(1D0-2D0*ZC)/3D0
+ IF(IGM.EQ.0.AND.M3JC.EQ.1) FBR=4D0*FBR
+
+C...Integral of Altarelli-Parisi z kernel for Abelian vector gluon.
+ ELSEIF(KFL(1).EQ.21) THEN
+ FBR=6D0*MSTJ(45)*(0.5D0-ZC)
+ ELSE
+ FBR=2D0*LOG((1D0-ZC)/ZC)
+ ENDIF
+
+C...Reset QCD probability for lepton.
+ IF(KFL(1).GE.11.AND.KFL(1).LE.18) FBR=0D0
+
+C...Integral of Altarelli-Parisi kernel for photon emission.
+ IF(MSTJ(41).GE.2.AND.KFL(1).GE.1.AND.KFL(1).LE.18) THEN
+ FBRE=(KCHG(KFL(1),1)/3D0)**2*2D0*LOG((1D0-ZCE)/ZCE)
+ IF(MSTJ(41).EQ.10) FBRE=PARJ(84)*FBRE
+ ENDIF
+
+C...Inner veto algorithm starts. Find maximum mass for evolution.
+ 390 PMS=V(IEP(1),5)
+ IF(IGM.GE.0) THEN
+ PM2=0D0
+ DO 400 I=2,NEP
+ PM=P(IEP(I),5)
+ IF(KFL(I).LE.40) THEN
+ IFLI=KFL(I)
+ IF(KFL(I).GE.6.AND.KFL(I).LE.8) IFLI=37+KFL(I)+
+ & ISIGN(2,K(IEP(I),2))
+ IF(KSH(KFL(I)).EQ.1) PM=PMTH(2,IFLI)
+ ENDIF
+ PM2=PM2+PM
+ 400 CONTINUE
+ PMS=MIN(PMS,(P(IM,5)-PM2)**2)
+ ENDIF
+
+C...Select mass for daughter in QCD evolution.
+ B0=27D0/6D0
+ DO 410 IFF=4,MSTJ(45)
+ IF(PMS.GT.4D0*PMTH(2,IFF)**2) B0=(33D0-2D0*IFF)/6D0
+ 410 CONTINUE
+ IF(FBR.LT.1D-3) THEN
+ PMSQCD=0D0
+ ELSEIF(MSTJ(44).LE.0) THEN
+ PMSQCD=PMS*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/(PARU(111)*FBR)))
+ ELSEIF(MSTJ(44).EQ.1) THEN
+ PMSQCD=4D0*ALAMS*(0.25D0*PMS/ALAMS)**(PYR(0)**(B0/FBR))
+ ELSE
+ PMSQCD=PMS*EXP(MAX(-50D0,ALFM*B0*LOG(PYR(0))/FBR))
+ ENDIF
+ IF(ZC.GT.0.49D0.OR.PMSQCD.LE.PMTH(4,IFL)**2) PMSQCD=PMTH(2,IFL)**2
+ V(IEP(1),5)=PMSQCD
+ MCE=1
+
+C...Select mass for daughter in QED evolution.
+ IF(MSTJ(41).GE.2.AND.KFL(1).GE.1.AND.KFL(1).LE.18) THEN
+ PMSQED=PMS*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/(PARU(101)*FBRE)))
+ IF(ZCE.GT.0.49D0.OR.PMSQED.LE.PMTH(5,IFL)**2) PMSQED=
+ & PMTH(2,IFL)**2
+ IF(PMSQED.GT.PMSQCD) THEN
+ V(IEP(1),5)=PMSQED
+ MCE=2
+ ENDIF
+ ENDIF
+
+C...Check whether daughter mass below cutoff.
+ P(IEP(1),5)=SQRT(V(IEP(1),5))
+ IF(P(IEP(1),5).LE.PMTH(3,IFL)) THEN
+ P(IEP(1),5)=PMTH(1,IFL)
+ V(IEP(1),5)=P(IEP(1),5)**2
+ GOTO 430
+ ENDIF
+
+C...Select z value of branching: q -> qgamma.
+ IF(MCE.EQ.2) THEN
+ Z=1D0-(1D0-ZCE)*(ZCE/(1D0-ZCE))**PYR(0)
+ IF(1D0+Z**2.LT.2D0*PYR(0)) GOTO 390
+ K(IEP(1),5)=22
+
+C...Select z value of branching: q -> qg, g -> gg, g -> qqbar.
+ ELSEIF(MSTJ(49).NE.1.AND.KFL(1).NE.21) THEN
+ Z=1D0-(1D0-ZC)*(ZC/(1D0-ZC))**PYR(0)
+ IF(1D0+Z**2.LT.2D0*PYR(0)) GOTO 390
+ K(IEP(1),5)=21
+ ELSEIF(MSTJ(49).EQ.0.AND.MSTJ(45)*(0.5D0-ZC).LT.PYR(0)*FBR) THEN
+ Z=(1D0-ZC)*(ZC/(1D0-ZC))**PYR(0)
+ IF(PYR(0).GT.0.5D0) Z=1D0-Z
+ IF((1D0-Z*(1D0-Z))**2.LT.PYR(0)) GOTO 390
+ K(IEP(1),5)=21
+ ELSEIF(MSTJ(49).NE.1) THEN
+ Z=ZC+(1D0-2D0*ZC)*PYR(0)
+ IF(Z**2+(1D0-Z)**2.LT.PYR(0)) GOTO 390
+ KFLB=1+INT(MSTJ(45)*PYR(0))
+ PMQ=4D0*PMTH(2,KFLB)**2/V(IEP(1),5)
+ IF(PMQ.GE.1D0) GOTO 390
+ PMQ0=4D0*PMTH(2,21)**2/V(IEP(1),5)
+ IF(MOD(MSTJ(43),2).EQ.0.AND.(1D0+0.5D0*PMQ)*SQRT(1D0-PMQ).LT.
+ & PYR(0)*(1D0+0.5D0*PMQ0)*SQRT(1D0-PMQ0)) GOTO 390
+ K(IEP(1),5)=KFLB
+
+C...Ditto for scalar gluon model.
+ ELSEIF(KFL(1).NE.21) THEN
+ Z=1D0-SQRT(ZC**2+PYR(0)*(1D0-2D0*ZC))
+ K(IEP(1),5)=21
+ ELSEIF(PYR(0)*(PARJ(87)+MSTJ(45)*PARJ(88)).LE.PARJ(87)) THEN
+ Z=ZC+(1D0-2D0*ZC)*PYR(0)
+ K(IEP(1),5)=21
+ ELSE
+ Z=ZC+(1D0-2D0*ZC)*PYR(0)
+ KFLB=1+INT(MSTJ(45)*PYR(0))
+ PMQ=4D0*PMTH(2,KFLB)**2/V(IEP(1),5)
+ IF(PMQ.GE.1D0) GOTO 390
+ K(IEP(1),5)=KFLB
+ ENDIF
+ IF(MCE.EQ.1.AND.MSTJ(44).GE.2) THEN
+ IF(Z*(1D0-Z)*V(IEP(1),5).LT.PT2MIN) GOTO 390
+ IF(ALFM/LOG(V(IEP(1),5)*Z*(1D0-Z)/ALAMS).LT.PYR(0)) GOTO 390
+ ENDIF
+
+C...Check if z consistent with chosen m.
+ IF(KFL(1).EQ.21) THEN
+ KFLGD1=IABS(K(IEP(1),5))
+ KFLGD2=KFLGD1
+ ELSE
+ KFLGD1=KFL(1)
+ KFLGD2=IABS(K(IEP(1),5))
+ ENDIF
+ IF(NEP.EQ.1) THEN
+ PED=PS(4)
+ ELSEIF(NEP.GE.3) THEN
+ PED=P(IEP(1),4)
+ ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
+ PED=0.5D0*(V(IM,5)+V(IEP(1),5)-PM2**2)/P(IM,5)
+ ELSE
+ IF(IEP(1).EQ.N+1) PED=V(IM,1)*PEM
+ IF(IEP(1).EQ.N+2) PED=(1D0-V(IM,1))*PEM
+ ENDIF
+ IF(MOD(MSTJ(43),2).EQ.1) THEN
+ IFLGD1=KFLGD1
+ IF(KFLGD1.GE.6.AND.KFLGD1.LE.8) IFLGD1=IFL
+ PMQTH3=0.5D0*PARJ(82)
+ IF(KFLGD2.EQ.22) PMQTH3=0.5D0*PARJ(83)
+ PMQ1=(PMTH(1,IFLGD1)**2+PMQTH3**2)/V(IEP(1),5)
+ PMQ2=(PMTH(1,KFLGD2)**2+PMQTH3**2)/V(IEP(1),5)
+ ZD=SQRT(MAX(0D0,(1D0-V(IEP(1),5)/PED**2)*((1D0-PMQ1-PMQ2)**2-
+ & 4D0*PMQ1*PMQ2)))
+ ZH=1D0+PMQ1-PMQ2
+ ELSE
+ ZD=SQRT(MAX(0D0,1D0-V(IEP(1),5)/PED**2))
+ ZH=1D0
+ ENDIF
+ ZL=0.5D0*(ZH-ZD)
+ ZU=0.5D0*(ZH+ZD)
+ IF(Z.LT.ZL.OR.Z.GT.ZU) GOTO 390
+ IF(KFL(1).EQ.21) V(IEP(1),3)=LOG(ZU*(1D0-ZL)/MAX(1D-20,ZL*
+ &(1D0-ZU)))
+ IF(KFL(1).NE.21) V(IEP(1),3)=LOG((1D0-ZL)/MAX(1D-10,1D0-ZU))
+
+C...Width suppression for q -> q + g.
+ IF(MSTJ(40).NE.0.AND.KFL(1).NE.21) THEN
+ IF(IGM.EQ.0) THEN
+ EGLU=0.5D0*PS(5)*(1D0-Z)*(1D0+V(IEP(1),5)/V(NS+1,5))
+ ELSE
+ EGLU=PMED*(1D0-Z)
+ ENDIF
+ CHI=PARJ(89)**2/(PARJ(89)**2+EGLU**2)
+ IF(MSTJ(40).EQ.1) THEN
+ IF(CHI.LT.PYR(0)) GOTO 390
+ ELSEIF(MSTJ(40).EQ.2) THEN
+ IF(1D0-CHI.LT.PYR(0)) GOTO 390
+ ENDIF
+ ENDIF
+
+C...Three-jet matrix element correction.
+ IF(IGM.EQ.0.AND.M3JC.EQ.1) THEN
+ X1=Z*(1D0+V(IEP(1),5)/V(NS+1,5))
+ X2=1D0-V(IEP(1),5)/V(NS+1,5)
+ X3=(1D0-X1)+(1D0-X2)
+ IF(MCE.EQ.2) THEN
+ KI1=K(IPA(INUM),2)
+ KI2=K(IPA(3-INUM),2)
+ QF1=KCHG(IABS(KI1),1)*ISIGN(1,KI1)/3D0
+ QF2=KCHG(IABS(KI2),1)*ISIGN(1,KI2)/3D0
+ WSHOW=QF1**2*(1D0-X1)/X3*(1D0+(X1/(2D0-X2))**2)+
+ & QF2**2*(1D0-X2)/X3*(1D0+(X2/(2D0-X1))**2)
+ WME=(QF1*(1D0-X1)/X3-QF2*(1D0-X2)/X3)**2*(X1**2+X2**2)
+ ELSEIF(MSTJ(49).NE.1) THEN
+ WSHOW=1D0+(1D0-X1)/X3*(X1/(2D0-X2))**2+
+ & (1D0-X2)/X3*(X2/(2D0-X1))**2
+ WME=X1**2+X2**2
+ IF(M3JCM.EQ.1) WME=WME-QME*X3-0.5D0*QME**2-
+ & (0.5D0*QME+0.25D0*QME**2)*((1D0-X2)/MAX(1D-7,1D0-X1)+
+ & (1D0-X1)/MAX(1D-7,1D0-X2))
+ ELSE
+ WSHOW=4D0*X3*((1D0-X1)/(2D0-X2)**2+(1D0-X2)/(2D0-X1)**2)
+ WME=X3**2
+ IF(MSTJ(102).GE.2) WME=X3**2-2D0*(1D0+X3)*(1D0-X1)*(1D0-X2)*
+ & PARJ(171)
+ ENDIF
+ IF(WME.LT.PYR(0)*WSHOW) GOTO 390
+
+C...Impose angular ordering by rejection of nonordered emission.
+ ELSEIF(MCE.EQ.1.AND.IGM.GT.0.AND.MSTJ(42).GE.2) THEN
+ MAOM=1
+ ZM=V(IM,1)
+ IF(IEP(1).EQ.N+2) ZM=1D0-V(IM,1)
+ THE2ID=Z*(1D0-Z)*(ZM*P(IM,4))**2/V(IEP(1),5)
+ IAOM=IM
+ 420 IF(K(IAOM,5).EQ.22) THEN
+ IAOM=K(IAOM,3)
+ IF(K(IAOM,3).LE.NS) MAOM=0
+ IF(MAOM.EQ.1) GOTO 420
+ ENDIF
+ IF(MAOM.EQ.1) THEN
+ THE2IM=V(IAOM,1)*(1D0-V(IAOM,1))*P(IAOM,4)**2/V(IAOM,5)
+ IF(THE2ID.LT.THE2IM) GOTO 390
+ ENDIF
+ ENDIF
+
+C...Impose user-defined maximum angle at first branching.
+ IF(MSTJ(48).EQ.1) THEN
+ IF(NEP.EQ.1.AND.IM.EQ.NS) THEN
+ THE2ID=Z*(1D0-Z)*PS(4)**2/V(IEP(1),5)
+ IF(THE2ID.LT.1D0/PARJ(85)**2) GOTO 390
+ ELSEIF(NEP.EQ.2.AND.IEP(1).EQ.NS+2) THEN
+ THE2ID=Z*(1D0-Z)*(0.5D0*P(IM,4))**2/V(IEP(1),5)
+ IF(THE2ID.LT.1D0/PARJ(85)**2) GOTO 390
+ ELSEIF(NEP.EQ.2.AND.IEP(1).EQ.NS+3) THEN
+ THE2ID=Z*(1D0-Z)*(0.5D0*P(IM,4))**2/V(IEP(1),5)
+ IF(THE2ID.LT.1D0/PARJ(86)**2) GOTO 390
+ ENDIF
+ ENDIF
+
+C...Impose angular constraint in first branching from interference
+C...with initial state partons.
+ IF(MIIS.GE.2.AND.IEP(1).LE.NS+3) THEN
+ THE2D=MAX((1D0-Z)/Z,Z/(1D0-Z))*V(IEP(1),5)/(0.5D0*P(IM,4))**2
+ IF(IEP(1).EQ.NS+2.AND.ISII(1).GE.1) THEN
+ IF(THE2D.GT.THEIIS(1,ISII(1))**2) GOTO 390
+ ELSEIF(IEP(1).EQ.NS+3.AND.ISII(2).GE.1) THEN
+ IF(THE2D.GT.THEIIS(2,ISII(2))**2) GOTO 390
+ ENDIF
+ ENDIF
+
+C...End of inner veto algorithm. Check if only one leg evolved so far.
+ 430 V(IEP(1),1)=Z
+ ISL(1)=0
+ ISL(2)=0
+ IF(NEP.EQ.1) GOTO 460
+ IF(NEP.EQ.2.AND.P(IEP(1),5)+P(IEP(2),5).GE.P(IM,5)) GOTO 330
+ DO 440 I=1,NEP
+ IF(ITRY(I).EQ.0.AND.KFLD(I).LE.40) THEN
+ IF(KSH(KFLD(I)).EQ.1) THEN
+ IFLD=KFLD(I)
+ IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
+ & ISIGN(2,K(N+I,2))
+ IF(P(N+I,5).GE.PMTH(2,IFLD)) GOTO 330
+ ENDIF
+ ENDIF
+ 440 CONTINUE
+
+C...Check if chosen multiplet m1,m2,z1,z2 is physical.
+ IF(NEP.EQ.3) THEN
+ PA1S=(P(N+1,4)+P(N+1,5))*(P(N+1,4)-P(N+1,5))
+ PA2S=(P(N+2,4)+P(N+2,5))*(P(N+2,4)-P(N+2,5))
+ PA3S=(P(N+3,4)+P(N+3,5))*(P(N+3,4)-P(N+3,5))
+ PTS=0.25D0*(2D0*PA1S*PA2S+2D0*PA1S*PA3S+2D0*PA2S*PA3S-
+ & PA1S**2-PA2S**2-PA3S**2)/PA1S
+ IF(PTS.LE.0D0) GOTO 330
+ ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2.OR.MOD(MSTJ(43),2).EQ.0) THEN
+ DO 450 I1=N+1,N+2
+ KFLDA=IABS(K(I1,2))
+ IF(KFLDA.GT.40) GOTO 450
+ IF(KSH(KFLDA).EQ.0) GOTO 450
+ IFLDA=KFLDA
+ IF(KFLDA.GE.6.AND.KFLDA.LE.8) IFLDA=37+KFLDA+
+ & ISIGN(2,K(I1,2))
+ IF(P(I1,5).LT.PMTH(2,IFLDA)) GOTO 450
+ IF(KFLDA.EQ.21) THEN
+ KFLGD1=IABS(K(I1,5))
+ KFLGD2=KFLGD1
+ ELSE
+ KFLGD1=KFLDA
+ KFLGD2=IABS(K(I1,5))
+ ENDIF
+ I2=2*N+3-I1
+ IF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
+ PED=0.5D0*(V(IM,5)+V(I1,5)-V(I2,5))/P(IM,5)
+ ELSE
+ IF(I1.EQ.N+1) ZM=V(IM,1)
+ IF(I1.EQ.N+2) ZM=1D0-V(IM,1)
+ PML=SQRT((V(IM,5)-V(N+1,5)-V(N+2,5))**2-
+ & 4D0*V(N+1,5)*V(N+2,5))
+ PED=PEM*(0.5D0*(V(IM,5)-PML+V(I1,5)-V(I2,5))+PML*ZM)/V(IM,5)
+ ENDIF
+ IF(MOD(MSTJ(43),2).EQ.1) THEN
+ PMQTH3=0.5D0*PARJ(82)
+ IF(KFLGD2.EQ.22) PMQTH3=0.5D0*PARJ(83)
+ IFLGD1=KFLGD1
+ IF(KFLGD1.GE.6.AND.KFLGD1.LE.8) IFLGD1=IFLDA
+ PMQ1=(PMTH(1,IFLGD1)**2+PMQTH3**2)/V(I1,5)
+ PMQ2=(PMTH(1,KFLGD2)**2+PMQTH3**2)/V(I1,5)
+ ZD=SQRT(MAX(0D0,(1D0-V(I1,5)/PED**2)*((1D0-PMQ1-PMQ2)**2-
+ & 4D0*PMQ1*PMQ2)))
+ ZH=1D0+PMQ1-PMQ2
+ ELSE
+ ZD=SQRT(MAX(0D0,1D0-V(I1,5)/PED**2))
+ ZH=1D0
+ ENDIF
+ ZL=0.5D0*(ZH-ZD)
+ ZU=0.5D0*(ZH+ZD)
+ IF(I1.EQ.N+1.AND.(V(I1,1).LT.ZL.OR.V(I1,1).GT.ZU)) ISL(1)=1
+ IF(I1.EQ.N+2.AND.(V(I1,1).LT.ZL.OR.V(I1,1).GT.ZU)) ISL(2)=1
+ IF(KFLDA.EQ.21) V(I1,4)=LOG(ZU*(1D0-ZL)/MAX(1D-20,
+ & ZL*(1D0-ZU)))
+ IF(KFLDA.NE.21) V(I1,4)=LOG((1D0-ZL)/MAX(1D-10,1D0-ZU))
+ 450 CONTINUE
+ IF(ISL(1).EQ.1.AND.ISL(2).EQ.1.AND.ISLM.NE.0) THEN
+ ISL(3-ISLM)=0
+ ISLM=3-ISLM
+ ELSEIF(ISL(1).EQ.1.AND.ISL(2).EQ.1) THEN
+ ZDR1=MAX(0D0,V(N+1,3)/MAX(1D-6,V(N+1,4))-1D0)
+ ZDR2=MAX(0D0,V(N+2,3)/MAX(1D-6,V(N+2,4))-1D0)
+ IF(ZDR2.GT.PYR(0)*(ZDR1+ZDR2)) ISL(1)=0
+ IF(ISL(1).EQ.1) ISL(2)=0
+ IF(ISL(1).EQ.0) ISLM=1
+ IF(ISL(2).EQ.0) ISLM=2
+ ENDIF
+ IF(ISL(1).EQ.1.OR.ISL(2).EQ.1) GOTO 330
+ ENDIF
+ IFLD1=KFLD(1)
+ IF(KFLD(1).GE.6.AND.KFLD(1).LE.8) IFLD1=37+KFLD(1)+
+ &ISIGN(2,K(N+1,2))
+ IFLD2=KFLD(2)
+ IF(KFLD(2).GE.6.AND.KFLD(2).LE.8) IFLD2=37+KFLD(2)+
+ &ISIGN(2,K(N+2,2))
+ IF(IGM.GT.0.AND.MOD(MSTJ(43),2).EQ.1.AND.(P(N+1,5).GE.
+ &PMTH(2,IFLD1).OR.P(N+2,5).GE.PMTH(2,IFLD2))) THEN
+ PMQ1=V(N+1,5)/V(IM,5)
+ PMQ2=V(N+2,5)/V(IM,5)
+ ZD=SQRT(MAX(0D0,(1D0-V(IM,5)/PEM**2)*((1D0-PMQ1-PMQ2)**2-
+ & 4D0*PMQ1*PMQ2)))
+ ZH=1D0+PMQ1-PMQ2
+ ZL=0.5D0*(ZH-ZD)
+ ZU=0.5D0*(ZH+ZD)
+ IF(V(IM,1).LT.ZL.OR.V(IM,1).GT.ZU) GOTO 330
+ ENDIF
+
+C...Accepted branch. Construct four-momentum for initial partons.
+ 460 MAZIP=0
+ MAZIC=0
+ IF(NEP.EQ.1) THEN
+ P(N+1,1)=0D0
+ P(N+1,2)=0D0
+ P(N+1,3)=SQRT(MAX(0D0,(P(IPA(1),4)+P(N+1,5))*(P(IPA(1),4)-
+ & P(N+1,5))))
+ P(N+1,4)=P(IPA(1),4)
+ V(N+1,2)=P(N+1,4)
+ ELSEIF(IGM.EQ.0.AND.NEP.EQ.2) THEN
+ PED1=0.5D0*(V(IM,5)+V(N+1,5)-V(N+2,5))/P(IM,5)
+ P(N+1,1)=0D0
+ P(N+1,2)=0D0
+ P(N+1,3)=SQRT(MAX(0D0,(PED1+P(N+1,5))*(PED1-P(N+1,5))))
+ P(N+1,4)=PED1
+ P(N+2,1)=0D0
+ P(N+2,2)=0D0
+ P(N+2,3)=-P(N+1,3)
+ P(N+2,4)=P(IM,5)-PED1
+ V(N+1,2)=P(N+1,4)
+ V(N+2,2)=P(N+2,4)
+ ELSEIF(NEP.EQ.3) THEN
+ P(N+1,1)=0D0
+ P(N+1,2)=0D0
+ P(N+1,3)=SQRT(MAX(0D0,PA1S))
+ P(N+2,1)=SQRT(PTS)
+ P(N+2,2)=0D0
+ P(N+2,3)=0.5D0*(PA3S-PA2S-PA1S)/P(N+1,3)
+ P(N+3,1)=-P(N+2,1)
+ P(N+3,2)=0D0
+ P(N+3,3)=-(P(N+1,3)+P(N+2,3))
+ V(N+1,2)=P(N+1,4)
+ V(N+2,2)=P(N+2,4)
+ V(N+3,2)=P(N+3,4)
+
+C...Construct transverse momentum for ordinary branching in shower.
+ ELSE
+ ZM=V(IM,1)
+ PZM=SQRT(MAX(0D0,(PEM+P(IM,5))*(PEM-P(IM,5))))
+ PMLS=(V(IM,5)-V(N+1,5)-V(N+2,5))**2-4D0*V(N+1,5)*V(N+2,5)
+ IF(PZM.LE.0D0) THEN
+ PTS=0D0
+ ELSEIF(MOD(MSTJ(43),2).EQ.1) THEN
+ PTS=(PEM**2*(ZM*(1D0-ZM)*V(IM,5)-(1D0-ZM)*V(N+1,5)-
+ & ZM*V(N+2,5))-0.25D0*PMLS)/PZM**2
+ ELSE
+ PTS=PMLS*(ZM*(1D0-ZM)*PEM**2/V(IM,5)-0.25D0)/PZM**2
+ ENDIF
+ PT=SQRT(MAX(0D0,PTS))
+
+C...Find coefficient of azimuthal asymmetry due to gluon polarization.
+ HAZIP=0D0
+ IF(MSTJ(49).NE.1.AND.MOD(MSTJ(46),2).EQ.1.AND.K(IM,2).EQ.21
+ & .AND.IAU.NE.0) THEN
+ IF(K(IGM,3).NE.0) MAZIP=1
+ ZAU=V(IGM,1)
+ IF(IAU.EQ.IM+1) ZAU=1D0-V(IGM,1)
+ IF(MAZIP.EQ.0) ZAU=0D0
+ IF(K(IGM,2).NE.21) THEN
+ HAZIP=2D0*ZAU/(1D0+ZAU**2)
+ ELSE
+ HAZIP=(ZAU/(1D0-ZAU*(1D0-ZAU)))**2
+ ENDIF
+ IF(K(N+1,2).NE.21) THEN
+ HAZIP=HAZIP*(-2D0*ZM*(1D0-ZM))/(1D0-2D0*ZM*(1D0-ZM))
+ ELSE
+ HAZIP=HAZIP*(ZM*(1D0-ZM)/(1D0-ZM*(1D0-ZM)))**2
+ ENDIF
+ ENDIF
+
+C...Find coefficient of azimuthal asymmetry due to soft gluon
+C...interference.
+ HAZIC=0D0
+ IF(MSTJ(49).NE.2.AND.MSTJ(46).GE.2.AND.(K(N+1,2).EQ.21.OR.
+ & K(N+2,2).EQ.21).AND.IAU.NE.0) THEN
+ IF(K(IGM,3).NE.0) MAZIC=N+1
+ IF(K(IGM,3).NE.0.AND.K(N+1,2).NE.21) MAZIC=N+2
+ IF(K(IGM,3).NE.0.AND.K(N+1,2).EQ.21.AND.K(N+2,2).EQ.21.AND.
+ & ZM.GT.0.5D0) MAZIC=N+2
+ IF(K(IAU,2).EQ.22) MAZIC=0
+ ZS=ZM
+ IF(MAZIC.EQ.N+2) ZS=1D0-ZM
+ ZGM=V(IGM,1)
+ IF(IAU.EQ.IM-1) ZGM=1D0-V(IGM,1)
+ IF(MAZIC.EQ.0) ZGM=1D0
+ IF(MAZIC.NE.0) HAZIC=(P(IM,5)/P(IGM,5))*
+ & SQRT((1D0-ZS)*(1D0-ZGM)/(ZS*ZGM))
+ HAZIC=MIN(0.95D0,HAZIC)
+ ENDIF
+ ENDIF
+
+C...Construct kinematics for ordinary branching in shower.
+ 470 IF(NEP.EQ.2.AND.IGM.GT.0) THEN
+ IF(MOD(MSTJ(43),2).EQ.1) THEN
+ P(N+1,4)=PEM*V(IM,1)
+ ELSE
+ P(N+1,4)=PEM*(0.5D0*(V(IM,5)-SQRT(PMLS)+V(N+1,5)-V(N+2,5))+
+ & SQRT(PMLS)*ZM)/V(IM,5)
+ ENDIF
+ PHI=PARU(2)*PYR(0)
+ P(N+1,1)=PT*COS(PHI)
+ P(N+1,2)=PT*SIN(PHI)
+ IF(PZM.GT.0D0) THEN
+ P(N+1,3)=0.5D0*(V(N+2,5)-V(N+1,5)-V(IM,5)+
+ & 2D0*PEM*P(N+1,4))/PZM
+ ELSE
+ P(N+1,3)=0D0
+ ENDIF
+ P(N+2,1)=-P(N+1,1)
+ P(N+2,2)=-P(N+1,2)
+ P(N+2,3)=PZM-P(N+1,3)
+ P(N+2,4)=PEM-P(N+1,4)
+ IF(MSTJ(43).LE.2) THEN
+ V(N+1,2)=(PEM*P(N+1,4)-PZM*P(N+1,3))/P(IM,5)
+ V(N+2,2)=(PEM*P(N+2,4)-PZM*P(N+2,3))/P(IM,5)
+ ENDIF
+ ENDIF
+
+C...Rotate and boost daughters.
+ IF(IGM.GT.0) THEN
+ IF(MSTJ(43).LE.2) THEN
+ BEX=P(IGM,1)/P(IGM,4)
+ BEY=P(IGM,2)/P(IGM,4)
+ BEZ=P(IGM,3)/P(IGM,4)
+ GA=P(IGM,4)/P(IGM,5)
+ GABEP=GA*(GA*(BEX*P(IM,1)+BEY*P(IM,2)+BEZ*P(IM,3))/(1D0+GA)-
+ & P(IM,4))
+ ELSE
+ BEX=0D0
+ BEY=0D0
+ BEZ=0D0
+ GA=1D0
+ GABEP=0D0
+ ENDIF
+ THE=PYANGL(P(IM,3)+GABEP*BEZ,SQRT((P(IM,1)+GABEP*BEX)**2+
+ & (P(IM,2)+GABEP*BEY)**2))
+ PHI=PYANGL(P(IM,1)+GABEP*BEX,P(IM,2)+GABEP*BEY)
+ DO 480 I=N+1,N+2
+ DP(1)=COS(THE)*COS(PHI)*P(I,1)-SIN(PHI)*P(I,2)+
+ & SIN(THE)*COS(PHI)*P(I,3)
+ DP(2)=COS(THE)*SIN(PHI)*P(I,1)+COS(PHI)*P(I,2)+
+ & SIN(THE)*SIN(PHI)*P(I,3)
+ DP(3)=-SIN(THE)*P(I,1)+COS(THE)*P(I,3)
+ DP(4)=P(I,4)
+ DBP=BEX*DP(1)+BEY*DP(2)+BEZ*DP(3)
+ DGABP=GA*(GA*DBP/(1D0+GA)+DP(4))
+ P(I,1)=DP(1)+DGABP*BEX
+ P(I,2)=DP(2)+DGABP*BEY
+ P(I,3)=DP(3)+DGABP*BEZ
+ P(I,4)=GA*(DP(4)+DBP)
+ 480 CONTINUE
+ ENDIF
+
+C...Weight with azimuthal distribution, if required.
+ IF(MAZIP.NE.0.OR.MAZIC.NE.0) THEN
+ DO 490 J=1,3
+ DPT(1,J)=P(IM,J)
+ DPT(2,J)=P(IAU,J)
+ DPT(3,J)=P(N+1,J)
+ 490 CONTINUE
+ DPMA=DPT(1,1)*DPT(2,1)+DPT(1,2)*DPT(2,2)+DPT(1,3)*DPT(2,3)
+ DPMD=DPT(1,1)*DPT(3,1)+DPT(1,2)*DPT(3,2)+DPT(1,3)*DPT(3,3)
+ DPMM=DPT(1,1)**2+DPT(1,2)**2+DPT(1,3)**2
+ DO 500 J=1,3
+ DPT(4,J)=DPT(2,J)-DPMA*DPT(1,J)/DPMM
+ DPT(5,J)=DPT(3,J)-DPMD*DPT(1,J)/DPMM
+ 500 CONTINUE
+ DPT(4,4)=SQRT(DPT(4,1)**2+DPT(4,2)**2+DPT(4,3)**2)
+ DPT(5,4)=SQRT(DPT(5,1)**2+DPT(5,2)**2+DPT(5,3)**2)
+ IF(MIN(DPT(4,4),DPT(5,4)).GT.0.1D0*PARJ(82)) THEN
+ CAD=(DPT(4,1)*DPT(5,1)+DPT(4,2)*DPT(5,2)+
+ & DPT(4,3)*DPT(5,3))/(DPT(4,4)*DPT(5,4))
+ IF(MAZIP.NE.0) THEN
+ IF(1D0+HAZIP*(2D0*CAD**2-1D0).LT.PYR(0)*(1D0+ABS(HAZIP)))
+ & GOTO 470
+ ENDIF
+ IF(MAZIC.NE.0) THEN
+ IF(MAZIC.EQ.N+2) CAD=-CAD
+ IF((1D0-HAZIC)*(1D0-HAZIC*CAD)/(1D0+HAZIC**2-2D0*HAZIC*CAD)
+ & .LT.PYR(0)) GOTO 470
+ ENDIF
+ ENDIF
+ ENDIF
+
+C...Azimuthal anisotropy due to interference with initial state partons.
+ IF(MOD(MIIS,2).EQ.1.AND.IGM.EQ.NS+1.AND.(K(N+1,2).EQ.21.OR.
+ &K(N+2,2).EQ.21)) THEN
+ III=IM-NS-1
+ IF(ISII(III).GE.1) THEN
+ IAZIID=N+1
+ IF(K(N+1,2).NE.21) IAZIID=N+2
+ IF(K(N+1,2).EQ.21.AND.K(N+2,2).EQ.21.AND.
+ & P(N+1,4).GT.P(N+2,4)) IAZIID=N+2
+ THEIID=PYANGL(P(IAZIID,3),SQRT(P(IAZIID,1)**2+P(IAZIID,2)**2))
+ IF(III.EQ.2) THEIID=PARU(1)-THEIID
+ PHIIID=PYANGL(P(IAZIID,1),P(IAZIID,2))
+ HAZII=MIN(0.95D0,THEIID/THEIIS(III,ISII(III)))
+ CAD=COS(PHIIID-PHIIIS(III,ISII(III)))
+ PHIREL=ABS(PHIIID-PHIIIS(III,ISII(III)))
+ IF(PHIREL.GT.PARU(1)) PHIREL=PARU(2)-PHIREL
+ IF((1D0-HAZII)*(1D0-HAZII*CAD)/(1D0+HAZII**2-2D0*HAZII*CAD)
+ & .LT.PYR(0)) GOTO 470
+ ENDIF
+ ENDIF
+
+C...Continue loop over partons that may branch, until none left.
+ IF(IGM.GE.0) K(IM,1)=14
+ N=N+NEP
+ NEP=2
+ IF(N.GT.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
+ IF(MSTU(21).GE.1) N=NS
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ GOTO 270
+
+C...Set information on imagined shower initiator.
+ 510 IF(NPA.GE.2) THEN
+ K(NS+1,1)=11
+ K(NS+1,2)=94
+ K(NS+1,3)=IP1
+ IF(IP2.GT.0.AND.IP2.LT.IP1) K(NS+1,3)=IP2
+ K(NS+1,4)=NS+2
+ K(NS+1,5)=NS+1+NPA
+ IIM=1
+ ELSE
+ IIM=0
+ ENDIF
+
+C...Reconstruct string drawing information.
+ DO 520 I=NS+1+IIM,N
+ IF(K(I,1).LE.10.AND.K(I,2).EQ.22) THEN
+ K(I,1)=1
+ ELSEIF(K(I,1).LE.10.AND.IABS(K(I,2)).GE.11.AND.
+ & IABS(K(I,2)).LE.18) THEN
+ K(I,1)=1
+ ELSEIF(K(I,1).LE.10) THEN
+ K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))
+ K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))
+ ELSEIF(K(MOD(K(I,4),MSTU(5))+1,2).NE.22) THEN
+ ID1=MOD(K(I,4),MSTU(5))
+ IF(K(I,2).GE.1.AND.K(I,2).LE.8) ID1=MOD(K(I,4),MSTU(5))+1
+ ID2=2*MOD(K(I,4),MSTU(5))+1-ID1
+ K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))+ID1
+ K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))+ID2
+ K(ID1,4)=K(ID1,4)+MSTU(5)*I
+ K(ID1,5)=K(ID1,5)+MSTU(5)*ID2
+ K(ID2,4)=K(ID2,4)+MSTU(5)*ID1
+ K(ID2,5)=K(ID2,5)+MSTU(5)*I
+ ELSE
+ ID1=MOD(K(I,4),MSTU(5))
+ ID2=ID1+1
+ K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))+ID1
+ K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))+ID1
+ IF(IABS(K(I,2)).LE.10.OR.K(ID1,1).GE.11) THEN
+ K(ID1,4)=K(ID1,4)+MSTU(5)*I
+ K(ID1,5)=K(ID1,5)+MSTU(5)*I
+ ELSE
+ K(ID1,4)=0
+ K(ID1,5)=0
+ ENDIF
+ K(ID2,4)=0
+ K(ID2,5)=0
+ ENDIF
+ 520 CONTINUE
+
+C...Transformation from CM frame.
+ IF(NPA.GE.2) THEN
+ BEX=PS(1)/PS(4)
+ BEY=PS(2)/PS(4)
+ BEZ=PS(3)/PS(4)
+ GA=PS(4)/PS(5)
+ GABEP=GA*(GA*(BEX*P(IPA(1),1)+BEY*P(IPA(1),2)+BEZ*P(IPA(1),3))
+ & /(1D0+GA)-P(IPA(1),4))
+ ELSE
+ BEX=0D0
+ BEY=0D0
+ BEZ=0D0
+ GABEP=0D0
+ ENDIF
+ THE=PYANGL(P(IPA(1),3)+GABEP*BEZ,SQRT((P(IPA(1),1)
+ &+GABEP*BEX)**2+(P(IPA(1),2)+GABEP*BEY)**2))
+ PHI=PYANGL(P(IPA(1),1)+GABEP*BEX,P(IPA(1),2)+GABEP*BEY)
+ IF(NPA.EQ.3) THEN
+ CHI=PYANGL(COS(THE)*COS(PHI)*(P(IPA(2),1)+GABEP*BEX)+COS(THE)*
+ & SIN(PHI)*(P(IPA(2),2)+GABEP*BEY)-SIN(THE)*(P(IPA(2),3)+GABEP*
+ & BEZ),-SIN(PHI)*(P(IPA(2),1)+GABEP*BEX)+COS(PHI)*(P(IPA(2),2)+
+ & GABEP*BEY))
+ MSTU(33)=1
+ CALL PYROBO(NS+1,N,0D0,CHI,0D0,0D0,0D0)
+ ENDIF
+ MSTU(33)=1
+ CALL PYROBO(NS+1,N,THE,PHI,BEX,BEY,BEZ)
+
+C...Decay vertex of shower.
+ DO 540 I=NS+1,N
+ DO 530 J=1,5
+ V(I,J)=V(IP1,J)
+ 530 CONTINUE
+ 540 CONTINUE
+
+C...Delete trivial shower, else connect initiators.
+ IF(N.EQ.NS+NPA+IIM) THEN
+ N=NS
+ ELSE
+ DO 550 IP=1,NPA
+ K(IPA(IP),1)=14
+ K(IPA(IP),4)=K(IPA(IP),4)+NS+IIM+IP
+ K(IPA(IP),5)=K(IPA(IP),5)+NS+IIM+IP
+ K(NS+IIM+IP,3)=IPA(IP)
+ IF(IIM.EQ.1.AND.MSTU(16).NE.2) K(NS+IIM+IP,3)=NS+1
+ IF(K(NS+IIM+IP,1).NE.1) THEN
+ K(NS+IIM+IP,4)=MSTU(5)*IPA(IP)+K(NS+IIM+IP,4)
+ K(NS+IIM+IP,5)=MSTU(5)*IPA(IP)+K(NS+IIM+IP,5)
+ ENDIF
+ 550 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYBOEI
+C...Modifies an event so as to approximately take into account
+C...Bose-Einstein effects according to a simple phenomenological
+C...parametrization.
+
+ SUBROUTINE PYBOEI(NSAV)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYJETS/,/PYDAT1/
+C...Local arrays and data.
+ DIMENSION DPS(4),KFBE(9),NBE(0:9),BEI(100)
+ DATA KFBE/211,-211,111,321,-321,130,310,221,331/
+
+C...Boost event to overall CM frame. Calculate CM energy.
+ IF((MSTJ(51).NE.1.AND.MSTJ(51).NE.2).OR.N-NSAV.LE.1) RETURN
+ DO 100 J=1,4
+ DPS(J)=0D0
+ 100 CONTINUE
+ DO 120 I=1,N
+ KFA=IABS(K(I,2))
+ IF(K(I,1).LE.10.AND.((KFA.GT.10.AND.KFA.LE.20).OR.KFA.EQ.22)
+ & .AND.K(I,3).GT.0) THEN
+ KFMA=IABS(K(K(I,3),2))
+ IF(KFMA.GT.10.AND.KFMA.LE.80) K(I,1)=-K(I,1)
+ ENDIF
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 120
+ DO 110 J=1,4
+ DPS(J)=DPS(J)+P(I,J)
+ 110 CONTINUE
+ 120 CONTINUE
+ CALL PYROBO(0,0,0D0,0D0,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
+ &-DPS(3)/DPS(4))
+ PECM=0D0
+ DO 130 I=1,N
+ IF(K(I,1).GE.1.AND.K(I,1).LE.10) PECM=PECM+P(I,4)
+ 130 CONTINUE
+
+C...Reserve copy of particles by species at end of record.
+ NBE(0)=N+MSTU(3)
+ DO 160 IBE=1,MIN(9,MSTJ(52))
+ NBE(IBE)=NBE(IBE-1)
+ DO 150 I=NSAV+1,N
+ IF(K(I,2).NE.KFBE(IBE)) GOTO 150
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 150
+ IF(NBE(IBE).GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYBOEI:) no more memory left in PYJETS')
+ RETURN
+ ENDIF
+ NBE(IBE)=NBE(IBE)+1
+ K(NBE(IBE),1)=I
+ DO 140 J=1,3
+ P(NBE(IBE),J)=0D0
+ 140 CONTINUE
+ 150 CONTINUE
+ 160 CONTINUE
+ IF(NBE(MIN(9,MSTJ(52)))-NBE(0).LE.1) GOTO 280
+
+C...Tabulate integral for subsequent momentum shift.
+ DO 220 IBE=1,MIN(9,MSTJ(52))
+ IF(IBE.NE.1.AND.IBE.NE.4.AND.IBE.LE.7) GOTO 180
+ IF(IBE.EQ.1.AND.MAX(NBE(1)-NBE(0),NBE(2)-NBE(1),NBE(3)-NBE(2))
+ & .LE.1) GOTO 180
+ IF(IBE.EQ.4.AND.MAX(NBE(4)-NBE(3),NBE(5)-NBE(4),NBE(6)-NBE(5),
+ & NBE(7)-NBE(6)).LE.1) GOTO 180
+ IF(IBE.GE.8.AND.NBE(IBE)-NBE(IBE-1).LE.1) GOTO 180
+ IF(IBE.EQ.1) PMHQ=2D0*PYMASS(211)
+ IF(IBE.EQ.4) PMHQ=2D0*PYMASS(321)
+ IF(IBE.EQ.8) PMHQ=2D0*PYMASS(221)
+ IF(IBE.EQ.9) PMHQ=2D0*PYMASS(331)
+ QDEL=0.1D0*MIN(PMHQ,PARJ(93))
+ IF(MSTJ(51).EQ.1) THEN
+ NBIN=MIN(100,NINT(9D0*PARJ(93)/QDEL))
+ BEEX=EXP(0.5D0*QDEL/PARJ(93))
+ BERT=EXP(-QDEL/PARJ(93))
+ ELSE
+ NBIN=MIN(100,NINT(3D0*PARJ(93)/QDEL))
+ ENDIF
+ DO 170 IBIN=1,NBIN
+ QBIN=QDEL*(IBIN-0.5D0)
+ BEI(IBIN)=QDEL*(QBIN**2+QDEL**2/12D0)/SQRT(QBIN**2+PMHQ**2)
+ IF(MSTJ(51).EQ.1) THEN
+ BEEX=BEEX*BERT
+ BEI(IBIN)=BEI(IBIN)*BEEX
+ ELSE
+ BEI(IBIN)=BEI(IBIN)*EXP(-(QBIN/PARJ(93))**2)
+ ENDIF
+ IF(IBIN.GE.2) BEI(IBIN)=BEI(IBIN)+BEI(IBIN-1)
+ 170 CONTINUE
+
+C...Loop through particle pairs and find old relative momentum.
+ 180 DO 210 I1M=NBE(IBE-1)+1,NBE(IBE)-1
+ I1=K(I1M,1)
+ DO 200 I2M=I1M+1,NBE(IBE)
+ I2=K(I2M,1)
+ Q2OLD=MAX(0D0,(P(I1,4)+P(I2,4))**2-(P(I1,1)+P(I2,1))**2-
+ & (P(I1,2)+ P(I2,2))**2-(P(I1,3)+P(I2,3))**2-
+ & (P(I1,5)+P(I2,5))**2)
+ QOLD=SQRT(Q2OLD)
+
+C...Calculate new relative momentum.
+ IF(QOLD.LT.1D-3*QDEL) THEN
+ GOTO 200
+ ELSEIF(QOLD.LE.QDEL) THEN
+ QMOV=QOLD/3D0
+ ELSEIF(QOLD.LT.(NBIN-0.1D0)*QDEL) THEN
+ RBIN=QOLD/QDEL
+ IBIN=RBIN
+ RINP=(RBIN**3-IBIN**3)/(3*IBIN*(IBIN+1)+1)
+ QMOV=(BEI(IBIN)+RINP*(BEI(IBIN+1)-BEI(IBIN)))*
+ & SQRT(Q2OLD+PMHQ**2)/Q2OLD
+ ELSE
+ QMOV=BEI(NBIN)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
+ ENDIF
+ Q2NEW=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV))**(2D0/3D0)
+
+C...Calculate and save shift to be performed on three-momenta.
+ HC1=(P(I1,4)+P(I2,4))**2-(Q2OLD-Q2NEW)
+ HC2=(Q2OLD-Q2NEW)*(P(I1,4)-P(I2,4))**2
+ HA=0.5D0*(1D0-SQRT(HC1*Q2NEW/(HC1*Q2OLD-HC2)))
+ DO 190 J=1,3
+ PD=HA*(P(I2,J)-P(I1,J))
+ P(I1M,J)=P(I1M,J)+PD
+ P(I2M,J)=P(I2M,J)-PD
+ 190 CONTINUE
+ 200 CONTINUE
+ 210 CONTINUE
+ 220 CONTINUE
+
+C...Shift momenta and recalculate energies.
+ DO 240 IM=NBE(0)+1,NBE(MIN(9,MSTJ(52)))
+ I=K(IM,1)
+ DO 230 J=1,3
+ P(I,J)=P(I,J)+P(IM,J)
+ 230 CONTINUE
+ P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ 240 CONTINUE
+
+C...Rescale all momenta for energy conservation.
+ PES=0D0
+ PQS=0D0
+ DO 250 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 250
+ PES=PES+P(I,4)
+ PQS=PQS+P(I,5)**2/P(I,4)
+ 250 CONTINUE
+ FAC=(PECM-PQS)/(PES-PQS)
+ DO 270 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 270
+ DO 260 J=1,3
+ P(I,J)=FAC*P(I,J)
+ 260 CONTINUE
+ P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ 270 CONTINUE
+
+C...Boost back to correct reference frame.
+ 280 CALL PYROBO(0,0,0D0,0D0,DPS(1)/DPS(4),DPS(2)/DPS(4),DPS(3)/DPS(4))
+ DO 290 I=1,N
+ IF(K(I,1).LT.0) K(I,1)=-K(I,1)
+ 290 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYMASS
+C...Gives the mass of a particle/parton.
+
+ FUNCTION PYMASS(KF)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+C...Reset variables. Compressed code. Special case for popcorn diquarks.
+ PYMASS=0D0
+ KFA=IABS(KF)
+ KC=PYCOMP(KF)
+ IF(KC.EQ.0) THEN
+ MSTJ(93)=0
+ RETURN
+ ENDIF
+
+C...Guarantee use of constituent masses for internal checks.
+ IF((MSTJ(93).EQ.1.OR.MSTJ(93).EQ.2).AND.
+ &(KFA.LE.10.OR.MOD(KFA/10,10).EQ.0)) THEN
+ PARF(106)=PMAS(6,1)
+ PARF(107)=PMAS(7,1)
+ PARF(108)=PMAS(8,1)
+ IF(KFA.LE.10) THEN
+ PYMASS=PARF(100+KFA)
+ IF(MSTJ(93).EQ.2) PYMASS=MAX(0D0,PYMASS-PARF(121))
+ ELSEIF(MSTJ(93).EQ.1) THEN
+ PYMASS=PARF(100+MOD(KFA/1000,10))+PARF(100+MOD(KFA/100,10))
+ ELSE
+ PYMASS=MAX(0D0,PMAS(KC,1)-PARF(122)-2D0*PARF(112)/3D0)
+ ENDIF
+
+C...Other masses can be read directly off table.
+ ELSE
+ PYMASS=PMAS(KC,1)
+ ENDIF
+
+C...Optional mass broadening according to truncated Breit-Wigner
+C...(either in m or in m^2).
+ IF(MSTJ(24).GE.1.AND.PMAS(KC,2).GT.1D-4) THEN
+ IF(MSTJ(24).EQ.1.OR.(MSTJ(24).EQ.2.AND.KFA.GT.100)) THEN
+ PYMASS=PYMASS+0.5D0*PMAS(KC,2)*TAN((2D0*PYR(0)-1D0)*
+ & ATAN(2D0*PMAS(KC,3)/PMAS(KC,2)))
+ ELSE
+ PM0=PYMASS
+ PMLOW=ATAN((MAX(0D0,PM0-PMAS(KC,3))**2-PM0**2)/
+ & (PM0*PMAS(KC,2)))
+ PMUPP=ATAN(((PM0+PMAS(KC,3))**2-PM0**2)/(PM0*PMAS(KC,2)))
+ PYMASS=SQRT(MAX(0D0,PM0**2+PM0*PMAS(KC,2)*TAN(PMLOW+
+ & (PMUPP-PMLOW)*PYR(0))))
+ ENDIF
+ ENDIF
+ MSTJ(93)=0
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYNAME
+C...Gives the particle/parton name as a character string.
+
+ SUBROUTINE PYNAME(KF,CHAU)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT4/CHAF(500,2)
+ CHARACTER CHAF*16
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT4/
+C...Local character variable.
+ CHARACTER CHAU*16
+
+C...Read out code with distinction particle/antiparticle.
+ CHAU=' '
+ KC=PYCOMP(KF)
+ IF(KC.NE.0) CHAU=CHAF(KC,(3-ISIGN(1,KF))/2)
+
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYCHGE
+C...Gives three times the charge for a particle/parton.
+
+ FUNCTION PYCHGE(KF)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT2/
+
+C...Read out charge and change sign for antiparticle.
+ PYCHGE=0
+ KC=PYCOMP(KF)
+ IF(KC.NE.0) PYCHGE=KCHG(KC,1)*ISIGN(1,KF)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYCOMP
+C...Compress the standard KF codes for use in mass and decay arrays;
+C...also checks whether a given code actually is defined.
+
+ FUNCTION PYCOMP(KF)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+C...Local arrays and saved data.
+ DIMENSION KFORD(100:500),KCORD(101:500)
+ SAVE KFORD,KCORD,NFORD,KFLAST,KCLAST
+
+C...Whenever necessary reorder codes for faster search.
+ IF(MSTU(20).EQ.0) THEN
+ NFORD=100
+ KFORD(100)=0
+ DO 120 I=101,500
+ KFA=KCHG(I,4)
+ IF(KFA.LE.100) GOTO 120
+ NFORD=NFORD+1
+ DO 100 I1=NFORD-1,0,-1
+ IF(KFA.GE.KFORD(I1)) GOTO 110
+ KFORD(I1+1)=KFORD(I1)
+ KCORD(I1+1)=KCORD(I1)
+ 100 CONTINUE
+ 110 KFORD(I1+1)=KFA
+ KCORD(I1+1)=I
+ 120 CONTINUE
+ MSTU(20)=1
+ KFLAST=0
+ KCLAST=0
+ ENDIF
+
+C...Fast action if same code as in latest call.
+ IF(KF.EQ.KFLAST) THEN
+ PYCOMP=KCLAST
+ RETURN
+ ENDIF
+
+C...Starting values. Remove internal diquark flags.
+ PYCOMP=0
+ KFA=IABS(KF)
+ IF(MOD(KFA/10,10).EQ.0.AND.KFA.LT.100000
+ & .AND.MOD(KFA/1000,10).GT.0) KFA=MOD(KFA,10000)
+
+C...Simple cases: direct translation.
+ IF(KFA.GT.KFORD(NFORD)) THEN
+ ELSEIF(KFA.LE.100) THEN
+ PYCOMP=KFA
+
+C...Else binary search.
+ ELSE
+ IMIN=100
+ IMAX=NFORD+1
+ 130 IAVG=(IMIN+IMAX)/2
+ IF(KFORD(IAVG).GT.KFA) THEN
+ IMAX=IAVG
+ IF(IMAX.GT.IMIN+1) GOTO 130
+ ELSEIF(KFORD(IAVG).LT.KFA) THEN
+ IMIN=IAVG
+ IF(IMAX.GT.IMIN+1) GOTO 130
+ ELSE
+ PYCOMP=KCORD(IAVG)
+ ENDIF
+ ENDIF
+
+C...Check if antiparticle allowed.
+ IF(PYCOMP.NE.0.AND.KF.LT.0) THEN
+ IF(KCHG(PYCOMP,3).EQ.0) PYCOMP=0
+ ENDIF
+
+C...Save codes for possible future fast action.
+ KFLAST=KF
+ KCLAST=PYCOMP
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYERRM
+C...Informs user of errors in program execution.
+
+ SUBROUTINE PYERRM(MERR,CHMESS)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYJETS/,/PYDAT1/
+C...Local character variable.
+ CHARACTER CHMESS*(*)
+
+C...Write first few warnings, then be silent.
+ IF(MERR.LE.10) THEN
+ MSTU(27)=MSTU(27)+1
+ MSTU(28)=MERR
+ IF(MSTU(25).EQ.1.AND.MSTU(27).LE.MSTU(26)) WRITE(MSTU(11),5000)
+ & MERR,MSTU(31),CHMESS
+
+C...Write first few errors, then be silent or stop program.
+ ELSEIF(MERR.LE.20) THEN
+ MSTU(23)=MSTU(23)+1
+ MSTU(24)=MERR-10
+ IF(MSTU(21).GE.1.AND.MSTU(23).LE.MSTU(22)) WRITE(MSTU(11),5100)
+ & MERR-10,MSTU(31),CHMESS
+ IF(MSTU(21).GE.2.AND.MSTU(23).GT.MSTU(22)) THEN
+ WRITE(MSTU(11),5100) MERR-10,MSTU(31),CHMESS
+ WRITE(MSTU(11),5200)
+ IF(MERR.NE.17) CALL PYLIST(2)
+ STOP
+ ENDIF
+
+C...Stop program in case of irreparable error.
+ ELSE
+ WRITE(MSTU(11),5300) MERR-20,MSTU(31),CHMESS
+ STOP
+ ENDIF
+
+C...Formats for output.
+ 5000 FORMAT(/5X,'Advisory warning type',I2,' given after',I9,
+ &' PYEXEC calls:'/5X,A)
+ 5100 FORMAT(/5X,'Error type',I2,' has occured after',I9,
+ &' PYEXEC calls:'/5X,A)
+ 5200 FORMAT(5X,'Execution will be stopped after listing of last ',
+ &'event!')
+ 5300 FORMAT(/5X,'Fatal error type',I2,' has occured after',I9,
+ &' PYEXEC calls:'/5X,A/5X,'Execution will now be stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYALEM
+C...Calculates the running alpha_electromagnetic.
+
+ FUNCTION PYALEM(Q2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+C...Calculate real part of photon vacuum polarization.
+C...For leptons simplify by using asymptotic (Q^2 >> m^2) expressions.
+C...For hadrons use parametrization of H. Burkhardt et al.
+C...See R. Kleiss et al, CERN 89-08, vol. 3, pp. 129-131.
+ AEMPI=PARU(101)/(3D0*PARU(1))
+ IF(MSTU(101).LE.0.OR.Q2.LT.2D-6) THEN
+ RPIGG=0D0
+ ELSEIF(MSTU(101).EQ.2.AND.Q2.LT.PARU(104)) THEN
+ RPIGG=0D0
+ ELSEIF(MSTU(101).EQ.2) THEN
+ RPIGG=1D0-PARU(101)/PARU(103)
+ ELSEIF(Q2.LT.0.09D0) THEN
+ RPIGG=AEMPI*(13.4916D0+LOG(Q2))+0.00835D0*LOG(1D0+Q2)
+ ELSEIF(Q2.LT.9D0) THEN
+ RPIGG=AEMPI*(16.3200D0+2D0*LOG(Q2))+
+ & 0.00238D0*LOG(1D0+3.927D0*Q2)
+ ELSEIF(Q2.LT.1D4) THEN
+ RPIGG=AEMPI*(13.4955D0+3D0*LOG(Q2))+0.00165D0+
+ & 0.00299D0*LOG(1D0+Q2)
+ ELSE
+ RPIGG=AEMPI*(13.4955D0+3D0*LOG(Q2))+0.00221D0+
+ & 0.00293D0*LOG(1D0+Q2)
+ ENDIF
+
+C...Calculate running alpha_em.
+ PYALEM=PARU(101)/(1D0-RPIGG)
+ PARU(108)=PYALEM
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYALPS
+C...Gives the value of alpha_strong.
+
+ FUNCTION PYALPS(Q2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+C...Constant alpha_strong trivial. Pick artificial Lambda.
+ IF(MSTU(111).LE.0) THEN
+ PYALPS=PARU(111)
+ MSTU(118)=MSTU(112)
+ PARU(117)=0.2D0
+ IF(Q2.GT.0.04D0) PARU(117)=SQRT(Q2)*EXP(-6D0*PARU(1)/
+ & ((33D0-2D0*MSTU(112))*PARU(111)))
+ PARU(118)=PARU(111)
+ RETURN
+ ENDIF
+
+C...Find effective Q2, number of flavours and Lambda.
+ Q2EFF=Q2
+ IF(MSTU(115).GE.2) Q2EFF=MAX(Q2,PARU(114))
+ NF=MSTU(112)
+ ALAM2=PARU(112)**2
+ 100 IF(NF.GT.MAX(2,MSTU(113))) THEN
+ Q2THR=PARU(113)*PMAS(NF,1)**2
+ IF(Q2EFF.LT.Q2THR) THEN
+ NF=NF-1
+ ALAM2=ALAM2*(Q2THR/ALAM2)**(2D0/(33D0-2D0*NF))
+ GOTO 100
+ ENDIF
+ ENDIF
+ 110 IF(NF.LT.MIN(8,MSTU(114))) THEN
+ Q2THR=PARU(113)*PMAS(NF+1,1)**2
+ IF(Q2EFF.GT.Q2THR) THEN
+ NF=NF+1
+ ALAM2=ALAM2*(ALAM2/Q2THR)**(2D0/(33D0-2D0*NF))
+ GOTO 110
+ ENDIF
+ ENDIF
+ IF(MSTU(115).EQ.1) Q2EFF=Q2EFF+ALAM2
+ PARU(117)=SQRT(ALAM2)
+
+C...Evaluate first or second order alpha_strong.
+ B0=(33D0-2D0*NF)/6D0
+ ALGQ=LOG(MAX(1.0001D0,Q2EFF/ALAM2))
+ IF(MSTU(111).EQ.1) THEN
+ PYALPS=MIN(PARU(115),PARU(2)/(B0*ALGQ))
+ ELSE
+ B1=(153D0-19D0*NF)/6D0
+ PYALPS=MIN(PARU(115),PARU(2)/(B0*ALGQ)*(1D0-B1*LOG(ALGQ)/
+ & (B0**2*ALGQ)))
+ ENDIF
+ MSTU(118)=NF
+ PARU(118)=PYALPS
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYANGL
+C...Reconstructs an angle from given x and y coordinates.
+
+ FUNCTION PYANGL(X,Y)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+ PYANGL=0D0
+ R=SQRT(X**2+Y**2)
+ IF(R.LT.1D-20) RETURN
+ IF(ABS(X)/R.LT.0.8D0) THEN
+ PYANGL=SIGN(ACOS(X/R),Y)
+ ELSE
+ PYANGL=ASIN(Y/R)
+ IF(X.LT.0D0.AND.PYANGL.GE.0D0) THEN
+ PYANGL=PARU(1)-PYANGL
+ ELSEIF(X.LT.0D0) THEN
+ PYANGL=-PARU(1)-PYANGL
+ ENDIF
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYR
+C...Generates random numbers uniformly distributed between
+C...0 and 1, excluding the endpoints.
+
+**sr renamed for use of internal dpmjet3 random number generator
+ FUNCTION XPYR(IDUMMY)
+**
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDATR/MRPY(6),RRPY(100)
+ SAVE /PYDATR/
+C...Equivalence between commonblock and local variables.
+ EQUIVALENCE (MRPY1,MRPY(1)),(MRPY2,MRPY(2)),(MRPY3,MRPY(3)),
+ &(MRPY4,MRPY(4)),(MRPY5,MRPY(5)),(MRPY6,MRPY(6)),
+ &(RRPY98,RRPY(98)),(RRPY99,RRPY(99)),(RRPY00,RRPY(100))
+
+C...Initialize generation from given seed.
+ IF(MRPY2.EQ.0) THEN
+ IJ=MOD(MRPY1/30082,31329)
+ KL=MOD(MRPY1,30082)
+ I=MOD(IJ/177,177)+2
+ J=MOD(IJ,177)+2
+ K=MOD(KL/169,178)+1
+ L=MOD(KL,169)
+ DO 110 II=1,97
+ S=0D0
+ T=0.5D0
+ DO 100 JJ=1,48
+ M=MOD(MOD(I*J,179)*K,179)
+ I=J
+ J=K
+ K=M
+ L=MOD(53*L+1,169)
+ IF(MOD(L*M,64).GE.32) S=S+T
+ T=0.5D0*T
+ 100 CONTINUE
+ RRPY(II)=S
+ 110 CONTINUE
+ TWOM24=1D0
+ DO 120 I24=1,24
+ TWOM24=0.5D0*TWOM24
+ 120 CONTINUE
+ RRPY98=362436D0*TWOM24
+ RRPY99=7654321D0*TWOM24
+ RRPY00=16777213D0*TWOM24
+ MRPY2=1
+ MRPY3=0
+ MRPY4=97
+ MRPY5=33
+ ENDIF
+
+C...Generate next random number.
+ 130 RUNI=RRPY(MRPY4)-RRPY(MRPY5)
+ IF(RUNI.LT.0D0) RUNI=RUNI+1D0
+ RRPY(MRPY4)=RUNI
+ MRPY4=MRPY4-1
+ IF(MRPY4.EQ.0) MRPY4=97
+ MRPY5=MRPY5-1
+ IF(MRPY5.EQ.0) MRPY5=97
+ RRPY98=RRPY98-RRPY99
+ IF(RRPY98.LT.0D0) RRPY98=RRPY98+RRPY00
+ RUNI=RUNI-RRPY98
+ IF(RUNI.LT.0D0) RUNI=RUNI+1D0
+ IF(RUNI.LE.0D0.OR.RUNI.GE.1D0) GOTO 130
+
+C...Update counters. Random number to output.
+ MRPY3=MRPY3+1
+ IF(MRPY3.EQ.1000000000) THEN
+ MRPY2=MRPY2+1
+ MRPY3=0
+ ENDIF
+ PYR=RUNI
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRGET
+C...Dumps the state of the random number generator on a file
+C...for subsequent startup from this state onwards.
+
+ SUBROUTINE PYRGET(LFN,MOVE)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDATR/MRPY(6),RRPY(100)
+ SAVE /PYDATR/
+C...Local character variable.
+ CHARACTER CHERR*8
+
+C...Backspace required number of records (or as many as there are).
+ IF(MOVE.LT.0) THEN
+ NBCK=MIN(MRPY(6),-MOVE)
+ DO 100 IBCK=1,NBCK
+ BACKSPACE(LFN,ERR=110,IOSTAT=IERR)
+ 100 CONTINUE
+ MRPY(6)=MRPY(6)-NBCK
+ ENDIF
+
+C...Unformatted write on unit LFN.
+ WRITE(LFN,ERR=110,IOSTAT=IERR) (MRPY(I1),I1=1,5),
+ &(RRPY(I2),I2=1,100)
+ MRPY(6)=MRPY(6)+1
+ RETURN
+
+C...Write error.
+ 110 WRITE(CHERR,'(I8)') IERR
+ CALL PYERRM(18,'(PYRGET:) error when accessing file, IOSTAT ='//
+ &CHERR)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRSET
+C...Reads a state of the random number generator from a file
+C...for subsequent generation from this state onwards.
+
+ SUBROUTINE PYRSET(LFN,MOVE)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDATR/MRPY(6),RRPY(100)
+ SAVE /PYDATR/
+C...Local character variable.
+ CHARACTER CHERR*8
+
+C...Backspace required number of records (or as many as there are).
+ IF(MOVE.LT.0) THEN
+ NBCK=MIN(MRPY(6),-MOVE)
+ DO 100 IBCK=1,NBCK
+ BACKSPACE(LFN,ERR=120,IOSTAT=IERR)
+ 100 CONTINUE
+ MRPY(6)=MRPY(6)-NBCK
+ ENDIF
+
+C...Unformatted read from unit LFN.
+ NFOR=1+MAX(0,MOVE)
+ DO 110 IFOR=1,NFOR
+ READ(LFN,ERR=120,IOSTAT=IERR) (MRPY(I1),I1=1,5),
+ & (RRPY(I2),I2=1,100)
+ 110 CONTINUE
+ MRPY(6)=MRPY(6)+NFOR
+ RETURN
+
+C...Write error.
+ 120 WRITE(CHERR,'(I8)') IERR
+ CALL PYERRM(18,'(PYRSET:) error when accessing file, IOSTAT ='//
+ &CHERR)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYROBO
+C...Performs rotations and boosts.
+
+ SUBROUTINE PYROBO(IMI,IMA,THE,PHI,BEX,BEY,BEZ)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYJETS/,/PYDAT1/
+C...Local arrays.
+ DIMENSION ROT(3,3),PR(3),VR(3),DP(4),DV(4)
+
+C...Find and check range of rotation/boost.
+ IMIN=IMI
+ IF(IMIN.LE.0) IMIN=1
+ IF(MSTU(1).GT.0) IMIN=MSTU(1)
+ IMAX=IMA
+ IF(IMAX.LE.0) IMAX=N
+ IF(MSTU(2).GT.0) IMAX=MSTU(2)
+ IF(IMIN.GT.MSTU(4).OR.IMAX.GT.MSTU(4)) THEN
+ CALL PYERRM(11,'(PYROBO:) range outside PYJETS memory')
+ RETURN
+ ENDIF
+
+C...Optional resetting of V (when not set before.)
+ IF(MSTU(33).NE.0) THEN
+ DO 110 I=MIN(IMIN,MSTU(4)),MIN(IMAX,MSTU(4))
+ DO 100 J=1,5
+ V(I,J)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+ MSTU(33)=0
+ ENDIF
+
+C...Rotate, typically from z axis to direction (theta,phi).
+ IF(THE**2+PHI**2.GT.1D-20) THEN
+ ROT(1,1)=COS(THE)*COS(PHI)
+ ROT(1,2)=-SIN(PHI)
+ ROT(1,3)=SIN(THE)*COS(PHI)
+ ROT(2,1)=COS(THE)*SIN(PHI)
+ ROT(2,2)=COS(PHI)
+ ROT(2,3)=SIN(THE)*SIN(PHI)
+ ROT(3,1)=-SIN(THE)
+ ROT(3,2)=0D0
+ ROT(3,3)=COS(THE)
+ DO 140 I=IMIN,IMAX
+ IF(K(I,1).LE.0) GOTO 140
+ DO 120 J=1,3
+ PR(J)=P(I,J)
+ VR(J)=V(I,J)
+ 120 CONTINUE
+ DO 130 J=1,3
+ P(I,J)=ROT(J,1)*PR(1)+ROT(J,2)*PR(2)+ROT(J,3)*PR(3)
+ V(I,J)=ROT(J,1)*VR(1)+ROT(J,2)*VR(2)+ROT(J,3)*VR(3)
+ 130 CONTINUE
+ 140 CONTINUE
+ ENDIF
+
+C...Boost, typically from rest to momentum/energy=beta.
+ IF(BEX**2+BEY**2+BEZ**2.GT.1D-20) THEN
+ DBX=BEX
+ DBY=BEY
+ DBZ=BEZ
+ DB=SQRT(DBX**2+DBY**2+DBZ**2)
+ EPS1=1D0-1D-12
+ IF(DB.GT.EPS1) THEN
+C...Rescale boost vector if too close to unity.
+ CALL PYERRM(3,'(PYROBO:) boost vector too large')
+ DBX=DBX*(EPS1/DB)
+ DBY=DBY*(EPS1/DB)
+ DBZ=DBZ*(EPS1/DB)
+ DB=EPS1
+ ENDIF
+ DGA=1D0/SQRT(1D0-DB**2)
+ DO 160 I=IMIN,IMAX
+ IF(K(I,1).LE.0) GOTO 160
+ DO 150 J=1,4
+ DP(J)=P(I,J)
+ DV(J)=V(I,J)
+ 150 CONTINUE
+ DBP=DBX*DP(1)+DBY*DP(2)+DBZ*DP(3)
+ DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP(4))
+ P(I,1)=DP(1)+DGABP*DBX
+ P(I,2)=DP(2)+DGABP*DBY
+ P(I,3)=DP(3)+DGABP*DBZ
+ P(I,4)=DGA*(DP(4)+DBP)
+ DBV=DBX*DV(1)+DBY*DV(2)+DBZ*DV(3)
+ DGABV=DGA*(DGA*DBV/(1D0+DGA)+DV(4))
+ V(I,1)=DV(1)+DGABV*DBX
+ V(I,2)=DV(2)+DGABV*DBY
+ V(I,3)=DV(3)+DGABV*DBZ
+ V(I,4)=DGA*(DV(4)+DBV)
+ 160 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYEDIT
+C...Performs global manipulations on the event record, in particular
+C...to exclude unstable or undetectable partons/particles.
+
+ SUBROUTINE PYEDIT(MEDIT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION NS(2),PTS(2),PLS(2)
+
+C...Remove unwanted partons/particles.
+ IF((MEDIT.GE.0.AND.MEDIT.LE.3).OR.MEDIT.EQ.5) THEN
+ IMAX=N
+ IF(MSTU(2).GT.0) IMAX=MSTU(2)
+ I1=MAX(1,MSTU(1))-1
+ DO 110 I=MAX(1,MSTU(1)),IMAX
+ IF(K(I,1).EQ.0.OR.K(I,1).GT.20) GOTO 110
+ IF(MEDIT.EQ.1) THEN
+ IF(K(I,1).GT.10) GOTO 110
+ ELSEIF(MEDIT.EQ.2) THEN
+ IF(K(I,1).GT.10) GOTO 110
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.KC.EQ.18)
+ & GOTO 110
+ ELSEIF(MEDIT.EQ.3) THEN
+ IF(K(I,1).GT.10) GOTO 110
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 110
+ IF(KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0) GOTO 110
+ ELSEIF(MEDIT.EQ.5) THEN
+ IF(K(I,1).EQ.13.OR.K(I,1).EQ.14) GOTO 110
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0) GOTO 110
+ IF(K(I,1).GE.11.AND.KCHG(KC,2).EQ.0) GOTO 110
+ ENDIF
+
+C...Pack remaining partons/particles. Origin no longer known.
+ I1=I1+1
+ DO 100 J=1,5
+ K(I1,J)=K(I,J)
+ P(I1,J)=P(I,J)
+ V(I1,J)=V(I,J)
+ 100 CONTINUE
+ K(I1,3)=0
+ 110 CONTINUE
+ IF(I1.LT.N) MSTU(3)=0
+ IF(I1.LT.N) MSTU(70)=0
+ N=I1
+
+C...Selective removal of class of entries. New position of retained.
+ ELSEIF(MEDIT.GE.11.AND.MEDIT.LE.15) THEN
+ I1=0
+ DO 120 I=1,N
+ K(I,3)=MOD(K(I,3),MSTU(5))
+ IF(MEDIT.EQ.11.AND.K(I,1).LT.0) GOTO 120
+ IF(MEDIT.EQ.12.AND.K(I,1).EQ.0) GOTO 120
+ IF(MEDIT.EQ.13.AND.(K(I,1).EQ.11.OR.K(I,1).EQ.12.OR.
+ & K(I,1).EQ.15).AND.K(I,2).NE.94) GOTO 120
+ IF(MEDIT.EQ.14.AND.(K(I,1).EQ.13.OR.K(I,1).EQ.14.OR.
+ & K(I,2).EQ.94)) GOTO 120
+ IF(MEDIT.EQ.15.AND.K(I,1).GE.21) GOTO 120
+ I1=I1+1
+ K(I,3)=K(I,3)+MSTU(5)*I1
+ 120 CONTINUE
+
+C...Find new event history information and replace old.
+ DO 140 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.20.OR.K(I,3)/MSTU(5).EQ.0)
+ & GOTO 140
+ ID=I
+ 130 IM=MOD(K(ID,3),MSTU(5))
+ IF(MEDIT.EQ.13.AND.IM.GT.0.AND.IM.LE.N) THEN
+ IF((K(IM,1).EQ.11.OR.K(IM,1).EQ.12.OR.K(IM,1).EQ.15).AND.
+ & K(IM,2).NE.94) THEN
+ ID=IM
+ GOTO 130
+ ENDIF
+ ELSEIF(MEDIT.EQ.14.AND.IM.GT.0.AND.IM.LE.N) THEN
+ IF(K(IM,1).EQ.13.OR.K(IM,1).EQ.14.OR.K(IM,2).EQ.94) THEN
+ ID=IM
+ GOTO 130
+ ENDIF
+ ENDIF
+ K(I,3)=MSTU(5)*(K(I,3)/MSTU(5))
+ IF(IM.NE.0) K(I,3)=K(I,3)+K(IM,3)/MSTU(5)
+ IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) THEN
+ IF(K(I,4).GT.0.AND.K(I,4).LE.MSTU(4)) K(I,4)=
+ & K(K(I,4),3)/MSTU(5)
+ IF(K(I,5).GT.0.AND.K(I,5).LE.MSTU(4)) K(I,5)=
+ & K(K(I,5),3)/MSTU(5)
+ ELSE
+ KCM=MOD(K(I,4)/MSTU(5),MSTU(5))
+ IF(KCM.GT.0.AND.KCM.LE.MSTU(4)) KCM=K(KCM,3)/MSTU(5)
+ KCD=MOD(K(I,4),MSTU(5))
+ IF(KCD.GT.0.AND.KCD.LE.MSTU(4)) KCD=K(KCD,3)/MSTU(5)
+ K(I,4)=MSTU(5)**2*(K(I,4)/MSTU(5)**2)+MSTU(5)*KCM+KCD
+ KCM=MOD(K(I,5)/MSTU(5),MSTU(5))
+ IF(KCM.GT.0.AND.KCM.LE.MSTU(4)) KCM=K(KCM,3)/MSTU(5)
+ KCD=MOD(K(I,5),MSTU(5))
+ IF(KCD.GT.0.AND.KCD.LE.MSTU(4)) KCD=K(KCD,3)/MSTU(5)
+ K(I,5)=MSTU(5)**2*(K(I,5)/MSTU(5)**2)+MSTU(5)*KCM+KCD
+ ENDIF
+ 140 CONTINUE
+
+C...Pack remaining entries.
+ I1=0
+ MSTU90=MSTU(90)
+ MSTU(90)=0
+ DO 170 I=1,N
+ IF(K(I,3)/MSTU(5).EQ.0) GOTO 170
+ I1=I1+1
+ DO 150 J=1,5
+ K(I1,J)=K(I,J)
+ P(I1,J)=P(I,J)
+ V(I1,J)=V(I,J)
+ 150 CONTINUE
+ K(I1,3)=MOD(K(I1,3),MSTU(5))
+ DO 160 IZ=1,MSTU90
+ IF(I.EQ.MSTU(90+IZ)) THEN
+ MSTU(90)=MSTU(90)+1
+ MSTU(90+MSTU(90))=I1
+ PARU(90+MSTU(90))=PARU(90+IZ)
+ ENDIF
+ 160 CONTINUE
+ 170 CONTINUE
+ IF(I1.LT.N) MSTU(3)=0
+ IF(I1.LT.N) MSTU(70)=0
+ N=I1
+
+C...Fill in some missing daughter pointers (lost in colour flow).
+ ELSEIF(MEDIT.EQ.16) THEN
+ DO 220 I=1,N
+ IF(K(I,1).LE.10.OR.K(I,1).GT.20) GOTO 220
+ IF(K(I,4).NE.0.OR.K(I,5).NE.0) GOTO 220
+C...Find daughters who point to mother.
+ DO 180 I1=I+1,N
+ IF(K(I1,3).NE.I) THEN
+ ELSEIF(K(I,4).EQ.0) THEN
+ K(I,4)=I1
+ ELSE
+ K(I,5)=I1
+ ENDIF
+ 180 CONTINUE
+ IF(K(I,5).EQ.0) K(I,5)=K(I,4)
+ IF(K(I,4).NE.0) GOTO 220
+C...Find daughters who point to documentation version of mother.
+ IM=K(I,3)
+ IF(IM.LE.0.OR.IM.GE.I) GOTO 220
+ IF(K(IM,1).LE.20.OR.K(IM,1).GT.30) GOTO 220
+ IF(K(IM,2).NE.K(I,2).OR.ABS(P(IM,5)-P(I,5)).GT.1D-2) GOTO 220
+ DO 190 I1=I+1,N
+ IF(K(I1,3).NE.IM) THEN
+ ELSEIF(K(I,4).EQ.0) THEN
+ K(I,4)=I1
+ ELSE
+ K(I,5)=I1
+ ENDIF
+ 190 CONTINUE
+ IF(K(I,5).EQ.0) K(I,5)=K(I,4)
+ IF(K(I,4).NE.0) GOTO 220
+C...Find daughters who point to documentation daughters who,
+C...in their turn, point to documentation mother.
+ ID1=IM
+ ID2=IM
+ DO 200 I1=IM+1,I-1
+ IF(K(I1,3).EQ.IM.AND.K(I1,1).GT.20.AND.K(I1,1).LE.30) THEN
+ ID2=I1
+ IF(ID1.EQ.IM) ID1=I1
+ ENDIF
+ 200 CONTINUE
+ DO 210 I1=I+1,N
+ IF(K(I1,3).NE.ID1.AND.K(I1,3).NE.ID2) THEN
+ ELSEIF(K(I,4).EQ.0) THEN
+ K(I,4)=I1
+ ELSE
+ K(I,5)=I1
+ ENDIF
+ 210 CONTINUE
+ IF(K(I,5).EQ.0) K(I,5)=K(I,4)
+ 220 CONTINUE
+
+C...Save top entries at bottom of PYJETS commonblock.
+ ELSEIF(MEDIT.EQ.21) THEN
+ IF(2*N.GE.MSTU(4)) THEN
+ CALL PYERRM(11,'(PYEDIT:) no more memory left in PYJETS')
+ RETURN
+ ENDIF
+ DO 240 I=1,N
+ DO 230 J=1,5
+ K(MSTU(4)-I,J)=K(I,J)
+ P(MSTU(4)-I,J)=P(I,J)
+ V(MSTU(4)-I,J)=V(I,J)
+ 230 CONTINUE
+ 240 CONTINUE
+ MSTU(32)=N
+
+C...Restore bottom entries of commonblock PYJETS to top.
+ ELSEIF(MEDIT.EQ.22) THEN
+ DO 260 I=1,MSTU(32)
+ DO 250 J=1,5
+ K(I,J)=K(MSTU(4)-I,J)
+ P(I,J)=P(MSTU(4)-I,J)
+ V(I,J)=V(MSTU(4)-I,J)
+ 250 CONTINUE
+ 260 CONTINUE
+ N=MSTU(32)
+
+C...Mark primary entries at top of commonblock PYJETS as untreated.
+ ELSEIF(MEDIT.EQ.23) THEN
+ I1=0
+ DO 270 I=1,N
+ KH=K(I,3)
+ IF(KH.GE.1) THEN
+ IF(K(KH,1).GT.20) KH=0
+ ENDIF
+ IF(KH.NE.0) GOTO 280
+ I1=I1+1
+ IF(K(I,1).GT.10.AND.K(I,1).LE.20) K(I,1)=K(I,1)-10
+ 270 CONTINUE
+ 280 N=I1
+
+C...Place largest axis along z axis and second largest in xy plane.
+ ELSEIF(MEDIT.EQ.31.OR.MEDIT.EQ.32) THEN
+ CALL PYROBO(1,N+MSTU(3),0D0,-PYANGL(P(MSTU(61),1),
+ & P(MSTU(61),2)),0D0,0D0,0D0)
+ CALL PYROBO(1,N+MSTU(3),-PYANGL(P(MSTU(61),3),
+ & P(MSTU(61),1)),0D0,0D0,0D0,0D0)
+ CALL PYROBO(1,N+MSTU(3),0D0,-PYANGL(P(MSTU(61)+1,1),
+ & P(MSTU(61)+1,2)),0D0,0D0,0D0)
+ IF(MEDIT.EQ.31) RETURN
+
+C...Rotate to put slim jet along +z axis.
+ DO 290 IS=1,2
+ NS(IS)=0
+ PTS(IS)=0D0
+ PLS(IS)=0D0
+ 290 CONTINUE
+ DO 300 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 300
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 300
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2))
+ & .EQ.0) GOTO 300
+ ENDIF
+ IS=2D0-SIGN(0.5D0,P(I,3))
+ NS(IS)=NS(IS)+1
+ PTS(IS)=PTS(IS)+SQRT(P(I,1)**2+P(I,2)**2)
+ 300 CONTINUE
+ IF(NS(1)*PTS(2)**2.LT.NS(2)*PTS(1)**2)
+ & CALL PYROBO(1,N+MSTU(3),PARU(1),0D0,0D0,0D0,0D0)
+
+C...Rotate to put second largest jet into -z,+x quadrant.
+ DO 310 I=1,N
+ IF(P(I,3).GE.0D0) GOTO 310
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 310
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 310
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2))
+ & .EQ.0) GOTO 310
+ ENDIF
+ IS=2D0-SIGN(0.5D0,P(I,1))
+ PLS(IS)=PLS(IS)-P(I,3)
+ 310 CONTINUE
+ IF(PLS(2).GT.PLS(1)) CALL PYROBO(1,N+MSTU(3),0D0,PARU(1),
+ & 0D0,0D0,0D0)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYLIST
+C...Gives program heading, or lists an event, or particle
+C...data, or current parameter values.
+
+ SUBROUTINE PYLIST(MLIST)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter statement to help give large particle numbers.
+ PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
+C...Local arrays, character variables and data.
+ CHARACTER CHAP*16,CHAC*16,CHAN*16,CHAD(5)*16,CHDL(7)*4
+ DIMENSION PS(6)
+ DATA CHDL/'(())',' ','()','!!','<>','==','(==)'/
+
+C...Initialization printout: version number and date of last change.
+ IF(MLIST.EQ.0.OR.MSTU(12).EQ.1) THEN
+ CALL PYLOGO
+ MSTU(12)=0
+ IF(MLIST.EQ.0) RETURN
+ ENDIF
+
+C...List event data, including additional lines after N.
+ IF(MLIST.GE.1.AND.MLIST.LE.3) THEN
+ IF(MLIST.EQ.1) WRITE(MSTU(11),5100)
+ IF(MLIST.EQ.2) WRITE(MSTU(11),5200)
+ IF(MLIST.EQ.3) WRITE(MSTU(11),5300)
+ LMX=12
+ IF(MLIST.GE.2) LMX=16
+ ISTR=0
+ IMAX=N
+ IF(MSTU(2).GT.0) IMAX=MSTU(2)
+ DO 120 I=MAX(1,MSTU(1)),MAX(IMAX,N+MAX(0,MSTU(3)))
+ IF((I.GT.IMAX.AND.I.LE.N).OR.K(I,1).LT.0) GOTO 120
+
+C...Get particle name, pad it and check it is not too long.
+ CALL PYNAME(K(I,2),CHAP)
+ LEN=0
+ DO 100 LEM=1,16
+ IF(CHAP(LEM:LEM).NE.' ') LEN=LEM
+ 100 CONTINUE
+ MDL=(K(I,1)+19)/10
+ LDL=0
+ IF(MDL.EQ.2.OR.MDL.GE.8) THEN
+ CHAC=CHAP
+ IF(LEN.GT.LMX) CHAC(LMX:LMX)='?'
+ ELSE
+ LDL=1
+ IF(MDL.EQ.1.OR.MDL.EQ.7) LDL=2
+ IF(LEN.EQ.0) THEN
+ CHAC=CHDL(MDL)(1:2*LDL)//' '
+ ELSE
+ CHAC=CHDL(MDL)(1:LDL)//CHAP(1:MIN(LEN,LMX-2*LDL))//
+ & CHDL(MDL)(LDL+1:2*LDL)//' '
+ IF(LEN+2*LDL.GT.LMX) CHAC(LMX:LMX)='?'
+ ENDIF
+ ENDIF
+
+C...Add information on string connection.
+ IF(K(I,1).EQ.1.OR.K(I,1).EQ.2.OR.K(I,1).EQ.11.OR.K(I,1).EQ.12)
+ & THEN
+ KC=PYCOMP(K(I,2))
+ KCC=0
+ IF(KC.NE.0) KCC=KCHG(KC,2)
+ IF(IABS(K(I,2)).EQ.39) THEN
+ IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='X'
+ ELSEIF(KCC.NE.0.AND.ISTR.EQ.0) THEN
+ ISTR=1
+ IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='A'
+ ELSEIF(KCC.NE.0.AND.(K(I,1).EQ.2.OR.K(I,1).EQ.12)) THEN
+ IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='I'
+ ELSEIF(KCC.NE.0) THEN
+ ISTR=0
+ IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='V'
+ ENDIF
+ ENDIF
+
+C...Write data for particle/jet.
+ IF(MLIST.EQ.1.AND.ABS(P(I,4)).LT.9999D0) THEN
+ WRITE(MSTU(11),5400) I,CHAC(1:12),(K(I,J1),J1=1,3),
+ & (P(I,J2),J2=1,5)
+ ELSEIF(MLIST.EQ.1.AND.ABS(P(I,4)).LT.99999D0) THEN
+ WRITE(MSTU(11),5500) I,CHAC(1:12),(K(I,J1),J1=1,3),
+ & (P(I,J2),J2=1,5)
+ ELSEIF(MLIST.EQ.1) THEN
+ WRITE(MSTU(11),5600) I,CHAC(1:12),(K(I,J1),J1=1,3),
+ & (P(I,J2),J2=1,5)
+ ELSEIF(MSTU(5).EQ.10000.AND.(K(I,1).EQ.3.OR.K(I,1).EQ.13.OR.
+ & K(I,1).EQ.14)) THEN
+ WRITE(MSTU(11),5700) I,CHAC,(K(I,J1),J1=1,3),
+ & K(I,4)/100000000,MOD(K(I,4)/10000,10000),MOD(K(I,4),10000),
+ & K(I,5)/100000000,MOD(K(I,5)/10000,10000),MOD(K(I,5),10000),
+ & (P(I,J2),J2=1,5)
+ ELSE
+ WRITE(MSTU(11),5800) I,CHAC,(K(I,J1),J1=1,5),
+ & (P(I,J2),J2=1,5)
+ ENDIF
+ IF(MLIST.EQ.3) WRITE(MSTU(11),5900) (V(I,J),J=1,5)
+
+C...Insert extra separator lines specified by user.
+ IF(MSTU(70).GE.1) THEN
+ ISEP=0
+ DO 110 J=1,MIN(10,MSTU(70))
+ IF(I.EQ.MSTU(70+J)) ISEP=1
+ 110 CONTINUE
+ IF(ISEP.EQ.1.AND.MLIST.EQ.1) WRITE(MSTU(11),6000)
+ IF(ISEP.EQ.1.AND.MLIST.GE.2) WRITE(MSTU(11),6100)
+ ENDIF
+ 120 CONTINUE
+
+C...Sum of charges and momenta.
+ DO 130 J=1,6
+ PS(J)=PYP(0,J)
+ 130 CONTINUE
+ IF(MLIST.EQ.1.AND.ABS(PS(4)).LT.9999D0) THEN
+ WRITE(MSTU(11),6200) PS(6),(PS(J),J=1,5)
+ ELSEIF(MLIST.EQ.1.AND.ABS(PS(4)).LT.99999D0) THEN
+ WRITE(MSTU(11),6300) PS(6),(PS(J),J=1,5)
+ ELSEIF(MLIST.EQ.1) THEN
+ WRITE(MSTU(11),6400) PS(6),(PS(J),J=1,5)
+ ELSE
+ WRITE(MSTU(11),6500) PS(6),(PS(J),J=1,5)
+ ENDIF
+
+C...Give simple list of KF codes defined in program.
+ ELSEIF(MLIST.EQ.11) THEN
+ WRITE(MSTU(11),6600)
+ DO 140 KF=1,80
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
+ IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 140 CONTINUE
+ DO 170 KFLS=1,3,2
+ DO 160 KFLA=1,5
+ DO 150 KFLB=1,KFLA-(3-KFLS)/2
+ KF=1000*KFLA+100*KFLB+KFLS
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 150 CONTINUE
+ 160 CONTINUE
+ 170 CONTINUE
+ KF=130
+ CALL PYNAME(KF,CHAP)
+ WRITE(MSTU(11),6700) KF,CHAP
+ KF=310
+ CALL PYNAME(KF,CHAP)
+ WRITE(MSTU(11),6700) KF,CHAP
+ DO 200 KMUL=0,5
+ KFLS=3
+ IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
+ IF(KMUL.EQ.5) KFLS=5
+ KFLR=0
+ IF(KMUL.EQ.2.OR.KMUL.EQ.3) KFLR=1
+ IF(KMUL.EQ.4) KFLR=2
+ DO 190 KFLB=1,5
+ DO 180 KFLC=1,KFLB-1
+ KF=10000*KFLR+100*KFLB+10*KFLC+KFLS
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 180 CONTINUE
+ KF=10000*KFLR+110*KFLB+KFLS
+ CALL PYNAME(KF,CHAP)
+ WRITE(MSTU(11),6700) KF,CHAP
+ 190 CONTINUE
+ 200 CONTINUE
+ KF=100443
+ CALL PYNAME(KF,CHAP)
+ WRITE(MSTU(11),6700) KF,CHAP
+ KF=100553
+ CALL PYNAME(KF,CHAP)
+ WRITE(MSTU(11),6700) KF,CHAP
+ DO 240 KFLSP=1,3
+ KFLS=2+2*(KFLSP/3)
+ DO 230 KFLA=1,5
+ DO 220 KFLB=1,KFLA
+ DO 210 KFLC=1,KFLB
+ IF(KFLSP.EQ.1.AND.(KFLA.EQ.KFLB.OR.KFLB.EQ.KFLC))
+ & GOTO 210
+ IF(KFLSP.EQ.2.AND.KFLA.EQ.KFLC) GOTO 210
+ IF(KFLSP.EQ.1) KF=1000*KFLA+100*KFLC+10*KFLB+KFLS
+ IF(KFLSP.GE.2) KF=1000*KFLA+100*KFLB+10*KFLC+KFLS
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 210 CONTINUE
+ 220 CONTINUE
+ 230 CONTINUE
+ 240 CONTINUE
+ DO 250 KF=KSUSY1+1,KSUSY1+40
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
+ IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 250 CONTINUE
+ DO 260 KF=KSUSY2+1,KSUSY2+40
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
+ IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 260 CONTINUE
+ DO 270 KF=KEXCIT+1,KEXCIT+40
+ CALL PYNAME(KF,CHAP)
+ CALL PYNAME(-KF,CHAN)
+ IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
+ IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
+ 270 CONTINUE
+
+C...List parton/particle data table. Check whether to be listed.
+ ELSEIF(MLIST.EQ.12) THEN
+ WRITE(MSTU(11),6800)
+ DO 300 KC=1,MSTU(6)
+ KF=KCHG(KC,4)
+ IF(KF.EQ.0) GOTO 300
+ IF(KF.LT.MSTU(1).OR.(MSTU(2).GT.0.AND.KF.GT.MSTU(2)))
+ & GOTO 300
+
+C...Find particle name and mass. Print information.
+ CALL PYNAME(KF,CHAP)
+ IF(KF.LE.100.AND.CHAP.EQ.' '.AND.MDCY(KC,2).EQ.0) GOTO 300
+ CALL PYNAME(-KF,CHAN)
+ WRITE(MSTU(11),6900) KF,KC,CHAP,CHAN,(KCHG(KC,J1),J1=1,3),
+ & (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
+
+C...Particle decay: channel number, branching ratios, matrix element,
+C...decay products.
+ DO 290 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
+ DO 280 J=1,5
+ CALL PYNAME(KFDP(IDC,J),CHAD(J))
+ 280 CONTINUE
+ WRITE(MSTU(11),7000) IDC,MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
+ & (CHAD(J),J=1,5)
+ 290 CONTINUE
+ 300 CONTINUE
+
+C...List parameter value table.
+ ELSEIF(MLIST.EQ.13) THEN
+ WRITE(MSTU(11),7100)
+ DO 310 I=1,200
+ WRITE(MSTU(11),7200) I,MSTU(I),PARU(I),MSTJ(I),PARJ(I),PARF(I)
+ 310 CONTINUE
+ ENDIF
+
+C...Format statements for output on unit MSTU(11) (by default 6).
+ 5100 FORMAT(///28X,'Event listing (summary)'//4X,'I particle/jet KS',
+ &5X,'KF orig p_x p_y p_z E m'/)
+ 5200 FORMAT(///28X,'Event listing (standard)'//4X,'I particle/jet',
+ &' K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1)',
+ &' P(I,2) P(I,3) P(I,4) P(I,5)'/)
+ 5300 FORMAT(///28X,'Event listing (with vertices)'//4X,'I particle/j',
+ &'et K(I,1) K(I,2) K(I,3) K(I,4) K(I,5) P(I,1)',
+ &' P(I,2) P(I,3) P(I,4) P(I,5)'/73X,
+ &'V(I,1) V(I,2) V(I,3) V(I,4) V(I,5)'/)
+ 5400 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.3)
+ 5500 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.2)
+ 5600 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.1)
+ 5700 FORMAT(1X,I4,2X,A16,1X,I3,1X,I9,1X,I4,2(3X,I1,2I4),5F13.5)
+ 5800 FORMAT(1X,I4,2X,A16,1X,I3,1X,I9,1X,I4,2(3X,I9),5F13.5)
+ 5900 FORMAT(66X,5(1X,F12.3))
+ 6000 FORMAT(1X,78('='))
+ 6100 FORMAT(1X,130('='))
+ 6200 FORMAT(19X,'sum:',F6.2,5X,5F9.3)
+ 6300 FORMAT(19X,'sum:',F6.2,5X,5F9.2)
+ 6400 FORMAT(19X,'sum:',F6.2,5X,5F9.1)
+ 6500 FORMAT(19X,'sum charge:',F6.2,3X,'sum momentum and inv. mass:',
+ &5F13.5)
+ 6600 FORMAT(///20X,'List of KF codes in program'/)
+ 6700 FORMAT(4X,I9,4X,A16,6X,I9,4X,A16)
+ 6800 FORMAT(///30X,'Particle/parton data table'//8X,'KF',5X,'KC',4X,
+ &'particle',8X,'antiparticle',6X,'chg col anti',8X,'mass',7X,
+ &'width',7X,'w-cut',5X,'lifetime',1X,'decay'/11X,'IDC',1X,'on/off',
+ &1X,'ME',3X,'Br.rat.',4X,'decay products')
+ 6900 FORMAT(/1X,I9,3X,I4,4X,A16,A16,3I5,1X,F12.5,2(1X,F11.5),
+ &1X,1P,E13.5,3X,I2)
+ 7000 FORMAT(10X,I4,2X,I3,2X,I3,2X,F10.6,4X,5A16)
+ 7100 FORMAT(///20X,'Parameter value table'//4X,'I',3X,'MSTU(I)',
+ &8X,'PARU(I)',3X,'MSTJ(I)',8X,'PARJ(I)',8X,'PARF(I)')
+ 7200 FORMAT(1X,I4,1X,I9,1X,F14.5,1X,I9,1X,F14.5,1X,F14.5)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYLOGO
+C...Writes a logo for the program.
+
+ SUBROUTINE PYLOGO
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Parameter for length of information block.
+ PARAMETER (IREFER=17)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
+ SAVE /PYDAT1/,/PYPARS/
+C...Local arrays and character variables.
+ INTEGER IDATI(6)
+ CHARACTER MONTH(12)*3, LOGO(48)*32, REFER(2*IREFER)*36, LINE*79,
+ &VERS*1, SUBV*3, DATE*2, YEAR*4, HOUR*2, MINU*2, SECO*2
+
+C...Data on months, logo, titles, and references.
+ DATA MONTH/'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
+ &'Oct','Nov','Dec'/
+ DATA (LOGO(J),J=1,19)/
+ &' *......* ',
+ &' *:::!!:::::::::::* ',
+ &' *::::::!!::::::::::::::* ',
+ &' *::::::::!!::::::::::::::::* ',
+ &' *:::::::::!!:::::::::::::::::* ',
+ &' *:::::::::!!:::::::::::::::::* ',
+ &' *::::::::!!::::::::::::::::*! ',
+ &' *::::::!!::::::::::::::* !! ',
+ &' !! *:::!!:::::::::::* !! ',
+ &' !! !* -><- * !! ',
+ &' !! !! !! ',
+ &' !! !! !! ',
+ &' !! !! ',
+ &' !! ep !! ',
+ &' !! !! ',
+ &' !! pp !! ',
+ &' !! e+e- !! ',
+ &' !! !! ',
+ &' !! '/
+ DATA (LOGO(J),J=20,38)/
+ &'Welcome to the Lund Monte Carlo!',
+ &' ',
+ &'PPP Y Y TTTTT H H III A ',
+ &'P P Y Y T H H I A A ',
+ &'PPP Y T HHHHH I AAAAA',
+ &'P Y T H H I A A',
+ &'P Y T H H III A A',
+ &' ',
+ &'This is PYTHIA version x.xxx ',
+ &'Last date of change: xx xxx 199x',
+ &' ',
+ &'Now is xx xxx 199x at xx:xx:xx ',
+ &' ',
+ &'Disclaimer: this program comes ',
+ &'without any guarantees. Beware ',
+ &'of errors and use common sense ',
+ &'when interpreting results. ',
+ &' ',
+ &'Copyright T. Sjostrand (1997) '/
+ DATA (REFER(J),J=1,18)/
+ &'An archive of program versions and d',
+ &'ocumentation is found on the web: ',
+ &'http://www.thep.lu.se/tf2/staff/torb',
+ &'jorn/Pythia.html ',
+ &' ',
+ &' ',
+ &'When you cite this program, currentl',
+ &'y the official reference is ',
+ &'T. Sjostrand, Computer Physics Commu',
+ &'n. 82 (1994) 74. ',
+ &'The supersymmetry extensions are des',
+ &'cribed in ',
+ &'S. Mrenna, Computer Physics Commun. ',
+ &'101 (1997) 232 ',
+ &'Also remember that the program, to a',
+ &' large extent, represents original ',
+ &'physics research. Other publications',
+ &' of special relevance to your '/
+ DATA (REFER(J),J=19,2*IREFER)/
+ &'studies may therefore deserve separa',
+ &'te mention. ',
+ &' ',
+ &' ',
+ &'Main author: Torbjorn Sjostrand; Dep',
+ &'artment of Theoretical Physics 2, ',
+ &' Lund University, Solvegatan 14A, S',
+ &'-223 62 Lund, Sweden; ',
+ &' phone: + 46 - 46 - 222 48 16; e-ma',
+ &'il: torbjorn@thep.lu.se ',
+ &'SUSY author: Stephen Mrenna, Argonne',
+ &' National Laboratory, ',
+ &' 9700 South Cass Avenue, Argonne, I',
+ &'L 60439, USA; ',
+ &' phone: + 1 - 630 - 252 - 7615; e-m',
+ &'ail: mrenna@hep.anl.gov '/
+
+C...Check that PYDATA linked.
+ IF(MSTP(183)/10.NE.199) THEN
+ WRITE(MSTU(11),'(1X,A)')
+ & 'Error: PYDATA has not been linked.'
+ WRITE(MSTU(11),'(1X,A)') 'Execution stopped!'
+ STOP
+
+C...Write current version number and current date+time.
+ ELSE
+ WRITE(VERS,'(I1)') MSTP(181)
+ LOGO(28)(24:24)=VERS
+ WRITE(SUBV,'(I3)') MSTP(182)
+ LOGO(28)(26:28)=SUBV
+ IF(MSTP(182).LT.100) LOGO(28)(26:26)='0'
+ WRITE(DATE,'(I2)') MSTP(185)
+ LOGO(29)(22:23)=DATE
+ LOGO(29)(25:27)=MONTH(MSTP(184))
+ WRITE(YEAR,'(I4)') MSTP(183)
+ LOGO(29)(29:32)=YEAR
+ CALL PYTIME(IDATI)
+ IF(IDATI(1).LE.0) THEN
+ LOGO(31)=' '
+ ELSE
+ WRITE(DATE,'(I2)') IDATI(3)
+ LOGO(31)(8:9)=DATE
+ LOGO(31)(11:13)=MONTH(MAX(1,MIN(12,IDATI(2))))
+ WRITE(YEAR,'(I4)') IDATI(1)
+ LOGO(31)(15:18)=YEAR
+ WRITE(HOUR,'(I2)') IDATI(4)
+ LOGO(31)(23:24)=HOUR
+ WRITE(MINU,'(I2)') IDATI(5)
+ LOGO(31)(26:27)=MINU
+ IF(IDATI(5).LT.10) LOGO(31)(26:26)='0'
+ WRITE(SECO,'(I2)') IDATI(6)
+ LOGO(31)(29:30)=SECO
+ IF(IDATI(6).LT.10) LOGO(31)(29:29)='0'
+ ENDIF
+ ENDIF
+
+C...Loop over lines in header. Define page feed and side borders.
+ DO 100 ILIN=1,29+IREFER
+ LINE=' '
+ IF(ILIN.EQ.1) THEN
+ LINE(1:1)='1'
+ ELSE
+ LINE(2:3)='**'
+ LINE(78:79)='**'
+ ENDIF
+
+C...Separator lines and logos.
+ IF(ILIN.EQ.2.OR.ILIN.EQ.3.OR.ILIN.GE.28+IREFER) THEN
+ LINE(4:77)='***********************************************'//
+ & '***************************'
+ ELSEIF(ILIN.GE.6.AND.ILIN.LE.24) THEN
+ LINE(6:37)=LOGO(ILIN-5)
+ LINE(44:75)=LOGO(ILIN+14)
+ ELSEIF(ILIN.GE.26.AND.ILIN.LE.25+IREFER) THEN
+ LINE(5:40)=REFER(2*ILIN-51)
+ LINE(41:76)=REFER(2*ILIN-50)
+ ENDIF
+
+C...Write lines to appropriate unit.
+ WRITE(MSTU(11),'(A79)') LINE
+ 100 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYUPDA
+C...Facilitates the updating of particle and decay data
+C...by allowing it to be done in an external file.
+
+ SUBROUTINE PYUPDA(MUPDA,LFN)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ COMMON/PYDAT4/CHAF(500,2)
+ CHARACTER CHAF*16
+ COMMON/PYINT4/MWID(500),WIDS(500,5)
+ SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYINT4/
+C...Local arrays, character variables and data.
+ CHARACTER CHINL*120,CHKF*9,CHVAR(22)*9,CHLIN*72,
+ &CHBLK(20)*72,CHOLD*16,CHTMP*16,CHNEW*16,CHCOM*24
+ DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','KCHG(I,4)',
+ &'PMAS(I,1)','PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)',
+ &'MDCY(I,2)','MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I) ',
+ &'KFDP(I,1)','KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)',
+ &'CHAF(I,1)','CHAF(I,2)','MWID(I) '/
+
+C...Write header if not yet done.
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+
+C...Write information on file for editing.
+ IF(MUPDA.EQ.1) THEN
+ DO 110 KC=1,500
+ WRITE(LFN,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
+ & (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
+ & MWID(KC),MDCY(KC,1)
+ DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
+ WRITE(LFN,5100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
+ & (KFDP(IDC,J),J=1,5)
+ 100 CONTINUE
+ 110 CONTINUE
+
+C...Read complete set of information from edited file or
+C...read partial set of new or updated information from edited file.
+ ELSEIF(MUPDA.EQ.2.OR.MUPDA.EQ.3) THEN
+
+C...Reset counters.
+ KCC=100
+ NDC=0
+ CHKF=' '
+ IF(MUPDA.EQ.2) THEN
+ DO 120 I=1,MSTU(6)
+ KCHG(I,4)=0
+ 120 CONTINUE
+ ELSE
+ DO 130 KC=1,MSTU(6)
+ IF(KC.GT.100.AND.KCHG(KC,4).GT.100) KCC=KC
+ NDC=MAX(NDC,MDCY(KC,2)+MDCY(KC,3)-1)
+ 130 CONTINUE
+ ENDIF
+
+C...Begin of loop: read new line; unknown whether particle or
+C...decay data.
+ 140 READ(LFN,5200,END=190) CHINL
+
+C...Identify particle code and whether already defined (for MUPDA=3).
+ IF(CHINL(2:10).NE.' ') THEN
+ CHKF=CHINL(2:10)
+ READ(CHKF,5300) KF
+ IF(MUPDA.EQ.2) THEN
+ IF(KF.LE.100) THEN
+ KC=KF
+ ELSE
+ KCC=KCC+1
+ KC=KCC
+ ENDIF
+ ELSE
+ KCREP=0
+ IF(KF.LE.100) THEN
+ KCREP=KF
+ ELSE
+ DO 150 KCR=101,KCC
+ IF(KCHG(KCR,4).EQ.KF) KCREP=KCR
+ 150 CONTINUE
+ ENDIF
+C...Remove duplicate old decay data.
+ IF(KCREP.NE.0) THEN
+ IDCREP=MDCY(KCREP,2)
+ NDCREP=MDCY(KCREP,3)
+ DO 160 I=1,KCC
+ IF(MDCY(I,2).GT.IDCREP) MDCY(I,2)=MDCY(I,2)-NDCREP
+ 160 CONTINUE
+ DO 180 I=IDCREP,NDC-NDCREP
+ MDME(I,1)=MDME(I+NDCREP,1)
+ MDME(I,2)=MDME(I+NDCREP,2)
+ BRAT(I)=BRAT(I+NDCREP)
+ DO 170 J=1,5
+ KFDP(I,J)=KFDP(I+NDCREP,J)
+ 170 CONTINUE
+ 180 CONTINUE
+ NDC=NDC-NDCREP
+ KC=KCREP
+ ELSE
+ KCC=KCC+1
+ KC=KCC
+ ENDIF
+ ENDIF
+
+C...Study line with particle data.
+ IF(KC.GT.MSTU(6)) CALL PYERRM(27,
+ & '(PYUPDA:) Particle arrays full by KF ='//CHKF)
+ READ(CHINL,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
+ & (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
+ & MWID(KC),MDCY(KC,1)
+ MDCY(KC,2)=0
+ MDCY(KC,3)=0
+
+C...Study line with decay data.
+ ELSE
+ NDC=NDC+1
+ IF(NDC.GT.MSTU(7)) CALL PYERRM(27,
+ & '(PYUPDA:) Decay data arrays full by KF ='//CHKF)
+ IF(MDCY(KC,2).EQ.0) MDCY(KC,2)=NDC
+ MDCY(KC,3)=MDCY(KC,3)+1
+ READ(CHINL,5100) MDME(NDC,1),MDME(NDC,2),BRAT(NDC),
+ & (KFDP(NDC,J),J=1,5)
+ ENDIF
+
+C...End of loop; ensure that PYCOMP tables are updated.
+ GOTO 140
+ 190 CONTINUE
+ MSTU(20)=0
+
+C...Perform possible tests that new information is consistent.
+ MSTJ24=MSTJ(24)
+ MSTJ(24)=0
+ DO 220 KC=1,MSTU(6)
+ KF=KCHG(KC,4)
+ IF(KF.EQ.0) GOTO 220
+ WRITE(CHKF,5300) KF
+ IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
+ & PMAS(KC,4)).LT.0D0.OR.MDCY(KC,3).LT.0) CALL PYERRM(17,
+ & '(PYUPDA:) Mass/width/life/(# channels) wrong for KF ='//CHKF)
+ BRSUM=0D0
+ DO 210 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
+ IF(MDME(IDC,2).GT.80) GOTO 210
+ KQ=KCHG(KC,1)
+ PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
+ MERR=0
+ DO 200 J=1,5
+ KP=KFDP(IDC,J)
+ IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
+ IF(KP.EQ.81) KQ=0
+ ELSEIF(PYCOMP(KP).EQ.0) THEN
+ MERR=3
+ ELSE
+ KQ=KQ-PYCHGE(KP)
+ PMS=PMS-PYMASS(KP)
+ KPC=PYCOMP(KP)
+ PMS=PMS-PMAS(KPC,1)
+ IF(MSTJ(24).GT.0) PMS=PMS+0.5D0*MIN(PMAS(KPC,2),
+ & PMAS(KPC,3))
+ ENDIF
+ 200 CONTINUE
+ IF(KQ.NE.0) MERR=MAX(2,MERR)
+ IF(MWID(KC).EQ.0.AND.KF.NE.311.AND.PMS.LT.0D0)
+ & MERR=MAX(1,MERR)
+ IF(MERR.EQ.3) CALL PYERRM(17,
+ & '(PYUPDA:) Unknown particle code in decay of KF ='//CHKF)
+ IF(MERR.EQ.2) CALL PYERRM(17,
+ & '(PYUPDA:) Charge not conserved in decay of KF ='//CHKF)
+ IF(MERR.EQ.1) CALL PYERRM(7,
+ & '(PYUPDA:) Kinematically unallowed decay of KF ='//CHKF)
+ BRSUM=BRSUM+BRAT(IDC)
+ 210 CONTINUE
+ WRITE(CHTMP,5500) BRSUM
+ IF(ABS(BRSUM).GT.0.0005D0.AND.ABS(BRSUM-1D0).GT.0.0005D0)
+ & CALL PYERRM(7,'(PYUPDA:) Sum of branching ratios is '//
+ & CHTMP(9:16)//' for KF ='//CHKF)
+ 220 CONTINUE
+ MSTJ(24)=MSTJ24
+
+C...Write DATA statements for inclusion in program.
+ ELSEIF(MUPDA.EQ.4) THEN
+
+C...Find out how many codes and decay channels are actually used.
+ KCC=0
+ NDC=0
+ DO 230 I=1,MSTU(6)
+ IF(KCHG(I,4).NE.0) THEN
+ KCC=I
+ NDC=MAX(NDC,MDCY(I,2)+MDCY(I,3)-1)
+ ENDIF
+ 230 CONTINUE
+
+C...Initialize writing of DATA statements for inclusion in program.
+ DO 300 IVAR=1,22
+ NDIM=MSTU(6)
+ IF(IVAR.GE.12.AND.IVAR.LE.19) NDIM=MSTU(7)
+ NLIN=1
+ CHLIN=' '
+ CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I= 1, )/'
+ LLIN=35
+ CHOLD='START'
+
+C...Loop through variables for conversion to characters.
+ DO 280 IDIM=1,NDIM
+ IF(IVAR.EQ.1) WRITE(CHTMP,5400) KCHG(IDIM,1)
+ IF(IVAR.EQ.2) WRITE(CHTMP,5400) KCHG(IDIM,2)
+ IF(IVAR.EQ.3) WRITE(CHTMP,5400) KCHG(IDIM,3)
+ IF(IVAR.EQ.4) WRITE(CHTMP,5400) KCHG(IDIM,4)
+ IF(IVAR.EQ.5) WRITE(CHTMP,5500) PMAS(IDIM,1)
+ IF(IVAR.EQ.6) WRITE(CHTMP,5500) PMAS(IDIM,2)
+ IF(IVAR.EQ.7) WRITE(CHTMP,5500) PMAS(IDIM,3)
+ IF(IVAR.EQ.8) WRITE(CHTMP,5500) PMAS(IDIM,4)
+ IF(IVAR.EQ.9) WRITE(CHTMP,5400) MDCY(IDIM,1)
+ IF(IVAR.EQ.10) WRITE(CHTMP,5400) MDCY(IDIM,2)
+ IF(IVAR.EQ.11) WRITE(CHTMP,5400) MDCY(IDIM,3)
+ IF(IVAR.EQ.12) WRITE(CHTMP,5400) MDME(IDIM,1)
+ IF(IVAR.EQ.13) WRITE(CHTMP,5400) MDME(IDIM,2)
+ IF(IVAR.EQ.14) WRITE(CHTMP,5600) BRAT(IDIM)
+ IF(IVAR.EQ.15) WRITE(CHTMP,5400) KFDP(IDIM,1)
+ IF(IVAR.EQ.16) WRITE(CHTMP,5400) KFDP(IDIM,2)
+ IF(IVAR.EQ.17) WRITE(CHTMP,5400) KFDP(IDIM,3)
+ IF(IVAR.EQ.18) WRITE(CHTMP,5400) KFDP(IDIM,4)
+ IF(IVAR.EQ.19) WRITE(CHTMP,5400) KFDP(IDIM,5)
+ IF(IVAR.EQ.20) CHTMP=CHAF(IDIM,1)
+ IF(IVAR.EQ.21) CHTMP=CHAF(IDIM,2)
+ IF(IVAR.EQ.22) WRITE(CHTMP,5400) MWID(IDIM)
+
+C...Replace variables beyond what is properly defined.
+ IF(IVAR.LE.4) THEN
+ IF(IDIM.GT.KCC) CHTMP=' 0'
+ ELSEIF(IVAR.LE.8) THEN
+ IF(IDIM.GT.KCC) CHTMP=' 0.0'
+ ELSEIF(IVAR.LE.11) THEN
+ IF(IDIM.GT.KCC) CHTMP=' 0'
+ ELSEIF(IVAR.LE.13) THEN
+ IF(IDIM.GT.NDC) CHTMP=' 0'
+ ELSEIF(IVAR.LE.14) THEN
+ IF(IDIM.GT.NDC) CHTMP=' 0.0'
+ ELSEIF(IVAR.LE.19) THEN
+ IF(IDIM.GT.NDC) CHTMP=' 0'
+ ELSEIF(IVAR.LE.21) THEN
+ IF(IDIM.GT.KCC) CHTMP=' '
+ ELSE
+ IF(IDIM.GT.KCC) CHTMP=' 0'
+ ENDIF
+
+C...Length of variable, trailing decimal zeros, quotation marks.
+ LLOW=1
+ LHIG=1
+ DO 240 LL=1,16
+ IF(CHTMP(17-LL:17-LL).NE.' ') LLOW=17-LL
+ IF(CHTMP(LL:LL).NE.' ') LHIG=LL
+ 240 CONTINUE
+ CHNEW=CHTMP(LLOW:LHIG)//' '
+ LNEW=1+LHIG-LLOW
+ IF((IVAR.GE.5.AND.IVAR.LE.8).OR.IVAR.EQ.14) THEN
+ LNEW=LNEW+1
+ 250 LNEW=LNEW-1
+ IF(LNEW.GE.2.AND.CHNEW(LNEW:LNEW).EQ.'0') GOTO 250
+ IF(CHNEW(LNEW:LNEW).EQ.'.') LNEW=LNEW-1
+ IF(LNEW.EQ.0) THEN
+ CHNEW(1:3)='0D0'
+ LNEW=3
+ ELSE
+ CHNEW(LNEW+1:LNEW+2)='D0'
+ LNEW=LNEW+2
+ ENDIF
+ ELSEIF(IVAR.EQ.20.OR.IVAR.EQ.21) THEN
+ DO 260 LL=LNEW,1,-1
+ IF(CHNEW(LL:LL).EQ.'''') THEN
+ CHTMP=CHNEW
+ CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
+ LNEW=LNEW+1
+ ENDIF
+ 260 CONTINUE
+ LNEW=MIN(14,LNEW)
+ CHTMP=CHNEW
+ CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
+ LNEW=LNEW+2
+ ENDIF
+
+C...Form composite character string, often including repetition counter.
+ IF(CHNEW.NE.CHOLD) THEN
+ NRPT=1
+ CHOLD=CHNEW
+ CHCOM=CHNEW
+ LCOM=LNEW
+ ELSE
+ LRPT=LNEW+1
+ IF(NRPT.GE.2) LRPT=LNEW+3
+ IF(NRPT.GE.10) LRPT=LNEW+4
+ IF(NRPT.GE.100) LRPT=LNEW+5
+ IF(NRPT.GE.1000) LRPT=LNEW+6
+ LLIN=LLIN-LRPT
+ NRPT=NRPT+1
+ WRITE(CHTMP,5400) NRPT
+ LRPT=1
+ IF(NRPT.GE.10) LRPT=2
+ IF(NRPT.GE.100) LRPT=3
+ IF(NRPT.GE.1000) LRPT=4
+ CHCOM(1:LRPT+1+LNEW)=CHTMP(17-LRPT:16)//'*'//CHNEW(1:LNEW)
+ LCOM=LRPT+1+LNEW
+ ENDIF
+
+C...Add characters to end of line, to new line (after storing old line),
+C...or to new block of lines (after writing old block).
+ IF(LLIN+LCOM.LE.70) THEN
+ CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
+ LLIN=LLIN+LCOM+1
+ ELSEIF(NLIN.LE.19) THEN
+ CHLIN(LLIN+1:72)=' '
+ CHBLK(NLIN)=CHLIN
+ NLIN=NLIN+1
+ CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
+ LLIN=6+LCOM+1
+ ELSE
+ CHLIN(LLIN:72)='/'//' '
+ CHBLK(NLIN)=CHLIN
+ WRITE(CHTMP,5400) IDIM-NRPT
+ CHBLK(1)(30:33)=CHTMP(13:16)
+ DO 270 ILIN=1,NLIN
+ WRITE(LFN,5700) CHBLK(ILIN)
+ 270 CONTINUE
+ NLIN=1
+ CHLIN=' '
+ CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//
+ & ',I= , )/'//CHCOM(1:LCOM)//','
+ WRITE(CHTMP,5400) IDIM-NRPT+1
+ CHLIN(25:28)=CHTMP(13:16)
+ LLIN=35+LCOM+1
+ ENDIF
+ 280 CONTINUE
+
+C...Write final block of lines.
+ CHLIN(LLIN:72)='/'//' '
+ CHBLK(NLIN)=CHLIN
+ WRITE(CHTMP,5400) NDIM
+ CHBLK(1)(30:33)=CHTMP(13:16)
+ DO 290 ILIN=1,NLIN
+ WRITE(LFN,5700) CHBLK(ILIN)
+ 290 CONTINUE
+ 300 CONTINUE
+ ENDIF
+
+C...Formats for reading and writing particle data.
+ 5000 FORMAT(1X,I9,2X,A16,2X,A16,3I3,3F12.5,1P,E13.5,2I3)
+ 5100 FORMAT(10X,2I5,F12.6,5I10)
+ 5200 FORMAT(A120)
+ 5300 FORMAT(I9)
+ 5400 FORMAT(I16)
+ 5500 FORMAT(F16.5)
+ 5600 FORMAT(F16.6)
+ 5700 FORMAT(A72)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYK
+C...Provides various integer-valued event related data.
+
+ FUNCTION PYK(I,J)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Default value. For I=0 number of entries, number of stable entries
+C...or 3 times total charge.
+ PYK=0
+ IF(I.LT.0.OR.I.GT.MSTU(4).OR.J.LE.0) THEN
+ ELSEIF(I.EQ.0.AND.J.EQ.1) THEN
+ PYK=N
+ ELSEIF(I.EQ.0.AND.(J.EQ.2.OR.J.EQ.6)) THEN
+ DO 100 I1=1,N
+ IF(J.EQ.2.AND.K(I1,1).GE.1.AND.K(I1,1).LE.10) PYK=PYK+1
+ IF(J.EQ.6.AND.K(I1,1).GE.1.AND.K(I1,1).LE.10) PYK=PYK+
+ & PYCHGE(K(I1,2))
+ 100 CONTINUE
+ ELSEIF(I.EQ.0) THEN
+
+C...For I > 0 direct readout of K matrix or charge.
+ ELSEIF(J.LE.5) THEN
+ PYK=K(I,J)
+ ELSEIF(J.EQ.6) THEN
+ PYK=PYCHGE(K(I,2))
+
+C...Status (existing/fragmented/decayed), parton/hadron separation.
+ ELSEIF(J.LE.8) THEN
+ IF(K(I,1).GE.1.AND.K(I,1).LE.10) PYK=1
+ IF(J.EQ.8) PYK=PYK*K(I,2)
+ ELSEIF(J.LE.12) THEN
+ KFA=IABS(K(I,2))
+ KC=PYCOMP(KFA)
+ KQ=0
+ IF(KC.NE.0) KQ=KCHG(KC,2)
+ IF(J.EQ.9.AND.KC.NE.0.AND.KQ.NE.0) PYK=K(I,2)
+ IF(J.EQ.10.AND.KC.NE.0.AND.KQ.EQ.0) PYK=K(I,2)
+ IF(J.EQ.11) PYK=KC
+ IF(J.EQ.12) PYK=KQ*ISIGN(1,K(I,2))
+
+C...Heaviest flavour in hadron/diquark.
+ ELSEIF(J.EQ.13) THEN
+ KFA=IABS(K(I,2))
+ PYK=MOD(KFA/100,10)*(-1)**MOD(KFA/100,10)
+ IF(KFA.LT.10) PYK=KFA
+ IF(MOD(KFA/1000,10).NE.0) PYK=MOD(KFA/1000,10)
+ PYK=PYK*ISIGN(1,K(I,2))
+
+C...Particle history: generation, ancestor, rank.
+ ELSEIF(J.LE.15) THEN
+ I2=I
+ I1=I
+ 110 PYK=PYK+1
+ I2=I1
+ I1=K(I1,3)
+ IF(I1.GT.0.AND.K(I1,1).GT.0.AND.K(I1,1).LE.20) GOTO 110
+ IF(J.EQ.15) PYK=I2
+ ELSEIF(J.EQ.16) THEN
+ KFA=IABS(K(I,2))
+ IF(K(I,1).LE.20.AND.((KFA.GE.11.AND.KFA.LE.20).OR.KFA.EQ.22.OR.
+ & (KFA.GT.100.AND.MOD(KFA/10,10).NE.0))) THEN
+ I1=I
+ 120 I2=I1
+ I1=K(I1,3)
+ IF(I1.GT.0) THEN
+ KFAM=IABS(K(I1,2))
+ ILP=1
+ IF(KFAM.NE.0.AND.KFAM.LE.10) ILP=0
+ IF(KFAM.EQ.21.OR.KFAM.EQ.91.OR.KFAM.EQ.92.OR.KFAM.EQ.93)
+ & ILP=0
+ IF(KFAM.GT.100.AND.MOD(KFAM/10,10).EQ.0) ILP=0
+ IF(ILP.EQ.1) GOTO 120
+ ENDIF
+ IF(K(I1,1).EQ.12) THEN
+ DO 130 I3=I1+1,I2
+ IF(K(I3,3).EQ.K(I2,3).AND.K(I3,2).NE.91.AND.K(I3,2).NE.92
+ & .AND.K(I3,2).NE.93) PYK=PYK+1
+ 130 CONTINUE
+ ELSE
+ I3=I2
+ 140 PYK=PYK+1
+ I3=I3+1
+ IF(I3.LT.N.AND.K(I3,3).EQ.K(I2,3)) GOTO 140
+ ENDIF
+ ENDIF
+
+C...Particle coming from collapsing jet system or not.
+ ELSEIF(J.EQ.17) THEN
+ I1=I
+ 150 PYK=PYK+1
+ I3=I1
+ I1=K(I1,3)
+ I0=MAX(1,I1)
+ KC=PYCOMP(K(I0,2))
+ IF(I1.EQ.0.OR.K(I0,1).LE.0.OR.K(I0,1).GT.20.OR.KC.EQ.0) THEN
+ IF(PYK.EQ.1) PYK=-1
+ IF(PYK.GT.1) PYK=0
+ RETURN
+ ENDIF
+ IF(KCHG(KC,2).EQ.0) GOTO 150
+ IF(K(I1,1).NE.12) PYK=0
+ IF(K(I1,1).NE.12) RETURN
+ I2=I1
+ 160 I2=I2+1
+ IF(I2.LT.N.AND.K(I2,1).NE.11) GOTO 160
+ K3M=K(I3-1,3)
+ IF(K3M.GE.I1.AND.K3M.LE.I2) PYK=0
+ K3P=K(I3+1,3)
+ IF(I3.LT.N.AND.K3P.GE.I1.AND.K3P.LE.I2) PYK=0
+
+C...Number of decay products. Colour flow.
+ ELSEIF(J.EQ.18) THEN
+ IF(K(I,1).EQ.11.OR.K(I,1).EQ.12) PYK=MAX(0,K(I,5)-K(I,4)+1)
+ IF(K(I,4).EQ.0.OR.K(I,5).EQ.0) PYK=0
+ ELSEIF(J.LE.22) THEN
+ IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) RETURN
+ IF(J.EQ.19) PYK=MOD(K(I,4)/MSTU(5),MSTU(5))
+ IF(J.EQ.20) PYK=MOD(K(I,5)/MSTU(5),MSTU(5))
+ IF(J.EQ.21) PYK=MOD(K(I,4),MSTU(5))
+ IF(J.EQ.22) PYK=MOD(K(I,5),MSTU(5))
+ ELSE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYP
+C...Provides various real-valued event related data.
+
+ FUNCTION PYP(I,J)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local array.
+ DIMENSION PSUM(4)
+
+C...Set default value. For I = 0 sum of momenta or charges,
+C...or invariant mass of system.
+ PYP=0D0
+ IF(I.LT.0.OR.I.GT.MSTU(4).OR.J.LE.0) THEN
+ ELSEIF(I.EQ.0.AND.J.LE.4) THEN
+ DO 100 I1=1,N
+ IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PYP=PYP+P(I1,J)
+ 100 CONTINUE
+ ELSEIF(I.EQ.0.AND.J.EQ.5) THEN
+ DO 120 J1=1,4
+ PSUM(J1)=0D0
+ DO 110 I1=1,N
+ IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PSUM(J1)=PSUM(J1)+
+ & P(I1,J1)
+ 110 CONTINUE
+ 120 CONTINUE
+ PYP=SQRT(MAX(0D0,PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2))
+ ELSEIF(I.EQ.0.AND.J.EQ.6) THEN
+ DO 130 I1=1,N
+ IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PYP=PYP+PYCHGE(K(I1,2))/3D0
+ 130 CONTINUE
+ ELSEIF(I.EQ.0) THEN
+
+C...Direct readout of P matrix.
+ ELSEIF(J.LE.5) THEN
+ PYP=P(I,J)
+
+C...Charge, total momentum, transverse momentum, transverse mass.
+ ELSEIF(J.LE.12) THEN
+ IF(J.EQ.6) PYP=PYCHGE(K(I,2))/3D0
+ IF(J.EQ.7.OR.J.EQ.8) PYP=P(I,1)**2+P(I,2)**2+P(I,3)**2
+ IF(J.EQ.9.OR.J.EQ.10) PYP=P(I,1)**2+P(I,2)**2
+ IF(J.EQ.11.OR.J.EQ.12) PYP=P(I,5)**2+P(I,1)**2+P(I,2)**2
+ IF(J.EQ.8.OR.J.EQ.10.OR.J.EQ.12) PYP=SQRT(PYP)
+
+C...Theta and phi angle in radians or degrees.
+ ELSEIF(J.LE.16) THEN
+ IF(J.LE.14) PYP=PYANGL(P(I,3),SQRT(P(I,1)**2+P(I,2)**2))
+ IF(J.GE.15) PYP=PYANGL(P(I,1),P(I,2))
+ IF(J.EQ.14.OR.J.EQ.16) PYP=PYP*180D0/PARU(1)
+
+C...True rapidity, rapidity with pion mass, pseudorapidity.
+ ELSEIF(J.LE.19) THEN
+ PMR=0D0
+ IF(J.EQ.17) PMR=P(I,5)
+ IF(J.EQ.18) PMR=PYMASS(211)
+ PR=MAX(1D-20,PMR**2+P(I,1)**2+P(I,2)**2)
+ PYP=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/SQRT(PR),
+ & 1D20)),P(I,3))
+
+C...Energy and momentum fractions (only to be used in CM frame).
+ ELSEIF(J.LE.25) THEN
+ IF(J.EQ.20) PYP=2D0*SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)/PARU(21)
+ IF(J.EQ.21) PYP=2D0*P(I,3)/PARU(21)
+ IF(J.EQ.22) PYP=2D0*SQRT(P(I,1)**2+P(I,2)**2)/PARU(21)
+ IF(J.EQ.23) PYP=2D0*P(I,4)/PARU(21)
+ IF(J.EQ.24) PYP=(P(I,4)+P(I,3))/PARU(21)
+ IF(J.EQ.25) PYP=(P(I,4)-P(I,3))/PARU(21)
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYSPHE
+C...Performs sphericity tensor analysis to give sphericity,
+C...aplanarity and the related event axes.
+
+ SUBROUTINE PYSPHE(SPH,APL)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION SM(3,3),SV(3,3)
+
+C...Calculate matrix to be diagonalized.
+ NP=0
+ DO 110 J1=1,3
+ DO 100 J2=J1,3
+ SM(J1,J2)=0D0
+ 100 CONTINUE
+ 110 CONTINUE
+ PS=0D0
+ DO 140 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 140
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 140
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
+ & GOTO 140
+ ENDIF
+ NP=NP+1
+ PA=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ PWT=1D0
+ IF(ABS(PARU(41)-2D0).GT.0.001D0) PWT=
+ & MAX(1D-10,PA)**(PARU(41)-2D0)
+ DO 130 J1=1,3
+ DO 120 J2=J1,3
+ SM(J1,J2)=SM(J1,J2)+PWT*P(I,J1)*P(I,J2)
+ 120 CONTINUE
+ 130 CONTINUE
+ PS=PS+PWT*PA**2
+ 140 CONTINUE
+
+C...Very low multiplicities (0 or 1) not considered.
+ IF(NP.LE.1) THEN
+ CALL PYERRM(8,'(PYSPHE:) too few particles for analysis')
+ SPH=-1D0
+ APL=-1D0
+ RETURN
+ ENDIF
+ DO 160 J1=1,3
+ DO 150 J2=J1,3
+ SM(J1,J2)=SM(J1,J2)/PS
+ 150 CONTINUE
+ 160 CONTINUE
+
+C...Find eigenvalues to matrix (third degree equation).
+ SQ=(SM(1,1)*SM(2,2)+SM(1,1)*SM(3,3)+SM(2,2)*SM(3,3)-
+ &SM(1,2)**2-SM(1,3)**2-SM(2,3)**2)/3D0-1D0/9D0
+ SR=-0.5D0*(SQ+1D0/9D0+SM(1,1)*SM(2,3)**2+SM(2,2)*SM(1,3)**2+
+ &SM(3,3)*SM(1,2)**2-SM(1,1)*SM(2,2)*SM(3,3))+
+ &SM(1,2)*SM(1,3)*SM(2,3)+1D0/27D0
+ SP=COS(ACOS(MAX(MIN(SR/SQRT(-SQ**3),1D0),-1D0))/3D0)
+ P(N+1,4)=1D0/3D0+SQRT(-SQ)*MAX(2D0*SP,SQRT(3D0*(1D0-SP**2))-SP)
+ P(N+3,4)=1D0/3D0+SQRT(-SQ)*MIN(2D0*SP,-SQRT(3D0*(1D0-SP**2))-SP)
+ P(N+2,4)=1D0-P(N+1,4)-P(N+3,4)
+ IF(P(N+2,4).LT.1D-5) THEN
+ CALL PYERRM(8,'(PYSPHE:) all particles back-to-back')
+ SPH=-1D0
+ APL=-1D0
+ RETURN
+ ENDIF
+
+C...Find first and last eigenvector by solving equation system.
+ DO 240 I=1,3,2
+ DO 180 J1=1,3
+ SV(J1,J1)=SM(J1,J1)-P(N+I,4)
+ DO 170 J2=J1+1,3
+ SV(J1,J2)=SM(J1,J2)
+ SV(J2,J1)=SM(J1,J2)
+ 170 CONTINUE
+ 180 CONTINUE
+ SMAX=0D0
+ DO 200 J1=1,3
+ DO 190 J2=1,3
+ IF(ABS(SV(J1,J2)).LE.SMAX) GOTO 190
+ JA=J1
+ JB=J2
+ SMAX=ABS(SV(J1,J2))
+ 190 CONTINUE
+ 200 CONTINUE
+ SMAX=0D0
+ DO 220 J3=JA+1,JA+2
+ J1=J3-3*((J3-1)/3)
+ RL=SV(J1,JB)/SV(JA,JB)
+ DO 210 J2=1,3
+ SV(J1,J2)=SV(J1,J2)-RL*SV(JA,J2)
+ IF(ABS(SV(J1,J2)).LE.SMAX) GOTO 210
+ JC=J1
+ SMAX=ABS(SV(J1,J2))
+ 210 CONTINUE
+ 220 CONTINUE
+ JB1=JB+1-3*(JB/3)
+ JB2=JB+2-3*((JB+1)/3)
+ P(N+I,JB1)=-SV(JC,JB2)
+ P(N+I,JB2)=SV(JC,JB1)
+ P(N+I,JB)=-(SV(JA,JB1)*P(N+I,JB1)+SV(JA,JB2)*P(N+I,JB2))/
+ & SV(JA,JB)
+ PA=SQRT(P(N+I,1)**2+P(N+I,2)**2+P(N+I,3)**2)
+ SGN=(-1D0)**INT(PYR(0)+0.5D0)
+ DO 230 J=1,3
+ P(N+I,J)=SGN*P(N+I,J)/PA
+ 230 CONTINUE
+ 240 CONTINUE
+
+C...Middle axis orthogonal to other two. Fill other codes.
+ SGN=(-1D0)**INT(PYR(0)+0.5D0)
+ P(N+2,1)=SGN*(P(N+1,2)*P(N+3,3)-P(N+1,3)*P(N+3,2))
+ P(N+2,2)=SGN*(P(N+1,3)*P(N+3,1)-P(N+1,1)*P(N+3,3))
+ P(N+2,3)=SGN*(P(N+1,1)*P(N+3,2)-P(N+1,2)*P(N+3,1))
+ DO 260 I=1,3
+ K(N+I,1)=31
+ K(N+I,2)=95
+ K(N+I,3)=I
+ K(N+I,4)=0
+ K(N+I,5)=0
+ P(N+I,5)=0D0
+ DO 250 J=1,5
+ V(I,J)=0D0
+ 250 CONTINUE
+ 260 CONTINUE
+
+C...Calculate sphericity and aplanarity. Select storing option.
+ SPH=1.5D0*(P(N+2,4)+P(N+3,4))
+ APL=1.5D0*P(N+3,4)
+ MSTU(61)=N+1
+ MSTU(62)=NP
+ IF(MSTU(43).LE.1) MSTU(3)=3
+ IF(MSTU(43).GE.2) N=N+3
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTHRU
+C...Performs thrust analysis to give thrust, oblateness
+C...and the related event axes.
+
+ SUBROUTINE PYTHRU(THR,OBL)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION TDI(3),TPR(3)
+
+C...Take copy of particles that are to be considered in thrust analysis.
+ NP=0
+ PS=0D0
+ DO 100 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 100
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
+ & GOTO 100
+ ENDIF
+ IF(N+NP+MSTU(44)+15.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYTHRU:) no more memory left in PYJETS')
+ THR=-2D0
+ OBL=-2D0
+ RETURN
+ ENDIF
+ NP=NP+1
+ K(N+NP,1)=23
+ P(N+NP,1)=P(I,1)
+ P(N+NP,2)=P(I,2)
+ P(N+NP,3)=P(I,3)
+ P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ P(N+NP,5)=1D0
+ IF(ABS(PARU(42)-1D0).GT.0.001D0) P(N+NP,5)=
+ & P(N+NP,4)**(PARU(42)-1D0)
+ PS=PS+P(N+NP,4)*P(N+NP,5)
+ 100 CONTINUE
+
+C...Very low multiplicities (0 or 1) not considered.
+ IF(NP.LE.1) THEN
+ CALL PYERRM(8,'(PYTHRU:) too few particles for analysis')
+ THR=-1D0
+ OBL=-1D0
+ RETURN
+ ENDIF
+
+C...Loop over thrust and major. T axis along z direction in latter case.
+ DO 320 ILD=1,2
+ IF(ILD.EQ.2) THEN
+ K(N+NP+1,1)=31
+ PHI=PYANGL(P(N+NP+1,1),P(N+NP+1,2))
+ MSTU(33)=1
+ CALL PYROBO(N+1,N+NP+1,0D0,-PHI,0D0,0D0,0D0)
+ THE=PYANGL(P(N+NP+1,3),P(N+NP+1,1))
+ CALL PYROBO(N+1,N+NP+1,-THE,0D0,0D0,0D0,0D0)
+ ENDIF
+
+C...Find and order particles with highest p (pT for major).
+ DO 110 ILF=N+NP+4,N+NP+MSTU(44)+4
+ P(ILF,4)=0D0
+ 110 CONTINUE
+ DO 160 I=N+1,N+NP
+ IF(ILD.EQ.2) P(I,4)=SQRT(P(I,1)**2+P(I,2)**2)
+ DO 130 ILF=N+NP+MSTU(44)+3,N+NP+4,-1
+ IF(P(I,4).LE.P(ILF,4)) GOTO 140
+ DO 120 J=1,5
+ P(ILF+1,J)=P(ILF,J)
+ 120 CONTINUE
+ 130 CONTINUE
+ ILF=N+NP+3
+ 140 DO 150 J=1,5
+ P(ILF+1,J)=P(I,J)
+ 150 CONTINUE
+ 160 CONTINUE
+
+C...Find and order initial axes with highest thrust (major).
+ DO 170 ILG=N+NP+MSTU(44)+5,N+NP+MSTU(44)+15
+ P(ILG,4)=0D0
+ 170 CONTINUE
+ NC=2**(MIN(MSTU(44),NP)-1)
+ DO 250 ILC=1,NC
+ DO 180 J=1,3
+ TDI(J)=0D0
+ 180 CONTINUE
+ DO 200 ILF=1,MIN(MSTU(44),NP)
+ SGN=P(N+NP+ILF+3,5)
+ IF(2**ILF*((ILC+2**(ILF-1)-1)/2**ILF).GE.ILC) SGN=-SGN
+ DO 190 J=1,4-ILD
+ TDI(J)=TDI(J)+SGN*P(N+NP+ILF+3,J)
+ 190 CONTINUE
+ 200 CONTINUE
+ TDS=TDI(1)**2+TDI(2)**2+TDI(3)**2
+ DO 220 ILG=N+NP+MSTU(44)+MIN(ILC,10)+4,N+NP+MSTU(44)+5,-1
+ IF(TDS.LE.P(ILG,4)) GOTO 230
+ DO 210 J=1,4
+ P(ILG+1,J)=P(ILG,J)
+ 210 CONTINUE
+ 220 CONTINUE
+ ILG=N+NP+MSTU(44)+4
+ 230 DO 240 J=1,3
+ P(ILG+1,J)=TDI(J)
+ 240 CONTINUE
+ P(ILG+1,4)=TDS
+ 250 CONTINUE
+
+C...Iterate direction of axis until stable maximum.
+ P(N+NP+ILD,4)=0D0
+ ILG=0
+ 260 ILG=ILG+1
+ THP=0D0
+ 270 THPS=THP
+ DO 280 J=1,3
+ IF(THP.LE.1D-10) TDI(J)=P(N+NP+MSTU(44)+4+ILG,J)
+ IF(THP.GT.1D-10) TDI(J)=TPR(J)
+ TPR(J)=0D0
+ 280 CONTINUE
+ DO 300 I=N+1,N+NP
+ SGN=SIGN(P(I,5),TDI(1)*P(I,1)+TDI(2)*P(I,2)+TDI(3)*P(I,3))
+ DO 290 J=1,4-ILD
+ TPR(J)=TPR(J)+SGN*P(I,J)
+ 290 CONTINUE
+ 300 CONTINUE
+ THP=SQRT(TPR(1)**2+TPR(2)**2+TPR(3)**2)/PS
+ IF(THP.GE.THPS+PARU(48)) GOTO 270
+
+C...Save good axis. Try new initial axis until a number of tries agree.
+ IF(THP.LT.P(N+NP+ILD,4)-PARU(48).AND.ILG.LT.MIN(10,NC)) GOTO 260
+ IF(THP.GT.P(N+NP+ILD,4)+PARU(48)) THEN
+ IAGR=0
+ SGN=(-1D0)**INT(PYR(0)+0.5D0)
+ DO 310 J=1,3
+ P(N+NP+ILD,J)=SGN*TPR(J)/(PS*THP)
+ 310 CONTINUE
+ P(N+NP+ILD,4)=THP
+ P(N+NP+ILD,5)=0D0
+ ENDIF
+ IAGR=IAGR+1
+ IF(IAGR.LT.MSTU(45).AND.ILG.LT.MIN(10,NC)) GOTO 260
+ 320 CONTINUE
+
+C...Find minor axis and value by orthogonality.
+ SGN=(-1D0)**INT(PYR(0)+0.5D0)
+ P(N+NP+3,1)=-SGN*P(N+NP+2,2)
+ P(N+NP+3,2)=SGN*P(N+NP+2,1)
+ P(N+NP+3,3)=0D0
+ THP=0D0
+ DO 330 I=N+1,N+NP
+ THP=THP+P(I,5)*ABS(P(N+NP+3,1)*P(I,1)+P(N+NP+3,2)*P(I,2))
+ 330 CONTINUE
+ P(N+NP+3,4)=THP/PS
+ P(N+NP+3,5)=0D0
+
+C...Fill axis information. Rotate back to original coordinate system.
+ DO 350 ILD=1,3
+ K(N+ILD,1)=31
+ K(N+ILD,2)=96
+ K(N+ILD,3)=ILD
+ K(N+ILD,4)=0
+ K(N+ILD,5)=0
+ DO 340 J=1,5
+ P(N+ILD,J)=P(N+NP+ILD,J)
+ V(N+ILD,J)=0D0
+ 340 CONTINUE
+ 350 CONTINUE
+ CALL PYROBO(N+1,N+3,THE,PHI,0D0,0D0,0D0)
+
+C...Calculate thrust and oblateness. Select storing option.
+ THR=P(N+1,4)
+ OBL=P(N+2,4)-P(N+3,4)
+ MSTU(61)=N+1
+ MSTU(62)=NP
+ IF(MSTU(43).LE.1) MSTU(3)=3
+ IF(MSTU(43).GE.2) N=N+3
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYCLUS
+C...Subdivides the particle content of an event into jets/clusters.
+
+ SUBROUTINE PYCLUS(NJET)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays and saved variables.
+ DIMENSION PS(5)
+ SAVE NSAV,NP,PS,PSS,RINIT,NPRE,NREM
+
+C...Functions: distance measure in pT, (pseudo)mass or Durham pT.
+ R2T(I1,I2)=(P(I1,5)*P(I2,5)-P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-
+ &P(I1,3)*P(I2,3))*2D0*P(I1,5)*P(I2,5)/(0.0001D0+P(I1,5)+P(I2,5))**2
+ R2M(I1,I2)=2D0*P(I1,4)*P(I2,4)*(1D0-(P(I1,1)*P(I2,1)+P(I1,2)*
+ &P(I2,2)+P(I1,3)*P(I2,3))/(P(I1,5)*P(I2,5)))
+ R2D(I1,I2)=2D0*MIN(P(I1,4),P(I2,4))**2*(1D0-(P(I1,1)*P(I2,1)+
+ &P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/(P(I1,5)*P(I2,5)))
+
+C...If first time, reset. If reentering, skip preliminaries.
+ IF(MSTU(48).LE.0) THEN
+ NP=0
+ DO 100 J=1,5
+ PS(J)=0D0
+ 100 CONTINUE
+ PSS=0D0
+ PIMASS=PMAS(PYCOMP(211),1)
+ ELSE
+ NJET=NSAV
+ IF(MSTU(43).GE.2) N=N-NJET
+ DO 110 I=N+1,N+NJET
+ P(I,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ 110 CONTINUE
+ IF(MSTU(46).LE.3.OR.MSTU(46).EQ.5) THEN
+ R2ACC=PARU(44)**2
+ ELSE
+ R2ACC=PARU(45)*PS(5)**2
+ ENDIF
+ NLOOP=0
+ GOTO 300
+ ENDIF
+
+C...Find which particles are to be considered in cluster search.
+ DO 140 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 140
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 140
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
+ & GOTO 140
+ ENDIF
+ IF(N+2*NP.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYCLUS:) no more memory left in PYJETS')
+ NJET=-1
+ RETURN
+ ENDIF
+
+C...Take copy of these particles, with space left for jets later on.
+ NP=NP+1
+ K(N+NP,3)=I
+ DO 120 J=1,5
+ P(N+NP,J)=P(I,J)
+ 120 CONTINUE
+ IF(MSTU(42).EQ.0) P(N+NP,5)=0D0
+ IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) P(N+NP,5)=PIMASS
+ P(N+NP,4)=SQRT(P(N+NP,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ P(N+NP,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ DO 130 J=1,4
+ PS(J)=PS(J)+P(N+NP,J)
+ 130 CONTINUE
+ PSS=PSS+P(N+NP,5)
+ 140 CONTINUE
+ DO 160 I=N+1,N+NP
+ K(I+NP,3)=K(I,3)
+ DO 150 J=1,5
+ P(I+NP,J)=P(I,J)
+ 150 CONTINUE
+ 160 CONTINUE
+ PS(5)=SQRT(MAX(0D0,PS(4)**2-PS(1)**2-PS(2)**2-PS(3)**2))
+
+C...Very low multiplicities not considered.
+ IF(NP.LT.MSTU(47)) THEN
+ CALL PYERRM(8,'(PYCLUS:) too few particles for analysis')
+ NJET=-1
+ RETURN
+ ENDIF
+
+C...Find precluster configuration. If too few jets, make harder cuts.
+ NLOOP=0
+ IF(MSTU(46).LE.3.OR.MSTU(46).EQ.5) THEN
+ R2ACC=PARU(44)**2
+ ELSE
+ R2ACC=PARU(45)*PS(5)**2
+ ENDIF
+ RINIT=1.25D0*PARU(43)
+ IF(NP.LE.MSTU(47)+2) RINIT=0D0
+ 170 RINIT=0.8D0*RINIT
+ NPRE=0
+ NREM=NP
+ DO 180 I=N+NP+1,N+2*NP
+ K(I,4)=0
+ 180 CONTINUE
+
+C...Sum up small momentum region. Jet if enough absolute momentum.
+ IF(MSTU(46).LE.2) THEN
+ DO 190 J=1,4
+ P(N+1,J)=0D0
+ 190 CONTINUE
+ DO 210 I=N+NP+1,N+2*NP
+ IF(P(I,5).GT.2D0*RINIT) GOTO 210
+ NREM=NREM-1
+ K(I,4)=1
+ DO 200 J=1,4
+ P(N+1,J)=P(N+1,J)+P(I,J)
+ 200 CONTINUE
+ 210 CONTINUE
+ P(N+1,5)=SQRT(P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2)
+ IF(P(N+1,5).GT.2D0*RINIT) NPRE=1
+ IF(RINIT.GE.0.2D0*PARU(43).AND.NPRE+NREM.LT.MSTU(47)) GOTO 170
+ IF(NREM.EQ.0) GOTO 170
+ ENDIF
+
+C...Find fastest remaining particle.
+ 220 NPRE=NPRE+1
+ PMAX=0D0
+ DO 230 I=N+NP+1,N+2*NP
+ IF(K(I,4).NE.0.OR.P(I,5).LE.PMAX) GOTO 230
+ IMAX=I
+ PMAX=P(I,5)
+ 230 CONTINUE
+ DO 240 J=1,5
+ P(N+NPRE,J)=P(IMAX,J)
+ 240 CONTINUE
+ NREM=NREM-1
+ K(IMAX,4)=NPRE
+
+C...Sum up precluster around it according to pT separation.
+ IF(MSTU(46).LE.2) THEN
+ DO 260 I=N+NP+1,N+2*NP
+ IF(K(I,4).NE.0) GOTO 260
+ R2=R2T(I,IMAX)
+ IF(R2.GT.RINIT**2) GOTO 260
+ NREM=NREM-1
+ K(I,4)=NPRE
+ DO 250 J=1,4
+ P(N+NPRE,J)=P(N+NPRE,J)+P(I,J)
+ 250 CONTINUE
+ 260 CONTINUE
+ P(N+NPRE,5)=SQRT(P(N+NPRE,1)**2+P(N+NPRE,2)**2+P(N+NPRE,3)**2)
+
+C...Sum up precluster around it according to mass or
+C...Durham pT separation.
+ ELSE
+ 270 IMIN=0
+ R2MIN=RINIT**2
+ DO 280 I=N+NP+1,N+2*NP
+ IF(K(I,4).NE.0) GOTO 280
+ IF(MSTU(46).LE.4) THEN
+ R2=R2M(I,N+NPRE)
+ ELSE
+ R2=R2D(I,N+NPRE)
+ ENDIF
+ IF(R2.GE.R2MIN) GOTO 280
+ IMIN=I
+ R2MIN=R2
+ 280 CONTINUE
+ IF(IMIN.NE.0) THEN
+ DO 290 J=1,4
+ P(N+NPRE,J)=P(N+NPRE,J)+P(IMIN,J)
+ 290 CONTINUE
+ P(N+NPRE,5)=SQRT(P(N+NPRE,1)**2+P(N+NPRE,2)**2+P(N+NPRE,3)**2)
+ NREM=NREM-1
+ K(IMIN,4)=NPRE
+ GOTO 270
+ ENDIF
+ ENDIF
+
+C...Check if more preclusters to be found. Start over if too few.
+ IF(RINIT.GE.0.2D0*PARU(43).AND.NPRE+NREM.LT.MSTU(47)) GOTO 170
+ IF(NREM.GT.0) GOTO 220
+ NJET=NPRE
+
+C...Reassign all particles to nearest jet. Sum up new jet momenta.
+ 300 TSAV=0D0
+ PSJT=0D0
+ 310 IF(MSTU(46).LE.1) THEN
+ DO 330 I=N+1,N+NJET
+ DO 320 J=1,4
+ V(I,J)=0D0
+ 320 CONTINUE
+ 330 CONTINUE
+ DO 360 I=N+NP+1,N+2*NP
+ R2MIN=PSS**2
+ DO 340 IJET=N+1,N+NJET
+ IF(P(IJET,5).LT.RINIT) GOTO 340
+ R2=R2T(I,IJET)
+ IF(R2.GE.R2MIN) GOTO 340
+ IMIN=IJET
+ R2MIN=R2
+ 340 CONTINUE
+ K(I,4)=IMIN-N
+ DO 350 J=1,4
+ V(IMIN,J)=V(IMIN,J)+P(I,J)
+ 350 CONTINUE
+ 360 CONTINUE
+ PSJT=0D0
+ DO 380 I=N+1,N+NJET
+ DO 370 J=1,4
+ P(I,J)=V(I,J)
+ 370 CONTINUE
+ P(I,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ PSJT=PSJT+P(I,5)
+ 380 CONTINUE
+ ENDIF
+
+C...Find two closest jets.
+ R2MIN=2D0*MAX(R2ACC,PS(5)**2)
+ DO 400 ITRY1=N+1,N+NJET-1
+ DO 390 ITRY2=ITRY1+1,N+NJET
+ IF(MSTU(46).LE.2) THEN
+ R2=R2T(ITRY1,ITRY2)
+ ELSEIF(MSTU(46).LE.4) THEN
+ R2=R2M(ITRY1,ITRY2)
+ ELSE
+ R2=R2D(ITRY1,ITRY2)
+ ENDIF
+ IF(R2.GE.R2MIN) GOTO 390
+ IMIN1=ITRY1
+ IMIN2=ITRY2
+ R2MIN=R2
+ 390 CONTINUE
+ 400 CONTINUE
+
+C...If allowed, join two closest jets and start over.
+ IF(NJET.GT.MSTU(47).AND.R2MIN.LT.R2ACC) THEN
+ IREC=MIN(IMIN1,IMIN2)
+ IDEL=MAX(IMIN1,IMIN2)
+ DO 410 J=1,4
+ P(IREC,J)=P(IMIN1,J)+P(IMIN2,J)
+ 410 CONTINUE
+ P(IREC,5)=SQRT(P(IREC,1)**2+P(IREC,2)**2+P(IREC,3)**2)
+ DO 430 I=IDEL+1,N+NJET
+ DO 420 J=1,5
+ P(I-1,J)=P(I,J)
+ 420 CONTINUE
+ 430 CONTINUE
+ IF(MSTU(46).GE.2) THEN
+ DO 440 I=N+NP+1,N+2*NP
+ IORI=N+K(I,4)
+ IF(IORI.EQ.IDEL) K(I,4)=IREC-N
+ IF(IORI.GT.IDEL) K(I,4)=K(I,4)-1
+ 440 CONTINUE
+ ENDIF
+ NJET=NJET-1
+ GOTO 300
+
+C...Divide up broad jet if empty cluster in list of final ones.
+ ELSEIF(NJET.EQ.MSTU(47).AND.MSTU(46).LE.1.AND.NLOOP.LE.2) THEN
+ DO 450 I=N+1,N+NJET
+ K(I,5)=0
+ 450 CONTINUE
+ DO 460 I=N+NP+1,N+2*NP
+ K(N+K(I,4),5)=K(N+K(I,4),5)+1
+ 460 CONTINUE
+ IEMP=0
+ DO 470 I=N+1,N+NJET
+ IF(K(I,5).EQ.0) IEMP=I
+ 470 CONTINUE
+ IF(IEMP.NE.0) THEN
+ NLOOP=NLOOP+1
+ ISPL=0
+ R2MAX=0D0
+ DO 480 I=N+NP+1,N+2*NP
+ IF(K(N+K(I,4),5).LE.1.OR.P(I,5).LT.RINIT) GOTO 480
+ IJET=N+K(I,4)
+ R2=R2T(I,IJET)
+ IF(R2.LE.R2MAX) GOTO 480
+ ISPL=I
+ R2MAX=R2
+ 480 CONTINUE
+ IF(ISPL.NE.0) THEN
+ IJET=N+K(ISPL,4)
+ DO 490 J=1,4
+ P(IEMP,J)=P(ISPL,J)
+ P(IJET,J)=P(IJET,J)-P(ISPL,J)
+ 490 CONTINUE
+ P(IEMP,5)=P(ISPL,5)
+ P(IJET,5)=SQRT(P(IJET,1)**2+P(IJET,2)**2+P(IJET,3)**2)
+ IF(NLOOP.LE.2) GOTO 300
+ ENDIF
+ ENDIF
+ ENDIF
+
+C...If generalized thrust has not yet converged, continue iteration.
+ IF(MSTU(46).LE.1.AND.NLOOP.LE.2.AND.PSJT/PSS.GT.TSAV+PARU(48))
+ &THEN
+ TSAV=PSJT/PSS
+ GOTO 310
+ ENDIF
+
+C...Reorder jets according to energy.
+ DO 510 I=N+1,N+NJET
+ DO 500 J=1,5
+ V(I,J)=P(I,J)
+ 500 CONTINUE
+ 510 CONTINUE
+ DO 540 INEW=N+1,N+NJET
+ PEMAX=0D0
+ DO 520 ITRY=N+1,N+NJET
+ IF(V(ITRY,4).LE.PEMAX) GOTO 520
+ IMAX=ITRY
+ PEMAX=V(ITRY,4)
+ 520 CONTINUE
+ K(INEW,1)=31
+ K(INEW,2)=97
+ K(INEW,3)=INEW-N
+ K(INEW,4)=0
+ DO 530 J=1,5
+ P(INEW,J)=V(IMAX,J)
+ 530 CONTINUE
+ V(IMAX,4)=-1D0
+ K(IMAX,5)=INEW
+ 540 CONTINUE
+
+C...Clean up particle-jet assignments and jet information.
+ DO 550 I=N+NP+1,N+2*NP
+ IORI=K(N+K(I,4),5)
+ K(I,4)=IORI-N
+ IF(K(K(I,3),1).NE.3) K(K(I,3),4)=IORI-N
+ K(IORI,4)=K(IORI,4)+1
+ 550 CONTINUE
+ IEMP=0
+ PSJT=0D0
+ DO 570 I=N+1,N+NJET
+ K(I,5)=0
+ PSJT=PSJT+P(I,5)
+ P(I,5)=SQRT(MAX(P(I,4)**2-P(I,5)**2,0D0))
+ DO 560 J=1,5
+ V(I,J)=0D0
+ 560 CONTINUE
+ IF(K(I,4).EQ.0) IEMP=I
+ 570 CONTINUE
+
+C...Select storing option. Output variables. Check for failure.
+ MSTU(61)=N+1
+ MSTU(62)=NP
+ MSTU(63)=NPRE
+ PARU(61)=PS(5)
+ PARU(62)=PSJT/PSS
+ PARU(63)=SQRT(R2MIN)
+ IF(NJET.LE.1) PARU(63)=0D0
+ IF(IEMP.NE.0) THEN
+ CALL PYERRM(8,'(PYCLUS:) failed to reconstruct as requested')
+ NJET=-1
+ ENDIF
+ IF(MSTU(43).LE.1) MSTU(3)=NJET
+ IF(MSTU(43).GE.2) N=N+NJET
+ NSAV=NJET
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYCELL
+C...Provides a simple way of jet finding in eta-phi-ET coordinates,
+C...as used for calorimeters at hadron colliders.
+
+ SUBROUTINE PYCELL(NJET)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Loop over all particles. Find cell that was hit by given particle.
+ PTLRAT=1D0/SINH(PARU(51))**2
+ NP=0
+ NC=N
+ DO 110 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 110
+ IF(P(I,1)**2+P(I,2)**2.LE.PTLRAT*P(I,3)**2) GOTO 110
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 110
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
+ & GOTO 110
+ ENDIF
+ NP=NP+1
+ PT=SQRT(P(I,1)**2+P(I,2)**2)
+ ETA=SIGN(LOG((SQRT(PT**2+P(I,3)**2)+ABS(P(I,3)))/PT),P(I,3))
+ IETA=MAX(1,MIN(MSTU(51),1+INT(MSTU(51)*0.5D0*
+ & (ETA/PARU(51)+1D0))))
+ PHI=PYANGL(P(I,1),P(I,2))
+ IPHI=MAX(1,MIN(MSTU(52),1+INT(MSTU(52)*0.5D0*
+ & (PHI/PARU(1)+1D0))))
+ IETPH=MSTU(52)*IETA+IPHI
+
+C...Add to cell already hit, or book new cell.
+ DO 100 IC=N+1,NC
+ IF(IETPH.EQ.K(IC,3)) THEN
+ K(IC,4)=K(IC,4)+1
+ P(IC,5)=P(IC,5)+PT
+ GOTO 110
+ ENDIF
+ 100 CONTINUE
+ IF(NC.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYCELL:) no more memory left in PYJETS')
+ NJET=-2
+ RETURN
+ ENDIF
+ NC=NC+1
+ K(NC,3)=IETPH
+ K(NC,4)=1
+ K(NC,5)=2
+ P(NC,1)=(PARU(51)/MSTU(51))*(2*IETA-1-MSTU(51))
+ P(NC,2)=(PARU(1)/MSTU(52))*(2*IPHI-1-MSTU(52))
+ P(NC,5)=PT
+ 110 CONTINUE
+
+C...Smear true bin content by calorimeter resolution.
+ IF(MSTU(53).GE.1) THEN
+ DO 130 IC=N+1,NC
+ PEI=P(IC,5)
+ IF(MSTU(53).EQ.2) PEI=P(IC,5)*COSH(P(IC,1))
+ 120 PEF=PEI+PARU(55)*SQRT(-2D0*LOG(MAX(1D-10,PYR(0)))*PEI)*
+ & COS(PARU(2)*PYR(0))
+ IF(PEF.LT.0D0.OR.PEF.GT.PARU(56)*PEI) GOTO 120
+ P(IC,5)=PEF
+ IF(MSTU(53).EQ.2) P(IC,5)=PEF/COSH(P(IC,1))
+ 130 CONTINUE
+ ENDIF
+
+C...Remove cells below threshold.
+ IF(PARU(58).GT.0D0) THEN
+ NCC=NC
+ NC=N
+ DO 140 IC=N+1,NCC
+ IF(P(IC,5).GT.PARU(58)) THEN
+ NC=NC+1
+ K(NC,3)=K(IC,3)
+ K(NC,4)=K(IC,4)
+ K(NC,5)=K(IC,5)
+ P(NC,1)=P(IC,1)
+ P(NC,2)=P(IC,2)
+ P(NC,5)=P(IC,5)
+ ENDIF
+ 140 CONTINUE
+ ENDIF
+
+C...Find initiator cell: the one with highest pT of not yet used ones.
+ NJ=NC
+ 150 ETMAX=0D0
+ DO 160 IC=N+1,NC
+ IF(K(IC,5).NE.2) GOTO 160
+ IF(P(IC,5).LE.ETMAX) GOTO 160
+ ICMAX=IC
+ ETA=P(IC,1)
+ PHI=P(IC,2)
+ ETMAX=P(IC,5)
+ 160 CONTINUE
+ IF(ETMAX.LT.PARU(52)) GOTO 220
+ IF(NJ.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYCELL:) no more memory left in PYJETS')
+ NJET=-2
+ RETURN
+ ENDIF
+ K(ICMAX,5)=1
+ NJ=NJ+1
+ K(NJ,4)=0
+ K(NJ,5)=1
+ P(NJ,1)=ETA
+ P(NJ,2)=PHI
+ P(NJ,3)=0D0
+ P(NJ,4)=0D0
+ P(NJ,5)=0D0
+
+C...Sum up unused cells within required distance of initiator.
+ DO 170 IC=N+1,NC
+ IF(K(IC,5).EQ.0) GOTO 170
+ IF(ABS(P(IC,1)-ETA).GT.PARU(54)) GOTO 170
+ DPHIA=ABS(P(IC,2)-PHI)
+ IF(DPHIA.GT.PARU(54).AND.DPHIA.LT.PARU(2)-PARU(54)) GOTO 170
+ PHIC=P(IC,2)
+ IF(DPHIA.GT.PARU(1)) PHIC=PHIC+SIGN(PARU(2),PHI)
+ IF((P(IC,1)-ETA)**2+(PHIC-PHI)**2.GT.PARU(54)**2) GOTO 170
+ K(IC,5)=-K(IC,5)
+ K(NJ,4)=K(NJ,4)+K(IC,4)
+ P(NJ,3)=P(NJ,3)+P(IC,5)*P(IC,1)
+ P(NJ,4)=P(NJ,4)+P(IC,5)*PHIC
+ P(NJ,5)=P(NJ,5)+P(IC,5)
+ 170 CONTINUE
+
+C...Reject cluster below minimum ET, else accept.
+ IF(P(NJ,5).LT.PARU(53)) THEN
+ NJ=NJ-1
+ DO 180 IC=N+1,NC
+ IF(K(IC,5).LT.0) K(IC,5)=-K(IC,5)
+ 180 CONTINUE
+ ELSEIF(MSTU(54).LE.2) THEN
+ P(NJ,3)=P(NJ,3)/P(NJ,5)
+ P(NJ,4)=P(NJ,4)/P(NJ,5)
+ IF(ABS(P(NJ,4)).GT.PARU(1)) P(NJ,4)=P(NJ,4)-SIGN(PARU(2),
+ & P(NJ,4))
+ DO 190 IC=N+1,NC
+ IF(K(IC,5).LT.0) K(IC,5)=0
+ 190 CONTINUE
+ ELSE
+ DO 200 J=1,4
+ P(NJ,J)=0D0
+ 200 CONTINUE
+ DO 210 IC=N+1,NC
+ IF(K(IC,5).GE.0) GOTO 210
+ P(NJ,1)=P(NJ,1)+P(IC,5)*COS(P(IC,2))
+ P(NJ,2)=P(NJ,2)+P(IC,5)*SIN(P(IC,2))
+ P(NJ,3)=P(NJ,3)+P(IC,5)*SINH(P(IC,1))
+ P(NJ,4)=P(NJ,4)+P(IC,5)*COSH(P(IC,1))
+ K(IC,5)=0
+ 210 CONTINUE
+ ENDIF
+ GOTO 150
+
+C...Arrange clusters in falling ET sequence.
+ 220 DO 250 I=1,NJ-NC
+ ETMAX=0D0
+ DO 230 IJ=NC+1,NJ
+ IF(K(IJ,5).EQ.0) GOTO 230
+ IF(P(IJ,5).LT.ETMAX) GOTO 230
+ IJMAX=IJ
+ ETMAX=P(IJ,5)
+ 230 CONTINUE
+ K(IJMAX,5)=0
+ K(N+I,1)=31
+ K(N+I,2)=98
+ K(N+I,3)=I
+ K(N+I,4)=K(IJMAX,4)
+ K(N+I,5)=0
+ DO 240 J=1,5
+ P(N+I,J)=P(IJMAX,J)
+ V(N+I,J)=0D0
+ 240 CONTINUE
+ 250 CONTINUE
+ NJET=NJ-NC
+
+C...Convert to massless or massive four-vectors.
+ IF(MSTU(54).EQ.2) THEN
+ DO 260 I=N+1,N+NJET
+ ETA=P(I,3)
+ P(I,1)=P(I,5)*COS(P(I,4))
+ P(I,2)=P(I,5)*SIN(P(I,4))
+ P(I,3)=P(I,5)*SINH(ETA)
+ P(I,4)=P(I,5)*COSH(ETA)
+ P(I,5)=0D0
+ 260 CONTINUE
+ ELSEIF(MSTU(54).GE.3) THEN
+ DO 270 I=N+1,N+NJET
+ P(I,5)=SQRT(MAX(0D0,P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2))
+ 270 CONTINUE
+ ENDIF
+
+C...Information about storage.
+ MSTU(61)=N+1
+ MSTU(62)=NP
+ MSTU(63)=NC-N
+ IF(MSTU(43).LE.1) MSTU(3)=NJET
+ IF(MSTU(43).GE.2) N=N+NJET
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYJMAS
+C...Determines, approximately, the two jet masses that minimize
+C...the sum m_H^2 + m_L^2, a la Clavelli and Wyler.
+
+ SUBROUTINE PYJMAS(PMH,PML)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+C...Local arrays.
+ DIMENSION SM(3,3),SAX(3),PS(3,5)
+
+C...Reset.
+ NP=0
+ DO 120 J1=1,3
+ DO 100 J2=J1,3
+ SM(J1,J2)=0D0
+ 100 CONTINUE
+ DO 110 J2=1,4
+ PS(J1,J2)=0D0
+ 110 CONTINUE
+ 120 CONTINUE
+ PSS=0D0
+ PIMASS=PMAS(PYCOMP(211),1)
+
+C...Take copy of particles that are to be considered in mass analysis.
+ DO 170 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 170
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 170
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
+ & GOTO 170
+ ENDIF
+ IF(N+NP+1.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYJMAS:) no more memory left in PYJETS')
+ PMH=-2D0
+ PML=-2D0
+ RETURN
+ ENDIF
+ NP=NP+1
+ DO 130 J=1,5
+ P(N+NP,J)=P(I,J)
+ 130 CONTINUE
+ IF(MSTU(42).EQ.0) P(N+NP,5)=0D0
+ IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) P(N+NP,5)=PIMASS
+ P(N+NP,4)=SQRT(P(N+NP,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+
+C...Fill information in sphericity tensor and total momentum vector.
+ DO 150 J1=1,3
+ DO 140 J2=J1,3
+ SM(J1,J2)=SM(J1,J2)+P(I,J1)*P(I,J2)
+ 140 CONTINUE
+ 150 CONTINUE
+ PSS=PSS+(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ DO 160 J=1,4
+ PS(3,J)=PS(3,J)+P(N+NP,J)
+ 160 CONTINUE
+ 170 CONTINUE
+
+C...Very low multiplicities (0 or 1) not considered.
+ IF(NP.LE.1) THEN
+ CALL PYERRM(8,'(PYJMAS:) too few particles for analysis')
+ PMH=-1D0
+ PML=-1D0
+ RETURN
+ ENDIF
+ PARU(61)=SQRT(MAX(0D0,PS(3,4)**2-PS(3,1)**2-PS(3,2)**2-
+ &PS(3,3)**2))
+
+C...Find largest eigenvalue to matrix (third degree equation).
+ DO 190 J1=1,3
+ DO 180 J2=J1,3
+ SM(J1,J2)=SM(J1,J2)/PSS
+ 180 CONTINUE
+ 190 CONTINUE
+ SQ=(SM(1,1)*SM(2,2)+SM(1,1)*SM(3,3)+SM(2,2)*SM(3,3)-
+ &SM(1,2)**2-SM(1,3)**2-SM(2,3)**2)/3D0-1D0/9D0
+ SR=-0.5D0*(SQ+1D0/9D0+SM(1,1)*SM(2,3)**2+SM(2,2)*SM(1,3)**2+
+ &SM(3,3)*SM(1,2)**2-SM(1,1)*SM(2,2)*SM(3,3))+
+ &SM(1,2)*SM(1,3)*SM(2,3)+1D0/27D0
+ SP=COS(ACOS(MAX(MIN(SR/SQRT(-SQ**3),1D0),-1D0))/3D0)
+ SMA=1D0/3D0+SQRT(-SQ)*MAX(2D0*SP,SQRT(3D0*(1D0-SP**2))-SP)
+
+C...Find largest eigenvector by solving equation system.
+ DO 210 J1=1,3
+ SM(J1,J1)=SM(J1,J1)-SMA
+ DO 200 J2=J1+1,3
+ SM(J2,J1)=SM(J1,J2)
+ 200 CONTINUE
+ 210 CONTINUE
+ SMAX=0D0
+ DO 230 J1=1,3
+ DO 220 J2=1,3
+ IF(ABS(SM(J1,J2)).LE.SMAX) GOTO 220
+ JA=J1
+ JB=J2
+ SMAX=ABS(SM(J1,J2))
+ 220 CONTINUE
+ 230 CONTINUE
+ SMAX=0D0
+ DO 250 J3=JA+1,JA+2
+ J1=J3-3*((J3-1)/3)
+ RL=SM(J1,JB)/SM(JA,JB)
+ DO 240 J2=1,3
+ SM(J1,J2)=SM(J1,J2)-RL*SM(JA,J2)
+ IF(ABS(SM(J1,J2)).LE.SMAX) GOTO 240
+ JC=J1
+ SMAX=ABS(SM(J1,J2))
+ 240 CONTINUE
+ 250 CONTINUE
+ JB1=JB+1-3*(JB/3)
+ JB2=JB+2-3*((JB+1)/3)
+ SAX(JB1)=-SM(JC,JB2)
+ SAX(JB2)=SM(JC,JB1)
+ SAX(JB)=-(SM(JA,JB1)*SAX(JB1)+SM(JA,JB2)*SAX(JB2))/SM(JA,JB)
+
+C...Divide particles into two initial clusters by hemisphere.
+ DO 270 I=N+1,N+NP
+ PSAX=P(I,1)*SAX(1)+P(I,2)*SAX(2)+P(I,3)*SAX(3)
+ IS=1
+ IF(PSAX.LT.0D0) IS=2
+ K(I,3)=IS
+ DO 260 J=1,4
+ PS(IS,J)=PS(IS,J)+P(I,J)
+ 260 CONTINUE
+ 270 CONTINUE
+ PMS=MAX(1D-10,PS(1,4)**2-PS(1,1)**2-PS(1,2)**2-PS(1,3)**2)+
+ &MAX(1D-10,PS(2,4)**2-PS(2,1)**2-PS(2,2)**2-PS(2,3)**2)
+
+C...Reassign one particle at a time; find maximum decrease of m^2 sum.
+ 280 PMD=0D0
+ IM=0
+ DO 290 J=1,4
+ PS(3,J)=PS(1,J)-PS(2,J)
+ 290 CONTINUE
+ DO 300 I=N+1,N+NP
+ PPS=P(I,4)*PS(3,4)-P(I,1)*PS(3,1)-P(I,2)*PS(3,2)-P(I,3)*PS(3,3)
+ IF(K(I,3).EQ.1) PMDI=2D0*(P(I,5)**2-PPS)
+ IF(K(I,3).EQ.2) PMDI=2D0*(P(I,5)**2+PPS)
+ IF(PMDI.LT.PMD) THEN
+ PMD=PMDI
+ IM=I
+ ENDIF
+ 300 CONTINUE
+
+C...Loop back if significant reduction in sum of m^2.
+ IF(PMD.LT.-PARU(48)*PMS) THEN
+ PMS=PMS+PMD
+ IS=K(IM,3)
+ DO 310 J=1,4
+ PS(IS,J)=PS(IS,J)-P(IM,J)
+ PS(3-IS,J)=PS(3-IS,J)+P(IM,J)
+ 310 CONTINUE
+ K(IM,3)=3-IS
+ GOTO 280
+ ENDIF
+
+C...Final masses and output.
+ MSTU(61)=N+1
+ MSTU(62)=NP
+ PS(1,5)=SQRT(MAX(0D0,PS(1,4)**2-PS(1,1)**2-PS(1,2)**2-PS(1,3)**2))
+ PS(2,5)=SQRT(MAX(0D0,PS(2,4)**2-PS(2,1)**2-PS(2,2)**2-PS(2,3)**2))
+ PMH=MAX(PS(1,5),PS(2,5))
+ PML=MIN(PS(1,5),PS(2,5))
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYFOWO
+C...Calculates the first few Fox-Wolfram moments.
+
+ SUBROUTINE PYFOWO(H10,H20,H30,H40)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Copy momenta for particles and calculate H0.
+ NP=0
+ H0=0D0
+ HD=0D0
+ DO 110 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 110
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 110
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
+ & GOTO 110
+ ENDIF
+ IF(N+NP.GE.MSTU(4)-MSTU(32)-5) THEN
+ CALL PYERRM(11,'(PYFOWO:) no more memory left in PYJETS')
+ H10=-1D0
+ H20=-1D0
+ H30=-1D0
+ H40=-1D0
+ RETURN
+ ENDIF
+ NP=NP+1
+ DO 100 J=1,3
+ P(N+NP,J)=P(I,J)
+ 100 CONTINUE
+ P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ H0=H0+P(N+NP,4)
+ HD=HD+P(N+NP,4)**2
+ 110 CONTINUE
+ H0=H0**2
+
+C...Very low multiplicities (0 or 1) not considered.
+ IF(NP.LE.1) THEN
+ CALL PYERRM(8,'(PYFOWO:) too few particles for analysis')
+ H10=-1D0
+ H20=-1D0
+ H30=-1D0
+ H40=-1D0
+ RETURN
+ ENDIF
+
+C...Calculate H1 - H4.
+ H10=0D0
+ H20=0D0
+ H30=0D0
+ H40=0D0
+ DO 130 I1=N+1,N+NP
+ DO 120 I2=I1+1,N+NP
+ CTHE=(P(I1,1)*P(I2,1)+P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/
+ & (P(I1,4)*P(I2,4))
+ H10=H10+P(I1,4)*P(I2,4)*CTHE
+ H20=H20+P(I1,4)*P(I2,4)*(1.5D0*CTHE**2-0.5D0)
+ H30=H30+P(I1,4)*P(I2,4)*(2.5D0*CTHE**3-1.5D0*CTHE)
+ H40=H40+P(I1,4)*P(I2,4)*(4.375D0*CTHE**4-3.75D0*CTHE**2+
+ & 0.375D0)
+ 120 CONTINUE
+ 130 CONTINUE
+
+C...Calculate H1/H0 - H4/H0. Output.
+ MSTU(61)=N+1
+ MSTU(62)=NP
+ H10=(HD+2D0*H10)/H0
+ H20=(HD+2D0*H20)/H0
+ H30=(HD+2D0*H30)/H0
+ H40=(HD+2D0*H40)/H0
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTABU
+C...Evaluates various properties of an event, with statistics
+C...accumulated during the course of the run and
+C...printed at the end.
+
+ SUBROUTINE PYTABU(MTABU)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
+C...Local arrays, character variables, saved variables and data.
+ DIMENSION KFIS(100,2),NPIS(100,0:10),KFFS(400),NPFS(400,4),
+ &FEVFM(10,4),FM1FM(3,10,4),FM2FM(3,10,4),FMOMA(4),FMOMS(4),
+ &FEVEE(50),FE1EC(50),FE2EC(50),FE1EA(25),FE2EA(25),
+ &KFDM(8),KFDC(200,0:8),NPDC(200)
+ SAVE NEVIS,NKFIS,KFIS,NPIS,NEVFS,NPRFS,NFIFS,NCHFS,NKFFS,
+ &KFFS,NPFS,NEVFM,NMUFM,FM1FM,FM2FM,NEVEE,FE1EC,FE2EC,FE1EA,
+ &FE2EA,NEVDC,NKFDC,NREDC,KFDC,NPDC
+ CHARACTER CHAU*16,CHIS(2)*12,CHDC(8)*12
+ DATA NEVIS/0/,NKFIS/0/,NEVFS/0/,NPRFS/0/,NFIFS/0/,NCHFS/0/,
+ &NKFFS/0/,NEVFM/0/,NMUFM/0/,FM1FM/120*0D0/,FM2FM/120*0D0/,
+ &NEVEE/0/,FE1EC/50*0D0/,FE2EC/50*0D0/,FE1EA/25*0D0/,FE2EA/25*0D0/,
+ &NEVDC/0/,NKFDC/0/,NREDC/0/
+
+C...Reset statistics on initial parton state.
+ IF(MTABU.EQ.10) THEN
+ NEVIS=0
+ NKFIS=0
+
+C...Identify and order flavour content of initial state.
+ ELSEIF(MTABU.EQ.11) THEN
+ NEVIS=NEVIS+1
+ KFM1=2*IABS(MSTU(161))
+ IF(MSTU(161).GT.0) KFM1=KFM1-1
+ KFM2=2*IABS(MSTU(162))
+ IF(MSTU(162).GT.0) KFM2=KFM2-1
+ KFMN=MIN(KFM1,KFM2)
+ KFMX=MAX(KFM1,KFM2)
+ DO 100 I=1,NKFIS
+ IF(KFMN.EQ.KFIS(I,1).AND.KFMX.EQ.KFIS(I,2)) THEN
+ IKFIS=-I
+ GOTO 110
+ ELSEIF(KFMN.LT.KFIS(I,1).OR.(KFMN.EQ.KFIS(I,1).AND.
+ & KFMX.LT.KFIS(I,2))) THEN
+ IKFIS=I
+ GOTO 110
+ ENDIF
+ 100 CONTINUE
+ IKFIS=NKFIS+1
+ 110 IF(IKFIS.LT.0) THEN
+ IKFIS=-IKFIS
+ ELSE
+ IF(NKFIS.GE.100) RETURN
+ DO 130 I=NKFIS,IKFIS,-1
+ KFIS(I+1,1)=KFIS(I,1)
+ KFIS(I+1,2)=KFIS(I,2)
+ DO 120 J=0,10
+ NPIS(I+1,J)=NPIS(I,J)
+ 120 CONTINUE
+ 130 CONTINUE
+ NKFIS=NKFIS+1
+ KFIS(IKFIS,1)=KFMN
+ KFIS(IKFIS,2)=KFMX
+ DO 140 J=0,10
+ NPIS(IKFIS,J)=0
+ 140 CONTINUE
+ ENDIF
+ NPIS(IKFIS,0)=NPIS(IKFIS,0)+1
+
+C...Count number of partons in initial state.
+ NP=0
+ DO 160 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.12) THEN
+ ELSEIF(IABS(K(I,2)).GT.80.AND.IABS(K(I,2)).LE.100) THEN
+ ELSEIF(IABS(K(I,2)).GT.100.AND.MOD(IABS(K(I,2))/10,10).NE.0)
+ & THEN
+ ELSE
+ IM=I
+ 150 IM=K(IM,3)
+ IF(IM.LE.0.OR.IM.GT.N) THEN
+ NP=NP+1
+ ELSEIF(K(IM,1).LE.0.OR.K(IM,1).GT.20) THEN
+ NP=NP+1
+ ELSEIF(IABS(K(IM,2)).GT.80.AND.IABS(K(IM,2)).LE.100) THEN
+ ELSEIF(IABS(K(IM,2)).GT.100.AND.MOD(IABS(K(IM,2))/10,10)
+ & .NE.0) THEN
+ ELSE
+ GOTO 150
+ ENDIF
+ ENDIF
+ 160 CONTINUE
+ NPCO=MAX(NP,1)
+ IF(NP.GE.6) NPCO=6
+ IF(NP.GE.8) NPCO=7
+ IF(NP.GE.11) NPCO=8
+ IF(NP.GE.16) NPCO=9
+ IF(NP.GE.26) NPCO=10
+ NPIS(IKFIS,NPCO)=NPIS(IKFIS,NPCO)+1
+ MSTU(62)=NP
+
+C...Write statistics on initial parton state.
+ ELSEIF(MTABU.EQ.12) THEN
+ FAC=1D0/MAX(1,NEVIS)
+ WRITE(MSTU(11),5000) NEVIS
+ DO 170 I=1,NKFIS
+ KFMN=KFIS(I,1)
+ IF(KFMN.EQ.0) KFMN=KFIS(I,2)
+ KFM1=(KFMN+1)/2
+ IF(2*KFM1.EQ.KFMN) KFM1=-KFM1
+ CALL PYNAME(KFM1,CHAU)
+ CHIS(1)=CHAU(1:12)
+ IF(CHAU(13:13).NE.' ') CHIS(1)(12:12)='?'
+ KFMX=KFIS(I,2)
+ IF(KFIS(I,1).EQ.0) KFMX=0
+ KFM2=(KFMX+1)/2
+ IF(2*KFM2.EQ.KFMX) KFM2=-KFM2
+ CALL PYNAME(KFM2,CHAU)
+ CHIS(2)=CHAU(1:12)
+ IF(CHAU(13:13).NE.' ') CHIS(2)(12:12)='?'
+ WRITE(MSTU(11),5100) CHIS(1),CHIS(2),FAC*NPIS(I,0),
+ & (NPIS(I,J)/DBLE(NPIS(I,0)),J=1,10)
+ 170 CONTINUE
+
+C...Copy statistics on initial parton state into /PYJETS/.
+ ELSEIF(MTABU.EQ.13) THEN
+ FAC=1D0/MAX(1,NEVIS)
+ DO 190 I=1,NKFIS
+ KFMN=KFIS(I,1)
+ IF(KFMN.EQ.0) KFMN=KFIS(I,2)
+ KFM1=(KFMN+1)/2
+ IF(2*KFM1.EQ.KFMN) KFM1=-KFM1
+ KFMX=KFIS(I,2)
+ IF(KFIS(I,1).EQ.0) KFMX=0
+ KFM2=(KFMX+1)/2
+ IF(2*KFM2.EQ.KFMX) KFM2=-KFM2
+ K(I,1)=32
+ K(I,2)=99
+ K(I,3)=KFM1
+ K(I,4)=KFM2
+ K(I,5)=NPIS(I,0)
+ DO 180 J=1,5
+ P(I,J)=FAC*NPIS(I,J)
+ V(I,J)=FAC*NPIS(I,J+5)
+ 180 CONTINUE
+ 190 CONTINUE
+ N=NKFIS
+ DO 200 J=1,5
+ K(N+1,J)=0
+ P(N+1,J)=0D0
+ V(N+1,J)=0D0
+ 200 CONTINUE
+ K(N+1,1)=32
+ K(N+1,2)=99
+ K(N+1,5)=NEVIS
+ MSTU(3)=1
+
+C...Reset statistics on number of particles/partons.
+ ELSEIF(MTABU.EQ.20) THEN
+ NEVFS=0
+ NPRFS=0
+ NFIFS=0
+ NCHFS=0
+ NKFFS=0
+
+C...Identify whether particle/parton is primary or not.
+ ELSEIF(MTABU.EQ.21) THEN
+ NEVFS=NEVFS+1
+ MSTU(62)=0
+ DO 260 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.20.OR.K(I,1).EQ.13) GOTO 260
+ MSTU(62)=MSTU(62)+1
+ KC=PYCOMP(K(I,2))
+ MPRI=0
+ IF(K(I,3).LE.0.OR.K(I,3).GT.N) THEN
+ MPRI=1
+ ELSEIF(K(K(I,3),1).LE.0.OR.K(K(I,3),1).GT.20) THEN
+ MPRI=1
+ ELSEIF(K(K(I,3),2).GE.91.AND.K(K(I,3),2).LE.93) THEN
+ MPRI=1
+ ELSEIF(KC.EQ.0) THEN
+ ELSEIF(K(K(I,3),1).EQ.13) THEN
+ IM=K(K(I,3),3)
+ IF(IM.LE.0.OR.IM.GT.N) THEN
+ MPRI=1
+ ELSEIF(K(IM,1).LE.0.OR.K(IM,1).GT.20) THEN
+ MPRI=1
+ ENDIF
+ ELSEIF(KCHG(KC,2).EQ.0) THEN
+ KCM=PYCOMP(K(K(I,3),2))
+ IF(KCM.NE.0) THEN
+ IF(KCHG(KCM,2).NE.0) MPRI=1
+ ENDIF
+ ENDIF
+ IF(KC.NE.0.AND.MPRI.EQ.1) THEN
+ IF(KCHG(KC,2).EQ.0) NPRFS=NPRFS+1
+ ENDIF
+ IF(K(I,1).LE.10) THEN
+ NFIFS=NFIFS+1
+ IF(PYCHGE(K(I,2)).NE.0) NCHFS=NCHFS+1
+ ENDIF
+
+C...Fill statistics on number of particles/partons in event.
+ KFA=IABS(K(I,2))
+ KFS=3-ISIGN(1,K(I,2))-MPRI
+ DO 210 IP=1,NKFFS
+ IF(KFA.EQ.KFFS(IP)) THEN
+ IKFFS=-IP
+ GOTO 220
+ ELSEIF(KFA.LT.KFFS(IP)) THEN
+ IKFFS=IP
+ GOTO 220
+ ENDIF
+ 210 CONTINUE
+ IKFFS=NKFFS+1
+ 220 IF(IKFFS.LT.0) THEN
+ IKFFS=-IKFFS
+ ELSE
+ IF(NKFFS.GE.400) RETURN
+ DO 240 IP=NKFFS,IKFFS,-1
+ KFFS(IP+1)=KFFS(IP)
+ DO 230 J=1,4
+ NPFS(IP+1,J)=NPFS(IP,J)
+ 230 CONTINUE
+ 240 CONTINUE
+ NKFFS=NKFFS+1
+ KFFS(IKFFS)=KFA
+ DO 250 J=1,4
+ NPFS(IKFFS,J)=0
+ 250 CONTINUE
+ ENDIF
+ NPFS(IKFFS,KFS)=NPFS(IKFFS,KFS)+1
+ 260 CONTINUE
+
+C...Write statistics on particle/parton composition of events.
+ ELSEIF(MTABU.EQ.22) THEN
+ FAC=1D0/MAX(1,NEVFS)
+ WRITE(MSTU(11),5200) NEVFS,FAC*NPRFS,FAC*NFIFS,FAC*NCHFS
+ DO 270 I=1,NKFFS
+ CALL PYNAME(KFFS(I),CHAU)
+ KC=PYCOMP(KFFS(I))
+ MDCYF=0
+ IF(KC.NE.0) MDCYF=MDCY(KC,1)
+ WRITE(MSTU(11),5300) KFFS(I),CHAU,MDCYF,(FAC*NPFS(I,J),J=1,4),
+ & FAC*(NPFS(I,1)+NPFS(I,2)+NPFS(I,3)+NPFS(I,4))
+ 270 CONTINUE
+
+C...Copy particle/parton composition information into /PYJETS/.
+ ELSEIF(MTABU.EQ.23) THEN
+ FAC=1D0/MAX(1,NEVFS)
+ DO 290 I=1,NKFFS
+ K(I,1)=32
+ K(I,2)=99
+ K(I,3)=KFFS(I)
+ K(I,4)=0
+ K(I,5)=NPFS(I,1)+NPFS(I,2)+NPFS(I,3)+NPFS(I,4)
+ DO 280 J=1,4
+ P(I,J)=FAC*NPFS(I,J)
+ V(I,J)=0D0
+ 280 CONTINUE
+ P(I,5)=FAC*K(I,5)
+ V(I,5)=0D0
+ 290 CONTINUE
+ N=NKFFS
+ DO 300 J=1,5
+ K(N+1,J)=0
+ P(N+1,J)=0D0
+ V(N+1,J)=0D0
+ 300 CONTINUE
+ K(N+1,1)=32
+ K(N+1,2)=99
+ K(N+1,5)=NEVFS
+ P(N+1,1)=FAC*NPRFS
+ P(N+1,2)=FAC*NFIFS
+ P(N+1,3)=FAC*NCHFS
+ MSTU(3)=1
+
+C...Reset factorial moments statistics.
+ ELSEIF(MTABU.EQ.30) THEN
+ NEVFM=0
+ NMUFM=0
+ DO 330 IM=1,3
+ DO 320 IB=1,10
+ DO 310 IP=1,4
+ FM1FM(IM,IB,IP)=0D0
+ FM2FM(IM,IB,IP)=0D0
+ 310 CONTINUE
+ 320 CONTINUE
+ 330 CONTINUE
+
+C...Find particles to include, with (pion,pseudo)rapidity and azimuth.
+ ELSEIF(MTABU.EQ.31) THEN
+ NEVFM=NEVFM+1
+ NLOW=N+MSTU(3)
+ NUPP=NLOW
+ DO 410 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 410
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 410
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.
+ & PYCHGE(K(I,2)).EQ.0) GOTO 410
+ ENDIF
+ PMR=0D0
+ IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) PMR=PYMASS(211)
+ IF(MSTU(42).GE.2) PMR=P(I,5)
+ PR=MAX(1D-20,PMR**2+P(I,1)**2+P(I,2)**2)
+ YETA=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/SQRT(PR),
+ & 1D20)),P(I,3))
+ IF(ABS(YETA).GT.PARU(57)) GOTO 410
+ PHI=PYANGL(P(I,1),P(I,2))
+ IYETA=512D0*(YETA+PARU(57))/(2D0*PARU(57))
+ IYETA=MAX(0,MIN(511,IYETA))
+ IPHI=512D0*(PHI+PARU(1))/PARU(2)
+ IPHI=MAX(0,MIN(511,IPHI))
+ IYEP=0
+ DO 340 IB=0,9
+ IYEP=IYEP+4**IB*(2*MOD(IYETA/2**IB,2)+MOD(IPHI/2**IB,2))
+ 340 CONTINUE
+
+C...Order particles in (pseudo)rapidity and/or azimuth.
+ IF(NUPP.GT.MSTU(4)-5-MSTU(32)) THEN
+ CALL PYERRM(11,'(PYTABU:) no more memory left in PYJETS')
+ RETURN
+ ENDIF
+ NUPP=NUPP+1
+ IF(NUPP.EQ.NLOW+1) THEN
+ K(NUPP,1)=IYETA
+ K(NUPP,2)=IPHI
+ K(NUPP,3)=IYEP
+ ELSE
+ DO 350 I1=NUPP-1,NLOW+1,-1
+ IF(IYETA.GE.K(I1,1)) GOTO 360
+ K(I1+1,1)=K(I1,1)
+ 350 CONTINUE
+ 360 K(I1+1,1)=IYETA
+ DO 370 I1=NUPP-1,NLOW+1,-1
+ IF(IPHI.GE.K(I1,2)) GOTO 380
+ K(I1+1,2)=K(I1,2)
+ 370 CONTINUE
+ 380 K(I1+1,2)=IPHI
+ DO 390 I1=NUPP-1,NLOW+1,-1
+ IF(IYEP.GE.K(I1,3)) GOTO 400
+ K(I1+1,3)=K(I1,3)
+ 390 CONTINUE
+ 400 K(I1+1,3)=IYEP
+ ENDIF
+ 410 CONTINUE
+ K(NUPP+1,1)=2**10
+ K(NUPP+1,2)=2**10
+ K(NUPP+1,3)=4**10
+
+C...Calculate sum of factorial moments in event.
+ DO 480 IM=1,3
+ DO 430 IB=1,10
+ DO 420 IP=1,4
+ FEVFM(IB,IP)=0D0
+ 420 CONTINUE
+ 430 CONTINUE
+ DO 450 IB=1,10
+ IF(IM.LE.2) IBIN=2**(10-IB)
+ IF(IM.EQ.3) IBIN=4**(10-IB)
+ IAGR=K(NLOW+1,IM)/IBIN
+ NAGR=1
+ DO 440 I=NLOW+2,NUPP+1
+ ICUT=K(I,IM)/IBIN
+ IF(ICUT.EQ.IAGR) THEN
+ NAGR=NAGR+1
+ ELSE
+ IF(NAGR.EQ.1) THEN
+ ELSEIF(NAGR.EQ.2) THEN
+ FEVFM(IB,1)=FEVFM(IB,1)+2D0
+ ELSEIF(NAGR.EQ.3) THEN
+ FEVFM(IB,1)=FEVFM(IB,1)+6D0
+ FEVFM(IB,2)=FEVFM(IB,2)+6D0
+ ELSEIF(NAGR.EQ.4) THEN
+ FEVFM(IB,1)=FEVFM(IB,1)+12D0
+ FEVFM(IB,2)=FEVFM(IB,2)+24D0
+ FEVFM(IB,3)=FEVFM(IB,3)+24D0
+ ELSE
+ FEVFM(IB,1)=FEVFM(IB,1)+NAGR*(NAGR-1D0)
+ FEVFM(IB,2)=FEVFM(IB,2)+NAGR*(NAGR-1D0)*(NAGR-2D0)
+ FEVFM(IB,3)=FEVFM(IB,3)+NAGR*(NAGR-1D0)*(NAGR-2D0)*
+ & (NAGR-3D0)
+ FEVFM(IB,4)=FEVFM(IB,4)+NAGR*(NAGR-1D0)*(NAGR-2D0)*
+ & (NAGR-3D0)*(NAGR-4D0)
+ ENDIF
+ IAGR=ICUT
+ NAGR=1
+ ENDIF
+ 440 CONTINUE
+ 450 CONTINUE
+
+C...Add results to total statistics.
+ DO 470 IB=10,1,-1
+ DO 460 IP=1,4
+ IF(FEVFM(1,IP).LT.0.5D0) THEN
+ FEVFM(IB,IP)=0D0
+ ELSEIF(IM.LE.2) THEN
+ FEVFM(IB,IP)=2D0**((IB-1)*IP)*FEVFM(IB,IP)/FEVFM(1,IP)
+ ELSE
+ FEVFM(IB,IP)=4D0**((IB-1)*IP)*FEVFM(IB,IP)/FEVFM(1,IP)
+ ENDIF
+ FM1FM(IM,IB,IP)=FM1FM(IM,IB,IP)+FEVFM(IB,IP)
+ FM2FM(IM,IB,IP)=FM2FM(IM,IB,IP)+FEVFM(IB,IP)**2
+ 460 CONTINUE
+ 470 CONTINUE
+ 480 CONTINUE
+ NMUFM=NMUFM+(NUPP-NLOW)
+ MSTU(62)=NUPP-NLOW
+
+C...Write accumulated statistics on factorial moments.
+ ELSEIF(MTABU.EQ.32) THEN
+ FAC=1D0/MAX(1,NEVFM)
+ IF(MSTU(42).LE.0) WRITE(MSTU(11),5400) NEVFM,'eta'
+ IF(MSTU(42).EQ.1) WRITE(MSTU(11),5400) NEVFM,'ypi'
+ IF(MSTU(42).GE.2) WRITE(MSTU(11),5400) NEVFM,'y '
+ DO 510 IM=1,3
+ WRITE(MSTU(11),5500)
+ DO 500 IB=1,10
+ BYETA=2D0*PARU(57)
+ IF(IM.NE.2) BYETA=BYETA/2**(IB-1)
+ BPHI=PARU(2)
+ IF(IM.NE.1) BPHI=BPHI/2**(IB-1)
+ IF(IM.LE.2) BNAVE=FAC*NMUFM/DBLE(2**(IB-1))
+ IF(IM.EQ.3) BNAVE=FAC*NMUFM/DBLE(4**(IB-1))
+ DO 490 IP=1,4
+ FMOMA(IP)=FAC*FM1FM(IM,IB,IP)
+ FMOMS(IP)=SQRT(MAX(0D0,FAC*(FAC*FM2FM(IM,IB,IP)-
+ & FMOMA(IP)**2)))
+ 490 CONTINUE
+ WRITE(MSTU(11),5600) BYETA,BPHI,BNAVE,(FMOMA(IP),FMOMS(IP),
+ & IP=1,4)
+ 500 CONTINUE
+ 510 CONTINUE
+
+C...Copy statistics on factorial moments into /PYJETS/.
+ ELSEIF(MTABU.EQ.33) THEN
+ FAC=1D0/MAX(1,NEVFM)
+ DO 540 IM=1,3
+ DO 530 IB=1,10
+ I=10*(IM-1)+IB
+ K(I,1)=32
+ K(I,2)=99
+ K(I,3)=1
+ IF(IM.NE.2) K(I,3)=2**(IB-1)
+ K(I,4)=1
+ IF(IM.NE.1) K(I,4)=2**(IB-1)
+ K(I,5)=0
+ P(I,1)=2D0*PARU(57)/K(I,3)
+ V(I,1)=PARU(2)/K(I,4)
+ DO 520 IP=1,4
+ P(I,IP+1)=FAC*FM1FM(IM,IB,IP)
+ V(I,IP+1)=SQRT(MAX(0D0,FAC*(FAC*FM2FM(IM,IB,IP)-
+ & P(I,IP+1)**2)))
+ 520 CONTINUE
+ 530 CONTINUE
+ 540 CONTINUE
+ N=30
+ DO 550 J=1,5
+ K(N+1,J)=0
+ P(N+1,J)=0D0
+ V(N+1,J)=0D0
+ 550 CONTINUE
+ K(N+1,1)=32
+ K(N+1,2)=99
+ K(N+1,5)=NEVFM
+ MSTU(3)=1
+
+C...Reset statistics on Energy-Energy Correlation.
+ ELSEIF(MTABU.EQ.40) THEN
+ NEVEE=0
+ DO 560 J=1,25
+ FE1EC(J)=0D0
+ FE2EC(J)=0D0
+ FE1EC(51-J)=0D0
+ FE2EC(51-J)=0D0
+ FE1EA(J)=0D0
+ FE2EA(J)=0D0
+ 560 CONTINUE
+
+C...Find particles to include, with proper assumed mass.
+ ELSEIF(MTABU.EQ.41) THEN
+ NEVEE=NEVEE+1
+ NLOW=N+MSTU(3)
+ NUPP=NLOW
+ ECM=0D0
+ DO 570 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 570
+ IF(MSTU(41).GE.2) THEN
+ KC=PYCOMP(K(I,2))
+ IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
+ & KC.EQ.18) GOTO 570
+ IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.
+ & PYCHGE(K(I,2)).EQ.0) GOTO 570
+ ENDIF
+ PMR=0D0
+ IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) PMR=PYMASS(211)
+ IF(MSTU(42).GE.2) PMR=P(I,5)
+ IF(NUPP.GT.MSTU(4)-5-MSTU(32)) THEN
+ CALL PYERRM(11,'(PYTABU:) no more memory left in PYJETS')
+ RETURN
+ ENDIF
+ NUPP=NUPP+1
+ P(NUPP,1)=P(I,1)
+ P(NUPP,2)=P(I,2)
+ P(NUPP,3)=P(I,3)
+ P(NUPP,4)=SQRT(PMR**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
+ P(NUPP,5)=MAX(1D-10,SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2))
+ ECM=ECM+P(NUPP,4)
+ 570 CONTINUE
+ IF(NUPP.EQ.NLOW) RETURN
+
+C...Analyze Energy-Energy Correlation in event.
+ FAC=(2D0/ECM**2)*50D0/PARU(1)
+ DO 580 J=1,50
+ FEVEE(J)=0D0
+ 580 CONTINUE
+ DO 600 I1=NLOW+2,NUPP
+ DO 590 I2=NLOW+1,I1-1
+ CTHE=(P(I1,1)*P(I2,1)+P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/
+ & (P(I1,5)*P(I2,5))
+ THE=ACOS(MAX(-1D0,MIN(1D0,CTHE)))
+ ITHE=MAX(1,MIN(50,1+INT(50D0*THE/PARU(1))))
+ FEVEE(ITHE)=FEVEE(ITHE)+FAC*P(I1,4)*P(I2,4)
+ 590 CONTINUE
+ 600 CONTINUE
+ DO 610 J=1,25
+ FE1EC(J)=FE1EC(J)+FEVEE(J)
+ FE2EC(J)=FE2EC(J)+FEVEE(J)**2
+ FE1EC(51-J)=FE1EC(51-J)+FEVEE(51-J)
+ FE2EC(51-J)=FE2EC(51-J)+FEVEE(51-J)**2
+ FE1EA(J)=FE1EA(J)+(FEVEE(51-J)-FEVEE(J))
+ FE2EA(J)=FE2EA(J)+(FEVEE(51-J)-FEVEE(J))**2
+ 610 CONTINUE
+ MSTU(62)=NUPP-NLOW
+
+C...Write statistics on Energy-Energy Correlation.
+ ELSEIF(MTABU.EQ.42) THEN
+ FAC=1D0/MAX(1,NEVEE)
+ WRITE(MSTU(11),5700) NEVEE
+ DO 620 J=1,25
+ FEEC1=FAC*FE1EC(J)
+ FEES1=SQRT(MAX(0D0,FAC*(FAC*FE2EC(J)-FEEC1**2)))
+ FEEC2=FAC*FE1EC(51-J)
+ FEES2=SQRT(MAX(0D0,FAC*(FAC*FE2EC(51-J)-FEEC2**2)))
+ FEECA=FAC*FE1EA(J)
+ FEESA=SQRT(MAX(0D0,FAC*(FAC*FE2EA(J)-FEECA**2)))
+ WRITE(MSTU(11),5800) 3.6D0*(J-1),3.6D0*J,FEEC1,FEES1,
+ & FEEC2,FEES2,FEECA,FEESA
+ 620 CONTINUE
+
+C...Copy statistics on Energy-Energy Correlation into /PYJETS/.
+ ELSEIF(MTABU.EQ.43) THEN
+ FAC=1D0/MAX(1,NEVEE)
+ DO 630 I=1,25
+ K(I,1)=32
+ K(I,2)=99
+ K(I,3)=0
+ K(I,4)=0
+ K(I,5)=0
+ P(I,1)=FAC*FE1EC(I)
+ V(I,1)=SQRT(MAX(0D0,FAC*(FAC*FE2EC(I)-P(I,1)**2)))
+ P(I,2)=FAC*FE1EC(51-I)
+ V(I,2)=SQRT(MAX(0D0,FAC*(FAC*FE2EC(51-I)-P(I,2)**2)))
+ P(I,3)=FAC*FE1EA(I)
+ V(I,3)=SQRT(MAX(0D0,FAC*(FAC*FE2EA(I)-P(I,3)**2)))
+ P(I,4)=PARU(1)*(I-1)/50D0
+ P(I,5)=PARU(1)*I/50D0
+ V(I,4)=3.6D0*(I-1)
+ V(I,5)=3.6D0*I
+ 630 CONTINUE
+ N=25
+ DO 640 J=1,5
+ K(N+1,J)=0
+ P(N+1,J)=0D0
+ V(N+1,J)=0D0
+ 640 CONTINUE
+ K(N+1,1)=32
+ K(N+1,2)=99
+ K(N+1,5)=NEVEE
+ MSTU(3)=1
+
+C...Reset statistics on decay channels.
+ ELSEIF(MTABU.EQ.50) THEN
+ NEVDC=0
+ NKFDC=0
+ NREDC=0
+
+C...Identify and order flavour content of final state.
+ ELSEIF(MTABU.EQ.51) THEN
+ NEVDC=NEVDC+1
+ NDS=0
+ DO 670 I=1,N
+ IF(K(I,1).LE.0.OR.K(I,1).GE.6) GOTO 670
+ NDS=NDS+1
+ IF(NDS.GT.8) THEN
+ NREDC=NREDC+1
+ RETURN
+ ENDIF
+ KFM=2*IABS(K(I,2))
+ IF(K(I,2).LT.0) KFM=KFM-1
+ DO 650 IDS=NDS-1,1,-1
+ IIN=IDS+1
+ IF(KFM.LT.KFDM(IDS)) GOTO 660
+ KFDM(IDS+1)=KFDM(IDS)
+ 650 CONTINUE
+ IIN=1
+ 660 KFDM(IIN)=KFM
+ 670 CONTINUE
+
+C...Find whether old or new final state.
+ DO 690 IDC=1,NKFDC
+ IF(NDS.LT.KFDC(IDC,0)) THEN
+ IKFDC=IDC
+ GOTO 700
+ ELSEIF(NDS.EQ.KFDC(IDC,0)) THEN
+ DO 680 I=1,NDS
+ IF(KFDM(I).LT.KFDC(IDC,I)) THEN
+ IKFDC=IDC
+ GOTO 700
+ ELSEIF(KFDM(I).GT.KFDC(IDC,I)) THEN
+ GOTO 690
+ ENDIF
+ 680 CONTINUE
+ IKFDC=-IDC
+ GOTO 700
+ ENDIF
+ 690 CONTINUE
+ IKFDC=NKFDC+1
+ 700 IF(IKFDC.LT.0) THEN
+ IKFDC=-IKFDC
+ ELSEIF(NKFDC.GE.200) THEN
+ NREDC=NREDC+1
+ RETURN
+ ELSE
+ DO 720 IDC=NKFDC,IKFDC,-1
+ NPDC(IDC+1)=NPDC(IDC)
+ DO 710 I=0,8
+ KFDC(IDC+1,I)=KFDC(IDC,I)
+ 710 CONTINUE
+ 720 CONTINUE
+ NKFDC=NKFDC+1
+ KFDC(IKFDC,0)=NDS
+ DO 730 I=1,NDS
+ KFDC(IKFDC,I)=KFDM(I)
+ 730 CONTINUE
+ NPDC(IKFDC)=0
+ ENDIF
+ NPDC(IKFDC)=NPDC(IKFDC)+1
+
+C...Write statistics on decay channels.
+ ELSEIF(MTABU.EQ.52) THEN
+ FAC=1D0/MAX(1,NEVDC)
+ WRITE(MSTU(11),5900) NEVDC
+ DO 750 IDC=1,NKFDC
+ DO 740 I=1,KFDC(IDC,0)
+ KFM=KFDC(IDC,I)
+ KF=(KFM+1)/2
+ IF(2*KF.NE.KFM) KF=-KF
+ CALL PYNAME(KF,CHAU)
+ CHDC(I)=CHAU(1:12)
+ IF(CHAU(13:13).NE.' ') CHDC(I)(12:12)='?'
+ 740 CONTINUE
+ WRITE(MSTU(11),6000) FAC*NPDC(IDC),(CHDC(I),I=1,KFDC(IDC,0))
+ 750 CONTINUE
+ IF(NREDC.NE.0) WRITE(MSTU(11),6100) FAC*NREDC
+
+C...Copy statistics on decay channels into /PYJETS/.
+ ELSEIF(MTABU.EQ.53) THEN
+ FAC=1D0/MAX(1,NEVDC)
+ DO 780 IDC=1,NKFDC
+ K(IDC,1)=32
+ K(IDC,2)=99
+ K(IDC,3)=0
+ K(IDC,4)=0
+ K(IDC,5)=KFDC(IDC,0)
+ DO 760 J=1,5
+ P(IDC,J)=0D0
+ V(IDC,J)=0D0
+ 760 CONTINUE
+ DO 770 I=1,KFDC(IDC,0)
+ KFM=KFDC(IDC,I)
+ KF=(KFM+1)/2
+ IF(2*KF.NE.KFM) KF=-KF
+ IF(I.LE.5) P(IDC,I)=KF
+ IF(I.GE.6) V(IDC,I-5)=KF
+ 770 CONTINUE
+ V(IDC,5)=FAC*NPDC(IDC)
+ 780 CONTINUE
+ N=NKFDC
+ DO 790 J=1,5
+ K(N+1,J)=0
+ P(N+1,J)=0D0
+ V(N+1,J)=0D0
+ 790 CONTINUE
+ K(N+1,1)=32
+ K(N+1,2)=99
+ K(N+1,5)=NEVDC
+ V(N+1,5)=FAC*NREDC
+ MSTU(3)=1
+ ENDIF
+
+C...Format statements for output on unit MSTU(11) (default 6).
+ 5000 FORMAT(///20X,'Event statistics - initial state'/
+ &20X,'based on an analysis of ',I6,' events'//
+ &3X,'Main flavours after',8X,'Fraction',4X,'Subfractions ',
+ &'according to fragmenting system multiplicity'/
+ &4X,'hard interaction',24X,'1',7X,'2',7X,'3',7X,'4',7X,'5',
+ &6X,'6-7',5X,'8-10',3X,'11-15',3X,'16-25',4X,'>25'/)
+ 5100 FORMAT(3X,A12,1X,A12,F10.5,1X,10F8.4)
+ 5200 FORMAT(///20X,'Event statistics - final state'/
+ &20X,'based on an analysis of ',I7,' events'//
+ &5X,'Mean primary multiplicity =',F10.4/
+ &5X,'Mean final multiplicity =',F10.4/
+ &5X,'Mean charged multiplicity =',F10.4//
+ &5X,'Number of particles produced per event (directly and via ',
+ &'decays/branchings)'/
+ &8X,'KF Particle/jet MDCY',10X,'Particles',13X,'Antiparticles',
+ &8X,'Total'/35X,'prim seco prim seco'/)
+ 5300 FORMAT(1X,I9,4X,A16,I2,5(1X,F11.6))
+ 5400 FORMAT(///20X,'Factorial moments analysis of multiplicity'/
+ &20X,'based on an analysis of ',I6,' events'//
+ &3X,'delta-',A3,' delta-phi <n>/bin',10X,'<F2>',18X,'<F3>',
+ &18X,'<F4>',18X,'<F5>'/35X,4(' value error '))
+ 5500 FORMAT(10X)
+ 5600 FORMAT(2X,2F10.4,F12.4,4(F12.4,F10.4))
+ 5700 FORMAT(///20X,'Energy-Energy Correlation and Asymmetry'/
+ &20X,'based on an analysis of ',I6,' events'//
+ &2X,'theta range',8X,'EEC(theta)',8X,'EEC(180-theta)',7X,
+ &'EECA(theta)'/2X,'in degrees ',3(' value error')/)
+ 5800 FORMAT(2X,F4.1,' - ',F4.1,3(F11.4,F9.4))
+ 5900 FORMAT(///20X,'Decay channel analysis - final state'/
+ &20X,'based on an analysis of ',I6,' events'//
+ &2X,'Probability',10X,'Complete final state'/)
+ 6000 FORMAT(2X,F9.5,5X,8(A12,1X))
+ 6100 FORMAT(2X,F9.5,5X,'into other channels (more than 8 particles ',
+ &'or table overflow)')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYEEVT
+C...Handles the generation of an e+e- annihilation jet event.
+
+ SUBROUTINE PYEEVT(KFL,ECM)
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Check input parameters.
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IF(KFL.LT.0.OR.KFL.GT.8) THEN
+ CALL PYERRM(16,'(PYEEVT:) called with unknown flavour code')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(KFL.LE.5) ECMMIN=PARJ(127)+2.02D0*PARF(100+MAX(1,KFL))
+ IF(KFL.GE.6) ECMMIN=PARJ(127)+2.02D0*PMAS(KFL,1)
+ IF(ECM.LT.ECMMIN) THEN
+ CALL PYERRM(16,'(PYEEVT:) called with too small CM energy')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Check consistency of MSTJ options set.
+ IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN
+ CALL PYERRM(6,
+ & '(PYEEVT:) MSTJ(109) value requires MSTJ(110) = 1')
+ MSTJ(110)=1
+ ENDIF
+ IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN
+ CALL PYERRM(6,
+ & '(PYEEVT:) MSTJ(109) value requires MSTJ(111) = 0')
+ MSTJ(111)=0
+ ENDIF
+
+C...Initialize alpha_strong and total cross-section.
+ MSTU(111)=MSTJ(108)
+ IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
+ &MSTU(111)=1
+ PARU(112)=PARJ(121)
+ IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
+ IF(MSTJ(116).GT.0.AND.(MSTJ(116).GE.2.OR.ABS(ECM-PARJ(151)).GE.
+ &PARJ(139).OR.10*MSTJ(102)+KFL.NE.MSTJ(119))) CALL PYXTEE(KFL,ECM,
+ &XTOT)
+ IF(MSTJ(116).GE.3) MSTJ(116)=1
+ PARJ(171)=0D0
+
+C...Add initial e+e- to event record (documentation only).
+ NTRY=0
+ 100 NTRY=NTRY+1
+ IF(NTRY.GT.100) THEN
+ CALL PYERRM(14,'(PYEEVT:) caught in an infinite loop')
+ RETURN
+ ENDIF
+ MSTU(24)=0
+ NC=0
+ IF(MSTJ(115).GE.2) THEN
+ NC=NC+2
+ CALL PY1ENT(NC-1,11,0.5D0*ECM,0D0,0D0)
+ K(NC-1,1)=21
+ CALL PY1ENT(NC,-11,0.5D0*ECM,PARU(1),0D0)
+ K(NC,1)=21
+ ENDIF
+
+C...Radiative photon (in initial state).
+ MK=0
+ ECMC=ECM
+ IF(MSTJ(107).GE.1.AND.MSTJ(116).GE.1) CALL PYRADK(ECM,MK,PAK,
+ &THEK,PHIK,ALPK)
+ IF(MK.EQ.1) ECMC=SQRT(ECM*(ECM-2D0*PAK))
+ IF(MSTJ(115).GE.1.AND.MK.EQ.1) THEN
+ NC=NC+1
+ CALL PY1ENT(NC,22,PAK,THEK,PHIK)
+ K(NC,3)=MIN(MSTJ(115)/2,1)
+ ENDIF
+
+C...Virtual exchange boson (gamma or Z0).
+ IF(MSTJ(115).GE.3) THEN
+ NC=NC+1
+ KF=22
+ IF(MSTJ(102).EQ.2) KF=23
+ MSTU10=MSTU(10)
+ MSTU(10)=1
+ P(NC,5)=ECMC
+ CALL PY1ENT(NC,KF,ECMC,0D0,0D0)
+ K(NC,1)=21
+ K(NC,3)=1
+ MSTU(10)=MSTU10
+ ENDIF
+
+C...Choice of flavour and jet configuration.
+ CALL PYXKFL(KFL,ECM,ECMC,KFLC)
+ IF(KFLC.EQ.0) GOTO 100
+ CALL PYXJET(ECMC,NJET,CUT)
+ KFLN=21
+ IF(NJET.EQ.4) CALL PYX4JT(NJET,CUT,KFLC,ECMC,KFLN,X1,X2,X4,
+ &X12,X14)
+ IF(NJET.EQ.3) CALL PYX3JT(NJET,CUT,KFLC,ECMC,X1,X3)
+ IF(NJET.EQ.2) MSTJ(120)=1
+
+C...Fill jet configuration and origin.
+ IF(NJET.EQ.2.AND.MSTJ(101).NE.5) CALL PY2ENT(NC+1,KFLC,-KFLC,ECMC)
+ IF(NJET.EQ.2.AND.MSTJ(101).EQ.5) CALL PY2ENT(-(NC+1),KFLC,-KFLC,
+ &ECMC)
+ IF(NJET.EQ.3) CALL PY3ENT(NC+1,KFLC,21,-KFLC,ECMC,X1,X3)
+ IF(NJET.EQ.4.AND.KFLN.EQ.21) CALL PY4ENT(NC+1,KFLC,KFLN,KFLN,
+ &-KFLC,ECMC,X1,X2,X4,X12,X14)
+ IF(NJET.EQ.4.AND.KFLN.NE.21) CALL PY4ENT(NC+1,KFLC,-KFLN,KFLN,
+ &-KFLC,ECMC,X1,X2,X4,X12,X14)
+ IF(MSTU(24).NE.0) GOTO 100
+ DO 110 IP=NC+1,N
+ K(IP,3)=K(IP,3)+MIN(MSTJ(115)/2,1)+(MSTJ(115)/3)*(NC-1)
+ 110 CONTINUE
+
+C...Angular orientation according to matrix element.
+ IF(MSTJ(106).EQ.1) THEN
+ CALL PYXDIF(NC,NJET,KFLC,ECMC,CHI,THE,PHI)
+ CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
+ CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
+ ENDIF
+
+C...Rotation and boost from radiative photon.
+ IF(MK.EQ.1) THEN
+ DBEK=-PAK/(ECM-PAK)
+ NMIN=NC+1-MSTJ(115)/3
+ CALL PYROBO(NMIN,N,0D0,-PHIK,0D0,0D0,0D0)
+ CALL PYROBO(NMIN,N,ALPK,0D0,DBEK*SIN(THEK),0D0,DBEK*COS(THEK))
+ CALL PYROBO(NMIN,N,0D0,PHIK,0D0,0D0,0D0)
+ ENDIF
+
+C...Generate parton shower. Rearrange along strings and check.
+ IF(MSTJ(101).EQ.5) THEN
+ CALL PYSHOW(N-1,N,ECMC)
+ MSTJ14=MSTJ(14)
+ IF(MSTJ(105).EQ.-1) MSTJ(14)=-1
+ IF(MSTJ(105).GE.0) MSTU(28)=0
+ CALL PYPREP(0)
+ MSTJ(14)=MSTJ14
+ IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100
+ ENDIF
+
+C...Fragmentation/decay generation. Information for PYTABU.
+ IF(MSTJ(105).EQ.1) CALL PYEXEC
+ MSTU(161)=KFLC
+ MSTU(162)=-KFLC
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXTEE
+C...Calculates total cross-section, including initial state
+C...radiation effects.
+
+ SUBROUTINE PYXTEE(KFL,ECM,XTOT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+C...Status, (optimized) Q^2 scale, alpha_strong.
+ PARJ(151)=ECM
+ MSTJ(119)=10*MSTJ(102)+KFL
+ IF(MSTJ(111).EQ.0) THEN
+ Q2R=ECM**2
+ ELSEIF(MSTU(111).EQ.0) THEN
+ PARJ(168)=MIN(1D0,MAX(PARJ(128),EXP(-12D0*PARU(1)/
+ & ((33D0-2D0*MSTU(112))*PARU(111)))))
+ Q2R=PARJ(168)*ECM**2
+ ELSE
+ PARJ(168)=MIN(1D0,MAX(PARJ(128),PARU(112)/ECM,
+ & (2D0*PARU(112)/ECM)**2))
+ Q2R=PARJ(168)*ECM**2
+ ENDIF
+ ALSPI=PYALPS(Q2R)/PARU(1)
+
+C...QCD corrections factor in R.
+ IF(MSTJ(101).EQ.0.OR.MSTJ(109).EQ.1) THEN
+ RQCD=1D0
+ ELSEIF(IABS(MSTJ(101)).EQ.1.AND.MSTJ(109).EQ.0) THEN
+ RQCD=1D0+ALSPI
+ ELSEIF(MSTJ(109).EQ.0) THEN
+ RQCD=1D0+ALSPI+(1.986D0-0.115D0*MSTU(118))*ALSPI**2
+ IF(MSTJ(111).EQ.1) RQCD=MAX(1D0,RQCD+(33D0-2D0*MSTU(112))/12D0*
+ & LOG(PARJ(168))*ALSPI**2)
+ ELSEIF(IABS(MSTJ(101)).EQ.1) THEN
+ RQCD=1D0+(3D0/4D0)*ALSPI
+ ELSE
+ RQCD=1D0+(3D0/4D0)*ALSPI-(3D0/32D0+0.519D0*MSTU(118))*ALSPI**2
+ ENDIF
+
+C...Calculate Z0 width if default value not acceptable.
+ IF(MSTJ(102).GE.3) THEN
+ RVA=3D0*(3D0+(4D0*PARU(102)-1D0)**2)+6D0*RQCD*(2D0+
+ & (1D0-8D0*PARU(102)/3D0)**2+(4D0*PARU(102)/3D0-1D0)**2)
+ DO 100 KFLC=5,6
+ VQ=1D0
+ IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,1D0-
+ & (2D0*PYMASS(KFLC)/ ECM)**2))
+ IF(KFLC.EQ.5) VF=4D0*PARU(102)/3D0-1D0
+ IF(KFLC.EQ.6) VF=1D0-8D0*PARU(102)/3D0
+ RVA=RVA+3D0*RQCD*(0.5D0*VQ*(3D0-VQ**2)*VF**2+VQ**3)
+ 100 CONTINUE
+ PARJ(124)=PARU(101)*PARJ(123)*RVA/(48D0*PARU(102)*
+ & (1D0-PARU(102)))
+ ENDIF
+
+C...Calculate propagator and related constants for QFD case.
+ POLL=1D0-PARJ(131)*PARJ(132)
+ IF(MSTJ(102).GE.2) THEN
+ SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
+ SFW=ECM**4/((ECM**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
+ SFI=SFW*(1D0-(PARJ(123)/ECM)**2)
+ VE=4D0*PARU(102)-1D0
+ SF1I=SFF*(VE*POLL+PARJ(132)-PARJ(131))
+ SF1W=SFF**2*((VE**2+1D0)*POLL+2D0*VE*(PARJ(132)-PARJ(131)))
+ HF1I=SFI*SF1I
+ HF1W=SFW*SF1W
+ ENDIF
+
+C...Loop over different flavours: charge, velocity.
+ RTOT=0D0
+ RQQ=0D0
+ RQV=0D0
+ RVA=0D0
+ DO 110 KFLC=1,MAX(MSTJ(104),KFL)
+ IF(KFL.GT.0.AND.KFLC.NE.KFL) GOTO 110
+ MSTJ(93)=1
+ PMQ=PYMASS(KFLC)
+ IF(ECM.LT.2D0*PMQ+PARJ(127)) GOTO 110
+ QF=KCHG(KFLC,1)/3D0
+ VQ=1D0
+ IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(1D0-(2D0*PMQ/ECM)**2)
+
+C...Calculate R and sum of charges for QED or QFD case.
+ RQQ=RQQ+3D0*QF**2*POLL
+ IF(MSTJ(102).LE.1) THEN
+ RTOT=RTOT+3D0*0.5D0*VQ*(3D0-VQ**2)*QF**2*POLL
+ ELSE
+ VF=SIGN(1D0,QF)-4D0*QF*PARU(102)
+ RQV=RQV-6D0*QF*VF*SF1I
+ RVA=RVA+3D0*(VF**2+1D0)*SF1W
+ RTOT=RTOT+3D0*(0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-
+ & 2D0*QF*VF*HF1I+VF**2*HF1W)+VQ**3*HF1W)
+ ENDIF
+ 110 CONTINUE
+ RSUM=RQQ
+ IF(MSTJ(102).GE.2) RSUM=RQQ+SFI*RQV+SFW*RVA
+
+C...Calculate cross-section, including QCD corrections.
+ PARJ(141)=RQQ
+ PARJ(142)=RTOT
+ PARJ(143)=RTOT*RQCD
+ PARJ(144)=PARJ(143)
+ PARJ(145)=PARJ(141)*86.8D0/ECM**2
+ PARJ(146)=PARJ(142)*86.8D0/ECM**2
+ PARJ(147)=PARJ(143)*86.8D0/ECM**2
+ PARJ(148)=PARJ(147)
+ PARJ(157)=RSUM*RQCD
+ PARJ(158)=0D0
+ PARJ(159)=0D0
+ XTOT=PARJ(147)
+ IF(MSTJ(107).LE.0) RETURN
+
+C...Virtual cross-section.
+ XKL=PARJ(135)
+ XKU=MIN(PARJ(136),1D0-(2D0*PARJ(127)/ECM)**2)
+ ALE=2D0*LOG(ECM/PYMASS(11))-1D0
+ SIGV=ALE/3D0+2D0*LOG(ECM**2/(PYMASS(13)*PYMASS(15)))/3D0-4D0/3D0+
+ &1.526D0*LOG(ECM**2/0.932D0)
+
+C...Soft and hard radiative cross-section in QED case.
+ IF(MSTJ(102).LE.1) THEN
+ SIGV=1.5D0*ALE-0.5D0+PARU(1)**2/3D0+2D0*SIGV
+ SIGS=ALE*(2D0*LOG(XKL)-LOG(1D0-XKL)-XKL)
+ SIGH=ALE*(2D0*LOG(XKU/XKL)-LOG((1D0-XKU)/(1D0-XKL))-(XKU-XKL))
+
+C...Soft and hard radiative cross-section in QFD case.
+ ELSE
+ SZM=1D0-(PARJ(123)/ECM)**2
+ SZW=PARJ(123)*PARJ(124)/ECM**2
+ PARJ(161)=-RQQ/RSUM
+ PARJ(162)=-(RQQ+RQV+RVA)/RSUM
+ PARJ(163)=(RQV*(1D0-0.5D0*SZM-SFI)+RVA*(1.5D0-SZM-SFW))/RSUM
+ PARJ(164)=(RQV*SZW**2*(1D0-2D0*SFW)+RVA*(2D0*SFI+SZW**2-
+ & 4D0+3D0*SZM-SZM**2))/(SZW*RSUM)
+ SIGV=1.5D0*ALE-0.5D0+PARU(1)**2/3D0+((2D0*RQQ+SFI*RQV)/
+ & RSUM)*SIGV+(SZW*SFW*RQV/RSUM)*PARU(1)*20D0/9D0
+ SIGS=ALE*(2D0*LOG(XKL)+PARJ(161)*LOG(1D0-XKL)+PARJ(162)*XKL+
+ & PARJ(163)*LOG(((XKL-SZM)**2+SZW**2)/(SZM**2+SZW**2))+
+ & PARJ(164)*(ATAN((XKL-SZM)/SZW)-ATAN(-SZM/SZW)))
+ SIGH=ALE*(2D0*LOG(XKU/XKL)+PARJ(161)*LOG((1D0-XKU)/
+ & (1D0-XKL))+PARJ(162)*(XKU-XKL)+PARJ(163)*
+ & LOG(((XKU-SZM)**2+SZW**2)/((XKL-SZM)**2+SZW**2))+
+ & PARJ(164)*(ATAN((XKU-SZM)/SZW)-ATAN((XKL-SZM)/SZW)))
+ ENDIF
+
+C...Total cross-section and fraction of hard photon events.
+ PARJ(160)=SIGH/(PARU(1)/PARU(101)+SIGV+SIGS+SIGH)
+ PARJ(157)=RSUM*(1D0+(PARU(101)/PARU(1))*(SIGV+SIGS+SIGH))*RQCD
+ PARJ(144)=PARJ(157)
+ PARJ(148)=PARJ(144)*86.8D0/ECM**2
+ XTOT=PARJ(148)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYRADK
+C...Generates initial state photon radiation.
+
+ SUBROUTINE PYRADK(ECM,MK,PAK,THEK,PHIK,ALPK)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+
+C...Function: cumulative hard photon spectrum in QFD case.
+ FXK(XX)=2D0*LOG(XX)+PARJ(161)*LOG(1D0-XX)+PARJ(162)*XX+
+ &PARJ(163)*LOG((XX-SZM)**2+SZW**2)+PARJ(164)*ATAN((XX-SZM)/SZW)
+
+C...Determine whether radiative photon or not.
+ MK=0
+ PAK=0D0
+ IF(PARJ(160).LT.PYR(0)) RETURN
+ MK=1
+
+C...Photon energy range. Find photon momentum in QED case.
+ XKL=PARJ(135)
+ XKU=MIN(PARJ(136),1D0-(2D0*PARJ(127)/ECM)**2)
+ IF(MSTJ(102).LE.1) THEN
+ 100 XK=1D0/(1D0+(1D0/XKL-1D0)*((1D0/XKU-1D0)/(1D0/XKL-1D0))**PYR(0))
+ IF(1D0+(1D0-XK)**2.LT.2D0*PYR(0)) GOTO 100
+
+C...Ditto in QFD case, by numerical inversion of integrated spectrum.
+ ELSE
+ SZM=1D0-(PARJ(123)/ECM)**2
+ SZW=PARJ(123)*PARJ(124)/ECM**2
+ FXKL=FXK(XKL)
+ FXKU=FXK(XKU)
+ FXKD=1D-4*(FXKU-FXKL)
+ FXKR=FXKL+PYR(0)*(FXKU-FXKL)
+ NXK=0
+ 110 NXK=NXK+1
+ XK=0.5D0*(XKL+XKU)
+ FXKV=FXK(XK)
+ IF(FXKV.GT.FXKR) THEN
+ XKU=XK
+ FXKU=FXKV
+ ELSE
+ XKL=XK
+ FXKL=FXKV
+ ENDIF
+ IF(NXK.LT.15.AND.FXKU-FXKL.GT.FXKD) GOTO 110
+ XK=XKL+(XKU-XKL)*(FXKR-FXKL)/(FXKU-FXKL)
+ ENDIF
+ PAK=0.5D0*ECM*XK
+
+C...Photon polar and azimuthal angle.
+ PME=2D0*(PYMASS(11)/ECM)**2
+ 120 CTHM=PME*(2D0/PME)**PYR(0)
+ IF(1D0-(XK**2*CTHM*(1D0-0.5D0*CTHM)+2D0*(1D0-XK)*PME/MAX(PME,
+ &CTHM*(1D0-0.5D0*CTHM)))/(1D0+(1D0-XK)**2).LT.PYR(0)) GOTO 120
+ CTHE=1D0-CTHM
+ IF(PYR(0).GT.0.5D0) CTHE=-CTHE
+ STHE=SQRT(MAX(0D0,(CTHM-PME)*(2D0-CTHM)))
+ THEK=PYANGL(CTHE,STHE)
+ PHIK=PARU(2)*PYR(0)
+
+C...Rotation angle for hadronic system.
+ SGN=1D0
+ IF(0.5D0*(2D0-XK*(1D0-CTHE))**2/((2D0-XK)**2+(XK*CTHE)**2).GT.
+ &PYR(0)) SGN=-1D0
+ ALPK=ASIN(SGN*STHE*(XK-SGN*(2D0*SQRT(1D0-XK)-2D0+XK)*CTHE)/
+ &(2D0-XK*(1D0-SGN*CTHE)))
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXKFL
+C...Selects flavour for produced qqbar pair.
+
+ SUBROUTINE PYXKFL(KFL,ECM,ECMC,KFLC)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYDAT1/,/PYDAT2/
+
+C...Calculate maximum weight in QED or QFD case.
+ IF(MSTJ(102).LE.1) THEN
+ RFMAX=4D0/9D0
+ ELSE
+ POLL=1D0-PARJ(131)*PARJ(132)
+ SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
+ SFW=ECMC**4/((ECMC**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
+ SFI=SFW*(1D0-(PARJ(123)/ECMC)**2)
+ VE=4D0*PARU(102)-1D0
+ HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))
+ HF1W=SFW*SFF**2*((VE**2+1D0)*POLL+2D0*VE*(PARJ(132)-PARJ(131)))
+ RFMAX=MAX(4D0/9D0*POLL-4D0/3D0*(1D0-8D0*PARU(102)/3D0)*HF1I+
+ & ((1D0-8D0*PARU(102)/3D0)**2+1D0)*HF1W,1D0/9D0*POLL+2D0/3D0*
+ & (-1D0+4D0*PARU(102)/3D0)*HF1I+((-1D0+4D0*PARU(102)/3D0)**2+
+ & 1D0)*HF1W)
+ ENDIF
+
+C...Choose flavour. Gives charge and velocity.
+ NTRY=0
+ 100 NTRY=NTRY+1
+ IF(NTRY.GT.100) THEN
+ CALL PYERRM(14,'(PYXKFL:) caught in an infinite loop')
+ KFLC=0
+ RETURN
+ ENDIF
+ KFLC=KFL
+ IF(KFL.LE.0) KFLC=1+INT(MSTJ(104)*PYR(0))
+ MSTJ(93)=1
+ PMQ=PYMASS(KFLC)
+ IF(ECM.LT.2D0*PMQ+PARJ(127)) GOTO 100
+ QF=KCHG(KFLC,1)/3D0
+ VQ=1D0
+ IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,1D0-(2D0*PMQ/ECMC)**2))
+
+C...Calculate weight in QED or QFD case.
+ IF(MSTJ(102).LE.1) THEN
+ RF=QF**2
+ RFV=0.5D0*VQ*(3D0-VQ**2)*QF**2
+ ELSE
+ VF=SIGN(1D0,QF)-4D0*QF*PARU(102)
+ RF=QF**2*POLL-2D0*QF*VF*HF1I+(VF**2+1D0)*HF1W
+ RFV=0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-2D0*QF*VF*HF1I+VF**2*HF1W)+
+ & VQ**3*HF1W
+ IF(RFV.GT.0D0) PARJ(171)=MIN(1D0,VQ**3*HF1W/RFV)
+ ENDIF
+
+C...Weighting or new event (radiative photon). Cross-section update.
+ IF(KFL.LE.0.AND.RF.LT.PYR(0)*RFMAX) GOTO 100
+ PARJ(158)=PARJ(158)+1D0
+ IF(ECMC.LT.2D0*PMQ+PARJ(127).OR.RFV.LT.PYR(0)*RF) KFLC=0
+ IF(MSTJ(107).LE.0.AND.KFLC.EQ.0) GOTO 100
+ IF(KFLC.NE.0) PARJ(159)=PARJ(159)+1D0
+ PARJ(144)=PARJ(157)*PARJ(159)/PARJ(158)
+ PARJ(148)=PARJ(144)*86.8D0/ECM**2
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXJET
+C...Selects number of jets in matrix element approach.
+
+ SUBROUTINE PYXJET(ECM,NJET,CUT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+C...Local array and data.
+ DIMENSION ZHUT(5)
+ DATA ZHUT/3.0922D0, 6.2291D0, 7.4782D0, 7.8440D0, 8.2560D0/
+
+C...Trivial result for two-jets only, including parton shower.
+ IF(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.5) THEN
+ CUT=0D0
+
+C...QCD and Abelian vector gluon theory: Q^2 for jet rate and R.
+ ELSEIF(MSTJ(109).EQ.0.OR.MSTJ(109).EQ.2) THEN
+ CF=4D0/3D0
+ IF(MSTJ(109).EQ.2) CF=1D0
+ IF(MSTJ(111).EQ.0) THEN
+ Q2=ECM**2
+ Q2R=ECM**2
+ ELSEIF(MSTU(111).EQ.0) THEN
+ PARJ(169)=MIN(1D0,PARJ(129))
+ Q2=PARJ(169)*ECM**2
+ PARJ(168)=MIN(1D0,MAX(PARJ(128),EXP(-12D0*PARU(1)/
+ & ((33D0-2D0*MSTU(112))*PARU(111)))))
+ Q2R=PARJ(168)*ECM**2
+ ELSE
+ PARJ(169)=MIN(1D0,MAX(PARJ(129),(2D0*PARU(112)/ECM)**2))
+ Q2=PARJ(169)*ECM**2
+ PARJ(168)=MIN(1D0,MAX(PARJ(128),PARU(112)/ECM,
+ & (2D0*PARU(112)/ECM)**2))
+ Q2R=PARJ(168)*ECM**2
+ ENDIF
+
+C...alpha_strong for R and R itself.
+ ALSPI=(3D0/4D0)*CF*PYALPS(Q2R)/PARU(1)
+ IF(IABS(MSTJ(101)).EQ.1) THEN
+ RQCD=1D0+ALSPI
+ ELSEIF(MSTJ(109).EQ.0) THEN
+ RQCD=1D0+ALSPI+(1.986D0-0.115D0*MSTU(118))*ALSPI**2
+ IF(MSTJ(111).EQ.1) RQCD=MAX(1D0,RQCD+
+ & (33D0-2D0*MSTU(112))/12D0*LOG(PARJ(168))*ALSPI**2)
+ ELSE
+ RQCD=1D0+ALSPI-(3D0/32D0+0.519D0*MSTU(118))*(4D0*ALSPI/3D0)**2
+ ENDIF
+
+C...alpha_strong for jet rate. Initial value for y cut.
+ ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
+ CUT=MAX(0.001D0,PARJ(125),(PARJ(126)/ECM)**2)
+ IF(IABS(MSTJ(101)).LE.1.OR.(MSTJ(109).EQ.0.AND.MSTJ(111).EQ.0))
+ & CUT=MAX(CUT,EXP(-SQRT(0.75D0/ALSPI))/2D0)
+ IF(MSTJ(110).EQ.2) CUT=MAX(0.01D0,MIN(0.05D0,CUT))
+
+C...Parametrization of first order three-jet cross-section.
+ 100 IF(MSTJ(101).EQ.0.OR.CUT.GE.0.25D0) THEN
+ PARJ(152)=0D0
+ ELSE
+ PARJ(152)=(2D0*ALSPI/3D0)*((3D0-6D0*CUT+2D0*LOG(CUT))*
+ & LOG(CUT/(1D0-2D0*CUT))+(2.5D0+1.5D0*CUT-6.571D0)*
+ & (1D0-3D0*CUT)+5.833D0*(1D0-3D0*CUT)**2-3.894D0*
+ & (1D0-3D0*CUT)**3+1.342D0*(1D0-3D0*CUT)**4)/RQCD
+ IF(MSTJ(109).EQ.2.AND.(MSTJ(101).EQ.2.OR.MSTJ(101).LE.-2))
+ & PARJ(152)=0D0
+ ENDIF
+
+C...Parametrization of second order three-jet cross-section.
+ IF(IABS(MSTJ(101)).LE.1.OR.MSTJ(101).EQ.3.OR.MSTJ(109).EQ.2.OR.
+ & CUT.GE.0.25D0) THEN
+ PARJ(153)=0D0
+ ELSEIF(MSTJ(110).LE.1) THEN
+ CT=LOG(1D0/CUT-2D0)
+ PARJ(153)=ALSPI**2*CT**2*(2.419D0+0.5989D0*CT+0.6782D0*CT**2-
+ & 0.2661D0*CT**3+0.01159D0*CT**4)/RQCD
+
+C...Interpolation in second/first order ratio for Zhu parametrization.
+ ELSEIF(MSTJ(110).EQ.2) THEN
+ IZA=0
+ DO 110 IY=1,5
+ IF(ABS(CUT-0.01D0*IY).LT.0.0001D0) IZA=IY
+ 110 CONTINUE
+ IF(IZA.NE.0) THEN
+ ZHURAT=ZHUT(IZA)
+ ELSE
+ IZ=100D0*CUT
+ ZHURAT=ZHUT(IZ)+(100D0*CUT-IZ)*(ZHUT(IZ+1)-ZHUT(IZ))
+ ENDIF
+ PARJ(153)=ALSPI*PARJ(152)*ZHURAT
+ ENDIF
+
+C...Shift in second order three-jet cross-section with optimized Q^2.
+ IF(MSTJ(111).EQ.1.AND.IABS(MSTJ(101)).GE.2.AND.MSTJ(101).NE.3
+ & .AND.CUT.LT.0.25D0) PARJ(153)=PARJ(153)+
+ & (33D0-2D0*MSTU(112))/12D0*LOG(PARJ(169))*ALSPI*PARJ(152)
+
+C...Parametrization of second order four-jet cross-section.
+ IF(IABS(MSTJ(101)).LE.1.OR.CUT.GE.0.125D0) THEN
+ PARJ(154)=0D0
+ ELSE
+ CT=LOG(1D0/CUT-5D0)
+ IF(CUT.LE.0.018D0) THEN
+ XQQGG=6.349D0-4.330D0*CT+0.8304D0*CT**2
+ IF(MSTJ(109).EQ.2) XQQGG=(4D0/3D0)**2*(3.035D0-2.091D0*CT+
+ & 0.4059D0*CT**2)
+ XQQQQ=1.25D0*(-0.1080D0+0.01486D0*CT+0.009364D0*CT**2)
+ IF(MSTJ(109).EQ.2) XQQQQ=8D0*XQQQQ
+ ELSE
+ XQQGG=-0.09773D0+0.2959D0*CT-0.2764D0*CT**2+0.08832D0*CT**3
+ IF(MSTJ(109).EQ.2) XQQGG=(4D0/3D0)**2*(-0.04079D0+
+ & 0.1340D0*CT-0.1326D0*CT**2+0.04365D0*CT**3)
+ XQQQQ=1.25D0*(0.003661D0-0.004888D0*CT-0.001081D0*CT**2+
+ & 0.002093D0*CT**3)
+ IF(MSTJ(109).EQ.2) XQQQQ=8D0*XQQQQ
+ ENDIF
+ PARJ(154)=ALSPI**2*CT**2*(XQQGG+XQQQQ)/RQCD
+ PARJ(155)=XQQQQ/(XQQGG+XQQQQ)
+ ENDIF
+
+C...If negative three-jet rate, change y' optimization parameter.
+ IF(MSTJ(111).EQ.1.AND.PARJ(152)+PARJ(153).LT.0D0.AND.
+ & PARJ(169).LT.0.99D0) THEN
+ PARJ(169)=MIN(1D0,1.2D0*PARJ(169))
+ Q2=PARJ(169)*ECM**2
+ ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
+ GOTO 100
+ ENDIF
+
+C...If too high cross-section, use harder cuts, or fail.
+ IF(PARJ(152)+PARJ(153)+PARJ(154).GE.1) THEN
+ IF(MSTJ(110).EQ.2.AND.CUT.GT.0.0499D0.AND.MSTJ(111).EQ.1.AND.
+ & PARJ(169).LT.0.99D0) THEN
+ PARJ(169)=MIN(1D0,1.2D0*PARJ(169))
+ Q2=PARJ(169)*ECM**2
+ ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
+ GOTO 100
+ ELSEIF(MSTJ(110).EQ.2.AND.CUT.GT.0.0499D0) THEN
+ CALL PYERRM(26,
+ & '(PYXJET:) no allowed y cut value for Zhu parametrization')
+ ENDIF
+ CUT=0.26D0*(4D0*CUT)**(PARJ(152)+PARJ(153)+
+ & PARJ(154))**(-1D0/3D0)
+ IF(MSTJ(110).EQ.2) CUT=MAX(0.01D0,MIN(0.05D0,CUT))
+ GOTO 100
+ ENDIF
+
+C...Scalar gluon (first order only).
+ ELSE
+ ALSPI=PYALPS(ECM**2)/PARU(1)
+ CUT=MAX(0.001D0,PARJ(125),(PARJ(126)/ECM)**2,EXP(-3D0/ALSPI))
+ PARJ(152)=0D0
+ IF(CUT.LT.0.25D0) PARJ(152)=(ALSPI/3D0)*((1D0-2D0*CUT)*
+ & LOG((1D0-2D0*CUT)/CUT)+0.5D0*(9D0*CUT**2-1D0))
+ PARJ(153)=0D0
+ PARJ(154)=0D0
+ ENDIF
+
+C...Select number of jets.
+ PARJ(150)=CUT
+ IF(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.5) THEN
+ NJET=2
+ ELSEIF(MSTJ(101).LE.0) THEN
+ NJET=MIN(4,2-MSTJ(101))
+ ELSE
+ RNJ=PYR(0)
+ NJET=2
+ IF(PARJ(152)+PARJ(153)+PARJ(154).GT.RNJ) NJET=3
+ IF(PARJ(154).GT.RNJ) NJET=4
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYX3JT
+C...Selects the kinematical variables of three-jet events.
+
+ SUBROUTINE PYX3JT(NJET,CUT,KFL,ECM,X1,X2)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+C...Local array.
+ DIMENSION ZHUP(5,12)
+
+C...Coefficients of Zhu second order parametrization.
+ DATA ((ZHUP(IC1,IC2),IC2=1,12),IC1=1,5)/
+ &18.29D0, 89.56D0, 4.541D0, -52.09D0, -109.8D0, 24.90D0,
+ &11.63D0, 3.683D0, 17.50D0,0.002440D0, -1.362D0,-0.3537D0,
+ &11.42D0, 6.299D0, -22.55D0, -8.915D0, 59.25D0, -5.855D0,
+ &-32.85D0, -1.054D0, -16.90D0,0.006489D0,-0.8156D0,0.01095D0,
+ &7.847D0, -3.964D0, -35.83D0, 1.178D0, 29.39D0, 0.2806D0,
+ &47.82D0, -12.36D0, -56.72D0, 0.04054D0,-0.4365D0, 0.6062D0,
+ &5.441D0, -56.89D0, -50.27D0, 15.13D0, 114.3D0, -18.19D0,
+ &97.05D0, -1.890D0, -139.9D0, 0.08153D0,-0.4984D0, 0.9439D0,
+ &-17.65D0, 51.44D0, -58.32D0, 70.95D0, -255.7D0, -78.99D0,
+ &476.9D0, 29.65D0, -239.3D0, 0.4745D0, -1.174D0, 6.081D0/
+
+C...Dilogarithm of x for x<0.5 (x>0.5 obtained by analytic trick).
+ DILOG(X)=X+X**2/4D0+X**3/9D0+X**4/16D0+X**5/25D0+X**6/36D0+
+ &X**7/49D0
+
+C...Event type. Mass effect factors and other common constants.
+ MSTJ(120)=2
+ MSTJ(121)=0
+ PMQ=PYMASS(KFL)
+ QME=(2D0*PMQ/ECM)**2
+ IF(MSTJ(109).NE.1) THEN
+ CUTL=LOG(CUT)
+ CUTD=LOG(1D0/CUT-2D0)
+ IF(MSTJ(109).EQ.0) THEN
+ CF=4D0/3D0
+ CN=3D0
+ TR=2D0
+ WTMX=MIN(20D0,37D0-6D0*CUTD)
+ IF(MSTJ(110).EQ.2) WTMX=2D0*(7.5D0+80D0*CUT)
+ ELSE
+ CF=1D0
+ CN=0D0
+ TR=12D0
+ WTMX=0D0
+ ENDIF
+
+C...Alpha_strong and effects of optimized Q^2 scale. Maximum weight.
+ ALS2PI=PARU(118)/PARU(2)
+ WTOPT=0D0
+ IF(MSTJ(111).EQ.1) WTOPT=(33D0-2D0*MSTU(112))/6D0*
+ & LOG(PARJ(169))*ALS2PI
+ WTMAX=MAX(0D0,1D0+WTOPT+ALS2PI*WTMX)
+
+C...Choose three-jet events in allowed region.
+ 100 NJET=3
+ 110 Y13L=CUTL+CUTD*PYR(0)
+ Y23L=CUTL+CUTD*PYR(0)
+ Y13=EXP(Y13L)
+ Y23=EXP(Y23L)
+ Y12=1D0-Y13-Y23
+ IF(Y12.LE.CUT) GOTO 110
+ IF(Y13**2+Y23**2+2D0*Y12.LE.2D0*PYR(0)) GOTO 110
+
+C...Second order corrections.
+ IF(MSTJ(101).EQ.2.AND.MSTJ(110).LE.1) THEN
+ Y12L=LOG(Y12)
+ Y13M=LOG(1D0-Y13)
+ Y23M=LOG(1D0-Y23)
+ Y12M=LOG(1D0-Y12)
+ IF(Y13.LE.0.5D0) Y13I=DILOG(Y13)
+ IF(Y13.GE.0.5D0) Y13I=1.644934D0-Y13L*Y13M-DILOG(1D0-Y13)
+ IF(Y23.LE.0.5D0) Y23I=DILOG(Y23)
+ IF(Y23.GE.0.5D0) Y23I=1.644934D0-Y23L*Y23M-DILOG(1D0-Y23)
+ IF(Y12.LE.0.5D0) Y12I=DILOG(Y12)
+ IF(Y12.GE.0.5D0) Y12I=1.644934D0-Y12L*Y12M-DILOG(1D0-Y12)
+ WT1=(Y13**2+Y23**2+2D0*Y12)/(Y13*Y23)
+ WT2=CF*(-2D0*(CUTL-Y12L)**2-3D0*CUTL-1D0+3.289868D0+
+ & 2D0*(2D0*CUTL-Y12L)*CUT/Y12)+
+ & CN*((CUTL-Y12L)**2-(CUTL-Y13L)**2-(CUTL-Y23L)**2-
+ & 11D0*CUTL/6D0+67D0/18D0+1.644934D0-(2D0*CUTL-Y12L)*CUT/Y12+
+ & (2D0*CUTL-Y13L)*CUT/Y13+(2D0*CUTL-Y23L)*CUT/Y23)+
+ & TR*(2D0*CUTL/3D0-10D0/9D0)+
+ & CF*(Y12/(Y12+Y13)+Y12/(Y12+Y23)+(Y12+Y23)/Y13+(Y12+Y13)/Y23+
+ & Y13L*(4D0*Y12**2+2D0*Y12*Y13+4D0*Y12*Y23+Y13*Y23)/
+ & (Y12+Y23)**2+Y23L*(4D0*Y12**2+2D0*Y12*Y23+4D0*Y12*Y13+
+ & Y13*Y23)/(Y12+Y13)**2)/WT1+
+ & CN*(Y13L*Y13/(Y12+Y23)+Y23L*Y23/(Y12+Y13))/WT1+(CN-2D0*CF)*
+ & ((Y12**2+(Y12+Y13)**2)*(Y12L*Y23L-Y12L*Y12M-Y23L*
+ & Y23M+1.644934D0-Y12I-Y23I)/(Y13*Y23)+(Y12**2+(Y12+Y23)**2)*
+ & (Y12L*Y13L-Y12L*Y12M-Y13L*Y13M+1.644934D0-Y12I-Y13I)/
+ & (Y13*Y23)+(Y13**2+Y23**2)/(Y13*Y23*(Y13+Y23))-
+ & 2D0*Y12L*Y12**2/(Y13+Y23)**2-4D0*Y12L*Y12/(Y13+Y23))/WT1-
+ & CN*(Y13L*Y23L-Y13L*Y13M-Y23L*Y23M+1.644934D0-Y13I-Y23I)
+ IF(1D0+WTOPT+ALS2PI*WT2.LE.0D0) MSTJ(121)=1
+ IF(1D0+WTOPT+ALS2PI*WT2.LE.WTMAX*PYR(0)) GOTO 110
+ PARJ(156)=(WTOPT+ALS2PI*WT2)/(1D0+WTOPT+ALS2PI*WT2)
+
+ ELSEIF(MSTJ(101).EQ.2.AND.MSTJ(110).EQ.2) THEN
+C...Second order corrections; Zhu parametrization of ERT.
+ ZX=(Y23-Y13)**2
+ ZY=1D0-Y12
+ IZA=0
+ DO 120 IY=1,5
+ IF(ABS(CUT-0.01D0*IY).LT.0.0001D0) IZA=IY
+ 120 CONTINUE
+ IF(IZA.NE.0) THEN
+ IZ=IZA
+ WT2=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
+ & ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
+ & (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
+ & ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
+ ELSE
+ IZ=100D0*CUT
+ WTL=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
+ & ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
+ & (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
+ & ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
+ IZ=IZ+1
+ WTU=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
+ & ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
+ & (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
+ & ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
+ WT2=WTL+(WTU-WTL)*(100D0*CUT+1D0-IZ)
+ ENDIF
+ IF(1D0+WTOPT+2D0*ALS2PI*WT2.LE.0D0) MSTJ(121)=1
+ IF(1D0+WTOPT+2D0*ALS2PI*WT2.LE.WTMAX*PYR(0)) GOTO 110
+ PARJ(156)=(WTOPT+2D0*ALS2PI*WT2)/(1D0+WTOPT+2D0*ALS2PI*WT2)
+ ENDIF
+
+C...Impose mass cuts (gives two jets). For fixed jet number new try.
+ X1=1D0-Y23
+ X2=1D0-Y13
+ X3=1D0-Y12
+ IF(4D0*Y23*Y13*Y12/X3**2.LE.QME) NJET=2
+ IF(MOD(MSTJ(103),4).GE.2.AND.IABS(MSTJ(101)).LE.1.AND.QME*X3+
+ & 0.5D0*QME**2+(0.5D0*QME+0.25D0*QME**2)*((1D0-X2)/(1D0-X1)+
+ & (1D0-X1)/(1D0-X2)).GT.(X1**2+X2**2)*PYR(0)) NJET=2
+ IF(MSTJ(101).EQ.-1.AND.NJET.EQ.2) GOTO 100
+
+C...Scalar gluon model (first order only, no mass effects).
+ ELSE
+ 130 NJET=3
+ 140 X3=SQRT(4D0*CUT**2+PYR(0)*((1D0-CUT)**2-4D0*CUT**2))
+ IF(LOG((X3-CUT)/CUT).LE.PYR(0)*LOG((1D0-2D0*CUT)/CUT)) GOTO 140
+ YD=SIGN(2D0*CUT*((X3-CUT)/CUT)**PYR(0)-X3,PYR(0)-0.5D0)
+ X1=1D0-0.5D0*(X3+YD)
+ X2=1D0-0.5D0*(X3-YD)
+ IF(4D0*(1D0-X1)*(1D0-X2)*(1D0-X3)/X3**2.LE.QME) NJET=2
+ IF(MSTJ(102).GE.2) THEN
+ IF(X3**2-2D0*(1D0+X3)*(1D0-X1)*(1D0-X2)*PARJ(171).LT.
+ & X3**2*PYR(0)) NJET=2
+ ENDIF
+ IF(MSTJ(101).EQ.-1.AND.NJET.EQ.2) GOTO 130
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYX4JT
+C...Selects the kinematical variables of four-jet events.
+
+ SUBROUTINE PYX4JT(NJET,CUT,KFL,ECM,KFLN,X1,X2,X4,X12,X14)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYDAT1/
+C...Local arrays.
+ DIMENSION WTA(4),WTB(4),WTC(4),WTD(4),WTE(4)
+
+C...Common constants. Colour factors for QCD and Abelian gluon theory.
+ PMQ=PYMASS(KFL)
+ QME=(2D0*PMQ/ECM)**2
+ CT=LOG(1D0/CUT-5D0)
+ IF(MSTJ(109).EQ.0) THEN
+ CF=4D0/3D0
+ CN=3D0
+ TR=2.5D0
+ ELSE
+ CF=1D0
+ CN=0D0
+ TR=15D0
+ ENDIF
+
+C...Choice of process (qqbargg or qqbarqqbar).
+ 100 NJET=4
+ IT=1
+ IF(PARJ(155).GT.PYR(0)) IT=2
+ IF(MSTJ(101).LE.-3) IT=-MSTJ(101)-2
+ IF(IT.EQ.1) WTMX=0.7D0/CUT**2
+ IF(IT.EQ.1.AND.MSTJ(109).EQ.2) WTMX=0.6D0/CUT**2
+ IF(IT.EQ.2) WTMX=0.1125D0*CF*TR/CUT**2
+ ID=1
+
+C...Sample the five kinematical variables (for qqgg preweighted in y34).
+ 110 Y134=3D0*CUT+(1D0-6D0*CUT)*PYR(0)
+ Y234=3D0*CUT+(1D0-6D0*CUT)*PYR(0)
+ IF(IT.EQ.1) Y34=(1D0-5D0*CUT)*EXP(-CT*PYR(0))
+ IF(IT.EQ.2) Y34=CUT+(1D0-6D0*CUT)*PYR(0)
+ IF(Y34.LE.Y134+Y234-1D0.OR.Y34.GE.Y134*Y234) GOTO 110
+ VT=PYR(0)
+ CP=COS(PARU(1)*PYR(0))
+ Y14=(Y134-Y34)*VT
+ Y13=Y134-Y14-Y34
+ VB=Y34*(1D0-Y134-Y234+Y34)/((Y134-Y34)*(Y234-Y34))
+ Y24=0.5D0*(Y234-Y34)*(1D0-4D0*SQRT(MAX(0D0,VT*(1D0-VT)*
+ &VB*(1D0-VB)))*CP-(1D0-2D0*VT)*(1D0-2D0*VB))
+ Y23=Y234-Y34-Y24
+ Y12=1D0-Y134-Y23-Y24
+ IF(MIN(Y12,Y13,Y14,Y23,Y24).LE.CUT) GOTO 110
+ Y123=Y12+Y13+Y23
+ Y124=Y12+Y14+Y24
+
+C...Calculate matrix elements for qqgg or qqqq process.
+ IC=0
+ WTTOT=0D0
+ 120 IC=IC+1
+ IF(IT.EQ.1) THEN
+ WTA(IC)=(Y12*Y34**2-Y13*Y24*Y34+Y14*Y23*Y34+3D0*Y12*Y23*Y34+
+ & 3D0*Y12*Y14*Y34+4D0*Y12**2*Y34-Y13*Y23*Y24+2D0*Y12*Y23*Y24-
+ & Y13*Y14*Y24-2D0*Y12*Y13*Y24+2D0*Y12**2*Y24+Y14*Y23**2+2D0*Y12*
+ & Y23**2+Y14**2*Y23+4D0*Y12*Y14*Y23+4D0*Y12**2*Y23+2D0*Y12*Y14**2+
+ & 2D0*Y12*Y13*Y14+4D0*Y12**2*Y14+2D0*Y12**2*Y13+2D0*Y12**3)/
+ & (2D0*Y13*Y134*Y234*Y24)+(Y24*Y34+Y12*Y34+Y13*Y24-
+ & Y14*Y23+Y12*Y13)/(Y13*Y134**2)+2D0*Y23*(1D0-Y13)/
+ & (Y13*Y134*Y24)+Y34/(2D0*Y13*Y24)
+ WTB(IC)=(Y12*Y24*Y34+Y12*Y14*Y34-Y13*Y24**2+Y13*Y14*Y24+2D0*Y12*
+ & Y14*Y24)/(Y13*Y134*Y23*Y14)+Y12*(1D0+Y34)*Y124/(Y134*Y234*Y14*
+ & Y24)-(2D0*Y13*Y24+Y14**2+Y13*Y23+2D0*Y12*Y13)/(Y13*Y134*Y14)+
+ & Y12*Y123*Y124/(2D0*Y13*Y14*Y23*Y24)
+ WTC(IC)=-(5D0*Y12*Y34**2+2D0*Y12*Y24*Y34+2D0*Y12*Y23*Y34+
+ & 2D0*Y12*Y14*Y34+2D0*Y12*Y13*Y34+4D0*Y12**2*Y34-Y13*Y24**2+
+ & Y14*Y23*Y24+Y13*Y23*Y24+Y13*Y14*Y24-Y12*Y14*Y24-Y13**2*Y24-
+ & 3D0*Y12*Y13*Y24-Y14*Y23**2-Y14**2*Y23+Y13*Y14*Y23-
+ & 3D0*Y12*Y14*Y23-Y12*Y13*Y23)/(4D0*Y134*Y234*Y34**2)+
+ & (3D0*Y12*Y34**2-3D0*Y13*Y24*Y34+3D0*Y12*Y24*Y34+
+ & 3D0*Y14*Y23*Y34-Y13*Y24**2-Y12*Y23*Y34+6D0*Y12*Y14*Y34+
+ & 2D0*Y12*Y13*Y34-2D0*Y12**2*Y34+Y14*Y23*Y24-3D0*Y13*Y23*Y24-
+ & 2D0*Y13*Y14*Y24+4D0*Y12*Y14*Y24+2D0*Y12*Y13*Y24+
+ & 3D0*Y14*Y23**2+2D0*Y14**2*Y23+2D0*Y14**2*Y12+
+ & 2D0*Y12**2*Y14+6D0*Y12*Y14*Y23-2D0*Y12*Y13**2-
+ & 2D0*Y12**2*Y13)/(4D0*Y13*Y134*Y234*Y34)
+ WTC(IC)=WTC(IC)+(2D0*Y12*Y34**2-2D0*Y13*Y24*Y34+Y12*Y24*Y34+
+ & 4D0*Y13*Y23*Y34+4D0*Y12*Y14*Y34+2D0*Y12*Y13*Y34+2D0*Y12**2*Y34-
+ & Y13*Y24**2+3D0*Y14*Y23*Y24+4D0*Y13*Y23*Y24-2D0*Y13*Y14*Y24+
+ & 4D0*Y12*Y14*Y24+2D0*Y12*Y13*Y24+2D0*Y14*Y23**2+4D0*Y13*Y23**2+
+ & 2D0*Y13*Y14*Y23+2D0*Y12*Y14*Y23+4D0*Y12*Y13*Y23+2D0*Y12*Y14**2+
+ & 4D0*Y12**2*Y13+4D0*Y12*Y13*Y14+2D0*Y12**2*Y14)/
+ & (4D0*Y13*Y134*Y24*Y34)-(Y12*Y34**2-2D0*Y14*Y24*Y34-
+ & 2D0*Y13*Y24*Y34-Y14*Y23*Y34+Y13*Y23*Y34+Y12*Y14*Y34+
+ & 2D0*Y12*Y13*Y34-2D0*Y14**2*Y24-4D0*Y13*Y14*Y24-
+ & 4D0*Y13**2*Y24-Y14**2*Y23-Y13**2*Y23+Y12*Y13*Y14-
+ & Y12*Y13**2)/(2D0*Y13*Y34*Y134**2)+(Y12*Y34**2-
+ & 4D0*Y14*Y24*Y34-2D0*Y13*Y24*Y34-2D0*Y14*Y23*Y34-
+ & 4D0*Y13*Y23*Y34-4D0*Y12*Y14*Y34-4D0*Y12*Y13*Y34-
+ & 2D0*Y13*Y14*Y24+2D0*Y13**2*Y24+2D0*Y14**2*Y23-
+ & 2D0*Y13*Y14*Y23-Y12*Y14**2-6D0*Y12*Y13*Y14-
+ & Y12*Y13**2)/(4D0*Y34**2*Y134**2)
+ WTTOT=WTTOT+Y34*CF*(CF*WTA(IC)+(CF-0.5D0*CN)*WTB(IC)+
+ & CN*WTC(IC))/8D0
+ ELSE
+ WTD(IC)=(Y13*Y23*Y34+Y12*Y23*Y34-Y12**2*Y34+Y13*Y23*Y24+2D0*Y12*
+ & Y23*Y24-Y14*Y23**2+Y12*Y13*Y24+Y12*Y14*Y23+Y12*Y13*Y14)/(Y13**2*
+ & Y123**2)-(Y12*Y34**2-Y13*Y24*Y34+Y12*Y24*Y34-Y14*Y23*Y34-Y12*
+ & Y23*Y34-Y13*Y24**2+Y14*Y23*Y24-Y13*Y23*Y24-Y13**2*Y24+Y14*
+ & Y23**2)/(Y13**2*Y123*Y134)+(Y13*Y14*Y12+Y34*Y14*Y12-Y34**2*Y12+
+ & Y13*Y14*Y24+2D0*Y34*Y14*Y24-Y23*Y14**2+Y34*Y13*Y24+Y34*Y23*Y14+
+ & Y34*Y13*Y23)/(Y13**2*Y134**2)-(Y34*Y12**2-Y13*Y24*Y12+Y34*Y24*
+ & Y12-Y23*Y14*Y12-Y34*Y14*Y12-Y13*Y24**2+Y23*Y14*Y24-Y13*Y14*Y24-
+ & Y13**2*Y24+Y23*Y14**2)/(Y13**2*Y134*Y123)
+ WTE(IC)=(Y12*Y34*(Y23-Y24+Y14+Y13)+Y13*Y24**2-Y14*Y23*Y24+Y13*
+ & Y23*Y24+Y13*Y14*Y24+Y13**2*Y24-Y14*Y23*(Y14+Y23+Y13))/(Y13*Y23*
+ & Y123*Y134)-Y12*(Y12*Y34-Y23*Y24-Y13*Y24-Y14*Y23-Y14*Y13)/(Y13*
+ & Y23*Y123**2)-(Y14+Y13)*(Y24+Y23)*Y34/(Y13*Y23*Y134*Y234)+
+ & (Y12*Y34*(Y14-Y24+Y23+Y13)+Y13*Y24**2-Y23*Y14*Y24+Y13*Y14*Y24+
+ & Y13*Y23*Y24+Y13**2*Y24-Y23*Y14*(Y14+Y23+Y13))/(Y13*Y14*Y134*
+ & Y123)-Y34*(Y34*Y12-Y14*Y24-Y13*Y24-Y23*Y14-Y23*Y13)/(Y13*Y14*
+ & Y134**2)-(Y23+Y13)*(Y24+Y14)*Y12/(Y13*Y14*Y123*Y124)
+ WTTOT=WTTOT+CF*(TR*WTD(IC)+(CF-0.5D0*CN)*WTE(IC))/16D0
+ ENDIF
+
+C...Permutations of momenta in matrix element. Weighting.
+ 130 IF(IC.EQ.1.OR.IC.EQ.3.OR.ID.EQ.2.OR.ID.EQ.3) THEN
+ YSAV=Y13
+ Y13=Y14
+ Y14=YSAV
+ YSAV=Y23
+ Y23=Y24
+ Y24=YSAV
+ YSAV=Y123
+ Y123=Y124
+ Y124=YSAV
+ ENDIF
+ IF(IC.EQ.2.OR.IC.EQ.4.OR.ID.EQ.3.OR.ID.EQ.4) THEN
+ YSAV=Y13
+ Y13=Y23
+ Y23=YSAV
+ YSAV=Y14
+ Y14=Y24
+ Y24=YSAV
+ YSAV=Y134
+ Y134=Y234
+ Y234=YSAV
+ ENDIF
+ IF(IC.LE.3) GOTO 120
+ IF(ID.EQ.1.AND.WTTOT.LT.PYR(0)*WTMX) GOTO 110
+ IC=5
+
+C...qqgg events: string configuration and event type.
+ IF(IT.EQ.1) THEN
+ IF(MSTJ(109).EQ.0.AND.ID.EQ.1) THEN
+ PARJ(156)=Y34*(2D0*(WTA(1)+WTA(2)+WTA(3)+WTA(4))+4D0*(WTC(1)+
+ & WTC(2)+WTC(3)+WTC(4)))/(9D0*WTTOT)
+ IF(WTA(2)+WTA(4)+2D0*(WTC(2)+WTC(4)).GT.PYR(0)*(WTA(1)+WTA(2)+
+ & WTA(3)+WTA(4)+2D0*(WTC(1)+WTC(2)+WTC(3)+WTC(4)))) ID=2
+ IF(ID.EQ.2) GOTO 130
+ ELSEIF(MSTJ(109).EQ.2.AND.ID.EQ.1) THEN
+ PARJ(156)=Y34*(WTA(1)+WTA(2)+WTA(3)+WTA(4))/(8D0*WTTOT)
+ IF(WTA(2)+WTA(4).GT.PYR(0)*(WTA(1)+WTA(2)+WTA(3)+WTA(4))) ID=2
+ IF(ID.EQ.2) GOTO 130
+ ENDIF
+ MSTJ(120)=3
+ IF(MSTJ(109).EQ.0.AND.0.5D0*Y34*(WTC(1)+WTC(2)+WTC(3)+
+ & WTC(4)).GT.PYR(0)*WTTOT) MSTJ(120)=4
+ KFLN=21
+
+C...Mass cuts. Kinematical variables out.
+ IF(Y12.LE.CUT+QME) NJET=2
+ IF(NJET.EQ.2) GOTO 150
+ Q12=0.5D0*(1D0-SQRT(1D0-QME/Y12))
+ X1=1D0-(1D0-Q12)*Y234-Q12*Y134
+ X4=1D0-(1D0-Q12)*Y134-Q12*Y234
+ X2=1D0-Y124
+ X12=(1D0-Q12)*Y13+Q12*Y23
+ X14=Y12-0.5D0*QME
+ IF(Y134*Y234/((1D0-X1)*(1D0-X4)).LE.PYR(0)) NJET=2
+
+C...qqbarqqbar events: string configuration, choose new flavour.
+ ELSE
+ IF(ID.EQ.1) THEN
+ WTR=PYR(0)*(WTD(1)+WTD(2)+WTD(3)+WTD(4))
+ IF(WTR.LT.WTD(2)+WTD(3)+WTD(4)) ID=2
+ IF(WTR.LT.WTD(3)+WTD(4)) ID=3
+ IF(WTR.LT.WTD(4)) ID=4
+ IF(ID.GE.2) GOTO 130
+ ENDIF
+ MSTJ(120)=5
+ PARJ(156)=CF*TR*(WTD(1)+WTD(2)+WTD(3)+WTD(4))/(16D0*WTTOT)
+ 140 KFLN=1+INT(5D0*PYR(0))
+ IF(KFLN.NE.KFL.AND.0.2D0*PARJ(156).LE.PYR(0)) GOTO 140
+ IF(KFLN.EQ.KFL.AND.1D0-0.8D0*PARJ(156).LE.PYR(0)) GOTO 140
+ IF(KFLN.GT.MSTJ(104)) NJET=2
+ PMQN=PYMASS(KFLN)
+ QMEN=(2D0*PMQN/ECM)**2
+
+C...Mass cuts. Kinematical variables out.
+ IF(Y24.LE.CUT+QME.OR.Y13.LE.1.1D0*QMEN) NJET=2
+ IF(NJET.EQ.2) GOTO 150
+ Q24=0.5D0*(1D0-SQRT(1D0-QME/Y24))
+ Q13=0.5D0*(1D0-SQRT(1D0-QMEN/Y13))
+ X1=1D0-(1D0-Q24)*Y123-Q24*Y134
+ X4=1D0-(1D0-Q24)*Y134-Q24*Y123
+ X2=1D0-(1D0-Q13)*Y234-Q13*Y124
+ X12=(1D0-Q24)*((1D0-Q13)*Y14+Q13*Y34)+Q24*((1D0-Q13)*Y12+
+ & Q13*Y23)
+ X14=Y24-0.5D0*QME
+ X34=(1D0-Q24)*((1D0-Q13)*Y23+Q13*Y12)+Q24*((1D0-Q13)*Y34+
+ & Q13*Y14)
+ IF(PMQ**2+PMQN**2+MIN(X12,X34)*ECM**2.LE.
+ & (PARJ(127)+PMQ+PMQN)**2) NJET=2
+ IF(Y123*Y134/((1D0-X1)*(1D0-X4)).LE.PYR(0)) NJET=2
+ ENDIF
+ 150 IF(MSTJ(101).LE.-2.AND.NJET.EQ.2) GOTO 100
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYXDIF
+C...Gives the angular orientation of events.
+
+ SUBROUTINE PYXDIF(NC,NJET,KFL,ECM,CHI,THE,PHI)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Charge. Factors depending on polarization for QED case.
+ QF=KCHG(KFL,1)/3D0
+ POLL=1D0-PARJ(131)*PARJ(132)
+ POLD=PARJ(132)-PARJ(131)
+ IF(MSTJ(102).LE.1.OR.MSTJ(109).EQ.1) THEN
+ HF1=POLL
+ HF2=0D0
+ HF3=PARJ(133)**2
+ HF4=0D0
+
+C...Factors depending on flavour, energy and polarization for QFD case.
+ ELSE
+ SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
+ SFW=ECM**4/((ECM**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
+ SFI=SFW*(1D0-(PARJ(123)/ECM)**2)
+ AE=-1D0
+ VE=4D0*PARU(102)-1D0
+ AF=SIGN(1D0,QF)
+ VF=AF-4D0*QF*PARU(102)
+ HF1=QF**2*POLL-2D0*QF*VF*SFI*SFF*(VE*POLL-AE*POLD)+
+ & (VF**2+AF**2)*SFW*SFF**2*((VE**2+AE**2)*POLL-2D0*VE*AE*POLD)
+ HF2=-2D0*QF*AF*SFI*SFF*(AE*POLL-VE*POLD)+2D0*VF*AF*SFW*SFF**2*
+ & (2D0*VE*AE*POLL-(VE**2+AE**2)*POLD)
+ HF3=PARJ(133)**2*(QF**2-2D0*QF*VF*SFI*SFF*VE+(VF**2+AF**2)*
+ & SFW*SFF**2*(VE**2-AE**2))
+ HF4=-PARJ(133)**2*2D0*QF*VF*SFW*(PARJ(123)*PARJ(124)/ECM**2)*
+ & SFF*AE
+ ENDIF
+
+C...Mass factor. Differential cross-sections for two-jet events.
+ SQ2=SQRT(2D0)
+ QME=0D0
+ IF(MSTJ(103).GE.4.AND.IABS(MSTJ(101)).LE.1.AND.MSTJ(102).LE.1.AND.
+ &MSTJ(109).NE.1) QME=(2D0*PYMASS(KFL)/ECM)**2
+ IF(NJET.EQ.2) THEN
+ SIGU=4D0*SQRT(1D0-QME)
+ SIGL=2D0*QME*SQRT(1D0-QME)
+ SIGT=0D0
+ SIGI=0D0
+ SIGA=0D0
+ SIGP=4D0
+
+C...Kinematical variables. Reduce four-jet event to three-jet one.
+ ELSE
+ IF(NJET.EQ.3) THEN
+ X1=2D0*P(NC+1,4)/ECM
+ X2=2D0*P(NC+3,4)/ECM
+ ELSE
+ ECMR=P(NC+1,4)+P(NC+4,4)+SQRT((P(NC+2,1)+P(NC+3,1))**2+
+ & (P(NC+2,2)+P(NC+3,2))**2+(P(NC+2,3)+P(NC+3,3))**2)
+ X1=2D0*P(NC+1,4)/ECMR
+ X2=2D0*P(NC+4,4)/ECMR
+ ENDIF
+
+C...Differential cross-sections for three-jet (or reduced four-jet).
+ XQ=(1D0-X1)/(1D0-X2)
+ CT12=(X1*X2-2D0*X1-2D0*X2+2D0+QME)/SQRT((X1**2-QME)*(X2**2-QME))
+ ST12=SQRT(1D0-CT12**2)
+ IF(MSTJ(109).NE.1) THEN
+ SIGU=2D0*X1**2+X2**2*(1D0+CT12**2)-QME*(3D0+CT12**2-X1-X2)-
+ & QME*X1/XQ+0.5D0*QME*((X2**2-QME)*ST12**2-2D0*X2)*XQ
+ SIGL=(X2*ST12)**2-QME*(3D0-CT12**2-2.5D0*(X1+X2)+X1*X2+QME)+
+ & 0.5D0*QME*(X1**2-X1-QME)/XQ+0.5D0*QME*((X2**2-QME)*CT12**2-
+ & X2)*XQ
+ SIGT=0.5D0*(X2**2-QME-0.5D0*QME*(X2**2-QME)/XQ)*ST12**2
+ SIGI=((1D0-0.5D0*QME*XQ)*(X2**2-QME)*ST12*CT12+
+ & QME*(1D0-X1-X2+0.5D0*X1*X2+0.5D0*QME)*ST12/CT12)/SQ2
+ SIGA=X2**2*ST12/SQ2
+ SIGP=2D0*(X1**2-X2**2*CT12)
+
+C...Differential cross-sect for scalar gluons (no mass effects).
+ ELSE
+ X3=2D0-X1-X2
+ XT=X2*ST12
+ CT13=SQRT(MAX(0D0,1D0-(XT/X3)**2))
+ SIGU=(1D0-PARJ(171))*(X3**2-0.5D0*XT**2)+
+ & PARJ(171)*(X3**2-0.5D0*XT**2-4D0*(1D0-X1)*(1D0-X2)**2/X1)
+ SIGL=(1D0-PARJ(171))*0.5D0*XT**2+
+ & PARJ(171)*0.5D0*(1D0-X1)**2*XT**2
+ SIGT=(1D0-PARJ(171))*0.25D0*XT**2+
+ & PARJ(171)*0.25D0*XT**2*(1D0-2D0*X1)
+ SIGI=-(0.5D0/SQ2)*((1D0-PARJ(171))*XT*X3*CT13+
+ & PARJ(171)*XT*((1D0-2D0*X1)*X3*CT13-X1*(X1-X2)))
+ SIGA=(0.25D0/SQ2)*XT*(2D0*(1D0-X1)-X1*X3)
+ SIGP=X3**2-2D0*(1D0-X1)*(1D0-X2)/X1
+ ENDIF
+ ENDIF
+
+C...Upper bounds for differential cross-section.
+ HF1A=ABS(HF1)
+ HF2A=ABS(HF2)
+ HF3A=ABS(HF3)
+ HF4A=ABS(HF4)
+ SIGMAX=(2D0*HF1A+HF3A+HF4A)*ABS(SIGU)+2D0*(HF1A+HF3A+HF4A)*
+ &ABS(SIGL)+2D0*(HF1A+2D0*HF3A+2D0*HF4A)*ABS(SIGT)+2D0*SQ2*
+ &(HF1A+2D0*HF3A+2D0*HF4A)*ABS(SIGI)+4D0*SQ2*HF2A*ABS(SIGA)+
+ &2D0*HF2A*ABS(SIGP)
+
+C...Generate angular orientation according to differential cross-sect.
+ 100 CHI=PARU(2)*PYR(0)
+ CTHE=2D0*PYR(0)-1D0
+ PHI=PARU(2)*PYR(0)
+ CCHI=COS(CHI)
+ SCHI=SIN(CHI)
+ C2CHI=COS(2D0*CHI)
+ S2CHI=SIN(2D0*CHI)
+ THE=ACOS(CTHE)
+ STHE=SIN(THE)
+ C2PHI=COS(2D0*(PHI-PARJ(134)))
+ S2PHI=SIN(2D0*(PHI-PARJ(134)))
+ SIG=((1D0+CTHE**2)*HF1+STHE**2*(C2PHI*HF3-S2PHI*HF4))*SIGU+
+ &2D0*(STHE**2*HF1-STHE**2*(C2PHI*HF3-S2PHI*HF4))*SIGL+
+ &2D0*(STHE**2*C2CHI*HF1+((1D0+CTHE**2)*C2CHI*C2PHI-2D0*CTHE*S2CHI*
+ &S2PHI)*HF3-((1D0+CTHE**2)*C2CHI*S2PHI+2D0*CTHE*S2CHI*C2PHI)*HF4)*
+ &SIGT-2D0*SQ2*(2D0*STHE*CTHE*CCHI*HF1-2D0*STHE*(CTHE*CCHI*C2PHI-
+ &SCHI*S2PHI)*HF3+2D0*STHE*(CTHE*CCHI*S2PHI+SCHI*C2PHI)*HF4)*SIGI+
+ &4D0*SQ2*STHE*CCHI*HF2*SIGA+2D0*CTHE*HF2*SIGP
+ IF(SIG.LT.SIGMAX*PYR(0)) GOTO 100
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYONIA
+C...Generates Upsilon and toponium decays into three gluons
+C...or two gluons and a photon.
+
+ SUBROUTINE PYONIA(KFL,ECM)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
+ SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
+
+C...Printout. Check input parameters.
+ IF(MSTU(12).GE.1) CALL PYLIST(0)
+ IF(KFL.LT.0.OR.KFL.GT.8) THEN
+ CALL PYERRM(16,'(PYONIA:) called with unknown flavour code')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+ IF(ECM.LT.PARJ(127)+2.02D0*PARF(101)) THEN
+ CALL PYERRM(16,'(PYONIA:) called with too small CM energy')
+ IF(MSTU(21).GE.1) RETURN
+ ENDIF
+
+C...Initial e+e- and onium state (optional).
+ NC=0
+ IF(MSTJ(115).GE.2) THEN
+ NC=NC+2
+ CALL PY1ENT(NC-1,11,0.5D0*ECM,0D0,0D0)
+ K(NC-1,1)=21
+ CALL PY1ENT(NC,-11,0.5D0*ECM,PARU(1),0D0)
+ K(NC,1)=21
+ ENDIF
+ KFLC=IABS(KFL)
+ IF(MSTJ(115).GE.3.AND.KFLC.GE.5) THEN
+ NC=NC+1
+ KF=110*KFLC+3
+ MSTU10=MSTU(10)
+ MSTU(10)=1
+ P(NC,5)=ECM
+ CALL PY1ENT(NC,KF,ECM,0D0,0D0)
+ K(NC,1)=21
+ K(NC,3)=1
+ MSTU(10)=MSTU10
+ ENDIF
+
+C...Choose x1 and x2 according to matrix element.
+ NTRY=0
+ 100 X1=PYR(0)
+ X2=PYR(0)
+ X3=2D0-X1-X2
+ IF(X3.GE.1D0.OR.((1D0-X1)/(X2*X3))**2+((1D0-X2)/(X1*X3))**2+
+ &((1D0-X3)/(X1*X2))**2.LE.2D0*PYR(0)) GOTO 100
+ NTRY=NTRY+1
+ NJET=3
+ IF(MSTJ(101).LE.4) CALL PY3ENT(NC+1,21,21,21,ECM,X1,X3)
+ IF(MSTJ(101).GE.5) CALL PY3ENT(-(NC+1),21,21,21,ECM,X1,X3)
+
+C...Photon-gluon-gluon events. Small system modifications. Jet origin.
+ MSTU(111)=MSTJ(108)
+ IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
+ &MSTU(111)=1
+ PARU(112)=PARJ(121)
+ IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
+ QF=0D0
+ IF(KFLC.NE.0) QF=KCHG(KFLC,1)/3D0
+ RGAM=7.2D0*QF**2*PARU(101)/PYALPS(ECM**2)
+ MK=0
+ ECMC=ECM
+ IF(PYR(0).GT.RGAM/(1D0+RGAM)) THEN
+ IF(1D0-MAX(X1,X2,X3).LE.MAX((PARJ(126)/ECM)**2,PARJ(125)))
+ & NJET=2
+ IF(NJET.EQ.2.AND.MSTJ(101).LE.4) CALL PY2ENT(NC+1,21,21,ECM)
+ IF(NJET.EQ.2.AND.MSTJ(101).GE.5) CALL PY2ENT(-(NC+1),21,21,ECM)
+ ELSE
+ MK=1
+ ECMC=SQRT(1D0-X1)*ECM
+ IF(ECMC.LT.2D0*PARJ(127)) GOTO 100
+ K(NC+1,1)=1
+ K(NC+1,2)=22
+ K(NC+1,4)=0
+ K(NC+1,5)=0
+ IF(MSTJ(101).GE.5) K(NC+2,4)=MSTU(5)*(NC+3)
+ IF(MSTJ(101).GE.5) K(NC+2,5)=MSTU(5)*(NC+3)
+ IF(MSTJ(101).GE.5) K(NC+3,4)=MSTU(5)*(NC+2)
+ IF(MSTJ(101).GE.5) K(NC+3,5)=MSTU(5)*(NC+2)
+ NJET=2
+ IF(ECMC.LT.4D0*PARJ(127)) THEN
+ MSTU10=MSTU(10)
+ MSTU(10)=1
+ P(NC+2,5)=ECMC
+ CALL PY1ENT(NC+2,83,0.5D0*(X2+X3)*ECM,PARU(1),0D0)
+ MSTU(10)=MSTU10
+ NJET=0
+ ENDIF
+ ENDIF
+ DO 110 IP=NC+1,N
+ K(IP,3)=K(IP,3)+(MSTJ(115)/2)+(KFLC/5)*(MSTJ(115)/3)*(NC-1)
+ 110 CONTINUE
+
+C...Differential cross-sections. Upper limit for cross-section.
+ IF(MSTJ(106).EQ.1) THEN
+ SQ2=SQRT(2D0)
+ HF1=1D0-PARJ(131)*PARJ(132)
+ HF3=PARJ(133)**2
+ CT13=(X1*X3-2D0*X1-2D0*X3+2D0)/(X1*X3)
+ ST13=SQRT(1D0-CT13**2)
+ SIGL=0.5D0*X3**2*((1D0-X2)**2+(1D0-X3)**2)*ST13**2
+ SIGU=(X1*(1D0-X1))**2+(X2*(1D0-X2))**2+(X3*(1D0-X3))**2-SIGL
+ SIGT=0.5D0*SIGL
+ SIGI=(SIGL*CT13/ST13+0.5D0*X1*X3*(1D0-X2)**2*ST13)/SQ2
+ SIGMAX=(2D0*HF1+HF3)*ABS(SIGU)+2D0*(HF1+HF3)*ABS(SIGL)+2D0*(HF1+
+ & 2D0*HF3)*ABS(SIGT)+2D0*SQ2*(HF1+2D0*HF3)*ABS(SIGI)
+
+C...Angular orientation of event.
+ 120 CHI=PARU(2)*PYR(0)
+ CTHE=2D0*PYR(0)-1D0
+ PHI=PARU(2)*PYR(0)
+ CCHI=COS(CHI)
+ SCHI=SIN(CHI)
+ C2CHI=COS(2D0*CHI)
+ S2CHI=SIN(2D0*CHI)
+ THE=ACOS(CTHE)
+ STHE=SIN(THE)
+ C2PHI=COS(2D0*(PHI-PARJ(134)))
+ S2PHI=SIN(2D0*(PHI-PARJ(134)))
+ SIG=((1D0+CTHE**2)*HF1+STHE**2*C2PHI*HF3)*SIGU+2D0*(STHE**2*HF1-
+ & STHE**2*C2PHI*HF3)*SIGL+2D0*(STHE**2*C2CHI*HF1+((1D0+CTHE**2)*
+ & C2CHI*C2PHI-2D0*CTHE*S2CHI*S2PHI)*HF3)*SIGT-
+ & 2D0*SQ2*(2D0*STHE*CTHE*CCHI*HF1-2D0*STHE*
+ & (CTHE*CCHI*C2PHI-SCHI*S2PHI)*HF3)*SIGI
+ IF(SIG.LT.SIGMAX*PYR(0)) GOTO 120
+ CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
+ CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
+ ENDIF
+
+C...Generate parton shower. Rearrange along strings and check.
+ IF(MSTJ(101).GE.5.AND.NJET.GE.2) THEN
+ CALL PYSHOW(NC+MK+1,-NJET,ECMC)
+ MSTJ14=MSTJ(14)
+ IF(MSTJ(105).EQ.-1) MSTJ(14)=-1
+ IF(MSTJ(105).GE.0) MSTU(28)=0
+ CALL PYPREP(0)
+ MSTJ(14)=MSTJ14
+ IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100
+ ENDIF
+
+C...Generate fragmentation. Information for PYTABU:
+ IF(MSTJ(105).EQ.1) CALL PYEXEC
+ MSTU(161)=110*KFLC+3
+ MSTU(162)=0
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYBOOK
+C...Books a histogram.
+
+ SUBROUTINE PYBOOK(ID,TITLE,NX,XL,XU)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+C...Local character variables.
+ CHARACTER TITLE*(*), TITFX*60
+
+C...Check that input is sensible. Find initial address in memory.
+ IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
+ &'(PYBOOK:) not allowed histogram number')
+ IF(NX.LE.0.OR.NX.GT.100) CALL PYERRM(28,
+ &'(PYBOOK:) not allowed number of bins')
+ IF(XL.GE.XU) CALL PYERRM(28,
+ &'(PYBOOK:) x limits in wrong order')
+ INDX(ID)=IHIST(4)
+ IHIST(4)=IHIST(4)+28+NX
+ IF(IHIST(4).GT.IHIST(2)) CALL PYERRM(28,
+ &'(PYBOOK:) out of histogram space')
+ IS=INDX(ID)
+
+C...Store histogram size and reset contents.
+ BIN(IS+1)=NX
+ BIN(IS+2)=XL
+ BIN(IS+3)=XU
+ BIN(IS+4)=(XU-XL)/NX
+ CALL PYNULL(ID)
+
+C...Store title by conversion to integer to double precision.
+ TITFX=TITLE//' '
+ DO 100 IT=1,20
+ BIN(IS+8+NX+IT)=256**2*ICHAR(TITFX(3*IT-2:3*IT-2))+
+ & 256*ICHAR(TITFX(3*IT-1:3*IT-1))+ICHAR(TITFX(3*IT:3*IT))
+ 100 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYFILL
+C...Fills entry in histogram.
+
+ SUBROUTINE PYFILL(ID,X,W)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+
+C...Find initial address in memory. Increase number of entries.
+ IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
+ &'(PYFILL:) not allowed histogram number')
+ IS=INDX(ID)
+ IF(IS.EQ.0) CALL PYERRM(28,
+ &'(PYFILL:) filling unbooked histogram')
+ BIN(IS+5)=BIN(IS+5)+1D0
+
+C...Find bin in x, including under/overflow, and fill.
+ IF(X.LT.BIN(IS+2)) THEN
+ BIN(IS+6)=BIN(IS+6)+W
+ ELSEIF(X.GE.BIN(IS+3)) THEN
+ BIN(IS+8)=BIN(IS+8)+W
+ ELSE
+ BIN(IS+7)=BIN(IS+7)+W
+ IX=(X-BIN(IS+2))/BIN(IS+4)
+ IX=MAX(0,MIN(NINT(BIN(IS+1))-1,IX))
+ BIN(IS+9+IX)=BIN(IS+9+IX)+W
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYFACT
+C...Multiplies histogram contents by factor.
+
+ SUBROUTINE PYFACT(ID,F)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+
+C...Find initial address in memory. Multiply all contents bins.
+ IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
+ &'(PYFACT:) not allowed histogram number')
+ IS=INDX(ID)
+ IF(IS.EQ.0) CALL PYERRM(28,
+ &'(PYFACT:) scaling unbooked histogram')
+ DO 100 IX=IS+6,IS+8+NINT(BIN(IS+1))
+ BIN(IX)=F*BIN(IX)
+ 100 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYOPER
+C...Performs operations between histograms.
+
+ SUBROUTINE PYOPER(ID1,OPER,ID2,ID3,F1,F2)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+C...Character variable.
+ CHARACTER OPER*(*)
+
+C...Find initial addresses in memory, and histogram size.
+ IF(ID1.LE.0.OR.ID1.GT.IHIST(1)) CALL PYERRM(28,
+ &'(PYFACT:) not allowed histogram number')
+ IS1=INDX(ID1)
+ IS2=INDX(MIN(IHIST(1),MAX(1,ID2)))
+ IS3=INDX(MIN(IHIST(1),MAX(1,ID3)))
+ NX=NINT(BIN(IS3+1))
+ IF(OPER.EQ.'M'.AND.ID3.EQ.0) NX=NINT(BIN(IS2+1))
+
+C...Update info on number of histogram entries.
+ IF(OPER.EQ.'+'.OR.OPER.EQ.'-'.OR.OPER.EQ.'*'.OR.OPER.EQ.'/') THEN
+ BIN(IS3+5)=BIN(IS1+5)+BIN(IS2+5)
+ ELSEIF(OPER.EQ.'A'.OR.OPER.EQ.'S'.OR.OPER.EQ.'L') THEN
+ BIN(IS3+5)=BIN(IS1+5)
+ ENDIF
+
+C...Operations on pair of histograms: addition, subtraction,
+C...multiplication, division.
+ IF(OPER.EQ.'+') THEN
+ DO 100 IX=6,8+NX
+ BIN(IS3+IX)=F1*BIN(IS1+IX)+F2*BIN(IS2+IX)
+ 100 CONTINUE
+ ELSEIF(OPER.EQ.'-') THEN
+ DO 110 IX=6,8+NX
+ BIN(IS3+IX)=F1*BIN(IS1+IX)-F2*BIN(IS2+IX)
+ 110 CONTINUE
+ ELSEIF(OPER.EQ.'*') THEN
+ DO 120 IX=6,8+NX
+ BIN(IS3+IX)=F1*BIN(IS1+IX)*F2*BIN(IS2+IX)
+ 120 CONTINUE
+ ELSEIF(OPER.EQ.'/') THEN
+ DO 130 IX=6,8+NX
+ FA2=F2*BIN(IS2+IX)
+ IF(ABS(FA2).LE.1D-20) THEN
+ BIN(IS3+IX)=0D0
+ ELSE
+ BIN(IS3+IX)=F1*BIN(IS1+IX)/FA2
+ ENDIF
+ 130 CONTINUE
+
+C...Operations on single histogram: multiplication+addition,
+C...square root+addition, logarithm+addition.
+ ELSEIF(OPER.EQ.'A') THEN
+ DO 140 IX=6,8+NX
+ BIN(IS3+IX)=F1*BIN(IS1+IX)+F2
+ 140 CONTINUE
+ ELSEIF(OPER.EQ.'S') THEN
+ DO 150 IX=6,8+NX
+ BIN(IS3+IX)=F1*SQRT(MAX(0D0,BIN(IS1+IX)))+F2
+ 150 CONTINUE
+ ELSEIF(OPER.EQ.'L') THEN
+ ZMIN=1D20
+ DO 160 IX=9,8+NX
+ IF(BIN(IS1+IX).LT.ZMIN.AND.BIN(IS1+IX).GT.1D-20)
+ & ZMIN=0.8D0*BIN(IS1+IX)
+ 160 CONTINUE
+ DO 170 IX=6,8+NX
+ BIN(IS3+IX)=F1*LOG10(MAX(ZMIN,BIN(IS1+IX)))+F2
+ 170 CONTINUE
+
+C...Operation on two or three histograms: average and
+C...standard deviation.
+ ELSEIF(OPER.EQ.'M') THEN
+ DO 180 IX=6,8+NX
+ IF(ABS(BIN(IS1+IX)).LE.1D-20) THEN
+ BIN(IS2+IX)=0D0
+ ELSE
+ BIN(IS2+IX)=BIN(IS2+IX)/BIN(IS1+IX)
+ ENDIF
+ IF(ID3.NE.0) THEN
+ IF(ABS(BIN(IS1+IX)).LE.1D-20) THEN
+ BIN(IS3+IX)=0D0
+ ELSE
+ BIN(IS3+IX)=SQRT(MAX(0D0,BIN(IS3+IX)/BIN(IS1+IX)-
+ & BIN(IS2+IX)**2))
+ ENDIF
+ ENDIF
+ BIN(IS1+IX)=F1*BIN(IS1+IX)
+ 180 CONTINUE
+ ENDIF
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYHIST
+C...Prints and resets all histograms.
+
+ SUBROUTINE PYHIST
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+
+C...Loop over histograms, print and reset used ones.
+ DO 100 ID=1,IHIST(1)
+ IS=INDX(ID)
+ IF(IS.NE.0.AND.NINT(BIN(IS+5)).GT.0) THEN
+ CALL PYPLOT(ID)
+ CALL PYNULL(ID)
+ ENDIF
+ 100 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYPLOT
+C...Prints a histogram (but does not reset it).
+
+ SUBROUTINE PYPLOT(ID)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYDAT1/,/PYBINS/
+C...Local arrays and character variables.
+ DIMENSION IDATI(6), IROW(100), IFRA(100), DYAC(10)
+ CHARACTER TITLE*60, OUT*100, CHA(0:11)*1
+
+C...Steps in histogram scale. Character sequence.
+ DATA DYAC/.04,.05,.06,.08,.10,.12,.15,.20,.25,.30/
+ DATA CHA/'0','1','2','3','4','5','6','7','8','9','X','-'/
+
+C...Find initial address in memory; skip if empty histogram.
+ IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
+ IS=INDX(ID)
+ IF(IS.EQ.0) RETURN
+ IF(NINT(BIN(IS+5)).LE.0) THEN
+ WRITE(MSTU(11),5000) ID
+ RETURN
+ ENDIF
+
+C...Number of histogram lines and x bins.
+ LIN=IHIST(3)-18
+ NX=NINT(BIN(IS+1))
+
+C...Extract title by conversion from double precision via integer.
+ DO 100 IT=1,20
+ IEQ=NINT(BIN(IS+8+NX+IT))
+ TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//CHAR(MOD(IEQ,256**2)/256)
+ & //CHAR(MOD(IEQ,256))
+ 100 CONTINUE
+
+C...Find time; print title.
+ CALL PYTIME(IDATI)
+ IF(IDATI(1).GT.0) THEN
+ WRITE(MSTU(11),5100) ID, TITLE, (IDATI(J),J=1,5)
+ ELSE
+ WRITE(MSTU(11),5200) ID, TITLE
+ ENDIF
+
+C...Find minimum and maximum bin content.
+ YMIN=BIN(IS+9)
+ YMAX=BIN(IS+9)
+ DO 110 IX=IS+10,IS+8+NX
+ IF(BIN(IX).LT.YMIN) YMIN=BIN(IX)
+ IF(BIN(IX).GT.YMAX) YMAX=BIN(IX)
+ 110 CONTINUE
+
+C...Determine scale and step size for y axis.
+ IF(YMAX-YMIN.GT.LIN*DYAC(1)*1D-9) THEN
+ IF(YMIN.GT.0D0.AND.YMIN.LT.0.1D0*YMAX) YMIN=0D0
+ IF(YMAX.LT.0D0.AND.YMAX.GT.0.1D0*YMIN) YMAX=0D0
+ IPOT=INT(LOG10(YMAX-YMIN)+10D0)-10
+ IF(YMAX-YMIN.LT.LIN*DYAC(1)*10D0**IPOT) IPOT=IPOT-1
+ IF(YMAX-YMIN.GT.LIN*DYAC(10)*10D0**IPOT) IPOT=IPOT+1
+ DELY=DYAC(1)
+ DO 120 IDEL=1,9
+ IF(YMAX-YMIN.GE.LIN*DYAC(IDEL)*10D0**IPOT) DELY=DYAC(IDEL+1)
+ 120 CONTINUE
+ DY=DELY*10D0**IPOT
+
+C...Convert bin contents to integer form; fractional fill in top row.
+ DO 130 IX=1,NX
+ CTA=ABS(BIN(IS+8+IX))/DY
+ IROW(IX)=SIGN(CTA+0.95D0,BIN(IS+8+IX))
+ IFRA(IX)=10D0*(CTA+1.05D0-DBLE(INT(CTA+0.95D0)))
+ 130 CONTINUE
+ IRMI=SIGN(ABS(YMIN)/DY+0.95D0,YMIN)
+ IRMA=SIGN(ABS(YMAX)/DY+0.95D0,YMAX)
+
+C...Print histogram row by row.
+ DO 150 IR=IRMA,IRMI,-1
+ IF(IR.EQ.0) GOTO 150
+ OUT=' '
+ DO 140 IX=1,NX
+ IF(IR.EQ.IROW(IX)) OUT(IX:IX)=CHA(IFRA(IX))
+ IF(IR*(IROW(IX)-IR).GT.0) OUT(IX:IX)=CHA(10)
+ 140 CONTINUE
+ WRITE(MSTU(11),5300) IR*DELY, IPOT, OUT
+ 150 CONTINUE
+
+C...Print sign and value of bin contents.
+ IPOT=INT(LOG10(MAX(YMAX,-YMIN))+10.0001D0)-10
+ OUT=' '
+ DO 160 IX=1,NX
+ IF(BIN(IS+8+IX).LT.-10D0**(IPOT-4)) OUT(IX:IX)=CHA(11)
+ IROW(IX)=NINT(10D0**(3-IPOT)*ABS(BIN(IS+8+IX)))
+ 160 CONTINUE
+ WRITE(MSTU(11),5400) OUT
+ DO 180 IR=4,1,-1
+ DO 170 IX=1,NX
+ OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
+ 170 CONTINUE
+ WRITE(MSTU(11),5500) IPOT+IR-4, OUT
+ 180 CONTINUE
+
+C...Print sign and value of lower bin edge.
+ IPOT=INT(LOG10(MAX(-BIN(IS+2),BIN(IS+3)-BIN(IS+4)))+
+ & 10.0001D0)-10
+ OUT=' '
+ DO 190 IX=1,NX
+ IF(BIN(IS+2)+(IX-1)*BIN(IS+4).LT.-10D0**(IPOT-3))
+ & OUT(IX:IX)=CHA(11)
+ IROW(IX)=NINT(10D0**(2-IPOT)*ABS(BIN(IS+2)+(IX-1)*BIN(IS+4)))
+ 190 CONTINUE
+ WRITE(MSTU(11),5600) OUT
+ DO 210 IR=3,1,-1
+ DO 200 IX=1,NX
+ OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
+ 200 CONTINUE
+ WRITE(MSTU(11),5500) IPOT+IR-3, OUT
+ 210 CONTINUE
+ ENDIF
+
+C...Calculate and print statistics.
+ CSUM=0D0
+ CXSUM=0D0
+ CXXSUM=0D0
+ DO 220 IX=1,NX
+ CTA=ABS(BIN(IS+8+IX))
+ X=BIN(IS+2)+(IX-0.5D0)*BIN(IS+4)
+ CSUM=CSUM+CTA
+ CXSUM=CXSUM+CTA*X
+ CXXSUM=CXXSUM+CTA*X**2
+ 220 CONTINUE
+ XMEAN=CXSUM/MAX(CSUM,1D-20)
+ XRMS=SQRT(MAX(0D0,CXXSUM/MAX(CSUM,1D-20)-XMEAN**2))
+ WRITE(MSTU(11),5700) NINT(BIN(IS+5)),XMEAN,BIN(IS+6),
+ &BIN(IS+2),BIN(IS+7),XRMS,BIN(IS+8),BIN(IS+3)
+
+C...Formats for output.
+ 5000 FORMAT(/5X,'Histogram no',I5,' : no entries')
+ 5100 FORMAT('1'/5X,'Histogram no',I5,6X,A60,5X,I4,'-',I2,'-',I2,1X,
+ &I2,':',I2/)
+ 5200 FORMAT('1'/5X,'Histogram no',I5,6X,A60/)
+ 5300 FORMAT(2X,F7.2,'*10**',I2,3X,A100)
+ 5400 FORMAT(/8X,'Contents',3X,A100)
+ 5500 FORMAT(9X,'*10**',I2,3X,A100)
+ 5600 FORMAT(/8X,'Low edge',3X,A100)
+ 5700 FORMAT(/5X,'Entries =',I12,1P,6X,'Mean =',D12.4,6X,'Underflow ='
+ &,D12.4,6X,'Low edge =',D12.4/5X,'All chan =',D12.4,6X,
+ &'Rms =',D12.4,6X,'Overflow =',D12.4,6X,'High edge =',D12.4)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYNULL
+C...Resets bin contents of a histogram.
+
+ SUBROUTINE PYNULL(ID)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+
+ IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
+ IS=INDX(ID)
+ IF(IS.EQ.0) RETURN
+ DO 100 IX=IS+5,IS+8+NINT(BIN(IS+1))
+ BIN(IX)=0D0
+ 100 CONTINUE
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYDUMP
+C...Dumps histogram contents on file for reading by other program.
+C...Can also read back own dump.
+
+ SUBROUTINE PYDUMP(MDUMP,LFN,NHI,IHI)
+
+C...Double precision declaration.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+C...Commonblock.
+ COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
+ SAVE /PYBINS/
+C...Local arrays and character variables.
+ DIMENSION IHI(*),ISS(100),VAL(5)
+ CHARACTER TITLE*60,FORMAT*13
+
+C...Dump all histograms that have been booked,
+C...including titles and ranges, one after the other.
+ IF(MDUMP.EQ.1) THEN
+
+C...Loop over histograms and find which are wanted and booked.
+ IF(NHI.LE.0) THEN
+ NW=IHIST(1)
+ ELSE
+ NW=NHI
+ ENDIF
+ DO 130 IW=1,NW
+ IF(NHI.EQ.0) THEN
+ ID=IW
+ ELSE
+ ID=IHI(IW)
+ ENDIF
+ IS=INDX(ID)
+ IF(IS.NE.0) THEN
+
+C...Write title, histogram size, filling statistics.
+ NX=NINT(BIN(IS+1))
+ DO 100 IT=1,20
+ IEQ=NINT(BIN(IS+8+NX+IT))
+ TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//
+ & CHAR(MOD(IEQ,256**2)/256)//CHAR(MOD(IEQ,256))
+ 100 CONTINUE
+ WRITE(LFN,5100) ID,TITLE
+ WRITE(LFN,5200) NX,BIN(IS+2),BIN(IS+3)
+ WRITE(LFN,5300) NINT(BIN(IS+5)),BIN(IS+6),BIN(IS+7),
+ & BIN(IS+8)
+
+
+C...Write histogram contents, in groups of five.
+ DO 120 IXG=1,(NX+4)/5
+ DO 110 IXV=1,5
+ IX=5*IXG+IXV-5
+ IF(IX.LE.NX) THEN
+ VAL(IXV)=BIN(IS+8+IX)
+ ELSE
+ VAL(IXV)=0D0
+ ENDIF
+ 110 CONTINUE
+ WRITE(LFN,5400) (VAL(IXV),IXV=1,5)
+ 120 CONTINUE
+
+C...Go to next histogram; finish.
+ ELSEIF(NHI.GT.0) THEN
+ CALL PYERRM(8,'(PYDUMP:) unknown histogram number')
+ ENDIF
+ 130 CONTINUE
+
+C...Read back in histograms dumped MDUMP=1.
+ ELSEIF(MDUMP.EQ.2) THEN
+
+C...Read histogram number, title and range, and book.
+ 140 READ(LFN,5100,END=170) ID,TITLE
+ READ(LFN,5200) NX,XL,XU
+ CALL PYBOOK(ID,TITLE,NX,XL,XU)
+ IS=INDX(ID)
+
+C...Read filling statistics.
+ READ(LFN,5300) NENTRY,BIN(IS+6),BIN(IS+7),BIN(IS+8)
+ BIN(IS+5)=DBLE(NENTRY)
+
+C...Read histogram contents, in groups of five.
+ DO 160 IXG=1,(NX+4)/5
+ READ(LFN,5400) (VAL(IXV),IXV=1,5)
+ DO 150 IXV=1,5
+ IX=5*IXG+IXV-5
+ IF(IX.LE.NX) BIN(IS+8+IX)=VAL(IXV)
+ 150 CONTINUE
+ 160 CONTINUE
+
+C...Go to next histogram; finish.
+ GOTO 140
+ 170 CONTINUE
+
+C...Write histogram contents in column format,
+C...convenient e.g. for GNUPLOT input.
+ ELSEIF(MDUMP.EQ.3) THEN
+
+C...Find addresses to wanted histograms.
+ NSS=0
+ IF(NHI.LE.0) THEN
+ NW=IHIST(1)
+ ELSE
+ NW=NHI
+ ENDIF
+ DO 180 IW=1,NW
+ IF(NHI.EQ.0) THEN
+ ID=IW
+ ELSE
+ ID=IHI(IW)
+ ENDIF
+ IS=INDX(ID)
+ IF(IS.NE.0.AND.NSS.LT.100) THEN
+ NSS=NSS+1
+ ISS(NSS)=IS
+ ELSEIF(NSS.GE.100) THEN
+ CALL PYERRM(8,'(PYDUMP:) too many histograms requested')
+ ELSEIF(NHI.GT.0) THEN
+ CALL PYERRM(8,'(PYDUMP:) unknown histogram number')
+ ENDIF
+ 180 CONTINUE
+
+C...Check that they have common number of x bins. Fix format.
+ NX=NINT(BIN(ISS(1)+1))
+ DO 190 IW=2,NSS
+ IF(NINT(BIN(ISS(IW)+1)).NE.NX) THEN
+ CALL PYERRM(8,'(PYDUMP:) different number of bins')
+ RETURN
+ ENDIF
+ 190 CONTINUE
+ FORMAT='(1P,000E12.4)'
+ WRITE(FORMAT(5:7),'(I3)') NSS+1
+
+C...Write histogram contents; first column x values.
+ DO 200 IX=1,NX
+ X=BIN(ISS(1)+2)+(IX-0.5D0)*BIN(ISS(1)+4)
+ WRITE(LFN,FORMAT) X, (BIN(ISS(IW)+8+IX),IW=1,NSS)
+ 200 CONTINUE
+
+ ENDIF
+
+C...Formats for output.
+ 5100 FORMAT(I5,5X,A60)
+ 5200 FORMAT(I5,1P,2D12.4)
+ 5300 FORMAT(I12,1P,3D12.4)
+ 5400 FORMAT(1P,5D12.4)
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYKCUT
+C...Dummy routine, which the user can replace in order to make cuts on
+C...the kinematics on the parton level before the matrix elements are
+C...evaluated and the event is generated. The cross-section estimates
+C...will automatically take these cuts into account, so the given
+C...values are for the allowed phase space region only. MCUT=0 means
+C...that the event has passed the cuts, MCUT=1 that it has failed.
+
+ SUBROUTINE PYKCUT(MCUT)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ SAVE /PYDAT1/,/PYINT1/,/PYINT2/
+
+C...Set default value (accepting event) for MCUT.
+ MCUT=0
+
+C...Read out subprocess number.
+ ISUB=MINT(1)
+ ISTSB=ISET(ISUB)
+
+C...Read out tau, y*, cos(theta), tau' (where defined, else =0).
+ TAU=VINT(21)
+ YST=VINT(22)
+ CTH=0D0
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) CTH=VINT(23)
+ TAUP=0D0
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUP=VINT(26)
+
+C...Calculate x_1, x_2, x_F.
+ IF(ISTSB.LE.2.OR.ISTSB.GE.5) THEN
+ X1=SQRT(TAU)*EXP(YST)
+ X2=SQRT(TAU)*EXP(-YST)
+ ELSE
+ X1=SQRT(TAUP)*EXP(YST)
+ X2=SQRT(TAUP)*EXP(-YST)
+ ENDIF
+ XF=X1-X2
+
+C...Calculate shat, that, uhat, p_T^2.
+ SHAT=TAU*VINT(2)
+ SQM3=VINT(63)
+ SQM4=VINT(64)
+ RM3=SQM3/SHAT
+ RM4=SQM4/SHAT
+ BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
+ RPTS=4D0*VINT(71)**2/SHAT
+ BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
+ RM34=2D0*RM3*RM4
+ RSQM=1D0+RM34
+ RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
+ THAT=-0.5D0*SHAT*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
+ UHAT=-0.5D0*SHAT*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
+ PT2=MAX(VINT(71)**2,0.25D0*SHAT*BE34**2*(1D0-CTH**2))
+
+C...Decisions by user to be put here.
+
+C...Stop program if this routine is ever called.
+C...You should not copy these lines to your own routine.
+ WRITE(MSTU(11),5000)
+ IF(PYR(0).LT.10D0) STOP
+
+C...Format for error printout.
+ 5000 FORMAT(1X,'Error: you did not link your PYKCUT routine ',
+ &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
+ &1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYEVWT
+C...Dummy routine, which the user can replace in order to multiply the
+C...standard PYTHIA differential cross-section by a process- and
+C...kinematics-dependent factor WTXS. For MSTP(142)=1 this corresponds
+C...to generation of weighted events, with weight 1/WTXS, while for
+C...MSTP(142)=2 it corresponds to a modification of the underlying
+C...physics.
+
+ SUBROUTINE PYEVWT(WTXS)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYINT1/MINT(400),VINT(400)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ SAVE /PYDAT1/,/PYINT1/,/PYINT2/
+
+C...Set default weight for WTXS.
+ WTXS=1D0
+
+C...Read out subprocess number.
+ ISUB=MINT(1)
+ ISTSB=ISET(ISUB)
+
+C...Read out tau, y*, cos(theta), tau' (where defined, else =0).
+ TAU=VINT(21)
+ YST=VINT(22)
+ CTH=0D0
+ IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) CTH=VINT(23)
+ TAUP=0D0
+ IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUP=VINT(26)
+
+C...Read out x_1, x_2, x_F, shat, that, uhat, p_T^2.
+ X1=VINT(41)
+ X2=VINT(42)
+ XF=X1-X2
+ SHAT=VINT(44)
+ THAT=VINT(45)
+ UHAT=VINT(46)
+ PT2=VINT(48)
+
+C...Modifications by user to be put here.
+
+C...Stop program if this routine is ever called.
+C...You should not copy these lines to your own routine.
+ WRITE(MSTU(11),5000)
+ IF(PYR(0).LT.10D0) STOP
+
+C...Format for error printout.
+ 5000 FORMAT(1X,'Error: you did not link your PYEVWT routine ',
+ &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
+ &1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYUPIN
+C...Dummy copy of routine to be called by user to set up a user-defined
+C...process.
+
+ SUBROUTINE PYUPIN(ISUB,TITLE,SIGMAX)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
+ COMMON/PYINT6/PROC(0:500)
+ CHARACTER PROC*28
+ SAVE /PYDAT1/,/PYINT2/,/PYINT6/
+C...Local character variable.
+ CHARACTER*(*) TITLE
+
+C...Check that subprocess number free.
+ IF(ISUB.LT.1.OR.ISUB.GT.500.OR.ISET(ISUB).GE.0) THEN
+ WRITE(MSTU(11),5000) ISUB
+ STOP
+ ENDIF
+
+C...Fill information on new process.
+ ISET(ISUB)=11
+ COEF(ISUB,1)=SIGMAX
+ PROC(ISUB)=TITLE//' '
+
+C...Format for error output.
+ 5000 FORMAT(1X,'Error: user-defined subprocess code ',I4,
+ &' not allowed.'//1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYUPEV
+C...Dummy routine, to be replaced by user. When called from PYTHIA
+C...the subprocess number ISUB will be given, and PYUPEV is supposed
+C...to generate an event of this type, to be stored in the PYUPPR
+C...commonblock. SIGEV gives the differential cross-section associated
+C...with the event, i.e. the acceptance probability of the event is
+C...taken to be SIGEV/SIGMAX, where SIGMAX was given in the PYUPIN
+C...call.
+
+ SUBROUTINE PYUPEV(ISUB,SIGEV)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
+ SAVE /PYDAT1/,/PYUPPR/
+
+C...Stop program if this routine is ever called.
+C...You should not copy these lines to your own routine.
+ WRITE(MSTU(11),5000)
+ IF(PYR(0).LT.10D0) STOP
+ SIGEV=ISUB
+
+C...Format for error printout.
+ 5000 FORMAT(1X,'Error: you did not link your PYUPEV routine ',
+ &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
+ &1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTAUD
+C...Dummy routine, to be replaced by user, to handle the decay of a
+C...polarized tau lepton.
+C...Input:
+C...ITAU is the position where the decaying tau is stored in /PYJETS/.
+C...IORIG is the position where the mother of the tau is stored;
+C... is 0 when the mother is not stored.
+C...KFORIG is the flavour of the mother of the tau;
+C... is 0 when the mother is not known.
+C...Note that IORIG=0 does not necessarily imply KFORIG=0;
+C... e.g. in B hadron semileptonic decays the W propagator
+C... is not explicitly stored but the W code is still unambiguous.
+C...Output:
+C...NDECAY is the number of decay products in the current tau decay.
+C...These decay products should be added to the /PYJETS/ common block,
+C...in positions N+1 through N+NDECAY. For each product I you must
+C...give the flavour codes K(I,2) and the five-momenta P(I,1), P(I,2),
+C...P(I,3), P(I,4) and P(I,5). The rest will be stored automatically.
+
+ SUBROUTINE PYTAUD(ITAU,IORIG,KFORIG,NDECAY)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+C...Commonblocks.
+ COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
+ COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
+ SAVE /PYJETS/,/PYDAT1/
+
+C...Stop program if this routine is ever called.
+C...You should not copy these lines to your own routine.
+ NDECAY=ITAU+IORIG+KFORIG
+ WRITE(MSTU(11),5000)
+ IF(PYR(0).LT.10D0) STOP
+
+C...Format for error printout.
+ 5000 FORMAT(1X,'Error: you did not link your PYTAUD routine ',
+ &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
+ &1X,'Execution stopped!')
+
+ RETURN
+ END
+
+C*********************************************************************
+
+C...PYTIME
+C...Finds current date and time.
+C...Since this task is not standardized in Fortran 77, the routine
+C...is dummy, to be replaced by the user. Examples are given for
+C...the Fortran 90 routine and DEC Fortran 77, and what to do if
+C...you do not have access to suitable routines.
+
+ SUBROUTINE PYTIME(IDATI)
+
+C...Double precision and integer declarations.
+ IMPLICIT DOUBLE PRECISION(A-H, O-Z)
+ INTEGER PYK,PYCHGE,PYCOMP
+ CHARACTER*8 ATIME
+C...Local array.
+ INTEGER IDATI(6),IDTEMP(3)
+
+C...Example 0: if you do not have suitable routines.
+ DO 100 J=1,6
+ IDATI(J)=0
+ 100 CONTINUE
+
+C...Example 1: Fortran 90 routine.
+C INTEGER IVAL(8)
+C CALL DATE_AND_TIME(VALUES=IVAL)
+C IDATI(1)=IVAL(1)
+C IDATI(2)=IVAL(2)
+C IDATI(3)=IVAL(3)
+C IDATI(4)=IVAL(5)
+C IDATI(5)=IVAL(6)
+C IDATI(6)=IVAL(7)
+
+C...Example 2: DEC Fortran 77.
+C CALL IDATE(IMON,IDAY,IYEAR)
+C IDATI(1)=1900+IYEAR
+C IDATI(2)=IMON
+C IDATI(3)=IDAY
+C CALL ITIME(IHOUR,IMIN,ISEC)
+C IDATI(4)=IHOUR
+C IDATI(5)=IMIN
+C IDATI(6)=ISEC
+
+C...Example 3: DEC Fortran
+C CALL IDATE(IMON,IDAY,IYEAR)
+C IDATI(1)=1900+IYEAR
+C IDATI(2)=IMON
+C IDATI(3)=IDAY
+C CALL TIME(ATIME)
+C IHOUR=0
+C IMIN=0
+C ISEC=0
+C READ(ATIME(1:2),'(I2)') IHOUR
+C READ(ATIME(4:5),'(I2)') IMIN
+C READ(ATIME(7:8),'(I2)') ISEC
+C IDATI(4)=IHOUR
+C IDATI(5)=IMIN
+C IDATI(6)=ISEC
+
+C...Example 4: GNU LINUX libU77.
+C CALL IDATE(IDTEMP)
+C IDATI(1)=IDTEMP(3)
+C IDATI(2)=IDTEMP(2)
+C IDATI(3)=IDTEMP(1)
+C CALL ITIME(IDTEMP)
+C IDATI(4)=IDTEMP(1)
+C IDATI(5)=IDTEMP(2)
+C IDATI(6)=IDTEMP(3)
+
+ RETURN
+ END
--- /dev/null
+*
+*===program dpmjet=====================================================*
+*
+ PROGRAM DPMJET
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+
+ EXTERNAL BDANDI, BDEMFL, BDEVAP, BDMULS, BDNOPT, BDPHFL, BDPWXS,
+ & BDRNDM, BDSQZI, BLKDT1, BLKDT2, BLKDT3, BLKDT4, BLKDT5,
+ & BLKDT6, BLKDT7, COUNTR, ELPROI, HADINI, BDPREE
+
+C EXTERNAL PYDATA
+
+* event flag
+ COMMON /DTEVNO/ NEVENT,ICASCA
+
+*-----------------------------------------------------------------------
+* initialization
+
+* the following statement provides a call to DT_USRHIS(MODE=1) for
+* histogram initialization etc.
+ CALL DT_DTUINI(NEVTS,EPN,NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,IEMU)
+
+*-----------------------------------------------------------------------
+* generation of events
+
+ DO 1 IEVT=1,NEVTS
+
+* some defaults, do not change!
+ NEVENT = IEVT
+ KKMAT = -1
+ ELAB = EPN
+* uncomment if dpmjet3 is linked to particle transport code
+C ICASCA = 1
+
+************************************************************************
+* The following lines show how to select the target nucleus for runs
+* with composite targets (and fixed projectile and energy!).
+*
+* Sampling of the target nucleus (mass number NTMASS, charge NTCHAR)
+* according to the fractions defined with EMULSION input-cards.
+* The different nuclei are numbered as KKMAT = 1,2,3,... according to
+* their appearance in the input-file.
+ IF (IEMU.GT.0) THEN
+* Replace this selection by your own one if needed.
+ CALL DT_GETEMU(NTMASS,NTCHAR,KKMAT,0)
+* Kkmat has to be negative for composite targets!
+ KKMAT = -KKMAT
+ ENDIF
+************************************************************************
+
+************************************************************************
+* The following lines show how to define projectile, target and energy
+* for this event in runs with Glauber-data file pre-initialized for a
+* certain range of projectiles, targets and energies. The definitions
+* have to be within the pre-initialized parameter range.
+*
+* projectile-id (for hadron projectiles)
+C IDP = 1
+* projectile mass and charge numbers
+C NPMASS = 12
+C NPCHAR = 6
+* target mass and charge numbers
+C NTMASS = 16
+C NTCHAR = 8
+* lab energy
+C ELAB = 200.0D0
+************************************************************************
+
+************************************************************************
+* If an energy-range has been defined with the ENERGY input-card the
+* laboratory energy ELAB can be set to any value within that range. For
+* example:
+C ELO = 10.0D0
+C EHI = 1000.0D0
+C ELAB = DT_RNDM(ELAB)*(EHI-ELO)+ELO
+************************************************************************
+
+* sampling of one event
+ CALL DT_KKINC(NPMASS,NPCHAR,NTMASS,NTCHAR,IDP,ELAB,KKMAT,IREJ)
+ IF (IREJ.NE.0) GOTO 1
+
+* the following statement provides a call to DT_USRHIS(MODE=2) from
+* where the final state particles can be obtained
+
+ CALL PHO_PHIST(2000,DUM)
+
+ 1 CONTINUE
+
+*-----------------------------------------------------------------------
+* output, statistics etc.
+
+* the following statement provides a call to DT_USRHIS(MODE=3) in
+* order to calculate histograms etc.
+ CALL DT_DTUOUT
+
+ END
+*
+*===usrhis=============================================================*
+*
+CDECK ID>, DT_USRHIS
+ SUBROUTINE DT_USRHIS(MODE)
+
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+ SAVE
+*
+* COMMON /DTEVT1/ :
+* NHKK number of entries in common block
+* NEVHKK number of the event
+* ISTHKK(i) status code for entry i
+* IDHKK(i) identifier for the entry
+* (for particles: identifier according
+* to the PDG numbering scheme)
+* JMOHKK(1,i) pointer to the entry of the first mother
+* of entry i
+* JMOHKK(2,i) pointer to the entry of the second mother
+* of entry i
+* JDAHKK(1,i) pointer to the entry of the first daughter
+* of entry i
+* JDAHKK(2,i) pointer to the entry of the second daughter
+* of entry i
+* PHKK(1..3,i) 3-momentum
+* PHKK(4,i) energy
+* PHKK(5,i) mass
+*
+* event history
+
+ PARAMETER (NMXHKK=200000)
+
+ COMMON /DTEVT1/ NHKK,NEVHKK,ISTHKK(NMXHKK),IDHKK(NMXHKK),
+ & JMOHKK(2,NMXHKK),JDAHKK(2,NMXHKK),
+ & PHKK(5,NMXHKK),VHKK(4,NMXHKK),WHKK(4,NMXHKK)
+* extended event history
+ COMMON /DTEVT2/ IDRES(NMXHKK),IDXRES(NMXHKK),NOBAM(NMXHKK),
+ & IDBAM(NMXHKK),IDCH(NMXHKK),NPOINT(10),
+ & IHIST(2,NMXHKK)
+
+ GOTO (1,2,3) MODE
+
+*------------------------------------------------------------------
+*
+ 1 CONTINUE
+*
+* initializations
+*
+* Called with MODE=1 once at the beginning of the run.
+*
+ RETURN
+*
+*------------------------------------------------------------------
+*
+ 2 CONTINUE
+*
+* scoring of the present event
+*
+* Called with MODE=2 every time one event has been finished.
+*
+* The final state particles from the actual event (number NEVHKK)
+* can be found in DTEVT1 and identified by their status:
+*
+* ISTHKK(i) = 1 final state particle produced in
+* photon-/hadron-/nucleon-nucleon collisions or
+* in intranuclear cascade processes
+* -1 nucleons, deuterons, H-3, He-3, He-4 evaporated
+* from excited nucleus and
+* photons produced in nuclear deexcitation processes
+* 1001 residual nucleus (ground state)
+*
+* The types of these particles/nuclei are given in IDHKK as follows
+*
+* all final state part. except nuclei :
+* IDHKK(i)=particle identifier according to PDG numbering scheme
+* nuclei (evaporation products, and residual nucleus) :
+* IDHKK(i)=80000, IDRES(i)=mass number, IDXRES(i)=charge number
+*
+* The 4-momenta and masses can be found in PHKK (target nucleus rest frame):
+* PHKK(1..3,i) 3-momentum (p_x,p_y,p_z)
+* PHKK(4,i) energy
+* PHKK(5,i) mass
+*
+*
+*
+* Pick out the final state particles from DTEVT1 in each event for
+* instance by the following loop (NHKK=number of entries in the present
+* event) and fill your histograms
+ NPART = 0
+ DO 19 I=1,NHKK
+C IF (ABS(ISTHKK(I)).NE. -1 .AND. ABS(ISTHKK(I)) .NE. 1001 ) THEN
+ IF (ABS(ISTHKK(I)).EQ. 1) THEN
+ NPART=NPART+1
+ ENDIF
+ 19 CONTINUE
+ write(16,*) npart
+ DO 20 I=1,NHKK
+C IF (ABS(ISTHKK(I)).NE. -1 .AND. ABS(ISTHKK(I)) .NE. 1001 ) THEN
+ IF (ABS(ISTHKK(I)).EQ. 1) THEN
+ WRITE(16,100)
+ & i, isthkk(i), idhkk(i),
+ & phkk(1,i), phkk(2,i), phkk(3,i), phkk(4,i), phkk(5,i),
+ & jmohkk(1,i), jmohkk(2,i), jdahkk(1,i), jdahkk(2,i)
+ ELSEIF (ABS(ISTHKK(I)).EQ.1001) THEN
+ ENDIF
+ 20 CONTINUE
+ 100 FORMAT(3i6, 5e13.5, 4i7)
+* At any time during the run a list of the actual entries in DTEVT1 and
+* DTEVT2 can be obtained (output unit 6) by the following statement:
+C CALL DT_EVTOUT(4)
+
+ RETURN
+*
+*------------------------------------------------------------------
+*
+ 3 CONTINUE
+*
+* output/statistics/histograms etc.
+*
+* Called with MODE=3 once after all events have been sampled.
+*
+ RETURN
+
+ END