[2] | 1 |
|
---|
| 2 | #include "modules/MadGraphParticleClassifier.h"
|
---|
| 3 |
|
---|
| 4 | #include "ExRootAnalysis/ExRootClasses.h"
|
---|
| 5 |
|
---|
| 6 | #include "TClass.h"
|
---|
| 7 |
|
---|
| 8 | #include <iostream>
|
---|
| 9 |
|
---|
| 10 | using namespace std;
|
---|
| 11 |
|
---|
| 12 | //------------------------------------------------------------------------------
|
---|
| 13 |
|
---|
| 14 | MadGraphParticleClassifier::MadGraphParticleClassifier() :
|
---|
| 15 | fMaxCategories(0), fIsExtendable(kFALSE)
|
---|
| 16 | {
|
---|
| 17 | }
|
---|
| 18 |
|
---|
| 19 | //------------------------------------------------------------------------------
|
---|
| 20 |
|
---|
| 21 | void MadGraphParticleClassifier::InsertParticleStatus(Int_t status)
|
---|
| 22 | {
|
---|
| 23 | fParticleStatusSet.insert(status);
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | //------------------------------------------------------------------------------
|
---|
| 27 |
|
---|
| 28 | void MadGraphParticleClassifier::InsertClassPID(const TString &className, Int_t pid)
|
---|
| 29 | {
|
---|
| 30 | Int_t category;
|
---|
| 31 | map< TString, Int_t >::const_iterator itClassNameMap;
|
---|
| 32 |
|
---|
| 33 | itClassNameMap = fClassNameMap.find(className);
|
---|
| 34 |
|
---|
| 35 | if(itClassNameMap == fClassNameMap.end())
|
---|
| 36 | {
|
---|
| 37 | category = fMaxCategories;
|
---|
| 38 | fClassNameMap[className] = category;
|
---|
| 39 | fClassNameArray.push_back(className);
|
---|
| 40 | ++fMaxCategories;
|
---|
| 41 | }
|
---|
| 42 | else
|
---|
| 43 | {
|
---|
| 44 | category = itClassNameMap->second;
|
---|
| 45 | }
|
---|
| 46 | fParticleIDMap[pid] = category;
|
---|
| 47 | }
|
---|
| 48 |
|
---|
| 49 | //------------------------------------------------------------------------------
|
---|
| 50 |
|
---|
| 51 | Int_t MadGraphParticleClassifier::GetCategory(TObject *object)
|
---|
| 52 | {
|
---|
| 53 | Int_t pidAbs, pid, status;
|
---|
| 54 | Int_t result = -1;
|
---|
| 55 |
|
---|
| 56 | if(object->IsA()->InheritsFrom(ExRootLHEFParticle::Class()))
|
---|
| 57 | {
|
---|
| 58 | ExRootLHEFParticle *particle = static_cast<ExRootLHEFParticle*>(object);
|
---|
| 59 | pid = particle->PID;
|
---|
| 60 | status = particle->Status;
|
---|
| 61 | }
|
---|
| 62 | else if(object->IsA()->InheritsFrom(ExRootGenParticle::Class()))
|
---|
| 63 | {
|
---|
| 64 | ExRootGenParticle *particle = static_cast<ExRootGenParticle*>(object);
|
---|
| 65 | pid = particle->PID;
|
---|
| 66 | status = particle->Status;
|
---|
| 67 | }
|
---|
| 68 | else
|
---|
| 69 | {
|
---|
| 70 | return -1;
|
---|
| 71 | }
|
---|
| 72 |
|
---|
| 73 | map< Int_t, Int_t >::const_iterator itParticleIDMap;
|
---|
| 74 |
|
---|
| 75 | TString className;
|
---|
| 76 |
|
---|
| 77 | if(fParticleStatusSet.find(status) == fParticleStatusSet.end()) return -1;
|
---|
| 78 |
|
---|
| 79 | itParticleIDMap = fParticleIDMap.find(pid);
|
---|
| 80 |
|
---|
| 81 | if(itParticleIDMap != fParticleIDMap.end())
|
---|
| 82 | {
|
---|
| 83 | result = itParticleIDMap->second;
|
---|
| 84 | }
|
---|
| 85 | else if(fIsExtendable)
|
---|
| 86 | {
|
---|
| 87 | pidAbs = TMath::Abs(pid);
|
---|
| 88 | className = Form("%d", pidAbs);
|
---|
| 89 | result = fMaxCategories;
|
---|
| 90 | InsertClassPID(className, pidAbs);
|
---|
| 91 | InsertClassPID(className, -pidAbs);
|
---|
| 92 | }
|
---|
| 93 |
|
---|
| 94 | return result;
|
---|
| 95 | }
|
---|
| 96 |
|
---|
| 97 | //------------------------------------------------------------------------------
|
---|
| 98 |
|
---|
| 99 | void MadGraphParticleClassifier::SetExtendable(Bool_t extendable)
|
---|
| 100 | {
|
---|
| 101 | fIsExtendable = extendable;
|
---|
| 102 | }
|
---|
| 103 |
|
---|
| 104 | //------------------------------------------------------------------------------
|
---|
| 105 |
|
---|
| 106 | Int_t MadGraphParticleClassifier::GetMaxCategories() const
|
---|
| 107 | {
|
---|
| 108 | return fMaxCategories;
|
---|
| 109 | }
|
---|
| 110 |
|
---|
| 111 | //------------------------------------------------------------------------------
|
---|
| 112 |
|
---|
| 113 | TString MadGraphParticleClassifier::GetCategoryClassName(Int_t category) const
|
---|
| 114 | {
|
---|
| 115 | return fClassNameArray[category];
|
---|
| 116 | }
|
---|
| 117 |
|
---|
| 118 | //------------------------------------------------------------------------------
|
---|