//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlMCTruthClassifier.h,v 1.2 2017/01/20 12:52:59 kind Exp $
// Copyright: 2016 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlMCTruthClassifier
#define ATLAS_AtlMCTruthClassifier
#ifndef ROOT_TObject
#include <TObject.h>
#endif

class AtlMCTruthClassifier : public TObject {

public:
    enum EParticleOrigin {
	kNonDefined        = 0,
	
	kSingleElec        = 1,
	kSingleMuon        = 2,
	kSinglePhot        = 3,
	kSingleTau         = 4,
	
	kPhotonConv        = 5,
	kDalitzDec         = 6,
	kElMagProc         = 7,
	kMu                = 8,
	kTauLep            = 9,
	ktop               = 10,
	kQuarkWeakDec      = 11,
	kWBoson            = 12,
	kZBoson            = 13,
	kHiggs             = 14,
	kHiggsMSSM         = 15,
	kHeavyBoson        = 16,
	kWBosonLRSM        = 17,
	kNuREle            = 18,
	kNuRMu             = 19,
	kNuRTau            = 20,
	kLQ                = 21,
	
	kSUSY              = 22,
	kLightMeson        = 23,
	kStrangeMeson      = 24,
	kCharmedMeson      = 25,
	kBottomMeson       = 26,
	kCCbarMeson        = 27,
	kJPsi              = 28,
	kBBbarMeson        = 29, 
	kLightBaryon       = 30,
	kStrangeBaryon     = 31,
	kCharmedBaryon     = 32, 
	kBottomBaryon      = 33,
	kPionDecay         = 34,
	kKaonDecay         = 35,
	kBremPhot          = 36,
	kPromptPhot        = 37,
	kUndrPhot          = 38,
	kISRPhot           = 39,
	kFSRPhot           = 40, 
	kNucReact          = 41,
	kPiZero            = 42,
	kDiBoson           = 43,
	kZorHeavyBoson     = 44,
	kQCD               = 45,
	kNumParticleOrigin = 46
    };
    
private:
    EParticleOrigin fParticleOrigin; // Particle origin
    
public:
    AtlMCTruthClassifier();
    AtlMCTruthClassifier(EParticleOrigin ParticleOrigin);
    virtual ~AtlMCTruthClassifier();
    virtual void Clear(Option_t *option = "");
    static const char* GetParticleOriginName(EParticleOrigin ParticleOrigin);
    static EParticleOrigin GetParticleOriginByName(const char *name);
    
    inline EParticleOrigin GetParticleOrigin() const { return fParticleOrigin; }
    inline const char* GetName() const {
	//
        // Get name of stored particle origin
	//
        return GetParticleOriginName(fParticleOrigin);
    }
    inline void Set(EParticleOrigin ParticleOrigin) {
	//
	// Set classifier
	//
	fParticleOrigin = ParticleOrigin;
    }

    inline Bool_t IsFromBottomMeson() const { return fParticleOrigin == kBottomMeson; }
    inline Bool_t IsFromWBoson()      const { return fParticleOrigin == kWBoson; }
    
    ClassDef(AtlMCTruthClassifier,1) // MC truth classifier class
};
#endif

 AtlMCTruthClassifier.h:1
 AtlMCTruthClassifier.h:2
 AtlMCTruthClassifier.h:3
 AtlMCTruthClassifier.h:4
 AtlMCTruthClassifier.h:5
 AtlMCTruthClassifier.h:6
 AtlMCTruthClassifier.h:7
 AtlMCTruthClassifier.h:8
 AtlMCTruthClassifier.h:9
 AtlMCTruthClassifier.h:10
 AtlMCTruthClassifier.h:11
 AtlMCTruthClassifier.h:12
 AtlMCTruthClassifier.h:13
 AtlMCTruthClassifier.h:14
 AtlMCTruthClassifier.h:15
 AtlMCTruthClassifier.h:16
 AtlMCTruthClassifier.h:17
 AtlMCTruthClassifier.h:18
 AtlMCTruthClassifier.h:19
 AtlMCTruthClassifier.h:20
 AtlMCTruthClassifier.h:21
 AtlMCTruthClassifier.h:22
 AtlMCTruthClassifier.h:23
 AtlMCTruthClassifier.h:24
 AtlMCTruthClassifier.h:25
 AtlMCTruthClassifier.h:26
 AtlMCTruthClassifier.h:27
 AtlMCTruthClassifier.h:28
 AtlMCTruthClassifier.h:29
 AtlMCTruthClassifier.h:30
 AtlMCTruthClassifier.h:31
 AtlMCTruthClassifier.h:32
 AtlMCTruthClassifier.h:33
 AtlMCTruthClassifier.h:34
 AtlMCTruthClassifier.h:35
 AtlMCTruthClassifier.h:36
 AtlMCTruthClassifier.h:37
 AtlMCTruthClassifier.h:38
 AtlMCTruthClassifier.h:39
 AtlMCTruthClassifier.h:40
 AtlMCTruthClassifier.h:41
 AtlMCTruthClassifier.h:42
 AtlMCTruthClassifier.h:43
 AtlMCTruthClassifier.h:44
 AtlMCTruthClassifier.h:45
 AtlMCTruthClassifier.h:46
 AtlMCTruthClassifier.h:47
 AtlMCTruthClassifier.h:48
 AtlMCTruthClassifier.h:49
 AtlMCTruthClassifier.h:50
 AtlMCTruthClassifier.h:51
 AtlMCTruthClassifier.h:52
 AtlMCTruthClassifier.h:53
 AtlMCTruthClassifier.h:54
 AtlMCTruthClassifier.h:55
 AtlMCTruthClassifier.h:56
 AtlMCTruthClassifier.h:57
 AtlMCTruthClassifier.h:58
 AtlMCTruthClassifier.h:59
 AtlMCTruthClassifier.h:60
 AtlMCTruthClassifier.h:61
 AtlMCTruthClassifier.h:62
 AtlMCTruthClassifier.h:63
 AtlMCTruthClassifier.h:64
 AtlMCTruthClassifier.h:65
 AtlMCTruthClassifier.h:66
 AtlMCTruthClassifier.h:67
 AtlMCTruthClassifier.h:68
 AtlMCTruthClassifier.h:69
 AtlMCTruthClassifier.h:70
 AtlMCTruthClassifier.h:71
 AtlMCTruthClassifier.h:72
 AtlMCTruthClassifier.h:73
 AtlMCTruthClassifier.h:74
 AtlMCTruthClassifier.h:75
 AtlMCTruthClassifier.h:76
 AtlMCTruthClassifier.h:77
 AtlMCTruthClassifier.h:78
 AtlMCTruthClassifier.h:79
 AtlMCTruthClassifier.h:80
 AtlMCTruthClassifier.h:81
 AtlMCTruthClassifier.h:82
 AtlMCTruthClassifier.h:83
 AtlMCTruthClassifier.h:84
 AtlMCTruthClassifier.h:85
 AtlMCTruthClassifier.h:86
 AtlMCTruthClassifier.h:87
 AtlMCTruthClassifier.h:88
 AtlMCTruthClassifier.h:89
 AtlMCTruthClassifier.h:90
 AtlMCTruthClassifier.h:91
 AtlMCTruthClassifier.h:92
 AtlMCTruthClassifier.h:93
 AtlMCTruthClassifier.h:94
 AtlMCTruthClassifier.h:95
 AtlMCTruthClassifier.h:96
 AtlMCTruthClassifier.h:97
 AtlMCTruthClassifier.h:98
 AtlMCTruthClassifier.h:99