Back to index

See source file

CTriggerServer.h

 
//----------------------------------------------------------------------------- 
//  $Header: /asis/offline/ceres/cool/project/RCS/CTriggerServer.h,v 3.0 1996/10/02 09:39:49 voigt Exp $ 
// 
//  COOL Program Library   
//  Copyright (C) CERES collaboration, 1996 
// 
//  Declaration of class CTriggerServer. 
// 
//----------------------------------------------------------------------------- 
#ifndef CTRIGGERSERVER_H 
#define CTRIGGERSERVER_H 
 
#include <iostream.h> 
#include "cool.h"  
#include "rw/tvhdict.h" 
#include "rw/tvordvec.h" 
#include "CEventServer.h"  
#include "CMultDetector.h" 
#include "CTriggerSetup.h" 
 
#define C_SETUPFILE_TRIGGER        "setup.trigger" 
#define C_SETUPFILE_TRIGGERPATTERN "trigger.pattern" 
 
const int TriggerWord1Position = 13-4;			// trigger pattern in event label 
const int TriggerWord2Position = 14-4;                  // skip 4 header words... 
 
const int MaxTriggerPatterns = 2;			// max. number of trigger patterns 
enum  CTriggerLevel { trigFLT, trigMAIN };		// 'names' of trigger patterns 
 
const int MaxHTDCChannels = 15;				// max. channel-number in history TDC 
 
class CTriggerServer {  
public:  
   enum  CHTDCChan { htdcBC1,         htdcBC2, 
		     htdcVetoCounter, htdcVetoWall,  
		     htdcMultDet,     htdcMinBias, 
		     htdcDownStream,  htdcBC3, 
		     htdcN1,          htdcN2, 
		     htdcN3,          htdcN4, 
                     htdcSAC1,        htdcSAC2, 
                     htdcBC1Low }; 
 
   enum N2Type { good = 0, noBeamParticle, noN2Interaction, noMinBias, beamPileUp, 
		 minBiasPileUp, downstramInteractionPileUp }; 
    
public:  
   CTriggerServer(const char* = 0);  	  // creates CTriggerServer according to setup file 
   ~CTriggerServer();  
    
public:  
   CBoolean update(CEventServer&);        // unpack all detectors and other relevant info 
 
   void listSetup(ostream& = cout) const; // list current trigger setup    
 
   // 
   // information from multiplicity detector 
   // 
   float getMultiplicity(); 
   const CPaddle& getPaddles(int i) const { return md.getPaddles(i); } 
   CTriggerSetup* getSetup() const { return setup; } 
    
   // 
   // history TDC information 
   // 
   inline float getHTDCLength(CHTDCChan); 
   inline float getHTDCData  (CHTDCChan, int); 
   inline int   getTimeOfSecondBeamParticle() const; 
    
   int getBeamInWindow(int tlow, int tup);        // get # of beam particles from HTDC 
   int getN2InWindow  (int tlow, int tup);        // get # of interactions from HTDC 
   int getMinTime(int, int, int);                 // get min time difference betw, HTDC channel and t0 
    
   int isBadN2Interaction(int tBC=1500, int tMB=3500); 
   //  check if interaction is a good N2 trigger with  
   //  no pile up of beamparticle              within +/- tBC1 (ns) (default 1500 ns) and  
   //  no min. bias or down stream interaction within +/- tMB  (ns) (default 3500 ns) 
   //  return values: 0=ok, 1=noBeam, 2=noN2, 3=noMinBias, 4=dbleBeam, 5=dbleN2, 6=dbleDownStream 
    
    
   void printTriggerPattern(ostream& os = cout);        // prints formatted trigger pattern 
    
   inline CBoolean mainIsUV(); 
   inline CBoolean mainIsMT(); 
   inline CBoolean mainIsBeam(); 
   inline CBoolean mainIsFLT(); 
   inline CBoolean fltIsUV(); 
   inline CBoolean fltIsMT(); 
   inline CBoolean fltIsBeam(); 
   inline CBoolean fltIsMult(); 
   inline CBoolean multIsN4(); 
   inline CBoolean multIsN3(); 
   inline CBoolean multIsN2(); 
   inline CBoolean multIsN1(); 
   inline CBoolean beamIsHalo(); 
   inline CBoolean beamIsMinBias(); 
   inline CBoolean beamIsBeam(); 
   inline CBoolean beamIsMuon(); 
   inline CBoolean mtIsSoft(); 
   inline CBoolean mtIs50Hz(); 
   inline CBoolean mtIsClock(); 
   inline CBoolean mtIsRndm(); 
   inline CBoolean UVIsUV1lamp(); 
   inline CBoolean UVIsUV2lamp(); 
    
protected: 
   CTriggerServer(const CTriggerServer &);  
   CTriggerServer & operator = (const CTriggerServer &);  
    
protected:  
   CMultDetector md;                               // multiplicity detector info 
    
   int triggerPattern[MaxTriggerPatterns];         // trigger pattern 1 from event header 
   RWTValHashDictionary<RWCString, unsigned long>  // lookup table for names of trigger patterns  
      *trigPatt[MaxTriggerPatterns];    
   RWTValOrderedVector<float> hTDC[MaxHTDCChannels]; 
    
protected:  
   void readTriggerConfiguration();                // set pattern maps 
   void unpackTriggerPattern(CEventServer&);       // update protected member from event-header info 
   int  getNumberInWindow(int, int, int);          // number of entries in channel within time window 
   CBoolean unpackHTDC(CEventServer&); 
 
private: 
   CTriggerSetup *setup; 
   int timeOfSecondBeamParticle; 
   CBoolean warned[100]; 
};  
 
 
// 
//  Access functions for trigger 
// 
CBoolean CTriggerServer::mainIsUV()   { return (triggerPattern[trigMAIN] & (*trigPatt[trigMAIN])["main-uv-lamp"]); } 
CBoolean CTriggerServer::mainIsMT()   { return (triggerPattern[trigMAIN] & (*trigPatt[trigMAIN])["main-mt"]     ); } 
CBoolean CTriggerServer::mainIsBeam() { return (triggerPattern[trigMAIN] & (*trigPatt[trigMAIN])["main-beam"]   ); } 
CBoolean CTriggerServer::mainIsFLT()  { return (triggerPattern[trigMAIN] & (*trigPatt[trigMAIN])["main-flt"]    ); } 
CBoolean CTriggerServer::fltIsUV()   { return (triggerPattern[trigMAIN]& (*trigPatt[trigMAIN])["flt-uv-lamp"]); }  
CBoolean CTriggerServer::fltIsMT()   { return (triggerPattern[trigMAIN]& (*trigPatt[trigMAIN])["flt-mt"]     ); }  
CBoolean CTriggerServer::fltIsBeam() { return (triggerPattern[trigMAIN]& (*trigPatt[trigMAIN])["flt-beam"]   ); }  
CBoolean CTriggerServer::fltIsMult() { return (triggerPattern[trigMAIN]& (*trigPatt[trigMAIN])["flt-mult"]   ); } 
CBoolean CTriggerServer::multIsN1()      { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["n1"]      ); }  
CBoolean CTriggerServer::multIsN2()      { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["n2"]      ); }  
CBoolean CTriggerServer::multIsN3()      { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["n3"]      ); }  
CBoolean CTriggerServer::multIsN4()      { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["n4"]      ); }  
CBoolean CTriggerServer::beamIsHalo()    { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["halo"]    ); }  
CBoolean CTriggerServer::beamIsMinBias() { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["min-bias"]); }  
CBoolean CTriggerServer::beamIsBeam()    { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["beam"]    ); }  
CBoolean CTriggerServer::beamIsMuon()    { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["muon"]    ); }  
CBoolean CTriggerServer::mtIsSoft()    { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["soft"]    ); }  
CBoolean CTriggerServer::mtIs50Hz()    { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["50Hz"]    ); }  
CBoolean CTriggerServer::mtIsClock()   { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["clock"]   ); }  
CBoolean CTriggerServer::mtIsRndm()    { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["rndm"]    ); }  
CBoolean CTriggerServer::UVIsUV1lamp() { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["uv1-lamp"]); }  
CBoolean CTriggerServer::UVIsUV2lamp() { return (triggerPattern[trigFLT ] & (*trigPatt[trigFLT ])["uv2-lamp"]); }  
 
// 
//  Access functions  to history TDC values 
// 
float CTriggerServer::getHTDCLength(CHTDCChan chan)            { return hTDC[chan].length(); }  
float CTriggerServer::getHTDCData  (CHTDCChan chan, int index) { return hTDC[chan](index); }  
int   CTriggerServer::getTimeOfSecondBeamParticle() const { return timeOfSecondBeamParticle; } 
#endif /* CTRIGGERSERVER_H */  

Back to index

See source file