Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 8418)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 8419)
@@ -77,4 +77,10 @@
        (TO BE FIXED)
 
+   * mfilter/FilterLinkDef.h, mfilter/Makefile:
+     - added MFEvtNumber
+
+   * mfilter/MFEvtNumber.[h,cc]:
+     - added
+
 
 
Index: /trunk/MagicSoft/Mars/mfilter/FilterLinkDef.h
===================================================================
--- /trunk/MagicSoft/Mars/mfilter/FilterLinkDef.h	(revision 8418)
+++ /trunk/MagicSoft/Mars/mfilter/FilterLinkDef.h	(revision 8419)
@@ -10,4 +10,5 @@
 #pragma link C++ class MFDeltaT+;
 #pragma link C++ class MFParticleId+;
+#pragma link C++ class MFEvtNumber+;
 
 #pragma link C++ class MFSoftwareTrigger+;
Index: /trunk/MagicSoft/Mars/mfilter/MFEvtNumber.cc
===================================================================
--- /trunk/MagicSoft/Mars/mfilter/MFEvtNumber.cc	(revision 8419)
+++ /trunk/MagicSoft/Mars/mfilter/MFEvtNumber.cc	(revision 8419)
@@ -0,0 +1,182 @@
+/* ======================================================================== *\
+!
+! *
+! * This file is part of MARS, the MAGIC Analysis and Reconstruction
+! * Software. It is distributed to you in the hope that it can be a useful
+! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
+! * It is distributed WITHOUT ANY WARRANTY.
+! *
+! * Permission to use, copy, modify and distribute this software and its
+! * documentation for any purpose is hereby granted without fee,
+! * provided that the above copyright notice appear in all copies and
+! * that both that copyright notice and this permission notice appear
+! * in supporting documentation. It is provided "as is" without express
+! * or implied warranty.
+! *
+!
+!
+!   Author(s): Thomas Bretz 3/2007 <mailto:tbretz@astro.uni-wuerzburg.de>
+!
+!   Copyright: MAGIC Software Development, 2000-2007
+!
+!
+\* ======================================================================== */
+
+/////////////////////////////////////////////////////////////////////////////
+//
+//   MFEvtNumber
+//
+/////////////////////////////////////////////////////////////////////////////
+#include "MFEvtNumber.h"
+
+#include <TFile.h>
+#include <TTree.h>
+
+#include "MParList.h"
+
+#include "MLog.h"
+#include "MLogManip.h"
+
+#include "MRawRunHeader.h"
+#include "MRawEvtHeader.h"
+
+ClassImp(MFEvtNumber);
+
+using namespace std;
+
+// --------------------------------------------------------------------------
+//
+//  Default Constructor
+//
+MFEvtNumber::MFEvtNumber(const char *name, const char *title):
+    fFileName(""), fTreeName("Events"), fSelector("")
+{
+    fName  = name  ? name  : "MFEvtNumber";
+    fTitle = title ? title : "Filter to select events by run- and evt-number";
+}
+
+// --------------------------------------------------------------------------
+//
+// return the event id. It is a binary compilation of run- and evt-number
+//
+ULong_t MFEvtNumber::GetEvtId() const
+{
+    return Compile(fRun->GetRunNumber(), fEvt->GetDAQEvtNumber());
+}
+
+// --------------------------------------------------------------------------
+//
+//   Preprocess
+//  
+//  MC slope and min/max energy are read
+//  Normalization factor is computed
+//
+Int_t MFEvtNumber::PreProcess(MParList *plist)
+{
+    fResult = kTRUE;
+
+    if (fFileName.IsNull())
+    {
+        *fLog << inf << "No input file given... skipped." << endl;
+        return kSKIP;
+    }
+
+    fRun = (MRawRunHeader*)plist->FindObject("MRawRunHeader");
+    if (!fRun)
+    {
+        *fLog << err << "MRawRunHeader not found ... aborting." << endl;
+        return kFALSE;
+    }
+    fEvt = (MRawEvtHeader*)plist->FindObject("MRawEvtHeader");
+    if (!fEvt)
+    {
+        *fLog << err << "MRawEvtHeader not found ... aborting." << endl;
+        return kFALSE;
+    }
+
+    TFile file(fFileName);
+    if (file.IsZombie())
+    {
+        *fLog << err << "Cannot open file " << fFileName << "... aborting." << endl;
+        return kFALSE;
+    }
+
+    TTree *t = dynamic_cast<TTree*>(file.Get(fTreeName));
+    if (!t)
+    {
+        *fLog << err << "Tree " << fTreeName << " not found in file " << fFileName << "... aborting." << endl;
+        return kFALSE;
+    }
+
+    if (t->Draw("RunNumber.fVal:EvtNumber.fVal", fSelector, "goff")<0)
+    {
+        *fLog << err << "Could not retrieve event-list from tree " << fTreeName << " in file " << fFileName << " selecting " << fSelector << "... aborting." << endl;
+        return kFALSE;
+    }
+
+    const Long64_t n = t->GetSelectedRows();
+
+    if (n<=0)
+    {
+        *fLog << err << "Could not retrieve event-list from tree " << fTreeName << " in file " << fFileName << " selecting " << fSelector << "... aborting." << endl;
+        return kFALSE;
+    }
+
+    const Double_t *v1 = t->GetV1();
+    const Double_t *v2 = t->GetV2();
+
+
+    *fLog << inf << "Found " << n << " events fulfilling " << fSelector << "." << endl;
+
+    for (Long64_t i=0; i<n; i++)
+        fList.Add(Compile((ULong64_t)v1[i], (ULong64_t)v2[i]), 1);
+
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//  
+//  Select events randomly according to the MC ("old") and required ("new") 
+//    energy slope.
+//  Old E slope is fMcSlope
+//  New E slope is set by the user (fval; fNewSlope)
+//  If old and new energy slope are the same skip the selection. 
+//  The MC energy slope and lower and upper limits are taken from the
+//  run header (requires reflector ver.>0.6 and camera ver.>0.6) 
+//
+Int_t MFEvtNumber::Process()
+{
+    if (fFileName.IsNull())
+        return kTRUE;
+
+    fResult = fList.GetValue(GetEvtId()) ? kTRUE : kFALSE;
+
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+//   MFEvtNumber.FileName: filename.root
+//   MFEvtNumber.TreeName: Events
+//   MFEvtNumber.Selector: ThetaSquared<0.04
+//
+Int_t MFEvtNumber::ReadEnv(const TEnv &env, TString prefix, Bool_t print)
+{
+    Bool_t rc = kFALSE;
+    if (IsEnvDefined(env, prefix, "FileName", print))
+    {
+        rc = kTRUE;
+        SetFileName(GetEnvValue(env, prefix, "FileName", fFileName));
+    }
+    if (IsEnvDefined(env, prefix, "TreeName", print))
+    {
+        rc = kTRUE;
+        SetFileName(GetEnvValue(env, prefix, "TreeName", fTreeName));
+    }
+    if (IsEnvDefined(env, prefix, "Selector", print))
+    {
+        rc = kTRUE;
+        SetSelector(GetEnvValue(env, prefix, "Selector", fSelector));
+    }
+    return rc;
+}
Index: /trunk/MagicSoft/Mars/mfilter/MFEvtNumber.h
===================================================================
--- /trunk/MagicSoft/Mars/mfilter/MFEvtNumber.h	(revision 8419)
+++ /trunk/MagicSoft/Mars/mfilter/MFEvtNumber.h	(revision 8419)
@@ -0,0 +1,60 @@
+#ifndef MARS_MFEvtNumber
+#define MARS_MFEvtNumber
+
+#ifndef MARS_MFilter
+#include "MFilter.h"
+#endif
+
+#ifndef ROOT_TExMap
+#include <TExMap.h>
+#endif
+
+class MRawRunHeader;
+class MRawEvtHeader;
+
+class MFEvtNumber : public MFilter
+{
+private:
+    MRawRunHeader *fRun;    //! MRawRunHeader with run-number of event
+    MRawEvtHeader *fEvt;    //! MRawEvtHeader with evt-number of event
+
+    Bool_t  fResult;        //! Result returned by IsExpressionTrue
+
+    TString fFileName;      // File name of the file with the even-/run-number
+    TString fTreeName;      // Tree name of the file with the even-/run-number
+
+    TString fSelector;      // Selector to choose run-/evt-number from file
+
+    TExMap  fList;          // List with all event-/run-numbers
+
+    ULong_t Compile(ULong64_t run, ULong64_t evt) const { return (run<<32)|evt; }
+    ULong_t GetEvtId() const;
+
+    // MTask
+    Int_t  PreProcess(MParList *pList);
+    Int_t  Process();
+
+    // MFilter
+    Bool_t IsExpressionTrue() const { return fResult; }
+
+public:
+    MFEvtNumber(const char *name=NULL, const char *title=NULL);
+
+    // Setter
+    void SetFileName(const char *name) { fFileName=name; }
+    void SetTreeName(const char *name) { fTreeName=name; }
+    void SetSelector(const char *sel)  { fSelector=sel; }
+
+    // MParContainer
+    Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print);
+
+    ClassDef(MFEvtNumber, 0) // Filter to select events by run- and evt-number
+};
+
+#endif
+
+
+
+
+
+
Index: /trunk/MagicSoft/Mars/mfilter/Makefile
===================================================================
--- /trunk/MagicSoft/Mars/mfilter/Makefile	(revision 8418)
+++ /trunk/MagicSoft/Mars/mfilter/Makefile	(revision 8419)
@@ -14,5 +14,5 @@
            -I../manalysis -I../mpointing -I../mfileio -I../mgeom \
            -I../mimage -I../mgui -I../mmc -I../mhbase -I../msignal \
-           -I../mpedestal -I../mbadpixels
+           -I../mpedestal -I../mbadpixels -I../mcalib
 
 CINT     = Filter
@@ -22,4 +22,5 @@
            MFMagicCuts.cc \
 	   MFGeomag.cc \
+	   MFEvtNumber.cc \
            MFDeltaT.cc \
 	   MFParticleId.cc \
