Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-02 08:51:49

0001 #ifndef COLLINEAR_DISTRIBUTION_SERVICE_H
0002 #define COLLINEAR_DISTRIBUTION_SERVICE_H
0003 
0004 /**
0005  * @file CollinearDistributionService.h
0006  * @author Valerio BERTONE (CEA Saclay)
0007  * @date July 18, 2020
0008  * @version 1.0
0009  */
0010 
0011 #include <string>
0012 
0013 #include "../beans/collinear_distribution/CollinearDistributionKinematic.h"
0014 #include "../beans/collinear_distribution/CollinearDistributionResult.h"
0015 #include "../beans/collinear_distribution/CollinearDistributionType.h"
0016 #include "../beans/List.h"
0017 #include "../ServiceObjectTyped.h"
0018 
0019 namespace PARTONS {
0020 class CollinearDistributionModule;
0021 } /* namespace PARTONS */
0022 
0023 namespace PARTONS {
0024 
0025 /**
0026  * @class CollinearDistributionService
0027  *
0028  * @brief Class to handle and compute collinear-distribution modules.
0029  */
0030 class CollinearDistributionService: public ServiceObjectTyped<CollinearDistributionKinematic, CollinearDistributionResult> {
0031 
0032 public:
0033 
0034     static const unsigned int classId; ///< Unique ID to automatically register the class in the registry.
0035 
0036     static const std::string COLLINEAR_DISTRIBUTION_SERVICE_COMPUTE_SINGLE_KINEMATIC; ///< Name of the XML task used to compute a collinear-distribution at given kinematics.
0037     static const std::string COLLINEAR_DISTRIBUTION_SERVICE_COMPUTE_MANY_KINEMATIC; ///< Name of the XML task used to compute collinear-distributions for a list of kinematics.
0038 
0039     /**
0040      * Default destructor.
0041      */
0042     virtual ~CollinearDistributionService();
0043 
0044     virtual void resolveObjectDependencies();
0045     virtual void computeTask(Task &task);
0046 
0047     /**
0048      * Computes collinear-distribution model at specific kinematics.
0049      *
0050      * @param colldistKinematic collinear-distribution kinematic.
0051      * @param pCollinearDistributionModule CollinearDistributionModule to use.
0052      * @param colldistType List of CollinearDistributionType to compute. Default: all the CollinearDistributionTypes available with the CollinearDistributionModule.
0053      * @return CollinearDistributionResult
0054      */
0055     CollinearDistributionResult computeSingleKinematic(const CollinearDistributionKinematic &colldistKinematic,
0056             CollinearDistributionModule* pCollinearDistributionModule, const List<CollinearDistributionType>& colldistType =
0057                     List<CollinearDistributionType>()) const;
0058 
0059     /**
0060      * Computes a collinear-distribution model for a list of kinematics.
0061      *
0062      * @param colldistKinematicList List of CollinearDistributionKinematics.
0063      * @param pCollinearDistributionModule CollinearDistributionModule to use for the computation.
0064      * @param colldistTypeList List of CollinearDistributionType to compute. Default: all the CollinearDistributionTypes available with the CollinearDistributionModule.
0065      * @param storeInDB Boolean to store the results and kinematics on the database. Default: false.
0066      * @return List of CollinearDistributionResults.
0067      */
0068     List<CollinearDistributionResult> computeManyKinematic(
0069             const List<CollinearDistributionKinematic> &colldistKinematicList, CollinearDistributionModule* pCollinearDistributionModule,
0070             const List<CollinearDistributionType>& colldistTypeList = List<CollinearDistributionType>());
0071 
0072     /**
0073      * Devises the CollinearDistributionModule from an automation task.
0074      *
0075      * @param task Automation task.
0076      * @return CollinearDistributionModule pointer.
0077      */
0078     CollinearDistributionModule* newCollinearDistributionModuleFromTask(const Task &task) const;
0079 
0080     /**
0081      * Devises the collinear-distribution kinematics from an automation task.
0082      *
0083      * @param task Automation task.
0084      * @return collinear-distribution kinematics.
0085      */
0086     CollinearDistributionKinematic newKinematicFromTask(const Task &task) const;
0087 
0088     /**
0089      * Devises the collinear-distribution kinematics from an automation task.
0090      *
0091      * @param task Automation task.
0092      * @return List of collinear-distribution kinematics.
0093      */
0094     List<CollinearDistributionKinematic> newListOfKinematicFromTask(const Task &task) const;
0095 
0096 protected:
0097 
0098     /**
0099      * Default constructor used by the registry.
0100      */
0101     CollinearDistributionService(const std::string &className);
0102 
0103 private:
0104 
0105     /**
0106      * Method used in the automated interface to compute collinear-distribution.
0107      * @param task Automated XML task.
0108      * @return CollinearDistributionResult object.
0109      */
0110     CollinearDistributionResult computeSingleKinematicTask(Task &task);
0111 
0112     /**
0113      * Method used in the automated interface to compute collinear-distributions for a list of kinematics.
0114      * @param task Automated XML task.
0115      * @return List of collinear-distribution results.
0116      */
0117     List<CollinearDistributionResult> computeManyKinematicTask(Task &task);
0118 
0119     /**
0120      * Method used to derive an intersection of available collinear-distribution types from the various underlying modules.
0121      * @param pCollinearDistributionModule CollinearDistributionModule used for the computation.
0122      * @param colldistTypeList List of desired collinear-distribution types to compute.
0123      * @return List of collinear-distribution types.
0124      */
0125     List<CollinearDistributionType> getFinalCollinearDistributionTypeList(CollinearDistributionModule* pCollinearDistributionModule,
0126             const List<CollinearDistributionType> &colldistTypeList) const;
0127 };
0128 
0129 } /* namespace PARTONS */
0130 
0131 #endif /* COLLINEAR_DISTRIBUTION_SERVICE_H */