- TRDCluster Multiplicity Trigger (Theodor Rascanu)
authorkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 30 Sep 2009 15:43:29 +0000 (15:43 +0000)
committerkkanaki <kkanaki@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 30 Sep 2009 15:43:29 +0000 (15:43 +0000)
HLT/libAliHLTTrigger.pkg
HLT/trigger/AliHLTTriggerAgent.cxx
HLT/trigger/AliHLTTriggerLinkDef.h
HLT/trigger/AliHLTTriggerTrdClusterMultiplicity.cxx [new file with mode: 0644]
HLT/trigger/AliHLTTriggerTrdClusterMultiplicity.h [new file with mode: 0644]

index be1a7ea..ca72edc 100644 (file)
@@ -23,7 +23,8 @@ CLASS_HDRS:= \
                 AliHLTTriggerSelectiveReadoutComponent.h    \
                 AliHLTTriggerMonitoringComponent.h          \
                AliHLTTriggerPhosClusterEnergy.h            \
-               AliHLTTriggerPhosMip.h            
+               AliHLTTriggerPhosMip.h                      \
+               AliHLTTriggerTrdClusterMultiplicity.h
 
 
 # library sources
@@ -46,9 +47,9 @@ MODULE_HDRS:=         $(CLASS_HDRS)
 # enable automatic generation. 
 MODULE_DHDR:=  AliHLTTriggerLinkDef.h
 
-EINCLUDE := HLT/BASE HLT/BASE/util HLT/trigger HLT/TPCLib
+EINCLUDE := HLT/BASE HLT/BASE/util HLT/trigger HLT/TPCLib HLT/TRD TRD
 
-LIBRARY_DEP := -lHLTbase
+LIBRARY_DEP := -lHLTbase 
 
 ###############################################################################
 #
index 205226f..4a8acd1 100644 (file)
@@ -40,6 +40,7 @@
 #include "AliHLTGlobalTriggerComponent.h"
 #include "AliHLTTriggerPhosClusterEnergy.h"
 #include "AliHLTTriggerPhosMip.h"
+#include "AliHLTTriggerTrdClusterMultiplicity.h"
 
 /** global instance for agent registration */
 AliHLTTriggerAgent gAliHLTTriggerAgent;
@@ -73,6 +74,7 @@ int AliHLTTriggerAgent::RegisterComponents(AliHLTComponentHandler* pHandler) con
   pHandler->AddComponent(new AliHLTTriggerBarrelCosmic);
   pHandler->AddComponent(new AliHLTTriggerPhosClusterEnergy); 
   pHandler->AddComponent(new AliHLTTriggerPhosMip); 
+  pHandler->AddComponent(new AliHLTTriggerTrdClusterMultiplicity); 
   return 0;
 }
 
index 652c2d4..9ced67d 100644 (file)
@@ -18,4 +18,5 @@
 #pragma link C++ class AliHLTTriggerMonitoringComponent+;
 #pragma link C++ class AliHLTTriggerPhosClusterEnergy+;
 #pragma link C++ class AliHLTTriggerPhosMip+;
+#pragma link C++ class AliHLTTriggerTrdClusterMultiplicity+;
 #endif
diff --git a/HLT/trigger/AliHLTTriggerTrdClusterMultiplicity.cxx b/HLT/trigger/AliHLTTriggerTrdClusterMultiplicity.cxx
new file mode 100644 (file)
index 0000000..40cd407
--- /dev/null
@@ -0,0 +1,198 @@
+// $Id$
+//-*- Mode: C++ -*-
+//**************************************************************************
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//*                                                                        *
+//* Primary Authors: Svein Lindal <svein.lindal@fys.uio.no>                 *
+//*                  for The ALICE HLT Project.                            *
+//*                                                                        *
+//* Permission to use, copy, modify and distribute this software and its   *
+//* documentation strictly for non-commercial purposes is hereby granted   *
+//* without fee, provided that the above copyright notice appears in all   *
+//* copies and that both the copyright notice and this permission notice   *
+//* appear in the supporting documentation. The authors make no claims     *
+//* about the suitability of this software for any purpose. It is          *
+//* provided "as is" without express or implied warranty.                  *
+//**************************************************************************
+
+/// @file   AliHLTTriggerTrdClusterMultiplicity.cxx
+/// @author Svein Lindal
+/// @date   2009-08-19
+/// @brief  HLT Minimum Ionizing Particle (MIP) trigger for PHOS
+
+// see header file for class documentation
+// or
+// refer to README to build package
+// or
+// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
+
+
+#include "AliHLTTriggerTrdClusterMultiplicity.h"
+#include "AliHLTTriggerDecision.h"
+#include "AliHLTDomainEntry.h"
+#include "AliHLTTRDDefinitions.h"
+#include "AliHLTTRDUtils.h"
+#include "AliHLTTRDCluster.h"
+#include "AliTRDgeometry.h"
+#include "TObjString.h"
+
+/** ROOT macro for the implementation of ROOT specific class methods */
+ClassImp(AliHLTTriggerTrdClusterMultiplicity)
+
+AliHLTTriggerTrdClusterMultiplicity::AliHLTTriggerTrdClusterMultiplicity() 
+  : AliHLTTrigger()
+  , fClusterMult(10)
+  , fClusterArray(NULL)
+{
+  // see header file for class documentation
+  // or
+  // refer to README to build package
+  // or
+  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlts
+}
+
+AliHLTTriggerTrdClusterMultiplicity::~AliHLTTriggerTrdClusterMultiplicity()
+{
+  // see header file for class documentation
+}
+
+const char* AliHLTTriggerTrdClusterMultiplicity::GetTriggerName() const
+{
+  // see header file for class documentation
+  return "TrdClusterMultiplicityTrigger";
+}
+
+AliHLTComponent* AliHLTTriggerTrdClusterMultiplicity::Spawn()
+{
+  // see header file for class documentation
+  return new AliHLTTriggerTrdClusterMultiplicity;
+}
+
+int AliHLTTriggerTrdClusterMultiplicity::DoTrigger()
+{
+  // see header file for class documentation
+
+  TString description;
+
+  for (const AliHLTComponentBlockData* pBlock=GetFirstInputBlock(AliHLTTRDDefinitions::fgkClusterDataType);
+       pBlock!=NULL; pBlock=GetNextInputBlock()) {
+
+    AliHLTTRDUtils::ReadClusters(fClusterArray, pBlock->fPtr, pBlock->fSize);
+
+    AliTRDcluster* inCluster;
+    Int_t stack[5] = {0,0,0,0,0};
+    for(Int_t count=0; count<fClusterArray->GetEntriesFast(); count++)
+      {
+       inCluster=(AliTRDcluster*)fClusterArray->UncheckedAt(count);
+       stack[AliTRDgeometry::GetStack(inCluster->GetDetector())]++;
+      }
+
+    Bool_t trigger=kFALSE;
+    for(Int_t count=0; count<5; count++)
+      {
+       if(stack[count]>fClusterMult)trigger=kTRUE;
+      }
+
+    if(trigger){
+      description.Form("Event contains at least one stack with at least %i TRD clusters", fClusterMult);
+      SetDescription(description.Data());
+       
+      // Enable the detectors for readout.
+      GetReadoutList().Enable( AliHLTReadoutList::kTRD );
+       
+      // Add the available HLT information for readout too.
+      GetTriggerDomain().Add(kAliHLTAnyDataTypeID, "TRD");
+       
+      //Set trigger decision
+      TriggerEvent(true);
+
+    }else{
+      description.Form("No stack in this event contains enough clusters");
+      SetDescription(description.Data());
+      TriggerEvent(false);
+    }
+    
+    HLTDebug(description.Data());
+    fClusterArray->Delete();
+
+    return 0;
+  }
+  return 0;
+}
+
+int AliHLTTriggerTrdClusterMultiplicity::DoInit(int argc, const char** argv)
+{
+  // see header file for class documentation
+  int iResult=0;
+
+  TString configuration="";
+  TString argument="";
+  for (int i=0; i<argc && iResult>=0; i++) {
+    argument=argv[i];
+    if (!configuration.IsNull()) configuration+=" ";
+    configuration+=argument;
+  }
+
+  if (!configuration.IsNull()) {
+    iResult=Configure(configuration.Data());
+  }
+
+  fClusterArray = new TClonesArray("AliTRDcluster");
+  return 0;
+}
+
+int AliHLTTriggerTrdClusterMultiplicity::DoDeinit()
+{
+  // see header file for class documentation
+
+  fClusterArray->Delete();
+  delete fClusterArray;
+
+  return 0;
+}
+
+int AliHLTTriggerTrdClusterMultiplicity::Reconfigure(const char* /*cdbEntry*/, const char* /*chainId*/)
+{
+  // see header file for class documentation
+
+  // configure from the specified antry or the default one
+  return 0;
+}
+
+int AliHLTTriggerTrdClusterMultiplicity::Configure(const char* arguments){
+  int iResult=0;
+  if (!arguments) return iResult;
+  
+  TString allArgs=arguments;
+  TString argument;
+  int bMissingParam=0;
+
+  TObjArray* pTokens=allArgs.Tokenize(" ");
+  if (pTokens) {
+    for (int i=0; i<pTokens->GetEntries() && iResult>=0; i++) {
+      argument=((TObjString*)pTokens->At(i))->GetString();
+      if (argument.IsNull()) continue;
+
+      if (argument.CompareTo("-MultiplicityThresh")==0) {
+       if ((bMissingParam=(++i>=pTokens->GetEntries()))) break;
+       HLTInfo("Setting multiplicity threshold to: %s", ((TObjString*)pTokens->At(i))->GetString().Data());
+       fClusterMult=((TObjString*)pTokens->At(i))->GetString().Atoi();
+       continue;
+      } 
+
+      else {
+       HLTError("unknown argument: %s", argument.Data());
+       iResult=-EINVAL;
+       break;
+      }
+    }
+    delete pTokens;
+  }
+  if (bMissingParam) {
+    HLTError("missing parameter for argument %s", argument.Data());
+    iResult=-EINVAL;
+  }
+  return iResult;
+}
diff --git a/HLT/trigger/AliHLTTriggerTrdClusterMultiplicity.h b/HLT/trigger/AliHLTTriggerTrdClusterMultiplicity.h
new file mode 100644 (file)
index 0000000..393414b
--- /dev/null
@@ -0,0 +1,103 @@
+// $Id$
+//-*- Mode: C++ -*-
+#ifndef ALIHLTTRIGGERTRDCLUSTERMULT_H
+#define ALIHLTTRIGGERTRDCLUSTERMULT_H
+//* This file is property of and copyright by the ALICE HLT Project        * 
+//* ALICE Experiment at CERN, All rights reserved.                         *
+//* See cxx source for full Copyright notice                               *
+
+/// @file   AliHLTTriggerPhosMip.h
+/// @author Svein Lindal
+/// @date   2009-08-17
+/// @brief  HLT Minimum Ionizing Particle (MIP) trigger for PHOS
+
+#include "AliHLTTrigger.h"
+
+/**
+ * @class  AliHLTTriggerPhosMip
+ * HLT trigger component for Minimum Ionizing Particles (MIPs) in PHOS.
+ * 
+ * Triggers on PHOS clusters containing total energy in the range
+ * fEMin < energy < fEMax spread out between fewer than fNCellsMax cells.
+ *
+ * <h2>General properties:</h2>
+ *
+ * Component ID: \b PhosMipTrigger                             <br>
+ * Library: \b libAliHLTTrigger.so                                        <br>
+ * Input Data Types:  kAliHLTDataTypeESDObject, kAliHLTDataTypeESDTree    <br>
+ * Output Data Types: ::kAliHLTAnyDataType                                <br>
+ *
+ * <h2>Mandatory arguments:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * <h2>Optional arguments:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ *
+ * <h2>Configuration:</h2>
+ * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
+ * \li -emin     <i> e   </i> <br>
+ *      minimum required energy of the cluster
+ *
+* \li -emax    <i> e   </i> <br>
+ *      maximum energy of the cluster
+ *
+ * \li -ncells     <i> e   </i> <br>
+ *      Maximum number of cells in cluster
+ *
+ * 
+ * By default, configuration is loaded from OCDB, can be overridden by
+ * component arguments.
+ *
+ * <h2>Default CDB entries:</h2>
+ * HLT/ConfigHLT/PhosMipTrigger: TObjString storing the arguments
+ *
+ * <h2>Performance:</h2>
+ * 
+ *
+ * <h2>Memory consumption:</h2>
+ * 
+ *
+ * <h2>Output size:</h2>
+ * 
+ *
+ * \ingroup alihlt_trigger_components
+ */
+
+class TClonesArray;
+class AliHLTTriggerTrdClusterMultiplicity : public AliHLTTrigger
+{
+public:
+  AliHLTTriggerTrdClusterMultiplicity();
+  ~AliHLTTriggerTrdClusterMultiplicity();
+
+
+  /// inherited from AliHLTTrigger: name of this trigger
+  virtual const char* GetTriggerName() const;
+  /// 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 AliHLTTrigger: calculate the trigger
+  virtual int DoTrigger();
+
+  int Configure(const char* arguments);
+
+  /// Variables for triggger configuration
+  Int_t fClusterMult;
+  TClonesArray* fClusterArray;
+
+  /// the default configuration entry for this component
+
+  ClassDef(AliHLTTriggerTrdClusterMultiplicity, 0)
+};
+
+#endif