00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_XComb_H
00010 #define ThePEG_XComb_H
00011
00012
00013 #include "ThePEG/Config/ThePEG.h"
00014 #include "ThePEG/PDF/PartonExtractor.fh"
00015 #include "ThePEG/PDF/PartonBin.h"
00016 #include "ThePEG/PDF/PartonBinInstance.h"
00017 #include "ThePEG/Utilities/VSelector.h"
00018 #include "ThePEG/Utilities/ClassDescription.h"
00019 #include "ThePEG/Utilities/Maths.h"
00020 #include "ThePEG/EventRecord/Particle.h"
00021 #include "ThePEG/Handlers/EventHandler.fh"
00022 #include "ThePEG/Cuts/Cuts.fh"
00023
00024 namespace ThePEG {
00025
00042 class XComb: public Base {
00043
00044 public:
00045
00051 XComb(Energy newMaxEnergy, const cPDPair & inc,
00052 tEHPtr newEventHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW,
00053 const PBPair & newPartonBins, tCutsPtr newCuts);
00054
00058 XComb();
00059
00063 ~XComb();
00065
00066
00067
00073 const EventHandler & eventHandler() const { return *theEventHandler; }
00074
00078 tPExtrPtr pExtractor() const { return thePartonExtractor; }
00079
00083 tCutsPtr cuts() const { return theCuts; }
00084
00089 tCascHdlPtr CKKWHandler() const { return theCKKW; }
00091
00097 const cPDPair & particles() const { return theParticles; }
00098
00102 const cPDPair & partons() const { return thePartons; }
00103
00107 const PBPair & partonBins() const { return thePartonBins; }
00108
00112 Energy maxEnergy() const { return theMaxEnergy; }
00113
00120 bool empty() const { return !theEventHandler; }
00122
00126
00130 void clean();
00131
00135 void setPartonBinInstances(PBIPair pbis, Energy2 scale);
00136
00140 void prepare(const PPair &);
00141
00145 const PPair & lastParticles() const { return theLastParticles; }
00146
00150 const PPair & lastPartons() const { return theLastPartons; }
00151
00155 void lastPartons(PPair pp) { theLastPartons = pp; }
00156
00161 tSubProPtr subProcess() const { return theSub; }
00162
00167 void subProcess(tSubProPtr);
00168
00172 const PBIPair & partonBinInstances() const { return thePartonBinInstances; }
00173
00177 Energy2 lastS() const { return theLastS; }
00178
00183 void lastS(Energy2 s) { theLastS = s; }
00184
00188 Energy2 lastSHat() const { return theLastSHat; }
00189
00194 void lastSHat(Energy2 sh) { theLastSHat = sh; }
00195
00199 double lastTau() const { return lastSHat()/lastS(); }
00200
00204 double lastY() const { return theLastY; }
00205
00209 void lastY(double y) { theLastY = y; }
00210
00215 double lastP1() const { return theLastP1P2.first; }
00216
00221 double lastP2() const { return theLastP1P2.second; }
00222
00227 void lastP1P2(pair<double,double> pp) { theLastP1P2 = pp; }
00228
00233 double lastL1() const { return theLastL1L2.first; }
00234
00239 double lastL2() const { return theLastL1L2.second; }
00240
00245 void lastL1L2(pair<double,double>);
00246
00251 double lastX1() const { return theLastX1X2.first; }
00252
00257 double lastX2() const { return theLastX1X2.second; }
00258
00263 void lastX1X2(pair<double,double>);
00264
00269 double lastE1() const { return theLastE1E2.first; }
00270
00275 double lastE2() const { return theLastE1E2.second; }
00276
00281 void lastE1E2(pair<double,double>);
00282
00286 Energy2 lastScale() const { return theLastScale; }
00287
00291 void lastScale(Energy2 Q2) { theLastScale = Q2; }
00292
00297 double lastAlphaS() const { return theLastAlphaS; }
00298
00302 void lastAlphaS(double a) { theLastAlphaS = a; }
00303
00308 double lastAlphaEM() const { return theLastAlphaEM; }
00309
00313 void lastAlphaEM(double a) { theLastAlphaEM = a; }
00315
00316 protected:
00317
00321 void setPartonBinInfo();
00322
00326 void createPartonBinInstances();
00327
00328 public:
00329
00336 void persistentOutput(PersistentOStream & os) const;
00337
00343 void persistentInput(PersistentIStream & is, int version);
00345
00349 static void Init();
00350
00351 private:
00352
00356 tEHPtr theEventHandler;
00357
00361 tPExtrPtr thePartonExtractor;
00362
00366 tCascHdlPtr theCKKW;
00367
00371 tCutsPtr theCuts;
00372
00376 cPDPair theParticles;
00377
00381 cPDPair thePartons;
00382
00386 PBPair thePartonBins;
00387
00391 PBPair theParticleBins;
00392
00396 PBIPair thePartonBinInstances;
00397
00401 PPair theLastParticles;
00402
00406 PPair theLastPartons;
00407
00411 Energy2 theLastS;
00412
00416 Energy2 theLastSHat;
00417
00421 double theLastY;
00422
00426 DPair theLastP1P2;
00427
00432 DPair theLastL1L2;
00433
00438 DPair theLastX1X2;
00439
00444 DPair theLastE1E2;
00445
00449 Energy2 theLastScale;
00450
00454 double theLastAlphaS;
00455
00459 double theLastAlphaEM;
00460
00464 Energy theMaxEnergy;
00465
00471 DVector theMEInfo;
00472
00477 SubProPtr theSub;
00478
00479 private:
00480
00484 static ClassDescription<XComb> initXComb;
00485
00489 XComb & operator=(const XComb &);
00490
00491 };
00492
00499 template <>
00500 struct BaseClassTrait<XComb,1>: public ClassTraitsType {
00502 typedef Base NthBase;
00503 };
00504
00509 template <>
00510 struct ClassTraits<XComb>:
00511 public ClassTraitsBase<XComb> {
00513 static string className() { return "ThePEG::XComb"; }
00514 };
00515
00518 }
00519
00520 #endif