X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=ITS%2FAliITSTrigger.cxx;h=d86c3dcbc0e8890401ebab4b2fce346952ede296;hb=3bf21661691de64e360e69bb04eab2beb3e154e1;hp=79f63f29cc5e78432dff0160dbc33d5c408e9649;hpb=8e50d897557aadaff83f0809747a23e28dfab8ca;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSTrigger.cxx b/ITS/AliITSTrigger.cxx index 79f63f29cc5..d86c3dcbc0e 100644 --- a/ITS/AliITSTrigger.cxx +++ b/ITS/AliITSTrigger.cxx @@ -13,224 +13,105 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Id$ */ - - -////////////////////////////////////////////////////////////////////// -// -// ITS SPD Trigger Detector Class -// -// Several Fast-OR Algoritm are implemented -// -// Ref: ALICE-INT-2005-025 -// (J. Conrad, J. G. Contreras and C. E. Jorgensen) -// -////////////////////////////////////////////////////////////////////// +/* $Id$ */ +//////////////////////////////////////////////////////////////////////// +// // +// 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 +#include "AliITSTrigger.h" #include "AliLog.h" #include "AliRun.h" #include "AliRunLoader.h" +#include "AliITSLoader.h" +#include "AliTriggerInput.h" -#include "AliITSTrigger.h" - -//______________________________________________________________________ ClassImp(AliITSTrigger) //______________________________________________________________________ -AliITSTrigger::AliITSTrigger() - : AliTriggerDetector() +AliITSTrigger::AliITSTrigger() : + AliTriggerDetector(), + fPITprocessor() { - SetName("ITS"); - CreateInputs(); - - // FIX: should this be hardcoded? - fFODigistThreshold = 1; - fHighMultFODigistThreshold = 100; + //standard constructor + SetName("ITS"); } - //______________________________________________________________________ -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( "ITS_SPD_GFO_L0", "Global, Fast OR all detectors", 0x01 ) ); - fInputs.AddLast( new AliTriggerInput( "ITS_SPD_HMULT_L0", "High Multiplicity", 0x600 ) ); - + // optional constructor + SetName("ITS"); } - //______________________________________________________________________ -void AliITSTrigger::Trigger() -{ - - // ********** Get run loader for the current event ********** - AliRunLoader* runLoader = gAlice->GetRunLoader(); - - AliITSLoader* loader = (AliITSLoader* )runLoader->GetLoader( "ITSLoader" ); - AliITSgeom* geom = loader->GetITSgeom(); - loader->LoadDigits("READ"); - TTree *treeD = loader->TreeD(); - - 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 << "=================================================" << 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 - - // first and last module? - Int_t startSPD = geom->GetStartSPD(); - Int_t lastSPD = geom->GetLastSPD(); - - Int_t totalNumberOfDigits = 0; - - // loop over modules - for (Int_t moduleIndex=startSPD; moduleIndexGetEvent(moduleIndex); - TClonesArray* digits = (TClonesArray*) (digDet->At(0)); // SPD only. - - // get number of digits in this module - Int_t numberOfDigitsInModule = digits->GetEntriesFast(); - - // sum of digits in all modules - totalNumberOfDigits = totalNumberOfDigits + numberOfDigitsInModule; - +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; } - if (totalNumberOfDigits>=fFODigistThreshold) - SetInput( "ITS_SPD_GFO_L0" ); - - if (totalNumberOfDigits>=fHighMultFODigistThreshold) - SetInput( "ITS_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 - - - -// if ( ndigfo >= singhitthreshold ) { -// // Set input GLOBAL FO -// SetInput( "ITS_SPD_GFO_L0" ); -// // or SetInput( "0x01" ); -// // or ((AliTriggerInput*)fInputs.At(0))->Set(); -// // bit1 |= (1 << 1); -// } +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."); + } - // return bit1; + else { + itsLoader->LoadDigits(); + TTree *tree = itsLoader->TreeD(); + if(!tree) { + AliError("TreeD not available"); + itsLoader->UnloadDigits(); + return; + } + foSignals = (AliITSFOSignalsSPD*)tree->GetUserInfo()->FindObject("AliITSFOSignalsSPD"); + if(!foSignals) AliError("FO signals not retrieved"); + } + + // Process the FO signals + if (foSignals) { + fPITprocessor.PreprocessFOSignals(foSignals); + UInt_t numInputs = fPITprocessor.GetNumOutputs(); + for (UInt_t inp=0; inpUnloadDigits(); } - - - -