X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSTrigger.cxx;h=7ee066b5bd3f181b84db8678001c463d3bd1b6c2;hb=ad7f2bfa13b73e2fb13f097a478710c3bc1d47a3;hp=c792562c9d60c0dda37267499f84c87576f9f3df;hpb=d3b3a3b24cc880365e409a578a50f49d17de9ff4;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSTrigger.cxx b/ITS/AliITSTrigger.cxx index c792562c9d6..7ee066b5bd3 100644 --- a/ITS/AliITSTrigger.cxx +++ b/ITS/AliITSTrigger.cxx @@ -16,246 +16,99 @@ /* $Id$ */ -#include +//////////////////////////////////////////////////////////////////////// +// // +// Simulates generation of Fast-OR signals from SPD (if needed). // +// Processes the Fast-OR signals generated in AliITSsimulationSPD. // +// Provides inputs for AliCentralTrigger. // +// // +// Version 2, Henrik Tydesjo, Feb 2009 // +// Version 1, D. Elia, C. Jorgensen, Mar 2006 // +// Version 0, J. Conrad, E. Lopez Torres, Oct 2005 // +// // +//////////////////////////////////////////////////////////////////////// +#include "AliITSTrigger.h" #include "AliLog.h" #include "AliRun.h" #include "AliRunLoader.h" -#include "AliTriggerInput.h" - -#include "AliITSTrigger.h" -#include "AliITSdigitSPD.h" -#include "AliITSgeom.h" #include "AliITSLoader.h" +#include "AliTriggerInput.h" -//______________________________________________________________________ ClassImp(AliITSTrigger) -//////////////////////////////////////////////////////////////////////// -// // -// Version 1 // -// Modified by D. Elia, C. Jorgensen // -// March 2006 // -// // -// Version 0 // -// Written by J. Conrad, E. Lopez Torres // -// October 2005 // -// // -// AliITSTrigger: implementation of the SPD Fast-OR based triggers. // -// // -//////////////////////////////////////////////////////////////////////// //______________________________________________________________________ -AliITSTrigger::AliITSTrigger() - : AliTriggerDetector(), -fGlobalFOThreshold(1), -fHighMultFOThreshold(190){ - +AliITSTrigger::AliITSTrigger() : + AliTriggerDetector(), + fPITprocessor() +{ //standard constructor SetName("ITS"); - - // set parameters to define trigger condition thresholds - //fGlobalFOThreshold = 1; - //fHighMultFOThreshold = 150; } - //______________________________________________________________________ -void AliITSTrigger::CreateInputs() +AliITSTrigger::AliITSTrigger(AliITSTriggerConditions* cond) : + AliTriggerDetector(), + fPITprocessor(cond) { - // inputs - - // Do not create inputs again!! - if( fInputs.GetEntriesFast() > 0 ) return; - - fInputs.AddLast( new AliTriggerInput( "SPD_GFO_L0", "SPD", 0 ) ); - fInputs.AddLast( new AliTriggerInput( "SPD_HMULT_L0", "SPD", 0 ) ); - + // optional constructor + SetName("ITS"); } - //______________________________________________________________________ -void AliITSTrigger::Trigger() -{ - - // ********** Get run loader for the current event ********** - AliRunLoader* runLoader = AliRunLoader::GetRunLoader(); - - AliITSLoader* loader = (AliITSLoader* )runLoader->GetLoader( "ITSLoader" ); - AliITSgeom* geom = loader->GetITSgeom(); - loader->LoadDigits("READ"); - TTree *treeD = loader->TreeD(); - if (!treeD) return; - - TObjArray *digDet = 0; - digDet = new TObjArray(3); - - - // Cut on Signal In the Pixel Detector - TBranch* br = treeD->GetBranch( "ITSDigitsSPD" ); - br->SetAddress( &((*digDet)[0]) ); - ((TClonesArray*)(digDet->At(0)))->Clear(); - - MultiplicityTriggers(digDet, treeD, geom); - // GeometryTriggers(digDet, treeD, geom); - - // Debug : FIX change to AliLog -// cout << "=================================================" << endl; -// cout << " Pixel Trigger Mask ( " << hex << "0x" << GetMask() << " )" << endl << endl; -// cout << " Global Fast OR " << "0x" << GetInput( "ITS_SPD_GFO_L0" )->GetValue() << endl; -// cout << " High Multiplicity " << "0x" << GetInput( "ITS_SPD_HMULT_L0" )->GetValue() << endl; -// cout << "=================================================" << endl << endl; - +void AliITSTrigger::SetTriggerConditions(AliITSTriggerConditions* cond) { + // Sets the trigger conditions, normally coming from OCDB + fPITprocessor.SetTriggerConditions(cond); } - //______________________________________________________________________ -void AliITSTrigger::MultiplicityTriggers(TObjArray* digDet, TTree* treeD, AliITSgeom* geom) -{ - // simple FO triggers that only cares about the multiplicity - - const Int_t nChipsInModule = 5; - Int_t startSPD = geom->GetStartSPD(); - Int_t lastSPD = geom->GetLastSPD(); - - Int_t totalNumberOfFO = 0; - Int_t totalNumberOfFOLay1 = 0; - Int_t ndigitsInChip[5]; - - // loop over modules (ladders) - for (Int_t moduleIndex=startSPD; moduleIndexGetEvent(moduleIndex); - TClonesArray* digits = (TClonesArray*) (digDet->At(0)); // SPD only. - Int_t lay,stav,det; geom->GetModuleId(moduleIndex,lay,stav,det); - - // get number of digits in this module - Int_t ndigitsInModule = digits->GetEntriesFast(); - - // get number of digits in each chip of the module - for( Int_t iChip=0; iChip<5; iChip++ ) { - ndigitsInChip[iChip]=0; - } - for( Int_t iDig=0; iDigAt(iDig); - Int_t column = dp->GetCoord1(); - Int_t isChip = nChipsInModule - Int_t(column/32.) - 1; - ndigitsInChip[isChip]++; - } - // get number of FOs in the module - for( Int_t ifChip=0; ifChip<5; ifChip++ ) { - if( ndigitsInChip[ifChip] >= 1 ) { - totalNumberOfFO++; - if(lay==1) totalNumberOfFOLay1++; - } - } - // end of loop over modules +void AliITSTrigger::CreateInputs() { + // Create inputs, based on OCDB Pixel Trigger Conditions + if( fInputs.GetEntriesFast() > 0 ) return; // Inputs already created, no need to proceed + + // Load trigger conditions from OCDB if needed + if (! fPITprocessor.TriggerConditionsSet() ) { + AliError("Trigger conditions not set. No inputs created."); + return; } - // produce input trigger condition - if (totalNumberOfFO>=fGlobalFOThreshold) - SetInput( "SPD_GFO_L0" ); - - if (totalNumberOfFOLay1>=fHighMultFOThreshold) - SetInput( "SPD_HMULT_L0" ); - - return; - + UInt_t numInputs = fPITprocessor.GetNumOutputs(); + AliInfo(Form("Number of trigger inputs: %d",numInputs)); + for (UInt_t inp=0; inpGetEvent(moduleIndex); -// TClonesArray* digits = (TClonesArray*) (digDet->At(0)); // SPD only. - -// Int_t lay, stav, det; -// geom->GetModuleId(moduleIndex,lay,stav,det); - -// ndig = digits->GetEntriesFast(); - -// for( Int_t l=0; l<5; l++ ) { -// ndigA[l] = 0 ; -// } -// for( Int_t dig=0; digAt(dig); -// Int_t column = dp->GetCoord1(); -// // Int_t row = dp->GetCoord2(); -// Int_t chip = Int_t(column/32.); -// ndigA[chip]++; -// } - -// if (checkStave != stav) { -// mInStaveCounter = 0; -// } else { -// mInStaveCounter += 1; -// } - -// // m 0,.., 239 -// // stav 1,..,40 -// // mInStave 0,..,3 -// // chipInStave 0,..,19 - -// //cout << "m " << m << " stav " << stav << " mInStave " << mInStaveCounter << " " <= 1) { -// iFOperladder[moduleIndex]++; -// iFOperlayer[lay-1]++; -// iFOperstave[stav-1][lay-1]++; -// //iFOperHstave[hstav-1][lay-1]++; -// iFOperChipinStave[chipInStave][stav-1][lay-1]++; -// // nFO++; -// } -// } -// // SIMPLE FO ---> ANY HIT TRIGGERS -// ndigfo += ndig; -// checkStave = stav; -// } // endl loop over SPD's - - +void AliITSTrigger::Trigger() { + // Performs Pixel Trigger processing of the simulated fast-or signals + + // Get the FO signals for this event + AliITSFOSignalsSPD* foSignals = NULL; + AliRunLoader* runLoader = AliRunLoader::Instance(); + AliITSLoader* itsLoader = (AliITSLoader*) runLoader->GetLoader("ITSLoader"); + if (!itsLoader) { + AliError("ITS loader is NULL."); + } + else { + AliBaseLoader* foLoader = itsLoader->GetFOSignalsLoader(); + if (!foLoader) { + AliError("FO signals base loader not retrieved."); + } + else { + foLoader->Load(); + foSignals = (AliITSFOSignalsSPD*) foLoader->Get(); + } + } -// if ( ndigfo >= singhitthreshold ) { -// // Set input GLOBAL FO -// SetInput( "ITS_SPD_GFO_L0" ); -// // or SetInput( "0x01" ); -// // or ((AliTriggerInput*)fInputs.At(0))->Set(); -// // bit1 |= (1 << 1); -// } + // Process the FO signals + if (foSignals) { + fPITprocessor.PreprocessFOSignals(foSignals); + UInt_t numInputs = fPITprocessor.GetNumOutputs(); + for (UInt_t inp=0; inp