//
///////////////////////////////////////////////////////////////////////////////
#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)
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;
}
}
strLine.ReplaceAll("*",'!');
+ strLine.ReplaceAll("~",'!');
TObjArray *tokens = strLine.Tokenize(" \t");
Int_t ntokens = tokens->GetEntriesFast();
if (ntokens == 0)
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("DTRUE") == 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
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();
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 {
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;
}
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() ) );
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() ) );