]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDrawData.cxx
fix overlaps
[u/mrichter/AliRoot.git] / TRD / AliTRDrawData.cxx
index 80f0ee0b8ad7f86e1568e45907a227d6f12ee8ad..16e1a7b6d5b5d1096deb6332caf34058ba73f997 100644 (file)
@@ -35,6 +35,7 @@
 #include "AliTRDgeometry.h"
 #include "AliTRDdataArrayI.h"
 #include "AliTRDdataArrayS.h"
+#include "AliTRDrawStreamBase.h"
 #include "AliTRDRawStream.h"
 #include "AliTRDRawStreamV2.h"
 #include "AliTRDcalibDB.h"
@@ -191,24 +192,37 @@ Bool_t AliTRDrawData::Digits2Raw(AliTRDdigitsManager *digitsManager)
 
         // Get the digits array
         AliTRDdataArrayS *digits = (AliTRDdataArrayS *) digitsManager->GetDigits(iDet);
-        digits->Expand();
+        if (digits->HasData()) {
 
-        Int_t hcwords = 0;
-       Int_t rv = fFee->GetRAWversion();
+          digits->Expand();
 
-        // Process A side of the chamber
-       if ( rv >= 1 && rv <= 2 ) hcwords = ProduceHcDataV1andV2(digits,0,iDet,hcBuffer,kMaxHcWords);
-       if ( rv == 3 )            hcwords = ProduceHcDataV3     (digits,0,iDet,hcBuffer,kMaxHcWords);
+          Int_t hcwords = 0;
+         Int_t rv = fFee->GetRAWversion();
 
-        of->WriteBuffer((char *) hcBuffer, hcwords*4);
-        npayloadbyte += hcwords*4;
+          // Process A side of the chamber
+         if ( rv >= 1 && rv <= 2 ) {
+            hcwords = ProduceHcDataV1andV2(digits,0,iDet,hcBuffer,kMaxHcWords);
+         }
+         if ( rv == 3 ) { 
+            hcwords = ProduceHcDataV3     (digits,0,iDet,hcBuffer,kMaxHcWords);
+         }
+
+          of->WriteBuffer((char *) hcBuffer, hcwords*4);
+          npayloadbyte += hcwords*4;
+
+          // Process B side of the chamber
+         if ( rv >= 1 && rv <= 2 ) {
+            hcwords = ProduceHcDataV1andV2(digits,1,iDet,hcBuffer,kMaxHcWords);
+         }
+         if ( rv >= 3 ) {
+            hcwords = ProduceHcDataV3     (digits,1,iDet,hcBuffer,kMaxHcWords);
+         }
 
-        // Process B side of the chamber
-       if ( rv >= 1 && rv <= 2 ) hcwords = ProduceHcDataV1andV2(digits,1,iDet,hcBuffer,kMaxHcWords);
-       if ( rv >= 3 )            hcwords = ProduceHcDataV3     (digits,1,iDet,hcBuffer,kMaxHcWords);
+          of->WriteBuffer((char *) hcBuffer, hcwords*4);
+          npayloadbyte += hcwords*4;
+
+       }
 
-        of->WriteBuffer((char *) hcBuffer, hcwords*4);
-        npayloadbyte += hcwords*4;
       }
     }
 
@@ -562,6 +576,60 @@ AliTRDdigitsManager *AliTRDrawData::Raw2Digits(AliRawReader *rawReader)
   AliTRDdataArrayI *track1 = 0;
   AliTRDdataArrayI *track2 = 0; 
 
+  //AliTRDSignalIndex *indexes = 0;
+  // Create the digits manager
+  AliTRDdigitsManager* digitsManager = new AliTRDdigitsManager();
+  digitsManager->CreateArrays();
+
+  //AliTRDRawStream input(rawReader);
+  //   AliTRDRawStreamV2 input(rawReader);
+  //   input.SetRawVersion( fFee->GetRAWversion() );
+  //   input.Init();
+
+  AliTRDrawStreamBase *pinput = AliTRDrawStreamBase::GetRawStream(rawReader);
+  AliTRDrawStreamBase &input = *pinput;
+
+  AliInfo(Form("Stream version: %s", input.IsA()->GetName()));
+
+  // Loop through the digits
+  Int_t det    = 0;
+
+  while (det >= 0)
+    {
+      det = input.NextChamber(digitsManager);
+      if (det >= 0)
+       {
+         // get...
+         digits = (AliTRDdataArrayS *) digitsManager->GetDigits(det);
+         track0 = (AliTRDdataArrayI *) digitsManager->GetDictionary(det,0);
+         track1 = (AliTRDdataArrayI *) digitsManager->GetDictionary(det,1);
+         track2 = (AliTRDdataArrayI *) digitsManager->GetDictionary(det,2);
+         // and compress
+         if (digits) digits->Compress(1,0);
+         if (track0) track0->Compress(1,0);
+         if (track1) track1->Compress(1,0);
+         if (track2) track2->Compress(1,0);
+       }
+    }
+
+  delete pinput;
+  pinput = NULL;
+
+  return digitsManager;
+}
+
+//_____________________________________________________________________________
+AliTRDdigitsManager *AliTRDrawData::Raw2DigitsOLD(AliRawReader *rawReader)
+{
+  //
+  // Vx of the raw data reading
+  //
+
+  AliTRDdataArrayS *digits = 0;
+  AliTRDdataArrayI *track0 = 0;
+  AliTRDdataArrayI *track1 = 0;
+  AliTRDdataArrayI *track2 = 0; 
+
   AliTRDSignalIndex *indexes = 0;
   // Create the digits manager
   AliTRDdigitsManager* digitsManager = new AliTRDdigitsManager();