Index: trunk/MagicSoft/Mars/mranforest/MRanForest.cc
===================================================================
--- trunk/MagicSoft/Mars/mranforest/MRanForest.cc	(revision 2302)
+++ trunk/MagicSoft/Mars/mranforest/MRanForest.cc	(revision 2307)
Index: trunk/MagicSoft/Mars/mranforest/MRanTree.cc
===================================================================
--- trunk/MagicSoft/Mars/mranforest/MRanTree.cc	(revision 2302)
+++ trunk/MagicSoft/Mars/mranforest/MRanTree.cc	(revision 2307)
@@ -140,10 +140,4 @@
                               const TArrayF &winbag)
 {
-    if(!gRandom)
-    {
-        *fLog << err << dbginf << "gRandom not initialized... aborting." << endl;
-        return kFALSE;
-    }
-
     const Int_t nrnodes = fBestSplit.GetSize();
     const Int_t numdata = (nrnodes-1)/2;
@@ -182,5 +176,6 @@
     for(Int_t mt=0;mt<fNumTry;mt++)
     {
-        Int_t mvar=Int_t(gRandom->Rndm()*mdim);
+        const Int_t mvar=Int_t(gRandom->Rndm()*mdim);
+        const Int_t mn  = mvar*numdata;
 
         // Gini index = rrn/rrd+rln/rld
@@ -197,5 +192,5 @@
         for(Int_t nsp=ndstart;nsp<=ndend-1;nsp++)
         {
-            const Int_t &nc=datasort[mvar*numdata+nsp];
+            const Int_t &nc=datasort[mn+nsp];
             const Int_t &k=hadtrue[nc];
 
@@ -210,5 +205,5 @@
             wr[k]-=u;
 
-            if (datarang[mvar*numdata+nc]>=datarang[mvar*numdata+datasort[mvar*numdata+nsp+1]])
+            if (datarang[mn+nc]>=datarang[mn+datasort[mn+nsp+1]])
                 continue;
             if (TMath::Min(rrd,rld)<=1.0e-5)
Index: trunk/MagicSoft/Mars/mranforest/MRanTree.h
===================================================================
--- trunk/MagicSoft/Mars/mranforest/MRanTree.h	(revision 2302)
+++ trunk/MagicSoft/Mars/mranforest/MRanTree.h	(revision 2307)
@@ -37,4 +37,21 @@
     TArrayF fGiniDec;
 
+    Int_t FindBestSplit(const TArrayI &datasort, const TArrayI &datarang,
+                        const TArrayI &hadtrue,
+                        Int_t ndstart, Int_t ndend, TArrayF &tclasspop,
+                        Int_t &msplit, Float_t &decsplit, Int_t &nbest,
+                        const TArrayF &winbag);
+
+    void MoveData(TArrayI &datasort, Int_t ndstart, Int_t ndend,
+                  TArrayI &idmove, TArrayI &ncase, Int_t msplit,
+                  Int_t nbest, Int_t &ndendl);
+
+    void BuildTree(TArrayI &datasort, const TArrayI &datarang,
+                   const TArrayI &hadtrue,
+                   TArrayI &bestsplit,TArrayI &bestsplitnext,
+                   TArrayF &tclasspop,
+                   const TArrayF &winbag,
+                   Int_t ninbag);
+
 public:
     MRanTree(const char *name=NULL, const char *title=NULL);
@@ -66,21 +83,4 @@
                   TArrayF &tclasspop, TArrayI &jinbag, const TArrayF &winbag);
 
-    Int_t FindBestSplit(const TArrayI &datasort, const TArrayI &datarang,
-                        const TArrayI &hadtrue,
-                        Int_t ndstart, Int_t ndend, TArrayF &tclasspop,
-                        Int_t &msplit, Float_t &decsplit, Int_t &nbest,
-                        const TArrayF &winbag);
-
-    void MoveData(TArrayI &datasort, Int_t ndstart, Int_t ndend,
-                  TArrayI &idmove, TArrayI &ncase, Int_t msplit,
-                  Int_t nbest, Int_t &ndendl);
-
-    void BuildTree(TArrayI &datasort, const TArrayI &datarang,
-                   const TArrayI &hadtrue,
-                   TArrayI &bestsplit,TArrayI &bestsplitnext,
-                   TArrayF &tclasspop,
-                   const TArrayF &winbag,
-                   Int_t ninbag);
-
     Double_t TreeHad(const TVector &event);
     Double_t TreeHad(const TMatrixRow &event);
