Adding kAliHLTDataTypeTrack as valid input. Conversion of the input data to
authorrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 10 Jul 2009 23:43:43 +0000 (23:43 +0000)
committerrichterm <richterm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 10 Jul 2009 23:43:43 +0000 (23:43 +0000)
AliKalmanFilter objects is done by using AliHLTGlobalBarrelTrack. Adding the
correct library dependencies because the trigger lib now needs the Util lib.

Added argument scan and default OCDB entry for AliHLTTriggerBarrelMultiplicity component.

Correcting compilation warning in AliHLTTriggerAgent.

HLT/libAliHLTTrigger.pkg
HLT/trigger/AliHLTTriggerAgent.h
HLT/trigger/AliHLTTriggerBarrelMultiplicity.cxx
HLT/trigger/AliHLTTriggerBarrelMultiplicity.h
HLT/trigger/Makefile.am
OCDB/HLT/ConfigHLT/BarrelMultiplicityTrigger/Run0_999999999_v0_s0.root [new file with mode: 0644]

index 2d8c973..447c25e 100644 (file)
@@ -44,7 +44,7 @@ MODULE_HDRS:=         $(CLASS_HDRS)
 # enable automatic generation. 
 MODULE_DHDR:=  AliHLTTriggerLinkDef.h
 
-EINCLUDE := HLT/BASE HLT/trigger HLT/TPCLib
+EINCLUDE := HLT/BASE HLT/BASE/util HLT/trigger HLT/TPCLib
 
 LIBRARY_DEP := -lHLTbase
 
index 8741202..3838cd3 100644 (file)
@@ -105,6 +105,11 @@ class AliHLTTriggerAgent : public AliHLTModuleAgent {
     int ReleaseProcessedData(const AliHLTUInt8_t* pData, int size);
 
   private:
+    /** copy constructor forbidden */
+    AliHLTTriggerDecisionHandler(const AliHLTTriggerDecisionHandler&);
+    /** assignment operator forbidden */
+    AliHLTTriggerDecisionHandler& operator=(const AliHLTTriggerDecisionHandler&);
+
     AliESDEvent* fESD; //!
     TArrayC* fpData;  //!
     int fSize; //!
index cfcf806..02e87df 100644 (file)
@@ -31,6 +31,7 @@
 #include "AliESDEvent.h"
 #include "AliHLTTriggerDecision.h"
 #include "AliHLTDomainEntry.h"
+#include "AliHLTGlobalBarrelTrack.h"
 
 /** ROOT macro for the implementation of ROOT specific class methods */
 ClassImp(AliHLTTriggerBarrelMultiplicity)
@@ -48,6 +49,8 @@ AliHLTTriggerBarrelMultiplicity::AliHLTTriggerBarrelMultiplicity()
   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
 }
 
+const char* AliHLTTriggerBarrelMultiplicity::fgkOCDBEntry="HLT/ConfigHLT/BarrelMultiplicityTrigger";
+
 AliHLTTriggerBarrelMultiplicity::~AliHLTTriggerBarrelMultiplicity()
 {
   // see header file for class documentation
@@ -68,22 +71,41 @@ AliHLTComponent* AliHLTTriggerBarrelMultiplicity::Spawn()
 int AliHLTTriggerBarrelMultiplicity::DoTrigger()
 {
   // see header file for class documentation
+  int iResult=0;
+  int numberOfTracks=-1;
+
+  // try the ESD as input
   const TObject* obj = GetFirstInputObject(kAliHLTAllDataTypes, "AliESDEvent");
   AliESDEvent* esd = dynamic_cast<AliESDEvent*>(const_cast<TObject*>(obj));
   TString description;
   TString ptcut;
   if (esd != NULL) {
+    numberOfTracks=0;
     esd->GetStdContent();
     
-    unsigned int numberOfTracks=0;
     for (Int_t i = 0; i < esd->GetNumberOfTracks(); i++) {
-      AliESDtrack* track = esd->GetTrack(i);
-      if (track && track->Pt() >= fPtMin &&
-         (fPtMax<=fPtMin || track->Pt() < fPtMax)) {
-       numberOfTracks++;
+      if (CheckCondition(esd->GetTrack(i))) numberOfTracks++;
+    }
+  }
+
+  // try the AliHLTExternal track data as input
+  if (iResult>=0 && numberOfTracks<0) {
+    for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(kAliHLTDataTypeTrack);
+        pBlock!=NULL; pBlock=GetNextInputBlock()) {
+      vector<AliHLTGlobalBarrelTrack> tracks;
+      if ((iResult=AliHLTGlobalBarrelTrack::ConvertTrackDataArray(reinterpret_cast<const AliHLTTracksData*>(pBlock->fPtr), pBlock->fSize, tracks))>0) {
+       for (vector<AliHLTGlobalBarrelTrack>::iterator element=tracks.begin();
+            element!=tracks.end(); element++) {
+         if (CheckCondition(&(*element))) numberOfTracks++;
+       }
+      } else if (iResult<0) {
+       HLTError("can not extract tracks from data block of type %s (specification %08x) of size %d: error %d", 
+                DataType2Text(pBlock->fDataType).c_str(), pBlock->fSpecification, pBlock->fSize, iResult);
       }
     }
+  }
 
+  if (iResult>=0 && numberOfTracks>=0) {
     if (fPtMax>fPtMin) {
       ptcut.Form(" %.02f GeV/c <= pt < %.02f GeV/c", fPtMin, fPtMax);
     } else {
@@ -109,10 +131,88 @@ int AliHLTTriggerBarrelMultiplicity::DoTrigger()
       TriggerEvent(true);
       return 0;
     }
+    description.Form("No tracks matching the tresholds found in the central barrel (min tracks %d, %s)",
+                    fMinTracks, ptcut.Data());
+  } else {
+    description.Form("No input blocks found");
   }
-  description.Form("No tracks matching the tresholds found in the central barrel (min tracks %d, %s)",
-                  fMinTracks, ptcut.Data());
   SetDescription(description.Data());
   TriggerEvent(false);
+  return iResult;
+}
+
+template<class T>
+bool AliHLTTriggerBarrelMultiplicity::CheckCondition(T* track)
+{
+  // see header file for class documentation
+  if (track && track->Pt() >= fPtMin &&
+      (fPtMax<=fPtMin || track->Pt() < fPtMax)) {
+    return true;
+  }
+  return false;
+}
+
+int AliHLTTriggerBarrelMultiplicity::DoInit(int argc, const char** argv)
+{
+  // see header file for class documentation
+
+  // first configure the default
+  int iResult=ConfigureFromCDBTObjString(fgkOCDBEntry);
+
+  // configure from the command line parameters if specified
+  if (iResult>=0 && argc>0)
+    iResult=ConfigureFromArgumentString(argc, argv);
+  return iResult;
+}
+
+int AliHLTTriggerBarrelMultiplicity::DoDeinit()
+{
+  // see header file for class documentation
   return 0;
 }
+
+int AliHLTTriggerBarrelMultiplicity::Reconfigure(const char* cdbEntry, const char* /*chainId*/)
+{
+  // see header file for class documentation
+
+  // configure from the specified antry or the default one
+  const char* entry=cdbEntry;
+  if (!entry || entry[0]==0) entry=fgkOCDBEntry;
+
+  return ConfigureFromCDBTObjString(entry);
+}
+
+int AliHLTTriggerBarrelMultiplicity::ScanConfigurationArgument(int argc, const char** argv)
+{
+  // see header file for class documentation
+  if (argc<=0) return 0;
+  int i=0;
+  TString argument=argv[i];
+
+  // -maxpt
+  if (argument.CompareTo("-maxpt")==0) {
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fPtMax=argument.Atof();
+    return 2;
+  }    
+
+  // -minpt
+  if (argument.CompareTo("-minpt")==0) {
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fPtMin=argument.Atof();
+    return 2;
+  }    
+
+  // -mintracks
+  if (argument.CompareTo("-mintracks")==0) {
+    if (++i>=argc) return -EPROTO;
+    argument=argv[i];
+    fMinTracks=argument.Atoi();
+    return 2;
+  }    
+  
+  // unknown argument
+  return -EINVAL;
+}
index f9aca35..4c2a79b 100644 (file)
@@ -14,6 +14,8 @@
 
 #include "AliHLTTrigger.h"
 
+class AliESDtrack;
+
 /**
  * @class  AliHLTTriggerBarrelMultiplicity
  * HLT trigger component for charged particle multiplicity in the
@@ -32,16 +34,37 @@ class AliHLTTriggerBarrelMultiplicity : public AliHLTTrigger
   /// inherited from AliHLTComponent: create an instance
   virtual AliHLTComponent* Spawn();
 
+ protected:
+  /// inherited from AliHLTComponent: handle the initialization
+  int DoInit(int argc, const char** argv);
+
+  /// inherited from AliHLTComponent: handle cleanup
+  int DoDeinit();
+
+  /// inherited from AliHLTComponent: handle re-configuration event
+  int Reconfigure(const char* cdbEntry, const char* chainId);
+
+  /// inherited from AliHLTComponent, scan one argument and
+  /// its parameters
+  int ScanConfigurationArgument(int argc, const char** argv);
+
  private:
   /// inherited from AliHLTTrigger: calculate the trigger
   virtual int DoTrigger();
 
+  /// check whether a track meets the criteria
+  template<class T>
+  bool CheckCondition(T* track);
+
   /// pt cut, minimum
   float fPtMin; //! transient
   /// pt cut, maximum
   float fPtMax; //! transient
   /// required number of tracks
-  unsigned int fMinTracks; //!tracks
+  int fMinTracks; //!transient
+
+  /// the default configuration entry for this component
+  static const char* fgkOCDBEntry; //!transient
 
   ClassDef(AliHLTTriggerBarrelMultiplicity, 0)
 };
index 8f2bf38..4db49db 100644 (file)
@@ -74,7 +74,7 @@ AM_CPPFLAGS                   = -DMODULE=$(MODULE) \
 # using external modules. The AliRoot, ROOT and HLT base libraries
 # are added by default.
 # Also the version of the library 
-#libAliHLTTPC_la_LIBADD                = $(top_builddir)/BASE/TPCLib/libAliHLTTPC.la
+libAliHLTTrigger_la_LIBADD     = $(top_builddir)/BASE/util/libAliHLTUtil.la
 libAliHLTTrigger_la_LDFLAGS    = -L@ROOTLIBDIR@ \
                                  @ROOTLIBS@ \
                                  @HLTBASE_LDFLAGS@ \
diff --git a/OCDB/HLT/ConfigHLT/BarrelMultiplicityTrigger/Run0_999999999_v0_s0.root b/OCDB/HLT/ConfigHLT/BarrelMultiplicityTrigger/Run0_999999999_v0_s0.root
new file mode 100644 (file)
index 0000000..83d9510
Binary files /dev/null and b/OCDB/HLT/ConfigHLT/BarrelMultiplicityTrigger/Run0_999999999_v0_s0.root differ