PandaRoot
FairFilteredPrimaryGenerator Class Reference

Primary generator with added event filtering capabilities. More...

#include <FairFilteredPrimaryGenerator.h>

Inheritance diagram for FairFilteredPrimaryGenerator:

Public Member Functions

 FairFilteredPrimaryGenerator ()
 Default constructor. More...
 
 FairFilteredPrimaryGenerator (const char *name, const char *title="Filtered Generator")
 Constructor with name and title. More...
 
virtual ~FairFilteredPrimaryGenerator ()
 Destructor. More...
 
virtual Bool_t Init ()
 Initialize the event generator(s) and the event (veto) filter(s). More...
 
void AndFilter (FairEvtFilter *filter)
 Register a non-veto event filter using a logical AND to connect with previously defined non-veto event filters. More...
 
void AndNotFilter (FairEvtFilter *filter)
 Register a non-veto event filter using a logical AND NOT to connect with previously defined non-veto event filters. More...
 
void OrFilter (FairEvtFilter *filter)
 Register a non-veto event filter using a logical OR to connect with previously defined non-veto event filters. More...
 
void OrNotFilter (FairEvtFilter *filter)
 Register a non-veto event filter using a logical OR NOT to connect with previously defined non-veto event filters. More...
 
void AddVetoFilter (FairEvtFilter *filter)
 Register an event veto filter. Veto filters have higher priority than regular event filters. If the event matches any veto filter, it will be skipped. More...
 
virtual Bool_t GenerateEvent (FairGenericStack *pStack)
 Calls event generators and the event filters. More...
 
TObjArray * GetListOfFilters ()
 
TObjArray * GetListOfVetoFilters ()
 
void SetFilterMaxTries (Int_t maxTries=99999)
 Define the maximum number of times that this object should try to find an event which suits all event filters. More...
 
Int_t GetNumberOfFilterMaxTries ()
 returns the maximum number of times that this object should try to find an event which suits all event filters. More...
 
Int_t GetNumberOfGeneratedEvents ()
 returns the total (accepted + rejected) number of events generated by the event generators. If no event filters are used this number is equal to the number of simulated events. More...
 
void SetEventPrintFrequency (int freq)
 Sets the frequency (accepted events) for printout (verbose>0) of accepted and generated events. More...
 
Int_t GetNumberOfFilterFailedEvents ()
 Returns the number of cases in which no matching event was found within the set max. tries. More...
 
void WriteEvtFilterStatsToRootFile (TFile *outputFile=nullptr)
 Writes all relevant event filter information to the output root file. More...
 
void SetVerbose (Int_t verbose=12)
 Set the level of commenting output. More...
 

Protected Member Functions

void AddFilter (FairEvtFilter *filter, FairEvtFilter::LogicOp op, Bool_t negateFilter)
 Registers a regular (non-veto) filter. This method is not supposed to be directly used by the user. See public methods for user interfaces to this method. More...
 

Protected Attributes

TObjArray * fVetoFilterList
 List of registered veto filters. More...
 
TIterator * fVetoFilterIter
 Iterator over veto filter list. More...
 
TObjArray * fFilterList
 List of registered filters. More...
 
TIterator * fFilterIter
 Iterator over filter list. More...
 
FairEvtFilterParams fEvtFilterStat
 Contains the statistics of the event filtering process. More...
 
Int_t fVerbose
 Level of commenting output, 0 means no output, higher gives more output. More...
 
Bool_t fEventVetoFilterActive
 returns kTRUE if any event veto filter is registered. More...
 
Bool_t fEventFilterActive
 returns kTRUE if any non-veto event filter is registerd. More...
 
std::vector< Bool_t > filterAcceptEvent
 Vector containing the results of the EventMatches methods for every registered non-veto event filter in the corresponding order. More...
 
std::vector< UInt_t > fLogicalFilterOperation
 vector containing the logical operations with which the outputs of the non-veto event filters should be combined. More...
 
std::vector< Bool_t > fFilterNegation
 vector determining whether the output of a non-veto event filter should be negated or not. More...
 
Int_t fEventNrFiltered
 Event number (Set by the filtered primary generator. More...
 
Int_t fEventPrintFreq
 Print frequency for filtered events. More...
 

Detailed Description

Primary generator with added event filtering capabilities.

Author
Martin J. Galuska <martin [dot] j [dot] galuska (at) physik [dot] uni (minus) giessen [dot] de>
Katja Kleeberg

This class adds event filtering capabilities to FairPrimaryGenerator which is used internally for handling the event generators and so on. The event filtering is performed after the event generation and before the particle transport through the detector model.

From the description of FairPrimaryGenerator:

The FairFilteredPrimaryGenerator is responsible for the handling of the MC input. Several input generators can be registered to it; these have to be derived from the FairGenerator class. The FairFilteredPrimaryGenerator defines position and (optionally) smearing of the primary vertex. This class should be instantiated only once.

Definition at line 48 of file FairFilteredPrimaryGenerator.h.

Constructor & Destructor Documentation

◆ FairFilteredPrimaryGenerator() [1/2]

FairFilteredPrimaryGenerator::FairFilteredPrimaryGenerator ( )

Default constructor.

Referenced by AddFilter().

◆ FairFilteredPrimaryGenerator() [2/2]

FairFilteredPrimaryGenerator::FairFilteredPrimaryGenerator ( const char *  name,
const char *  title = "Filtered Generator" 
)

Constructor with name and title.

◆ ~FairFilteredPrimaryGenerator()

virtual FairFilteredPrimaryGenerator::~FairFilteredPrimaryGenerator ( )
virtual

Destructor.

Member Function Documentation

◆ AddFilter()

void FairFilteredPrimaryGenerator::AddFilter ( FairEvtFilter filter,
FairEvtFilter::LogicOp  op,
Bool_t  negateFilter 
)
inlineprotected

Registers a regular (non-veto) filter. This method is not supposed to be directly used by the user. See public methods for user interfaces to this method.

Definition at line 207 of file FairFilteredPrimaryGenerator.h.

References FairFilteredPrimaryGenerator().

Referenced by AndFilter(), AndNotFilter(), OrFilter(), and OrNotFilter().

208  {
209  if (!fFilterList) {
210  std::cout << "Empty fFilterList pointer ! \n";
211  return;
212  }
213  fFilterList->Add(filter);
214  fEventFilterActive = kTRUE;
215  // add the settings for every new filter
216  if (fFilterList->GetEntriesFast() != 1) {
217  fLogicalFilterOperation.push_back(op);
218  }
219  fFilterNegation.push_back(negateFilter);
220  }
Bool_t fEventFilterActive
returns kTRUE if any non-veto event filter is registerd.
std::vector< UInt_t > fLogicalFilterOperation
vector containing the logical operations with which the outputs of the non-veto event filters should ...
TObjArray * fFilterList
List of registered filters.
std::vector< Bool_t > fFilterNegation
vector determining whether the output of a non-veto event filter should be negated or not...

◆ AddVetoFilter()

void FairFilteredPrimaryGenerator::AddVetoFilter ( FairEvtFilter filter)
inline

Register an event veto filter. Veto filters have higher priority than regular event filters. If the event matches any veto filter, it will be skipped.

Definition at line 76 of file FairFilteredPrimaryGenerator.h.

References fEventVetoFilterActive, fVetoFilterList, and GenerateEvent().

77  {
78  if (!fVetoFilterList) {
79  std::cout << "Empty fFilterList pointer ! \n";
80  return;
81  }
82  fVetoFilterList->Add(filter);
83  fEventVetoFilterActive = kTRUE;
84  }
TObjArray * fVetoFilterList
List of registered veto filters.
Bool_t fEventVetoFilterActive
returns kTRUE if any event veto filter is registered.

◆ AndFilter()

void FairFilteredPrimaryGenerator::AndFilter ( FairEvtFilter filter)
inline

Register a non-veto event filter using a logical AND to connect with previously defined non-veto event filters.

Definition at line 64 of file FairFilteredPrimaryGenerator.h.

References AddFilter(), and FairEvtFilter::kAnd.

64 { AddFilter(filter, FairEvtFilter::kAnd, kFALSE); }
void AddFilter(FairEvtFilter *filter, FairEvtFilter::LogicOp op, Bool_t negateFilter)
Registers a regular (non-veto) filter. This method is not supposed to be directly used by the user...

◆ AndNotFilter()

void FairFilteredPrimaryGenerator::AndNotFilter ( FairEvtFilter filter)
inline

Register a non-veto event filter using a logical AND NOT to connect with previously defined non-veto event filters.

Definition at line 67 of file FairFilteredPrimaryGenerator.h.

References AddFilter(), and FairEvtFilter::kAnd.

67 { AddFilter(filter, FairEvtFilter::kAnd, kTRUE); }
void AddFilter(FairEvtFilter *filter, FairEvtFilter::LogicOp op, Bool_t negateFilter)
Registers a regular (non-veto) filter. This method is not supposed to be directly used by the user...

◆ GenerateEvent()

virtual Bool_t FairFilteredPrimaryGenerator::GenerateEvent ( FairGenericStack *  pStack)
virtual

Calls event generators and the event filters.

To be called at the beginning of each event from FairMCApplication. Generates an event vertex and calls the ReadEvent methods from the registered generators. Calls defined event (veto) filters to decide whether to process the event or to call the event generators again.

Parameters
pStackThe particle stack
Returns
kTRUE if successful, kFALSE if not

Referenced by AddVetoFilter().

◆ GetListOfFilters()

TObjArray* FairFilteredPrimaryGenerator::GetListOfFilters ( )
inline

Definition at line 98 of file FairFilteredPrimaryGenerator.h.

References fFilterList.

98 { return fFilterList; }
TObjArray * fFilterList
List of registered filters.

◆ GetListOfVetoFilters()

TObjArray* FairFilteredPrimaryGenerator::GetListOfVetoFilters ( )
inline

Definition at line 100 of file FairFilteredPrimaryGenerator.h.

References fVetoFilterList.

100 { return fVetoFilterList; }
TObjArray * fVetoFilterList
List of registered veto filters.

◆ GetNumberOfFilterFailedEvents()

Int_t FairFilteredPrimaryGenerator::GetNumberOfFilterFailedEvents ( )
inline

Returns the number of cases in which no matching event was found within the set max. tries.

This method returns 0 if everything works fine. If it returns a value >0 it means that you should set a higher limit in SetFilterMaxTries. If it returns a value which is equal to the number of events that you requested, it means that either the max. number of tries is set way too low or that the generator does not create such events that you are interested in or that your event filters cannot be satisfied at all (logical error).

Definition at line 131 of file FairFilteredPrimaryGenerator.h.

References fEvtFilterStat, and FairEvtFilterParams::fFailedFilterEvents.

Referenced by WriteEvtFilterStatsToRootFile().

FairEvtFilterParams fEvtFilterStat
Contains the statistics of the event filtering process.

◆ GetNumberOfFilterMaxTries()

Int_t FairFilteredPrimaryGenerator::GetNumberOfFilterMaxTries ( )
inline

returns the maximum number of times that this object should try to find an event which suits all event filters.

Definition at line 114 of file FairFilteredPrimaryGenerator.h.

References fEvtFilterStat, and FairEvtFilterParams::fFilterMaxTries.

FairEvtFilterParams fEvtFilterStat
Contains the statistics of the event filtering process.

◆ GetNumberOfGeneratedEvents()

Int_t FairFilteredPrimaryGenerator::GetNumberOfGeneratedEvents ( )
inline

returns the total (accepted + rejected) number of events generated by the event generators. If no event filters are used this number is equal to the number of simulated events.

Definition at line 118 of file FairFilteredPrimaryGenerator.h.

References fEvtFilterStat, and FairEvtFilterParams::fGeneratedEvents.

Referenced by WriteEvtFilterStatsToRootFile().

FairEvtFilterParams fEvtFilterStat
Contains the statistics of the event filtering process.

◆ Init()

virtual Bool_t FairFilteredPrimaryGenerator::Init ( )
virtual

Initialize the event generator(s) and the event (veto) filter(s).

◆ OrFilter()

void FairFilteredPrimaryGenerator::OrFilter ( FairEvtFilter filter)
inline

Register a non-veto event filter using a logical OR to connect with previously defined non-veto event filters.

Definition at line 70 of file FairFilteredPrimaryGenerator.h.

References AddFilter(), and FairEvtFilter::kOr.

70 { AddFilter(filter, FairEvtFilter::kOr, kFALSE); }
void AddFilter(FairEvtFilter *filter, FairEvtFilter::LogicOp op, Bool_t negateFilter)
Registers a regular (non-veto) filter. This method is not supposed to be directly used by the user...

◆ OrNotFilter()

void FairFilteredPrimaryGenerator::OrNotFilter ( FairEvtFilter filter)
inline

Register a non-veto event filter using a logical OR NOT to connect with previously defined non-veto event filters.

Definition at line 73 of file FairFilteredPrimaryGenerator.h.

References AddFilter(), and FairEvtFilter::kOr.

73 { AddFilter(filter, FairEvtFilter::kOr, kTRUE); }
void AddFilter(FairEvtFilter *filter, FairEvtFilter::LogicOp op, Bool_t negateFilter)
Registers a regular (non-veto) filter. This method is not supposed to be directly used by the user...

◆ SetEventPrintFrequency()

void FairFilteredPrimaryGenerator::SetEventPrintFrequency ( int  freq)
inline

Sets the frequency (accepted events) for printout (verbose>0) of accepted and generated events.

Definition at line 121 of file FairFilteredPrimaryGenerator.h.

References fEventPrintFreq.

121 { fEventPrintFreq = freq; }
Int_t fEventPrintFreq
Print frequency for filtered events.

◆ SetFilterMaxTries()

void FairFilteredPrimaryGenerator::SetFilterMaxTries ( Int_t  maxTries = 99999)
inline

Define the maximum number of times that this object should try to find an event which suits all event filters.

Definition at line 103 of file FairFilteredPrimaryGenerator.h.

References fEvtFilterStat, and FairEvtFilterParams::fFilterMaxTries.

104  {
105  if (maxTries > 0) {
106  fEvtFilterStat.fFilterMaxTries = maxTries;
107  std::cout << "FairFilteredPrimaryGenerator: maxTries is now set to " << fEvtFilterStat.fFilterMaxTries << "\n";
108  } else {
109  std::cout << "\n\n\n -WARNING from FairFilteredPrimaryGenerator: maxTries must be a positive number! Check your SetFilterMaxTries call!\n\n\n";
110  }
111  }
FairEvtFilterParams fEvtFilterStat
Contains the statistics of the event filtering process.

◆ SetVerbose()

void FairFilteredPrimaryGenerator::SetVerbose ( Int_t  verbose = 12)
inline

Set the level of commenting output.

Parameters
verboseLevel of commenting output, 0 means no output, higher gives more output.

Definition at line 154 of file FairFilteredPrimaryGenerator.h.

References fVerbose.

155  {
156  if (verbose >= 0) {
157  fVerbose = verbose;
158  std::cout << "FairFilteredPrimaryGenerator: fVerbose is now set to " << verbose << "\n";
159  } else {
160  std::cout << "\n\n\n -WARNING from FairFilteredPrimaryGenerator: verbose must be a positive number! Check your SetVerbose call!\n\n\n";
161  }
162  }
Int_t fVerbose
Level of commenting output, 0 means no output, higher gives more output.

◆ WriteEvtFilterStatsToRootFile()

void FairFilteredPrimaryGenerator::WriteEvtFilterStatsToRootFile ( TFile *  outputFile = nullptr)
inline

Writes all relevant event filter information to the output root file.

Definition at line 134 of file FairFilteredPrimaryGenerator.h.

References fEvtFilterStat, GetNumberOfFilterFailedEvents(), and GetNumberOfGeneratedEvents().

135  {
136  std::cout << "\n\nGenerated Events = " << GetNumberOfGeneratedEvents() << "\n";
137  if (0 < GetNumberOfFilterFailedEvents()) {
138  std::cout << "WARNING: Number of events where the event filter FAILED " << GetNumberOfFilterFailedEvents() << "\n\n\n";
139  std::cout << "Random events were accepted to avoid infinite loops. \n";
140  std::cout << "Try increasing the max. number of tries or change your filter (maybe the generators do not produce such events as you want).\n\n";
141  }
142  if (outputFile == nullptr)
143  outputFile = FairRunSim::Instance()->GetOutputFile();
144  outputFile->cd();
145  outputFile->mkdir("FairEvtFilter");
146  outputFile->cd("FairEvtFilter");
147  fEvtFilterStat.Write();
148  outputFile->cd();
149  }
Int_t GetNumberOfGeneratedEvents()
returns the total (accepted + rejected) number of events generated by the event generators. If no event filters are used this number is equal to the number of simulated events.
Int_t GetNumberOfFilterFailedEvents()
Returns the number of cases in which no matching event was found within the set max. tries.
FairEvtFilterParams fEvtFilterStat
Contains the statistics of the event filtering process.

Member Data Documentation

◆ fEventFilterActive

Bool_t FairFilteredPrimaryGenerator::fEventFilterActive
protected

returns kTRUE if any non-veto event filter is registerd.

Definition at line 181 of file FairFilteredPrimaryGenerator.h.

◆ fEventNrFiltered

Int_t FairFilteredPrimaryGenerator::fEventNrFiltered
protected

Event number (Set by the filtered primary generator.

Definition at line 201 of file FairFilteredPrimaryGenerator.h.

◆ fEventPrintFreq

Int_t FairFilteredPrimaryGenerator::fEventPrintFreq
protected

Print frequency for filtered events.

Definition at line 204 of file FairFilteredPrimaryGenerator.h.

Referenced by SetEventPrintFrequency().

◆ fEventVetoFilterActive

Bool_t FairFilteredPrimaryGenerator::fEventVetoFilterActive
protected

returns kTRUE if any event veto filter is registered.

Definition at line 179 of file FairFilteredPrimaryGenerator.h.

Referenced by AddVetoFilter().

◆ fEvtFilterStat

FairEvtFilterParams FairFilteredPrimaryGenerator::fEvtFilterStat
protected

Contains the statistics of the event filtering process.

Definition at line 175 of file FairFilteredPrimaryGenerator.h.

Referenced by GetNumberOfFilterFailedEvents(), GetNumberOfFilterMaxTries(), GetNumberOfGeneratedEvents(), SetFilterMaxTries(), and WriteEvtFilterStatsToRootFile().

◆ fFilterIter

TIterator* FairFilteredPrimaryGenerator::fFilterIter
protected

Iterator over filter list.

Definition at line 172 of file FairFilteredPrimaryGenerator.h.

◆ fFilterList

TObjArray* FairFilteredPrimaryGenerator::fFilterList
protected

List of registered filters.

Definition at line 170 of file FairFilteredPrimaryGenerator.h.

Referenced by GetListOfFilters().

◆ fFilterNegation

std::vector<Bool_t> FairFilteredPrimaryGenerator::fFilterNegation
protected

vector determining whether the output of a non-veto event filter should be negated or not.

The vector grows automatically with every added non-veto event filter. A kTRUE entry at position i in the vector negates the i. filter's output, kFALSE entries do not negate.

Definition at line 198 of file FairFilteredPrimaryGenerator.h.

◆ filterAcceptEvent

std::vector<Bool_t> FairFilteredPrimaryGenerator::filterAcceptEvent
protected

Vector containing the results of the EventMatches methods for every registered non-veto event filter in the corresponding order.

The content of the vector is overwritten for each generated event.

Definition at line 185 of file FairFilteredPrimaryGenerator.h.

◆ fLogicalFilterOperation

std::vector<UInt_t> FairFilteredPrimaryGenerator::fLogicalFilterOperation
protected

vector containing the logical operations with which the outputs of the non-veto event filters should be combined.

The vector grows automatically with every added non-veto event filter. It is used to combine multiple filters via && or ||. The expression is evaluated sequentally from the first registered filter to the last one disregarding operator priorities.

Definition at line 192 of file FairFilteredPrimaryGenerator.h.

◆ fVerbose

Int_t FairFilteredPrimaryGenerator::fVerbose
protected

Level of commenting output, 0 means no output, higher gives more output.

Definition at line 177 of file FairFilteredPrimaryGenerator.h.

Referenced by SetVerbose().

◆ fVetoFilterIter

TIterator* FairFilteredPrimaryGenerator::fVetoFilterIter
protected

Iterator over veto filter list.

Definition at line 168 of file FairFilteredPrimaryGenerator.h.

◆ fVetoFilterList

TObjArray* FairFilteredPrimaryGenerator::fVetoFilterList
protected

List of registered veto filters.

Definition at line 166 of file FairFilteredPrimaryGenerator.h.

Referenced by AddVetoFilter(), and GetListOfVetoFilters().


The documentation for this class was generated from the following file: