Index: trunk/MagicSoft/Mars/mdata/MDataChain.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataChain.cc	(revision 1709)
+++ trunk/MagicSoft/Mars/mdata/MDataChain.cc	(revision 1853)
@@ -18,5 +18,5 @@
 !   Author(s): Thomas Bretz  04/2002 <mailto:tbretz@astro.uni-wuerzburg.de>
 !
-!   Copyright: MAGIC Software Development, 2000-2002
+!   Copyright: MAGIC Software Development, 2000-2003
 !
 !
@@ -72,5 +72,17 @@
 //   abs(x)    absolute value of x, |x|
 //   floor(x)  round down to the nearest integer (floor(9.9)=9)
-//
+//   r2d(x)    transform radians to degrees
+//   d2r(x)    transform degrees to radians
+//   rand(x)   returns a uniform deviate on the interval ( 0, x ].
+//             (gRandom->Uniform(x) is returned)
+//   randp(x)  returns gRandom->Poisson(x)
+//   rande(x)  returns gRandom->Exp(x)
+//   randi(x)  returns gRandom->Integer(x)
+//   randg(x)  returns gRandom->Gaus(0, x)
+//   randl(x)  returns gRandom->Landau(0, x)
+//
+// REMARK:
+//         - All the random functions are returning 0 if gRandom==0
+//         - You may get better results if you are using a TRandom3
 //
 // FIXME: The possibility to use other objects inheriting from MData
@@ -86,4 +98,6 @@
 #include <ctype.h>        // isalnum, ...
 #include <stdlib.h>       // strtod, ...
+
+#include <TRandom.h>
 
 #include "MLog.h"
@@ -231,4 +245,12 @@
     if (txt=="sgn")   return kESgn;
     if (txt=="floor") return kEFloor;
+    if (txt=="r2d")   return kERad2Deg;
+    if (txt=="d2r")   return kEDeg2Rad;
+    if (txt=="rand")  return kERandom;
+    if (txt=="randp") return kERandomP;
+    if (txt=="rande") return kERandomE;
+    if (txt=="randi") return kERandomI;
+    if (txt=="randg") return kERandomG;
+    if (txt=="randl") return kERandomL;
     if (txt[0]=='-')  return kENegative;
     if (txt[0]=='+')  return kEPositive;
@@ -477,4 +499,12 @@
     case kEPositive: return val;
     case kEFloor:    return floor(val);
+    case kERad2Deg:  return val*180/TMath::Pi();
+    case kEDeg2Rad:  return val*TMath::Pi()/180;
+    case kERandom:   return gRandom ? gRandom->Uniform(val)   : 0;
+    case kERandomP:  return gRandom ? gRandom->Poisson(val)   : 0;
+    case kERandomE:  return gRandom ? gRandom->Exp(val)       : 0;
+    case kERandomI:  return gRandom ? gRandom->Integer(val)   : 0;
+    case kERandomG:  return gRandom ? gRandom->Gaus(0, val)   : 0;
+    case kERandomL:  return gRandom ? gRandom->Landau(0, val) : 0;
     case kENoop:     return val;
     }
@@ -561,4 +591,12 @@
     case kEPositive: str += "+"    ; break;
     case kEFloor:    str += "floor"; break;
+    case kERad2Deg:  str += "r2d"  ; break;
+    case kEDeg2Rad:  str += "d2r"  ; break;
+    case kERandom:   str += "rand" ; break;
+    case kERandomP:  str += "randp"; break;
+    case kERandomE:  str += "rande"; break;
+    case kERandomI:  str += "randi"; break;
+    case kERandomG:  str += "randg"; break;
+    case kERandomL:  str += "randl"; break;
     case kENoop:
         break;
@@ -585,2 +623,3 @@
     return fMember->GetDataMember();
 }
+
Index: trunk/MagicSoft/Mars/mdata/MDataChain.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataChain.h	(revision 1709)
+++ trunk/MagicSoft/Mars/mdata/MDataChain.h	(revision 1853)
@@ -40,5 +40,13 @@
         kEPositive,
         kENegative,
-        kEFloor
+        kEFloor,
+        kERad2Deg,
+        kEDeg2Rad,
+        kERandom,
+        kERandomP,
+        kERandomE,
+        kERandomI,
+        kERandomG,
+        kERandomL
     } OperatorType_t;
 
