X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliTriggerConfiguration.cxx;h=2c3cbb2efe1d25dc60bac71bd076f14687e98e7c;hb=17fd2848ebce9292da187407540f34c2e1dcf047;hp=b758805dee003a74dfe46deb0d3d575da86ac7bc;hpb=360de28a64ebd759257755c6caed2d4e6351615e;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliTriggerConfiguration.cxx b/STEER/AliTriggerConfiguration.cxx index b758805dee0..2c3cbb2efe1 100755 --- a/STEER/AliTriggerConfiguration.cxx +++ b/STEER/AliTriggerConfiguration.cxx @@ -58,30 +58,32 @@ // /////////////////////////////////////////////////////////////////////////////// #include -//#include +#include +#include +#include +#include +#include #include +#include #include -#include -#include #include -#include -#include +#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; } } @@ -274,7 +278,7 @@ Bool_t AliTriggerConfiguration::AddMask( AliTriggerBCMask* mask ) { // 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; } @@ -330,14 +334,14 @@ TString AliTriggerConfiguration::GetActiveDetectors() const Int_t nclus = fClusters.GetEntriesFast(); if( !nclus ) return activeDet; - for( Int_t j=0; jGetDetectorsInCluster(); TObjArray* det = detStr.Tokenize(" "); Int_t ndet = det->GetEntriesFast(); - for( Int_t j=0; jAt(j))->String() ) )continue; + for( Int_t k=0; kAt(k))->String() ) )continue; activeDet.Append( " " ); - activeDet.Append( ((TObjString*)det->At(j))->String() ); + activeDet.Append( ((TObjString*)det->At(k))->String() ); } } return activeDet; @@ -501,118 +505,124 @@ AliTriggerClass *AliTriggerConfiguration::AddClass( TString &name, UChar_t index } //_____________________________________________________________________________ -AliTriggerConfiguration* AliTriggerConfiguration::LoadConfiguration( TString & configuration) +Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t& level) { - // Load one pre-created Configurations from database/file that match - // with the input string 'configuration' - // Ej: "Pb-Pb" or "p-p-DIMUON CALIBRATION-CENTRAL-BARREL" - // By default the files are stored in GRP/CTP folder. - // The filename is constructed as: GRP/CTP/.cfg + // processes one line of configuration - // Load the selected configuration - TString filename; - if (configuration.EndsWith(".cfg") || - configuration.EndsWith(".shuttle")) { - filename = configuration; - } - else { - filename = gSystem->Getenv("ALICE_ROOT"); - filename += "/GRP/CTP/"; - filename += configuration; - filename += ".cfg"; - } - - if( gSystem->AccessPathName( filename.Data() ) ) { - AliErrorClass( Form( "file (%s) not found", filename.Data() ) ); - return NULL; - } - - - ifstream *file = new ifstream ( filename.Data() ); - if (!*file) { - AliErrorClass(Form("Error opening file (%s) !",filename.Data())); - file->close(); - delete file; - return NULL; - } - - AliTriggerConfiguration *cfg = new AliTriggerConfiguration(); + TString strLine(line); - Int_t level = 0; - TString strLine; - while (strLine.ReadLine(*file)) { - if (strLine.BeginsWith("#")) continue; + 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; - continue; + return kTRUE; } if (strLine.BeginsWith("INTERACTIONS:")) { level = 2; - continue; + return kTRUE; } if (strLine.BeginsWith("DESCRIPTORS:")) { level = 3; - continue; + return kTRUE; } if (strLine.BeginsWith("CLUSTERS:")) { level = 4; - continue; + return kTRUE; } if (strLine.BeginsWith("PFS:")) { level = 5; - continue; + return kTRUE; } if (strLine.BeginsWith("BCMASKS:")) { level = 6; - continue; + return kTRUE; } if (strLine.BeginsWith("CLASSES:")) { level = 7; - continue; + return kTRUE; } + strLine.ReplaceAll("*",'!'); + strLine.ReplaceAll("~",'!'); TObjArray *tokens = strLine.Tokenize(" \t"); Int_t ntokens = tokens->GetEntriesFast(); + if (ntokens == 0) + { + delete tokens; + return kTRUE; + } switch (level) { case 1: // Read inputs if (ntokens != 5) { - AliErrorClass(Form("Invalid trigger input syntax (%s)!",strLine.Data())); - file->close(); - delete file; - return NULL; + AliError(Form("Invalid trigger input syntax (%s)!",strLine.Data())); + return kFALSE; } - cfg->AddInput(((TObjString*)tokens->At(0))->String(), + AddInput(((TObjString*)tokens->At(0))->String(), ((TObjString*)tokens->At(1))->String(), ((TObjString*)tokens->At(2))->String().Atoi(), ((TObjString*)tokens->At(3))->String().Atoi(), ((TObjString*)tokens->At(4))->String().Atoi()); break; case 2: - // Read intreractions - cfg->AddInteraction(((TObjString*)tokens->At(0))->String(), + // Read interaction + if (ntokens != 2) { + AliError(Form("Invalid trigger interaction syntax (%s)!",strLine.Data())); + return kFALSE; + } + AddInteraction(((TObjString*)tokens->At(0))->String(), ((TObjString*)tokens->At(1))->String()); break; case 3: // 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(),"")); + break; + } + else { + AliError(Form("Invalid trigger descriptor syntax (%s)!",strLine.Data())); + return kFALSE; + } + } if (((TObjString*)tokens->At(0))->String().BeginsWith("l0f")) { // function - cfg->AddFunction(((TObjString*)tokens->At(0))->String(), + AddFunction(((TObjString*)tokens->At(0))->String(), strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),"")); } else { - cfg->AddDescriptor(((TObjString*)tokens->At(0))->String(), + AddDescriptor(((TObjString*)tokens->At(0))->String(), strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),"")); } break; case 4: { + if (ntokens < 2) { + 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(); strTemp += " "; } - cfg->AddCluster(((TObjString*)tokens->At(0))->String(), + AddCluster(((TObjString*)tokens->At(0))->String(), ((TObjString*)tokens->At(1))->String().Atoi(), strTemp); } @@ -620,10 +630,15 @@ AliTriggerConfiguration* AliTriggerConfiguration::LoadConfiguration( TString & c 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 { + if (ntokens != 10) { + AliError(Form("Invalid trigger pfs syntax (%s)!",strLine.Data())); + return kFALSE; + } pfp = new AliTriggerPFProtection(((TObjString*)tokens->At(0))->String(), ((TObjString*)tokens->At(1))->String(), ((TObjString*)tokens->At(2))->String(), @@ -635,37 +650,130 @@ AliTriggerConfiguration* AliTriggerConfiguration::LoadConfiguration( TString & c pfp->SetTa(((TObjString*)tokens->At(8))->String().Atoi()); pfp->SetTb(((TObjString*)tokens->At(9))->String().Atoi()); } - cfg->AddPFProtection(pfp); + AddPFProtection(pfp); } break; case 6: + if (ntokens > 2) { + AliError(Form("Invalid trigger bcmasks syntax (%s)!",strLine.Data())); + return kFALSE; + } if (((TObjString*)tokens->At(0))->String().CompareTo("NONE") == 0) - cfg->AddMask(new AliTriggerBCMask(((TObjString*)tokens->At(0))->String())); + { + AddMask(new AliTriggerBCMask(((TObjString*)tokens->At(0))->String())); + } else { - cfg->AddMask(((TObjString*)tokens->At(0))->String(), + AddMask(((TObjString*)tokens->At(0))->String(), ((TObjString*)tokens->At(1))->String()); } break; case 7: { - AliTriggerClass *trclass = new AliTriggerClass(cfg, + if ((ntokens < 8) || (ntokens >10)) { + AliError(Form("Invalid trigger class syntax (%s)!",strLine.Data())); + return kFALSE; + } + AliTriggerClass *trclass = new AliTriggerClass(this, ((TObjString*)tokens->At(0))->String(),((TObjString*)tokens->At(1))->String().Atoi(), ((TObjString*)tokens->At(2))->String(),((TObjString*)tokens->At(3))->String(), ((TObjString*)tokens->At(4))->String(),((TObjString*)tokens->At(5))->String(), - ((TObjString*)tokens->At(6))->String().Atoi(),(Bool_t)(((TObjString*)tokens->At(0))->String().Atoi())); - cfg->AddClass(trclass); + ((TObjString*)tokens->At(6))->String().Atoi(),(Bool_t)(((TObjString*)tokens->At(7))->String().Atoi())); + AddClass(trclass); } default: break; } delete tokens; + + return kTRUE; +} + +//_____________________________________________________________________________ +AliTriggerConfiguration* AliTriggerConfiguration::LoadConfiguration(TString & configuration) +{ + // Load one pre-created Configurations from database/file that match + // with the input string 'configuration' + // Ej: "Pb-Pb" or "p-p-DIMUON CALIBRATION-CENTRAL-BARREL" + // By default the files are stored in GRP/CTP folder. + // The filename is constructed as: GRP/CTP/.cfg + + // Load the selected configuration + TString filename; + if (configuration.EndsWith(".cfg") || + configuration.EndsWith(".shuttle")) { + filename = configuration; + } + else { + filename = gSystem->Getenv("ALICE_ROOT"); + filename += "/GRP/CTP/"; + filename += configuration; + filename += ".cfg"; + } + + if( gSystem->AccessPathName( filename.Data() ) ) { + AliErrorClass( Form( "file (%s) not found", filename.Data() ) ); + return NULL; + } + + + ifstream *file = new ifstream ( filename.Data() ); + if (!*file) { + AliErrorClass(Form("Error opening file (%s) !",filename.Data())); + file->close(); + delete file; + return NULL; + } + + AliTriggerConfiguration *cfg = new AliTriggerConfiguration(); + + Int_t level = 0; + + TString strLine; + while (strLine.ReadLine(*file)) { + if (cfg->ProcessConfigurationLine(strLine, level) == kFALSE) + { + delete cfg; + cfg = 0; + break; + } } file->close(); delete file; return cfg; +} + +//_____________________________________________________________________________ +AliTriggerConfiguration* AliTriggerConfiguration::LoadConfigurationFromString(const char* configuration) +{ + // Loads configuration given as parameter + if (!configuration) + return 0; + + AliTriggerConfiguration *cfg = new AliTriggerConfiguration(); + + Int_t level = 0; + + TObjArray* tokens = TString(configuration).Tokenize("\n"); + for (Int_t i=0; iGetEntries(); i++) + { + TObjString* str = dynamic_cast(tokens->At(i)); + if (!str) + continue; + + if (cfg->ProcessConfigurationLine(str->String(), level) == kFALSE) + { + delete cfg; + cfg = 0; + break; + } + } + + delete tokens; + + return cfg; } //_____________________________________________________________________________ @@ -760,11 +868,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() ) ); @@ -783,7 +916,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; iGetEntriesFast(); i++ ) { AliInfo( Form( "Adding input %s", ((AliTriggerInput*)detInp->At(i))->GetName() ) ); @@ -839,6 +972,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;