int main(int argc,char** argv) { // Anzahl an Schritten unsigned long numSteps = DEFAULT_STEP_COUNT; // Überprüfen, ob die Anzahl an Schritten als Argument übergeben wurde, wenn ja, Variable updaten if (argc!=2) printf("Keine Schrittanzahl übergeben, verwende Standardwert von 1.000.000 ...\n"); else { numSteps = strtoul(argv[1],NULL,0); printf("Anzahl an Integrationsschritten: %lu\n",numSteps); } // Integrationsbereich double xl[] = { 0.,0. }; double xu[] = { 1.,1. }; // LHAPDF initialisieren LHAPDF::PDF* pdf = LHAPDF::mkPDF("MSTW2008lo90cl",0); // Monte-Carlo anlegen MonteCarlo mc(2,numSteps); // Funktion setzeeen MonteCarloFunction mcFunction(diffCrossSection,2,xl,xu,pdf); mc.setIntegrationFunction(&mcFunction); // Integrieren double result,error; //mc.integrate(&result,&error); // Ergebnis + Fehler ausgeben printf("cross section: %f +/- %f\n",result,error); // Alternativer Weg über Phasenraum und Matrixelement, dazu Streuprozess-Objekt erstellen TwoTwoOneFinalMassiveHadronScattering scattering(M_H,S_PP,M_H,pdf); // Dem Prozess beitragende einzelne Parton-Prozess registrieren (jeweils Quark-Antiquark) for (int i=1;i<7;i++) { scattering.addPartonProcess(i,-i,matrixElement); scattering.addPartonProcess(-i,i,matrixElement); } // Histogramme für die Verteilungen nach Rapidität und Transversalimpuls anlegen PhaseSpaceMonteCarloFunction transverseTransformFunction(scattering.getPhaseSpace(),transverseMomentum,NULL); scattering.addHistogram("transverseMomentum","Transverse Momentum",50,0.,1000.,&transverseTransformFunction); PhaseSpaceMonteCarloFunction rapidityTransformFunction(scattering.getPhaseSpace(),rapidity,NULL); scattering.addHistogram("rapidity","rapidity",50,-5.,5.,&rapidityTransformFunction); // Integrieren und Ergebnis ausgeben scattering.getCrossSection(&result,&error,numSteps); printf("cross section: %f +/- %f\n",result,error); // Histogramme zu Root-Histogrammen konvertieren Histogram* transverseMomentumHistogram = scattering.getHistogram("transverseMomentum"); Histogram* rapidityHistogram = scattering.getHistogram("rapidity"); TH1D* transverseRootHist = transverseMomentumHistogram->getRootTH1D(); TH1D* rapidityRootHist = rapidityHistogram->getRootTH1D(); // Histogramm in Root-File abspeichern TFile* file = new TFile("hist.root","RECREATE"); transverseRootHist->Write(); rapidityRootHist->Write(); file->Close(); // Speicher freigeben delete transverseRootHist; delete rapidityRootHist; delete file; return 0; }