Index: trunk/Mars/mjobs/MJSimulation.cc
===================================================================
--- trunk/Mars/mjobs/MJSimulation.cc	(revision 17855)
+++ trunk/Mars/mjobs/MJSimulation.cc	(revision 17866)
@@ -233,9 +233,9 @@
 {
     // Common run headers
-    write.AddContainer("MMcCorsikaRunHeader", "RunHeaders", kFALSE);
-    write.AddContainer("MCorsikaRunHeader",   "RunHeaders", kFALSE);
-    write.AddContainer("MRawRunHeader",       "RunHeaders");
-    write.AddContainer("MGeomCam",            "RunHeaders");
-    write.AddContainer("MMcRunHeader",        "RunHeaders");
+    write.AddContainer("MMcCorsikaRunHeader", "RunHeaders", kFALSE, 1);
+    write.AddContainer("MCorsikaRunHeader",   "RunHeaders", kFALSE, 1);
+    write.AddContainer("MRawRunHeader",       "RunHeaders", kTRUE,  1);
+    write.AddContainer("MGeomCam",            "RunHeaders", kTRUE,  1);
+    write.AddContainer("MMcRunHeader",        "RunHeaders", kTRUE,  1);
 
     // Common events
@@ -584,10 +584,22 @@
     // -------------------------------------------------------------------
 
-    const char *fmt = Form("s/cer([0-9]+)([0-9][0-9][0-9])/%s\\/%08d.$2_%%c_MonteCarlo$1.root/", Esc(fPathOut).Data(), header.GetRunNumber());
-
-    const TString rule1(Form(fmt, 'R'));
-    const TString rule2(Form(fmt, 'Y'));
-    const TString rule4(Form(fmt, 'I'));
-    TString rule3(Form(fmt, header.GetRunTypeChar()));
+    if (!fFileOut.IsNull())
+    {
+        const Ssiz_t dot   = fFileOut.Last('.');
+        const Ssiz_t slash = fFileOut.Last('/');
+        if (dot>slash)
+            fFileOut = fFileOut.Remove(dot);
+    }
+
+    // -------------------------------------------------------------------
+
+    const char *fmt = fFileOut.IsNull() ?
+        Form("s/cer([0-9]+)([0-9][0-9][0-9])/%s\\/%08d.$2%%s_MonteCarlo$1.root/", Esc(fPathOut).Data(), header.GetRunNumber()) :
+        Form("%s/%s%%s.root", Esc(fPathOut).Data(), Esc(fFileOut).Data());
+
+    const TString rule1(Form(fmt, fFileOut.IsNull()?"_R":""));
+    const TString rule2(Form(fmt, "_Y"));
+    const TString rule4(Form(fmt, "_I"));
+    TString rule3(Form(fmt, Form("_%c", header.GetRunTypeChar())));
 
     MWriteRootFile write4a( 2, rule4, fOverwrite?"RECREATE":"NEW", "Star file");
@@ -600,5 +612,5 @@
 
     if (fWriteFitsFile)
-        rule3.ReplaceAll("$1.root/", "$1.fits/");
+        rule3.ReplaceAll(".root", ".fits");
 
     MWriteFitsFile write3af( 2, rule3, fOverwrite?"RECREATE":"NEW", "Camera file");
@@ -631,16 +643,16 @@
 
     // Y: Dedicated file structure
-    write2a.AddContainer("MPedPhotFromExtractorRndm", "RunHeaders"); // FIXME: Needed for the signal files to be display in MARS
+    write2a.AddContainer("MPedPhotFromExtractorRndm", "RunHeaders", kTRUE, 1); // FIXME: Needed for the signal files to be display in MARS
     write2a.AddContainer("MSignalCam", "Events");
 
     // D: Dedicated file structure
-    write3af.AddContainer("ElectronicNoise",  "RunHeaders");
-    write3af.AddContainer("IntendedPulsePos", "RunHeaders");
+    write3af.AddContainer("ElectronicNoise",  "RunHeaders", kTRUE, 1);
+    write3af.AddContainer("IntendedPulsePos", "RunHeaders", kTRUE, 1);
     write3af.AddContainer("MRawEvtData",      "Events");
     write3af.AddContainer("MTruePhotonsPerPixelCont", "Events");
     write3af.AddContainer("MPhotonEvent","Events");
 
-    write3ar.AddContainer("ElectronicNoise",  "RunHeaders");
-    write3ar.AddContainer("IntendedPulsePos", "RunHeaders");
+    write3ar.AddContainer("ElectronicNoise",  "RunHeaders", kTRUE, 1);
+    write3ar.AddContainer("IntendedPulsePos", "RunHeaders", kTRUE, 1);
     write3ar.AddContainer("MRawEvtData",      "Events");
     // It doesn't make much sene to write this information
Index: trunk/Mars/mjobs/MJSimulation.h
===================================================================
--- trunk/Mars/mjobs/MJSimulation.h	(revision 17855)
+++ trunk/Mars/mjobs/MJSimulation.h	(revision 17866)
@@ -29,4 +29,6 @@
     Int_t  fRunNumber;      // 8 digits run number to be used for the file names
 
+    TString fFileOut;       // Output file name if all runs should be combines
+
     Bool_t WriteResult(const MParList &plist, const MSequence &seq, Int_t run);
     Bool_t CheckEnvLocal();
@@ -45,4 +47,5 @@
     void SetMode(Int_t mode) { fOperationMode = mode; }
     void SetWriteFitsFile(Bool_t fits) { fWriteFitsFile = fits; }
+    void SetFileOut(const char *file="") { fFileOut = file; }
 
     void SetRunNumber(Int_t n=-1) { fRunNumber = n%100000000; }
