Update rawdata format for trigger (Christian)
authormartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Jun 2006 09:41:11 +0000 (09:41 +0000)
committermartinez <martinez@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Jun 2006 09:41:11 +0000 (09:41 +0000)
MUON/AliMUONDarcHeader.cxx
MUON/AliMUONDarcHeader.h
MUON/AliMUONPayloadTrigger.cxx
MUON/AliMUONRawWriter.cxx
MUON/AliMUONRegHeader.cxx
MUON/AliMUONRegHeader.h

index 1c0e353..9820302 100644 (file)
@@ -33,8 +33,8 @@ ClassImp(AliMUONDarcHeader)
 
  const Int_t AliMUONDarcHeader::fgkDarcHeaderLength   =  1;
  const Int_t AliMUONDarcHeader::fgkGlobalHeaderLength =  5;
- const Int_t AliMUONDarcHeader::fgkDarcScalerLength   =  7;
- const Int_t AliMUONDarcHeader::fgkGlobalScalerLength = 10;
+ const Int_t AliMUONDarcHeader::fgkDarcScalerLength   =  8;
+ const Int_t AliMUONDarcHeader::fgkGlobalScalerLength =  10;
 
  const UInt_t AliMUONDarcHeader::fgkEndOfDarc   = 0xDEADFACE;
  const UInt_t AliMUONDarcHeader::fgkEndOfGlobal = 0xDEADBEEF;
@@ -56,7 +56,9 @@ AliMUONDarcHeader::AliMUONDarcHeader()
      fDarcL2A(0),
      fDarcL2R(0),
      fDarcClk(0),
-     fDarcHold(0)
+     fDarcHold(0),
+     fDarcSpare(0)     
+
 {
   //
   // ctor
@@ -84,13 +86,14 @@ AliMUONDarcHeader::AliMUONDarcHeader(const AliMUONDarcHeader& event)
   fGlobalHold   = event.fGlobalHold;   
   fGlobalSpare  = event.fGlobalSpare;
 
-  fDarcL0R  = event.fDarcL0R;
-  fDarcL1P  = event.fDarcL1P;
-  fDarcL1S  = event.fDarcL1S;
-  fDarcL2A  = event.fDarcL2A;
-  fDarcL2R  = event.fDarcL2R;
-  fDarcClk  = event.fDarcClk;
-  fDarcHold = event.fDarcHold;
+  fDarcL0R   = event.fDarcL0R;
+  fDarcL1P   = event.fDarcL1P;
+  fDarcL1S   = event.fDarcL1S;
+  fDarcL2A   = event.fDarcL2A;
+  fDarcL2R   = event.fDarcL2R;
+  fDarcClk   = event.fDarcClk;
+  fDarcHold  = event.fDarcHold;
+  fDarcSpare = event.fDarcSpare;
 
  
  for (Int_t i = 0; i < 4; i++)
@@ -121,13 +124,14 @@ AliMUONDarcHeader& AliMUONDarcHeader::operator=(const AliMUONDarcHeader& event)
   fGlobalHold   = event.fGlobalHold;   
   fGlobalSpare  = event.fGlobalSpare;
 
-  fDarcL0R  = event.fDarcL0R;
-  fDarcL1P  = event.fDarcL1P;
-  fDarcL1S  = event.fDarcL1S;
-  fDarcL2A  = event.fDarcL2A;
-  fDarcL2R  = event.fDarcL2R;
-  fDarcClk  = event.fDarcClk;
-  fDarcHold = event.fDarcHold;
+  fDarcL0R   = event.fDarcL0R;
+  fDarcL1P   = event.fDarcL1P;
+  fDarcL1S   = event.fDarcL1S;
+  fDarcL2A   = event.fDarcL2A;
+  fDarcL2R   = event.fDarcL2R;
+  fDarcClk   = event.fDarcClk;
+  fDarcHold  = event.fDarcHold;
+  fDarcSpare = event.fDarcSpare;
 
   for (Int_t i = 0; i < 4; i++)
     fGlobalInput[i] = event.fGlobalInput[i];
@@ -166,13 +170,14 @@ void AliMUONDarcHeader::SetScalersNumbers()
   fGlobalHold  = 100;    
   fGlobalSpare = 1;    
 
-  fDarcL0R  = 1000;
-  fDarcL1P  = 900;
-  fDarcL1S  = 800;
-  fDarcL2A  = 700;
-  fDarcL2R  = 700;
-  fDarcClk  = 10000;
-  fDarcHold = 100;
+  fDarcL0R   = 1000;
+  fDarcL1P   = 900;
+  fDarcL1S   = 800;
+  fDarcL2A   = 700;
+  fDarcL2R   = 700;
+  fDarcClk   = 10000;
+  fDarcHold  = 100;
+  fDarcSpare = 0;
 
    for (Int_t i = 0; i < 6; i++)
     fGlobalScaler[i] = i;
index c6134b6..a47a97a 100644 (file)
@@ -28,14 +28,21 @@ public:
 
    UInt_t  GetWord()               const {return fWord;}
    Int_t   GetGlobalInput(Int_t n) const {return fGlobalInput[n];}
-   Int_t   GetGlobalOutput()       const {return fGlobalOutput;}
-
-   //DarcId:4,SerialNb:4,Version:8,EventType:4,GlobalFlag:4,MBZ:8;
-   Char_t  GetDarcId()     const {return (Char_t)(fWord >> 28) &  0xF;}
-   Char_t  GetSerialNb()   const {return (Char_t)(fWord >> 24) &  0xF;}
-   Char_t  GetVersion()    const {return (Char_t)(fWord >> 16) &  0xFF;}
-   Char_t  GetEventType()  const {return (Char_t)(fWord >> 12) &  0xF;}
-   Char_t  GetGlobalFlag() const {return (Char_t)(fWord >>  8) &  0xF;}
+   Int_t   GetGlobalOutput()       const {return (fGlobalOutput & 0xFFFF);}
+   Int_t   GetGlobalConfig()       const {return ((fGlobalOutput >> 16) & 0xFFFF);}
+
+   //MBZ:1, phys trig:1, type:3, ,SerialNb:4,Version:8,VME trig:1, 
+   //GlobalFlag:1, CTP trig:1, DAQ:1, Reg pattern:8;
+
+   Bool_t  GetEventType()  const {return (fWord &  0x40000000);}
+   Char_t  GetDarcType()   const {return (Char_t)(fWord >> 27) &  0x7;}
+   Char_t  GetSerialNb()   const {return (Char_t)(fWord >> 23) &  0xF;}
+   Char_t  GetVersion()    const {return (Char_t)(fWord >> 15) &  0xFF;}
+   Bool_t  GetVMETrig()    const {return (fWord &  0x800);}
+   Bool_t  GetGlobalFlag() const {return (fWord &  0x400);}
+   Bool_t  GetCTPTrig()    const {return (fWord &  0x200);}
+   Bool_t  GetDAQFlag()    const {return (fWord &  0x100);}
+   Char_t  GetRegPattern() const {return (Char_t)(fWord &  0xFF);}
 
    void    SetWord(UInt_t w) {fWord = w;}
    void    SetGlobalInput(Int_t in, Int_t n) {fGlobalInput[n] = in;}
@@ -108,13 +115,15 @@ public:
    static const Int_t      fgkGlobalScalerLength;  ///< length of global scaler in word
 
    // DARC Scalers
-   UInt_t     fDarcL0R;       ///< DARC L0 received
+   UInt_t     fDarcL0R;       ///< DARC L0 received and used
    UInt_t     fDarcL1P;       ///< DARC L1 physics
    UInt_t     fDarcL1S;       ///< DARC L1 software
    UInt_t     fDarcL2A;       ///< DARC L2 accept
    UInt_t     fDarcL2R;       ///< DARC L2 reject
    UInt_t     fDarcClk;       ///< DARC clock
    UInt_t     fDarcHold;      ///< DARC hold (dead time)
+   UInt_t     fDarcSpare;     ///< DARC Empty slot (for the moment)
+
    static const Int_t      fgkDarcScalerLength;  ///< length of DARC scaler in word
 
    static const UInt_t     fgkEndOfDarc;         ///< end of darc info word
index e40ec1e..2794b20 100644 (file)
@@ -107,7 +107,7 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
   memcpy(darcHeader->GetHeader(), &buffer[index], (kDarcHeaderSize)*4); 
   index += kDarcHeaderSize;
 
-  if(darcHeader->GetEventType() == 2) {
+  if(darcHeader->GetEventType() == 0) {
     scalerEvent = kTRUE;
   } else
     scalerEvent = kFALSE;
index 43faf63..85fd000 100644 (file)
@@ -690,12 +690,31 @@ Int_t AliMUONRawWriter::WriteTriggerDDL()
   Char_t locDec, trigY, posY, posX,regOut;
   Int_t devX;
   Int_t version = 1; // software version
-  Int_t eventType = 1; // trigger type: 1 for physics ?
+  Int_t eventPhys = 1; // trigger type: 1 for physics, 0 for software
   Int_t serialNb = 0xF; // serial nb of card: all bits on for the moment
-  Int_t globalFlag = 1; // set to 2 if global info present in DDL else set to 1
-
+  Int_t globalFlag = 0; // set to 1 if global info present in DDL else set to 0
+
+  // size of headers
+  static const Int_t kDarcHeaderLength   = fDarcHeader->GetDarcHeaderLength();
+  static const Int_t kGlobalHeaderLength = fDarcHeader->GetGlobalHeaderLength();
+  static const Int_t kDarcScalerLength   = fDarcHeader->GetDarcScalerLength();
+  static const Int_t kGlobalScalerLength = fDarcHeader->GetGlobalScalerLength();
+  static const Int_t kRegHeaderLength    = fRegHeader->GetHeaderLength();
+  static const Int_t kRegScalerLength    = fRegHeader->GetScalerLength();
+  static const Int_t kLocHeaderLength    = fLocalStruct->GetLength();
+  static const Int_t kLocScalerLength    = fLocalStruct->GetScalerLength();
+
+  // [16(local)*6 words + 6 words]*8(reg) + 8 words = 824 
+  static const Int_t kBufferSize = (16 * (kLocHeaderLength+1) +  (kRegHeaderLength+1))* 8 
+      +  kDarcHeaderLength + kGlobalHeaderLength + 2;
+
+  // [16(local)*51 words + 16 words]*8(reg) + 8 + 10 + 8 words scaler event 6682 words
+  static const Int_t kScalerBufferSize = (16 * (kLocHeaderLength +  kLocScalerLength +1) +  
+                                        (kRegHeaderLength + kRegScalerLength +1))* 8 +
+                                         (kDarcHeaderLength + kDarcScalerLength + 
+                                         kGlobalHeaderLength + kGlobalScalerLength + 2);
   if(fScalerEvent)
-    eventType = 2; //set to generate scaler events
+    eventPhys = 0; //set to generate scaler events
 
   Int_t nEntries = (Int_t) (localTrigger->GetEntries());// 234 local cards
   // stored the local card id that's fired
@@ -708,11 +727,9 @@ Int_t AliMUONRawWriter::WriteTriggerDDL()
     AliInfo("No Trigger information available");
 
   if(fScalerEvent)
-    // [16(local)*51 words + 16 words]*8(reg) + 6 + 12 + 6 words scaler event 6672 words
-    buffer = new Int_t [6680];
+    buffer = new Int_t [kScalerBufferSize];
   else
-    // [16(local)*6 words + 5 words]*8(reg) + 10 words = 818 
-    buffer = new Int_t [818];
+    buffer = new Int_t [kBufferSize];
 
 
   // open DDL file, on per 1/2 chamber
@@ -720,22 +737,21 @@ Int_t AliMUONRawWriter::WriteTriggerDDL()
     
     index = 0; 
 
-    word = 0;
-    // set darc status word
-    AliBitPacking::PackWord((UInt_t)iDDL+1,word,28,31); //see AliMUONDDLTrigger.h for details
-    AliBitPacking::PackWord((UInt_t)serialNb,word,24,27);
-    AliBitPacking::PackWord((UInt_t)version,word,16,23);
-    AliBitPacking::PackWord((UInt_t)eventType,word,12,15);
-
     if (iDDL == 0) // suppose global info in DDL one
-      globalFlag = 2;
-    else 
       globalFlag = 1;
+    else 
+      globalFlag = 0;
 
-    AliBitPacking::PackWord((UInt_t)globalFlag,word,8,11);
+    word = 0;
+    // set darc status word
+    // see AliMUONDarcHeader.h for details
+    AliBitPacking::PackWord((UInt_t)eventPhys,word,30,30);
+    AliBitPacking::PackWord((UInt_t)serialNb,word,20,23);
+    AliBitPacking::PackWord((UInt_t)globalFlag,word,10,10);
+    AliBitPacking::PackWord((UInt_t)version,word,12,19);
     fDarcHeader->SetWord(word);
 
-    memcpy(&buffer[index], fDarcHeader->GetHeader(), (fDarcHeader->GetDarcHeaderLength())*4); 
+    memcpy(&buffer[index], fDarcHeader->GetHeader(), (kDarcHeaderLength)*4); 
     index += fDarcHeader->GetDarcHeaderLength();
 
     if (iDDL == 0)
@@ -745,19 +761,19 @@ Int_t AliMUONRawWriter::WriteTriggerDDL()
 
     if (fScalerEvent) {
       // 6 DARC scaler words
-      memcpy(&buffer[index], fDarcHeader->GetDarcScalers(),fDarcHeader->GetDarcScalerLength()*4);
+      memcpy(&buffer[index], fDarcHeader->GetDarcScalers(),kDarcScalerLength*4);
       index += fDarcHeader->GetDarcScalerLength();
     }
     // end of darc word
     buffer[index++] = fDarcHeader->GetEndOfDarc();
 
     // 4 words of global board input + Global board output
-    memcpy(&buffer[index], fDarcHeader->GetGlobalInput(), (fDarcHeader->GetGlobalHeaderLength())*4); 
+    memcpy(&buffer[index], fDarcHeader->GetGlobalInput(), (kGlobalHeaderLength)*4); 
     index += fDarcHeader->GetGlobalHeaderLength(); 
 
     if (fScalerEvent) {
       // 10 Global scaler words
-      memcpy(fDarcHeader->GetGlobalScalers(), &buffer[index], fDarcHeader->GetGlobalScalerLength()*4);
+      memcpy(fDarcHeader->GetGlobalScalers(), &buffer[index], kGlobalScalerLength*4);
       index += fDarcHeader->GetGlobalScalerLength();
     }
 
@@ -774,12 +790,15 @@ Int_t AliMUONRawWriter::WriteTriggerDDL()
       fRegHeader->SetDarcWord(word);
 
       regOut  = 0;
-      AliBitPacking::PackWord((UInt_t)serialNb,word,24,28); //see  AliMUONLocalStruct.h for details
+      // fill darc word, not darc status for the moment (empty)
+      //see  AliMUONRegHeader.h for details
+      AliBitPacking::PackWord((UInt_t)eventPhys,word,31,31); 
+      AliBitPacking::PackWord((UInt_t)serialNb,word,19,24); 
       AliBitPacking::PackWord((UInt_t)version,word,16,23);
-      AliBitPacking::PackWord((UInt_t)iReg,word,12,15);
+      AliBitPacking::PackWord((UInt_t)iReg,word,15,18);
       AliBitPacking::PackWord((UInt_t)regOut,word,0,7); // whenever regional output will be implemented
-
       fRegHeader->SetWord(word);
+
       memcpy(&buffer[index],fRegHeader->GetHeader(),fRegHeader->GetHeaderLength()*4);
       index += fRegHeader->GetHeaderLength();
 
index cd9a022..0729621 100644 (file)
@@ -29,8 +29,8 @@
 ClassImp(AliMUONRegHeader)
 /// \endcond
  
- const Int_t  AliMUONRegHeader::fgkHeaderLength = 4;
- const Int_t  AliMUONRegHeader::fgkScalerLength = 8;
+ const Int_t  AliMUONRegHeader::fgkHeaderLength = 5;
+ const Int_t  AliMUONRegHeader::fgkScalerLength = 10;
  const UInt_t AliMUONRegHeader::fgkEndOfReg     = 0xBEEFFACE;
 
 //___________________________________________
@@ -38,7 +38,7 @@ AliMUONRegHeader::AliMUONRegHeader()
   :  TObject(),
      fDarcWord(0),
      fWord(0),
-     fL0(0), 
+     fL0Mask(0),
      fClk(0),
      fHold(0)
 
@@ -74,9 +74,9 @@ AliMUONRegHeader::AliMUONRegHeader(const AliMUONRegHeader& event)
   //
   fDarcWord = event.fDarcWord;
   fWord     = event.fWord;
-  fL0       = event.fL0;
   fClk      = event.fClk;
   fHold     = event.fHold;
+  fL0Mask   = event.fL0Mask;
 
   fInput[0] = event.fInput[0];
   fInput[1] = event.fInput[1];
@@ -102,9 +102,9 @@ AliMUONRegHeader& AliMUONRegHeader::operator=(const AliMUONRegHeader& event)
 
   fDarcWord = event.fDarcWord;
   fWord     = event.fWord;
-  fL0       = event.fL0;
   fClk      = event.fClk;
   fHold     = event.fHold;
+  fL0Mask   = event.fL0Mask;
 
   fInput[0] = event.fInput[0];
   fInput[1] = event.fInput[1];
@@ -128,7 +128,6 @@ void AliMUONRegHeader::SetScalersNumbers()
   // since this is provided by the experiment
   // put dummy numbers to check the monitoring
   
-  fL0   = 1000;
   fClk  = 10000;
   fHold = 100; 
   
index a1be6d6..de64079 100644 (file)
@@ -28,13 +28,16 @@ public:
    UInt_t  GetDarcWord()      const {return fDarcWord;}
    UInt_t  GetWord()          const {return fWord;}
    UInt_t  GetInput(Int_t n)  const {return fInput[n];}
+   UInt_t  GetL0()            const {return ((fL0Mask >> 16) & 0xFFFF);}
+   UInt_t  GetMask()          const {return (fL0Mask & 0xFFFF);}
 
-   //word: phys type:1, MBZ: 6, serialNb:5, Id:4, version: 8, regional output:8
+   //word: phys type:1, reset: 6, serialNb:5, Id:4, version: 8, regional output:8
    //true for phys, false for soft
    Bool_t   GetRegPhysFlag() const {return (fWord & 0x80000000);} 
-   Char_t   GetSerialNb()    const {return (Char_t)(fWord >> 25) &  0x1F;}
-   Char_t   GetId()          const {return (Char_t)(fWord >> 12) &  0x0F;}
-   Char_t   GetVersion()     const {return (Char_t)(fWord >> 16) &  0xFF;}
+   Char_t   GetResetNb()     const {return (Char_t)(fWord >> 25) &  0x20;}
+   Char_t   GetSerialNb()    const {return (Char_t)(fWord >> 20) &  0x1F;}
+   Char_t   GetId()          const {return (Char_t)(fWord >> 16) &  0x0F;}
+   Char_t   GetVersion()     const {return (Char_t)(fWord >> 8)  &  0xFF;}
    Char_t   GetOutput()      const {return (Char_t)(fWord)       &  0xFF;}
 
    //Darc Status: error:10, #fpag:3, MBZ:3, phys type:1, present:1, not_full:1
@@ -63,12 +66,11 @@ public:
    UInt_t* GetHeader() {return &fDarcWord;}
 
   // scalar methods
-   UInt_t  GetL0()      const {return fL0;}
    UInt_t  GetClock()   const {return fClk;}
    const UInt_t* GetScaler()  const {return fScaler;}
    UInt_t  GetHold()    const {return fHold;}
 
-   UInt_t* GetScalers()    {return &fL0;}   
+   UInt_t* GetScalers()    {return &fClk;}   
 
    // get scaler length
    Int_t GetScalerLength()  const {return fgkScalerLength;} 
@@ -95,9 +97,9 @@ public:
    UInt_t    fDarcWord;      ///< darc word
    UInt_t    fWord;          ///< first reg word
    UInt_t    fInput[2];      ///< regional input
+   UInt_t    fL0Mask;        ///< L0 counter (16 bits) and local mask (16 bits)
 
    // regional card scalers   
-   UInt_t     fL0;         ///< regional L0
    UInt_t     fClk;        ///< regional clock
    UInt_t     fScaler[8];  ///< regional ouput
    UInt_t     fHold;       ///< regional hold (dead time)