Index: trunk/MagicSoft/Mars/melectronics/MAvalanchePhotoDiode.cc
===================================================================
--- trunk/MagicSoft/Mars/melectronics/MAvalanchePhotoDiode.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/melectronics/MAvalanchePhotoDiode.cc	(revision 9261)
@@ -165,15 +165,8 @@
         case 2: if (y<fHist.GetNbinsY()) n += HitCellImp(x, y+1, t); break;
         case 3: if (y>1)                 n += HitCellImp(x, y-1, t); break;
-        /*
-         case 0: x++; if (x>fHist.GetNbinsX()) continue; break;
-         case 1: x--; if (x<1) continue;                 break;
-         case 2: y++; if (y>fHist.GetNbinsY()) continue; break;
-         case 3: y--; if (y<1) continue;                 break;*/
         }
 
         // In the unlikely case the calculated direction is out-of-range,
         // i.e. <0 or >3, we would just try to fill the same cell again which
-
-        //n += HitCellImp(x, y, t);
     }
 
@@ -236,4 +229,6 @@
     for (int i=0; i<n; i++)
         fHist.GetArray()[i] = tm;
+
+    fHist.SetEntries(1);
 }
 
Index: trunk/MagicSoft/Mars/melectronics/MAvalanchePhotoDiode.h
===================================================================
--- trunk/MagicSoft/Mars/melectronics/MAvalanchePhotoDiode.h	(revision 9260)
+++ trunk/MagicSoft/Mars/melectronics/MAvalanchePhotoDiode.h	(revision 9261)
@@ -6,5 +6,5 @@
 #endif
 
-class APD : public TObject
+class APD : public TObject  // FIXME: Derive from TH2?
 {
 private:
@@ -29,4 +29,14 @@
     Int_t CountRecoveringCells(Float_t t=0) const;
 
+    Float_t GetCellContent(Int_t x, Int_t y) const { return fHist.GetBinContent(x, y); }
+    Int_t   GetNumCellsX() const { return fHist.GetNbinsX(); }
+
+    Float_t GetCrosstalkProb() const { return fCrosstalkProb; }
+    Float_t GetDeadTime() const { return fDeadTime; }
+    Float_t GetRecoveryTime() const { return fRecoveryTime; }
+
+    void Draw(Option_t *o="") { fHist.Draw(o); }
+    void DrawCopy(Option_t *o="") { fHist.DrawCopy(o); }
+
     ClassDef(APD, 1) // An object representing a Geigermode APD
 };
Index: trunk/MagicSoft/Mars/mjobs/MJSpectrum.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJSpectrum.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/mjobs/MJSpectrum.cc	(revision 9261)
@@ -49,4 +49,5 @@
 
 #include "MMath.h"
+#include "MString.h"
 #include "MDirIter.h"
 
@@ -891,9 +892,9 @@
     const Double_t exp = TMath::Power(10, i);
 
-    TString str = Form("(%s #pm %s)·10^{%d} ",
-                       FormFloat(p1/exp).Data(), FormFloat(e1/exp).Data(), i);
-
-    str += Form("#left(#frac{E}{%s}#right)^{-%s #pm %s}", unit,
-                FormFloat(p0).Data(), FormFloat(e0).Data());
+    TString str = MString::Format("(%s #pm %s)·10^{%d} ",
+                                  FormFloat(p1/exp).Data(), FormFloat(e1/exp).Data(), i);
+
+    str += MString::Format("#left(#frac{E}{%s}#right)^{-%s #pm %s}", unit,
+                           FormFloat(p0).Data(), FormFloat(e0).Data());
 
     str += " TeV^{-1} m^{-2} s^{-1}";
@@ -909,7 +910,7 @@
         return FormFlux(f, "500GeV");
     case 1:
-        return Form("\\chi^{2}/NDF=%.2f/%d", f.GetChisquare(),f.GetNDF());
+        return MString::Format("\\chi^{2}/NDF=%.2f/%d", f.GetChisquare(),f.GetNDF());
     case 2:
-        return Form("P=%.0f%%", 100*TMath::Prob(f.GetChisquare(),  f.GetNDF()));
+        return MString::Format("P=%.0f%%", 100*TMath::Prob(f.GetChisquare(),  f.GetNDF()));
     }
     return "";
@@ -1492,5 +1493,6 @@
         return kFALSE;
 
-    CheckEnv();
+    if (!CheckEnv())
+        return kFALSE;
 
     // --------------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mjobs/MJStar.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJStar.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/mjobs/MJStar.cc	(revision 9261)
@@ -140,9 +140,4 @@
     }
 
-    //if (!CheckEnv())
-    //    return kFALSE;
-
-    CheckEnv();
-
     // --------------------------------------------------------------------------------
 
@@ -152,4 +147,7 @@
     *fLog << fSequence.GetFileName() << endl;
     *fLog << endl;
+
+    if (!CheckEnv())
+        return kFALSE;
  
     // --------------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mjobs/MJob.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJob.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/mjobs/MJob.cc	(revision 9261)
@@ -277,5 +277,5 @@
 // For exmaple:
 //    RandomNumberGenerator: TRandom3
-//    RandomNumberSeeValue:  0
+//    RandomNumberSeedValue:  0
 //
 Bool_t MJob::InitRandomNumberGenerator() const
@@ -301,5 +301,5 @@
 
     // Nothing: Keep seed value, 0 set time as seed value, val set seed
-    const TString seed = GetEnv("RandomNumberSeedNumber", "");
+    const TString seed = GetEnv("RandomNumberSeedValue", "");
     if (!seed.IsNull())
     {
Index: trunk/MagicSoft/Mars/mraw/MRawRunHeader.h
===================================================================
--- trunk/MagicSoft/Mars/mraw/MRawRunHeader.h	(revision 9260)
+++ trunk/MagicSoft/Mars/mraw/MRawRunHeader.h	(revision 9261)
@@ -162,4 +162,5 @@
     Bool_t IsPedestalRun() const    { return (fRunType&0xff)==kRTPedestal; }
     Bool_t IsCalibrationRun() const { return (fRunType&0xff)==kRTCalibration; }
+    Bool_t IsPointRun() const       { return (fRunType&0xff)==kRTPointRun; }
 
     void Print(Option_t *t=NULL) const;
Index: trunk/MagicSoft/Mars/msignal/MSignalCalc.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalCalc.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/msignal/MSignalCalc.cc	(revision 9261)
@@ -127,4 +127,7 @@
 Int_t MSignalCalc::Process()
 {
+    if (!fPedestals)
+        return kFALSE;
+
     const Int_t npix = fRawEvt->GetNumPixels();
     const Int_t nhi  = fRunHeader->GetNumSamplesHiGain();
@@ -259,6 +262,5 @@
         // Preliminary: Do not overwrite pedestals calculated by
         // MMcPedestalCopy and MMcPedestalNSBAdd
-        if (fPedestals)
-            (*fPedestals)[i].Set(b/fRunHeader->GetScale(), sigb/fRunHeader->GetScale());
+        (*fPedestals)[i].Set(b/fRunHeader->GetScale(), sigb/fRunHeader->GetScale());
     }
 
@@ -266,6 +268,5 @@
     //fCerPhotEvt->SetReadyToSave();
 
-    if (fPedestals)
-        fPedestals->SetReadyToSave();
+    fPedestals->SetReadyToSave();
 
     return kTRUE;
Index: trunk/MagicSoft/Mars/msignal/MSignalCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msignal/MSignalCam.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/msignal/MSignalCam.cc	(revision 9261)
@@ -570,6 +570,6 @@
 //  7: arrival time if signa avove 20phe
 //  8: arrival time
-// 10: arrival time if extracted from lo-gain
-// 11: arrival time if extracted from hi-gain (and signal above 20phe)
+// 10: as 0, but returns kFALSE if signal <=0
+// 11: as 8, but returns kFALSE if signal <=0
 //
 Bool_t MSignalCam::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
@@ -648,4 +648,12 @@
         */
 
+    case 10:
+        val = pix.GetNumPhotons()*ratio;
+        return val>0;
+
+    case 11:
+        val = pix.GetArrivalTime();
+        return pix.GetNumPhotons()>0;
+
     case 9:
     default:
Index: trunk/MagicSoft/Mars/msim/MHPhotonEvent.cc
===================================================================
--- trunk/MagicSoft/Mars/msim/MHPhotonEvent.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/msim/MHPhotonEvent.cc	(revision 9261)
@@ -189,6 +189,6 @@
             break;
         }
-    case 3:
-    case 4:
+    case 3: // The maximum radius
+    case 4: // Two times the pixel-0 traversal size
         {
             MGeomCam *c = (MGeomCam*)pList->FindObject("MGeomCam");
@@ -198,5 +198,5 @@
                 return kFALSE;
             }
-            xmax = fType==3 ? c->GetMaxRadius()/10 : c->GetMaxRadius()/100;
+            xmax = fType==3 ? c->GetMaxRadius()/10 : 2*(*c)[0].GetT()/10;
             num  = 50;
 
Index: trunk/MagicSoft/Mars/msimcamera/MSimSignalCam.cc
===================================================================
--- trunk/MagicSoft/Mars/msimcamera/MSimSignalCam.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/msimcamera/MSimSignalCam.cc	(revision 9261)
@@ -163,5 +163,5 @@
         pix.SetNumPhotons(fCont[idx]); // gRandom->Uniform(last-first)
         pix.SetArrivalTime(fCont[idx]<=0 ? -1 : fTime[idx]/fCont[idx]-first);
-        pix.SetPixelUsed();
+        pix.SetRing(fCont[idx]>0); // Used==1, Unused==0
         pix.SetPixelCore(kFALSE);
     }
Index: trunk/MagicSoft/Mars/msimcamera/MSimTrigger.cc
===================================================================
--- trunk/MagicSoft/Mars/msimcamera/MSimTrigger.cc	(revision 9260)
+++ trunk/MagicSoft/Mars/msimcamera/MSimTrigger.cc	(revision 9261)
@@ -289,2 +289,32 @@
     return kTRUE;
 }
+
+// --------------------------------------------------------------------------
+//
+// FileNameRouteac:         routeac.txt
+// FileNameCoincidenceMap:  coincidence.txt
+// DiscriminatorTheshold:   3.5
+//
+Int_t MSimTrigger::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
+{
+    Bool_t rc = kFALSE;
+    if (IsEnvDefined(env, prefix, "FileNameRouteAC", print))
+    {
+        rc = kTRUE;
+        fNameRouteAC = GetEnvValue(env, prefix, "FileNameRouteAC", fNameRouteAC);
+    }
+
+    if (IsEnvDefined(env, prefix, "FileNameCoincidenceMap", print))
+    {
+        rc = kTRUE;
+        fNameCoincidenceMap = GetEnvValue(env, prefix, "FileNameCoincidenceMap", fNameCoincidenceMap);
+    }
+
+    if (IsEnvDefined(env, prefix, "DiscriminatorThreshold", print))
+    {
+        rc = kTRUE;
+        fDiscriminatorThreshold = GetEnvValue(env, prefix, "DiscriminatorThreshold", fDiscriminatorThreshold);
+    }
+
+    return rc;
+}
Index: trunk/MagicSoft/Mars/msimcamera/MSimTrigger.h
===================================================================
--- trunk/MagicSoft/Mars/msimcamera/MSimTrigger.h	(revision 9260)
+++ trunk/MagicSoft/Mars/msimcamera/MSimTrigger.h	(revision 9261)
@@ -40,4 +40,7 @@
     Int_t Process();
 
+    // MParContainer
+    Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print);
+
 public:
     MSimTrigger(const char *name=NULL, const char *title=NULL);
