]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliTriggerDescriptor.cxx
reading - writing CDB
[u/mrichter/AliRoot.git] / STEER / AliTriggerDescriptor.cxx
index feab539cb3276e7b7dbcbae928c5d220f64f33c4..cde6e9bdb235824e380a05819524ceac33b12610 100644 (file)
 /* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////////////
-//                                                                           
+//
 // This class for running and define a Trigger Descriptor 
-// 
+//
 // A Trigger Descriptor define a trigger setup for specific runnign
 // condition (Pb-Pb, p-p, p-A, Calibration, etc).
 // It keep:
 //    - cluster detector (List of detectors involved)
-//    - List of conditions                              
+//    - List of conditions
 //
 // Descriptors could be create in advance and store in a file.
 //
 //   Example how to create a Trigger Descriptor:
-//                                                                       
+//
 //   AliTriggerDescriptor descrip( "TEST", "Test Descriptor" );
 //
 //   // Define a Cluster Detector
@@ -44,7 +44,7 @@
 //                         "VO2_M3_ZDC1",
 //                         "Dummy",
 //                          0x0200 );
-//   
+//
 //   descrip.AddCondition( "VZERO_TEST3_L0 | MUON_Unlike_LPt_L0 | ZDC_TEST3_L0",
 //                         "VO3_M1_ZDC3",
 //                         "Dummy",
@@ -54,8 +54,8 @@
 //
 //   // save the descriptor to file 
 //   // (default file name $ALICE_ROOT/data/triggerDescriptor.root)
-//   AliTriggerDescriptor::WriteDescriptor( &descrip );
-//                                                                           
+//   descrip.WriteDescriptor(); or descrip.WriteDescriptor( filename );
+//
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TString.h>
@@ -79,27 +79,54 @@ ClassImp(AliTriggerDescriptor)
 
 //_____________________________________________________________________________
 const char* AliTriggerDescriptor::fgkDetectorName[AliTriggerDescriptor::fgkNDetectors] =
-             { "ITS", "TRD", "PHOS", "EMCAL", "MUON", "ZDC", "START", "VZERO", "CRT" };
+             { "ITS", "TRD", "PHOS", "EMCAL", "MUON", "ZDC", "T0", "VZERO", "ACORDE", "TOF" };
 
 const TString AliTriggerDescriptor::fgkDescriptorFileName("/data/triggerDescriptors.root");
 
 //_____________________________________________________________________________
 AliTriggerDescriptor::AliTriggerDescriptor():
-TNamed(), fDetectorCluster("")
+  TNamed(),
+  fDetectorCluster(""),
+  fConditions()
 {
 }
 
 //_____________________________________________________________________________
 AliTriggerDescriptor::AliTriggerDescriptor( TString & name, TString & description ):
-TNamed( name, description ), fDetectorCluster("")
+  TNamed( name, description ),
+  fDetectorCluster(""),
+  fConditions()
 {
 }
 
 //_____________________________________________________________________________
 AliTriggerDescriptor::AliTriggerDescriptor( const AliTriggerDescriptor& des ):
-TNamed( des ), fDetectorCluster( des.fDetectorCluster )
+  TNamed( des ),
+  fDetectorCluster( des.fDetectorCluster ),
+  fConditions()
 {
    // Copy constructor
+   Int_t ncond = des.fConditions.GetEntriesFast();
+   for( Int_t j=0; j<ncond; j++ ) {
+      AddCondition( new AliTriggerCondition( *(AliTriggerCondition*)(des.fConditions.At( j )) ) );
+   }
+}
+
+//______________________________________________________________________________
+AliTriggerDescriptor& AliTriggerDescriptor::operator=(const AliTriggerDescriptor& des)
+{
+   // AliTriggerDescriptor assignment operator.
+
+   if (this != &des) {
+      TNamed::operator=(des);
+      fDetectorCluster = des.fDetectorCluster;
+      fConditions.Delete();
+      Int_t ncond = des.fConditions.GetEntriesFast();
+      for( Int_t j=0; j<ncond; j++ ) {
+         AddCondition( new AliTriggerCondition( *(AliTriggerCondition*)(des.fConditions.At( j )) ) );
+      }
+   }
+   return *this;
 }
 
 //_____________________________________________________________________________
@@ -129,7 +156,7 @@ Bool_t AliTriggerDescriptor::AddDetectorCluster( TString & cluster )
 }
 
 //_____________________________________________________________________________
-void AliTriggerDescriptor::AddCondition( TString & cond, TString & name, TString & description, Long_t mask   )
+void AliTriggerDescriptor::AddCondition( TString & cond, TString & name, TString & description, ULong64_t mask   )
 {
    // Add a new condition
    AliTriggerCondition* acond = new AliTriggerCondition( cond, name, description, mask );
@@ -170,7 +197,7 @@ AliTriggerDescriptor* AliTriggerDescriptor::LoadDescriptor( TString & descriptor
 TObjArray* AliTriggerDescriptor::GetAvailableDescriptors( const char* filename )
 {
    // Return an array of descriptor in the file
-   
+
    TString path;
    if( !filename[0] ) {
       path += gSystem->Getenv( "ALICE_ROOT" );
@@ -185,13 +212,13 @@ TObjArray* AliTriggerDescriptor::GetAvailableDescriptors( const char* filename )
    }
 
    TObjArray* desArray = new TObjArray();
-   
+
    TFile file( path.Data(), "READ" );
    if( file.IsZombie() ) {
       AliErrorGeneral( "AliTriggerDescriptor", Form( "Error opening file (%s)", path.Data() ) );
       return NULL;
    }
-   
+
    file.ReadAll();
 
    TKey* key;
@@ -229,7 +256,7 @@ void AliTriggerDescriptor::WriteDescriptor( const char* filename )
                         Form( "Can't open file (%s)", path.Data() ) );
       return;
    }
-   
+
    Bool_t result = (Write( GetName(), TObject::kOverwrite ) != 0);
    if( !result )
       AliErrorGeneral( "AliTriggerDescriptor",
@@ -237,9 +264,6 @@ void AliTriggerDescriptor::WriteDescriptor( const char* filename )
    file.Close();
 }
 
-
-
-
 //_____________________________________________________________________________
 Bool_t AliTriggerDescriptor::CheckInputsConditions( TString& configfile )
 {
@@ -298,12 +322,23 @@ Bool_t AliTriggerDescriptor::CheckInputsConditions( TString& configfile )
 
    // check if the condition is compatible with the triggers inputs
    Int_t ncond = fConditions.GetEntriesFast();
+   Bool_t check = kTRUE;
+   ULong64_t mask = 0L;
    for( Int_t j=0; j<ncond; j++ ) {
       AliTriggerCondition* cond = (AliTriggerCondition*)(fConditions.At( j ));
-      if( !(cond->CheckInputs( inputs )) ) return kFALSE;
+      if( !(cond->CheckInputs( inputs )) ) check = kFALSE;
+      else AliInfo( Form( "Condition (%s) inputs names OK, class mask (0x%Lx)",
+                    cond->GetName(), cond->GetMask( ) ) );
+      // check if condition mask is duplicated
+      if( mask & cond->GetMask() ) {
+         AliError( Form("Condition (%s). The class mask (0x%Lx) is ambiguous. It was previous defined",
+                   cond->GetName(), cond->GetMask()  ) );
+         check = kFALSE;
+      }
+      mask |= cond->GetMask();
    }
 
-   return kTRUE;
+   return check;
 }