Fork me on GitHub

Changeset 1180bc1 in git for modules


Ignore:
Timestamp:
Jun 30, 2015, 2:38:29 PM (9 years ago)
Author:
Michele Selvaggi <michele.selvaggi@…>
Branches:
ImprovedOutputFile, Timing, dual_readout, llp, master
Children:
c627b07
Parents:
6153fb0
Message:

fixed BTagging without LHEF

Location:
modules
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • modules/BTagging.cc

    r6153fb0 r1180bc1  
    3434#include "classes/DelphesFormula.h"
    3535
    36 #include "ExRootAnalysis/ExRootResult.h"
    37 #include "ExRootAnalysis/ExRootFilter.h"
    38 #include "ExRootAnalysis/ExRootClassifier.h"
    39 
    4036#include "TMath.h"
    4137#include "TString.h"
     
    5551//------------------------------------------------------------------------------
    5652
    57 class BTaggingPartonClassifier : public ExRootClassifier
     53BTagging::BTagging() :
     54  fItJetInputArray(0)
    5855{
    59 public:
    60 
    61   BTaggingPartonClassifier() {}
    62 
    63   Int_t GetCategory(TObject *object);
    64 
    65   Double_t fEtaMax, fPTMin;
    66 };
    67 
    68 //------------------------------------------------------------------------------
    69 
    70 Int_t BTaggingPartonClassifier::GetCategory(TObject *object)
    71 {
    72   Candidate *parton = static_cast<Candidate*>(object);
    73   const TLorentzVector &momentum = parton->Momentum;
    74   Int_t pdgCode;
    75 
    76   if(momentum.Pt() <= fPTMin || TMath::Abs(momentum.Eta()) > fEtaMax) return -1;
    77 
    78   pdgCode = TMath::Abs(parton->PID);
    79   if(pdgCode != 21 && pdgCode > 5) return -1;
    80 
    81   return 0;
    82 }
    83 
    84 //------------------------------------------------------------------------------
    85 
    86 BTagging::BTagging() :
    87   fClassifier(0), fFilter(0),
    88   fItPartonInputArray(0), fItJetInputArray(0)
    89 {
    90   fClassifier = new BTaggingPartonClassifier;
    9156}
    9257
     
    9560BTagging::~BTagging()
    9661{
    97   if(fClassifier) delete fClassifier;
    9862}
    9963
     
    10872
    10973  fBitNumber = GetInt("BitNumber", 0);
    110 
    111   fDeltaR = GetDouble("DeltaR", 0.5);
    112 
    113   fClassifier->fPTMin = GetDouble("PartonPTMin", 1.0);
    114   fClassifier->fEtaMax = GetDouble("PartonEtaMax", 2.5);
    11574
    11675  // read efficiency formulas
     
    13998  // import input array(s)
    14099
    141   fPartonInputArray = ImportArray(GetString("PartonInputArray", "Delphes/partons"));
    142   fItPartonInputArray = fPartonInputArray->MakeIterator();
    143 
    144   fFilter = new ExRootFilter(fPartonInputArray);
    145 
    146100  fJetInputArray = ImportArray(GetString("JetInputArray", "FastJetFinder/jets"));
    147101  fItJetInputArray = fJetInputArray->MakeIterator();
     
    155109  DelphesFormula *formula;
    156110
    157   if(fFilter) delete fFilter;
    158111  if(fItJetInputArray) delete fItJetInputArray;
    159   if(fItPartonInputArray) delete fItPartonInputArray;
    160112
    161113  for(itEfficiencyMap = fEfficiencyMap.begin(); itEfficiencyMap != fEfficiencyMap.end(); ++itEfficiencyMap)
     
    172124  Candidate *jet;
    173125  Double_t pt, eta, phi, e;
    174   TObjArray *partonArray;
    175126  map< Int_t, DelphesFormula * >::iterator itEfficiencyMap;
    176127  DelphesFormula *formula;
    177 
    178   // select quark and gluons
    179   fFilter->Reset();
    180   partonArray = fFilter->GetSubArray(fClassifier, 0);
    181 
    182   if(partonArray == 0) return;
    183 
    184   TIter itPartonArray(partonArray);
    185128
    186129  // loop over all input jets
  • modules/BTagging.h

    r6153fb0 r1180bc1  
    3737class DelphesFormula;
    3838
    39 class ExRootFilter;
    40 class BTaggingPartonClassifier;
    41 
    4239class BTagging: public DelphesModule
    4340{
     
    5552  Int_t fBitNumber;
    5653
    57   Double_t fDeltaR;
    58 
    5954#if !defined(__CINT__) && !defined(__CLING__)
    6055  std::map< Int_t, DelphesFormula * > fEfficiencyMap; //!
    6156#endif
    6257
    63   BTaggingPartonClassifier *fClassifier; //!
    64  
    65   ExRootFilter *fFilter;
    66 
    67   TIterator *fItPartonInputArray; //!
    68  
    6958  TIterator *fItJetInputArray; //!
    70 
    71   const TObjArray *fPartonInputArray; //!
    7259 
    7360  const TObjArray *fJetInputArray; //!
  • modules/JetFlavorAssociation.cc

    r6153fb0 r1180bc1  
    151151  fPartonInputArray = ImportArray(GetString("PartonInputArray", "Delphes/partons"));
    152152  fItPartonInputArray = fPartonInputArray->MakeIterator();
     153  fPartonFilter = new ExRootFilter(fPartonInputArray);
    153154
    154155  fParticleInputArray = ImportArray(GetString("ParticleInputArray", "Delphes/allParticles"));
    155156  fItParticleInputArray = fParticleInputArray->MakeIterator();
    156157
    157   fParticleLHEFInputArray = ImportArray(GetString("ParticleLHEFInputArray", "Delphes/allParticlesLHEF"));
    158   fItParticleLHEFInputArray = fParticleLHEFInputArray->MakeIterator();
    159 
    160   fPartonFilter = new ExRootFilter(fPartonInputArray);
    161   fParticleLHEFFilter = new ExRootFilter(fParticleLHEFInputArray);
     158  try
     159  {
     160    fParticleLHEFInputArray = ImportArray(GetString("ParticleLHEFInputArray", "Delphes/allParticlesLHEF"));
     161  }
     162  catch(runtime_error &e)
     163  {
     164    fParticleLHEFInputArray = 0;
     165  }
     166
     167  if(fParticleLHEFInputArray)
     168  {
     169    fItParticleLHEFInputArray = fParticleLHEFInputArray->MakeIterator();
     170    fParticleLHEFFilter = new ExRootFilter(fParticleLHEFInputArray);
     171  }
    162172
    163173  fJetInputArray = ImportArray(GetString("JetInputArray", "FastJetFinder/jets"));
     
    183193
    184194  Candidate *jet;
    185   TObjArray *partonArray;
    186   TObjArray *partonLHEFArray;
    187 
    188   // select quark && gluons
     195  TObjArray *partonArray = 0;
     196  TObjArray *partonLHEFArray = 0;
     197
     198  // select quark and gluons
    189199  fPartonFilter->Reset();
    190200  partonArray = fPartonFilter->GetSubArray(fPartonClassifier, 0); // get the filtered parton array
    191 
    192201  if(partonArray == 0) return;
    193   TIter itPartonArray(partonArray);
    194 
    195   fParticleLHEFFilter->Reset();
    196   partonLHEFArray = fParticleLHEFFilter->GetSubArray(fParticleLHEFClassifier, 0); // get the filtered parton array
    197 
    198   if(partonLHEFArray == 0) return;
    199   TIter itPartonLHEFArray(partonLHEFArray);
    200 
     202
     203  if(fParticleLHEFInputArray)
     204  {
     205    fParticleLHEFFilter->Reset();
     206    partonLHEFArray = fParticleLHEFFilter->GetSubArray(fParticleLHEFClassifier, 0); // get the filtered parton array
     207  }
    201208  // loop over all input jets
    202209  fItJetInputArray->Reset();
     
    204211  {
    205212    // get standard flavor
    206     GetAlgoFlavor(jet, itPartonArray, itPartonLHEFArray);
    207     GetPhysicsFlavor(jet, itPartonArray, itPartonLHEFArray);
     213    GetAlgoFlavor(jet, partonArray, partonLHEFArray);
     214    if(fParticleLHEFInputArray) GetPhysicsFlavor(jet, partonArray, partonLHEFArray);
    208215  }
    209216}
     
    213220// https://cmssdt.cern.ch/SDT/lxr/source/PhysicsTools/JetMCAlgos/plugins/JetPartonMatcher.cc?v=CMSSW_7_3_0_pre1
    214221
    215 void JetFlavorAssociation::GetAlgoFlavor(Candidate *jet, TIter &itPartonArray, TIter &itPartonLHEFArray)
     222void JetFlavorAssociation::GetAlgoFlavor(Candidate *jet, TObjArray *partonArray, TObjArray *partonLHEFArray)
    216223{
    217224  float maxPt = 0;
    218   bool isGoodParton = true;
    219225  int daughterCounter = 0;
    220226  Candidate *parton, *partonLHEF;
    221227  Candidate *tempParton = 0, *tempPartonHighestPt = 0;
    222228  int pdgCode, pdgCodeMax = -1;
     229 
     230  TIter itPartonArray(partonArray);
     231  TIter itPartonLHEFArray(partonLHEFArray);
    223232
    224233  itPartonArray.Reset();
     
    232241      if(pdgCodeMax < pdgCode) pdgCodeMax = pdgCode;
    233242    }
    234 
    235     isGoodParton = true;
     243 
     244    if(!fParticleLHEFInputArray) continue;
     245 
    236246    itPartonLHEFArray.Reset();
    237247    while((partonLHEF = static_cast<Candidate *>(itPartonLHEFArray.Next())))
     
    240250         parton->PID == partonLHEF->PID &&
    241251         partonLHEF->Charge == parton->Charge)
    242       {
    243          isGoodParton = false;
     252      {     
    244253         break;
    245254      }
    246 
    247       if(!isGoodParton) continue;
    248255
    249256      // check the daugheter
     
    285292//------------------------------------------------------------------------------
    286293
    287 void JetFlavorAssociation::GetPhysicsFlavor(Candidate *jet, TIter &itPartonArray, TIter &itPartonLHEFArray)
     294void JetFlavorAssociation::GetPhysicsFlavor(Candidate *jet, TObjArray *partonArray, TObjArray *partonLHEFArray)
    288295{
    289296  int partonCounter = 0;
     
    298305  vector<Candidate *>::iterator itContaminations;
    299306
     307  TIter itPartonArray(partonArray);
     308  TIter itPartonLHEFArray(partonLHEFArray);
     309
    300310  contaminations.clear();
    301311
  • modules/JetFlavorAssociation.h

    r6153fb0 r1180bc1  
    5050  void Finish();
    5151
    52   void GetAlgoFlavor(Candidate *jet, TIter &itPartonArray, TIter &itPartonLHEFArray);
    53   void GetPhysicsFlavor(Candidate *jet, TIter &itPartonArray, TIter &itPartonLHEFArray);
     52  void GetAlgoFlavor(Candidate *jet, TObjArray *partonArray, TObjArray *partonLHEFArray);
     53  void GetPhysicsFlavor(Candidate *jet, TObjArray *partonArray, TObjArray *partonLHEFArray);
    5454
    5555private:
Note: See TracChangeset for help on using the changeset viewer.