Fork me on GitHub

Changes in / [d38348d:f53a4d2] in git


Ignore:
Files:
29 deleted
25 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    rd38348d rf53a4d2  
    257257        classes/DelphesClasses.h \
    258258        classes/DelphesFactory.h \
    259         classes/DelphesLHEFReader.h \
    260259        external/ExRootAnalysis/ExRootTreeWriter.h \
    261260        external/ExRootAnalysis/ExRootTreeBranch.h \
     
    322321        modules/UniqueObjectFinder.h \
    323322        modules/TrackCountingBTagging.h \
    324         modules/BTaggingCMS.h \
    325323        modules/BTagging.h \
    326324        modules/TauTagging.h \
     
    339337        modules/Weighter.h \
    340338        modules/Hector.h \
    341         modules/RunPUPPI.h \
    342         modules/JetFlavorAssociation.h \
    343339        modules/ExampleModule.h
    344340ModulesDict$(PcmSuf): \
     
    525521tmp/external/Hector/H_VerticalQuadrupole.$(ObjSuf): \
    526522        external/Hector/H_VerticalQuadrupole.$(SrcSuf)
    527 tmp/external/PUPPI/puppiCleanContainer.$(ObjSuf): \
    528         external/PUPPI/puppiCleanContainer.$(SrcSuf) \
    529         external/fastjet/Selector.hh
    530523tmp/modules/AngularSmearing.$(ObjSuf): \
    531524        modules/AngularSmearing.$(SrcSuf) \
     
    540533        modules/BTagging.$(SrcSuf) \
    541534        modules/BTagging.h \
    542         classes/DelphesClasses.h \
    543         classes/DelphesFactory.h \
    544         classes/DelphesFormula.h \
    545         external/ExRootAnalysis/ExRootResult.h \
    546         external/ExRootAnalysis/ExRootFilter.h \
    547         external/ExRootAnalysis/ExRootClassifier.h
    548 tmp/modules/BTaggingCMS.$(ObjSuf): \
    549         modules/BTaggingCMS.$(SrcSuf) \
    550         modules/BTaggingCMS.h \
    551535        classes/DelphesClasses.h \
    552536        classes/DelphesFactory.h \
     
    668652        external/ExRootAnalysis/ExRootFilter.h \
    669653        external/ExRootAnalysis/ExRootClassifier.h
    670 tmp/modules/JetFlavorAssociation.$(ObjSuf): \
    671         modules/JetFlavorAssociation.$(SrcSuf) \
    672         modules/JetFlavorAssociation.h \
    673         classes/DelphesClasses.h \
    674         classes/DelphesFactory.h \
    675         classes/DelphesFormula.h \
    676         external/ExRootAnalysis/ExRootResult.h \
    677         external/ExRootAnalysis/ExRootFilter.h \
    678         external/ExRootAnalysis/ExRootClassifier.h
    679654tmp/modules/JetPileUpSubtractor.$(ObjSuf): \
    680655        modules/JetPileUpSubtractor.$(SrcSuf) \
     
    755730        classes/DelphesClasses.h \
    756731        classes/DelphesFactory.h \
    757         classes/DelphesTF2.h \
     732        classes/DelphesFormula.h \
    758733        classes/DelphesPileUpReader.h \
    759734        external/ExRootAnalysis/ExRootResult.h \
    760735        external/ExRootAnalysis/ExRootFilter.h \
    761736        external/ExRootAnalysis/ExRootClassifier.h
    762 tmp/modules/RunPUPPI.$(ObjSuf): \
    763         modules/RunPUPPI.$(SrcSuf) \
    764         modules/RunPUPPI.h \
    765         external/PUPPI/puppiCleanContainer.hh \
    766         external/PUPPI/RecoObj.hh \
    767         external/PUPPI/puppiParticle.hh \
    768         external/PUPPI/puppiAlgoBin.hh \
    769         classes/DelphesClasses.h \
    770         classes/DelphesFactory.h \
    771         classes/DelphesFormula.h
    772737tmp/modules/SimpleCalorimeter.$(ObjSuf): \
    773738        modules/SimpleCalorimeter.$(SrcSuf) \
     
    904869        tmp/external/Hector/H_VerticalKicker.$(ObjSuf) \
    905870        tmp/external/Hector/H_VerticalQuadrupole.$(ObjSuf) \
    906         tmp/external/PUPPI/puppiCleanContainer.$(ObjSuf) \
    907871        tmp/modules/AngularSmearing.$(ObjSuf) \
    908872        tmp/modules/BTagging.$(ObjSuf) \
    909         tmp/modules/BTaggingCMS.$(ObjSuf) \
    910873        tmp/modules/Calorimeter.$(ObjSuf) \
    911874        tmp/modules/Cloner.$(ObjSuf) \
     
    920883        tmp/modules/ImpactParameterSmearing.$(ObjSuf) \
    921884        tmp/modules/Isolation.$(ObjSuf) \
    922         tmp/modules/JetFlavorAssociation.$(ObjSuf) \
    923885        tmp/modules/JetPileUpSubtractor.$(ObjSuf) \
    924886        tmp/modules/LeptonDressing.$(ObjSuf) \
     
    929891        tmp/modules/PileUpJetID.$(ObjSuf) \
    930892        tmp/modules/PileUpMerger.$(ObjSuf) \
    931         tmp/modules/RunPUPPI.$(ObjSuf) \
    932893        tmp/modules/SimpleCalorimeter.$(ObjSuf) \
    933894        tmp/modules/StatusPidFilter.$(ObjSuf) \
     
    11191080tmp/external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.$(ObjSuf): \
    11201081        external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.$(SrcSuf)
    1121 tmp/external/fastjet/contribs/RecursiveTools/ModifiedMassDropTagger.$(ObjSuf): \
    1122         external/fastjet/contribs/RecursiveTools/ModifiedMassDropTagger.$(SrcSuf) \
    1123         external/fastjet/JetDefinition.hh \
    1124         external/fastjet/ClusterSequenceAreaBase.hh
    1125 tmp/external/fastjet/contribs/RecursiveTools/Recluster.$(ObjSuf): \
    1126         external/fastjet/contribs/RecursiveTools/Recluster.$(SrcSuf)
    1127 tmp/external/fastjet/contribs/RecursiveTools/RecursiveSymmetryCutBase.$(ObjSuf): \
    1128         external/fastjet/contribs/RecursiveTools/RecursiveSymmetryCutBase.$(SrcSuf) \
    1129         external/fastjet/JetDefinition.hh \
    1130         external/fastjet/ClusterSequenceAreaBase.hh
    1131 tmp/external/fastjet/contribs/RecursiveTools/SoftDrop.$(ObjSuf): \
    1132         external/fastjet/contribs/RecursiveTools/SoftDrop.$(SrcSuf)
    11331082tmp/external/fastjet/contribs/SoftKiller/SoftKiller.$(ObjSuf): \
    11341083        external/fastjet/contribs/SoftKiller/SoftKiller.$(SrcSuf)
     
    12641213        external/fastjet/contribs/Nsubjettiness/Njettiness.hh \
    12651214        external/fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh \
    1266         external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.hh \
    1267         external/fastjet/tools/Filter.hh \
    1268         external/fastjet/tools/Pruner.hh \
    1269         external/fastjet/contribs/RecursiveTools/SoftDrop.hh
     1215        external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.hh
    12701216tmp/modules/FastJetGridMedianEstimator.$(ObjSuf): \
    12711217        modules/FastJetGridMedianEstimator.$(SrcSuf) \
     
    13391285        tmp/external/fastjet/contribs/Nsubjettiness/Nsubjettiness.$(ObjSuf) \
    13401286        tmp/external/fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.$(ObjSuf) \
    1341         tmp/external/fastjet/contribs/RecursiveTools/ModifiedMassDropTagger.$(ObjSuf) \
    1342         tmp/external/fastjet/contribs/RecursiveTools/Recluster.$(ObjSuf) \
    1343         tmp/external/fastjet/contribs/RecursiveTools/RecursiveSymmetryCutBase.$(ObjSuf) \
    1344         tmp/external/fastjet/contribs/RecursiveTools/SoftDrop.$(ObjSuf) \
    13451287        tmp/external/fastjet/contribs/SoftKiller/SoftKiller.$(ObjSuf) \
    13461288        tmp/external/fastjet/plugins/ATLASCone/ATLASConePlugin.$(ObjSuf) \
     
    15991541        @touch $@
    16001542
     1543external/fastjet/Selector.hh: \
     1544        external/fastjet/PseudoJet.hh \
     1545        external/fastjet/RangeDefinition.hh
     1546        @touch $@
     1547
    16011548external/fastjet/internal/Dnn2piCylinder.hh: \
    16021549        external/fastjet/internal/DynamicNearestNeighbours.hh \
    16031550        external/fastjet/internal/DnnPlane.hh \
    16041551        external/fastjet/internal/numconsts.hh
    1605         @touch $@
    1606 
    1607 external/fastjet/Selector.hh: \
    1608         external/fastjet/PseudoJet.hh \
    1609         external/fastjet/RangeDefinition.hh
    16101552        @touch $@
    16111553
     
    16971639        @touch $@
    16981640
    1699 modules/RunPUPPI.h: \
    1700         classes/DelphesModule.h
    1701         @touch $@
    1702 
    17031641modules/Cloner.h: \
    17041642        classes/DelphesModule.h
     
    17731711        @touch $@
    17741712
    1775 modules/BTaggingCMS.h: \
    1776         classes/DelphesModule.h \
    1777         classes/DelphesClasses.h
    1778         @touch $@
    1779 
    17801713modules/TrackCountingBTagging.h: \
    17811714        classes/DelphesModule.h
     
    17901723        external/fastjet/ClusterSequenceAreaBase.hh \
    17911724        external/fastjet/ClusterSequenceActiveAreaExplicitGhosts.hh
    1792         @touch $@
    1793 
    1794 modules/JetFlavorAssociation.h: \
    1795         classes/DelphesModule.h \
    1796         classes/DelphesClasses.h
    17971725        @touch $@
    17981726
     
    18291757        external/fastjet/AreaDefinition.hh \
    18301758        external/fastjet/ClusterSequenceAreaBase.hh
    1831         @touch $@
    1832 
    1833 external/PUPPI/puppiCleanContainer.hh: \
    1834         external/PUPPI/RecoObj.hh \
    1835         external/PUPPI/puppiParticle.hh \
    1836         external/PUPPI/puppiAlgoBin.hh \
    1837         external/fastjet/internal/base.hh \
    1838         external/fastjet/PseudoJet.hh
    18391759        @touch $@
    18401760
  • classes/ClassesLinkDef.h

    rd38348d rf53a4d2  
    4646#pragma link C++ class LHCOEvent+;
    4747#pragma link C++ class LHEFEvent+;
    48 #pragma link C++ class LHEFWeight+;
    4948#pragma link C++ class HepMCEvent+;
    5049#pragma link C++ class GenParticle+;
  • classes/DelphesClasses.cc

    rd38348d rf53a4d2  
    120120  PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
    121121  Charge(0), Mass(0.0),
    122   IsPU(0), IsRecoPU(0), IsConstituent(0),
    123   BTag(0), BTagAlgo(0), BTagDefault(0), BTagPhysics(0), BTagNearest2(0), BTagNearest3(0), BTagHeaviest(0), BTagHighestPt(0),
    124   FlavorAlgo(0), FlavorDefault(0), FlavorPhysics(0), FlavorNearest2(0), FlavorNearest3(0), FlavorHeaviest(0), FlavorHighestPt(0),
    125   TauTag(0), Eem(0.0), Ehad(0.0),
     122  IsPU(0), IsConstituent(0),
     123  BTag(0), TauTag(0), Eem(0.0), Ehad(0.0),
    126124  DeltaEta(0.0), DeltaPhi(0.0),
    127125  Momentum(0.0, 0.0, 0.0, 0.0),
     
    131129  NCharged(0),
    132130  NNeutrals(0),
    133   NSubJetsTrimmed(0),
    134   NSubJetsPruned(0),
    135   NSubJetsSoftDropped(0),
    136131  Beta(0),
    137132  BetaStar(0),
    138133  MeanSqDeltaR(0),
    139134  PTD(0),
    140   Ntimes(-1),
    141   IsolationVar(-999),
    142   IsolationVarRhoCorr(-999),
    143   SumPtCharged(-999),
    144   SumPtNeutral(-999),
    145   SumPtChargedPU(-999),
    146   SumPt(-999),
    147135  fFactory(0),
    148136  fArray(0)
    149137{
    150   int i;
    151138  Edges[0] = 0.0;
    152139  Edges[1] = 0.0;
     
    163150  Tau[3] = 0.0;
    164151  Tau[4] = 0.0;
    165   for(i = 0; i < 5; ++i)
    166   {
    167     TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
    168     PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
    169     SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
    170   }
    171152}
    172153
     
    244225  object.IsConstituent = IsConstituent;
    245226  object.BTag = BTag;
    246   object.BTagAlgo = BTagAlgo;
    247   object.BTagDefault = BTagDefault;
    248   object.BTagPhysics = BTagPhysics;
    249   object.BTagNearest2 = BTagNearest2;
    250   object.BTagNearest3 = BTagNearest3;
    251   object.BTagHeaviest = BTagHeaviest;
    252   object.BTagHighestPt = BTagHighestPt;
    253   object.FlavorAlgo = FlavorAlgo;
    254   object.FlavorDefault = FlavorDefault;
    255   object.FlavorPhysics = FlavorPhysics;
    256   object.FlavorNearest2 = FlavorNearest2;
    257   object.FlavorNearest3 = FlavorNearest3;
    258   object.FlavorHeaviest = FlavorHeaviest;
    259   object.FlavorHighestPt = FlavorHighestPt;
    260227  object.TauTag = TauTag;
    261228  object.Eem = Eem;
     
    282249  object.MeanSqDeltaR = MeanSqDeltaR;
    283250  object.PTD = PTD;
    284   object.Ntimes = Ntimes;
    285   object.IsolationVar = IsolationVar;
    286   object.IsolationVarRhoCorr = IsolationVarRhoCorr;
    287   object.SumPtCharged = SumPtCharged;
    288   object.SumPtNeutral = SumPtNeutral;
    289   object.SumPtChargedPU = SumPtChargedPU;
    290   object.SumPt = SumPt;
    291 
    292251  object.FracPt[0] = FracPt[0];
    293252  object.FracPt[1] = FracPt[1];
     
    300259  object.Tau[3] = Tau[3];
    301260  object.Tau[4] = Tau[4];
    302  
    303   object.TrimmedP4[0] = TrimmedP4[0];
    304   object.TrimmedP4[1] = TrimmedP4[1];
    305   object.TrimmedP4[2] = TrimmedP4[2];
    306   object.TrimmedP4[3] = TrimmedP4[3];
    307   object.TrimmedP4[4] = TrimmedP4[4];
    308   object.PrunedP4[0] = PrunedP4[0];
    309   object.PrunedP4[1] = PrunedP4[1];
    310   object.PrunedP4[2] = PrunedP4[2];
    311   object.PrunedP4[3] = PrunedP4[3];
    312   object.PrunedP4[4] = PrunedP4[4];
    313   object.SoftDroppedP4[0] = SoftDroppedP4[0];
    314   object.SoftDroppedP4[1] = SoftDroppedP4[1];
    315   object.SoftDroppedP4[2] = SoftDroppedP4[2];
    316   object.SoftDroppedP4[3] = SoftDroppedP4[3];
    317   object.SoftDroppedP4[4] = SoftDroppedP4[4];
    318 
    319   object.NSubJetsTrimmed = NSubJetsTrimmed;
    320   object.NSubJetsPruned = NSubJetsPruned;
    321   object.NSubJetsSoftDropped = NSubJetsSoftDropped;
    322261
    323262  object.fFactory = fFactory;
    324263  object.fArray = 0;
    325 
    326   // Copy cluster timing info
    327   copy(Ecal_E_t.begin(),Ecal_E_t.end(),back_inserter(object.Ecal_E_t));
    328264
    329265  if(fArray && fArray->GetEntriesFast() > 0)
     
    342278void Candidate::Clear(Option_t* option)
    343279{
    344   int i;
    345280  SetUniqueID(0);
    346281  ResetBit(kIsReferenced);
     
    353288  IsConstituent = 0;
    354289  BTag = 0;
    355   BTagAlgo = 0;
    356   BTagDefault = 0;
    357   BTagPhysics = 0;
    358   BTagNearest2 = 0;
    359   BTagNearest3 = 0;
    360   BTagHeaviest = 0;
    361   BTagHighestPt = 0;
    362   FlavorAlgo = 0;
    363   FlavorDefault = 0;
    364   FlavorPhysics = 0;
    365   FlavorNearest2 = 0;
    366   FlavorNearest3 = 0;
    367   FlavorHeaviest = 0;
    368   FlavorHighestPt = 0;
    369290  TauTag = 0;
    370291  Eem = 0.0;
     
    390311  MeanSqDeltaR = 0.0;
    391312  PTD = 0.0;
    392  
    393   Ntimes = 0;
    394   Ecal_E_t.clear();
    395  
    396   IsolationVar = -999;
    397   IsolationVarRhoCorr = -999;
    398   SumPtCharged = -999;
    399   SumPtNeutral = -999;
    400   SumPtChargedPU = -999;
    401   SumPt = -999;
    402  
    403313  FracPt[0] = 0.0;
    404314  FracPt[1] = 0.0;
     
    411321  Tau[3] = 0.0;
    412322  Tau[4] = 0.0;
    413  
    414   for(i = 0; i < 5; ++i)
    415   {
    416     TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
    417     PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
    418     SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
    419   }
    420 
    421   NSubJetsTrimmed = 0;
    422   NSubJetsPruned = 0;
    423   NSubJetsSoftDropped = 0;
    424  
     323
    425324  fArray = 0;
    426325}
  • classes/DelphesClasses.h

    rd38348d rf53a4d2  
    8484//---------------------------------------------------------------------------
    8585
    86 class LHEFWeight: public TObject
    87 {
    88 public:
    89   Int_t ID; // weight ID
    90   Float_t Weight; // weight value
    91 
    92   ClassDef(LHEFWeight, 1)
    93 };
    94 
    95 //---------------------------------------------------------------------------
    96 
    9786class HepMCEvent: public Event
    9887{
     
    242231  TRefArray Particles; // references to generated particles
    243232
    244   // Isolation variables
    245 
    246   Float_t IsolationVar;
    247   Float_t IsolationVarRhoCorr;
    248   Float_t SumPtCharged;
    249   Float_t SumPtNeutral;
    250   Float_t SumPtChargedPU;
    251   Float_t SumPt;
    252 
    253233  static CompBase *fgCompare; //!
    254234  const CompBase *GetCompare() const { return fgCompare; }
     
    277257  TRef Particle; // reference to generated particle
    278258
    279   // Isolation variables
    280 
    281   Float_t IsolationVar;
    282   Float_t IsolationVarRhoCorr;
    283   Float_t SumPtCharged;
    284   Float_t SumPtNeutral;
    285   Float_t SumPtChargedPU;
    286   Float_t SumPt;
    287 
    288259  static CompBase *fgCompare; //!
    289260  const CompBase *GetCompare() const { return fgCompare; }
     
    310281  TRef Particle; // reference to generated particle
    311282
    312    // Isolation variables
    313 
    314   Float_t IsolationVar;
    315   Float_t IsolationVarRhoCorr;
    316   Float_t SumPtCharged;
    317   Float_t SumPtNeutral;
    318   Float_t SumPtChargedPU;
    319   Float_t SumPt;
    320 
    321283  static CompBase *fgCompare; //!
    322284  const CompBase *GetCompare() const { return fgCompare; }
     
    345307
    346308  UInt_t BTag; // 0 or 1 for a jet that has been tagged as containing a heavy quark
    347 
    348   UInt_t BTagAlgo;
    349   UInt_t BTagDefault;
    350   UInt_t BTagPhysics;
    351   UInt_t BTagNearest2;
    352   UInt_t BTagNearest3;
    353   UInt_t BTagHeaviest;
    354   UInt_t BTagHighestPt;
    355 
    356   UInt_t FlavorAlgo;
    357   UInt_t FlavorDefault;
    358   UInt_t FlavorPhysics;
    359   UInt_t FlavorNearest2;
    360   UInt_t FlavorNearest3;
    361   UInt_t FlavorHeaviest;
    362   UInt_t FlavorHighestPt;
    363 
    364309  UInt_t TauTag; // 0 or 1 for a jet that has been tagged as a tau
    365310
     
    368313  Float_t EhadOverEem; // ratio of the hadronic versus electromagnetic energy deposited in the calorimeter
    369314
    370   Int_t NCharged; // number of charged constituents
    371   Int_t NNeutrals; // number of neutral constituents
    372   Float_t Beta; // (sum pt of charged pile-up constituents)/(sum pt of charged constituents)
    373   Float_t BetaStar; // (sum pt of charged constituents coming from hard interaction)/(sum pt of charged constituents)
    374   Float_t MeanSqDeltaR; // average distance (squared) between constituent and jet weighted by pt (squared) of constituent
    375   Float_t PTD; // average pt between constituent and jet weighted by pt of constituent
    376   Float_t FracPt[5]; // (sum pt of constituents within a ring 0.1*i < DeltaR < 0.1*(i+1))/(sum pt of constituents)
    377 
    378   Float_t Tau[5]; // N-subjettiness
    379 
    380   TLorentzVector TrimmedP4[5]; // first entry (i = 0) is the total Trimmed Jet 4-momenta and from i = 1 to 4 are the trimmed subjets 4-momenta
    381   TLorentzVector PrunedP4[5]; // first entry (i = 0) is the total Pruned Jet 4-momenta and from i = 1 to 4 are the pruned subjets 4-momenta
    382   TLorentzVector SoftDroppedP4[5]; // first entry (i = 0) is the total SoftDropped Jet 4-momenta and from i = 1 to 4 are the pruned subjets 4-momenta
    383 
    384   Int_t NSubJetsTrimmed; // number of subjets trimmed
    385   Int_t NSubJetsPruned; // number of subjets pruned
    386   Int_t NSubJetsSoftDropped; // number of subjets soft-dropped
     315  Int_t    NCharged; // number of charged constituents
     316  Int_t    NNeutrals; // number of neutral constituents
     317  Float_t  Beta; // (sum pt of charged pile-up constituents)/(sum pt of charged constituents)
     318  Float_t  BetaStar; // (sum pt of charged constituents coming from hard interaction)/(sum pt of charged constituents)
     319  Float_t  MeanSqDeltaR; // average distance (squared) between constituent and jet weighted by pt (squared) of constituent
     320  Float_t  PTD; // average pt between constituent and jet weighted by pt of constituent
     321  Float_t  FracPt[5]; // (sum pt of constituents within a ring 0.1*i < DeltaR < 0.1*(i+1))/(sum pt of constituents)
     322
     323  Float_t Tau1; // 1-subjettiness
     324  Float_t Tau2; // 2-subjettiness
     325  Float_t Tau3; // 3-subjettiness
     326  Float_t Tau4; // 4-subjettiness
     327  Float_t Tau5; // 5-subjettiness
    387328
    388329  TRefArray Constituents; // references to constituents
     
    393334
    394335  TLorentzVector P4() const;
    395   TLorentzVector Area;
    396 
    397   ClassDef(Jet, 3)
     336
     337  ClassDef(Jet, 2)
    398338};
    399339
     
    452392  Float_t E; // calorimeter tower energy
    453393
    454   Float_t T; // ecal deposit time, averaged by sqrt(EM energy) over all particles, not smeared
    455   Int_t   Ntimes; // number of hits contributing to time measurement
     394  Float_t T; //particle arrival time of flight
    456395
    457396  Float_t Eem; // calorimeter tower electromagnetic energy
     
    513452
    514453  Int_t IsPU;
    515   Int_t IsRecoPU;
    516 
    517454  Int_t IsConstituent;
    518455
    519456  UInt_t BTag;
    520 
    521   UInt_t BTagAlgo;
    522   UInt_t BTagDefault;
    523   UInt_t BTagPhysics;
    524   UInt_t BTagNearest2;
    525   UInt_t BTagNearest3;
    526   UInt_t BTagHeaviest;
    527   UInt_t BTagHighestPt;
    528 
    529   UInt_t FlavorAlgo;
    530   UInt_t FlavorDefault;
    531   UInt_t FlavorPhysics;
    532   UInt_t FlavorNearest2;
    533   UInt_t FlavorNearest3;
    534   UInt_t FlavorHeaviest;
    535   UInt_t FlavorHighestPt;
    536 
    537457  UInt_t TauTag;
    538458
     
    562482  Float_t  FracPt[5];
    563483
    564   //Timing information
    565 
    566   Int_t    Ntimes;
    567   std::vector<std::pair<Float_t,Float_t> > Ecal_E_t;
    568 
    569   // Isolation variables
    570 
    571   Float_t IsolationVar;
    572   Float_t IsolationVarRhoCorr;
    573   Float_t SumPtCharged;
    574   Float_t SumPtNeutral;
    575   Float_t SumPtChargedPU;
    576   Float_t SumPt;
    577 
    578484  // N-subjettiness variables
    579485
    580486  Float_t Tau[5];
    581 
    582   // Other Substructure variables
    583 
    584   TLorentzVector TrimmedP4[5]; // first entry (i = 0) is the total Trimmed Jet 4-momenta and from i = 1 to 4 are the trimmed subjets 4-momenta
    585   TLorentzVector PrunedP4[5]; // first entry (i = 0) is the total Pruned Jet 4-momenta and from i = 1 to 4 are the pruned subjets 4-momenta
    586   TLorentzVector SoftDroppedP4[5]; // first entry (i = 0) is the total SoftDropped Jet 4-momenta and from i = 1 to 4 are the pruned subjets 4-momenta
    587 
    588   Int_t NSubJetsTrimmed; // number of subjets trimmed
    589   Int_t NSubJetsPruned; // number of subjets pruned
    590   Int_t NSubJetsSoftDropped; // number of subjets soft-dropped
    591 
    592487
    593488  static CompBase *fgCompare; //!
     
    609504  void SetFactory(DelphesFactory *factory) { fFactory = factory; }
    610505
    611   ClassDef(Candidate, 3)
     506  ClassDef(Candidate, 2)
    612507};
    613508
  • classes/DelphesLHEFReader.cc

    rd38348d rf53a4d2  
    8282  fEventCounter = -1;
    8383  fParticleCounter = -1;
    84   fWeightList.clear();
     84  fRwgtList.clear();
    8585}
    8686
     
    9999  TObjArray *partonOutputArray)
    100100{
    101   int rc, id;
     101  int rc;
    102102  char *pch;
    103103  double weight;
     
    158158  else if(strstr(fBuffer, "<wgt"))
    159159  {
    160     pch = strpbrk(fBuffer, "\"'");
     160    pch = strstr(fBuffer, ">");
    161161    if(!pch)
    162162    {
     
    165165    }
    166166
    167     DelphesStream idStream(pch + 1);
    168     rc = idStream.ReadInt(id);
    169 
    170     pch = strchr(fBuffer, '>');
    171     if(!pch)
     167    DelphesStream bufferStream(pch + 1);
     168    rc = bufferStream.ReadDbl(weight);
     169
     170    if(!rc)
    172171    {
    173172      cerr << "** ERROR: " << "invalid weight format" << endl;
     
    175174    }
    176175
    177     DelphesStream weightStream(pch + 1);
    178     rc = weightStream.ReadDbl(weight);
    179 
    180     if(!rc)
    181     {
    182       cerr << "** ERROR: " << "invalid weight format" << endl;
    183       return kFALSE;
    184     }
    185 
    186     fWeightList.push_back(make_pair(id, weight));
     176    fRwgtList.push_back(weight);
    187177  }
    188178  else if(strstr(fBuffer, "</event>"))
     
    216206//---------------------------------------------------------------------------
    217207
    218 void DelphesLHEFReader::AnalyzeWeight(ExRootTreeBranch *branch)
    219 {
    220   LHEFWeight *element;
    221   vector< pair< int, double > >::const_iterator itWeightList;
    222 
    223   for(itWeightList = fWeightList.begin(); itWeightList != fWeightList.end(); ++itWeightList)
    224   {
    225     element = static_cast<LHEFWeight *>(branch->NewEntry());
    226 
    227     element->ID = itWeightList->first;
    228     element->Weight = itWeightList->second;
     208void DelphesLHEFReader::AnalyzeRwgt(ExRootTreeBranch *branch)
     209{
     210  Weight *element;
     211  vector<double>::const_iterator itRwgtList;
     212
     213  for(itRwgtList = fRwgtList.begin(); itRwgtList != fRwgtList.end(); ++itRwgtList)
     214  {
     215    element = static_cast<Weight *>(branch->NewEntry());
     216
     217    element->Weight = *itRwgtList;
    229218  }
    230219}
  • classes/DelphesLHEFReader.h

    rd38348d rf53a4d2  
    3131
    3232#include <vector>
    33 #include <utility>
    3433
    3534class TObjArray;
     
    5958    TStopwatch *readStopWatch, TStopwatch *procStopWatch);
    6059
    61   void AnalyzeWeight(ExRootTreeBranch *branch);
     60  void AnalyzeRwgt(ExRootTreeBranch *branch);
    6261
    6362private:
     
    8483  double fPx, fPy, fPz, fE, fMass;
    8584 
    86   std::vector< std::pair< int, double > > fWeightList;
     85  std::vector<double> fRwgtList;
    8786};
    8887
  • doc/genMakefile.tcl

    rd38348d rf53a4d2  
    283283dictDeps {DISPLAY_DICT} {display/DisplayLinkDef.h}
    284284
    285 sourceDeps {DELPHES} {classes/*.cc} {modules/*.cc} {external/ExRootAnalysis/*.cc} {external/Hector/*.cc} {external/PUPPI/*.cc}
     285sourceDeps {DELPHES} {classes/*.cc} {modules/*.cc} {external/ExRootAnalysis/*.cc} {external/Hector/*.cc}
    286286
    287287sourceDeps {FASTJET} {modules/FastJet*.cc} {external/fastjet/*.cc} {external/fastjet/tools/*.cc} {external/fastjet/plugins/*/*.cc} {external/fastjet/contribs/*/*.cc}
  • modules/Calorimeter.cc

    rd38348d rf53a4d2  
    150150*/
    151151
    152   // read min E value for timing measurement in ECAL
    153   fTimingEMin = GetDouble("TimingEMin",4.);
    154   // For timing
    155   // So far this flag needs to be false
    156   // Curved extrapolation not supported
    157   fElectronsFromTrack = false;
    158 
    159  
    160152  // read min E value for towers to be saved
    161153  fECalEnergyMin = GetDouble("ECalEnergyMin", 0.0);
     
    364356      fTrackHCalEnergy = 0.0;
    365357
     358      fTowerECalTime = 0.0;
     359      fTowerHCalTime = 0.0;
     360
     361      fTrackECalTime = 0.0;
     362      fTrackHCalTime = 0.0;
     363
     364      fTowerECalTimeWeight = 0.0;
     365      fTowerHCalTimeWeight = 0.0;
     366
    366367      fTowerTrackHits = 0;
    367368      fTowerPhotonHits = 0;
     
    379380      position = track->Position;
    380381
     382
    381383      ecalEnergy = momentum.E() * fTrackECalFractions[number];
    382384      hcalEnergy = momentum.E() * fTrackHCalFractions[number];
     
    385387      fTrackHCalEnergy += hcalEnergy;
    386388
    387       bool dbg_scz = false;
    388       if (dbg_scz) {
    389         cout << "   Calorimeter input track has x y z t " << track->Position.X() << " " << track->Position.Y() << " " << track->Position.Z() << " " << track->Position.T()
    390              << endl;
    391         Candidate *prt = static_cast<Candidate*>(track->GetCandidates()->Last());
    392         const TLorentzVector &ini = prt->Position;
    393 
    394         cout << "                and parent has x y z t " << ini.X() << " " << ini.Y() << " " << ini.Z() << " " << ini.T();
    395 
    396       }
    397      
    398       if (ecalEnergy > fTimingEMin && fTower) {
    399         if (fElectronsFromTrack) {
    400           //      cout << " SCZ Debug pushing back track hit E=" << ecalEnergy << " T=" << track->Position.T() << " isPU=" << track->IsPU << " isRecoPU=" << track->IsRecoPU
    401           //           << " PID=" << track->PID << endl;
    402           fTower->Ecal_E_t.push_back(std::make_pair<float,float>(ecalEnergy,track->Position.T()));
    403         } else {
    404           //      cout << " Skipping track hit E=" << ecalEnergy << " T=" << track->Position.T() << " isPU=" << track->IsPU << " isRecoPU=" << track->IsRecoPU
    405           //           << " PID=" << track->PID << endl;
    406         }
    407       }
    408 
     389      fTrackECalTime += TMath::Sqrt(ecalEnergy)*position.T();
     390      fTrackHCalTime += TMath::Sqrt(hcalEnergy)*position.T();
     391
     392      fTrackECalTimeWeight += TMath::Sqrt(ecalEnergy);
     393      fTrackHCalTimeWeight += TMath::Sqrt(hcalEnergy);
    409394
    410395      fTowerTrackArray->Add(track);
     
    412397      continue;
    413398    }
    414  
     399
    415400    // check for photon and electron hits in current tower
    416401    if(flags & 2) ++fTowerPhotonHits;
     
    427412    fTowerHCalEnergy += hcalEnergy;
    428413
    429     if (ecalEnergy > fTimingEMin && fTower) {
    430       if (abs(particle->PID) != 11 || !fElectronsFromTrack) {
    431         //      cout << " SCZ Debug About to push back particle hit E=" << ecalEnergy << " T=" << particle->Position.T() << " isPU=" << particle->IsPU
    432         //   << " PID=" << particle->PID << endl;
    433         fTower->Ecal_E_t.push_back(std::make_pair<Float_t,Float_t>(ecalEnergy,particle->Position.T()));
    434       } else {
    435        
    436         // N.B. Only charged particle set to leave ecal energy is the electrons
    437         //      cout << " SCZ Debug To avoid double-counting, skipping particle hit E=" << ecalEnergy << " T=" << particle->Position.T() << " isPU=" << particle->IsPU
    438         //           << " PID=" << particle->PID << endl;
    439        
    440       }
    441     }
     414    fTowerECalTime += TMath::Sqrt(ecalEnergy)*position.T();
     415    fTowerHCalTime += TMath::Sqrt(hcalEnergy)*position.T();
     416
     417    fTowerECalTimeWeight += TMath::Sqrt(ecalEnergy);
     418    fTowerHCalTimeWeight += TMath::Sqrt(hcalEnergy);
     419
    442420
    443421    fTower->AddCandidate(particle);
     
    456434  Double_t ecalEnergy, hcalEnergy;
    457435  Double_t ecalSigma, hcalSigma;
    458  
     436  Double_t ecalTime, hcalTime, time;
     437
    459438  if(!fTower) return;
    460439
     
    465444  hcalEnergy = LogNormal(fTowerHCalEnergy, hcalSigma);
    466445
     446  ecalTime = (fTowerECalTimeWeight < 1.0E-09 ) ? 0.0 : fTowerECalTime/fTowerECalTimeWeight;
     447  hcalTime = (fTowerHCalTimeWeight < 1.0E-09 ) ? 0.0 : fTowerHCalTime/fTowerHCalTimeWeight;
     448
    467449  ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, ecalEnergy);
    468450  hcalSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, hcalEnergy);
     
    472454
    473455  energy = ecalEnergy + hcalEnergy;
    474    
     456  time = (TMath::Sqrt(ecalEnergy)*ecalTime + TMath::Sqrt(hcalEnergy)*hcalTime)/(TMath::Sqrt(ecalEnergy) + TMath::Sqrt(hcalEnergy));
     457
    475458  if(fSmearTowerCenter)
    476459  {
     
    486469  pt = energy / TMath::CosH(eta);
    487470
    488   // Time calculation for tower
    489   fTower->Ntimes = 0;
    490   Float_t tow_sumT = 0;
    491   Float_t tow_sumW = 0;
    492  
    493   for (Int_t i = 0 ; i < fTower->Ecal_E_t.size() ; i++)
    494   {
    495     Float_t w = TMath::Sqrt(fTower->Ecal_E_t[i].first);
    496     tow_sumT += w*fTower->Ecal_E_t[i].second;
    497     tow_sumW += w;
    498     fTower->Ntimes++;
    499   }
    500  
    501   if (tow_sumW > 0.) {
    502     fTower->Position.SetPtEtaPhiE(1.0, eta, phi,tow_sumT/tow_sumW);
    503   } else {
    504     fTower->Position.SetPtEtaPhiE(1.0,eta,phi,999999.);
    505   }
    506 
    507 
     471  fTower->Position.SetPtEtaPhiE(1.0, eta, phi, time);
    508472  fTower->Momentum.SetPtEtaPhiE(pt, eta, phi, energy);
    509473  fTower->Eem = ecalEnergy;
  • modules/Calorimeter.h

    rd38348d rf53a4d2  
    6060  Double_t fTrackECalEnergy, fTrackHCalEnergy;
    6161
    62   Double_t fTimingEMin;
    63   Bool_t fElectronsFromTrack; // for timing
    64  
     62  Double_t fTowerECalTime, fTowerHCalTime;
     63  Double_t fTrackECalTime, fTrackHCalTime;
     64
     65  Double_t fTowerECalTimeWeight, fTowerHCalTimeWeight;
     66  Double_t fTrackECalTimeWeight, fTrackHCalTimeWeight;
     67
    6568  Int_t fTowerTrackHits, fTowerPhotonHits;
    6669
  • modules/FastJetFinder.cc

    rd38348d rf53a4d2  
    6565#include "fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh"
    6666#include "fastjet/contribs/Nsubjettiness/WinnerTakeAllRecombiner.hh"
    67 
    68 #include "fastjet/tools/Filter.hh"
    69 #include "fastjet/tools/Pruner.hh"
    70 #include "fastjet/contribs/RecursiveTools/SoftDrop.hh"
    7167
    7268using namespace std;
     
    124120  fRcutOff = GetDouble("RcutOff", 0.8); // used only if Njettiness is used as jet clustering algo (case 8)
    125121  fN = GetInt("N", 2);                  // used only if Njettiness is used as jet clustering algo (case 8)
    126 
    127   //-- Trimming parameters --
    128  
    129   fComputeTrimming = GetBool("ComputeTrimming", false);
    130   fRTrim = GetDouble("RTrim", 0.2);
    131   fPtFracTrim = GetDouble("PtFracTrim", 0.05);
    132  
    133 
    134   //-- Pruning parameters --
    135  
    136   fComputePruning = GetBool("ComputePruning", false);
    137   fZcutPrun = GetDouble("ZcutPrun", 0.1);
    138   fRcutPrun = GetDouble("RcutPrun", 0.5);
    139   fRPrun = GetDouble("RPrun", 0.8);
    140  
    141   //-- SoftDrop parameters --
    142  
    143   fComputeSoftDrop     = GetBool("ComputeSoftDrop", false);
    144   fBetaSoftDrop        = GetDouble("BetaSoftDrop", 0.0);
    145   fSymmetryCutSoftDrop = GetDouble("SymmetryCutSoftDrop", 0.1);
    146   fR0SoftDrop= GetDouble("R0SoftDrop=", 0.8);
    147  
    148122
    149123  // ---  Jet Area Parameters ---
     
    286260  PseudoJet jet, area;
    287261  ClusterSequence *sequence;
    288   vector< PseudoJet > inputList, outputList, subjets;
     262  vector< PseudoJet > inputList, outputList;
    289263  vector< PseudoJet >::iterator itInputList, itOutputList;
    290264  vector< TEstimatorStruct >::iterator itEstimators;
     
    378352    candidate->DeltaEta = detaMax;
    379353    candidate->DeltaPhi = dphiMax;
    380        
    381     //------------------------------------
    382     // Trimming
    383     //------------------------------------
    384 
    385      if(fComputeTrimming)
    386     {
    387 
    388       fastjet::Filter    trimmer(fastjet::JetDefinition(fastjet::kt_algorithm,fRTrim),fastjet::SelectorPtFractionMin(fPtFracTrim));
    389       fastjet::PseudoJet trimmed_jet = trimmer(*itOutputList);
    390      
    391       trimmed_jet = join(trimmed_jet.constituents());
    392      
    393       candidate->TrimmedP4[0].SetPtEtaPhiM(trimmed_jet.pt(), trimmed_jet.eta(), trimmed_jet.phi(), trimmed_jet.m());
    394        
    395       // four hardest subjets
    396       subjets.clear();
    397       subjets = trimmed_jet.pieces();
    398       subjets = sorted_by_pt(subjets);
    399      
    400       candidate->NSubJetsTrimmed = subjets.size();
    401 
    402       for (size_t i = 0; i < subjets.size() and i < 4; i++){
    403         if(subjets.at(i).pt() < 0) continue ;
    404         candidate->TrimmedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
    405       }
    406     }
    407    
    408    
    409     //------------------------------------
    410     // Pruning
    411     //------------------------------------
    412    
    413    
    414     if(fComputePruning)
    415     {
    416 
    417       fastjet::Pruner    pruner(fastjet::JetDefinition(fastjet::cambridge_algorithm,fRPrun),fZcutPrun,fRcutPrun);
    418       fastjet::PseudoJet pruned_jet = pruner(*itOutputList);
    419 
    420       candidate->PrunedP4[0].SetPtEtaPhiM(pruned_jet.pt(), pruned_jet.eta(), pruned_jet.phi(), pruned_jet.m());
    421          
    422       // four hardest subjet
    423       subjets.clear();
    424       subjets = pruned_jet.pieces();
    425       subjets = sorted_by_pt(subjets);
    426      
    427       candidate->NSubJetsPruned = subjets.size();
    428 
    429       for (size_t i = 0; i < subjets.size() and i < 4; i++){
    430         if(subjets.at(i).pt() < 0) continue ;
    431         candidate->PrunedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
    432       }
    433 
    434     }
    435      
    436     //------------------------------------
    437     // SoftDrop
    438     //------------------------------------
    439    
    440     if(fComputeSoftDrop)
    441     {
    442    
    443       contrib::SoftDrop  softDrop(fBetaSoftDrop,fSymmetryCutSoftDrop,fR0SoftDrop);
    444       fastjet::PseudoJet softdrop_jet = softDrop(*itOutputList);
    445      
    446       candidate->SoftDroppedP4[0].SetPtEtaPhiM(softdrop_jet.pt(), softdrop_jet.eta(), softdrop_jet.phi(), softdrop_jet.m());
    447        
    448       // four hardest subjet
    449      
    450       subjets.clear();
    451       subjets    = softdrop_jet.pieces();
    452       subjets    = sorted_by_pt(subjets);
    453       candidate->NSubJetsSoftDropped = softdrop_jet.pieces().size();
    454 
    455       for (size_t i = 0; i < subjets.size()  and i < 4; i++){
    456         if(subjets.at(i).pt() < 0) continue ;
    457         candidate->SoftDroppedP4[i+1].SetPtEtaPhiM(subjets.at(i).pt(), subjets.at(i).eta(), subjets.at(i).phi(), subjets.at(i).m());
    458       }
    459     }
    460  
     354
    461355    // --- compute N-subjettiness with N = 1,2,3,4,5 ----
    462356
  • modules/FastJetFinder.h

    rd38348d rf53a4d2  
    8383  Int_t fN ;
    8484
    85   //-- Trimming parameters --
    86  
    87   Bool_t fComputeTrimming;
    88   Double_t fRTrim;
    89   Double_t fPtFracTrim;
    90  
    91   //-- Pruning parameters --
    92 
    93   Bool_t fComputePruning;
    94   Double_t fZcutPrun;
    95   Double_t fRcutPrun;
    96   Double_t fRPrun;
    97 
    98   //-- SoftDrop parameters --
    99 
    100   Bool_t fComputeSoftDrop;
    101   Double_t fBetaSoftDrop;
    102   Double_t fSymmetryCutSoftDrop;
    103   Double_t fR0SoftDrop;
    104 
    10585  // --- FastJet Area method --------
    10686
  • modules/Isolation.cc

    rd38348d rf53a4d2  
    2525 *  the transverse momenta fraction within (PTRatioMin, PTRatioMax].
    2626 *
    27  *  \author P. Demin, M. Selvaggi, R. Gerosa - UCL, Louvain-la-Neuve
     27 *  \author P. Demin - UCL, Louvain-la-Neuve
    2828 *
    2929 */
     
    109109  fUsePTSum = GetBool("UsePTSum", false);
    110110
    111   fVetoLeptons = GetBool("VetoLeptons", true); 
    112  
    113111  fClassifier->fPTMin = GetDouble("PTMin", 0.5);
    114 
    115112
    116113  // import input array(s)
     
    156153  Candidate *candidate, *isolation, *object;
    157154  TObjArray *isolationArray;
    158   Double_t sumCharged, sumNeutral, sumAllParticles, sumChargedPU, sumDBeta, ratioDBeta, sumRhoCorr, ratioRhoCorr;
     155  Double_t sum, ratio;
    159156  Int_t counter;
    160157  Double_t eta = 0.0;
     
    183180
    184181    // loop over all input tracks
    185    
    186     sumNeutral = 0.0;
    187     sumCharged = 0.0;
    188     sumChargedPU = 0.0;
    189     sumAllParticles = 0.0;
    190    
     182    sum = 0.0;
    191183    counter = 0;
    192184    itIsolationArray.Reset();
    193    
    194185    while((isolation = static_cast<Candidate*>(itIsolationArray.Next())))
    195186    {
     
    197188
    198189      if(candidateMomentum.DeltaR(isolationMomentum) <= fDeltaRMax &&
    199          candidate->GetUniqueID() != isolation->GetUniqueID() &&
    200          ( !fVetoLeptons || (TMath::Abs(candidate->PID) != 11 && (TMath::Abs(candidate->PID) != 13)) ) )
     190         candidate->GetUniqueID() != isolation->GetUniqueID())
    201191      {
    202      
    203         sumAllParticles += isolationMomentum.Pt();
    204         if(isolation->Charge !=0)
    205         {
    206           sumCharged += isolationMomentum.Pt();
    207           if(isolation->IsRecoPU != 0) sumChargedPU += isolationMomentum.Pt();
    208         }
    209  
    210         else sumNeutral += isolationMomentum.Pt();
    211  
     192        sum += isolationMomentum.Pt();
    212193        ++counter;
    213194      }
     
    228209    }
    229210
    230        
    231      // correct sum for pile-up contamination
    232     sumDBeta = sumCharged + TMath::Max(sumNeutral-0.5*sumChargedPU,0.0);
    233     sumRhoCorr = sumCharged + TMath::Max(sumNeutral-TMath::Max(rho,0.0)*fDeltaRMax*fDeltaRMax*TMath::Pi(),0.0);
    234     ratioDBeta = sumDBeta/candidateMomentum.Pt();
    235     ratioRhoCorr = sumRhoCorr/candidateMomentum.Pt();
    236    
    237     candidate->IsolationVar = ratioDBeta;
    238     candidate->IsolationVarRhoCorr = ratioRhoCorr;
    239     candidate->SumPtCharged = sumCharged;
    240     candidate->SumPtNeutral = sumNeutral;
    241     candidate->SumPtChargedPU = sumChargedPU;
    242     candidate->SumPt = sumAllParticles;
    243 
    244     if((fUsePTSum && sumDBeta > fPTSumMax) || ratioDBeta > fPTRatioMax) continue;
     211    // correct sum for pile-up contamination
     212    sum = sum - rho*fDeltaRMax*fDeltaRMax*TMath::Pi();
     213
     214    ratio = sum/candidateMomentum.Pt();
     215    if((fUsePTSum && sum > fPTSumMax) || ratio > fPTRatioMax) continue;
     216
    245217    fOutputArray->Add(candidate);
    246218  }
  • modules/Isolation.h

    rd38348d rf53a4d2  
    5959  Bool_t fUsePTSum;
    6060
    61   Bool_t fVetoLeptons; 
    62  
    6361  IsolationClassifier *fClassifier; //!
    6462
  • modules/ModulesLinkDef.h

    rd38348d rf53a4d2  
    4242#include "modules/UniqueObjectFinder.h"
    4343#include "modules/TrackCountingBTagging.h"
    44 #include "modules/BTaggingCMS.h"
    4544#include "modules/BTagging.h"
    4645#include "modules/TauTagging.h"
     
    5958#include "modules/Weighter.h"
    6059#include "modules/Hector.h"
    61 #include "modules/RunPUPPI.h"
    62 #include "modules/JetFlavorAssociation.h"
    6360#include "modules/ExampleModule.h"
    6461
     
    8582#pragma link C++ class UniqueObjectFinder+;
    8683#pragma link C++ class TrackCountingBTagging+;
    87 #pragma link C++ class BTaggingCMS+;
    8884#pragma link C++ class BTagging+;
    8985#pragma link C++ class TauTagging+;
     
    10298#pragma link C++ class Weighter+;
    10399#pragma link C++ class Hector+;
    104 #pragma link C++ class RunPUPPI+;
    105 #pragma link C++ class JetFlavorAssociation+;
    106100#pragma link C++ class ExampleModule+;
    107101
  • modules/PileUpJetID.cc

    rd38348d rf53a4d2  
     1/*
     2 *  Delphes: a framework for fast simulation of a generic collider experiment
     3 *  Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
     4 *
     5 *  This program is free software: you can redistribute it and/or modify
     6 *  it under the terms of the GNU General Public License as published by
     7 *  the Free Software Foundation, either version 3 of the License, or
     8 *  (at your option) any later version.
     9 *
     10 *  This program is distributed in the hope that it will be useful,
     11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 *  GNU General Public License for more details.
     14 *
     15 *  You should have received a copy of the GNU General Public License
     16 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 */
     18
    119
    220/** \class PileUpJetID
    321 *
    4  *  CMS PileUp Jet ID Variables
    5  *
    6  *  \author S. Zenz
     22 *  CMS PileUp Jet ID Variables, based on http://cds.cern.ch/record/1581583
     23 *
     24 *  \author S. Zenz, December 2013
    725 *
    826 */
     
    2341#include "TRandom3.h"
    2442#include "TObjArray.h"
    25 //#include "TDatabasePDG.h"
     43#include "TDatabasePDG.h"
    2644#include "TLorentzVector.h"
    2745
     
    3654
    3755PileUpJetID::PileUpJetID() :
    38   fItJetInputArray(0),fTrackInputArray(0),fNeutralInputArray(0)
     56  fItJetInputArray(0),fTrackInputArray(0),fNeutralInputArray(0),fItVertexInputArray(0)
    3957{
    4058
     
    5270void PileUpJetID::Init()
    5371{
    54 
    5572  fJetPTMin = GetDouble("JetPTMin", 20.0);
    5673  fParameterR = GetDouble("ParameterR", 0.5);
    5774  fUseConstituents = GetInt("UseConstituents", 0);
    5875
    59 
    60   /*
    61   Double_t fMeanSqDeltaRMaxBarrel; // |eta| < 1.5
    62   Double_t fBetaMinBarrel; // |eta| < 2.5
    63   Double_t fMeanSqDeltaRMaxEndcap; // 1.5 < |eta| < 4.0
    64   Double_t fBetaMinEndcap; // 1.5 < |eta| < 4.0
    65   Double_t fMeanSqDeltaRMaxForward; // |eta| > 4.0
    66   */
    67 
    68   fMeanSqDeltaRMaxBarrel = GetDouble("MeanSqDeltaRMaxBarrel",0.1);
    69   fBetaMinBarrel = GetDouble("BetaMinBarrel",0.1);
    70   fMeanSqDeltaRMaxEndcap = GetDouble("MeanSqDeltaRMaxEndcap",0.1);
    71   fBetaMinEndcap = GetDouble("BetaMinEndcap",0.1);
    72   fMeanSqDeltaRMaxForward = GetDouble("MeanSqDeltaRMaxForward",0.1);
    73   fJetPTMinForNeutrals = GetDouble("JetPTMinForNeutrals", 20.0);
    74   fNeutralPTMin = GetDouble("NeutralPTMin", 2.0);
    75 
    76 
    77 
    78   cout << "  set MeanSqDeltaRMaxBarrel " << fMeanSqDeltaRMaxBarrel << endl;
    79   cout << "  set BetaMinBarrel " << fBetaMinBarrel << endl;
    80   cout << "  set MeanSqDeltaRMaxEndcap " << fMeanSqDeltaRMaxEndcap << endl;
    81   cout << "  set BetaMinEndcap " << fBetaMinEndcap << endl;
    82   cout << "  set MeanSqDeltaRMaxForward " << fMeanSqDeltaRMaxForward << endl;
    83 
    84 
    85 
    8676  fAverageEachTower = false; // for timing
    8777
     
    9181  fItJetInputArray = fJetInputArray->MakeIterator();
    9282
    93 
    94   //  cout << "BeforE SCZ additions in init" << endl;
    95   //  cout << GetString("TrackInputArray", "ParticlePropagator/tracks") << endl;
    96   //  cout << GetString("EFlowTrackInputArray", "ParticlePropagator/tracks") << endl;
    97 
    98   fTrackInputArray = ImportArray(GetString("TrackInputArray", "ParticlePropagator/tracks"));
     83  fTrackInputArray = ImportArray(GetString("TrackInputArray", "Calorimeter/eflowTracks"));
    9984  fItTrackInputArray = fTrackInputArray->MakeIterator();
    10085
    101   fNeutralInputArray = ImportArray(GetString("NeutralInputArray", "ParticlePropagator/tracks"));
     86  fNeutralInputArray = ImportArray(GetString("NeutralInputArray", "Calorimeter/eflowTowers"));
    10287  fItNeutralInputArray = fNeutralInputArray->MakeIterator();
    10388
     89  fVertexInputArray = ImportArray(GetString("VertexInputArray", "PileUpMerger/vertices"));
     90  fItVertexInputArray = fVertexInputArray->MakeIterator();
     91
     92  fZVertexResolution  = GetDouble("ZVertexResolution", 0.005)*1.0E3;
    10493
    10594  // create output array(s)
    10695
    10796  fOutputArray = ExportArray(GetString("OutputArray", "jets"));
    108 
    109   fNeutralsInPassingJets = ExportArray(GetString("NeutralsInPassingJets","eflowtowers"));
    110 
    111 
    112   //  cout << " end of INIT " << endl;
    113 
    11497}
    11598
     
    118101void PileUpJetID::Finish()
    119102{
    120   //  cout << "In finish" << endl;
    121 
    122103  if(fItJetInputArray) delete fItJetInputArray;
    123104  if(fItTrackInputArray) delete fItTrackInputArray;
    124105  if(fItNeutralInputArray) delete fItNeutralInputArray;
    125 
     106  if(fItVertexInputArray) delete fItVertexInputArray;
    126107}
    127108
     
    130111void PileUpJetID::Process()
    131112{
    132   //  cout << "start of process" << endl;
    133 
    134113  Candidate *candidate, *constituent;
    135114  TLorentzVector momentum, area;
    136 
    137   //  cout << "BeforE SCZ additions in process" << endl;
    138 
    139   // SCZ
    140   Candidate *trk;
     115  Int_t i, nc, nn;
     116  Double_t sumpt, sumptch, sumptchpv, sumptchpu, sumdrsqptsq, sumptsq;
     117  Double_t dr, pt, pt_ann[5];
     118  Double_t zvtx = 0.0;
     119
     120  Candidate *track;
     121
     122  // find z position of primary vertex
     123
     124  fItVertexInputArray->Reset();
     125  while((candidate = static_cast<Candidate*>(fItVertexInputArray->Next())))
     126  {
     127    if(!candidate->IsPU)
     128    {
     129      zvtx = candidate->Position.Z();
     130      break;
     131    }
     132  }
    141133
    142134  // loop over all input candidates
     
    147139    area = candidate->Area;
    148140
    149     float sumT0 = 0.;
    150     float sumT1 = 0.;
    151     float sumT10 = 0.;
    152     float sumT20 = 0.;
    153     float sumT30 = 0.;
    154     float sumT40 = 0.;
    155     float sumWeightsForT = 0.;
    156     candidate->Ntimes = 0;
    157 
    158     float sumpt = 0.;
    159     float sumptch = 0.;
    160     float sumptchpv = 0.;
    161     float sumptchpu = 0.;
    162     float sumdrsqptsq = 0.;
    163     float sumptsq = 0.;
    164     int nc = 0;
    165     int nn = 0;
    166     float pt_ann[5];
    167 
    168     for (int i = 0 ; i < 5 ; i++) {
    169       pt_ann[i] = 0.;
    170     }
    171 
    172     if (fUseConstituents) {
     141    sumpt = 0.0;
     142    sumptch = 0.0;
     143    sumptchpv = 0.0;
     144    sumptchpu = 0.0;
     145    sumdrsqptsq = 0.0;
     146    sumptsq = 0.0;
     147    nc = 0;
     148    nn = 0;
     149
     150    for(i = 0; i < 5; ++i)
     151    {
     152      pt_ann[i] = 0.0;
     153    }
     154
     155    if(fUseConstituents)
     156    {
    173157      TIter itConstituents(candidate->GetCandidates());
    174       while((constituent = static_cast<Candidate*>(itConstituents.Next()))) {
    175         float pt = constituent->Momentum.Pt();
    176         float dr = candidate->Momentum.DeltaR(constituent->Momentum);
    177         //      cout << " There exists a constituent with dr=" << dr << endl;
    178         sumpt += pt;
    179         sumdrsqptsq += dr*dr*pt*pt;
    180         sumptsq += pt*pt;
    181         if (constituent->Charge == 0) {
    182           nn++;
    183         } else {
    184           if (constituent->IsRecoPU) {
    185             sumptchpu += pt;
    186           } else {
    187             sumptchpv += pt;
    188           }
    189           sumptch += pt;
    190           nc++;
    191         }
    192         for (int i = 0 ; i < 5 ; i++) {
    193           if (dr > 0.1*i && dr < 0.1*(i+1)) {
    194             pt_ann[i] += pt;
    195           }
    196         }
    197         float tow_sumT = 0;
    198         float tow_sumW = 0;
    199         for (int i = 0 ; i < constituent->Ecal_E_t.size() ; i++) {
    200           float w = TMath::Sqrt(constituent->Ecal_E_t[i].first);
    201           if (fAverageEachTower) {
    202             tow_sumT += w*constituent->Ecal_E_t[i].second;
    203             tow_sumW += w;
    204           } else {
    205             sumT0 += w*constituent->Ecal_E_t[i].second;
    206             sumT1 += w*gRandom->Gaus(constituent->Ecal_E_t[i].second,0.001);
    207             sumT10 += w*gRandom->Gaus(constituent->Ecal_E_t[i].second,0.010);
    208             sumT20 += w*gRandom->Gaus(constituent->Ecal_E_t[i].second,0.020);
    209             sumT30 += w*gRandom->Gaus(constituent->Ecal_E_t[i].second,0.030);
    210             sumT40 += w*gRandom->Gaus(constituent->Ecal_E_t[i].second,0.040);
    211             sumWeightsForT += w;
    212             candidate->Ntimes++;
    213           }
    214         }
    215         if (fAverageEachTower && tow_sumW > 0.) {
    216           sumT0 += tow_sumT;
    217           sumT1 += tow_sumW*gRandom->Gaus(tow_sumT/tow_sumW,0.001);
    218           sumT10 += tow_sumW*gRandom->Gaus(tow_sumT/tow_sumW,0.0010);
    219           sumT20 += tow_sumW*gRandom->Gaus(tow_sumT/tow_sumW,0.0020);
    220           sumT30 += tow_sumW*gRandom->Gaus(tow_sumT/tow_sumW,0.0030);
    221           sumT40 += tow_sumW*gRandom->Gaus(tow_sumT/tow_sumW,0.0040);
    222           sumWeightsForT += tow_sumW;
    223           candidate->Ntimes++;
    224         }
    225       }
    226     } else {
     158      while((constituent = static_cast<Candidate*>(itConstituents.Next())))
     159      {
     160        pt = constituent->Momentum.Pt();
     161        dr = candidate->Momentum.DeltaR(constituent->Momentum);
     162        sumpt += pt;
     163        sumdrsqptsq += dr*dr*pt*pt;
     164        sumptsq += pt*pt;
     165        if(constituent->Charge == 0)
     166        {
     167          // neutrals
     168          ++nn;
     169        }
     170        else
     171        {
     172          // charged
     173          if(constituent->IsPU && TMath::Abs(constituent->Position.Z()-zvtx) > fZVertexResolution)
     174          {
     175            sumptchpu += pt;
     176          }
     177          else
     178          {
     179            sumptchpv += pt;
     180          }
     181          sumptch += pt;
     182          ++nc;
     183        }
     184        for(i = 0; i < 5; ++i)
     185        {
     186          if(dr > 0.1*i && dr < 0.1*(i + 1))
     187          {
     188            pt_ann[i] += pt;
     189          }
     190        }
     191      }
     192    }
     193    else
     194    {
    227195      // Not using constituents, using dr
    228196      fItTrackInputArray->Reset();
    229       while ((trk = static_cast<Candidate*>(fItTrackInputArray->Next()))) {
    230         if (trk->Momentum.DeltaR(candidate->Momentum) < fParameterR) {
    231           float pt = trk->Momentum.Pt();
    232           sumpt += pt;
    233           sumptch += pt;
    234           if (trk->IsRecoPU) {
    235             sumptchpu += pt;
    236           } else {
    237             sumptchpv += pt;
    238           }
    239           float dr = candidate->Momentum.DeltaR(trk->Momentum);
    240           sumdrsqptsq += dr*dr*pt*pt;
    241           sumptsq += pt*pt;
    242           nc++;
    243           for (int i = 0 ; i < 5 ; i++) {
    244             if (dr > 0.1*i && dr < 0.1*(i+1)) {
    245               pt_ann[i] += pt;
    246             }
    247           }
    248         }
    249       }
     197      while((track = static_cast<Candidate*>(fItTrackInputArray->Next())))
     198      {
     199        if(track->Momentum.DeltaR(candidate->Momentum) < fParameterR)
     200        {
     201          pt = track->Momentum.Pt();
     202          sumpt += pt;
     203          sumptch += pt;
     204          if(track->IsPU && TMath::Abs(track->Position.Z()-zvtx) > fZVertexResolution)
     205          {
     206            sumptchpu += pt;
     207          }
     208          else
     209          {
     210            sumptchpv += pt;
     211          }
     212          dr = candidate->Momentum.DeltaR(track->Momentum);
     213          sumdrsqptsq += dr*dr*pt*pt;
     214          sumptsq += pt*pt;
     215          nc++;
     216          for(i = 0; i < 5; ++i)
     217          {
     218            if(dr > 0.1*i && dr < 0.1*(i + 1))
     219            {
     220              pt_ann[i] += pt;
     221            }
     222          }
     223        }
     224      }
     225
    250226      fItNeutralInputArray->Reset();
    251       while ((constituent = static_cast<Candidate*>(fItNeutralInputArray->Next()))) {
    252         if (constituent->Momentum.DeltaR(candidate->Momentum) < fParameterR) {
    253           float pt = constituent->Momentum.Pt();
    254           sumpt += pt;
    255           float dr = candidate->Momentum.DeltaR(constituent->Momentum);
    256           sumdrsqptsq += dr*dr*pt*pt;
    257           sumptsq += pt*pt;
    258           nn++;
    259           for (int i = 0 ; i < 5 ; i++) {
    260             if (dr > 0.1*i && dr < 0.1*(i+1)) {
    261             pt_ann[i] += pt;
    262             }
    263           }
    264         }
    265       }
    266     }
    267 
    268     if (sumptch > 0.) {
    269       candidate->Beta = sumptchpv/sumptch;
    270       candidate->BetaStar = sumptchpu/sumptch;
    271     } else {
    272       candidate->Beta = -999.;
    273       candidate->BetaStar = -999.;
    274     }
    275     if (sumptsq > 0.) {
     227      while ((constituent = static_cast<Candidate*>(fItNeutralInputArray->Next())))
     228      {
     229        if(constituent->Momentum.DeltaR(candidate->Momentum) < fParameterR)
     230        {
     231          pt = constituent->Momentum.Pt();
     232          sumpt += pt;
     233          dr = candidate->Momentum.DeltaR(constituent->Momentum);
     234          sumdrsqptsq += dr*dr*pt*pt;
     235          sumptsq += pt*pt;
     236          nn++;
     237          for(i = 0; i < 5; ++i)
     238          {
     239            if(dr > 0.1*i && dr < 0.1*(i + 1))
     240            {
     241              pt_ann[i] += pt;
     242            }
     243          }
     244        }
     245      }
     246    }
     247
     248    if(sumptch > 0.0)
     249    {
     250      candidate->Beta = sumptchpu/sumptch;
     251      candidate->BetaStar = sumptchpv/sumptch;
     252    }
     253    else
     254    {
     255      candidate->Beta = -999.0;
     256      candidate->BetaStar = -999.0;
     257    }
     258    if(sumptsq > 0.0)
     259    {
    276260      candidate->MeanSqDeltaR = sumdrsqptsq/sumptsq;
    277     } else {
    278       candidate->MeanSqDeltaR = -999.;
     261    }
     262    else
     263    {
     264      candidate->MeanSqDeltaR = -999.0;
    279265    }
    280266    candidate->NCharged = nc;
    281267    candidate->NNeutrals = nn;
    282     if (sumpt > 0.) {
     268    if(sumpt > 0.0)
     269    {
    283270      candidate->PTD = TMath::Sqrt(sumptsq) / sumpt;
    284       for (int i = 0 ; i < 5 ; i++) {
     271      for(i = 0; i < 5; ++i)
     272      {
    285273        candidate->FracPt[i] = pt_ann[i]/sumpt;
    286274      }
    287     } else {
    288       candidate->PTD = -999.;
    289       for (int i = 0 ; i < 5 ; i++) {
    290         candidate->FracPt[i] = -999.;
     275    }
     276    else
     277    {
     278      candidate->PTD = -999.0;
     279      for(i = 0; i < 5; ++i)
     280      {
     281        candidate->FracPt[i] = -999.0;
    291282      }
    292283    }
    293284
    294285    fOutputArray->Add(candidate);
    295 
    296     // New stuff
    297     /*
    298     fMeanSqDeltaRMaxBarrel = GetDouble("MeanSqDeltaRMaxBarrel",0.1);
    299     fBetaMinBarrel = GetDouble("BetaMinBarrel",0.1);
    300     fMeanSqDeltaRMaxEndcap = GetDouble("MeanSqDeltaRMaxEndcap",0.1);
    301     fBetaMinEndcap = GetDouble("BetaMinEndcap",0.1);
    302     fMeanSqDeltaRMaxForward = GetDouble("MeanSqDeltaRMaxForward",0.1);
    303     */
    304 
    305     bool passId = false;
    306     if (candidate->Momentum.Pt() > fJetPTMinForNeutrals && candidate->MeanSqDeltaR > -0.1) {
    307       if (fabs(candidate->Momentum.Eta())<1.5) {
    308         passId = ((candidate->Beta > fBetaMinBarrel) && (candidate->MeanSqDeltaR < fMeanSqDeltaRMaxBarrel));
    309       } else if (fabs(candidate->Momentum.Eta())<4.0) {
    310         passId = ((candidate->Beta > fBetaMinEndcap) && (candidate->MeanSqDeltaR < fMeanSqDeltaRMaxEndcap));
    311       } else {
    312         passId = (candidate->MeanSqDeltaR < fMeanSqDeltaRMaxForward);
    313       }
    314     }
    315 
    316     //    cout << " Pt Eta MeanSqDeltaR Beta PassId " << candidate->Momentum.Pt()
    317     //   << " " << candidate->Momentum.Eta() << " " << candidate->MeanSqDeltaR << " " << candidate->Beta << " " << passId << endl;
    318 
    319     if (passId) {
    320       if (fUseConstituents) {
    321         TIter itConstituents(candidate->GetCandidates());
    322         while((constituent = static_cast<Candidate*>(itConstituents.Next()))) {
    323           if (constituent->Charge == 0 && constituent->Momentum.Pt() > fNeutralPTMin) {
    324             fNeutralsInPassingJets->Add(constituent);
    325             //      cout << "    Constitutent added Pt Eta Charge " << constituent->Momentum.Pt() << " " << constituent->Momentum.Eta() << " " << constituent->Charge << endl;
    326           }
    327         }
    328       } else { // use DeltaR
    329         fItNeutralInputArray->Reset();
    330         while ((constituent = static_cast<Candidate*>(fItNeutralInputArray->Next()))) {
    331           if (constituent->Momentum.DeltaR(candidate->Momentum) < fParameterR && constituent->Momentum.Pt() > fNeutralPTMin) {
    332             fNeutralsInPassingJets->Add(constituent);
    333             //            cout << "    Constitutent added Pt Eta Charge " << constituent->Momentum.Pt() << " " << constituent->Momentum.Eta() << " " << constituent->Charge << endl;
    334           }
    335         }
    336       }
    337     }
    338 
    339 
    340286  }
    341287}
    342288
    343289//------------------------------------------------------------------------------
     290
  • modules/PileUpJetID.h

    rd38348d rf53a4d2  
     1/*
     2 *  Delphes: a framework for fast simulation of a generic collider experiment
     3 *  Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
     4 *
     5 *  This program is free software: you can redistribute it and/or modify
     6 *  it under the terms of the GNU General Public License as published by
     7 *  the Free Software Foundation, either version 3 of the License, or
     8 *  (at your option) any later version.
     9 *
     10 *  This program is distributed in the hope that it will be useful,
     11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 *  GNU General Public License for more details.
     14 *
     15 *  You should have received a copy of the GNU General Public License
     16 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 */
     18
    119#ifndef PileUpJetID_h
    220#define PileUpJetID_h
     
    422/** \class PileUpJetID
    523 *
    6  *  CMS PileUp Jet ID Variables
     24 *  CMS PileUp Jet ID Variables, based on http://cds.cern.ch/record/1581583
    725 *
    8  *  \author S. Zenz
     26 *  \author S. Zenz, December 2013
    927 *
    1028 */
     
    1634
    1735class TObjArray;
    18 class DelphesFormula;
    1936
    2037class PileUpJetID: public DelphesModule
     
    3451  Double_t fParameterR;
    3552
    36   Double_t fMeanSqDeltaRMaxBarrel; // |eta| < 1.5
    37   Double_t fBetaMinBarrel; // |eta| < 2.5
    38   Double_t fMeanSqDeltaRMaxEndcap; // 1.5 < |eta| < 4.0
    39   Double_t fBetaMinEndcap; // 1.5 < |eta| < 4.0
    40   Double_t fMeanSqDeltaRMaxForward; // |eta| > 4.0
    41 
    42   Double_t fNeutralPTMin;
    43   Double_t fJetPTMinForNeutrals;
    44 
    45   /*
    46 JAY
    47 ---
    48 
    49 |Eta|<1.5
    50 
    51 meanSqDeltaR betaStar SigEff BgdEff
    52 0.13 0.92 96% 8%
    53 0.13 0.95 97% 16%
    54 0.13 0.97 98% 27%
    55 
    56 |Eta|>1.5
    57 
    58 meanSqDeltaR betaStar SigEff BgdEff
    59 0.14 0.91 95% 15%
    60 0.14 0.94 97% 19%
    61 0.14 0.97 98% 29%
    62 
    63 BRYAN
    64 -----
    65 
    66 Barrel (MeanSqDR, Beta, sig eff, bg eff):
    67 0.10, 0.08, 90%, 8%
    68 0.11, 0.12, 90%, 6%
    69 0.13, 0.16, 89%, 5%
    70 
    71 Endcap (MeanSqDR, Beta, sig eff, bg eff):
    72 0.07, 0.06, 89%, 4%
    73 0.08, 0.08, 92%, 6%
    74 0.09, 0.08, 95%, 10%
    75 0.10, 0.08, 97%, 13%
    76 
    77 SETH GUESSES FOR |eta| > 4.0
    78 ----------------------------
    79 
    80 MeanSqDeltaR
    81 0.07
    82 0.10
    83 0.14
    84 0.2
    85   */
    86 
    8753  // If set to true, may have weird results for PFCHS
    8854  // If set to false, uses everything within dR < fParameterR even if in other jets &c.
    8955  // Results should be very similar for PF
    90   Int_t fUseConstituents; 
     56  Int_t fUseConstituents;
    9157
    9258  Bool_t fAverageEachTower;
     
    9662  const TObjArray *fJetInputArray; //!
    9763
    98   const TObjArray *fTrackInputArray; // SCZ
    99   const TObjArray *fNeutralInputArray;
     64  const TObjArray *fTrackInputArray; //!
     65  const TObjArray *fNeutralInputArray; //!
    10066
    101   TIterator *fItTrackInputArray; // SCZ
    102   TIterator *fItNeutralInputArray; // SCZ
     67  TIterator *fItTrackInputArray; //!
     68  TIterator *fItNeutralInputArray; //!
    10369
    10470  TObjArray *fOutputArray; //!
    105   TObjArray *fNeutralsInPassingJets; // SCZ
    10671
     72  TIterator *fItVertexInputArray; //!
     73  const TObjArray *fVertexInputArray; //!
    10774
    108   ClassDef(PileUpJetID, 2)
     75  Double_t fZVertexResolution;
     76
     77  ClassDef(PileUpJetID, 1)
    10978};
    11079
    11180#endif
     81
  • modules/PileUpMerger.cc

    rd38348d rf53a4d2  
    8080  fTVertexSpread = GetDouble("TVertexSpread", 1.5E-09);
    8181
    82   fInputBeamSpotX = GetDouble("InputBeamSpotX", 0.0);
    83   fInputBeamSpotY = GetDouble("InputBeamSpotY", 0.0);
    84   fOutputBeamSpotX = GetDouble("OutputBeamSpotX", 0.0);
    85   fOutputBeamSpotY = GetDouble("OutputBeamSpotY", 0.0);
    86 
    8782  // read vertex smearing formula
    8883
     
    116111  TParticlePDG *pdgParticle;
    117112  Int_t pid;
    118   Float_t x, y, z, t, vx, vy;
     113  Float_t x, y, z, t;
    119114  Float_t px, py, pz, e;
    120115  Double_t dz, dphi, dt;
    121   Int_t numberOfEvents, event, numberOfParticles;
     116  Int_t numberOfEvents, event;
    122117  Long64_t allEntries, entry;
    123   Candidate *candidate, *vertex;
     118  Candidate *candidate, *vertexcandidate;
    124119  DelphesFactory *factory;
    125120
     
    128123  fItInputArray->Reset();
    129124
    130   // --- Deal with primary vertex first  ------
     125  // --- Deal with Primary vertex first  ------
    131126
    132127  fFunction->GetRandom2(dz, dt);
     
    134129  dt *= c_light*1.0E3; // necessary in order to make t in mm/c
    135130  dz *= 1.0E3; // necessary in order to make z in mm
    136   vx = 0.0;
    137   vy = 0.0;
    138   numberOfParticles = fInputArray->GetEntriesFast();
     131
    139132  while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
    140133  {
    141     vx += candidate->Position.X();
    142     vy += candidate->Position.Y();
    143134    z = candidate->Position.Z();
    144135    t = candidate->Position.T();
     
    148139  }
    149140
    150   if(numberOfParticles > 0)
    151   {
    152     vx /= numberOfParticles;
    153     vy /= numberOfParticles;
    154   }
    155 
    156141  factory = GetFactory();
    157142
    158   vertex = factory->NewCandidate();
    159   vertex->Position.SetXYZT(vx, vy, dz, dt);
    160   fVertexOutputArray->Add(vertex);
     143  vertexcandidate = factory->NewCandidate();
     144  vertexcandidate->Position.SetXYZT(0.0, 0.0, dz, dt);
     145  fVertexOutputArray->Add(vertexcandidate);
    161146
    162147  // --- Then with pile-up vertices  ------
     
    196181    dphi = gRandom->Uniform(-TMath::Pi(), TMath::Pi());
    197182
    198     vx = 0.0;
    199     vy = 0.0;
    200     numberOfParticles = 0;
     183    vertexcandidate = factory->NewCandidate();
     184    vertexcandidate->Position.SetXYZT(0.0, 0.0, dz, dt);
     185    vertexcandidate->IsPU = 1;
     186
     187    fVertexOutputArray->Add(vertexcandidate);
     188
    201189    while(fReader->ReadParticle(pid, x, y, z, t, px, py, pz, e))
    202190    {
     
    216204      candidate->Momentum.RotateZ(dphi);
    217205
    218       x -= fInputBeamSpotX;
    219       y -= fInputBeamSpotY;
    220206      candidate->Position.SetXYZT(x, y, z + dz, t + dt);
    221207      candidate->Position.RotateZ(dphi);
    222       candidate->Position += TLorentzVector(fOutputBeamSpotX, fOutputBeamSpotY, 0.0, 0.0);
    223 
    224       vx += candidate->Position.X();
    225       vy += candidate->Position.Y();
    226       ++numberOfParticles;
    227208
    228209      fParticleOutputArray->Add(candidate);
    229210    }
    230 
    231     if(numberOfParticles > 0)
    232     {
    233       vx /= numberOfParticles;
    234       vy /= numberOfParticles;
    235     }
    236 
    237     vertex = factory->NewCandidate();
    238     vertex->Position.SetXYZT(vx, vy, dz, dt);
    239     vertex->IsPU = 1;
    240 
    241     fVertexOutputArray->Add(vertex);
    242211  }
    243212}
    244213
    245214//------------------------------------------------------------------------------
     215
  • modules/PileUpMerger.h

    rd38348d rf53a4d2  
    5353  Double_t fTVertexSpread;
    5454
    55   Double_t fInputBeamSpotX;
    56   Double_t fInputBeamSpotY;
    57   Double_t fOutputBeamSpotX;
    58   Double_t fOutputBeamSpotY;
    59 
    6055  DelphesTF2 *fFunction; //!
    6156
  • modules/PileUpMergerPythia8.cc

    rd38348d rf53a4d2  
    2929#include "classes/DelphesClasses.h"
    3030#include "classes/DelphesFactory.h"
    31 #include "classes/DelphesTF2.h"
     31#include "classes/DelphesFormula.h"
    3232#include "classes/DelphesPileUpReader.h"
    3333
     
    5656
    5757PileUpMergerPythia8::PileUpMergerPythia8() :
    58   fFunction(0), fPythia(0), fItInputArray(0)
     58  fPythia(0), fItInputArray(0)
    5959{
    60   fFunction = new DelphesTF2;
    6160}
    6261
     
    6564PileUpMergerPythia8::~PileUpMergerPythia8()
    6665{
    67   delete fFunction;
    6866}
    6967
     
    7472  const char *fileName;
    7573
    76   fPileUpDistribution = GetInt("PileUpDistribution", 0);
    77 
    7874  fMeanPileUp  = GetDouble("MeanPileUp", 10);
    79 
    80   fZVertexSpread = GetDouble("ZVertexSpread", 0.15);
    81   fTVertexSpread = GetDouble("TVertexSpread", 1.5E-09);
    82 
    83   fInputBeamSpotX = GetDouble("InputBeamSpotX", 0.0);
    84   fInputBeamSpotY = GetDouble("InputBeamSpotY", 0.0);
    85   fOutputBeamSpotX = GetDouble("OutputBeamSpotX", 0.0);
    86   fOutputBeamSpotY = GetDouble("OutputBeamSpotY", 0.0);
     75  fZVertexSpread = GetDouble("ZVertexSpread", 0.05)*1.0E3;
    8776
    8877  fPTMin = GetDouble("PTMin", 0.0);
    89 
    90   fFunction->Compile(GetString("VertexDistributionFormula", "0.0"));
    91   fFunction->SetRange(-fZVertexSpread, -fTVertexSpread, fZVertexSpread, fTVertexSpread);
    9278
    9379  fileName = GetString("ConfigFile", "MinBias.cmnd");
     
    10086
    10187  // create output arrays
    102   fParticleOutputArray = ExportArray(GetString("ParticleOutputArray", "stableParticles"));
    103   fVertexOutputArray = ExportArray(GetString("VertexOutputArray", "vertices"));
     88  fOutputArray = ExportArray(GetString("OutputArray", "stableParticles"));
    10489}
    10590
     
    118103  TParticlePDG *pdgParticle;
    119104  Int_t pid, status;
    120   Float_t x, y, z, t, vx, vy;
     105  Float_t x, y, z, t;
    121106  Float_t px, py, pz, e;
    122   Double_t dz, dphi, dt;
    123   Int_t numberOfEvents, event, numberOfParticles, i;
    124   Candidate *candidate, *vertex;
     107  Double_t dz, dphi;
     108  Int_t poisson, event, i;
     109  Candidate *candidate;
    125110  DelphesFactory *factory;
    126111
    127   const Double_t c_light = 2.99792458E8;
    128 
    129112  fItInputArray->Reset();
    130 
    131   // --- Deal with primary vertex first  ------
    132 
    133   fFunction->GetRandom2(dz, dt);
    134 
    135   dt *= c_light*1.0E3; // necessary in order to make t in mm/c
    136   dz *= 1.0E3; // necessary in order to make z in mm
    137   vx = 0.0;
    138   vy = 0.0;
    139   numberOfParticles = fInputArray->GetEntriesFast();
    140113  while((candidate = static_cast<Candidate*>(fItInputArray->Next())))
    141114  {
    142     vx += candidate->Position.X();
    143     vy += candidate->Position.Y();
    144     z = candidate->Position.Z();
    145     t = candidate->Position.T();
    146     candidate->Position.SetZ(z + dz);
    147     candidate->Position.SetT(t + dt);
    148     fParticleOutputArray->Add(candidate);
    149   }
    150 
    151   if(numberOfParticles > 0)
    152   {
    153     vx /= numberOfParticles;
    154     vy /= numberOfParticles;
     115    fOutputArray->Add(candidate);
    155116  }
    156117
    157118  factory = GetFactory();
    158119
    159   vertex = factory->NewCandidate();
    160   vertex->Position.SetXYZT(vx, vy, dz, dt);
    161   fVertexOutputArray->Add(vertex);
     120  poisson = gRandom->Poisson(fMeanPileUp);
    162121
    163   // --- Then with pile-up vertices  ------
    164 
    165   switch(fPileUpDistribution)
    166   {
    167     case 0:
    168       numberOfEvents = gRandom->Poisson(fMeanPileUp);
    169       break;
    170     case 1:
    171       numberOfEvents = gRandom->Integer(2*fMeanPileUp + 1);
    172       break;
    173     default:
    174       numberOfEvents = gRandom->Poisson(fMeanPileUp);
    175       break;
    176   }
    177 
    178   for(event = 0; event < numberOfEvents; ++event)
     122  for(event = 0; event < poisson; ++event)
    179123  {
    180124    while(!fPythia->next());
    181125
    182    // --- Pile-up vertex smearing
    183 
    184     fFunction->GetRandom2(dz, dt);
    185 
    186     dt *= c_light*1.0E3; // necessary in order to make t in mm/c
    187     dz *= 1.0E3; // necessary in order to make z in mm
    188 
     126    dz = gRandom->Gaus(0.0, fZVertexSpread);
    189127    dphi = gRandom->Uniform(-TMath::Pi(), TMath::Pi());
    190128
    191     vx = 0.0;
    192     vy = 0.0;
    193     numberOfParticles = fPythia->event.size();
    194     for(i = 1; i < numberOfParticles; ++i)
     129    for(i = 1; i < fPythia->event.size(); ++i)
    195130    {
    196131      Pythia8::Particle &particle = fPythia->event[i];
     
    208143      candidate->PID = pid;
    209144
    210       candidate->Status = 1;
     145      candidate->Status = status;
    211146
    212147      pdgParticle = pdg->GetParticle(pid);
     
    219154      candidate->Momentum.RotateZ(dphi);
    220155
    221       x -= fInputBeamSpotX;
    222       y -= fInputBeamSpotY;
    223       candidate->Position.SetXYZT(x, y, z + dz, t + dt);
     156      candidate->Position.SetXYZT(x, y, z + dz, t);
    224157      candidate->Position.RotateZ(dphi);
    225       candidate->Position += TLorentzVector(fOutputBeamSpotX, fOutputBeamSpotY, 0.0, 0.0);
    226158
    227       vx += candidate->Position.X();
    228       vy += candidate->Position.Y();
    229 
    230       fParticleOutputArray->Add(candidate);
     159      fOutputArray->Add(candidate);
    231160    }
    232 
    233     if(numberOfParticles > 0)
    234     {
    235       vx /= numberOfParticles;
    236       vy /= numberOfParticles;
    237     }
    238 
    239     vertex = factory->NewCandidate();
    240     vertex->Position.SetXYZT(vx, vy, dz, dt);
    241     vertex->IsPU = 1;
    242 
    243     fVertexOutputArray->Add(vertex);
    244161  }
    245162}
    246163
    247164//------------------------------------------------------------------------------
     165
  • modules/PileUpMergerPythia8.h

    rd38348d rf53a4d2  
    3131
    3232class TObjArray;
    33 class DelphesTF2;
    3433
    3534namespace Pythia8
     
    5150private:
    5251
    53   Int_t fPileUpDistribution;
    5452  Double_t fMeanPileUp;
    55 
    5653  Double_t fZVertexSpread;
    57   Double_t fTVertexSpread;
    58 
    59   Double_t fInputBeamSpotX;
    60   Double_t fInputBeamSpotY;
    61   Double_t fOutputBeamSpotX;
    62   Double_t fOutputBeamSpotY;
    63 
    6454  Double_t fPTMin;
    65 
    66   DelphesTF2 *fFunction; //!
    6755
    6856  Pythia8::Pythia *fPythia; //!
     
    7260  const TObjArray *fInputArray; //!
    7361
    74   TObjArray *fParticleOutputArray; //!
    75   TObjArray *fVertexOutputArray; //!
     62  TObjArray *fOutputArray; //!
    7663
    7764  ClassDef(PileUpMergerPythia8, 1)
  • modules/TrackPileUpSubtractor.cc

    rd38348d rf53a4d2  
    7474  fZVertexResolution  = GetDouble("ZVertexResolution", 0.005)*1.0E3;
    7575
    76   fPTMin = GetDouble("PTMin", 0.);
    7776  // import arrays with output from other modules
    78    
     77
    7978  ExRootConfParam param = GetParam("InputArray");
    8079  Long_t i, size;
     
    148147      // assume perfect pile-up subtraction for tracks outside fZVertexResolution
    149148     
    150       if(candidate->IsPU && TMath::Abs(z-zvtx) > fZVertexResolution) candidate->IsRecoPU = 1;
    151       else
    152       {
    153          candidate->IsRecoPU = 0;
    154          if( candidate->Momentum.Pt() > fPTMin) array->Add(candidate);
    155       }
     149      if(candidate->IsPU && TMath::Abs(z-zvtx) > fZVertexResolution) continue;
     150
     151      array->Add(candidate);
    156152    }
    157153  }
  • modules/TrackPileUpSubtractor.h

    rd38348d rf53a4d2  
    5050  Double_t fZVertexResolution;
    5151
    52   Double_t fPTMin;
    53 
    5452  std::map< TIterator *, TObjArray * > fInputMap; //!
    5553
  • modules/TreeWriter.cc

    rd38348d rf53a4d2  
    291291    entry->ZOuter = position.Z();
    292292    entry->TOuter = position.T()*1.0E-3/c_light;
    293 
     293   
    294294    entry->Dxy = candidate->Dxy;
    295295    entry->SDxy = candidate->SDxy ;
     
    297297    entry->Yd = candidate->Yd;
    298298    entry->Zd = candidate->Zd;
    299 
     299   
    300300    const TLorentzVector &momentum = candidate->Momentum;
    301301
     
    362362
    363363    entry->T = position.T()*1.0E-3/c_light;
    364     entry->Ntimes = candidate->Ntimes;
    365364
    366365    FillParticles(candidate, &entry->Particles);
     
    404403    entry->T = position.T()*1.0E-3/c_light;
    405404
    406     // Isolation variables
    407 
    408     entry->IsolationVar = candidate->IsolationVar;
    409     entry->IsolationVarRhoCorr = candidate->IsolationVarRhoCorr ;
    410     entry->SumPtCharged = candidate->SumPtCharged ;
    411     entry->SumPtNeutral = candidate->SumPtNeutral ;
    412     entry->SumPtChargedPU = candidate->SumPtChargedPU ;
    413     entry->SumPt = candidate->SumPt ;
    414 
    415405    entry->EhadOverEem = candidate->Eem > 0.0 ? candidate->Ehad/candidate->Eem : 999.9;
    416406
     
    452442    entry->T = position.T()*1.0E-3/c_light;
    453443
    454     // Isolation variables
    455 
    456     entry->IsolationVar = candidate->IsolationVar;
    457     entry->IsolationVarRhoCorr = candidate->IsolationVarRhoCorr ;
    458     entry->SumPtCharged = candidate->SumPtCharged ;
    459     entry->SumPtNeutral = candidate->SumPtNeutral ;
    460     entry->SumPtChargedPU = candidate->SumPtChargedPU ;
    461     entry->SumPt = candidate->SumPt ;
    462 
    463 
    464444    entry->Charge = candidate->Charge;
    465445
     
    508488    entry->T = position.T()*1.0E-3/c_light;
    509489
    510     // Isolation variables
    511 
    512     entry->IsolationVar = candidate->IsolationVar;
    513     entry->IsolationVarRhoCorr = candidate->IsolationVarRhoCorr ;
    514     entry->SumPtCharged = candidate->SumPtCharged ;
    515     entry->SumPtNeutral = candidate->SumPtNeutral ;
    516     entry->SumPtChargedPU = candidate->SumPtChargedPU ;
    517     entry->SumPt = candidate->SumPt ;
    518 
    519490    entry->Charge = candidate->Charge;
    520491
     
    533504  Double_t ecalEnergy, hcalEnergy;
    534505  const Double_t c_light = 2.99792458E8;
    535   Int_t i;
    536506
    537507  array->Sort();
     
    562532    entry->Mass = momentum.M();
    563533
    564     entry->Area = candidate->Area;
    565 
    566534    entry->DeltaEta = candidate->DeltaEta;
    567535    entry->DeltaPhi = candidate->DeltaPhi;
    568536
    569537    entry->BTag = candidate->BTag;
    570 
    571     entry->BTagAlgo = candidate->BTagAlgo;
    572     entry->BTagDefault = candidate->BTagDefault;
    573     entry->BTagPhysics = candidate->BTagPhysics;
    574     entry->BTagNearest2 = candidate->BTagNearest2;
    575     entry->BTagNearest3 = candidate->BTagNearest3;
    576     entry->BTagHeaviest = candidate->BTagHeaviest;
    577     entry->BTagHighestPt = candidate->BTagHighestPt;
    578 
    579     entry->FlavorAlgo = candidate->FlavorAlgo;
    580     entry->FlavorDefault = candidate->FlavorDefault;
    581     entry->FlavorPhysics = candidate->FlavorPhysics;
    582     entry->FlavorNearest2 = candidate->FlavorNearest2;
    583     entry->FlavorNearest3 = candidate->FlavorNearest3;
    584     entry->FlavorHeaviest = candidate->FlavorHeaviest;
    585     entry->FlavorHighestPt = candidate->FlavorHighestPt;
    586 
    587538    entry->TauTag = candidate->TauTag;
    588539
     
    610561    entry->MeanSqDeltaR = candidate->MeanSqDeltaR;
    611562    entry->PTD = candidate->PTD;
    612 
    613     //--- Sub-structure variables ----
    614 
    615     entry->NSubJetsTrimmed = candidate->NSubJetsTrimmed;
    616     entry->NSubJetsPruned = candidate->NSubJetsPruned;
    617     entry->NSubJetsSoftDropped = candidate->NSubJetsSoftDropped;
    618 
    619     for(i = 0; i < 5; i++)
    620     {
    621       entry->FracPt[i] = candidate -> FracPt[i];
    622       entry->Tau[i] = candidate -> Tau[i];
    623       entry->TrimmedP4[i] = candidate -> TrimmedP4[i];
    624       entry->PrunedP4[i] = candidate -> PrunedP4[i];
    625       entry->SoftDroppedP4[i] = candidate -> SoftDroppedP4[i];
    626     }
    627 
     563    entry->FracPt[0] = candidate->FracPt[0];
     564    entry->FracPt[1] = candidate->FracPt[1];
     565    entry->FracPt[2] = candidate->FracPt[2];
     566    entry->FracPt[3] = candidate->FracPt[3];
     567    entry->FracPt[4] = candidate->FracPt[4];
     568   
     569    //--- N-subjettiness variables ----
     570   
     571    entry->Tau1 = candidate->Tau[0];
     572    entry->Tau2 = candidate->Tau[1];
     573    entry->Tau3 = candidate->Tau[2];
     574    entry->Tau4 = candidate->Tau[3];
     575    entry->Tau5 = candidate->Tau[4];
     576   
    628577    FillParticles(candidate, &entry->Particles);
    629578  }
  • readers/DelphesLHEF.cpp

    rd38348d rf53a4d2  
    6363  TStopwatch readStopWatch, procStopWatch;
    6464  ExRootTreeWriter *treeWriter = 0;
    65   ExRootTreeBranch *branchEvent = 0, *branchWeight = 0;
     65  ExRootTreeBranch *branchEvent = 0, *branchRwgt = 0;
    6666  ExRootConfReader *confReader = 0;
    6767  Delphes *modularDelphes = 0;
     
    103103
    104104    branchEvent = treeWriter->NewBranch("Event", LHEFEvent::Class());
    105     branchWeight = treeWriter->NewBranch("Weight", Weight::Class());
     105    branchRwgt = treeWriter->NewBranch("Rwgt", Weight::Class());
    106106
    107107    confReader = new ExRootConfReader;
     
    196196
    197197            reader->AnalyzeEvent(branchEvent, eventCounter, &readStopWatch, &procStopWatch);
    198             reader->AnalyzeWeight(branchWeight);
     198            reader->AnalyzeRwgt(branchRwgt);
    199199
    200200            treeWriter->Fill();
  • readers/DelphesPythia8.cpp

    rd38348d rf53a4d2  
    2020#include <iostream>
    2121#include <sstream>
    22 #include <string>
    2322
    2423#include <signal.h>
     
    3938#include "classes/DelphesClasses.h"
    4039#include "classes/DelphesFactory.h"
    41 #include "classes/DelphesLHEFReader.h"
    4240
    4341#include "ExRootAnalysis/ExRootTreeWriter.h"
     
    151149  char appName[] = "DelphesPythia8";
    152150  stringstream message;
    153   FILE *inputFile = 0;
    154151  TFile *outputFile = 0;
    155152  TStopwatch readStopWatch, procStopWatch;
    156153  ExRootTreeWriter *treeWriter = 0;
    157154  ExRootTreeBranch *branchEvent = 0;
    158   ExRootTreeBranch *branchEventLHEF = 0, *branchWeightLHEF = 0;
    159155  ExRootConfReader *confReader = 0;
    160156  Delphes *modularDelphes = 0;
    161157  DelphesFactory *factory = 0;
    162158  TObjArray *stableParticleOutputArray = 0, *allParticleOutputArray = 0, *partonOutputArray = 0;
    163   TObjArray *stableParticleOutputArrayLHEF = 0, *allParticleOutputArrayLHEF = 0, *partonOutputArrayLHEF = 0;
    164   DelphesLHEFReader *reader = 0;
    165159  Long64_t eventCounter, errorCounter;
    166160  Long64_t numberOfEvents, timesAllowErrors;
     
    211205    partonOutputArray = modularDelphes->ExportArray("partons");
    212206
    213     // Initialize Pythia
     207    modularDelphes->InitTask();
     208
     209    // Initialize pythia
    214210    pythia = new Pythia8::Pythia;
    215211
     
    225221    numberOfEvents = pythia->mode("Main:numberOfEvents");
    226222    timesAllowErrors = pythia->mode("Main:timesAllowErrors");
    227 
    228     inputFile = fopen(pythia->word("Beams:LHEF").c_str(), "r");
    229     if(inputFile)
    230     {
    231       reader = new DelphesLHEFReader;
    232       reader->SetInputFile(inputFile);
    233 
    234       branchEventLHEF = treeWriter->NewBranch("EventLHEF", LHEFEvent::Class());
    235       branchWeightLHEF = treeWriter->NewBranch("WeightLHEF", LHEFWeight::Class());
    236 
    237       allParticleOutputArrayLHEF = modularDelphes->ExportArray("allParticlesLHEF");
    238       stableParticleOutputArrayLHEF = modularDelphes->ExportArray("stableParticlesLHEF");
    239       partonOutputArrayLHEF = modularDelphes->ExportArray("partonsLHEF");
    240     }
    241 
    242     modularDelphes->InitTask();
    243223
    244224    pythia->init();
     
    254234    for(eventCounter = 0; eventCounter < numberOfEvents && !interrupted; ++eventCounter)
    255235    {
    256       while(reader && reader->ReadBlock(factory, allParticleOutputArrayLHEF,
    257         stableParticleOutputArrayLHEF, partonOutputArrayLHEF) && !reader->EventReady());
    258 
    259236      if(!pythia->next())
    260237      {
    261238        // If failure because reached end of file then exit event loop
    262         if(pythia->info.atEndOfFile())
     239        if (pythia->info.atEndOfFile())
    263240        {
    264241          cerr << "Aborted since reached end of Les Houches Event File" << endl;
     
    267244
    268245        // First few failures write off as "acceptable" errors, then quit
    269         if(++errorCounter > timesAllowErrors)
    270         {
    271           cerr << "Event generation aborted prematurely, owing to error!" << endl;
    272           break;
    273         }
    274 
    275         modularDelphes->Clear();
    276         reader->Clear();
    277         continue;
     246        if (++errorCounter < timesAllowErrors) continue;
     247        cerr << "Event generation aborted prematurely, owing to error!" << endl;
     248        break;
    278249      }
    279250
     
    287258      procStopWatch.Stop();
    288259
    289       if(reader)
    290       {
    291         reader->AnalyzeEvent(branchEventLHEF, eventCounter, &readStopWatch, &procStopWatch);
    292         reader->AnalyzeWeight(branchWeightLHEF);
    293       }
    294 
    295260      treeWriter->Fill();
    296261
    297262      treeWriter->Clear();
    298263      modularDelphes->Clear();
    299       if(reader) reader->Clear();
    300264
    301265      readStopWatch.Start();
     
    313277    cout << "** Exiting..." << endl;
    314278
    315     delete reader;
    316279    delete pythia;
    317280    delete modularDelphes;
Note: See TracChangeset for help on using the changeset viewer.