Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 1913)
+++ trunk/MagicSoft/Mars/Changelog	(revision 1914)
@@ -31,4 +31,11 @@
    * macros/dohtml.C:
      - added testenv.C
+
+   * readraw.cc:
+     - simplified
+   
+   * mraw/MRawEvtData.cc:
+     - fixed a bug in the draw function (the drawn pixel has not been the
+       one with the given Id, but simply the i-th entry in the array)
 
 
Index: trunk/MagicSoft/Mars/mraw/MRawEvtData.cc
===================================================================
--- trunk/MagicSoft/Mars/mraw/MRawEvtData.cc	(revision 1913)
+++ trunk/MagicSoft/Mars/mraw/MRawEvtData.cc	(revision 1914)
@@ -62,4 +62,5 @@
 #include "MArrayB.h"
 #include "MRawRunHeader.h"
+#include "MRawEvtPixelIter.h"
 
 ClassImp(MRawEvtData);
@@ -217,28 +218,37 @@
     TString str(opt);
 
-    UInt_t num = 0;
+    UInt_t id = 0;
 
     if (str.BeginsWith("GRAPH", TString::kIgnoreCase))
-    {
         if (str.Length()>5)
-            sscanf(&str[5], "%d", &num);
-
-        if (num>=GetNumPixels())
-            num= GetNumPixels();
-
-        *fLog << inf << "Drawing Graph: Pixel #" << num << " of " << (int)GetNumPixels() << endl;
-
-        const Int_t n = GetNumHiGainSamples();
-
-        Float_t *x = new Float_t[n];
-        Float_t *y = new Float_t[n];
+            sscanf(&str[5], "%d", &id);
+    if (str.BeginsWith("HIST", TString::kIgnoreCase))
+        if (str.Length()>4)
+            sscanf(&str[4], "%d", &id);
+
+    MRawEvtPixelIter pix(this);
+    if (!pix.Jump(id))
+    {
+        *fLog << warn << "Pixel Id #" << id << " doesn't exist!" << endl;
+        return;
+    }
+
+    const Byte_t *higains = pix.GetHiGainSamples();
+
+    const Int_t n = GetNumHiGainSamples();
+
+    TString name = "Pixel No.";
+    name += pix.GetPixelId();
+
+    if (str.BeginsWith("GRAPH", TString::kIgnoreCase))
+    {
+        *fLog << inf << "Drawing Graph: Pixel Id #" << pix.GetPixelId();
+        *fLog << " of " << (int)GetNumPixels() << "Pixels" << endl;
+
+        TGraph *graph = new TGraph;
 
         for (int i=0; i<n; i++)
-        {
-            x[i] = i;
-            y[i] = (*fHiGainFadcSamples)[i + num*GetNumHiGainSamples()];
-        }
-
-        TGraph *graph = new TGraph(n, x, y);
+            graph->SetPoint(graph->GetN(), i, higains[i]);
+
         graph->SetMaximum(256);
         graph->SetMinimum(0);
@@ -257,19 +267,5 @@
     if (str.BeginsWith("HIST", TString::kIgnoreCase))
     {
-        *fLog << "Length: " << str.Length() << endl;
-
-        if (str.Length()>4)
-            sscanf(&str[4], "%d", &num);
-
-        if (num>=GetNumPixels())
-            num= GetNumPixels();
-
-        *fLog << "Drawing Histogram of Pixel " << num << endl;
-
-        const Int_t n = GetNumHiGainSamples();
-
-        char *name = new char[16];
-
-        sprintf(name, "Pixel No.%d", (*fHiGainPixId)[num]);
+        *fLog << "Drawing Histogram of Pixel with Id " << pix.GetPixelId() << endl;
 
         TH1F *hist = new TH1F(name, "Hi Gain Samples FADC", n, 0, n);
@@ -278,5 +274,5 @@
 
         for (int i=0; i<n; i++)
-            hist->Fill(0.5+i, (*fHiGainFadcSamples)[i + num*GetNumHiGainSamples()]);
+            hist->Fill(0.5+i, higains[i]);
 
         hist->SetBit(kCanDelete);
Index: trunk/MagicSoft/Mars/readraw.cc
===================================================================
--- trunk/MagicSoft/Mars/readraw.cc	(revision 1913)
+++ trunk/MagicSoft/Mars/readraw.cc	(revision 1914)
@@ -25,4 +25,13 @@
 //
 /////////////////////////////////////////////////////////////////////////////
+
+void EnableBranch(TTree *t, TString name, void *ptr)
+{
+    if (!t->GetBranch(name+"."))
+        return;
+
+    t->GetBranch(name+".")->SetAddress(ptr);
+    gLog << " Found '" << name << "'" << endl;
+}
 
 int main(const int argc, const char **argv)
@@ -59,17 +68,8 @@
     }
 
-    MRawRunHeader  *runheader = new MRawRunHeader();
-    MRawEvtHeader  *evtheader = new MRawEvtHeader();
-    MTime          *evttime   = new MTime();
-    MRawEvtData    *evtdata   = new MRawEvtData();
-    MRawCrateArray *evtcrate  = new MRawCrateArray();
-
-    MMcEvt         *evtmc     = new MMcEvt() ; 
-    MMcTrig        *trigmc    = new MMcTrig() ; 
-
     //
     //  open the file
     //
-    gLog << " Open the file " << endl ; 
+    gLog << " Open the file '" << argv[1] << "'" << endl;
     TFile input(argv[1], "READ");
 
@@ -77,20 +77,15 @@
     // open the Run Header and read in
     //
-    gLog << " Check the RunHeader " << endl ; 
-    TTree *runtree = (TTree*) input.Get("RunHeaders") ;
-    
+    gLog << " Check for Tree 'RunHeaders'" << endl;
+    TTree *runtree = (TTree*)input.Get("RunHeaders");
     if (!runtree)
-    {
-        gLog << endl
-            << "  WARNING: This file has NO RunHeader "
-            << endl << endl ;
-    }
+        gLog << " WARNING: This file has NO Tree 'RunHeaders'" << endl << endl;
     else
     {
-        gLog << " Entries in Tree RunHeaders: " << dec << runtree->GetEntries() << endl ;
+        gLog << " Entries in Tree RunHeaders: " << dec << runtree->GetEntries() << endl;
 
+        MRawRunHeader *runheader = NULL;
         runtree->GetBranch("MRawRunHeader")->SetAddress(&runheader);
         runtree->GetEvent(0);
-
         runheader->Print();
     }
@@ -99,39 +94,31 @@
     // open the DataTree and read in 
     //
-    gLog << " Check the Event Tree " << endl ; 
-    TTree *evttree = (TTree*) input.Get("Events") ;
-    gLog << " Check all the Branches in the Tree " << endl ; 
-    
+    gLog << " Check the Tree 'Events'" << endl ;
+    TTree *evttree = (TTree*)input.Get("Events") ;
+    if (!evttree)
+    {
+        gLog << "Tree 'Events' not found in file... exit!" << endl;
+        return -1;
+    }
+
     //
     //  check the branches in the Tree 
     //
-    TIter Next(evttree->GetListOfBranches());
-    TBranch *branch=NULL;
-    
-    while ((branch=(TBranch*)Next()))
-    {
-        //
-        // Get Name of Branch
-        //
-        const char *name = branch->GetName();
-	
-        if (!strcmp(name, "MRawEvtHeader"))
-            evttree->GetBranch("MRawEvtHeader")->SetAddress(&evtheader);
+    gLog << " Check all the Branches in the Tree." << endl;
+    gLog << endl;
 
-        if (!strcmp(name, "MTime"))
-            evttree->GetBranch("MTime")->SetAddress(&evttime);
+    MRawEvtHeader  *evtheader = NULL;
+    MTime          *evttime   = NULL;
+    MRawEvtData    *evtdata   = NULL;
+    MRawCrateArray *evtcrate  = NULL;
+    MMcEvt         *evtmc     = NULL;
+    MMcTrig        *trigmc    = NULL;
 
-        if (!strcmp(name, "MRawEvtData"))
-            evttree->GetBranch("MRawEvtData")->SetAddress(&evtdata);
-
-        if (!strcmp(name, "MRawCrateArray"))
-            evttree->GetBranch("MRawCrateArray")->SetAddress(&evtcrate);
-
-        if (!strcmp(name, "MMcTrig"))
-            evttree->GetBranch("MMcTrig")->SetAddress(&trigmc);
-
-        if (!strcmp(name, "MMcEvt"))
-            evttree->GetBranch("MMcEvt")->SetAddress(&evtmc);
-    } 
+    EnableBranch(evttree, "MRawEvtHeader",  &evtheader);
+    EnableBranch(evttree, "MTime",          &evttime);
+    EnableBranch(evttree, "MRawEvtData",    &evtdata);
+    EnableBranch(evttree, "MRawCrateArray", &evtcrate);
+    EnableBranch(evttree, "MMcEvt",         &evtmc);
+    EnableBranch(evttree, "MMcTrig",        &trigmc);
 
     //
@@ -140,6 +127,7 @@
     Int_t nent = (Int_t)evttree->GetEntries();
 
-    gLog << endl << endl;
+    gLog << endl;
     gLog << " Entries in Tree Data: " << dec << nent << endl;
+    gLog << endl;
 
     for (Int_t i = 0; i<nent; i++)
@@ -152,10 +140,16 @@
         evttree->GetEvent(i);
 
-	evtmc->Print();
-	
-        evtheader->Print();
-        evttime->Print();
-        evtcrate->Print();
-        evtdata->Print();
+        if (evtmc)
+            evtmc->Print();
+        if (trigmc)
+            trigmc->Print();
+        if (evtheader)
+            evtheader->Print();
+        if (evttime)
+            evttime->Print();
+        if (evtcrate)
+            evtcrate->Print();
+        if (evtdata)
+            evtdata->Print();
     } 
     
