Project
Loading...
Searching...
No Matches
AODToHepMC.h
Go to the documentation of this file.
1// Copyright 2023-2099 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
13
14#ifndef ALICEO2_EVENTGEN_AODTOHEPMC_H_
15#define ALICEO2_EVENTGEN_AODTOHEPMC_H_
19#include <HepMC3/GenEvent.h>
20#include <HepMC3/GenParticle.h>
21#include <HepMC3/GenVertex.h>
22#include <HepMC3/GenPdfInfo.h>
23#include <HepMC3/GenHeavyIon.h>
24#include <HepMC3/GenCrossSection.h>
25#include <HepMC3/WriterAscii.h>
26#include <fstream>
27#include <list>
28
29namespace o2
30{
31namespace eventgen
32{
260 struct {
263 std::string dump{""};
267 bool onlyGen{false};
269 bool useTree{false};
271 int precision{8};
273 bool recenter{false};
286 using Track = typename Tracks::iterator;
288 using XSections = o2::aod::HepMCXSections;
291 using PdfInfos = o2::aod::HepMCPdfInfos;
293 using HeavyIons = o2::aod::HepMCHeavyIons;
295 using XSection = typename XSections::iterator;
298 using PdfInfo = typename PdfInfos::iterator;
300 using HeavyIon = typename HeavyIons::iterator;
307 using FourVector = HepMC3::FourVector;
309 using ParticlePtr = HepMC3::GenParticlePtr;
311 using VertexPtr = HepMC3::GenVertexPtr;
313 using Event = HepMC3::GenEvent;
315 using HeavyIonPtr = HepMC3::GenHeavyIonPtr;
317 using CrossSectionPtr = HepMC3::GenCrossSectionPtr;
320 using PdfInfoPtr = HepMC3::GenPdfInfoPtr;
322 using ParticleMap = std::unordered_map<long, ParticlePtr>;
324 using ParticleVector = std::vector<ParticlePtr>;
326 using ParticleList = std::list<ParticlePtr>;
328 using VertexVector = std::vector<VertexPtr>;
330 using VertexList = std::list<VertexPtr>;
332 using WriterAscii = HepMC3::WriterAscii;
334 using WriterAsciiPtr = std::shared_ptr<WriterAscii>;
345 HeavyIonPtr mIon = nullptr;
347 PdfInfoPtr mPdf = nullptr;
369 int mEventNo = 0;
371 int mLastBC = -1;
373 bool mOnlyGen = false;
375 bool mUseTree = true;
377 std::ofstream* mOutput = nullptr;
379 int mPrecision = 16;
381 bool mRecenter = false;
392 virtual void init();
397 virtual void startEvent();
404 virtual void process(Header const& collision, Tracks const& tracks);
413 virtual void process(Header const& collision,
414 XSections const& xsections,
415 PdfInfos const& pdfs,
416 HeavyIons const& heavyions);
421 virtual void endEvent();
426 virtual bool postRun()
427 {
428 enableDump("");
429 return true;
430 }
432 protected:
444 virtual void makeEvent(Header const& collision,
445 Tracks const& tracks);
451 virtual void makeHeader(Header const& header);
456 virtual void makeXSection(XSections const& xsection);
461 virtual void makePdfInfo(PdfInfos const& pdf);
466 virtual void makeHeavyIon(HeavyIons const& heavyion,
467 Header const& header);
475 virtual void makeBeams(Header const& header, const VertexPtr ip) {}
484 virtual void makeParticles(Tracks const& tracks);
491 virtual ParticlePtr getParticle(Track const& ref) const;
496 virtual bool isIgnored(Track const& track) const;
524 virtual ParticlePtr makeParticleRecursive(Track const& track,
525 Tracks const& tracks,
526 bool force = false);
538 virtual ParticlePtr makeParticle(const Track& track,
539 Int_t& motherStatus,
540 bool force) const;
548 virtual VertexPtr makeVertex(const Track& track);
553 virtual void fleshOut(Tracks const& tracks);
560 virtual void fleshOutParticle(Track const& track, Tracks const& tracks);
568 virtual void recenter(Header const& collision);
575 void enableDump(const std::string& dump);
576
577};
579} // namespace eventgen
580
581namespace framework
582{
585 {
586 static AODToHepMCPostRun inst{};
587 return inst;
588 }
589
591 : ptr{ptr_}
592 {
593 }
594
596 {
597 if (ptr != nullptr) {
598 ptr->postRun();
599 }
600 }
601
603};
604} // namespace framework
605} // namespace o2
606
607#endif /* ALICEO2_EVENTGEN_GENERATOR_H_ */
608// Local Variables:
609// mode: C++
610// End:
GLenum GLint GLint * precision
Definition glcorearb.h:1899
McParticles_001 McParticles
McCollisions_001 McCollisions
McCollisions::iterator McCollision
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
ParticleVector mBeams
Cache of vertices.
Definition AODToHepMC.h:358
struct o2::eventgen::AODToHepMC::@467 configs
virtual void makePdfInfo(PdfInfos const &pdf)
CrossSectionPtr mCrossSec
Definition AODToHepMC.h:343
virtual VertexPtr makeVertex(const Track &track)
HepMC3::GenPdfInfoPtr PdfInfoPtr
Definition AODToHepMC.h:320
HepMC3::GenCrossSectionPtr CrossSectionPtr
Definition AODToHepMC.h:317
std::list< VertexPtr > VertexList
Definition AODToHepMC.h:330
std::shared_ptr< WriterAscii > WriterAsciiPtr
Definition AODToHepMC.h:334
virtual void makeBeams(Header const &header, const VertexPtr ip)
Definition AODToHepMC.h:475
o2::aod::McCollisions Headers
Definition AODToHepMC.h:280
virtual void makeXSection(XSections const &xsection)
virtual void makeHeader(Header const &header)
virtual void recenter(Header const &collision)
std::list< ParticlePtr > ParticleList
Definition AODToHepMC.h:326
WriterAsciiPtr mWriter
Definition AODToHepMC.h:367
virtual ParticlePtr makeParticleRecursive(Track const &track, Tracks const &tracks, bool force=false)
virtual void makeHeavyIon(HeavyIons const &heavyion, Header const &header)
HepMC3::FourVector FourVector
Definition AODToHepMC.h:307
virtual void fleshOutParticle(Track const &track, Tracks const &tracks)
HepMC3::GenEvent Event
Definition AODToHepMC.h:313
HepMC3::GenParticlePtr ParticlePtr
Definition AODToHepMC.h:309
std::vector< VertexPtr > VertexVector
Definition AODToHepMC.h:328
std::vector< ParticlePtr > ParticleVector
Definition AODToHepMC.h:324
o2::aod::HepMCHeavyIons HeavyIons
Definition AODToHepMC.h:293
o2::aod::HepMCPdfInfos PdfInfos
Definition AODToHepMC.h:291
virtual void makeEvent(Header const &collision, Tracks const &tracks)
virtual void makeParticles(Tracks const &tracks)
typename PdfInfos::iterator PdfInfo
Definition AODToHepMC.h:298
typename HeavyIons::iterator HeavyIon
Definition AODToHepMC.h:300
virtual bool postRun()
Definition AODToHepMC.h:426
o2::aod::McParticles Tracks
Definition AODToHepMC.h:284
void enableDump(const std::string &dump)
virtual bool isIgnored(Track const &track) const
o2::aod::HepMCXSections XSections
Definition AODToHepMC.h:288
VertexList mVertices
Cache of particles.
Definition AODToHepMC.h:356
HepMC3::GenVertexPtr VertexPtr
Definition AODToHepMC.h:311
virtual void fleshOut(Tracks const &tracks)
virtual ParticlePtr makeParticle(const Track &track, Int_t &motherStatus, bool force) const
std::unordered_map< long, ParticlePtr > ParticleMap
Definition AODToHepMC.h:322
typename Tracks::iterator Track
Definition AODToHepMC.h:286
virtual void startEvent()
std::ofstream * mOutput
Definition AODToHepMC.h:377
HepMC3::WriterAscii WriterAscii
Definition AODToHepMC.h:332
virtual void endEvent()
HepMC3::GenHeavyIonPtr HeavyIonPtr
Definition AODToHepMC.h:315
typename XSections::iterator XSection
Definition AODToHepMC.h:295
ParticleList mOrphans
Cache of beam particles.
Definition AODToHepMC.h:360
virtual ParticlePtr getParticle(Track const &ref) const
static AODToHepMCPostRun & instance()
Definition AODToHepMC.h:584
AODToHepMCPostRun(eventgen::AODToHepMC *ptr_=nullptr)
Definition AODToHepMC.h:590
eventgen::AODToHepMC * ptr
Definition AODToHepMC.h:602