From e9bf49e824e0dfbcdded26fd8c3e3836ad46e646 Mon Sep 17 00:00:00 2001 From: lietava Date: Thu, 23 Feb 2012 16:11:41 +0000 Subject: [PATCH] Updates for new l0 firmware, more bcmasks,l0f. --- STEER/ESD/AliTriggerClass.cxx | 75 ++++++++++++++++++++------- STEER/ESD/AliTriggerClass.h | 11 ++-- STEER/ESD/AliTriggerConfiguration.cxx | 27 +++++----- STEER/ESD/AliTriggerConfiguration.h | 4 +- STEER/ESD/AliTriggerInteraction.cxx | 2 +- 5 files changed, 79 insertions(+), 40 deletions(-) diff --git a/STEER/ESD/AliTriggerClass.cxx b/STEER/ESD/AliTriggerClass.cxx index a36bf5ddefe..5444fe796fa 100644 --- a/STEER/ESD/AliTriggerClass.cxx +++ b/STEER/ESD/AliTriggerClass.cxx @@ -40,7 +40,6 @@ AliTriggerClass::AliTriggerClass(): fDescriptor(NULL), fCluster(NULL), fPFProtection(NULL), - fMask(NULL), fPrescaler(0), fAllRare(kFALSE), fStatus(kFALSE), @@ -48,6 +47,7 @@ AliTriggerClass::AliTriggerClass(): fTimeWindow(0) { // Default constructor + for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0; } //_____________________________________________________________________________ @@ -61,7 +61,6 @@ AliTriggerClass::AliTriggerClass( TString & name, UChar_t index, fDescriptor( desc ), fCluster( clus ), fPFProtection( pfp ), - fMask( mask ), fPrescaler( prescaler ), fAllRare( allrare ), fStatus(kFALSE), @@ -69,6 +68,9 @@ AliTriggerClass::AliTriggerClass( TString & name, UChar_t index, fTimeWindow(0) { // Constructor + // This should be used with old version of config + for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0; + fMask[0]=mask; } //_____________________________________________________________________________ @@ -83,27 +85,29 @@ AliTriggerClass::AliTriggerClass( AliTriggerConfiguration *config, fDescriptor( NULL ), fCluster( NULL ), fPFProtection( NULL ), - fMask( NULL ), fPrescaler( prescaler ), fAllRare( allrare ), fStatus(kFALSE), fTimeGroup(0), fTimeWindow(0) { + // This should be used with old version of config fDescriptor = (AliTriggerDescriptor*)config->GetDescriptors().FindObject(desc); fCluster = (AliTriggerCluster*)config->GetClusters().FindObject(clus); pfp.ReplaceAll("{",""); pfp.ReplaceAll("}",""); fPFProtection = (AliTriggerPFProtection*)config->GetPFProtections().FindObject(pfp); + // BC masks + for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0; mask.ReplaceAll("{",""); mask.ReplaceAll("}",""); - fMask = (AliTriggerBCMask*)config->GetMasks().FindObject(mask); + fMask[0] = (AliTriggerBCMask*)config->GetMasks().FindObject(mask); } //_____________________________________________________________________________ AliTriggerClass::AliTriggerClass( AliTriggerConfiguration *config, TString & name, UChar_t index, TString &desc, TString &clus, - TString &pfp, TString &mask, + TString &pfp, UInt_t prescaler, Bool_t allrare, UInt_t timegroup,UInt_t timewindow) : TNamed( name, name ), @@ -112,7 +116,6 @@ AliTriggerClass::AliTriggerClass( AliTriggerConfiguration *config, fDescriptor( NULL ), fCluster( NULL ), fPFProtection( NULL ), - fMask( NULL ), fPrescaler( prescaler ), fAllRare( allrare ), fStatus(kFALSE), @@ -124,11 +127,9 @@ AliTriggerClass::AliTriggerClass( AliTriggerConfiguration *config, pfp.ReplaceAll("{",""); pfp.ReplaceAll("}",""); fPFProtection = (AliTriggerPFProtection*)config->GetPFProtections().FindObject(pfp); - mask.ReplaceAll("{",""); - mask.ReplaceAll("}",""); - fMask = (AliTriggerBCMask*)config->GetMasks().FindObject(mask); + // masks are added by seter + for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0; } - //_____________________________________________________________________________ AliTriggerClass::~AliTriggerClass() { @@ -142,7 +143,6 @@ AliTriggerClass::AliTriggerClass( const AliTriggerClass& trclass ): fDescriptor(trclass.fDescriptor), fCluster(trclass.fCluster), fPFProtection(trclass.fPFProtection), - fMask(trclass.fMask), fPrescaler(trclass.fPrescaler), fAllRare(trclass.fAllRare), fStatus(trclass.fStatus), @@ -150,8 +150,8 @@ AliTriggerClass::AliTriggerClass( const AliTriggerClass& trclass ): fTimeWindow(trclass.fTimeWindow) { // Copy constructor + for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=trclass.fMask[i]; } - //______________________________________________________________________________ AliTriggerClass& AliTriggerClass::operator=(const AliTriggerClass& trclass) { @@ -164,7 +164,7 @@ AliTriggerClass& AliTriggerClass::operator=(const AliTriggerClass& trclass) fDescriptor = trclass.fDescriptor; fCluster = trclass.fCluster; fPFProtection = trclass.fPFProtection; - fMask = trclass.fMask; + for(Int_t i=0; i< kNMaxMasks; i++)fMask[i]=trclass.fMask[i]; fPrescaler = trclass.fPrescaler; fAllRare = trclass.fAllRare; fStatus = trclass.fStatus; @@ -173,7 +173,37 @@ AliTriggerClass& AliTriggerClass::operator=(const AliTriggerClass& trclass) } return *this; } - +//_____________________________________________________________________________ +Bool_t AliTriggerClass::SetMasks(AliTriggerConfiguration* config,TString& masks) +{ + masks.ReplaceAll("{",""); + masks.ReplaceAll("}",""); + masks.ReplaceAll(" ",""); + masks.ReplaceAll("\t",""); + TObjArray *tokens = masks.Tokenize(","); + Int_t ntokens = tokens->GetEntriesFast(); + if(ntokens==0){ + delete tokens; + AliError(Form("The class (%s) has invalid mask pattern: (%s)",GetName(),masks.Data())); + return kFALSE; + } + Int_t nmask=0; + while(fMask[nmask])nmask++; + if(nmask+ntokens>=kNMaxMasks){ + delete tokens; + AliError(Form("The class (%s) exceeds %i masks",GetName(),kNMaxMasks)); + return kFALSE; + } + for(Int_t i=nmask; iGetMasks().FindObject(((TObjString*)tokens->At(i-nmask))->String()); + if(!fMask[i]){ + AliError(Form("The class (%s) unknown mask %s",GetName(),(((TObjString*)tokens->At(i-nmask))->String().Data()))); + return kFALSE; + } + } + delete tokens; + return kTRUE; +} //_____________________________________________________________________________ Bool_t AliTriggerClass::CheckClass(AliTriggerConfiguration* config) const { @@ -209,12 +239,15 @@ Bool_t AliTriggerClass::CheckClass(AliTriggerConfiguration* config) const AliError(Form("The class (%s) contains invalid past-future protection !",GetName())); return kFALSE; } - - if (!config->GetMasks().FindObject(fMask)) { - AliError(Form("The class (%s) contains invalid BC mask !",GetName())); - return kFALSE; + + for(Int_t i=0; i< kNMaxMasks; i++){ + if(fMask[i]){ + if (!config->GetMasks().FindObject(fMask[i])) { + AliError(Form("The class (%s) contains invalid BC mask !",GetName())); + return kFALSE; + } + } } - return kTRUE; } @@ -246,7 +279,9 @@ void AliTriggerClass::Print( const Option_t* ) const cout << " Descriptor: " << fDescriptor->GetName() << endl; cout << " Cluster: " << fCluster->GetName() << endl; cout << " PF Protection:" << fPFProtection->GetName() << endl; - cout << " BC Mask: " << fMask->GetName() << endl; + cout << " BC Mask: " ; + for(Int_t i=0; i< kNMaxMasks; i++)if(fMask[i])cout << fMask[i]->GetName() << " "; + cout << endl; cout << " Prescaler: " << fPrescaler << endl; cout << " AllRare: " << fAllRare << endl; cout << " Time Group: " << fTimeGroup << endl; diff --git a/STEER/ESD/AliTriggerClass.h b/STEER/ESD/AliTriggerClass.h index 546fabf1a21..673097c1475 100644 --- a/STEER/ESD/AliTriggerClass.h +++ b/STEER/ESD/AliTriggerClass.h @@ -39,7 +39,7 @@ public: AliTriggerClass( AliTriggerConfiguration *config, TString & name, UChar_t index, TString &desc, TString &clus, - TString &pfp, TString &mask, + TString &pfp, UInt_t prescaler, Bool_t allrare, UInt_t timegroup, UInt_t timewindow); @@ -54,29 +54,32 @@ public: ULong64_t GetMask() const { return fClassMask; } AliTriggerDescriptor* GetDescriptor() const { return fDescriptor; } AliTriggerCluster* GetCluster() const { return fCluster; } - AliTriggerBCMask* GetBCMask() const { return fMask; } + AliTriggerBCMask* GetBCMask() const { return fMask[0]; } UInt_t GetTimeGroup() const { return fTimeGroup; } UInt_t GetTimeWindow() const { return fTimeGroup; } + Bool_t SetMasks(AliTriggerConfiguration *config,TString &mask); void Trigger( const TObjArray& inputs , const TObjArray& functions); void Print( const Option_t* ) const; Bool_t CheckClass(AliTriggerConfiguration *config) const; Bool_t IsActive( const TObjArray& inputs, const TObjArray& functions) const; + enum {kNMaxMasks = 13}; // CTP handles up to 12 different BC masks + NONE + private: ULong64_t fClassMask; // trigger mask (1<< (index-1)) UChar_t fIndex; // position of class in mask AliTriggerDescriptor* fDescriptor; // pointer to the descriptor AliTriggerCluster* fCluster; // pointer to the cluster AliTriggerPFProtection* fPFProtection; // pointer to the past-future protection - AliTriggerBCMask* fMask; // pointer to bunch-crossing mask + AliTriggerBCMask* fMask[kNMaxMasks]; // array of pinters pointer to bunch-crossing mask UInt_t fPrescaler; // Downscaling factor Bool_t fAllRare; // All or Rare trigger Bool_t fStatus; //! true = Condition has been satisfied after Trigger UInt_t fTimeGroup; // time group UInt_t fTimeWindow; // the size of time window for its group - ClassDef( AliTriggerClass, 4 ) // Define a trigger class object + ClassDef( AliTriggerClass, 5 ) // Define a trigger class object }; #endif diff --git a/STEER/ESD/AliTriggerConfiguration.cxx b/STEER/ESD/AliTriggerConfiguration.cxx index 0c4025f8e68..59c6c759447 100755 --- a/STEER/ESD/AliTriggerConfiguration.cxx +++ b/STEER/ESD/AliTriggerConfiguration.cxx @@ -230,7 +230,7 @@ Bool_t AliTriggerConfiguration::AddFunction(AliTriggerInteraction *func) AliError("Invalid logical function ! Impossible to add it !"); } else - AliError("CTP can handle up to 2 logical functions ! Impossible to add the required interaction !"); + AliError("CTP can handle up to 4 logical functions ! Impossible to add the required interaction !"); return kFALSE; } @@ -274,12 +274,12 @@ 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+1)) { //+1 to account for NONE + if (fMasks.GetEntries() < (kNMaxMasks)) { fMasks.AddLast( mask ); return kTRUE; } else - AliError("CTP can handle up to 4 bunch-crossing masks ! Impossible to add the required mask !"); + AliError("CTP can handle up to 12 bunch-crossing masks ! Impossible to add the required mask !"); return kFALSE; } @@ -595,12 +595,12 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t } if (((TObjString*)tokens->At(0))->String().BeginsWith("l0f")) { // function - AddFunction(((TObjString*)tokens->At(0))->String(), - strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),"")); + if(!AddFunction(((TObjString*)tokens->At(0))->String(), + strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),""))) return kFALSE; } else { - AddDescriptor(((TObjString*)tokens->At(0))->String(), - strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),"")); + if(!AddDescriptor(((TObjString*)tokens->At(0))->String(), + strLine.ReplaceAll(((TObjString*)tokens->At(0))->String(),""))) return kFALSE; } break; case 4: @@ -677,11 +677,10 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t } if (((TObjString*)tokens->At(0))->String().CompareTo("NONE") == 0) { - AddMask(new AliTriggerBCMask(((TObjString*)tokens->At(0))->String())); + if(!AddMask(new AliTriggerBCMask(((TObjString*)tokens->At(0))->String()))) return kFALSE; } else { - AddMask(((TObjString*)tokens->At(0))->String(), - ((TObjString*)tokens->At(1))->String()); + if(!AddMask(((TObjString*)tokens->At(0))->String(),((TObjString*)tokens->At(1))->String())) return kFALSE; } break; case 7: @@ -696,13 +695,15 @@ Bool_t AliTriggerConfiguration::ProcessConfigurationLine(const char* line, Int_t ((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(7))->String().Atoi())); - else trclass = new AliTriggerClass(this, + else{ 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(4))->String(), ((TObjString*)tokens->At(6))->String().Atoi(),(Bool_t)(((TObjString*)tokens->At(7))->String().Atoi()), (((TObjString*)tokens->At(8))->String().Atoi()),(((TObjString*)tokens->At(9))->String().Atoi())); - AddClass(trclass); + if(!trclass->SetMasks(this,((TObjString*)tokens->At(5))->String())) return kFALSE; + } + AddClass(trclass); } default: break; diff --git a/STEER/ESD/AliTriggerConfiguration.h b/STEER/ESD/AliTriggerConfiguration.h index b799edbcede..ae445367bd1 100755 --- a/STEER/ESD/AliTriggerConfiguration.h +++ b/STEER/ESD/AliTriggerConfiguration.h @@ -105,11 +105,11 @@ public: enum {kNMaxInputs = 60}; // CTP handles up to 60 trigger detector inputs enum {kNMaxInteractions = 2}; // CTP handles up to two different interactions - enum {kNMaxFunctions = 2}; // CTP handles up to two different logical functions + enum {kNMaxFunctions = 4}; // CTP handles up to 4 different logical functions enum {kNMaxClasses = 50}; // Maximum number of trigger classes = 50 enum {kNMaxClusters = 6}; // Maximum number of different detector clusters that can be handled by CTP enum {kNMaxPFProtections = 4}; // Maximum number of different past-future protections that can be handled by CTP - enum {kNMaxMasks = 4}; // CTP handles up to 4 different BC masks + enum {kNMaxMasks = 13}; // CTP handles up to 12 different BC masks + NONE private: Bool_t ProcessConfigurationLine(const char* line, Int_t& level); diff --git a/STEER/ESD/AliTriggerInteraction.cxx b/STEER/ESD/AliTriggerInteraction.cxx index 50af7fde5e3..0aeb322597d 100644 --- a/STEER/ESD/AliTriggerInteraction.cxx +++ b/STEER/ESD/AliTriggerInteraction.cxx @@ -89,7 +89,7 @@ Bool_t AliTriggerInteraction::CheckInputs(const TObjArray &inputs) const delete tokens; return kFALSE; } - if (inp->GetMask() == 0 || inp->GetMask() > 16) { + if (inp->GetMask() == 0 || inp->GetMask() > (1<<24)) { // New l0f can use all inputs AliError( Form( "The trigger input (%s) is not among the first 4 trigger inputs used to create interactions. Interaction (%s) is invalid", iname->String().Data(), GetName() ) ); delete tokens; -- 2.43.0