]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRawWriter.cxx
Re-create the CDH header for each event to take into account correctly
[u/mrichter/AliRoot.git] / MUON / AliMUONRawWriter.cxx
index 9bf130db9d57a16f4555420e10d7da1eae62efe5..d22dab4767b8a727e76ad1d50564d1e9d5e45119 100644 (file)
@@ -15,6 +15,7 @@
 
 /* $Id$ */
 
+//-----------------------------------------------------------------------------
 /// \class AliMUONRawWriter
 /// MUON Raw Data generaton in ALICE-MUON
 /// Raw data structure could be found in Alice-note.
@@ -40,6 +41,7 @@
 /// Using AliMpDDLStore::GetBusPatchId.
 ///
 /// \author Ch. Finck, Feb. 07.
+//-----------------------------------------------------------------------------
 
 
 #include "AliMUONRawWriter.h"
@@ -59,8 +61,7 @@
 #include "AliMUONRegHeader.h"
 
 #include "AliMUONVTriggerStore.h"
-#include "AliMUONStopwatchGroup.h"
-#include "AliMUONStopwatchGroupElement.h"
+#include "AliCodeTimer.h"
 
 #include "AliMpDDLStore.h"
 #include "AliMpDDL.h"
@@ -76,6 +77,7 @@
 #include "AliMpVSegmentation.h"
 
 #include "AliRawReader.h"
+#include "AliRawDataHeaderSim.h"
 #include "AliBitPacking.h" 
 #include "AliDAQ.h"
 #include "AliLog.h"
@@ -98,8 +100,7 @@ AliMUONRawWriter::AliMUONRawWriter()
     fLocalStruct(new AliMUONLocalStruct()),
     fDDLStore(AliMpDDLStore::Instance()),
     fScalerEvent(kFALSE),
-    fHeader(),
-    fTimers(new AliMUONStopwatchGroup),
+    fHeader(0x0),
     fBufferSize((((43*AliMpConstants::ManuNofChannels() + 4)*5 + 10)*5 + 8)*2),
     fBuffer(new Int_t [fBufferSize])
 {
@@ -125,9 +126,6 @@ AliMUONRawWriter::~AliMUONRawWriter(void)
   delete fDarcHeader;
   delete fRegHeader;
   delete fLocalStruct;
-  AliInfo("Timers:");
-  fTimers->Print();
-  delete fTimers;
   delete[] fBuffer;
 }
 
@@ -154,7 +152,7 @@ Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
 {
   /// convert digits of the current event to raw data
 
-  AliMUONStopwatchGroupElement timer(fTimers,"MUON","AliMUONRawWriter::Digits2Raw");
+  AliCodeTimerAuto("")
   
   Int_t idDDL;
   Char_t name[255];
@@ -163,7 +161,7 @@ Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
   
   if ( digitStore ) 
   {
-    AliMUONStopwatchGroupElement timer(fTimers,"MUON","AliMUONRawWriter::Digits2Raw for Tracker");
+    AliCodeTimerAuto("for Tracker")
 
     AliMpExMap busPatchMap(true);
 
@@ -190,7 +188,7 @@ Int_t AliMUONRawWriter::Digits2Raw(AliMUONVDigitStore* digitStore,
  
   if ( triggerStore )
   {
-    AliMUONStopwatchGroupElement timer(fTimers,"MUON","AliMUONRawWriter::Digits2Raw for Trigger");
+    AliCodeTimerAuto("for Trigger")
 
     // trigger chambers
     
@@ -224,7 +222,7 @@ AliMUONRawWriter::Digits2BusPatchMap(const AliMUONVDigitStore& digitStore,
 {
   /// Create bus patch structures corresponding to digits in the store
   
-  AliMUONStopwatchGroupElement timer(fTimers,"MUON","AliMUONRawWriter::Digits2BusPatchMap");
+  AliCodeTimerAuto("")
   
   static const Int_t kMAXADC = (1<<12)-1; // We code the charge on a 12 bits ADC.
     
@@ -248,8 +246,8 @@ AliMUONRawWriter::Digits2BusPatchMap(const AliMUONVDigitStore& digitStore,
     {
       // This is most probably an error in the digitizer (which should insure
       // the adc is below kMAXADC), so make it a (non-fatal) error indeed.
-      AliError(Form("adc value %d above %x for DE %d . Setting to %x. Digit is:",
-                    digit->DetElemId(),charge,kMAXADC,kMAXADC));
+      AliError(Form("adc value %d above 0x%x for DE %d . Setting to 0x%x. Digit is:",
+                    charge,kMAXADC,digit->DetElemId(),kMAXADC));
       StdoutToAliError(digit->Print());
       charge = kMAXADC;
     }
@@ -310,8 +308,12 @@ AliMUONRawWriter::WriteTrackerDDL(AliMpExMap& busPatchMap, Int_t iDDL)
   // (((43 manus max per bus patch *64 channels + 4 bus patch words) * 5 bus patch 
   //   + 10 dsp words)*5 dsps + 8 block words)*2 blocks 
  
-  AliMUONStopwatchGroupElement timer(fTimers,"MUON","AliMUONRawWriter::WriteTrackerDDL");
+  AliCodeTimerAuto("")
 
+  if (fHeader == 0x0) {
+    AliError("Raw data header must be set");
+    return;
+  }
   memset(fBuffer,0,fBufferSize*sizeof(Int_t));
   
   AliMpDDL* ddl = fDDLStore->GetDDL(iDDL);
@@ -409,13 +411,14 @@ AliMUONRawWriter::WriteTrackerDDL(AliMpExMap& busPatchMap, Int_t iDDL)
   // writting onto disk
   // total length in bytes
   // DDL header
-  Int_t headerSize = sizeof(fHeader)/4;
+
+  Int_t headerSize = sizeof(AliRawDataHeader)/4;
   
-  fHeader.fSize = (totalDDLLength + headerSize) * 4;
+  fHeader->fSize = (totalDDLLength + headerSize) * 4;
   
   AliFstream* file = new AliFstream(AliDAQ::DdlFileName("MUONTRK",iDDL));
   
-  file->WriteBuffer((char*)(&fHeader),headerSize*4);
+  file->WriteBuffer((char*)fHeader,headerSize*4);
   file->WriteBuffer((char*)fBuffer,sizeof(int)*index);
   delete file;
 }
@@ -433,7 +436,12 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
 {
   /// Write trigger DDL
   
-  AliMUONStopwatchGroupElement timer(fTimers,"MUON","AliMUONRawWriter::WriteTriggerDDL");
+  AliCodeTimerAuto("")
+
+  if (fHeader == 0x0) {
+    AliError("Raw data header must be set");
+    return 0;
+  }
 
  // DDL event one per half chamber
 
@@ -669,8 +677,8 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
 
     // writting onto disk
     // write DDL's
-    fHeader.fSize = (index + headerSize) * 4;// total length in bytes
-    file[iDDL]->WriteBuffer((char*)(&fHeader),headerSize*4);
+    fHeader->fSize = (index + headerSize) * 4;// total length in bytes
+    file[iDDL]->WriteBuffer((char*)fHeader,headerSize*4);
     file[iDDL]->WriteBuffer((char*)buffer,sizeof(int)*index);
   
   }