60 #include <Riostream.h> 64 #include <TObjArray.h> 65 #include <TObjString.h> 107 TNamed( name, description ),
153 AliError(
"CTP can handle up to 64 inputs ! Impossible to add the required input !");
160 UChar_t level, UInt_t signature,
175 UChar_t level, UInt_t signature,
176 UInt_t indexCTP, UInt_t indexSwitch )
214 AliError(
"Invalid interaction ! Impossible to add it !");
217 AliError(
"CTP can handle up to 2 interactions ! Impossible to add the required interaction !");
247 AliError(
"Invalid logical function ! Impossible to add it !");
250 AliError(
"CTP can handle up to 4 logical functions ! Impossible to add the required interaction !");
267 AliError(
"Invalid past-future protection ! Impossible to add it !");
270 AliError(
"CTP can handle up to 4 past-future protections ! Impossible to add the required protection !");
299 AliError(
"CTP can handle up to 12 bunch-crossing masks ! Impossible to add the required mask !");
326 if (!(dets.IsNull())) {
331 AliError(
"Empty trigger cluster ! Impossible to add it !");
334 AliError(
"CTP can handle up to 6 different detector clusters ! Impossible to add the required cluster !");
345 TString activeDet =
"";
347 Int_t nclus =
fClusters.GetEntriesFast();
348 if( !nclus )
return activeDet;
350 for( Int_t j=0; j<nclus; ++j ) {
353 Int_t ndet = det->GetEntriesFast();
354 for( Int_t k=0; k<ndet; ++k ) {
355 if( activeDet.Contains( ((TObjString*)det->At(k))->String() ) )
continue;
356 activeDet.Append(
" " );
357 activeDet.Append( ((TObjString*)det->At(k))->String() );
372 Int_t ninputs =
fInputs.GetEntriesFast();
373 if( !ninputs )
return trDet;
375 for( Int_t j=0; j<ninputs; j++ ) {
377 if( trDet.Contains( detStr ) )
continue;
379 trDet.Append( detStr );
392 Int_t ninputs =
fInputs.GetEntriesFast();
393 if( !ninputs )
return trDet;
395 for( Int_t j=0; j<ninputs; j++ ) {
397 if( trDet.Contains( detStr ) )
continue;
399 trDet.Append( detStr );
429 AliError(
"Invalid trigger desciptor ! Impossible to add it !");
432 AliError(
"CTP can handle up to 50 different descriptors ! Impossible to add the required descriptor !");
448 AliError(
"Invalid trigger class ! Impossible to add it !");
451 AliError(
"CTP can handle up to 50 different classes ! Impossible to add the required class !");
460 UInt_t prescaler, Bool_t allrare)
465 AliError(
"Invalid descriptor ! Impossible to add the class !");
469 AliError(
"Invalid cluster ! Impossible to add the class !");
473 AliError(
"Invalid past-future protection ! Impossible to add the class !");
476 if (!
fMasks.FindObject(mask)) {
477 AliError(
"Invalid bunch-crossing mask ! Impossible to add the class !");
491 TString &desc, TString &clus,
492 TString &pfp, TString &mask,
493 UInt_t prescaler, Bool_t allrare)
497 AliError(
"Invalid descriptor ! Impossible to add the class !");
501 AliError(
"Invalid cluster ! Impossible to add the class !");
505 AliError(
"Invalid past-future protection ! Impossible to add the class !");
508 if (!
fMasks.FindObject(mask)) {
509 AliError(
"Invalid bunch-crossing mask ! Impossible to add the class !");
526 TString strLine(line);
528 if (strLine.BeginsWith(
"#"))
return kTRUE;
529 if (strLine.BeginsWith(
"PARTITION:")) {
530 strLine.ReplaceAll(
"PARTITION:",
"");
531 SetName(strLine.Data());
534 if (strLine.BeginsWith(
"VERSION:")) {
535 strLine.ReplaceAll(
"VERSION:",
"");
539 if (strLine.BeginsWith(
"INPUTS:")) {
543 if (strLine.BeginsWith(
"INTERACTIONS:")) {
547 if (strLine.BeginsWith(
"DESCRIPTORS:")) {
551 if (strLine.BeginsWith(
"CLUSTERS:")) {
555 if (strLine.BeginsWith(
"PFS:")) {
559 if (strLine.BeginsWith(
"BCMASKS:")) {
563 if (strLine.BeginsWith(
"CLASSES:")) {
568 strLine.ReplaceAll(
"*",
'!');
569 strLine.ReplaceAll(
"~",
'!');
570 TObjArray *tokens = strLine.Tokenize(
" \t");
571 Int_t ntokens = tokens->GetEntriesFast();
580 if ((ntokens != 5) && (ntokens !=6)) {
581 AliError(Form(
"Invalid trigger input syntax (%s)!",strLine.Data()));
586 AddInput(((TObjString*)tokens->At(0))->String(),
587 ((TObjString*)tokens->At(1))->String(),
588 ((TObjString*)tokens->At(2))->String().Atoi(),
589 ((TObjString*)tokens->At(3))->String().Atoi(),
590 ((TObjString*)tokens->At(4))->String().Atoi());
592 AddInput(((TObjString*)tokens->At(0))->String(),
593 ((TObjString*)tokens->At(1))->String(),
594 ((TObjString*)tokens->At(2))->String().Atoi(),
595 ((TObjString*)tokens->At(3))->String().Atoi(),
596 ((TObjString*)tokens->At(4))->String().Atoi(),
597 ((TObjString*)tokens->At(5))->String().Atoi());
605 AliError(Form(
"Invalid trigger interaction syntax (%s)!",strLine.Data()));
608 }
else if (ntokens == 2) {
609 inter=((TObjString*)tokens->At(1))->String();
611 AliWarning(Form(
"Trigger interaction syntax (%s)!",strLine.Data()));
612 for(Int_t i=1;i<ntokens;i++){
613 inter=inter+((TObjString*)tokens->At(i))->String();
622 if ((((TObjString*)tokens->At(0))->String().CompareTo(
"EMPTY") == 0) ||
623 (((TObjString*)tokens->At(0))->String().CompareTo(
"DTRUE") == 0) ||
624 (((TObjString*)tokens->At(0))->String().CompareTo(
"DEMPTY") == 0)) {
626 strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),
""));
630 AliError(Form(
"Invalid trigger descriptor syntax (%s)!",strLine.Data()));
635 if (((TObjString*)tokens->At(0))->String().BeginsWith(
"l0f")) {
637 if(!
AddFunction(((TObjString*)tokens->At(0))->String(),
638 strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),
""))) {
645 strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),
""))) {
654 AliError(Form(
"Invalid trigger cluster syntax (%s)!",strLine.Data()));
658 if (((TObjString*)tokens->At(1))->String().Atoi() <= 0) {
659 AliError(Form(
"Invalid trigger cluster syntax (%s)!",strLine.Data()));
663 for(Int_t i = 2; i < ntokens; i++) {
664 strTemp += ((TObjString*)tokens->At(i))->String();
667 AddCluster(((TObjString*)tokens->At(0))->String(),
668 ((TObjString*)tokens->At(1))->String().Atoi(),
675 if ((((TObjString*)tokens->At(0))->String().CompareTo(
"NONE") == 0) ||
676 (((TObjString*)tokens->At(0))->String().CompareTo(
"NOPF") == 0)) {
680 if ((ntokens == 10) && (
fVersion<=7)){
682 ((TObjString*)tokens->At(1))->String(),
683 ((TObjString*)tokens->At(2))->String(),
684 ((TObjString*)tokens->At(3))->String());
685 pfp->
SetNa1(((TObjString*)tokens->At(4))->String().Atoi());
686 pfp->
SetNa2(((TObjString*)tokens->At(5))->String().Atoi());
687 pfp->
SetNb1(((TObjString*)tokens->At(6))->String().Atoi());
688 pfp->
SetNb2(((TObjString*)tokens->At(7))->String().Atoi());
689 pfp->
SetTa(((TObjString*)tokens->At(8))->String().Atoi());
690 pfp->
SetTb(((TObjString*)tokens->At(9))->String().Atoi());
691 }
else if((ntokens == 13) && (
fVersion<=7)){
693 for(Int_t i=0;i<12;i++){
694 TString ss(((TObjString*)tokens->At(i+1))->String());
697 for(Int_t j=ss.Length()-1;j>=0;j--){
699 if(nn >= (UInt_t)
'0' && nn <= (UInt_t)
'9')nn=nn-(UInt_t)
'0';
else 700 if(nn >= (UInt_t)
'A' && nn <= (UInt_t)
'F')nn=10+nn-(UInt_t)
'A';
else 701 if(nn >= (UInt_t)
'a' && nn <= (UInt_t)
'f')nn=10+nn-(UInt_t)
'a';
else{
702 AliError(Form(
"Invalid trigger pfs syntax (%s)!",strLine.Data()));
705 num=num+(1<<(ss.Length()-1-j)*4)*nn;
711 }
else if((ntokens==9) && (
fVersion>7)){
714 ((TObjString*)tokens->At(0))->String(),
715 ((TObjString*)tokens->At(1))->String(),
716 ((TObjString*)tokens->At(2))->String(),
717 ((TObjString*)tokens->At(3))->String().Atoi(),
718 ((TObjString*)tokens->At(4))->String().Atoi(),
719 ((TObjString*)tokens->At(5))->String().Atoi(),
720 ((TObjString*)tokens->At(6))->String().Atoi(),
721 ((TObjString*)tokens->At(7))->String().Atoi(),
722 ((TObjString*)tokens->At(8))->String().Atoi()
725 AliError(Form(
"Invalid trigger pfs syntax (%s)!",strLine.Data()));
734 AliError(Form(
"Invalid trigger bcmasks syntax (%s)!",strLine.Data()));
738 if (((TObjString*)tokens->At(0))->String().CompareTo(
"NONE") == 0)
746 if(!
AddMask(((TObjString*)tokens->At(0))->String(),((TObjString*)tokens->At(1))->String())) {
754 if ((ntokens !=8) && (ntokens != 10) && (ntokens != 11)) {
755 AliError(Form(
"Invalid trigger class syntax (%s)!",strLine.Data()));
761 ((TObjString*)tokens->At(0))->String(),((TObjString*)tokens->At(1))->String().Atoi(),
762 ((TObjString*)tokens->At(2))->String(),((TObjString*)tokens->At(3))->String(),
763 ((TObjString*)tokens->At(4))->String(),((TObjString*)tokens->At(5))->String(),
764 ((TObjString*)tokens->At(6))->String().Atoi(),(Bool_t)(((TObjString*)tokens->At(7))->String().Atoi()));
766 ((TObjString*)tokens->At(0))->String(),((TObjString*)tokens->At(1))->String().Atoi(),
767 ((TObjString*)tokens->At(2))->String(),((TObjString*)tokens->At(3))->String(),
768 ((TObjString*)tokens->At(4))->String(),
769 ((TObjString*)tokens->At(6))->String().Atoi(),(Bool_t)(((TObjString*)tokens->At(7))->String().Atoi()),
770 (((TObjString*)tokens->At(8))->String().Atoi()),(((TObjString*)tokens->At(9))->String().Atoi()));
771 if(!trclass->
SetMasks(
this,((TObjString*)tokens->At(5))->String())) {
797 if (configuration.EndsWith(
".cfg") ||
798 configuration.EndsWith(
".shuttle")) {
799 filename = configuration;
802 filename = gSystem->Getenv(
"ALICE_ROOT");
803 filename +=
"/GRP/CTP/";
804 filename += configuration;
808 if( gSystem->AccessPathName( filename.Data() ) ) {
809 AliErrorClass( Form(
"file (%s) not found", filename.Data() ) );
814 ifstream *file =
new ifstream ( filename.Data() );
816 AliErrorClass(Form(
"Error opening file (%s) !",filename.Data()));
827 while (strLine.ReadLine(*file)) {
854 TObjArray* tokens = TString(configuration).Tokenize(
"\n");
855 for (Int_t i=0; i<tokens->GetEntries(); i++)
857 TObjString* str =
dynamic_cast<TObjString*
>(tokens->At(i));
881 path += gSystem->Getenv(
"ALICE_ROOT" );
887 if( gSystem->AccessPathName( path.Data() ) ) {
888 AliErrorGeneral(
"AliTriggerConfiguration", Form(
"file (%s) not found", path.Data() ) );
894 TFile file( path.Data(),
"READ" );
895 if( file.IsZombie() ) {
896 AliErrorGeneral(
"AliTriggerConfiguration", Form(
"Error opening file (%s)", path.Data() ) );
903 TIter next( file.GetListOfKeys() );
904 while( (key = (TKey*)next()) ) {
905 TObject* obj = key->ReadObj();
906 if( obj->InheritsFrom(
"AliTriggerConfiguration" ) ) {
907 desArray->AddLast( obj );
921 path += gSystem->Getenv(
"ALICE_ROOT");
927 TFile file( path.Data(),
"UPDATE" );
928 if( file.IsZombie() ) {
930 Form(
"Can't open file (%s)", path.Data() ) );
934 Bool_t result = (Write( GetName(), TObject::kOverwrite ) != 0);
937 Form(
"Can't write entry to file <%s>!", path.Data() ) );
945 Int_t nclasses = (Int_t)
fClasses.GetEntriesFast();
946 for (Int_t i=0;i<nclasses;i++) {
948 if (TString(trgclass->GetName()).CompareTo(className) == 0) {
957 Int_t nclasses = (Int_t)
fClasses.GetEntriesFast();
958 for (Int_t i=0;i<nclasses;i++) {
960 if (trgclass->
GetIndex() == classIndex)
return trgclass->GetName();
967 Int_t nclasses = (Int_t)
fClasses.GetEntriesFast();
968 for (Int_t i=0;i<nclasses;i++) {
970 if ( trgclass->
GetIndex() == classIndex)
return trgclass;
977 for( Int_t j=0; j<
fInputs.GetEntriesFast(); j++ )
980 for( Int_t j=0; j<
fClasses.GetEntriesFast(); j++ )
988 cout <<
"#################################################" << endl;
989 cout <<
"Trigger Configuration:" << endl;
990 cout <<
" Name: " << GetName() << endl;
991 cout <<
" Description: " << GetTitle() << endl;
996 cout <<
"#################################################" << endl;
998 cout <<
"#################################################" << endl;
1000 cout <<
"#################################################" << endl;
1002 cout <<
"#################################################" << endl;
1004 cout <<
"#################################################" << endl;
1006 cout <<
"#################################################" << endl;
1008 cout <<
"#################################################" << endl;
1010 cout <<
"#################################################" << endl;
1012 cout <<
"#################################################" << endl;
1028 if( (detectors.CompareTo(
"ALL") == 0 ) ||
1029 detectors.BeginsWith(
"ALL ") ||
1030 detectors.EndsWith(
" ALL") ||
1031 detectors.Contains(
" ALL ") ) {
1037 Bool_t result = kFALSE;
1038 if( (detectors.CompareTo( detName ) == 0) ||
1039 detectors.BeginsWith( detName+
" " ) ||
1040 detectors.EndsWith(
" "+detName ) ||
1041 detectors.Contains(
" "+detName+
" " ) ) {
1042 detectors.ReplaceAll( detName,
"" );
1047 while( detectors.Contains(
" ") ) detectors.ReplaceAll(
" ",
" " );
1048 while( detectors.BeginsWith(
" ") ) detectors.Remove( 0, 1 );
1049 while( detectors.EndsWith(
" ") ) detectors.Remove( detectors.Length()-1, 1 );
Bool_t CheckInputsAndFunctions(const TObjArray &inputs, const TObjArray &functions) const
TString GetActiveDetectors() const
AliTriggerDescriptor * AddDescriptor(TString &name, TString &cond)
AliTriggerClass * AddClass(TString &name, UChar_t index, AliTriggerDescriptor *desc, AliTriggerCluster *clus, AliTriggerPFProtection *pfp, AliTriggerBCMask *mask, UInt_t prescaler, Bool_t allrare)
#define AliErrorGeneral(scope, message)
static const TString fgkConfigurationFileName
Bool_t ProcessConfigurationLine(const char *line, Int_t &level)
AliTriggerInteraction * AddInteraction(TString &name, TString &logic)
Bool_t SetMasks(AliTriggerConfiguration *config, TString &mask)
Bool_t AddPFProtection(AliTriggerPFProtection *pf)
static AliTriggerConfiguration * LoadConfiguration(TString &des)
AliTriggerConfiguration()
Bool_t IsSelected(TString detName, TString &detectors) const
void WriteConfiguration(const char *filename="")
#define AliWarning(message)
Int_t GetClassIndexFromName(const char *className) const
const char * GetDetectorsInCluster() const
#define AliErrorClass(message)
Bool_t CheckInputs(const TObjArray &inputs) const
AliTriggerInput * AddInput(TString &name, TString &det, UChar_t level, UInt_t signature, UChar_t number)
AliTriggerCluster * AddCluster(TString &name, UChar_t index, TString &detectors)
virtual ~AliTriggerConfiguration()
static TObjArray * GetAvailableConfigurations(const char *filename="")
AliTriggerInteraction * AddFunction(TString &name, TString &logic)
AliTriggerBCMask * AddMask(TString &name, TString &mask)
TString GetTriggeringModules() const
AliTriggerClass * GetTriggerClass(Int_t classIndex) const
#define AliError(message)
void Print(const Option_t *opt="") const
static AliTriggerConfiguration * LoadConfigurationFromString(const char *configuration)
TString GetTriggeringDetectors() const
const char * GetClassNameFromIndex(Int_t classIndex) const
Bool_t CheckClass(AliTriggerConfiguration *config) const