Index: /trunk/Mars/msim/MSimAbsorption.cc
===================================================================
--- /trunk/Mars/msim/MSimAbsorption.cc	(revision 18546)
+++ /trunk/Mars/msim/MSimAbsorption.cc	(revision 18547)
@@ -66,5 +66,5 @@
 //
 MSimAbsorption::MSimAbsorption(const char* name, const char *title)
-    : fEvt(0), fHeader(0), fSpline(0), fParName("MParSpline"), fUseTheta(kFALSE)
+    : fEvt(0), fRunHeader(0), fHeader(0), fSpline(0), fParName("MParSpline"), fUseTheta(kFALSE), fForce(kFALSE)
 {
     fName  = name  ? name  : "MSimAbsorption";
@@ -118,6 +118,6 @@
         return kTRUE;
 
-    MCorsikaRunHeader *h = (MCorsikaRunHeader*)pList->FindObject("MCorsikaRunHeader");
-    if (!h)
+    fRunHeader = (MCorsikaRunHeader*)pList->FindObject("MCorsikaRunHeader");
+    if (!fRunHeader)
     {
         *fLog << err << "MCorsikaRunHeader not found... aborting." << endl;
@@ -125,8 +125,11 @@
     }
 
-    if (h->GetWavelengthMin()<fSpline->GetXmin())
+    if (fRunHeader->Has(MCorsikaRunHeader::kCeffic) && !fForce)
+        *fLog << inf << "CEFFIC enabled... task will be skipped." << endl;
+
+    if (fRunHeader->GetWavelengthMin()<fSpline->GetXmin())
         *fLog << warn << "WARNING - Lower bound of wavelength bandwidth exceeds lower bound of spline." << endl;
 
-    if (h->GetWavelengthMax()>fSpline->GetXmax())
+    if (fRunHeader->GetWavelengthMax()>fSpline->GetXmax())
         *fLog << warn << "WARNING - Upper bound of wavelength bandwidth exceeds upper bound of spline." << endl;
 
@@ -142,4 +145,9 @@
 Int_t MSimAbsorption::Process()
 {
+    // Skip the task if the CEFFIC option has been enabled and
+    // its excution has not been forced by the user
+    if (!fForce && !fUseTheta && fRunHeader->Has(MCorsikaRunHeader::kCeffic))
+        return kTRUE;
+
     // Get the number of photons in the list
     const Int_t num = fEvt->GetNumPhotons();
@@ -194,4 +202,10 @@
     }
 
+    if (IsEnvDefined(env, prefix, "Force", print))
+    {
+        rc = kTRUE;
+        SetForce(GetEnvValue(env, prefix, "Force", fForce));
+    }
+
     return rc;
 }
Index: /trunk/Mars/msim/MSimAbsorption.h
===================================================================
--- /trunk/Mars/msim/MSimAbsorption.h	(revision 18546)
+++ /trunk/Mars/msim/MSimAbsorption.h	(revision 18547)
@@ -9,4 +9,5 @@
 class MParSpline;
 class MPhotonEvent;
+class MCorsikaRunHeader;
 class MCorsikaEvtHeader;
 
@@ -14,11 +15,13 @@
 {
 private:
-    MPhotonEvent      *fEvt;     //! Event stroing the photons
-    MCorsikaEvtHeader *fHeader;  //! Header storing event information
+    MPhotonEvent      *fEvt;       //! Event stroing the photons
+    MCorsikaRunHeader *fRunHeader; //! Corsika run header
+    MCorsikaEvtHeader *fHeader;    //! Header storing event information
 
-    MParSpline        *fSpline;  //! Spline to interpolate wavelength or incident angle
+    MParSpline        *fSpline;    //! Spline to interpolate wavelength or incident angle
 
     TString fParName;            // Container name of the spline containing the curve
     Bool_t  fUseTheta;           // Switches between using wavelength or incident angle
+    Bool_t  fForce;              // Force execution even if corsika already simulated the efficiencies
 
     // MParContainer
@@ -37,4 +40,5 @@
 
     void SetUseTheta(Bool_t b=kTRUE) { fUseTheta = b; }
+    void SetForce(Bool_t b=kTRUE) { fForce = b; }
 
     ClassDef(MSimAbsorption, 0) // Task to calculate wavelength or incident angle dependent absorption
