/* This file is part of MAUS: http:// micewww.pp.rl.ac.uk:8080/projects/maus
*
* MAUS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MAUS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MAUS. If not, see .
*/
/** @class PIDBase
* @author Celeste Pidcott, University of Warwick
* Base class containing constructors and functions required for PID
* analysis
*/
#ifndef PIDBASE_HH
#define PIDBASE_HH
#include
#include
#include
#include "TMath.h"
#include "TMathBase.h"
#include "TTimeStamp.h"
#include "TH1.h"
#include "TFile.h"
#include "TUnixSystem.h"
#include "TSystem.h"
#include "Interface/Squeak.hh"
#include "DataStructure/Global/Track.hh"
namespace MAUS {
namespace recon {
namespace global {
class PIDBase {
public:
/// Constructor to create a PDF
PIDBase(std::string variable, std::string hypothesis,
std::string unique_identifier, int XminBin, int XmaxBin,
int XnumBins, int YminBin, int YmaxBin, int YnumBins);
/// Constructor to use a PDF to perform PID analysis
PIDBase(TFile* file, std::string variable, std::string hypothesis,
int Xmin, int Xmax, int Ymin, int Ymax, int XminBin,
int XmaxBin, int YminBin, int YmaxBin);
/// Destructor
virtual ~PIDBase();
/// Get _hyp (hypothesis used by constructor that uses an existing PDF)
std::string Get_hyp();
/// Get __var_name (PID variable)
std::string Get_var_name();
/// Get filename of file containing PDF created by constructor
std::string Get_filename();
/// Get directory of file containing PDF created by constructor
std::string Get_directory();
/** @brief Virtual function to calculate log likelihood of incoming track
* corresponding to a particle hypothesis
*
* @param track The track for which the log likelihood is calculated
*
* @return Returns the log likelihood
*/
virtual double logL(MAUS::DataStructure::Global::Track* track) = 0;
/** @brief Virtual function to Fill histogram with value of PID variable
* of global track
*
* @param track The track to have its PID variable value added to PDF
*/
virtual void Fill_Hist(MAUS::DataStructure::Global::Track* track) = 0;
private:
/// Name of PID variable
std::string _var_name;
/// Particle hypothesis
std::string _hyp;
/// Unique identifier for naming root files holding PDFs when reducer is run
std::string _unique_identifier;
/// _var_name + _hyp;
std::string _varhyp;
/// Filename of file containing PDF created by constructor
std::string _filename;
/// Directory of file containing PDF created by constructor
std::string _directory;
protected:
/** @brief Virtual function (defined in derived classes) that calculates
* value of PID variable
*
* @param track The track for which the variable is calculated
*
*/
virtual std::pair Calc_Var(MAUS::DataStructure::Global::Track* track) = 0;
/// Lower and upper values of range, and number of bins in range, of PDF,
/// set in derived PID classes
int _XminBin, _XmaxBin, _XnumBins, _YminBin, _YmaxBin, _YnumBins;
/// Range to look within when performing PID
int _Xmin, _Xmax, _Ymin, _Ymax;
/// Check if we want to add one event spread over the entire histogram, to
/// avoid bins with zero entries
bool _nonZeroHistEntries;
/// File that PDF is written to
TFile *_writeFile;
};
}
}
}
#endif