Index: trunk/Mars/msim/MSimAtmosphere.cc
===================================================================
--- trunk/Mars/msim/MSimAtmosphere.cc	(revision 18547)
+++ trunk/Mars/msim/MSimAtmosphere.cc	(revision 18548)
@@ -698,7 +698,8 @@
 //
 MSimAtmosphere::MSimAtmosphere(const char* name, const char *title)
-    : fEvt(0), fAtmosphere(0),
+    : fRunHeader(0), fEvt(0), fAtmosphere(0),
     fFileAerosols("resmc/atmosphere-aerosols.txt"),
-    fFileOzone("resmc/atmosphere-ozone.txt")
+    fFileOzone("resmc/atmosphere-ozone.txt"),
+    fForce(kFALSE)
 {
     fName  = name  ? name  : "MSimAtmosphere";
@@ -739,9 +740,15 @@
 Bool_t MSimAtmosphere::ReInit(MParList *pList)
 {
-    MCorsikaRunHeader *h = (MCorsikaRunHeader*)pList->FindObject("MCorsikaRunHeader");
-    if (!h)
+    fRunHeader = (MCorsikaRunHeader*)pList->FindObject("MCorsikaRunHeader");
+    if (!fRunHeader)
     {
         *fLog << err << "MCorsikaRunHeader not found... aborting." << endl;
         return kFALSE;
+    }
+
+    if (fRunHeader->Has(MCorsikaRunHeader::kCeffic) && !fForce)
+    {
+        *fLog << inf << "CEFFIC enabled... task will be skipped." << endl;
+        return kTRUE;
     }
 
@@ -759,5 +766,5 @@
     */
 
-    fAtmosphere->Init(*h, fFileOzone, fFileAerosols);
+    fAtmosphere->Init(*fRunHeader, fFileOzone, fFileAerosols);
 
     if (!fAtmosphere->IsAllValid())
@@ -767,14 +774,14 @@
     }
 
-    if (h->GetWavelengthMin()<fAtmosphere->GetWavelengthMin())
+    if (fRunHeader->GetWavelengthMin()<fAtmosphere->GetWavelengthMin())
         *fLog << warn << "WARNING - Lower bound of wavelength bandwidth exceeds valid range of atmosphere." << endl;
 
-    if (h->GetWavelengthMax()>fAtmosphere->GetWavelengthMax())
+    if (fRunHeader->GetWavelengthMax()>fAtmosphere->GetWavelengthMax())
         *fLog << warn << "WARNING - Lower bound of wavelength bandwidth exceeds  valid range of atmosphere." << endl;
 
-    if (!h->Has(MCorsikaRunHeader::kAtmext))
+    if (!fRunHeader->Has(MCorsikaRunHeader::kAtmext))
         *fLog << warn << "WARNING - ATMEXT option not used for Corsika data." << endl;
 
-    if (!h->Has(MCorsikaRunHeader::kRefraction))
+    if (!fRunHeader->Has(MCorsikaRunHeader::kRefraction))
         *fLog << warn << "WARNING - Refraction calculation disabled for Corsika data." << endl;
 
@@ -786,4 +793,9 @@
 Int_t MSimAtmosphere::Process()
 {
+    // Skip the task if the CEFFIC option has been enabled and
+    // its excution has not been forced by the user
+    if (!fForce && fRunHeader->Has(MCorsikaRunHeader::kCeffic))
+        return kTRUE;
+
     // Get the number of photons in the list
     const Int_t num = fEvt->GetNumPhotons();
@@ -872,4 +884,10 @@
     }
 
+    if (IsEnvDefined(env, prefix, "Force", print))
+    {
+        rc = kTRUE;
+        fForce = GetEnvValue(env, prefix, "Force", fForce);
+    }
+
     return rc;
 }
Index: trunk/Mars/msim/MSimAtmosphere.h
===================================================================
--- trunk/Mars/msim/MSimAtmosphere.h	(revision 18547)
+++ trunk/Mars/msim/MSimAtmosphere.h	(revision 18548)
@@ -9,9 +9,11 @@
 class MAtmosphere;
 class MPhotonEvent;
+class MCorsikaRunHeader;
 
 class MSimAtmosphere : public MTask
 {
 private:
-    MPhotonEvent *fEvt;        //! Event stroing the photons
+    MCorsikaRunHeader *fRunHeader; //! Corsika run header
+    MPhotonEvent *fEvt;            //! Event stroing the photons
 
     MAtmosphere  *fAtmosphere; //! Instance of class describing atmosphere
@@ -19,4 +21,6 @@
     TString fFileAerosols;     // Name of file with aersole absorption
     TString fFileOzone;        // Name of file with ozone absorption
+
+    Bool_t fForce;             // Force execution in case efficiencies are already included (CEFFIC)
 
     // MParContainer
