]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTriggerConfiguration.cxx
Fixes for bug #52499: Field polarities inconsistiency
[u/mrichter/AliRoot.git] / STEER / AliTriggerConfiguration.cxx
index a0cf8e4a7e57ce8a28942adb0957d6cfdc38d823..0d82f888fd4d10a9332998f8b849a95351c29b54 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 "AliCDBManager.h"
 #include "AliLog.h"
+#include "AliMC.h"
+#include "AliModule.h"
+#include "AliPDG.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)
 
@@ -97,7 +99,8 @@ AliTriggerConfiguration::AliTriggerConfiguration():
   fMasks(),
   fDescriptors(),
   fClusters(),
-  fClasses()
+  fClasses(),
+  fVersion(0)
 {
   // Default constructor
 }
@@ -112,7 +115,8 @@ AliTriggerConfiguration::AliTriggerConfiguration( TString & name, TString & desc
   fMasks(),
   fDescriptors(),
   fClusters(),
-  fClasses()
+  fClasses(),
+  fVersion(0)
 {
   // Constructor
 }
@@ -149,7 +153,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;
   }
 }
@@ -508,6 +512,16 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
      TString strLine(line);
 
      if (strLine.BeginsWith("#")) return kTRUE;
+     if (strLine.BeginsWith("PARTITION:")) {
+       strLine.ReplaceAll("PARTITION:","");
+       SetName(strLine.Data());
+       return kTRUE;
+     }
+     if (strLine.BeginsWith("VERSION:")) {
+       strLine.ReplaceAll("VERSION:","");
+       fVersion = strLine.Atoi();
+       return kTRUE;
+     }
      if (strLine.BeginsWith("INPUTS:")) {
        level = 1;
        return kTRUE;
@@ -538,6 +552,7 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
      }
 
      strLine.ReplaceAll("*",'!');
+     strLine.ReplaceAll("~",'!');
      TObjArray *tokens = strLine.Tokenize(" \t");
      Int_t ntokens = tokens->GetEntriesFast();
      if (ntokens == 0)
@@ -570,8 +585,16 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
      case 3:
        // Read logical functions and descriptors
        if (ntokens < 2) {
-        AliError(Form("Invalid trigger descriptor syntax (%s)!",strLine.Data()));
-        return kFALSE;
+        if ((((TObjString*)tokens->At(0))->String().CompareTo("EMPTY") == 0) ||
+            (((TObjString*)tokens->At(0))->String().CompareTo("DEMPTY") == 0)) {
+          AddDescriptor(((TObjString*)tokens->At(0))->String(),
+                        strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),""));
+          break;
+        }
+        else {
+          AliError(Form("Invalid trigger descriptor syntax (%s)!",strLine.Data()));
+          return kFALSE;
+        }
        }
        if (((TObjString*)tokens->At(0))->String().BeginsWith("l0f")) {
         // function
@@ -589,6 +612,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();
@@ -602,7 +629,8 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t
      case 5:
        {
         AliTriggerPFProtection *pfp = NULL;
-        if (((TObjString*)tokens->At(0))->String().CompareTo("NONE") == 0) {
+        if ((((TObjString*)tokens->At(0))->String().CompareTo("NONE") == 0) ||
+            (((TObjString*)tokens->At(0))->String().CompareTo("NOPF") == 0)) {
           pfp = new AliTriggerPFProtection(((TObjString*)tokens->At(0))->String());
         }
         else {
@@ -837,11 +865,36 @@ Bool_t AliTriggerConfiguration::CheckConfiguration( TString& configfile )
 
    AliInfo( Form( "initializing gAlice with config file %s",
             configfile.Data() ) );
-   StdoutToAliInfo( StderrToAliError(
-      gAlice->Init( configfile.Data() );
-   ););
+//_______________________________________________________________________
+   gAlice->Announce();
+   
+   gROOT->LoadMacro(configfile.Data());
+   gInterpreter->ProcessLine(gAlice->GetConfigFunction());
+   
+   if(AliCDBManager::Instance()->GetRun() >= 0) { 
+     AliRunLoader::Instance()->SetRunNumber(AliCDBManager::Instance()->GetRun());
+   } else {
+     AliWarning("Run number not initialized!!");
+   }
+  
+   AliRunLoader::Instance()->CdGAFile();
+    
+   AliPDG::AddParticlesToPdgDataBase();  
+
+   gAlice->GetMCApp()->Init();
+   
+   //Must be here because some MCs (G4) adds detectors here and not in Config.C
+   gAlice->InitLoaders();
+   AliRunLoader::Instance()->MakeTree("E");
+   AliRunLoader::Instance()->LoadKinematics("RECREATE");
+   AliRunLoader::Instance()->LoadTrackRefs("RECREATE");
+   AliRunLoader::Instance()->LoadHits("all","RECREATE");
+   //
+   // Save stuff at the beginning of the file to avoid file corruption
+   AliRunLoader::Instance()->CdGAFile();
+   gAlice->Write();
 
-   AliRunLoader* runLoader = gAlice->GetRunLoader();
+   AliRunLoader* runLoader = AliRunLoader::Instance();
    if( !runLoader ) {
       AliError( Form( "gAlice has no run loader object. "
                       "Check your config file: %s", configfile.Data() ) );
@@ -860,7 +913,7 @@ Bool_t AliTriggerConfiguration::CheckConfiguration( TString& configfile )
       if( IsSelected( det->GetName(), detStr ) ) {
          AliInfo( Form( "Creating inputs for %s", det->GetName() ) );
          AliTriggerDetector* dtrg = det->CreateTriggerDetector();
-         dtrg->CreateInputs(GetInputs());
+         dtrg->AssignInputs(GetInputs());
          TObjArray* detInp = dtrg->GetInputs();
          for( Int_t i=0; i<detInp->GetEntriesFast(); i++ ) {
             AliInfo( Form( "Adding input %s", ((AliTriggerInput*)detInp->At(i))->GetName() ) );
@@ -916,6 +969,7 @@ void AliTriggerConfiguration::Print( const Option_t*  ) const
    cout << "Trigger Configuration:"  << endl;
    cout << "  Name:              " << GetName() << endl; 
    cout << "  Description:       " << GetTitle() << endl;
+   cout << "  Version:           " << GetVersion() << endl;
    cout << "  Active Detectors:  " << GetActiveDetectors() << endl;
    cout << "  Trigger Detectors: " << GetTriggeringDetectors() << endl;