Taken the scaler trigger informations from CDH
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Mar 2008 10:09:05 +0000 (10:09 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 Mar 2008 10:09:05 +0000 (10:09 +0000)
(Christian)

MUON/AliMUONPayloadTrigger.cxx
MUON/AliMUONPayloadTrigger.h
MUON/AliMUONRawStreamTrigger.cxx
MUON/AliMUONRawWriter.cxx

index ba67338..89f125f 100644 (file)
@@ -76,7 +76,7 @@ AliMUONPayloadTrigger::~AliMUONPayloadTrigger()
 
 
 //______________________________________________________
-Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
+Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer, Bool_t scalerEvent)
 {
   /// decode trigger DDL
   /// store only notified cards
@@ -88,47 +88,24 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
   static Int_t kGlobalHeaderSize = darcHeader->GetGlobalHeaderLength(); 
   static Int_t kDarcHeaderSize   = darcHeader->GetDarcHeaderLength(); 
   static Int_t kRegHeaderSize    = fRegHeader->GetHeaderLength();
-
-  Bool_t scalerEvent = kFALSE;
   
   Int_t index = 0;
 
   memcpy(darcHeader->GetHeader(), &buffer[index], (kDarcHeaderSize)*4); 
   index += kDarcHeaderSize;
 
-//   if (!fNofRegSet) // if regional board number not set, set it with darc type
-//   { 
-    // darc type vardorh
-    if (darcHeader->GetDarcType() == 4)
+
+  // darc type vardorh
+  if (darcHeader->GetDarcType() == 4)
       fMaxReg = 1;
     
-    // darc type def.
-    if (darcHeader->GetDarcType() == 6)
+  // darc type def.
+  if (darcHeader->GetDarcType() == 6)
       fMaxReg = 8;
       
-    if(darcHeader->GetEventType() == 0) {
-      scalerEvent = kTRUE;
-    } else
-      scalerEvent = kFALSE;
-//   }
-
-// overwrite the event type in case
-// the raw-data contents contradicts with the
-// the header
-    if(scalerEvent &&
-       (buffer[index] == darcHeader->GetEndOfDarc()) &&
-       (buffer[index+darcHeader->GetDarcScalerLength()] != darcHeader->GetEndOfDarc())) {
-      // obviously not a scaler event
-      scalerEvent = kFALSE;
-      AliWarning("Overriding the event type obtained from the Darc header to physics event!");
-    }
-    if(!scalerEvent &&
-       (buffer[index] != darcHeader->GetEndOfDarc()) &&
-       (buffer[index+darcHeader->GetDarcScalerLength()] == darcHeader->GetEndOfDarc())) {
-      // obviously a scaler event
-      scalerEvent = kTRUE;
-      AliWarning("Overriding the event type obtained from the Darc header to software trigger event!");
-    }
+  if(darcHeader->GetEventType() == scalerEvent) 
+      if (fWarnings) AliWarning("Wrong event type obtained from the Darc header, take the one of CDH");
+
 
   if(scalerEvent) {
     // 6 DARC scaler words
index f6565f0..082b727 100644 (file)
@@ -24,7 +24,7 @@ class AliMUONPayloadTrigger: public TObject {
     AliMUONPayloadTrigger();
     virtual ~AliMUONPayloadTrigger();
 
-    Bool_t Decode(UInt_t *buffer);
+    Bool_t Decode(UInt_t *buffer, Bool_t scalerEvent = kFALSE);
     void   ResetDDL();
 
     /// Return maximum number of regional cards in DATE file
index 5582295..dc7e890 100644 (file)
@@ -184,6 +184,7 @@ Bool_t AliMUONRawStreamTrigger::GetNextDDL()
   /// Returns the next DDL present
   
   assert( GetReader() != 0 );
+
   
   Bool_t kFound(kFALSE);
   
@@ -212,11 +213,13 @@ Bool_t AliMUONRawStreamTrigger::GetNextDDL()
   
   Int_t totalDataWord  = GetReader()->GetDataSize(); // in bytes
   
+  Bool_t scalerEvent =  GetReader()->GetDataHeader()->GetL1TriggerMessage() & 0x1;
+
   AliDebug(3, Form("DDL Number %d totalDataWord %d\n", fCurrentDDLIndex,
                    totalDataWord));
 
   UInt_t *buffer = new UInt_t[totalDataWord/4];
-  
+
   if ( !GetReader()->ReadNext((UChar_t*)buffer, totalDataWord) )
   {
     // We have not actually been able to complete the loading of the new DDL so
@@ -232,7 +235,9 @@ Bool_t AliMUONRawStreamTrigger::GetNextDDL()
 
   fPayload->ResetDDL();
   
-  Bool_t ok = fPayload->Decode(buffer);
+
+
+  Bool_t ok = fPayload->Decode(buffer, scalerEvent);
 
   delete[] buffer;
   
@@ -353,6 +358,9 @@ Bool_t AliMUONRawStreamTrigger::NextDDL()
 
   Int_t totalDataWord = GetReader()->GetDataSize(); // in bytes
 
+  Bool_t scalerEvent =  GetReader()->GetDataHeader()->GetL1TriggerMessage() & 0x1;
+
+
   UInt_t *buffer = new UInt_t[totalDataWord/4];
 
   // check not necessary yet, but for future developments
@@ -362,7 +370,7 @@ Bool_t AliMUONRawStreamTrigger::NextDDL()
   Swap(buffer, totalDataWord / sizeof(UInt_t)); // swap needed for mac power pc
 #endif
 
-  fPayload->Decode(buffer);
+  fPayload->Decode(buffer, scalerEvent);
 
 
   fDDL++;
index d22dab4..e249ef3 100644 (file)
@@ -491,9 +491,10 @@ Int_t AliMUONRawWriter::WriteTriggerDDL(const AliMUONVTriggerStore& triggerStore
                                         (kRegHeaderLength + kRegScalerLength +1))* 8 +
                                          (kDarcHeaderLength + kDarcScalerLength + 
                                          kGlobalHeaderLength + kGlobalScalerLength + 2);
-  if(fScalerEvent)
+  if(fScalerEvent) {
     eventPhys = 0; //set to generate scaler events
-
+    fHeader->fWord2 |= 0x1; // set L1SwC bit on
+  }
   if(fScalerEvent)
     buffer = new Int_t [kScalerBufferSize];
   else