#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 )
{
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();
gAlice->InitLoaders();
AliRunLoader::Instance()->MakeTree("E");
AliRunLoader::Instance()->LoadKinematics("RECREATE");
AliRunLoader::Instance()->LoadTrackRefs("RECREATE");
AliRunLoader::Instance()->LoadHits("all","RECREATE");
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;
}
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) );
}
}
}
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( ) ) );
}
}
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;
}