//
///////////////////////////////////////////////////////////////////////////////
#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)
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;
}
}
{
// 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;
}
// 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(),""));
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();
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());
break;
case 7:
{
- if (ntokens != 8) {
+ if ((ntokens < 8) || (ntokens >10)) {
AliError(Form("Invalid trigger class syntax (%s)!",strLine.Data()));
return kFALSE;
}
}
//_____________________________________________________________________________
-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()
{