]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONReCalcGlobalTrigger.C
fix warning
[u/mrichter/AliRoot.git] / MUON / MUONReCalcGlobalTrigger.C
index af37ecdae47e87aa19602d137f6de346f70541af..65642d50658c3b297d9761a9d15a905be70f97ec 100644 (file)
 #include "AliMUONLocalTrigger.h"
 #include "AliMUONVTriggerStore.h"
 #include "AliMUONTriggerCrate.h"
+#include "AliMUONTriggerCrateConfig.h"
+#include "AliMUONGlobalCrateConfig.h"
 #include "AliMUONRegionalTriggerBoard.h"
+#include "AliMUONRegionalTriggerConfig.h"
 #include "AliMUONLocalTriggerBoard.h"
 #include "AliMUONVCalibParam.h"
 #include "AliMUONTriggerBoard.h"
 
 #include <TArrayS.h>
-#include <TIterator.h>
 #include <TObjArray.h>
 #include <TMath.h>
 
@@ -43,6 +45,10 @@ UShort_t locResp[235];
 AliMUONCalibrationData *calibData;
 AliMUONTriggerCrateStore *fCrates;
 AliMUONGlobalTriggerBoard *fGlobalTriggerBoard;
+AliMUONRegionalTriggerConfig* regionalConfig;
+AliMUONGlobalCrateConfig * globalConfig;
+
+TIterator *cratesIterator;
 
 Int_t debug;
 
@@ -74,7 +80,7 @@ void PrintGloBin(UShort_t s) {
 }
 
 //___________________________________________________________________________
-Bool_t ReCalcGlobalTrigger() {
+Bool_t ReCalcGlobalTrigger(TIter *nextCrates) {
   /// re-calculate regional/global decision from array of local triggers
 
   Int_t loLpt, loHpt;
@@ -82,11 +88,11 @@ Bool_t ReCalcGlobalTrigger() {
 
   // regional response
   
-  fCrates->FirstCrate();
+  nextCrates->Reset();
   
   Int_t irb(0);
   
-  while ( ( cr = fCrates->NextCrate() ) ) {
+  while ( ( cr = static_cast<AliMUONTriggerCrate*>(nextCrates->Next()) ) ) {
     
     if (debug) printf("Crate nr = %2d \n",++irb);
     
@@ -126,8 +132,8 @@ Bool_t ReCalcGlobalTrigger() {
       
     }  // local board loop
     
-    AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(irb);
-    UShort_t rmask = static_cast<UShort_t>(regionalBoardMasks->ValueAsInt(0) & 0xFFFF);
+    AliMUONTriggerCrateConfig* crateConfig = regionalConfig->FindTriggerCrate(cr->GetName());
+    UShort_t rmask= crateConfig->GetMask();
     regb->Mask(rmask);
     regb->SetLocalResponse(regLocResp);
     regb->Response();
@@ -142,13 +148,17 @@ Bool_t ReCalcGlobalTrigger() {
   
   fGlobalTriggerBoard->Reset();
   
-  AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks();
-  for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i ) {
-    UShort_t gmask = static_cast<UShort_t>(globalBoardMasks->ValueAsInt(i) & 0xFF);
+  if (!globalConfig)
+    printf("No valid trigger crate configuration in CDB\n");
+
+  UInt_t gmask = 0;
+
+  for (Int_t i = 0; i < 4; i++) {
+    gmask = globalConfig->GetGlobalMask(i);
     fGlobalTriggerBoard->Mask(i,gmask);
   }
-  
-  fCrates->FirstCrate();
+
+  nextCrates->Reset();
   
   UShort_t regional[16];
   irb = 0;
@@ -158,11 +168,17 @@ Bool_t ReCalcGlobalTrigger() {
     return kFALSE;
   }
   
-  while ( ( cr = fCrates->NextCrate() ) ) {
-    AliMUONTriggerBoard* rb =
-      static_cast<AliMUONTriggerBoard*>(cr->Boards()->At(0));
-    regional[irb] = rb->GetResponse();
-    ++irb;
+  for (Int_t iSide = 0; iSide < 2; iSide++) // right & left side
+  {
+    for (Int_t iReg = 0; iReg < 8; iReg++) // 8 crates/regional boards for each side.
+    {
+      cr = fCrates->Crate(iSide, iReg);
+
+      AliMUONTriggerBoard* rb =
+        static_cast<AliMUONTriggerBoard*>(cr->Boards()->At(0));
+      regional[irb] = rb->GetResponse();
+      ++irb;
+    }
   }
   
   fGlobalTriggerBoard->SetRegionalResponse(regional);
@@ -189,15 +205,21 @@ void MUONReCalcGlobalTrigger(const char* input) {
   Int_t runNumber = 0;
 
   AliCDBManager* man = AliCDBManager::Instance();
-  man->SetDefaultStorage("local://$ALICE_ROOT");
+  man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
   man->SetRun(runNumber);
   AliMpCDB::LoadDDLStore();
 
   calibData = new AliMUONCalibrationData(runNumber);
 
+  regionalConfig = calibData->RegionalTriggerConfig();
+  globalConfig = calibData->GlobalTriggerCrateConfig();
+
   fCrates = new AliMUONTriggerCrateStore;
-  fCrates->ReadFromFile();
+  fCrates->ReadFromFile(calibData);
+  cratesIterator = fCrates->CreateCrateIterator();
   fGlobalTriggerBoard = new AliMUONGlobalTriggerBoard;
+  
+  TIter nextCrates(cratesIterator);
 
   AliMUONDataInterface diRec(input);
 
@@ -209,7 +231,6 @@ void MUONReCalcGlobalTrigger(const char* input) {
   TArrayS xPattern[235];
   TArrayS yPattern[235];
 
-  nEvents = 100;
   for (Int_t ievent = 0; ievent < nEvents; ++ievent) {
 
     for (Int_t i = 0; i < 234; i++) {
@@ -218,7 +239,10 @@ void MUONReCalcGlobalTrigger(const char* input) {
 
     AliMUONVTriggerStore* triggerStore = diRec.TriggerStore(ievent,"R");
     TIter nextLocal(triggerStore->CreateLocalIterator());
-    while ( (localTrig = static_cast<AliMUONLocalTrigger*>( nextLocal() )) != NULL ) {
+    while ( (localTrig = static_cast<AliMUONLocalTrigger*>( nextLocal() )) ) {
+
+      if (localTrig->IsNull()) continue;
+
       circ = localTrig->LoCircuit();
       
       loLpt = localTrig->LoLpt();
@@ -243,7 +267,7 @@ void MUONReCalcGlobalTrigger(const char* input) {
       
     } // local trigger loop
 
-    if (ReCalcGlobalTrigger()) {
+    if (ReCalcGlobalTrigger(&nextCrates)) {
       printf("............ for event %5d \n",ievent);
       for (Int_t ic = 1; ic <= 234; ic++) {
        if (locResp[ic] != 0) {
@@ -270,5 +294,9 @@ void MUONReCalcGlobalTrigger(const char* input) {
     
   } // event loop
 
+  delete fGlobalTriggerBoard;
+  delete fCrates;
+  delete calibData;
+
 }