]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTriggerConfiguration.cxx
Fix in composition of QAChecked output image file (Melinda S.)
[u/mrichter/AliRoot.git] / STEER / AliTriggerConfiguration.cxx
index 1658b89941bf88f10f13cfba25d8d4fecb744b10..940bc145add98f233f86afc99fe2548d63388b1a 100755 (executable)
 //
 ///////////////////////////////////////////////////////////////////////////////
 #include <Riostream.h>
-//#include <cstdlib>
 
+#include <TCint.h>
+#include <TFile.h>
+#include <TKey.h>
+#include <TObjArray.h>
+#include <TObjString.h>
 #include <TObject.h>
+#include <TROOT.h>
 #include <TString.h>
-#include <TObjString.h>
-#include <TObjArray.h>
 #include <TSystem.h>
-#include <TKey.h>
-#include <TFile.h>
+#include <TMath.h>
 
 #include "AliLog.h"
-#include "AliRun.h"
-#include "AliRunLoader.h"
-#include "AliModule.h"
-
-#include "AliTriggerInput.h"
-//#include "AliTriggerDetector.h"
-#include "AliTriggerInteraction.h"
 #include "AliTriggerBCMask.h"
-#include "AliTriggerCluster.h"
-#include "AliTriggerPFProtection.h"
-#include "AliTriggerDescriptor.h"
 #include "AliTriggerClass.h"
+#include "AliTriggerCluster.h"
 #include "AliTriggerConfiguration.h"
+#include "AliTriggerDescriptor.h"
+#include "AliTriggerInput.h"
+#include "AliTriggerInteraction.h"
+#include "AliTriggerPFProtection.h"
 
 ClassImp(AliTriggerConfiguration)
 
@@ -151,7 +148,7 @@ Bool_t AliTriggerConfiguration::AddInput( AliTriggerInput* input )
     return kTRUE;
   }
   else {
-    AliError("CTP can handle up to 50 inputs ! Impossible to add the required input !");
+    AliError("CTP can handle up to 60 inputs ! Impossible to add the required input !");
     return kFALSE;
   }
 }
@@ -276,7 +273,7 @@ Bool_t AliTriggerConfiguration::AddMask( AliTriggerBCMask* mask )
 {
   // Add a trigger bunch-crossing mask object to
   // the list of the trigger bunch-crossing masks
-  if (fMasks.GetEntries() < kNMaxMasks) {
+  if (fMasks.GetEntries() < (kNMaxMasks+1)) {  //+1 to account for NONE
       fMasks.AddLast( mask );
       return kTRUE;
   }
@@ -584,6 +581,7 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
        // Read logical functions and descriptors
        if (ntokens < 2) {
         if ((((TObjString*)tokens->At(0))->String().CompareTo("EMPTY") == 0) ||
+            (((TObjString*)tokens->At(0))->String().CompareTo("DTRUE") == 0) ||
             (((TObjString*)tokens->At(0))->String().CompareTo("DEMPTY") == 0)) {
           AddDescriptor(((TObjString*)tokens->At(0))->String(),
                         strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),""));
@@ -610,6 +608,10 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
            AliError(Form("Invalid trigger cluster syntax (%s)!",strLine.Data()));
            return kFALSE;
          }
+        if (((TObjString*)tokens->At(1))->String().Atoi() <= 0) {
+           AliError(Form("Invalid trigger cluster syntax (%s)!",strLine.Data()));
+           return kFALSE;
+         }
         TString strTemp;
         for(Int_t i = 2; i < ntokens; i++) {
           strTemp += ((TObjString*)tokens->At(i))->String();
@@ -652,7 +654,9 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
           return kFALSE;
          }
        if (((TObjString*)tokens->At(0))->String().CompareTo("NONE") == 0)
-        AddMask(new AliTriggerBCMask(((TObjString*)tokens->At(0))->String()));
+       {        
+         AddMask(new AliTriggerBCMask(((TObjString*)tokens->At(0))->String()));
+       }
        else {
         AddMask(((TObjString*)tokens->At(0))->String(),
                      ((TObjString*)tokens->At(1))->String());
@@ -660,7 +664,7 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
        break;
      case 7:
        {
-         if (ntokens != 8) {
+         if ((ntokens < 8) || (ntokens >10)) {
           AliError(Form("Invalid trigger class syntax (%s)!",strLine.Data()));
           return kFALSE;
          }
@@ -835,91 +839,41 @@ void AliTriggerConfiguration::WriteConfiguration( const char* filename )
 }
 
 //_____________________________________________________________________________
-Bool_t AliTriggerConfiguration::CheckConfiguration( TString& configfile )
+Int_t AliTriggerConfiguration::GetClassIndexFromName(const char* className) const
 {
-   // To be used on the pre-creation of Configurations to check if the
-   // conditions have valid inputs names.
-   //
-   // Initiate detectors modules from a Config file
-   // Ask to each active module present in the fDetectorCluster
-   // to create a Trigger detector and retrive the inputs from it
-   // to create a list of inputs.
-   // Each condition in the configuration is then checked agains 
-   // the list of inputs
-
-
-   if (!gAlice) {
-      AliError( "no gAlice object. Restart aliroot and try again." );
-      return kFALSE;
-   }
-   if (gAlice->Modules()->GetEntries() > 0) {
-      AliError( "gAlice was already run. Restart aliroot and try again." );
-      return kFALSE;
-   }
-
-   AliInfo( Form( "initializing gAlice with config file %s",
-            configfile.Data() ) );
-   StdoutToAliInfo( StderrToAliError(
-      gAlice->Init( configfile.Data() );
-   ););
-
-   AliRunLoader* runLoader = gAlice->GetRunLoader();
-   if( !runLoader ) {
-      AliError( Form( "gAlice has no run loader object. "
-                      "Check your config file: %s", configfile.Data() ) );
-      return kFALSE;
+   //const TObjArray& classes = cfg->GetClasses();
+   Int_t nclasses = (Int_t)fClasses.GetEntriesFast();
+   for (Int_t i=0;i<nclasses;i++) {
+       AliTriggerClass* trgclass = (AliTriggerClass*)fClasses.At(i);
+       if (TString(trgclass->GetName()).CompareTo(className) == 0) { 
+          ULong64_t classmask = (ULong64_t)trgclass->GetMask();
+          return TMath::Nint(TMath::Log2(classmask))+1;
+       }
    }
-
-   // get the possible inputs to check the condition
-   TObjArray inputs;
-   TObjArray* detArray = runLoader->GetAliRun()->Detectors();
-
-   TString detStr = GetTriggeringModules();
-
-   for( Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++ ) {
-      AliModule* det = (AliModule*) detArray->At(iDet);
-      if( !det || !det->IsActive() ) continue;
-      if( IsSelected( det->GetName(), detStr ) ) {
-         AliInfo( Form( "Creating inputs for %s", det->GetName() ) );
-         AliTriggerDetector* dtrg = det->CreateTriggerDetector();
-         dtrg->CreateInputs(GetInputs());
-         TObjArray* detInp = dtrg->GetInputs();
-         for( Int_t i=0; i<detInp->GetEntriesFast(); i++ ) {
-            AliInfo( Form( "Adding input %s", ((AliTriggerInput*)detInp->At(i))->GetName() ) );
-            inputs.AddLast( detInp->At(i) );
-         }
-      }
+   return -1;
+}
+//_____________________________________________________________________________
+const char* AliTriggerConfiguration::GetClassNameFromIndex(Int_t classIndex) const
+{
+   Int_t nclasses = (Int_t)fClasses.GetEntriesFast();
+   for (Int_t i=0;i<nclasses;i++) {
+       AliTriggerClass* trgclass = (AliTriggerClass*)fClasses.At(i);
+       ULong64_t classmask = (ULong64_t)trgclass->GetMask();
+       if (TMath::Nint(TMath::Log2(classmask))+1 == classIndex) return trgclass->GetName();
    }
-
-   // check if the condition is compatible with the triggers inputs
-   Int_t ndesc = fClasses.GetEntriesFast();
-   Bool_t check = kTRUE;
-   ULong64_t mask = 0L;
-   for( Int_t j=0; j<ndesc; j++ ) {
-     AliTriggerClass *trclass = (AliTriggerClass*)fClasses.At( j );
-     if( !(trclass->CheckClass( this )) ) check = kFALSE;
-     else {
-       if (trclass->IsActive(this->GetInputs(),this->GetFunctions())) {
-        AliInfo( Form( "Trigger Class (%s) OK, class mask (0x%Lx)",
-                       trclass->GetName(), trclass->GetMask( ) ) );
-       }
-       else {
-        AliWarning( Form( "Trigger Class (%s) is NOT active, class mask (0x%Lx)",
-                          trclass->GetName(), trclass->GetMask( ) ) );
-       }
-     }
-     // check if condition mask is duplicated
-     if( mask & trclass->GetMask() ) {
-       AliError( Form("Class (%s). The class mask (0x%Lx) is ambiguous. It was already defined",
-                     trclass->GetName(), trclass->GetMask()  ) );
-       check = kFALSE;
-     }
-     mask |= trclass->GetMask();
+   return 0;
+}
+//_____________________________________________________________________________
+AliTriggerClass* AliTriggerConfiguration::GetTriggerClass(Int_t classIndex) const
+{
+   Int_t nclasses = (Int_t)fClasses.GetEntriesFast();
+   for (Int_t i=0;i<nclasses;i++) {
+       AliTriggerClass* trgclass = (AliTriggerClass*)fClasses.At(i);
+       ULong64_t classmask = (ULong64_t)trgclass->GetMask();
+       if (TMath::Nint(TMath::Log2(classmask))+1 == classIndex) return trgclass;
    }
-
-   return check;
+   return 0;
 }
-
 //_____________________________________________________________________________
 void AliTriggerConfiguration::Reset()
 {