Index: trunk/Mars/msimcamera/MSimAPD.cc
===================================================================
--- trunk/Mars/msimcamera/MSimAPD.cc	(revision 10167)
+++ trunk/Mars/msimcamera/MSimAPD.cc	(revision 17067)
@@ -79,5 +79,8 @@
 //
 MSimAPD::MSimAPD(const char* name, const char *title)
-: fGeom(0), fEvt(0), fStat(0), fType(1)
+    : fGeom(0), fEvt(0), fStat(0), fType(1),
+    fNumCells(60), fCrosstalkCoeff(0), fDeadTime(3),
+    fRecoveryTime(8.75), fAfterpulseProb1(0.11), fAfterpulseProb2(0.14)
+
 {
     fName  = name  ? name  : "MSimAPD";
@@ -160,4 +163,21 @@
     switch (fType)
     {
+    case 0:
+        ncells     = fNumCells;
+        crosstalk  = fCrosstalkCoeff;
+        deadtime   = fDeadTime;
+        recovery   = fRecoveryTime;
+        afterprob1 = fAfterpulseProb1;
+        afterprob2 = fAfterpulseProb2;
+
+        gLog << inf << "Using custom G-APD parameters:" << endl;
+        gLog << " - Num cells:          " << fNumCells << endl;
+        gLog << " - Crosstalk coeff.:   " << fCrosstalkCoeff << endl;
+        gLog << " - Dead time:          " << fDeadTime << " ns" << endl;
+        gLog << " - Recovery time:      " << fRecoveryTime << " ns" << endl;
+        gLog << " - Afterpulse 1 prob.: " << fAfterpulseProb1 << endl;
+        gLog << " - Afterpulse 2 prob.: " << fAfterpulseProb2 << endl;
+        break;
+
     case 1:
         ncells     = 30;
@@ -349,4 +369,14 @@
 // Type: 1
 //
+// Example for a custom made G-APD:
+//
+//    Type: 0
+//    NumCells: 60
+//    CrosstalkCoefficient: 0.1   // [prob]
+//    DeadTime: 3                 // [ns]
+//    RecoveryTime: 8.75          // [ns]
+//    AfterpulseProb1: 0.14       // [prob]
+//    AfterpulseProb2: 0.11       // [prob]
+//
 Int_t MSimAPD::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
 {
@@ -364,4 +394,38 @@
     }
 
+    if (fType!=0)
+        return rc;
+
+    if (IsEnvDefined(env, prefix, "NumCells", print))
+    {
+        rc = kTRUE;
+        fNumCells = GetEnvValue(env, prefix, "NumCells", fNumCells);
+    }
+    if (IsEnvDefined(env, prefix, "CrosstalkCoefficient", print))
+    {
+        rc = kTRUE;
+        fCrosstalkCoeff = GetEnvValue(env, prefix, "CrosstalkCoefficient", fCrosstalkCoeff);
+    }
+    if (IsEnvDefined(env, prefix, "DeadTime", print))
+    {
+        rc = kTRUE;
+        fDeadTime = GetEnvValue(env, prefix, "DeadTime", fDeadTime);
+    }
+    if (IsEnvDefined(env, prefix, "RecoveryTime", print))
+    {
+        rc = kTRUE;
+        fRecoveryTime = GetEnvValue(env, prefix, "RecoveryTime", fRecoveryTime);
+    }
+    if (IsEnvDefined(env, prefix, "AfterpulseProb1", print))
+    {
+        rc = kTRUE;
+        fAfterpulseProb1 = GetEnvValue(env, prefix, "AfterpulseProb1", fAfterpulseProb1);
+    }
+    if (IsEnvDefined(env, prefix, "AfterpulseProb2", print))
+    {
+        rc = kTRUE;
+        fAfterpulseProb2 = GetEnvValue(env, prefix, "AfterpulseProb2", fAfterpulseProb2);
+    }
+
     return rc;
 }
Index: trunk/Mars/msimcamera/MSimAPD.h
===================================================================
--- trunk/Mars/msimcamera/MSimAPD.h	(revision 10167)
+++ trunk/Mars/msimcamera/MSimAPD.h	(revision 17067)
@@ -32,4 +32,11 @@
     Int_t fType;
 
+    Int_t   fNumCells;           // Number of cells along one side
+    Float_t fCrosstalkCoeff;     // Crosstalk coefficient (P form the formula)
+    Float_t fDeadTime;           // Single cell dead time in nano-seconds
+    Float_t fRecoveryTime;       // Single cell recovery time in nano-seconds
+    Float_t fAfterpulseProb1;    // Early afterpulse probability
+    Float_t fAfterpulseProb2;    // Late afterpulse probability
+
     // MParContainer
     Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print);
