]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updates for new l0 firmware, more bcmasks,l0f.
authorlietava <lietava@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Feb 2012 16:11:41 +0000 (16:11 +0000)
committerlietava <lietava@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 23 Feb 2012 16:11:41 +0000 (16:11 +0000)
STEER/ESD/AliTriggerClass.cxx
STEER/ESD/AliTriggerClass.h
STEER/ESD/AliTriggerConfiguration.cxx
STEER/ESD/AliTriggerConfiguration.h
STEER/ESD/AliTriggerInteraction.cxx

index a36bf5ddefe8387f344f5e3095474bb11f7b2dc8..5444fe796fa6b223622f847ea2b09a1ad00baf5b 100644 (file)
@@ -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; i<nmask+ntokens; i++){
+    fMask[i] = (AliTriggerBCMask*)config->GetMasks().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;
index 546fabf1a210749033c688d033760aecdda97ef3..673097c1475abfcc53b9d52eb91dc3efa6c5ba65 100644 (file)
@@ -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
index 0c4025f8e682334d7308ea838f67dd692fcb2237..59c6c7594476ed09e0e7b2a9920ed22870993330 100755 (executable)
@@ -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;
index b799edbcedeac5c78791eb04dd4ca916b6a7b500..ae445367bd1ce90fe39543800ae57b0b1db05215 100755 (executable)
@@ -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);
index 50af7fde5e3afe740cdc16a8aecc78cf5deed7e3..0aeb322597d4361dd8308ccca02ef2a0b225986d 100644 (file)
@@ -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;