Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/FastJetFinder.cc

    r341014c r35807af  
    1717 */
    1818
     19
    1920/** \class FastJetFinder
    2021 *
     
    3132#include "classes/DelphesFormula.h"
    3233
     34#include "ExRootAnalysis/ExRootResult.h"
     35#include "ExRootAnalysis/ExRootFilter.h"
    3336#include "ExRootAnalysis/ExRootClassifier.h"
    34 #include "ExRootAnalysis/ExRootFilter.h"
    35 #include "ExRootAnalysis/ExRootResult.h"
    36 
     37
     38#include "TMath.h"
     39#include "TString.h"
     40#include "TFormula.h"
     41#include "TRandom3.h"
     42#include "TObjArray.h"
    3743#include "TDatabasePDG.h"
    38 #include "TFormula.h"
    3944#include "TLorentzVector.h"
    40 #include "TMath.h"
    41 #include "TObjArray.h"
    42 #include "TRandom3.h"
    43 #include "TString.h"
    4445
    4546#include <algorithm>
     47#include <stdexcept>
    4648#include <iostream>
    4749#include <sstream>
    48 #include <stdexcept>
    4950#include <vector>
    5051
     52#include "fastjet/PseudoJet.hh"
     53#include "fastjet/JetDefinition.hh"
    5154#include "fastjet/ClusterSequence.hh"
     55#include "fastjet/Selector.hh"
    5256#include "fastjet/ClusterSequenceArea.hh"
    53 #include "fastjet/JetDefinition.hh"
    54 #include "fastjet/PseudoJet.hh"
    55 #include "fastjet/Selector.hh"
    5657#include "fastjet/tools/JetMedianBackgroundEstimator.hh"
    5758
     59#include "fastjet/plugins/SISCone/fastjet/SISConePlugin.hh"
     60#include "fastjet/plugins/CDFCones/fastjet/CDFMidPointPlugin.hh"
    5861#include "fastjet/plugins/CDFCones/fastjet/CDFJetCluPlugin.hh"
    59 #include "fastjet/plugins/CDFCones/fastjet/CDFMidPointPlugin.hh"
    60 #include "fastjet/plugins/SISCone/fastjet/SISConePlugin.hh"
    61 
    62 #include "fastjet/contribs/Nsubjettiness/ExtraRecombiners.hh"
     62
     63#include "fastjet/contribs/Nsubjettiness/Nsubjettiness.hh"
    6364#include "fastjet/contribs/Nsubjettiness/Njettiness.hh"
    6465#include "fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh"
    65 #include "fastjet/contribs/Nsubjettiness/Nsubjettiness.hh"
     66#include "fastjet/contribs/Nsubjettiness/ExtraRecombiners.hh"
    6667
    6768#include "fastjet/contribs/ValenciaPlugin/ValenciaPlugin.hh"
    6869
    69 #include "fastjet/contribs/RecursiveTools/SoftDrop.hh"
    7070#include "fastjet/tools/Filter.hh"
    7171#include "fastjet/tools/Pruner.hh"
     72#include "fastjet/contribs/RecursiveTools/SoftDrop.hh"
    7273
    7374using namespace std;
    7475using namespace fastjet;
    7576using namespace fastjet::contrib;
     77
    7678
    7779//------------------------------------------------------------------------------
     
    8183  fDefinition(0), fAreaDefinition(0), fItInputArray(0)
    8284{
     85
    8386}
    8487
     
    8790FastJetFinder::~FastJetFinder()
    8891{
     92
    8993}
    9094
     
    116120  fJetPTMin = GetDouble("JetPTMin", 10.0);
    117121
     122 
    118123  //-- N(sub)jettiness parameters --
    119124
     
    122127  fAxisMode = GetInt("AxisMode", 1);
    123128  fRcutOff = GetDouble("RcutOff", 0.8); // used only if Njettiness is used as jet clustering algo (case 8)
    124   fN = GetInt("N", 2); // used only if Njettiness is used as jet clustering algo (case 8)
     129  fN = GetInt("N", 2);                  // used only if Njettiness is used as jet clustering algo (case 8)
    125130
    126131  //-- Exclusive clustering for e+e- collisions --
    127 
    128   fNJets = GetInt("NJets", 2);
     132 
     133  fNJets = GetInt("NJets",2);
    129134  fExclusiveClustering = GetBool("ExclusiveClustering", false);
    130135
    131136  //-- Valencia Linear Collider algorithm
    132 
    133137  fGamma = GetDouble("Gamma", 1.0);
    134138  //fBeta parameter see above
    135 
     139 
    136140  fMeasureDef = new NormalizedMeasure(fBeta, fParameterR);
    137 
     141   
    138142  switch(fAxisMode)
    139143  {
    140   default:
    141   case 1:
    142     fAxesDef = new WTA_KT_Axes();
    143     break;
    144   case 2:
    145     fAxesDef = new OnePass_WTA_KT_Axes();
    146     break;
    147   case 3:
    148     fAxesDef = new KT_Axes();
    149     break;
    150   case 4:
    151     fAxesDef = new OnePass_KT_Axes();
    152   }
     144    default:
     145      case 1:
     146        fAxesDef = new WTA_KT_Axes();
     147        break;
     148      case 2:
     149        fAxesDef = new OnePass_WTA_KT_Axes();
     150        break;
     151      case 3:
     152        fAxesDef = new KT_Axes();
     153        break;
     154      case 4:
     155        fAxesDef = new OnePass_KT_Axes();
     156   }
    153157
    154158  //-- Trimming parameters --
    155 
     159 
    156160  fComputeTrimming = GetBool("ComputeTrimming", false);
    157161  fRTrim = GetDouble("RTrim", 0.2);
    158162  fPtFracTrim = GetDouble("PtFracTrim", 0.05);
     163 
    159164
    160165  //-- Pruning parameters --
    161 
     166 
    162167  fComputePruning = GetBool("ComputePruning", false);
    163168  fZcutPrun = GetDouble("ZcutPrun", 0.1);
    164169  fRcutPrun = GetDouble("RcutPrun", 0.5);
    165170  fRPrun = GetDouble("RPrun", 0.8);
    166 
     171 
    167172  //-- SoftDrop parameters --
    168 
    169   fComputeSoftDrop = GetBool("ComputeSoftDrop", false);
    170   fBetaSoftDrop = GetDouble("BetaSoftDrop", 0.0);
     173 
     174  fComputeSoftDrop     = GetBool("ComputeSoftDrop", false);
     175  fBetaSoftDrop        = GetDouble("BetaSoftDrop", 0.0);
    171176  fSymmetryCutSoftDrop = GetDouble("SymmetryCutSoftDrop", 0.1);
    172   fR0SoftDrop = GetDouble("R0SoftDrop=", 0.8);
     177  fR0SoftDrop= GetDouble("R0SoftDrop=", 0.8);
     178 
    173179
    174180  // ---  Jet Area Parameters ---
    175 
    176181  fAreaAlgorithm = GetInt("AreaAlgorithm", 0);
    177182  fComputeRho = GetBool("ComputeRho", false);
     
    190195  switch(fAreaAlgorithm)
    191196  {
    192   default:
    193   case 0:
    194     fAreaDefinition = 0;
    195     break;
    196   case 1:
    197     fAreaDefinition = new AreaDefinition(active_area_explicit_ghosts, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
    198     break;
    199   case 2:
    200     fAreaDefinition = new AreaDefinition(one_ghost_passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
    201     break;
    202   case 3:
    203     fAreaDefinition = new AreaDefinition(passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
    204     break;
    205   case 4:
    206     fAreaDefinition = new AreaDefinition(VoronoiAreaSpec(fEffectiveRfact));
    207     break;
    208   case 5:
    209     fAreaDefinition = new AreaDefinition(active_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
    210     break;
     197    case 1:
     198      fAreaDefinition = new AreaDefinition(active_area_explicit_ghosts, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
     199      break;
     200    case 2:
     201      fAreaDefinition = new AreaDefinition(one_ghost_passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
     202      break;
     203    case 3:
     204      fAreaDefinition = new AreaDefinition(passive_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
     205      break;
     206    case 4:
     207      fAreaDefinition = new AreaDefinition(VoronoiAreaSpec(fEffectiveRfact));
     208      break;
     209    case 5:
     210      fAreaDefinition = new AreaDefinition(active_area, GhostedAreaSpec(fGhostEtaMax, fRepeat, fGhostArea, fGridScatter, fPtScatter, fMeanGhostPt));
     211      break;
     212    default:
     213    case 0:
     214      fAreaDefinition = 0;
     215      break;
    211216  }
    212217
    213218  switch(fJetAlgorithm)
    214219  {
    215   case 1:
    216     plugin = new CDFJetCluPlugin(fSeedThreshold, fConeRadius, fAdjacencyCut, fMaxIterations, fIratch, fOverlapThreshold);
    217     fDefinition = new JetDefinition(plugin);
    218     break;
    219   case 2:
    220     plugin = new CDFMidPointPlugin(fSeedThreshold, fConeRadius, fConeAreaFraction, fMaxPairSize, fMaxIterations, fOverlapThreshold);
    221     fDefinition = new JetDefinition(plugin);
    222     break;
    223   case 3:
    224     plugin = new SISConePlugin(fConeRadius, fOverlapThreshold, fMaxIterations, fJetPTMin);
    225     fDefinition = new JetDefinition(plugin);
    226     break;
    227   case 4:
    228     fDefinition = new JetDefinition(kt_algorithm, fParameterR);
    229     break;
    230   case 5:
    231     fDefinition = new JetDefinition(cambridge_algorithm, fParameterR);
    232     break;
    233   default:
    234   case 6:
    235     fDefinition = new JetDefinition(antikt_algorithm, fParameterR);
    236     break;
    237   case 7:
    238     recomb = new WinnerTakeAllRecombiner();
    239     fDefinition = new JetDefinition(antikt_algorithm, fParameterR, recomb, Best);
    240     break;
    241   case 8:
    242     fNjettinessPlugin = new NjettinessPlugin(fN, Njettiness::wta_kt_axes, Njettiness::unnormalized_cutoff_measure, fBeta, fRcutOff);
    243     fDefinition = new JetDefinition(fNjettinessPlugin);
    244     break;
     220    case 1:
     221      plugin = new CDFJetCluPlugin(fSeedThreshold, fConeRadius, fAdjacencyCut, fMaxIterations, fIratch, fOverlapThreshold);
     222      fDefinition = new JetDefinition(plugin);
     223      break;
     224    case 2:
     225      plugin = new CDFMidPointPlugin(fSeedThreshold, fConeRadius, fConeAreaFraction, fMaxPairSize, fMaxIterations, fOverlapThreshold);
     226      fDefinition = new JetDefinition(plugin);
     227      break;
     228    case 3:
     229      plugin = new SISConePlugin(fConeRadius, fOverlapThreshold, fMaxIterations, fJetPTMin);
     230      fDefinition = new JetDefinition(plugin);
     231      break;
     232    case 4:
     233      fDefinition = new JetDefinition(kt_algorithm, fParameterR);
     234      break;
     235    case 5:
     236      fDefinition = new JetDefinition(cambridge_algorithm, fParameterR);
     237      break;
     238    default:
     239    case 6:
     240      fDefinition = new JetDefinition(antikt_algorithm, fParameterR);
     241      break;
     242    case 7:
     243      recomb = new WinnerTakeAllRecombiner();
     244      fDefinition = new JetDefinition(antikt_algorithm, fParameterR, recomb, Best);
     245      break;
     246    case 8:
     247      fNjettinessPlugin = new NjettinessPlugin(fN, Njettiness::wta_kt_axes, Njettiness::unnormalized_cutoff_measure, fBeta, fRcutOff);
     248      fDefinition = new JetDefinition(fNjettinessPlugin);
     249      break;
    245250  case 9:
    246     fValenciaPlugin = new ValenciaPlugin(fParameterR, fBeta, fGamma);
    247     fDefinition = new JetDefinition(fValenciaPlugin);
    248     break;
    249   }
     251      fValenciaPlugin = new ValenciaPlugin(fParameterR, fBeta, fGamma);
     252      fDefinition = new JetDefinition(fValenciaPlugin);
     253      break;
     254
     255  }
     256
     257   
    250258
    251259  fPlugin = plugin;
     
    262270
    263271    fEstimators.clear();
    264     for(i = 0; i < size / 2; ++i)
    265     {
    266       etaMin = param[i * 2].GetDouble();
    267       etaMax = param[i * 2 + 1].GetDouble();
     272    for(i = 0; i < size/2; ++i)
     273    {
     274      etaMin = param[i*2].GetDouble();
     275      etaMax = param[i*2 + 1].GetDouble();
    268276      estimatorStruct.estimator = new JetMedianBackgroundEstimator(SelectorRapRange(etaMin, etaMax), *fDefinition, *fAreaDefinition);
    269277      estimatorStruct.etaMin = etaMin;
     
    282290  fOutputArray = ExportArray(GetString("OutputArray", "jets"));
    283291  fRhoOutputArray = ExportArray(GetString("RhoOutputArray", "rho"));
    284   fConstituentsOutputArray = ExportArray(GetString("ConstituentsOutputArray", "constituents"));
    285292}
    286293
     
    289296void FastJetFinder::Finish()
    290297{
    291   vector<TEstimatorStruct>::iterator itEstimators;
     298  vector< TEstimatorStruct >::iterator itEstimators;
    292299
    293300  for(itEstimators = fEstimators.begin(); itEstimators != fEstimators.end(); ++itEstimators)
     
    299306  if(fDefinition) delete fDefinition;
    300307  if(fAreaDefinition) delete fAreaDefinition;
    301   if(fPlugin) delete static_cast<JetDefinition::Plugin *>(fPlugin);
    302   if(fRecomb) delete static_cast<JetDefinition::Recombiner *>(fRecomb);
    303   if(fNjettinessPlugin) delete static_cast<JetDefinition::Plugin *>(fNjettinessPlugin);
     308  if(fPlugin) delete static_cast<JetDefinition::Plugin*>(fPlugin);
     309  if(fRecomb) delete static_cast<JetDefinition::Recombiner*>(fRecomb);
     310  if(fNjettinessPlugin) delete static_cast<JetDefinition::Plugin*>(fNjettinessPlugin);
    304311  if(fAxesDef) delete fAxesDef;
    305312  if(fMeasureDef) delete fMeasureDef;
    306   if(fValenciaPlugin) delete static_cast<JetDefinition::Plugin *>(fValenciaPlugin);
     313  if(fValenciaPlugin) delete static_cast<JetDefinition::Plugin*>(fValenciaPlugin);
     314
    307315}
    308316
     
    317325  Double_t time, timeWeight;
    318326  Int_t number, ncharged, nneutrals;
    319   Int_t charge;
     327  Int_t charge; 
    320328  Double_t rho = 0.0;
    321329  PseudoJet jet, area;
    322330  ClusterSequence *sequence;
    323   vector<PseudoJet> inputList, outputList, subjets;
    324   vector<PseudoJet>::iterator itInputList, itOutputList;
    325   vector<TEstimatorStruct>::iterator itEstimators;
     331  vector< PseudoJet > inputList, outputList, subjets;
     332  vector< PseudoJet >::iterator itInputList, itOutputList;
     333  vector< TEstimatorStruct >::iterator itEstimators;
    326334  Double_t excl_ymerge23 = 0.0;
    327335  Double_t excl_ymerge34 = 0.0;
    328336  Double_t excl_ymerge45 = 0.0;
    329337  Double_t excl_ymerge56 = 0.0;
    330 
     338 
    331339  DelphesFactory *factory = GetFactory();
    332340
     
    336344  fItInputArray->Reset();
    337345  number = 0;
    338   while((candidate = static_cast<Candidate *>(fItInputArray->Next())))
     346  while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
    339347  {
    340348    momentum = candidate->Momentum;
     
    373381  outputList.clear();
    374382
     383 
    375384  if(fExclusiveClustering)
    376   {
    377     try
    378     {
    379       outputList = sorted_by_pt(sequence->exclusive_jets(fNJets));
    380     }
    381     catch(fastjet::Error)
    382     {
    383       outputList.clear();
    384     }
    385 
    386     excl_ymerge23 = sequence->exclusive_ymerge(2);
    387     excl_ymerge34 = sequence->exclusive_ymerge(3);
    388     excl_ymerge45 = sequence->exclusive_ymerge(4);
    389     excl_ymerge56 = sequence->exclusive_ymerge(5);
    390   }
     385    {
     386   try{
     387     outputList = sorted_by_pt(sequence->exclusive_jets( fNJets ));
     388   }
     389   catch(fastjet::Error)
     390     {
     391       outputList.clear();
     392     }
     393
     394      excl_ymerge23 = sequence->exclusive_ymerge( 2 );
     395      excl_ymerge34 = sequence->exclusive_ymerge( 3 );
     396      excl_ymerge45 = sequence->exclusive_ymerge( 4 );
     397      excl_ymerge56 = sequence->exclusive_ymerge( 5 );
     398    }
    391399  else
    392   {
    393     outputList = sorted_by_pt(sequence->inclusive_jets(fJetPTMin));
    394   }
     400    {
     401      outputList = sorted_by_pt(sequence->inclusive_jets(fJetPTMin));
     402    }
    395403
    396404  // loop over all jets and export them
    397405  detaMax = 0.0;
    398406  dphiMax = 0.0;
    399 
     407 
    400408  for(itOutputList = outputList.begin(); itOutputList != outputList.end(); ++itOutputList)
    401409  {
     
    408416    if(fAreaDefinition) area = itOutputList->area_4vector();
    409417
     418
     419   
    410420    candidate = factory->NewCandidate();
    411421
     
    424434    {
    425435      if(itInputList->user_index() < 0) continue;
    426       constituent = static_cast<Candidate *>(fInputArray->At(itInputList->user_index()));
     436      constituent = static_cast<Candidate*>(fInputArray->At(itInputList->user_index()));
    427437
    428438      deta = TMath::Abs(momentum.Eta() - constituent->Momentum.Eta());
     
    431441      if(dphi > dphiMax) dphiMax = dphi;
    432442
    433       if(constituent->Charge == 0)
    434         nneutrals++;
    435       else
    436         ncharged++;
    437 
    438       time += TMath::Sqrt(constituent->Momentum.E()) * (constituent->Position.T());
     443      if(constituent->Charge == 0) nneutrals++;
     444      else ncharged++;
     445
     446      time += TMath::Sqrt(constituent->Momentum.E())*(constituent->Position.T());
    439447      timeWeight += TMath::Sqrt(constituent->Momentum.E());
    440448
    441449      charge += constituent->Charge;
    442450
    443       fConstituentsOutputArray->Add(constituent);
    444451      candidate->AddCandidate(constituent);
    445452    }
    446453
    447454    candidate->Momentum = momentum;
    448     candidate->Position.SetT(time / timeWeight);
     455    candidate->Position.SetT(time/timeWeight);
    449456    candidate->Area.SetPxPyPzE(area.px(), area.py(), area.pz(), area.E());
    450457
    451458    candidate->DeltaEta = detaMax;
    452459    candidate->DeltaPhi = dphiMax;
    453     candidate->Charge = charge;
     460    candidate->Charge = charge; 
    454461    candidate->NNeutrals = nneutrals;
    455462    candidate->NCharged = ncharged;
     463
    456464
    457465    //for exclusive clustering, access y_n,n+1 as exclusive_ymerge (fNJets);
     
    460468    candidate->ExclYmerge45 = excl_ymerge45;
    461469    candidate->ExclYmerge56 = excl_ymerge56;
    462 
     470   
    463471    //------------------------------------
    464472    // Trimming
     
    468476    {
    469477
    470       fastjet::Filter trimmer(fastjet::JetDefinition(fastjet::kt_algorithm, fRTrim), fastjet::SelectorPtFractionMin(fPtFracTrim));
     478      fastjet::Filter    trimmer(fastjet::JetDefinition(fastjet::kt_algorithm,fRTrim),fastjet::SelectorPtFractionMin(fPtFracTrim));
    471479      fastjet::PseudoJet trimmed_jet = trimmer(*itOutputList);
    472 
     480     
    473481      trimmed_jet = join(trimmed_jet.constituents());
    474 
     482     
    475483      candidate->TrimmedP4[0].SetPtEtaPhiM(trimmed_jet.pt(), trimmed_jet.eta(), trimmed_jet.phi(), trimmed_jet.m());
    476 
    477       // four hardest subjets
     484       
     485      // four hardest subjets 
    478486      subjets.clear();
    479487      subjets = trimmed_jet.pieces();
    480488      subjets = sorted_by_pt(subjets);
    481 
     489     
    482490      candidate->NSubJetsTrimmed = subjets.size();
    483491
    484       for(size_t i = 0; i < subjets.size() and i < 4; i++)
     492      for (size_t i = 0; i < subjets.size() and i < 4; i++)
    485493      {
    486         if(subjets.at(i).pt() < 0) continue;
    487         candidate->TrimmedP4[i + 1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
     494            if(subjets.at(i).pt() < 0) continue ;
     495            candidate->TrimmedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
    488496      }
    489497    }
    490 
     498   
     499   
    491500    //------------------------------------
    492501    // Pruning
    493502    //------------------------------------
    494 
     503   
     504   
    495505    if(fComputePruning)
    496506    {
    497507
    498       fastjet::Pruner pruner(fastjet::JetDefinition(fastjet::cambridge_algorithm, fRPrun), fZcutPrun, fRcutPrun);
     508      fastjet::Pruner    pruner(fastjet::JetDefinition(fastjet::cambridge_algorithm,fRPrun),fZcutPrun,fRcutPrun);
    499509      fastjet::PseudoJet pruned_jet = pruner(*itOutputList);
    500510
    501511      candidate->PrunedP4[0].SetPtEtaPhiM(pruned_jet.pt(), pruned_jet.eta(), pruned_jet.phi(), pruned_jet.m());
    502 
    503       // four hardest subjet
     512         
     513      // four hardest subjet 
    504514      subjets.clear();
    505515      subjets = pruned_jet.pieces();
    506516      subjets = sorted_by_pt(subjets);
    507 
     517     
    508518      candidate->NSubJetsPruned = subjets.size();
    509519
    510       for(size_t i = 0; i < subjets.size() and i < 4; i++)
     520      for (size_t i = 0; i < subjets.size() and i < 4; i++)
    511521      {
    512         if(subjets.at(i).pt() < 0) continue;
    513         candidate->PrunedP4[i + 1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
     522            if(subjets.at(i).pt() < 0) continue ;
     523            candidate->PrunedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
    514524      }
    515     }
    516 
     525
     526    }
     527     
    517528    //------------------------------------
    518529    // SoftDrop
    519530    //------------------------------------
    520 
     531   
    521532    if(fComputeSoftDrop)
    522533    {
    523 
    524       contrib::SoftDrop softDrop(fBetaSoftDrop, fSymmetryCutSoftDrop, fR0SoftDrop);
     534   
     535      contrib::SoftDrop softDrop(fBetaSoftDrop,fSymmetryCutSoftDrop,fR0SoftDrop);
    525536      fastjet::PseudoJet softdrop_jet = softDrop(*itOutputList);
    526 
     537     
    527538      candidate->SoftDroppedP4[0].SetPtEtaPhiM(softdrop_jet.pt(), softdrop_jet.eta(), softdrop_jet.phi(), softdrop_jet.m());
    528 
    529       // four hardest subjet
    530 
     539       
     540      // four hardest subjet 
     541     
    531542      subjets.clear();
    532       subjets = softdrop_jet.pieces();
    533       subjets = sorted_by_pt(subjets);
     543      subjets    = softdrop_jet.pieces();
     544      subjets    = sorted_by_pt(subjets);
    534545      candidate->NSubJetsSoftDropped = softdrop_jet.pieces().size();
    535546
    536547      candidate->SoftDroppedJet = candidate->SoftDroppedP4[0];
    537548
    538       for(size_t i = 0; i < subjets.size() and i < 4; i++)
     549      for (size_t i = 0; i < subjets.size() and i < 4; i++)
    539550      {
    540         if(subjets.at(i).pt() < 0) continue;
    541         candidate->SoftDroppedP4[i + 1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
    542         if(i == 0) candidate->SoftDroppedSubJet1 = candidate->SoftDroppedP4[i + 1];
    543         if(i == 1) candidate->SoftDroppedSubJet2 = candidate->SoftDroppedP4[i + 1];
     551            if(subjets.at(i).pt() < 0) continue ;
     552            candidate->SoftDroppedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
     553            if(i==0) candidate->SoftDroppedSubJet1 = candidate->SoftDroppedP4[i+1];
     554            if(i==1) candidate->SoftDroppedSubJet2 = candidate->SoftDroppedP4[i+1];
    544555      }
    545556    }
    546 
     557 
    547558    // --- compute N-subjettiness with N = 1,2,3,4,5 ----
    548559
    549560    if(fComputeNsubjettiness)
    550561    {
    551 
     562     
    552563      Nsubjettiness nSub1(1, *fAxesDef, *fMeasureDef);
    553564      Nsubjettiness nSub2(2, *fAxesDef, *fMeasureDef);
     
    555566      Nsubjettiness nSub4(4, *fAxesDef, *fMeasureDef);
    556567      Nsubjettiness nSub5(5, *fAxesDef, *fMeasureDef);
    557 
     568     
    558569      candidate->Tau[0] = nSub1(*itOutputList);
    559570      candidate->Tau[1] = nSub2(*itOutputList);
     
    561572      candidate->Tau[3] = nSub4(*itOutputList);
    562573      candidate->Tau[4] = nSub5(*itOutputList);
     574         
    563575    }
    564576
Note: See TracChangeset for help on using the changeset viewer.