Decoding of the sampling time and L1 phase.
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Jun 2008 15:25:34 +0000 (15:25 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 9 Jun 2008 15:25:34 +0000 (15:25 +0000)
RAW/AliAltroRawStream.cxx
RAW/AliAltroRawStream.h

index d6a4bf8..fe40a52 100644 (file)
@@ -616,6 +616,61 @@ Int_t AliAltroRawStream::ReadRCUTrailer(Int_t &index, Int_t trailerSize)
 }
 
 //_____________________________________________________________________________
+Double_t AliAltroRawStream::GetTSample() const
+{
+  // Returns the sampling time
+  // in seconds. In case the rcu trailer
+  // was note read, return an invalid number (0)
+
+  if (!fRCUTrailerData) return 0.;
+
+  const Double_t kLHCTimeSample = 25.0e-9; // LHC clocks runs at 40 MHz
+  UChar_t fq = (fAltroCFG2 >> 5) & 0xF;
+  Double_t tSample;
+  switch (fq) {
+  case 0:
+    // 20 MHz
+    tSample = 2.0*kLHCTimeSample;
+    break;
+  case 1:
+    // 10 Mhz
+    tSample = 4.0*kLHCTimeSample;
+    break;
+  case 2:
+    // 5 MHz
+    tSample = 8.0*kLHCTimeSample;
+    break;
+  default:
+    AliWarning(Form("Invalid sampling frequency value %d !",
+                     fq));
+    tSample = 0.;
+    break;
+  }
+
+  return tSample;
+}
+
+//_____________________________________________________________________________
+Double_t AliAltroRawStream::GetL1Phase() const
+{
+  // Returns the L1 phase w.r.t to the
+  // LHC clock
+  if (!fRCUTrailerData) return 0.;
+
+  const Double_t kLHCTimeSample = 25.0e-9; // LHC clocks runs at 40 MHz
+  Double_t phase = ((Double_t)(fAltroCFG2 & 0x1F))*kLHCTimeSample;
+
+  Double_t tSample = GetTSample();
+  if (phase >= tSample) {
+    AliWarning(Form("Invalid L1 trigger phase (%f >= %d) !",
+                   phase,tSample));
+    phase = 0.;
+  }
+
+  return phase;
+}
+
+//_____________________________________________________________________________
 void AliAltroRawStream::PrintRCUTrailer() const
 {
   // Prints the contents of
@@ -633,8 +688,8 @@ void AliAltroRawStream::PrintRCUTrailer() const
   printf("Number of pretrigger samples: %d\n",GetNPretriggerSamples());
   printf("Number of samples per channel: %d\n",GetNSamplesPerCh());
   printf("Sparse readout: %d\n",GetSparseRO());
-  printf("Sampling frequency: 0x%x\n",GetSamplingFq());
-  printf("L1 Phase: 0x%x\n",GetL1Phase());
+  printf("Sampling time: %f s\n",GetTSample());
+  printf("L1 Phase: %f s\n",GetL1Phase());
   printf("===========\n");
 }
 
index 979cd5e..497017f 100644 (file)
@@ -57,6 +57,7 @@ class AliAltroRawStream: public TObject {
     UShort_t GetActiveFECsA() const { return fActiveFECsA; }
     UShort_t GetActiveFECsB() const { return fActiveFECsB; }
 
+    UInt_t  GetAltroCFG1() const { return fAltroCFG1; }
     UChar_t GetBaselineCorr() const { return fAltroCFG1 & 0xF; }
     UChar_t GetNPresamples() const  { return (fAltroCFG1 >> 4) & 0x3; }
     UChar_t GetNPostsamples() const { return (fAltroCFG1 >> 6) & 0xF; }
@@ -66,12 +67,13 @@ class AliAltroRawStream: public TObject {
     UChar_t GetNNonZSPresamples() const  { return (fAltroCFG1 >> 16) & 0x3; }
     Bool_t  GetZeroSupp() const          { return (fAltroCFG1 >> 18) & 0x1; }
     
+    UInt_t   GetAltroCFG2() const { return fAltroCFG2; }
     Bool_t   GetNAltroBuffers() const     { return (fAltroCFG2 >> 24) & 0x1; }
     UChar_t  GetNPretriggerSamples() const{ return (fAltroCFG2 >> 20) & 0xF; }
     UShort_t GetNSamplesPerCh() const     { return (fAltroCFG2 >> 10) & 0x3FF; }
     Bool_t   GetSparseRO() const          { return (fAltroCFG2 >> 9) & 0x1; }
-    UChar_t  GetSamplingFq() const        { return (fAltroCFG2 >> 5) & 0xF; }
-    UChar_t  GetL1Phase() const           { return fAltroCFG2 & 0x1F; }
+    Double_t GetTSample() const;
+    Double_t GetL1Phase() const;
     void     PrintRCUTrailer() const;
  
     void SelectRawData(Int_t detId);                           // Select raw data for specific detector id