]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDRawReader.cxx
Added reading of conditions.csv, the configuration file
[u/mrichter/AliRoot.git] / FMD / AliFMDRawReader.cxx
index c58bb7c18fd8af5d07480c1fb4938a6f9f884f27..75392f6c13a71efb0762a3ccc1e067c5e4858bbb 100644 (file)
@@ -46,7 +46,8 @@
 //      | AliAltroStream |
 //      +----------------+
 //
-#include <AliLog.h>            // ALILOG_H
+// #include <AliLog.h>         // ALILOG_H
+#include "AliFMDDebug.h" // Better debug macros
 #include "AliFMDParameters.h"  // ALIFMDPARAMETERS_H
 #include "AliFMDDigit.h"       // ALIFMDDIGIT_H
 #include "AliFMDRawStream.h"   // ALIFMDRAWSTREAM_H 
@@ -88,8 +89,8 @@ AliFMDRawReader::Exec(Option_t*)
   fTree->Branch("FMD", &array);
   ReadAdcs(array);
   Int_t nWrite = fTree->Fill();
-  AliDebug(1, Form("Got a grand total of %d digits, wrote %d bytes to tree", 
-                  array->GetEntries(), nWrite));
+  AliFMDDebug(1, ("Got a grand total of %d digits, wrote %d bytes to tree", 
+                  array->GetEntriesFast(), nWrite));
 }
 
 
@@ -110,10 +111,12 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
   // Get sample rate 
   AliFMDParameters* pars = AliFMDParameters::Instance();
   AliFMDRawStream input(fReader);
+  AliFMDDebug(5, ("Setting 7 word headers"));
+  input.SetShortDataHeader(!pars->HasCompleteHeader());
 
   UShort_t stripMin = 0;
   UShort_t stripMax = 127;
-  UShort_t preSamp  = 0;
+  UShort_t preSamp  = 14+5;
   
   UInt_t ddl    = 0;
   UInt_t rate   = 0;
@@ -121,8 +124,13 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
   UInt_t hwaddr = 0;
   // Data array is approx twice the size needed. 
   UShort_t data[2048];
-  while (input.ReadChannel(ddl, hwaddr, last, data)) {
-    AliDebug(5, Form("Read channel 0x%x of size %d", hwaddr, last));
+
+  Bool_t isGood = kTRUE;
+  while (isGood) {
+    isGood = input.ReadChannel(ddl, hwaddr, last, data);
+    if (!isGood) break;
+
+    AliFMDDebug(5, ("Read channel 0x%x of size %d", hwaddr, last));
     UShort_t det, sec, str;
     Char_t   ring;
     if (!pars->Hardware2Detector(ddl, hwaddr, det, ring, sec, str)) {
@@ -133,25 +141,33 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
     rate     = pars->GetSampleRate(det, ring, sec, str);
     stripMin = pars->GetMinStrip(det, ring, sec, str);
     stripMax = pars->GetMaxStrip(det, ring, sec, str);
-    AliDebug(5, Form("DDL 0x%04x, address 0x%03x maps to FMD%d%c[%2d,%3d]", 
+    preSamp  = pars->GetPreSamples(det, ring, sec, str);
+    AliFMDDebug(5, ("DDL 0x%04x, address 0x%03x maps to FMD%d%c[%2d,%3d]", 
                       ddl, hwaddr, det, ring, sec, str));
     
     // Loop over the `timebins', and make the digits
     for (size_t i = 0; i < last; i++) {
       if (i < preSamp) continue;
-      Int_t    n      = array->GetEntries();
-      UShort_t curStr = str + stripMin + i / rate;
+      Int_t    n      = array->GetEntriesFast();
+      Short_t  curStr = str + stripMin + (i-preSamp) / rate;
       if ((curStr-str) > stripMax) {
-       AliError(Form("Current strip is %d but DB says max is %d", 
-                     curStr, stripMax));
+       // AliInfo(Form("timebin %4d -> (%3d+%3d+(%4d-%d)/%d) -> %d", 
+       //              i, str, stripMin, i, preSamp, rate, curStr));
+       // AliError(Form("Current strip is %3d (0x%04x,0x%03x,%4d) "
+       //               "but DB says max is %3d (rate=%d)", 
+       //               curStr, ddl, hwaddr, i, str+stripMax, rate));
+       // Garbage timebins - ignore 
+       continue;
       }
-      AliDebug(5, Form("making digit for FMD%d%c[%2d,%3d] from sample %4d", 
+      AliFMDDebug(5, ("making digit for FMD%d%c[%2d,%3d] from sample %4d", 
                       det, ring, sec, curStr, i));
       new ((*array)[n]) AliFMDDigit(det, ring, sec, curStr, data[i], 
                                    (rate >= 2 ? data[i+1] : 0),
-                                   (rate >= 3 ? data[i+2] : 0));
+                                   (rate >= 3 ? data[i+2] : 0),
+                                   (rate >= 4 ? data[i+3] : 0));
       if (rate >= 2) i++;
       if (rate >= 3) i++;
+      if (rate >= 4) i++;
     }
   }
   return kTRUE;
@@ -174,7 +190,7 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
   AliFMDParameters* pars = AliFMDParameters::Instance();
 
   // Select FMD DDL's 
-  fReader->Select(AliFMDParameters::kBaseDDL>>8);
+  fReader->Select("FMD");
 
   UShort_t stripMin = 0;
   UShort_t stripMax = 127;
@@ -184,9 +200,9 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
     UChar_t* cdata;
     if (!fReader->ReadNextData(cdata)) break;
     size_t   nchar = fReader->GetDataSize();
-    UShort_t ddl   = AliFMDParameters::kBaseDDL + fReader->GetDDLID();
+    UShort_t ddl   = fReader->GetDDLID();
     UShort_t rate  = 0;
-    AliDebug(1, Form("Reading %d bytes (%d 10bit words) from %d", 
+    AliFMDDebug(1, ("Reading %d bytes (%d 10bit words) from %d", 
                     nchar, nchar * 8 / 10, ddl));
     // Make a stream to read from 
     std::string str((char*)(cdata), nchar);
@@ -196,7 +212,7 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
     // Data array is approx twice the size needed. 
     UShort_t data[2048], hwaddr, last;
     while (r.ReadChannel(hwaddr, last, data) > 0) {
-      AliDebug(5, Form("Read channel 0x%x of size %d", hwaddr, last));
+      AliFMDDebug(5, ("Read channel 0x%x of size %d", hwaddr, last));
       UShort_t det, sec, str;
       Char_t   ring;
       if (!pars->Hardware2Detector(ddl, hwaddr, det, ring, sec, str)) {
@@ -207,7 +223,7 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
       rate     = pars->GetSampleRate(det, ring, sec, str);
       stripMin = pars->GetMinStrip(det, ring, sec, str);
       stripMax = pars->GetMaxStrip(det, ring, sec, str);
-      AliDebug(5, Form("DDL 0x%04x, address 0x%03x maps to FMD%d%c[%2d,%3d]", 
+      AliFMDDebug(5, ("DDL 0x%04x, address 0x%03x maps to FMD%d%c[%2d,%3d]", 
                       ddl, hwaddr, det, ring, sec, str));
 
       // Loop over the `timebins', and make the digits
@@ -219,7 +235,7 @@ AliFMDRawReader::ReadAdcs(TClonesArray* array)
          AliError(Form("Current strip is %d but DB says max is %d", 
                        curStr, stripMax));
        }
-       AliDebug(5, Form("making digit for FMD%d%c[%2d,%3d] from sample %4d", 
+       AliFMDDebug(5, ("making digit for FMD%d%c[%2d,%3d] from sample %4d", 
                         det, ring, sec, curStr, i));
        new ((*array)[n]) AliFMDDigit(det, ring, sec, curStr, data[i], 
                                      (rate >= 2 ? data[i+1] : 0),
@@ -253,13 +269,13 @@ AliFMDRawReader::Exec(Option_t*)
 
   // Get sample rate 
   AliFMDParameters* pars = AliFMDParameters::Instance();
-  fSampleRate = pars->GetSampleRate(AliFMDParameters::kBaseDDL);
+  fSampleRate = pars->GetSampleRate(0);
 
   // Use AliAltroRawStream to read the ALTRO format.  No need to
   // reinvent the wheel :-) 
   AliFMDRawStream input(fReader, fSampleRate);
   // Select FMD DDL's 
-  fReader->Select(AliFMDParameters::kBaseDDL);
+  fReader->Select("FMD");
   
   Int_t    oldDDL      = -1;
   Int_t    count       = 0;
@@ -277,14 +293,14 @@ AliFMDRawReader::Exec(Option_t*)
 
     count++; 
     Int_t ddl = fReader->GetDDLID();
-    AliDebug(10, Form("Current DDL is %d", ddl));
+    AliFMDDebug(10, ("Current DDL is %d", ddl));
     if (ddl != oldDDL || input.IsNewStrip() || !next) {
       // Make a new digit, if we have some data (oldDetector == 0,
       // means that we haven't really read anything yet - that is,
       // it's the first time we get here). 
       if (oldDetector > 0) {
        // Got a new strip. 
-       AliDebug(10, Form("Add a new strip: FMD%d%c[%2d,%3d] "
+       AliFMDDebug(10, ("Add a new strip: FMD%d%c[%2d,%3d] "
                          "(current: FMD%d%c[%2d,%3d])", 
                          oldDetector, input.PrevRing(), 
                          input.PrevSector() , input.PrevStrip(),
@@ -304,7 +320,7 @@ AliFMDRawReader::Exec(Option_t*)
       }
        
       if (!next) { 
-       AliDebug(10, Form("Read %d channels for FMD%d", 
+       AliFMDDebug(10, ("Read %d channels for FMD%d", 
                          count + 1, detector));
        break;
       }
@@ -313,15 +329,15 @@ AliFMDRawReader::Exec(Option_t*)
       // If we got a new DDL, it means we have a new detector. 
       if (ddl != oldDDL) {
        if (detector != 0) 
-         AliDebug(10, Form("Read %d channels for FMD%d", count + 1, detector));
+         AliFMDDebug(10, ("Read %d channels for FMD%d", count + 1, detector));
        // Reset counts, and update the DDL cache 
        count       = 0;
        oldDDL      = ddl;
        // Check that we're processing a FMD detector 
        Int_t detId = fReader->GetDetectorID();
-       if (detId != (AliFMDParameters::kBaseDDL >> 8)) {
+       if (detId != (AliDAQ::DetectorID("FMD"))) {
          AliError(Form("Detector ID %d != %d",
-                       detId, (AliFMDParameters::kBaseDDL >> 8)));
+                       detId, (AliDAQ::DetectorID("FMD"))));
          break;
        }
        // Figure out what detector we're deling with 
@@ -334,7 +350,7 @@ AliFMDRawReader::Exec(Option_t*)
          AliError(Form("Unknown DDL 0x%x for FMD", ddl));
          return;
        }
-       AliDebug(10, Form("Reading ADCs for 0x%x  - That is FMD%d",
+       AliFMDDebug(10, ("Reading ADCs for 0x%x  - That is FMD%d",
                          fReader->GetEquipmentId(), detector));
       }
       counts.Reset(-1);
@@ -342,7 +358,7 @@ AliFMDRawReader::Exec(Option_t*)
     
     counts[input.Sample()] = input.Count();
     
-    AliDebug(10, Form("ADC of FMD%d%c[%2d,%3d] += %d",
+    AliFMDDebug(10, ("ADC of FMD%d%c[%2d,%3d] += %d",
                      detector, input.Ring(), input.Sector(), 
                      input.Strip(), input.Count()));
     oldDetector = detector;