//*-- Author : Jacek Otwinowski 01/09/2003
//*-- Modified : Y.C.Pachmayer 3/09/2006

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// HPidSkipTrigger                                                      //
//                                                                            //    
////////////////////////////////////////////////////////////////////////////////

#pragma implementation

#include "hades.h"
#include "haddef.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "heventheader.h"
#include "hpidskiptrigger.h"

// -----------------------------------------------------------------------------

ClassImp(HPidSkipTrigger)

// -----------------------------------------------------------------------------

 HPidSkipTrigger::HPidSkipTrigger(Text_t *name,Text_t *title,Option_t *option):HReconstructor(name,title)
{
    setDefault();
    setOptions(option);
}
 HPidSkipTrigger::HPidSkipTrigger(Text_t *option):HReconstructor("Skip Trigger","Skip Trigger")
{
    setDefault();
    setOptions(option);

}
// -----------------------------------------------------------------------------
//reset all counters and disable event skipping
 void HPidSkipTrigger::setDefault(void)
{
	nTot = 0;
	nSkip = 0;
        nAccept =0;
	bSkip1stLvlEvents=kFALSE;
	bSkip2ndLvlEvents=kFALSE;
	bSkipLowMult=kFALSE;
        bSkipTrigM4=kFALSE;
}

//enable skip-flags given by user-supplied argument
 void HPidSkipTrigger::setOptions(Option_t* option)
{
  TString s = option;
  s.ToUpper();
  bSkip2ndLvlEvents=(strstr(s.Data(),"LVL2") ? kTRUE : kFALSE);
  bSkip1stLvlEvents=(strstr(s.Data(),"LVL1") ? kTRUE : kFALSE);
  bSkipLowMult     =(strstr(s.Data(),"LOWMULT") ? kTRUE : kFALSE);
  bSkipTrigM4      =(strstr(s.Data(),"TRIGM4") ? kTRUE : kFALSE); 
}

// -----------------------------------------------------------------------------
 Bool_t HPidSkipTrigger::init(void)
{
// initialize the reconstructor 

    return kTRUE;
}

// -----------------------------------------------------------------------------

 Bool_t HPidSkipTrigger::reinit(void)
{
// Dummy method

    return kTRUE;
}

// -----------------------------------------------------------------------------

 Bool_t HPidSkipTrigger::finalize(void)
{
  printf("nTot:%d n",nTot);
  printf("nSkip:%d n",nSkip);
  printf("nAccept:%d n",nAccept);
  return kTRUE;
}

 Int_t HPidSkipTrigger::execute(void)
{
  
  HEventHeader *pEventHead = NULL;
  Int_t DownFlag = -1;
  Int_t TrigDecision = -1;
  Int_t TBit = 0;

  //Get eent header to determine trigger decision
  pEventHead =  (HEventHeader*)((HEvent*)(gHades->getCurrentEvent())->getHeader());
  
  if( pEventHead != NULL )
    {
      DownFlag     = pEventHead->getDownscalingFlag();
      TrigDecision = pEventHead->getTriggerDecision();
      TBit         = pEventHead->getTBit();
    }
  else 
    {
      Error("execute"," EventHeader does not exist: %i ",
	    ((HEventHeader*)((HEvent*)(gHades->getCurrentEvent())->getHeader())));
    }
  nTot++;
  

  if(TrigDecision==0 && bSkip1stLvlEvents)
    {
      //skip first level events
      nSkip++;
      return kSkipEvent;
    }


 // skip second level events, only lvl1 events are selected with multilicity tbit is set
  if(bSkip2ndLvlEvents)
  {
     if(DownFlag==0)
    {
      nSkip++;
      return kSkipEvent;
    }
     else
     {
	 if((TBit&(1<<0)>0))
	 {
	     nAccept++;
	     return 0;
	 }
	 else
	 {
	     nSkip++;
	     return kSkipEvent;
	 }
     }
  }

#warning THIS MUST BE CORRECTED - SKIPPING LOW MULTIPLICITY EVENTS IS NOT IMPLEMENTED CORRECTLY

  if((TBit&(1<<0)==0) && bSkipLowMult)
    {
      return kSkipEvent;
    }

 // events are selected if trigger decision is positive and multilicity tbit is set
  if(bSkipTrigM4)
  {
      if(TrigDecision==0)
      {
	  nSkip++;
	  return kSkipEvent;
      }
      else
      {
	  if((TBit&(1<<0)>0))
	  {
	      nAccept++;
	      return 0;
	  }
	  else
	  {
              nSkip++;
	      return kSkipEvent;
	  }
      }
  }



  return 0;
}


ROOT page - Class index - Class Hierarchy - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.