diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/Root/LinkDef.h b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/Root/LinkDef.h new file mode 100644 index 0000000000000000000000000000000000000000..6c47ee3a822663523d7fc158016c937fd45c451c --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/Root/LinkDef.h @@ -0,0 +1,25 @@ +// Dear emacs, this is -*- c++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: LinkDef.h 457108 2011-09-05 09:14:09Z krasznaa $ +#ifdef __CINT__ + +#include "../TrigAnalysisInterfaces/IIBunchCrossingTool.h" + +// This pretty empty LinkDef file is here to create a small RootCore +// library out of this interface package. This is just a hack, +// in the future a better solution might be found. (This dictionary +// is not necessarily needed...) + +#pragma link off all globals; +#pragma link off all classes; +#pragma link off all functions; + +#pragma link C++ nestedclass; + +#pragma link C++ class Trig::IIBunchCrossingTool+; + +#endif // __CINT__ diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IBunchCrossingConfProvider.h b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IBunchCrossingConfProvider.h new file mode 100644 index 0000000000000000000000000000000000000000..20213ae1cadac07a03fe9f3b8a0d09a1b5d91a57 --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IBunchCrossingConfProvider.h @@ -0,0 +1,165 @@ +// Dear emacs, this is -*- c++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: IBunchCrossingConfProvider.h 511861 2012-07-31 08:40:04Z krasznaa $ +#ifndef TRIGANALYSISINTERFACES_IBUNCHCROSSINGCONFPROVIDER_H +#define TRIGANALYSISINTERFACES_IBUNCHCROSSINGCONFPROVIDER_H + +// STL include(s): +#include <vector> + +// Gaudi/Athena include(s): +#include "GaudiKernel/IAlgTool.h" + +namespace Trig { + + /// The interface provided by IBunchCrossingConfProvider + static const InterfaceID + IID_IBunchCrossingConfProvider( "Trig::IBunchCrossingConfProvider", 2, 0 ); + + /** + * @short Inteface for providing the bunch structure information + * + * To make it simpler for Athena components to save the bunch + * structure information in a uniform way, they should use this + * interface. The bunch structure configuration can come from many + * different places. Since the package already provides code for + * interpreting all these sources, it makes sense that analysts + * wouldn't have to re-do all this themselves. + * + * The idea is that the information that this interface provides has + * to be enough for fully configuring any version (especially the + * standalone one(s)) of the tool. The main use case at the moment + * being, that if someone saves this configuration into a D3PD, it + * will become possible to use a standalone version of the bunch + * crossing tool to analyse the D3PD in the same way as the analysis + * is done in Athena. + * + * This interface is not split into an Athena-dependent and + * Athena-independent class, as I don't think this functionality + * would be useful outside Athena. But who knows... + * + * All Athena tools that implement this interface have to fire an + * incident of type "BunchConfig" when their configuration is + * updated. Unfortunately I can't create a static member with this + * type name, because then the interface would stop being pure + * virtual... :-( I could define this incident type name as a + * pre-processor macro, but I don't like that solution. :-P + * + * @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> + * + * $Revision: 511861 $ + * $Date: 2012-07-31 10:40:04 +0200 (Tue, 31 Jul 2012) $ + */ + class IBunchCrossingConfProvider : public virtual IAlgTool { + + public: + /// Virtual destructor to make the vtable happy + virtual ~IBunchCrossingConfProvider() {} + + /// Gaudi interface definition + static const InterfaceID& interfaceID() { + return IID_IBunchCrossingConfProvider; + } + + /// Type for the unique identifier + typedef unsigned int configid_type; + + /// Unique identifier for the current configuration + /** + * This is a tricky part of the interface. In order to be able to save + * the bunch pattern configuration for many different setups in a + * meaningful way, we have to uniquely identify each differing + * configuration. + * + * For some backends this is easy. When reading the configuration from + * the trigger database, the unique identifier can be the bunch group key + * (BGK). But when reading the configuration of a MC file, the situation + * is a bit more tricky. + * + * In the end the only requirement with this function is that it should + * return the same ID for two identical configurations, and that it should + * return a differiod ID with a "high enough" period for different + * configurations. + * + * @returns A unique identifier for the currently loaded configuration + */ + virtual configid_type configID() const = 0; + + /// Function providing the BCIDs of the configured colliding bunches + /** + * This function returns the BCIDs of the colliding bunches in the current + * configuration. + * + * @returns The BCIDs of the colliding bunches + */ + virtual std::vector< int > configuredBCIDs() const = 0; + + /// Function providing the intensities of the configured colliding bunches + /** + * This function returns the "intensities" of the colliding bunches. It + * always gives the "intensities" in the same order as the + * configuredBCIDs() function returns the BCIDs in. The returned + * values may be context specific. + * + * @returns The "intensities" of the colliding bunches (from beam 1) + */ + virtual std::vector< float > configuredIntensitiesBeam1() const = 0; + + /// Function providing the intensities of the configured colliding bunches + /** + * This function returns the "intensities" of the colliding bunches. It + * always gives the "intensities" in the same order as the + * configuredBCIDs() function returns the BCIDs in. The returned + * values may be context specific. + * + * @returns The "intensities" of the colliding bunches (from beam 2) + */ + virtual std::vector< float > configuredIntensitiesBeam2() const = 0; + + /// Function providing the BCIDs of the configured unpaired bunches + /** + * This function returns the BCIDs of the unpaired bunches in the current + * configuration. + * + * @returns The BCIDs of the unpaired bunches from beam 1 + */ + virtual std::vector< int > configuredUnpairedBCIDsBeam1() const = 0; + + /// Function providing the BCIDs of the configured unpaired bunches + /** + * This function returns the BCIDs of the unpaired bunches in the current + * configuration. + * + * @returns The BCIDs of the unpaired bunches from beam 2 + */ + virtual std::vector< int > configuredUnpairedBCIDsBeam2() const = 0; + + /// Function providing the intensities of the configured unpaired bunches + /** + * This function returns the "intensities" of the unpaired bunches. It always + * gives the "intensities" in the same order as the configuredUnpairedBCIDs() + * function returns the BCIDs in. + * + * @returns The "intensities" of the unpaired bunches from beam 1 + */ + virtual std::vector< float > configuredUnpairedIntensitiesBeam1() const = 0; + + /// Function providing the intensities of the configured unpaired bunches + /** + * This function returns the "intensities" of the unpaired bunches. It always + * gives the "intensities" in the same order as the configuredUnpairedBCIDs() + * function returns the BCIDs in. + * + * @returns The "intensities" of the unpaired bunches from beam 2 + */ + virtual std::vector< float > configuredUnpairedIntensitiesBeam2() const = 0; + + }; // class IBunchCrossingConfProvider + +} // namespace Trig + +#endif // TRIGANALYSISINTERFACES_IBUNCHCROSSINGCONFPROVIDER_H diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IBunchCrossingTool.h b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IBunchCrossingTool.h new file mode 100644 index 0000000000000000000000000000000000000000..df30f63fc6dd390ddf4a9d26ae35a51b33c58de6 --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IBunchCrossingTool.h @@ -0,0 +1,56 @@ +// Dear emacs, this is -*- c++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: IBunchCrossingTool.h 511861 2012-07-31 08:40:04Z krasznaa $ +#ifndef TRIGANALYSISINTERFACES_IBUNCHCROSSINGTOOL_H +#define TRIGANALYSISINTERFACES_IBUNCHCROSSINGTOOL_H + +// Gaudi/Athena include(s): +#include "GaudiKernel/IAlgTool.h" + +// Local include(s): +#include "IIBunchCrossingTool.h" + +/** + * @short The common trigger namespace for trigger analysis tools + * + * This is the common namespace that all trigger analysis tools use by + * convention. + * + * $Revision: 511861 $ + * $Date: 2012-07-31 10:40:04 +0200 (Tue, 31 Jul 2012) $ + */ +namespace Trig { + + /// The interface provided by IBunchCrossingTool + static const InterfaceID IID_IBunchCrossingTool( "Trig::IBunchCrossingTool", 2, 0 ); + + /** + * @short Interface for all the bunch crossing tools + * + * This is the Athena inteface of all the bunch crossing tools. It inherits + * all its functions from Trig::IIBunchCrossingTool to provide the users + * with the same interface in Athena and outside of it. + * + * @see Trig::IIBunchCrossingTool + * + * @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> + * + * $Revision: 511861 $ + * $Date: 2012-07-31 10:40:04 +0200 (Tue, 31 Jul 2012) $ + */ + class IBunchCrossingTool : public virtual IAlgTool, + public virtual IIBunchCrossingTool { + + public: + /// Gaudi interface definition + static const InterfaceID& interfaceID() { return IID_IBunchCrossingTool; } + + }; // class IBunchCrossingTool + +} // namespace Trig + +#endif // TRIGANALYSISINTERFACES_IBUNCHCROSSINGTOOL_H diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IIBunchCrossingTool.h b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IIBunchCrossingTool.h new file mode 100644 index 0000000000000000000000000000000000000000..11cf482f2db49f92f4d3610b1a79af334828677f --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/IIBunchCrossingTool.h @@ -0,0 +1,410 @@ +// Dear emacs, this is -*- c++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: IIBunchCrossingTool.h 511861 2012-07-31 08:40:04Z krasznaa $ +#ifndef TRIGANALYSISINTERFACES_IIBUNCHCROSSINGTOOL_H +#define TRIGANALYSISINTERFACES_IIBUNCHCROSSINGTOOL_H + +// STL include(s): +#include <vector> + +namespace Trig { + + /** + * @short Framework independent interface for the tools + * + * Since some of the code has to be compilable without Athena, this interface + * takes care of making sure that that is possible. + * + * @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> + * + * $Revision: 511861 $ + * $Date: 2012-07-31 10:40:04 +0200 (Tue, 31 Jul 2012) $ + */ + class IIBunchCrossingTool { + + public: + /// Convenience type definition + typedef unsigned int bcid_type; + + /// Virtual destructor to make the vtable happy... + virtual ~IIBunchCrossingTool() {} + + /// The simplest query: Is the bunch crossing filled or not? + /** + * This is the simplest question that one can ask the configuration: + * Was the current BCID coming from a collision or not? If people + * properly use the triggers to select their events, then this function + * is not too useful, but for some special analyses it might be a good + * idea to have it. + * + * @param bcid The bcid that should be checked + * @returns <code>true</code> if the bcid was a collision bunch crossing, + * <code>false</code> otherwise + */ + virtual bool isFilled( bcid_type bcid = 0 ) const = 0; + + /// Function deciding if a given bunch crossing is in a filled train + /** + * Most of the functionality of the interface only makes sense for bunches + * which were in trains. So this function can be checked at the beginning + * of the analysis code, to make sure that the BC in question is interesting. + * + * @param bcid The bcid that should be checked + * @returns <code>true</code> if the bcid is part of a bunch train, + * <code>false</code> otherwise + */ + virtual bool isInTrain( bcid_type bcid = 0 ) const = 0; + + /// Function deciding if a given bunch crossing has an unpaired bunch + /** + * This function can be used to quickly decide whether the current event + * came from an unpaired bunch. Note that the function doesn't make a difference + * between "isolated" and "non isolated" unpaired bunches. You have to use + * the <code>gapBeforeBunch</code> function to decide how isolated an + * unpaired bunch is. + * + * @param bcid The bcid that should be checked + * @returns <code>true</code> if the bcid belongs to an unpaired bunch, + * <code>false</code> otherwise + */ + virtual bool isUnpaired( bcid_type bcid = 0 ) const = 0; + + /// Function deciding if there was a bunch from "beam 1" in this bunch crossing + /** + * This function is useful for differentiating the unpaired bunch + * crossings based on which beam provided the unpaired bunch. + * + * @param bcid The bcid that should be checked + * @returns <code>true</code> if the bcid contained a bunch from beam 1, + * <code>false</code> otherwise + */ + virtual bool isBeam1( bcid_type bcid = 0 ) const = 0; + + /// Function deciding if there was a bunch from "beam 2" in this bunch crossing + /** + * This function is useful for differentiating the unpaired bunch + * crossings based on which beam provided the unpaired bunch. + * + * @param bcid The bcid that should be checked + * @returns <code>true</code> if the bcid contained a bunch from beam 2, + * <code>false</code> otherwise + */ + virtual bool isBeam2( bcid_type bcid = 0 ) const = 0; + + /// Types of the return values of the bcIntensity function + /** + * The different information sources provide the "bunch intensity" + * information in quite different ways, and the information can mean + * different things actually. This enumeration is used to specify what + * exact type of information the user is looking for. + */ + enum BeamType { + Beam1 = 0, ///< The returned intensity should be for "beam 1" + Beam2 = 1, ///< The returned intensity should be for "beam 2" + Crossing = 2 ///< The returned intensity should describe the BC + }; + + /// Function returning the "intensity" of a given bunch(-crossing) + /** + * Some imeplementations are able to return an "intensity" per BCID. + * The exact meaning of this intensity is actually context sensitive, + * as it could mean quite different things for pile-up MC and data + * samples. + * + * The tool implementations that don't know about the bunch intensities + * will return 1.0 for filled bunch crossings and 0.0 for empty ones. + * + * @param bcid The bcid that should be checked + * @returns The "intensity" of the bcid in question + */ + virtual float bcIntensity( bcid_type bcid = 0, + BeamType type = Crossing ) const = 0; + + /// Simplified type for a given bunch crossing + /** + * This enumeration can specify what kind of bunch crossing one BCID + * belongs to. The types could easily be extended later on. + */ + enum BunchCrossingType { + Empty = 0, ///< An empty bunch far away from filled bunches + FirstEmpty = 1, ///< The first empty bunch after a train + MiddleEmpty = 2, ///< An empty BCID in the middle of a train + Single = 100, ///< This is a filled, single bunch (not in a train) + Front = 200, ///< The BCID belongs to the first few bunches in a train + Middle = 201, ///< The BCID belongs to the middle bunches in a train + Tail = 202, ///< The BCID belongs to the last few bunces in a train + Unpaired = 300 ///< This is an unpaired bunch (either beam1 or beam2) + }; + + /// Get the type of the specific bunch crossing + /** + * This function could be used as a single entry point to this tool in principle. + * It gives a summary about a specific BCID. Remember however that the exact + * meaning of many of the return values of this function are configuration + * dependent. + * + * @param bcid The bcid that should be checked + * @returns The type of the bcid in question + */ + virtual BunchCrossingType bcType( bcid_type bcid = 0 ) const = 0; + + /// Enumeration specifying the units in which to expect the bunch distance type + /** + * To make it clear for the following functions what units to interpret their + * return values in, it is possible to request their return values in different + * units. + */ + enum BunchDistanceType { + NanoSec, ///< Distance in nanoseconds + BunchCrossings, ///< Distance in units of 25 nanoseconds + FilledBunches ///< Distance in units of filled bunches (depends on filling scheme) + }; + + /// The distance of the specific bunch crossing from the front of the train + /** + * Get the distance of the specified bunch crossing from the front of the + * bunch train. If the specified bunch crossing is not part of a bunch train, + * then the function returns -1. + * + * The distance can be returned in multiple units. By default it is returned in + * nanoseconds. If one specifies BunchCrossings, then the distance is returned in + * nanosec_distance / 25. Finally, if one specifies FilledBunches, then the + * distance is returned in the units of the bunch spacing within the train. + * + * @param bcid The bcid that should be checked + * @param type The type of the requested return value + * @returns The distance of the bcid in question from the front of its bunch train + */ + virtual int distanceFromFront( bcid_type bcid = 0, + BunchDistanceType type = NanoSec ) const = 0; + /// The distance of the specific bunch crossing from the tail of the train + /** + * Get the distance of the specified bunch crossing from the tail of the + * bunch train. If the specified bunch crossing is not part of a bunch train, + * then the function returns -1. + * + * The distance can be returned in multiple units. By default it is returned in + * nanoseconds. If one specifies BunchCrossings, then the distance is returned in + * nanosec_distance / 25. Finally, if one specifies FilledBunches, then the + * distance is returned in the units of the bunch spacing within the train. + * + * @param bcid The bcid that should be checked + * @param type The type of the requested return value + * @returns The distance of the bcid in question from the tail of its bunch train + */ + virtual int distanceFromTail( bcid_type bcid = 0, + BunchDistanceType type = NanoSec ) const = 0; + + /// Gap before the train this BCID is in + /** + * Get the gap that's between the train that the specified BCID is in, and the + * previous train. This is a useful number for some jet/MET studies. + * + * Note that the function doesn't work with the FilledBunches type, as the size + * of the gaps doesn't have to be a multiple of the bunch distance within the + * trains. + * + * Returns "-1" when there's no right answer to the question. (BCID not part + * of a train.) + * + * @param bcid The bcid whose train should be investigated + * @param type The type of the requested return value + * @returns The gap before the train of the specified bcid + */ + virtual int gapBeforeTrain( bcid_type bcid = 0, + BunchDistanceType type = NanoSec ) const = 0; + /// Gap after the train this BCID is in + /** + * Get the gap that's between the train that the specified BCID is in, and the + * next train. This is a useful number for some jet/MET studies. + * + * Note that the function doesn't work with the FilledBunches type, as the size + * of the gaps doesn't have to be a multiple of the bunch distance within the + * trains. + * + * Returns "-1" when there's no right answer to the question. (BCID not part + * of a train.) + * + * @param bcid The bcid whose train should be investigated + * @param type The type of the requested return value + * @returns The gap after the train of the specified bcid + */ + virtual int gapAfterTrain( bcid_type bcid = 0, + BunchDistanceType type = NanoSec ) const = 0; + + /// Enumeration specifying what kind of bunch to use in the gap functions + /** + * The following functions can be used to calculate the gap before and after + * a specific BCID to some other bunch type. The gap can actually be wrt. + * two different types of bunches. The user may be interested between the + * space of two filled bunches, the space between an unpaired bunch and the + * previous filled bunch, the space between two unpaired bunches, or the + * space between a filled bunch and the previous unpaired bunch. + * + * The empty type is just put here for completeness. Maybe once we'll be using + * 25 ns spacing in the bunch trains, this will be a useful parameter as well. + * + * This enumeration helps in answeing all of these questions. + */ + enum BunchFillType { + CollidingBunch = 0, ///< The gap should be calculated wrt. the closest colling bunch + UnpairedBunch = 1, ///< The gap should be calculated wrt. the closest unpaired bunch + EmptyBunch = 2, ///< The gap should be calculated wrt. the closest empty bunch + UnpairedBeam1 = 3, ///< The gap should be calculated wrt. the closest unpaired bunch from beam 1 + UnpairedBeam2 = 4 ///< The gap should be calculated wrt. the closest unpaired bunch from beam 2 + }; + + /// Gap before a particular bunch + /** + * The function tells you how far the BCID in question is from the previous + * colliding bunch crossing. + * + * @param bcid The bcid that should be investigated + * @param dtype The type of the requested return value + * @param ftype The type of the previous bunch to consider + * @returns The gap before the specified bcid + */ + virtual int gapBeforeBunch( bcid_type bcid = 0, + BunchDistanceType dtype = NanoSec, + BunchFillType ftype = CollidingBunch ) const = 0; + + /// Gap after a particular bunch + /** + * The function tells you how far the BCID in question is from the next + * colliding bunch crossing. + * + * @param bcid The bcid that should be investigated + * @param dtype The type of the requested return value + * @param ftype The type of the previous bunch to consider + * @returns The gap after the specified bcid + */ + virtual int gapAfterBunch( bcid_type bcid = 0, + BunchDistanceType dtype = NanoSec, + BunchFillType ftype = CollidingBunch ) const = 0; + + /// Function returning whether the previous bunches were filled, and how + /** + * To get a concrete idea of how the bunch structure looks like in front of the + * bcid under investigation, this function returns a vector representing the + * previous bunches. + * + * The indexing is such that <code>return[0]</code> means the reference bunch, + * <code>return[1]</code> means the first bunch before that one, etc. + * The boolean value <code>true</code> means that the bunch was filled, + * <code>false</code> means that is was empty. + * + * It's really just another way of getting the same information as what + * isFilled(...) is providing... + * + * @param bcid The bcid that should be checked + * @param bunches The number of bunches about which the return value should have info + * @returns The bunch pattern before the reference bunch + */ + virtual std::vector< bool > bunchesInFront( bcid_type bcid = 0, + int bunches = 10 ) const = 0; + + /// Function returning whether the following bunches were filled, and how + /** + * This function is here to provide uniformity between the python and C++ + * implementations. It works pretty much like the bunchesInFron(...) function. + * + * The indexing is such that <code>return[0]</code> means the reference bunch, + * <code>return[1]</code> means the first bunch after that one, etc. + * The boolean value <code>true</code> means that the bunch was filled, + * <code>false</code> means that is was empty. + * + * It's really just another way of getting the same information as what + * isFilled(...) is providing... + * + * @param bcid The bcid that should be checked + * @param bunches The number of bunches about which the return value should have info + * @returns The bunch pattern after the reference bunch + */ + virtual std::vector< bool > bunchesAfter( bcid_type bcid = 0, + int bunches = 10 ) const = 0; + + /// Function returning the intensities of the bunch crossings before the reference + /** + * In some cases one does not only want to know if the previous bunches were filled, + * but also their intensities. This intensity has a context sensitive meaning, as + * the MC and data bunch intensities can't be directly compared in general, but in + * both cases the intensities are described by floating point numbers. + * + * The indexing is the same as with the bunchesInFront(...) function. + * + * @param bcid The bcid that should be checked + * @param bunches The number of bunches about which the return value should have info + * @param type The intensity "type" the user is interested in + * @returns The intensities of the bunch crossings in front of the reference BC + */ + virtual std::vector< float > bunchIntInFront( bcid_type bcid = 0, + int bunches = 10, + BeamType type = Crossing ) const = 0; + + /// Function returning the intensities of the bunch crossings after the reference + /** + * In some cases one does not only want to know if the following bunches were filled, + * but also their intensities. This intensity has a context sensitive meaning, as + * the MC and data bunch intensities can't be directly compared in general, but in + * both cases the intensities are described by floating point numbers. + * + * The indexing is the same as with the bunchesAfter(...) function. + * + * @param bcid The bcid that should be checked + * @param bunches The number of bunches about which the return value should have info + * @param type The intensity "type" the user is interested in + * @returns The intensities of the bunch crossings after of the reference BC + */ + virtual std::vector< float > bunchIntAfter( bcid_type bcid = 0, + int bunches = 10, + BeamType type = Crossing ) const = 0; + + /// Get the number of filled bunches in the current configuration + /** + * This function gives the total number of filled (colliding) bunches in the current + * configuration. This could come in handy in some circumstances. + * + * @returns The total number of filled (colliding) bunches in the machine + */ + virtual unsigned int numberOfFilledBunches() const = 0; + + /// Get the number of unpaired bunches in the current configuration + /** + * This function gives the total number of unpaired bunches in the current + * configuration. This could come in handy in some circumstances. + * + * @returns The total number of unpaired bunches in the machine + */ + virtual unsigned int numberOfUnpairedBunches() const = 0; + + /// Get the number of the bunch trains in the current configuration + /** + * This function gives the total number of bunch trains that were identified in + * the current configuration. This could come in handy in some circumstances. + * + * @returns The total number of bunch trains in the machine + */ + virtual unsigned int numberOfBunchTrains() const = 0; + + /// Get the bunch spacing in the trains + /** + * This function can be used to easily find out what was the bunch spacing in the + * bunch trains. This could come in handy in some circumstances. + * + * Note that a return value type of <code>FilledBunches</code> makes no sense, + * so the code will complain if you request the value with that parameter. + * + * @param type The type of the requested return value + * @returns The bunch spacing in the requested units + */ + virtual int bunchTrainSpacing( BunchDistanceType type = NanoSec ) const = 0; + + }; // class IIBunchCrossingTool + +} // namespace Trig + +#endif // TRIGANALYSISINTERFACES_IIBUNCHCROSSINGTOOL_H diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/TrigAnalysisInterfacesDict.h b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/TrigAnalysisInterfacesDict.h new file mode 100644 index 0000000000000000000000000000000000000000..c53602d333ec8ec346f155835b5d2244df264828 --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/TrigAnalysisInterfacesDict.h @@ -0,0 +1,17 @@ +// Dear emacs, this is -*- c++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: TrigAnalysisInterfacesDict.h 360786 2011-04-21 11:30:18Z krasznaa $ +#ifndef TRIGANALYSISINTERFACES_TRIGANALYSISINTERFACESDICT_H +#define TRIGANALYSISINTERFACES_TRIGANALYSISINTERFACESDICT_H + +// Include all the headers which contain classes for which we want to generate +// Reflex dictionaries: +#include "TrigAnalysisInterfaces/IIBunchCrossingTool.h" +#include "TrigAnalysisInterfaces/IBunchCrossingTool.h" +#include "TrigAnalysisInterfaces/IBunchCrossingConfProvider.h" + +#endif // TRIGANALYSISINTERFACES_TRIGANALYSISINTERFACESDICT_H diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/selection.xml b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/selection.xml new file mode 100644 index 0000000000000000000000000000000000000000..bbb2a393f5be5dca46f9d03d4debcf10bcf5e3ea --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/TrigAnalysisInterfaces/selection.xml @@ -0,0 +1,9 @@ +<!-- $Id: selection.xml 360786 2011-04-21 11:30:18Z krasznaa $ --> +<lcgdict> + + <!-- The interfaces for which we need a Reflex dictionary: --> + <class name="Trig::IIBunchCrossingTool" /> + <class name="Trig::IBunchCrossingTool" /> + <class name="Trig::IBunchCrossingConfProvider" /> + +</lcgdict> diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/cmt/Makefile.RootCore b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/cmt/Makefile.RootCore new file mode 100644 index 0000000000000000000000000000000000000000..5d5d3875706626e16b17de587ce05b979b99cfee --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/cmt/Makefile.RootCore @@ -0,0 +1,11 @@ +# Dear emacs, this is a -*- Makefile -*- +# Author: Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> +# TrigAnalysisInterfaces makefile for the RootCore environment + +PACKAGE = TrigAnalysisInterfaces +PACKAGE_PRELOAD = +PACKAGE_CXXFLAGS = +PACKAGE_LDFLAGS = +PACKAGE_DEP = + +include $(ROOTCOREDIR)/Makefile-common diff --git a/Trigger/TrigAnalysis/TrigAnalysisInterfaces/cmt/requirements b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/cmt/requirements new file mode 100644 index 0000000000000000000000000000000000000000..aa2c0e53ca150a04d433adbca09e88ca12176bfd --- /dev/null +++ b/Trigger/TrigAnalysis/TrigAnalysisInterfaces/cmt/requirements @@ -0,0 +1,15 @@ +package TrigAnalysisInterfaces +author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> + +# Gaudi/Athena package(s): +use AtlasPolicy AtlasPolicy-* +use GaudiInterface GaudiInterface-* External + +# Generate Reflex dictionaries for the Athena interfaces: +private +use AtlasReflex AtlasReflex-* External -no_auto_imports + +apply_pattern lcgdict dict=TrigAnalysisInterfaces selectionfile=selection.xml \ + headerfiles="../TrigAnalysisInterfaces/TrigAnalysisInterfacesDict.h" + +end_private