#ifndef ALITRDTRIGGERANALYSIS_H
#define ALITRDTRIGGERANALYSIS_H
-class AliESDEvent;
+class AliVEvent;
class AliTRDTriggerAnalysis : public TObject
{
AliTRDTriggerAnalysis();
~AliTRDTriggerAnalysis();
- enum TRDTrigger_t { kHCO = 0, kHJT, kHSE, kHQU, kHEE };
+ enum TRDTrigger_t { kHCO = 0, kHJT, kHSE, kHQU, kHEE, kHlast };
- void ResetTriggers() { fTriggerFlags = fTriggerInputs = fTriggerClasses = 0; }
- Bool_t CalcTriggers(const AliESDEvent* esdEvent);
+ void ResetTriggers();
+ Bool_t CalcTriggers(const AliVEvent* event);
- Bool_t IsFired(TRDTrigger_t trg) const { return (fTriggerFlags & (1 << trg)); }
+ Bool_t IsFired(TRDTrigger_t trg) const {
+ Obsolete("IsFired(...) is deprecated, use CheckCondition instead",
+ "now", "asap");
+ return CheckCondition(trg);
+ }
+
+ Bool_t HasTriggeredConfirmed(TRDTrigger_t trg) const {
+ return (HasTriggered(trg) && CheckCondition(trg));
+ }
+ Bool_t HasTriggered(TRDTrigger_t trg) const {
+ return (fTriggerClasses & (1 << trg));
+ }
+ Bool_t HasFired(TRDTrigger_t trg) const {
+ return (fTriggerInputs & (1 << trg));
+ }
+ Bool_t CheckCondition(TRDTrigger_t trg) const {
+ return (fTriggerFlags[2 * trg] | fTriggerFlags[2 * trg + 1]);
+ }
+ Bool_t CheckCondition(TRDTrigger_t trg, Int_t stack) const {
+ Int_t idx = 2 * trg + (stack / 64);
+ Int_t bit = stack % 64;
+ return (fTriggerFlags[idx] & (1ULL << bit));
+ }
+
+ Bool_t CheckTrgFlags(Int_t bit, Int_t sector) const {
+ return (fTriggerContribs[sector] & (1 << bit));
+ }
+
+ void SetRequireMatch(Bool_t val) { fRequireMatch = val; }
+ Bool_t GetRequireMatch() const { return fRequireMatch; }
+
+ void SetRequireMatchElectron(Bool_t val) { fRequireMatchElectron = val; }
+ Bool_t GetRequireMatchElectron() const { return fRequireMatchElectron; }
+
+ void SetRequireInTime(Bool_t val) { fRequireInTime = val; }
+ Bool_t GetRequireInTime() const { return fRequireInTime; }
+
+ void SetVerbosity(UChar_t val) { fVerbosity = val; }
+ UChar_t GetVerbosity() const { return fVerbosity; }
protected:
- void Fire(TRDTrigger_t trg) { fTriggerFlags |= (1 << trg); }
+ void MarkClass(TRDTrigger_t trg) { fTriggerClasses |= (1 << trg); }
+ void MarkInput(TRDTrigger_t trg) { fTriggerInputs |= (1 << trg); }
+ void MarkCondition(TRDTrigger_t trg, Int_t stack)
+ {
+ Int_t idx = 2 * trg + (stack / 64);
+ Int_t bit = stack % 64;
+ fTriggerFlags[idx] |= (1ULL << bit);
+ }
+
+
+ static const Int_t fgkNstacks = 90; // no. of TRD stacks (global)
+ ULong64_t fTriggerFlags[2 * kHlast]; //! internal representation of condition checks
+ UChar_t fTriggerInputs; //! internal representation of trigger inputs
+ UChar_t fTriggerClasses; //! internal representation of trigger classes
// configuration
- UChar_t fTriggerFlags; // internal representation of trigger decisions
- UChar_t fTriggerInputs; // internal representation of trigger decisions
- UChar_t fTriggerClasses; // internal representation of trigger decisions
+ UChar_t fVerbosity; // verbosity level
Bool_t fRequireMatch; // require a matched global track
// for all conditions
Bool_t fRequireMatchElectron; // require a matched global track
Bool_t fRequireInTime; // require the tracks to be in time
// trigger thresholds
+ UChar_t fTRDlayerMaskEl; // mask for tracklet requirements
+ UChar_t fTRDnTrackletsEl; // min. number of tracklets
Float_t fTRDptHSE; // pt threshold for HSE trigger
UChar_t fTRDpidHSE; // PID threshold for HSE trigger
Float_t fTRDptHQU; // pt threshold for HQU trigger
Float_t fTRDptHJT; // pt threshold for HJT trigger
UChar_t fTRDnHJT; // no of track threshold for HJT trigger
+ UInt_t fTriggerContribs[18]; // temporary for debugging !!!
+
ClassDef(AliTRDTriggerAnalysis, 1);
};