ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

#include "AliTriggerUtils.h"
#include "AliTriggerConfiguration.h"
#include "AliTriggerClass.h"
#include "AliTriggerInput.h"
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliCDBManager.h"
#include "AliPDG.h"
#include "AliMC.h"
#include "AliModule.h"
#include "AliLog.h"
#include <TROOT.h>
#include <TInterpreter.h>
#include <TString.h>

ClassImp(AliTriggerUtils)

//_____________________________________________________________________________
Bool_t AliTriggerUtils::CheckConfiguration( TString& configfile, AliTriggerConfiguration * cfg )
{
   // 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() ) );
//_______________________________________________________________________
   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 = AliRunLoader::Instance();
   if( !runLoader ) {
      AliError( Form( "gAlice has no run loader object. "
                      "Check your config file: %s", configfile.Data() ) );
      return kFALSE;
   }

   // get the possible inputs to check the condition
   TObjArray inputs;
   TObjArray* detArray = runLoader->GetAliRun()->Detectors();

   TString detStr = cfg->GetTriggeringModules();

   for( Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++ ) {
      AliModule* det = (AliModule*) detArray->At(iDet);
      if( !det || !det->IsActive() ) continue;
      if( cfg->IsSelected( det->GetName(), detStr ) ) {
         AliInfo( Form( "Creating inputs for %s", det->GetName() ) );
         AliTriggerDetector* dtrg = det->CreateTriggerDetector();
         dtrg->AssignInputs(cfg->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) );
         }
      }
   }

   // check if the condition is compatible with the triggers inputs
   Int_t ndesc = cfg->GetClasses().GetEntriesFast();
   Bool_t check = kTRUE;
   ULong64_t mask = 0L;
   for( Int_t j=0; j<ndesc; j++ ) {
     AliTriggerClass *trclass = (AliTriggerClass*)cfg->GetClasses().At( j );
     if( !(trclass->CheckClass( cfg )) ) check = kFALSE;
     else {
       if (trclass->IsActive(cfg->GetInputs(),cfg->GetFunctions())) {
	 AliInfo( Form( "Trigger Class (%s) OK, class mask (0x%llx)",
			trclass->GetName(), trclass->GetMask( ) ) );
       }
       else {
	 AliWarning( Form( "Trigger Class (%s) is NOT active, class mask (0x%llx)",
			   trclass->GetName(), trclass->GetMask( ) ) );
       }
     }
     // check if condition mask is duplicated
     if( mask & trclass->GetMask() ) {
       AliError( Form("Class (%s). The class mask (0x%llx) is ambiguous. It was already defined",
		      trclass->GetName(), trclass->GetMask()  ) );
       check = kFALSE;
     }
     mask |= trclass->GetMask();
   }

   return check;
}
 AliTriggerUtils.cxx:1
 AliTriggerUtils.cxx:2
 AliTriggerUtils.cxx:3
 AliTriggerUtils.cxx:4
 AliTriggerUtils.cxx:5
 AliTriggerUtils.cxx:6
 AliTriggerUtils.cxx:7
 AliTriggerUtils.cxx:8
 AliTriggerUtils.cxx:9
 AliTriggerUtils.cxx:10
 AliTriggerUtils.cxx:11
 AliTriggerUtils.cxx:12
 AliTriggerUtils.cxx:13
 AliTriggerUtils.cxx:14
 AliTriggerUtils.cxx:15
 AliTriggerUtils.cxx:16
 AliTriggerUtils.cxx:17
 AliTriggerUtils.cxx:18
 AliTriggerUtils.cxx:19
 AliTriggerUtils.cxx:20
 AliTriggerUtils.cxx:21
 AliTriggerUtils.cxx:22
 AliTriggerUtils.cxx:23
 AliTriggerUtils.cxx:24
 AliTriggerUtils.cxx:25
 AliTriggerUtils.cxx:26
 AliTriggerUtils.cxx:27
 AliTriggerUtils.cxx:28
 AliTriggerUtils.cxx:29
 AliTriggerUtils.cxx:30
 AliTriggerUtils.cxx:31
 AliTriggerUtils.cxx:32
 AliTriggerUtils.cxx:33
 AliTriggerUtils.cxx:34
 AliTriggerUtils.cxx:35
 AliTriggerUtils.cxx:36
 AliTriggerUtils.cxx:37
 AliTriggerUtils.cxx:38
 AliTriggerUtils.cxx:39
 AliTriggerUtils.cxx:40
 AliTriggerUtils.cxx:41
 AliTriggerUtils.cxx:42
 AliTriggerUtils.cxx:43
 AliTriggerUtils.cxx:44
 AliTriggerUtils.cxx:45
 AliTriggerUtils.cxx:46
 AliTriggerUtils.cxx:47
 AliTriggerUtils.cxx:48
 AliTriggerUtils.cxx:49
 AliTriggerUtils.cxx:50
 AliTriggerUtils.cxx:51
 AliTriggerUtils.cxx:52
 AliTriggerUtils.cxx:53
 AliTriggerUtils.cxx:54
 AliTriggerUtils.cxx:55
 AliTriggerUtils.cxx:56
 AliTriggerUtils.cxx:57
 AliTriggerUtils.cxx:58
 AliTriggerUtils.cxx:59
 AliTriggerUtils.cxx:60
 AliTriggerUtils.cxx:61
 AliTriggerUtils.cxx:62
 AliTriggerUtils.cxx:63
 AliTriggerUtils.cxx:64
 AliTriggerUtils.cxx:65
 AliTriggerUtils.cxx:66
 AliTriggerUtils.cxx:67
 AliTriggerUtils.cxx:68
 AliTriggerUtils.cxx:69
 AliTriggerUtils.cxx:70
 AliTriggerUtils.cxx:71
 AliTriggerUtils.cxx:72
 AliTriggerUtils.cxx:73
 AliTriggerUtils.cxx:74
 AliTriggerUtils.cxx:75
 AliTriggerUtils.cxx:76
 AliTriggerUtils.cxx:77
 AliTriggerUtils.cxx:78
 AliTriggerUtils.cxx:79
 AliTriggerUtils.cxx:80
 AliTriggerUtils.cxx:81
 AliTriggerUtils.cxx:82
 AliTriggerUtils.cxx:83
 AliTriggerUtils.cxx:84
 AliTriggerUtils.cxx:85
 AliTriggerUtils.cxx:86
 AliTriggerUtils.cxx:87
 AliTriggerUtils.cxx:88
 AliTriggerUtils.cxx:89
 AliTriggerUtils.cxx:90
 AliTriggerUtils.cxx:91
 AliTriggerUtils.cxx:92
 AliTriggerUtils.cxx:93
 AliTriggerUtils.cxx:94
 AliTriggerUtils.cxx:95
 AliTriggerUtils.cxx:96
 AliTriggerUtils.cxx:97
 AliTriggerUtils.cxx:98
 AliTriggerUtils.cxx:99
 AliTriggerUtils.cxx:100
 AliTriggerUtils.cxx:101
 AliTriggerUtils.cxx:102
 AliTriggerUtils.cxx:103
 AliTriggerUtils.cxx:104
 AliTriggerUtils.cxx:105
 AliTriggerUtils.cxx:106
 AliTriggerUtils.cxx:107
 AliTriggerUtils.cxx:108
 AliTriggerUtils.cxx:109
 AliTriggerUtils.cxx:110
 AliTriggerUtils.cxx:111
 AliTriggerUtils.cxx:112
 AliTriggerUtils.cxx:113
 AliTriggerUtils.cxx:114
 AliTriggerUtils.cxx:115
 AliTriggerUtils.cxx:116
 AliTriggerUtils.cxx:117
 AliTriggerUtils.cxx:118
 AliTriggerUtils.cxx:119
 AliTriggerUtils.cxx:120
 AliTriggerUtils.cxx:121
 AliTriggerUtils.cxx:122
 AliTriggerUtils.cxx:123
 AliTriggerUtils.cxx:124
 AliTriggerUtils.cxx:125
 AliTriggerUtils.cxx:126
 AliTriggerUtils.cxx:127
 AliTriggerUtils.cxx:128
 AliTriggerUtils.cxx:129
 AliTriggerUtils.cxx:130
 AliTriggerUtils.cxx:131
 AliTriggerUtils.cxx:132
 AliTriggerUtils.cxx:133
 AliTriggerUtils.cxx:134
 AliTriggerUtils.cxx:135
 AliTriggerUtils.cxx:136
 AliTriggerUtils.cxx:137
 AliTriggerUtils.cxx:138
 AliTriggerUtils.cxx:139
 AliTriggerUtils.cxx:140
 AliTriggerUtils.cxx:141
 AliTriggerUtils.cxx:142