Index: classes/ClassesLinkDef.h
===================================================================
--- classes/ClassesLinkDef.h	(revision f59e9c157c1bdbac4cfee5495994314b9249eb75)
+++ classes/ClassesLinkDef.h	(revision d38348d6fa05d814372b4af29ec82c9928ff5be9)
@@ -46,4 +46,5 @@
 #pragma link C++ class LHCOEvent+;
 #pragma link C++ class LHEFEvent+;
+#pragma link C++ class LHEFWeight+;
 #pragma link C++ class HepMCEvent+;
 #pragma link C++ class GenParticle+;
Index: classes/DelphesClasses.cc
===================================================================
--- classes/DelphesClasses.cc	(revision f59e9c157c1bdbac4cfee5495994314b9249eb75)
+++ classes/DelphesClasses.cc	(revision d38348d6fa05d814372b4af29ec82c9928ff5be9)
@@ -120,6 +120,8 @@
   PID(0), Status(0), M1(-1), M2(-1), D1(-1), D2(-1),
   Charge(0), Mass(0.0),
-  IsPU(0), IsConstituent(0),
-  BTag(0), TauTag(0), Eem(0.0), Ehad(0.0),
+  IsPU(0), IsRecoPU(0), IsConstituent(0),
+  BTag(0), BTagAlgo(0), BTagDefault(0), BTagPhysics(0), BTagNearest2(0), BTagNearest3(0), BTagHeaviest(0), BTagHighestPt(0),
+  FlavorAlgo(0), FlavorDefault(0), FlavorPhysics(0), FlavorNearest2(0), FlavorNearest3(0), FlavorHeaviest(0), FlavorHighestPt(0),
+  TauTag(0), Eem(0.0), Ehad(0.0),
   DeltaEta(0.0), DeltaPhi(0.0),
   Momentum(0.0, 0.0, 0.0, 0.0),
@@ -129,11 +131,22 @@
   NCharged(0),
   NNeutrals(0),
+  NSubJetsTrimmed(0),
+  NSubJetsPruned(0), 
+  NSubJetsSoftDropped(0), 
   Beta(0),
   BetaStar(0),
   MeanSqDeltaR(0),
   PTD(0),
+  Ntimes(-1),
+  IsolationVar(-999),
+  IsolationVarRhoCorr(-999),
+  SumPtCharged(-999),
+  SumPtNeutral(-999),
+  SumPtChargedPU(-999),
+  SumPt(-999),
   fFactory(0),
   fArray(0)
 {
+  int i;
   Edges[0] = 0.0;
   Edges[1] = 0.0;
@@ -150,4 +163,10 @@
   Tau[3] = 0.0;
   Tau[4] = 0.0;
+  for(i = 0; i < 5; ++i)
+  {
+    TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
+    PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
+    SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
+  }
 }
 
@@ -225,4 +244,18 @@
   object.IsConstituent = IsConstituent;
   object.BTag = BTag;
+  object.BTagAlgo = BTagAlgo;
+  object.BTagDefault = BTagDefault;
+  object.BTagPhysics = BTagPhysics;
+  object.BTagNearest2 = BTagNearest2;
+  object.BTagNearest3 = BTagNearest3;
+  object.BTagHeaviest = BTagHeaviest;
+  object.BTagHighestPt = BTagHighestPt;
+  object.FlavorAlgo = FlavorAlgo;
+  object.FlavorDefault = FlavorDefault;
+  object.FlavorPhysics = FlavorPhysics;
+  object.FlavorNearest2 = FlavorNearest2;
+  object.FlavorNearest3 = FlavorNearest3;
+  object.FlavorHeaviest = FlavorHeaviest;
+  object.FlavorHighestPt = FlavorHighestPt;
   object.TauTag = TauTag;
   object.Eem = Eem;
@@ -249,4 +282,12 @@
   object.MeanSqDeltaR = MeanSqDeltaR;
   object.PTD = PTD;
+  object.Ntimes = Ntimes; 
+  object.IsolationVar = IsolationVar;
+  object.IsolationVarRhoCorr = IsolationVarRhoCorr;
+  object.SumPtCharged = SumPtCharged;
+  object.SumPtNeutral = SumPtNeutral;
+  object.SumPtChargedPU = SumPtChargedPU;
+  object.SumPt = SumPt;
+
   object.FracPt[0] = FracPt[0];
   object.FracPt[1] = FracPt[1];
@@ -259,7 +300,30 @@
   object.Tau[3] = Tau[3];
   object.Tau[4] = Tau[4];
+  
+  object.TrimmedP4[0] = TrimmedP4[0];
+  object.TrimmedP4[1] = TrimmedP4[1];
+  object.TrimmedP4[2] = TrimmedP4[2];
+  object.TrimmedP4[3] = TrimmedP4[3];
+  object.TrimmedP4[4] = TrimmedP4[4];
+  object.PrunedP4[0] = PrunedP4[0];
+  object.PrunedP4[1] = PrunedP4[1];
+  object.PrunedP4[2] = PrunedP4[2];
+  object.PrunedP4[3] = PrunedP4[3];
+  object.PrunedP4[4] = PrunedP4[4];
+  object.SoftDroppedP4[0] = SoftDroppedP4[0];
+  object.SoftDroppedP4[1] = SoftDroppedP4[1];
+  object.SoftDroppedP4[2] = SoftDroppedP4[2];
+  object.SoftDroppedP4[3] = SoftDroppedP4[3];
+  object.SoftDroppedP4[4] = SoftDroppedP4[4];
+
+  object.NSubJetsTrimmed = NSubJetsTrimmed;
+  object.NSubJetsPruned = NSubJetsPruned;
+  object.NSubJetsSoftDropped = NSubJetsSoftDropped;
 
   object.fFactory = fFactory;
   object.fArray = 0;
+
+  // Copy cluster timing info
+  copy(Ecal_E_t.begin(),Ecal_E_t.end(),back_inserter(object.Ecal_E_t));
 
   if(fArray && fArray->GetEntriesFast() > 0)
@@ -278,4 +342,5 @@
 void Candidate::Clear(Option_t* option)
 {
+  int i;
   SetUniqueID(0);
   ResetBit(kIsReferenced);
@@ -288,4 +353,18 @@
   IsConstituent = 0;
   BTag = 0;
+  BTagAlgo = 0;
+  BTagDefault = 0;
+  BTagPhysics = 0;
+  BTagNearest2 = 0;
+  BTagNearest3 = 0;
+  BTagHeaviest = 0;
+  BTagHighestPt = 0;
+  FlavorAlgo = 0;
+  FlavorDefault = 0;
+  FlavorPhysics = 0;
+  FlavorNearest2 = 0;
+  FlavorNearest3 = 0;
+  FlavorHeaviest = 0;
+  FlavorHighestPt = 0;
   TauTag = 0;
   Eem = 0.0;
@@ -311,4 +390,15 @@
   MeanSqDeltaR = 0.0;
   PTD = 0.0;
+  
+  Ntimes = 0;
+  Ecal_E_t.clear();
+  
+  IsolationVar = -999;
+  IsolationVarRhoCorr = -999;
+  SumPtCharged = -999;
+  SumPtNeutral = -999;
+  SumPtChargedPU = -999;
+  SumPt = -999;
+  
   FracPt[0] = 0.0;
   FracPt[1] = 0.0;
@@ -321,5 +411,16 @@
   Tau[3] = 0.0;
   Tau[4] = 0.0;
-
+  
+  for(i = 0; i < 5; ++i)
+  {
+    TrimmedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
+    PrunedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0); 
+    SoftDroppedP4[i].SetXYZT(0.0, 0.0, 0.0, 0.0);
+  }
+
+  NSubJetsTrimmed = 0;
+  NSubJetsPruned = 0;
+  NSubJetsSoftDropped = 0;
+  
   fArray = 0;
 }
Index: classes/DelphesClasses.h
===================================================================
--- classes/DelphesClasses.h	(revision f59e9c157c1bdbac4cfee5495994314b9249eb75)
+++ classes/DelphesClasses.h	(revision d38348d6fa05d814372b4af29ec82c9928ff5be9)
@@ -84,4 +84,15 @@
 //---------------------------------------------------------------------------
 
+class LHEFWeight: public TObject
+{
+public:
+  Int_t ID; // weight ID
+  Float_t Weight; // weight value
+
+  ClassDef(LHEFWeight, 1)
+};
+
+//---------------------------------------------------------------------------
+
 class HepMCEvent: public Event
 {
@@ -231,4 +242,13 @@
   TRefArray Particles; // references to generated particles
 
+  // Isolation variables
+
+  Float_t IsolationVar;
+  Float_t IsolationVarRhoCorr;
+  Float_t SumPtCharged;
+  Float_t SumPtNeutral;
+  Float_t SumPtChargedPU;
+  Float_t SumPt;
+
   static CompBase *fgCompare; //!
   const CompBase *GetCompare() const { return fgCompare; }
@@ -257,4 +277,13 @@
   TRef Particle; // reference to generated particle
 
+  // Isolation variables
+
+  Float_t IsolationVar;
+  Float_t IsolationVarRhoCorr;
+  Float_t SumPtCharged;
+  Float_t SumPtNeutral;
+  Float_t SumPtChargedPU;
+  Float_t SumPt;
+
   static CompBase *fgCompare; //!
   const CompBase *GetCompare() const { return fgCompare; }
@@ -281,4 +310,13 @@
   TRef Particle; // reference to generated particle
 
+   // Isolation variables
+
+  Float_t IsolationVar;
+  Float_t IsolationVarRhoCorr;
+  Float_t SumPtCharged;
+  Float_t SumPtNeutral;
+  Float_t SumPtChargedPU;
+  Float_t SumPt;
+
   static CompBase *fgCompare; //!
   const CompBase *GetCompare() const { return fgCompare; }
@@ -307,4 +345,21 @@
 
   UInt_t BTag; // 0 or 1 for a jet that has been tagged as containing a heavy quark
+
+  UInt_t BTagAlgo;
+  UInt_t BTagDefault;
+  UInt_t BTagPhysics;
+  UInt_t BTagNearest2;
+  UInt_t BTagNearest3;
+  UInt_t BTagHeaviest;
+  UInt_t BTagHighestPt;
+
+  UInt_t FlavorAlgo;
+  UInt_t FlavorDefault;
+  UInt_t FlavorPhysics;
+  UInt_t FlavorNearest2;
+  UInt_t FlavorNearest3;
+  UInt_t FlavorHeaviest;
+  UInt_t FlavorHighestPt;
+
   UInt_t TauTag; // 0 or 1 for a jet that has been tagged as a tau
 
@@ -313,17 +368,21 @@
   Float_t EhadOverEem; // ratio of the hadronic versus electromagnetic energy deposited in the calorimeter
 
-  Int_t    NCharged; // number of charged constituents 
-  Int_t    NNeutrals; // number of neutral constituents 
-  Float_t  Beta; // (sum pt of charged pile-up constituents)/(sum pt of charged constituents) 
-  Float_t  BetaStar; // (sum pt of charged constituents coming from hard interaction)/(sum pt of charged constituents) 
-  Float_t  MeanSqDeltaR; // average distance (squared) between constituent and jet weighted by pt (squared) of constituent
-  Float_t  PTD; // average pt between constituent and jet weighted by pt of constituent
-  Float_t  FracPt[5]; // (sum pt of constituents within a ring 0.1*i < DeltaR < 0.1*(i+1))/(sum pt of constituents) 
-
-  Float_t Tau1; // 1-subjettiness
-  Float_t Tau2; // 2-subjettiness
-  Float_t Tau3; // 3-subjettiness
-  Float_t Tau4; // 4-subjettiness
-  Float_t Tau5; // 5-subjettiness
+  Int_t NCharged; // number of charged constituents
+  Int_t NNeutrals; // number of neutral constituents
+  Float_t Beta; // (sum pt of charged pile-up constituents)/(sum pt of charged constituents)
+  Float_t BetaStar; // (sum pt of charged constituents coming from hard interaction)/(sum pt of charged constituents)
+  Float_t MeanSqDeltaR; // average distance (squared) between constituent and jet weighted by pt (squared) of constituent
+  Float_t PTD; // average pt between constituent and jet weighted by pt of constituent
+  Float_t FracPt[5]; // (sum pt of constituents within a ring 0.1*i < DeltaR < 0.1*(i+1))/(sum pt of constituents)
+
+  Float_t Tau[5]; // N-subjettiness
+
+  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
+  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
+  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
+
+  Int_t NSubJetsTrimmed; // number of subjets trimmed
+  Int_t NSubJetsPruned; // number of subjets pruned
+  Int_t NSubJetsSoftDropped; // number of subjets soft-dropped
 
   TRefArray Constituents; // references to constituents
@@ -334,6 +393,7 @@
 
   TLorentzVector P4() const;
-
-  ClassDef(Jet, 2)
+  TLorentzVector Area;
+
+  ClassDef(Jet, 3)
 };
 
@@ -392,5 +452,6 @@
   Float_t E; // calorimeter tower energy
 
-  Float_t T; //particle arrival time of flight
+  Float_t T; // ecal deposit time, averaged by sqrt(EM energy) over all particles, not smeared
+  Int_t   Ntimes; // number of hits contributing to time measurement
 
   Float_t Eem; // calorimeter tower electromagnetic energy
@@ -452,7 +513,26 @@
 
   Int_t IsPU;
+  Int_t IsRecoPU;
+
   Int_t IsConstituent;
 
   UInt_t BTag;
+
+  UInt_t BTagAlgo;
+  UInt_t BTagDefault;
+  UInt_t BTagPhysics;
+  UInt_t BTagNearest2;
+  UInt_t BTagNearest3;
+  UInt_t BTagHeaviest;
+  UInt_t BTagHighestPt;
+
+  UInt_t FlavorAlgo;
+  UInt_t FlavorDefault;
+  UInt_t FlavorPhysics;
+  UInt_t FlavorNearest2;
+  UInt_t FlavorNearest3;
+  UInt_t FlavorHeaviest;
+  UInt_t FlavorHighestPt;
+
   UInt_t TauTag;
 
@@ -482,7 +562,32 @@
   Float_t  FracPt[5];
 
+  //Timing information
+
+  Int_t    Ntimes;
+  std::vector<std::pair<Float_t,Float_t> > Ecal_E_t;
+
+  // Isolation variables
+
+  Float_t IsolationVar;
+  Float_t IsolationVarRhoCorr;
+  Float_t SumPtCharged;
+  Float_t SumPtNeutral;
+  Float_t SumPtChargedPU;
+  Float_t SumPt;
+
   // N-subjettiness variables
 
   Float_t Tau[5];
+
+  // Other Substructure variables
+
+  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
+  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
+  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
+
+  Int_t NSubJetsTrimmed; // number of subjets trimmed
+  Int_t NSubJetsPruned; // number of subjets pruned
+  Int_t NSubJetsSoftDropped; // number of subjets soft-dropped
+
 
   static CompBase *fgCompare; //!
@@ -504,5 +609,5 @@
   void SetFactory(DelphesFactory *factory) { fFactory = factory; }
 
-  ClassDef(Candidate, 2)
+  ClassDef(Candidate, 3)
 };
 
Index: classes/DelphesLHEFReader.cc
===================================================================
--- classes/DelphesLHEFReader.cc	(revision f59e9c157c1bdbac4cfee5495994314b9249eb75)
+++ classes/DelphesLHEFReader.cc	(revision d38348d6fa05d814372b4af29ec82c9928ff5be9)
@@ -82,5 +82,5 @@
   fEventCounter = -1;
   fParticleCounter = -1;
-  fRwgtList.clear();
+  fWeightList.clear();
 }
 
@@ -99,5 +99,5 @@
   TObjArray *partonOutputArray)
 {
-  int rc;
+  int rc, id;
   char *pch;
   double weight;
@@ -158,5 +158,5 @@
   else if(strstr(fBuffer, "<wgt"))
   {
-    pch = strstr(fBuffer, ">");
+    pch = strpbrk(fBuffer, "\"'");
     if(!pch)
     {
@@ -165,6 +165,16 @@
     }
 
-    DelphesStream bufferStream(pch + 1);
-    rc = bufferStream.ReadDbl(weight);
+    DelphesStream idStream(pch + 1);
+    rc = idStream.ReadInt(id);
+
+    pch = strchr(fBuffer, '>');
+    if(!pch)
+    {
+      cerr << "** ERROR: " << "invalid weight format" << endl;
+      return kFALSE;
+    }
+
+    DelphesStream weightStream(pch + 1);
+    rc = weightStream.ReadDbl(weight);
 
     if(!rc)
@@ -174,5 +184,5 @@
     }
 
-    fRwgtList.push_back(weight);
+    fWeightList.push_back(make_pair(id, weight));
   }
   else if(strstr(fBuffer, "</event>"))
@@ -206,14 +216,15 @@
 //---------------------------------------------------------------------------
 
-void DelphesLHEFReader::AnalyzeRwgt(ExRootTreeBranch *branch)
-{
-  Weight *element;
-  vector<double>::const_iterator itRwgtList;
-
-  for(itRwgtList = fRwgtList.begin(); itRwgtList != fRwgtList.end(); ++itRwgtList)
-  {
-    element = static_cast<Weight *>(branch->NewEntry());
-
-    element->Weight = *itRwgtList;
+void DelphesLHEFReader::AnalyzeWeight(ExRootTreeBranch *branch)
+{
+  LHEFWeight *element;
+  vector< pair< int, double > >::const_iterator itWeightList;
+
+  for(itWeightList = fWeightList.begin(); itWeightList != fWeightList.end(); ++itWeightList)
+  {
+    element = static_cast<LHEFWeight *>(branch->NewEntry());
+
+    element->ID = itWeightList->first;
+    element->Weight = itWeightList->second;
   }
 }
Index: classes/DelphesLHEFReader.h
===================================================================
--- classes/DelphesLHEFReader.h	(revision f59e9c157c1bdbac4cfee5495994314b9249eb75)
+++ classes/DelphesLHEFReader.h	(revision d38348d6fa05d814372b4af29ec82c9928ff5be9)
@@ -31,4 +31,5 @@
 
 #include <vector>
+#include <utility>
 
 class TObjArray;
@@ -58,5 +59,5 @@
     TStopwatch *readStopWatch, TStopwatch *procStopWatch);
 
-  void AnalyzeRwgt(ExRootTreeBranch *branch);
+  void AnalyzeWeight(ExRootTreeBranch *branch);
 
 private:
@@ -83,5 +84,5 @@
   double fPx, fPy, fPz, fE, fMass;
   
-  std::vector<double> fRwgtList;
+  std::vector< std::pair< int, double > > fWeightList;
 };
 
