Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-06-01 07:06:39

0001 /**
0002  \file
0003  Declaration of base class Smear::numSigmaPid.
0004  
0005  \author    Roberto Preghenella, K. Kauder
0006  \date      2020-08-17
0007  */
0008 
0009 #ifndef INCLUDE_EICSMEAR_SMEAR_NUMSIGMAPID_H
0010 #define INCLUDE_EICSMEAR_SMEAR_NUMSIGMAPID_H
0011 
0012 #include "eicsmear/smear/Smearer.h"
0013 #include "PID.h"
0014 
0015 // Based on https://gitlab.com/preghenella/pid
0016 
0017 // A smearer needs to implement
0018 //   virtual void Smear(const erhic::VirtualParticle&, ParticleMCS&) = 0;
0019 // And it has an Acceptance object. 
0020 
0021 
0022 
0023 //  Hello PID Fans:
0024 //
0025 //  This is the base class for a simple set of objects that 
0026 //  are used to evaluate various detector technology choices for the EIC.
0027 //
0028 //  The idea is simple.  Regardless of PID detector technology choice 
0029 //  one must be able to answer some simple questions.  This virtual base class
0030 //  organizes the method of asking and answering these simple questions to
0031 //  allow for efficient and apples-to-apples comparisons.
0032 //  
0033 //  The base class requires that any derived class procide responses to several queries:
0034 //   -- valid   (double eta, double p                      );
0035 //   -- numSigma(double eta, double p,        numSigmaPid::type PID);
0036 //   -- maxP    (double eta, double numSigma, numSigmaPid::type PID);
0037 //   -- minP    (double eta, double numSigma, numSigmaPid::type PID);
0038 //   -- name    ();
0039 //
0040 //  Here numSigmaPid::type is an enumerated constant set allowing one to choose pi-vs-k or k-vs-p etc...
0041 //
0042 //  The detector types that inherit from numSigmaPid will clearly have parameters that define their 
0043 //  performance and these are expected to be arguments of the constructor of those derived classes.
0044 //  For example:
0045 //     numSigmaPid* tof = new tofBarrel(radius, etaLow, etaHigh, sigmaT);
0046 //
0047 //
0048 
0049 #include <string>
0050 #include <memory>
0051     
0052 namespace Smear {
0053 
0054   /**  Base class for a simple set of objects that 
0055    *  are used to evaluate various PID detector technology choices for the EIC.
0056    */
0057   class NumSigmaPid : public Smearer {
0058   public:
0059     /**
0060        Default constructor.
0061     */
0062     NumSigmaPid();
0063 
0064     /**
0065        Destructor.
0066     */
0067     virtual ~NumSigmaPid() {}
0068     
0069     /**
0070        Smears the input ParticleMC and stores the result(s) in the ParticleMCS.
0071     */
0072     void Smear(const erhic::VirtualParticle&, ParticleMCS&);
0073 
0074     /** Set the numSigma type
0075     PID::type is an enumerated constant set 
0076     allowing one to choose pi-vs-k or k-vs-p etc.
0077     */
0078     void SetNumSigmaType( const int i );
0079 
0080     /** Get the numSigma type
0081     PID::type is an enumerated constant set 
0082     allowing one to choose pi-vs-k or k-vs-p etc.
0083      */
0084     int GetNumSigmaType( ) const;
0085 
0086     /** Needed for TObject
0087      */
0088     NumSigmaPid* Clone(const char* = "") const;
0089 
0090     /** Passing through methods of PID
0091      */
0092     bool valid  (double eta, double p ) const;
0093 
0094     /** Passing through methods of PID
0095      */
0096     double maxP (double eta, double numSigma, PID::type PID) const;
0097 
0098     /** Passing through methods of PID
0099      */
0100     double minP (double eta, double numSigma, PID::type PID) const;
0101 
0102     /** Passing through methods of PID
0103      */
0104     std::string name() const;
0105 
0106     /** Passing through methods of PID
0107      */
0108     void description() const;
0109 
0110   protected:
0111     std::shared_ptr<PID> ThePidObject;
0112     int NumSigmaType=-1;
0113     PID::type EnumType;
0114   };
0115 
0116 }
0117 #endif // INCLUDE_EICSMEAR_SMEAR_NUMSIGMAPID_H
0118