Index: trunk/Utilities/ExRootAnalysis/interface/BlockClasses.h
===================================================================
--- trunk/Utilities/ExRootAnalysis/interface/BlockClasses.h	(revision 281)
+++ trunk/Utilities/ExRootAnalysis/interface/BlockClasses.h	(revision 290)
@@ -289,5 +289,5 @@
 //---------------------------------------------------------------------------
 
-class TRootTracks : public TRootParticle {
+class TRootTracks : public TSortableObject {
  public:
     TRootTracks(); // needed for storage in ExRootAnalysis
@@ -295,17 +295,18 @@
     TRootTracks(const float inEta, const float inPhi, const float outEta, const float outPhi, const float pt);
     TRootTracks& operator=(const TRootTracks& track);
-    void Set(const float inEta, const float inPhi, const float outEta, const float outPhi, const float pt);
+    void Set(const float inEta, const float inPhi, const float outEta, const float outPhi, const float pt, const float charge);
     const TLorentzVector GetFourVector() const;
-   // const float getEta() const {return Eta;}
-   // const float getPhi() const {return Phi;}
-   // const float getEtaOuter() const {return EtaOuter;}
-   // const float getPhiOuter() const {return PhiOuter;}
+    const float getEta() const {return Eta;}
+    const float getPhi() const {return Phi;}
+    const float getEtaOuter() const {return EtaOuter;}
+    const float getPhiOuter() const {return PhiOuter;}
 
     static TCompare *fgCompare; //!
-    //const TCompare *GetCompare() const { return fgCompare; }
-
-//    float Eta, Phi; // (eta,phi) at the beginning of the track
+    const TCompare *GetCompare() const { return fgCompare; }
+
+    float Eta, Phi; // (eta,phi) at the beginning of the track
     float EtaOuter, PhiOuter; // (eta,phi) at the end of the track
-//    float PT, E, Px, Py, Pz;  // transverse momentum
+    float PT, E, Px, Py, Pz;  // transverse momentum
+    float Charge; 
  ClassDef(TRootTracks, 1)
 };
@@ -352,4 +353,5 @@
 public:
   TRootTauJet() {};
+  float Charge; // normally, using the charge of the track ; here using gen-level tau charge
 
 //  float E;  // particle energy in GeV
Index: trunk/Utilities/ExRootAnalysis/src/BlockClasses.cc
===================================================================
--- trunk/Utilities/ExRootAnalysis/src/BlockClasses.cc	(revision 281)
+++ trunk/Utilities/ExRootAnalysis/src/BlockClasses.cc	(revision 290)
@@ -126,40 +126,24 @@
 }
 
-    float Eta, Phi; // (eta,phi) at the beginning of the track
+/*    float Eta, Phi; // (eta,phi) at the beginning of the track
     float EtaOuter, PhiOuter; // (eta,phi) at the end of the track
-    float PT, E, Px, Py, Pz; 
+    float PT, E, Px, Py, Pz; */
 
 TRootTracks::TRootTracks() :
-        TRootParticle(),
-	EtaOuter(UNDEFINED), PhiOuter(UNDEFINED) {}
-/*        Eta = UNDEFINED;
-        Phi = UNDEFINED;
-        PT = UNDEFINED;
-        E = UNDEFINED;
-        Px = UNDEFINED;
-        Py = UNDEFINED;
-        Pz = UNDEFINED; 
-
-}*/
+	Eta(UNDEFINED), Phi(UNDEFINED), EtaOuter(UNDEFINED), PhiOuter(UNDEFINED), 
+        PT(UNDEFINED), E(UNDEFINED), Px(UNDEFINED), Py(UNDEFINED), Pz(UNDEFINED),
+	Charge(UNDEFINED) {}
 
 TRootTracks::TRootTracks(const float inEta, const float inPhi, const float outEta, const float outPhi, const float pt) :
-	EtaOuter(outEta), PhiOuter(outPhi) {
-        Eta = inEta;
-        Phi = inPhi;
-        PT = pt;
+	Eta(inEta), Phi(inPhi), EtaOuter(outEta), PhiOuter(outPhi), 
+        PT(pt) {
 	TLorentzVector p; p.SetPtEtaPhiE(PT,Eta,Phi,PT*cosh(Eta));
         Px = p.Px(); Py = p.Py(); Pz = p.Pz();  E=p.E();
+	Charge = UNDEFINED;
 }
 TRootTracks::TRootTracks(const TRootTracks& track) :
-        EtaOuter(track.EtaOuter), PhiOuter(track.PhiOuter)
-        {
-          Eta = track.Eta;
-          Phi = track.Phi;
-          PT = track.PT;
-          E = track.E;
-          Px = track.Px;
-          Py = track.Py;
-          Pz = track.Pz;
-        }
+	Eta(track.Eta), Phi(track.Phi), 
+        EtaOuter(track.EtaOuter), PhiOuter(track.PhiOuter), 
+	PT(track.PT), E(track.E), Px(track.Px), Py(track.Py), Pz(track.Pz), Charge(track.Charge) {}
 
 TRootTracks& TRootTracks::operator=(const TRootTracks& track) {
@@ -168,11 +152,13 @@
         EtaOuter = track.EtaOuter;   PhiOuter = track.PhiOuter; 
         PT = track.PT; E = track.E;  Px = track.Px;  Py= track.Py; Pz =track.Pz; 
+	Charge = track.Charge;
   return *this;
 }
 
-void TRootTracks::Set(const float inEta, const float inPhi, const float outEta, const float outPhi, const float pt) {
+void TRootTracks::Set(const float inEta, const float inPhi, const float outEta, const float outPhi, const float pt, const float charge) {
 	Eta= inEta; Phi=inPhi;  EtaOuter=outEta; PhiOuter=outPhi; PT=pt; 
 	TLorentzVector p; p.SetPtEtaPhiE(PT,Eta,Phi,PT*cosh(Eta));
 	Px = p.Px(); Py = p.Py(); Pz = p.Pz();  E=p.E();
+	Charge = charge;
 }
 
