/************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * 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. * **************************************************************************/ /* $Id$ */ #include #include "AliRun.h" #include "AliRunLoader.h" #include "AliVZEROTrigger.h" //______________________________________________________________________ ClassImp(AliVZEROTrigger) //////////////////////////////////////////////////////////////////////// // // Version 1 // // AliVZEROTrigger: // //////////////////////////////////////////////////////////////////////// //______________________________________________________________________ AliVZEROTrigger::AliVZEROTrigger() :AliTriggerDetector(), fAdcThresHold(0.0), fTimeWindowWidth(50.0) { SetName("VZERO"); CreateInputs(); SetAdcThreshold(); SetTimeWindowWidth(); } //______________________________________________________________________ void AliVZEROTrigger::CreateInputs() { // inputs // Do not create inputs again!! if( fInputs.GetEntriesFast() > 0 ) return; fInputs.AddLast( new AliTriggerInput( "VZERO_LEFT", "At least one hit in the left VZERO", 0x01 ) ); fInputs.AddLast( new AliTriggerInput( "VZERO_RIGHT","At least one hit in the right VZERO", 0x02 ) ); fInputs.AddLast( new AliTriggerInput( "VZERO_AND", "At least one hit in the each (left and right) VZERO", 0x04 ) ); fInputs.AddLast( new AliTriggerInput( "VZERO_OR", "At least one hit in the one (left one right) VZERO", 0x08 ) ); fInputs.AddLast( new AliTriggerInput( "VZERO_BEAMGAS", "Beam gas VZERO trigger ", 0x010 ) ); } //______________________________________________________________________ void AliVZEROTrigger::Trigger() { // ********** Get run loader for the current event ********** AliRunLoader* runLoader = gAlice->GetRunLoader(); AliVZEROLoader* loader = (AliVZEROLoader* )runLoader->GetLoader( "VZEROLoader" ); loader->LoadDigits("READ"); TTree* vzeroDigitsTree = loader->TreeD(); if (!vzeroDigitsTree) return; TClonesArray* vzeroDigits = new TClonesArray("AliVZEROdigit",1000); TBranch* digitBranch = vzeroDigitsTree->GetBranch("VZERODigit"); digitBranch->SetAddress(&vzeroDigits); // number of hits in left/right Int_t nLeftDig = 0; Int_t nRightDig = 0; // first time Float_t firstTimeLeft = 9999.0; Float_t firstTimeRight = 9999.0; Float_t TimeHalfWidth = fTimeWindowWidth/2.0; // loop over vzero entries Int_t nEntries = (Int_t)vzeroDigitsTree->GetEntries(); for (Int_t e=0; eGetEvent(e); Int_t nDigits = vzeroDigits->GetEntriesFast(); for (Int_t d=0; dGetEvent(d); AliVZEROdigit* digit = (AliVZEROdigit*)vzeroDigits->At(d); Int_t PMNumber = digit->PMNumber(); Float_t adc = digit->ADC(); Float_t tdc = digit->Time(); // in 100 of picoseconds if (PMNumber<=31 && adc>fAdcThresHold) { if (tdc>(29.0-TimeHalfWidth) && tdc<(29.0+TimeHalfWidth)) nRightDig++; if (tdc=32 && adc>fAdcThresHold) { if (tdc>(112.0-TimeHalfWidth) && tdc<(112.0+TimeHalfWidth)) nLeftDig++; if (tdc 0) SetInput( "VZERO_LEFT" ); if (nRightDig > 0) SetInput( "VZERO_RIGHT" ); if (nLeftDig>0 || nRightDig>0) { SetInput( "VZERO_OR" ); if (nLeftDig>0 && nRightDig>0) { SetInput( "VZERO_AND" ); } } AliDebug(1,Form("VZERO PMs fired: %d (left) %d (right)", nLeftDig, nRightDig)); return; }