CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/RecoTauTag/TauTagTools/interface/Discriminants.h

Go to the documentation of this file.
00001 #ifndef RecoTauTag_TauTagTools_PFTauDiscriminants
00002 #define RecoTauTag_TauTagTools_PFTauDiscriminants
00003 
00004 #include "RecoTauTag/TauTagTools/interface/PFTauDiscriminantBase.h"
00005 
00006 /*
00007  * Discriminants.h
00008  *
00009  * Author: Evan K. Friis, UC Davis; friis@physics.ucdavis.edu
00010  *
00011  * A non-inclusive (for now) set of discriminants to be used for TauID.
00012  *
00013  * These discriminants inherit from the base class found in PFTauDiscriminantBase.h
00014  *
00015  * The arguments given in the constructor are:
00016  *      DiscriminantBase<TYPE>(name, ROOT Branch Name, Is Required, Is Multiple, Default Value)
00017  *
00018  * Implementation is done by defining the abstract doComputatation(...) method (see src/Discriminants.cc)
00019  * The return value(s) should be inserted into 'result', a vector of type TYPE.  Note that even if the value returns
00020  * a single value, it (and only it) shoudl be inserted into the vector.  The vector is automatically cleared by the discriminant
00021  * manager.
00022  *
00023  * Note on adding discriminants: If you get weird vtable errors during linking, make sure that you have implemented the destructor! 
00024  * i.e. ~DecayMode(){}; versus ~DecayMode();
00025  *
00026  * TODO: make these macros...
00027  *
00028  */
00029 
00030 namespace PFTauDiscriminants {
00031 
00032 typedef reco::Particle::LorentzVector LorentzVector;
00033 
00034 //forward declarations
00035 
00036 class DecayMode : public DiscriminantBase<int> {
00037    public:
00038       DecayMode():DiscriminantBase<int>("DecayMode", "I", true, false, -1){};
00039       ~DecayMode(){};
00040    protected:
00041       void doComputation(PFTauDiscriminantManager* input, std::vector<int>& result);
00042 };
00043 
00044 class OutlierNCharged : public DiscriminantBase<int> {
00045    public:
00046       OutlierNCharged():DiscriminantBase<int>("OutlierNCharged", "I", true, false, -1){};
00047       ~OutlierNCharged(){};
00048    protected:
00049       void doComputation(PFTauDiscriminantManager* input, std::vector<int>& result);
00050 };
00051 
00052 class OutlierN : public DiscriminantBase<int> {
00053    public:
00054       OutlierN():DiscriminantBase<int>("OutlierN", "I", true, false, -1){};
00055       ~OutlierN(){};
00056    protected:
00057       void doComputation(PFTauDiscriminantManager* input, std::vector<int>& result);
00058 };
00059 
00060 
00061 class Pt : public DiscriminantBase<double>  {
00062    public:
00063       Pt():DiscriminantBase<double>("Pt", "D", true, false, 0.0){};
00064       ~Pt(){};
00065    protected:
00066       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00067 };
00068 
00069 class Eta : public DiscriminantBase<double>  {
00070    public:
00071       Eta():DiscriminantBase<double>("Eta", "D", true, false, 0.0){};
00072       ~Eta(){};
00073    protected:
00074       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00075 };
00076 
00077 class MainTrackPt : public DiscriminantBase<double>  {
00078    public:
00079       MainTrackPt():DiscriminantBase<double>("MainTrackPt", "D", true, false, -1){};
00080       ~MainTrackPt(){};
00081    protected:
00082       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00083 };
00084 
00085 class MainTrackAngle : public DiscriminantBase<double>  {
00086    public:
00087       MainTrackAngle():DiscriminantBase<double>("MainTrackAngle", "D", true, false, -1){};
00088       ~MainTrackAngle(){};
00089    protected:
00090       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00091 };
00092 
00093 class TrackPt : public DiscriminantBase<double> {
00094    public:
00095       TrackPt():DiscriminantBase<double>("TrackPt", "vector<double>", false, true, 0.0){};
00096       ~TrackPt(){};
00097    protected:
00098       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00099 };
00100 
00101 class PiZeroPt : public DiscriminantBase<double> {
00102    public:
00103       PiZeroPt():DiscriminantBase<double>("PiZeroPt", "vector<double>", false, true, 0.0){};
00104       ~PiZeroPt(){};
00105    protected:
00106       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00107 };
00108 
00109 // any objects in the PFTauDecayMode that were moved filtered
00110 class FilteredObjectPt : public DiscriminantBase<double> {
00111    public:
00112       FilteredObjectPt():DiscriminantBase<double>("FilteredObjectPt", "vector<double>", false, true, 0.0){};
00113       ~FilteredObjectPt(){};
00114    protected:
00115       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00116 };
00117 
00118 //  Matches to PiZeroPt, each element gives the corresponding # of photons in each PiZero
00119 class GammaOccupancy : public DiscriminantBase<double> {
00120    public:
00121       GammaOccupancy():DiscriminantBase<double>("GammaOccupancy", "vector<double>", false, true, 0.0){}
00122       ~GammaOccupancy(){};
00123    protected:
00124       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00125 };
00126 
00127 // In same order as PiZeroPt.  Can be matched to PiZeros using PiZeroPt and GammaOccupancy
00128 class GammaPt : public DiscriminantBase<double> {
00129    public:
00130       GammaPt():DiscriminantBase<double>("GammaPt", "vector<double>", false, true, 0.0){}
00131       ~GammaPt(){};
00132    protected:
00133       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00134 };
00135 
00136 
00137 class TrackAngle : public DiscriminantBase<double> {
00138    public:
00139       TrackAngle():DiscriminantBase<double>("TrackAngle", "vector<double>", false, true, 0.0){};
00140       ~TrackAngle(){};
00141    protected:
00142       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00143 };
00144 
00145 class PiZeroAngle : public DiscriminantBase<double> {
00146    public:
00147       PiZeroAngle():DiscriminantBase<double>("PiZeroAngle", "vector<double>", false, true, 0.0){};
00148       ~PiZeroAngle(){};
00149    protected:
00150       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00151 };
00152 
00153 class Dalitz : public DiscriminantBase<double> {
00154    public:
00155       Dalitz():DiscriminantBase<double>("Dalitz", "vector<double>", false, true, 0.0){};
00156       ~Dalitz(){};
00157    protected:
00158       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00159 };
00160 
00161 // takes invariant mass of all objects in signal cone
00162 class InvariantMassOfSignal : public DiscriminantBase<double> {
00163    public:
00164       InvariantMassOfSignal():DiscriminantBase<double>("InvariantMassOfSignal", "D", true, false, 0.0){};
00165       ~InvariantMassOfSignal(){};
00166    protected:
00167       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00168 };
00169 
00170 // takes invariant mass of all objects in signal cone + filtered objects
00171 class InvariantMassOfSignalWithFiltered : public DiscriminantBase<double> {
00172    public:
00173       InvariantMassOfSignalWithFiltered():DiscriminantBase<double>("InvariantMassOfSignalWithFiltered", "D", true, false, 0.0){};
00174       ~InvariantMassOfSignalWithFiltered(){};
00175    protected:
00176       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00177 };
00178 
00179 
00180 // returns vector of invariant masses of larger and larger subsets of all signal objects e.g. result[2] is
00181 // the invariant mass of the lead track with the next highest Pt object
00182 class InvariantMass : public DiscriminantBase<double> {
00183    public:
00184       InvariantMass():DiscriminantBase<double>("InvariantMass", "vector<double>", false, true, 0.0){};
00185       ~InvariantMass(){};
00186    protected:
00187       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00188 };
00189 
00190 class OutlierPt : public DiscriminantBase<double> {
00191    public:
00192       OutlierPt():DiscriminantBase<double>("OutlierPt", "vector<double>", false, true, 0.0){};
00193       ~OutlierPt(){};
00194    protected:
00195       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00196 };
00197 
00198 class OutlierSumPt : public DiscriminantBase<double> {
00199    public:
00200       OutlierSumPt():DiscriminantBase<double>("OutlierSumPt", "D", true, false, 0.0){};
00201       ~OutlierSumPt(){};
00202    protected:
00203       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00204 };
00205 
00206 class OutlierMass : public DiscriminantBase<double> {
00207    public:
00208       OutlierMass():DiscriminantBase<double>("OutlierMass", "D", true, false, 0.0){};
00209       ~OutlierMass(){};
00210    protected:
00211       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00212 };
00213 
00214 class OutlierAngle : public DiscriminantBase<double> {
00215    public:
00216       OutlierAngle():DiscriminantBase<double>("OutlierAngle", "vector<double>", false, true, 0.0){};
00217       ~OutlierAngle(){};
00218    protected:
00219       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00220 };
00221 
00222 class ChargedOutlierPt : public DiscriminantBase<double> {
00223    public:
00224       ChargedOutlierPt():DiscriminantBase<double>("ChargedOutlierPt", "vector<double>", false, true, 0.0){};
00225       ~ChargedOutlierPt(){};
00226    protected:
00227       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00228 };
00229 
00230 class ChargedOutlierSumPt : public DiscriminantBase<double> {
00231    public:
00232       ChargedOutlierSumPt():DiscriminantBase<double>("ChargedOutlierSumPt", "D", true, false, 0.0){};
00233       ~ChargedOutlierSumPt(){};
00234    protected:
00235       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00236 };
00237 
00238 class ChargedOutlierAngle : public DiscriminantBase<double> {
00239    public:
00240       ChargedOutlierAngle():DiscriminantBase<double>("ChargedOutlierAngle", "vector<double>", false, true, 0.0){};
00241       ~ChargedOutlierAngle(){};
00242    protected:
00243       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00244 };
00245 
00246 class NeutralOutlierPt : public DiscriminantBase<double> {
00247    public:
00248       NeutralOutlierPt():DiscriminantBase<double>("NeutralOutlierPt", "vector<double>", false, true, 0.0){};
00249       ~NeutralOutlierPt(){};
00250    protected:
00251       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00252 };
00253 
00254 class NeutralOutlierSumPt : public DiscriminantBase<double> {
00255    public:
00256       NeutralOutlierSumPt():DiscriminantBase<double>("NeutralOutlierSumPt", "D", true, false, 0.0){};
00257       ~NeutralOutlierSumPt(){};
00258    protected:
00259       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00260 };
00261 
00262 class NeutralOutlierAngle : public DiscriminantBase<double> {
00263    public:
00264       NeutralOutlierAngle():DiscriminantBase<double>("NeutralOutlierAngle", "vector<double>", false, true, 0.0){};
00265       ~NeutralOutlierAngle(){};
00266    protected:
00267       void doComputation(PFTauDiscriminantManager* input, std::vector<double>& result);
00268 };
00269 
00270 
00271 }
00272 #endif
00273 
00274 
00275 
00276 
00277