X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDTriggerL1.cxx;h=e813a32e5d4a3a26b639aaac3733f31eed8e4177;hb=3d1ad7acdec268479b03198dc42d8ecd0d45601a;hp=b25a0f78e80a5a93da0201cbf479c288c7bf7a86;hpb=572b6f201082bbd2ddf10cc2df56bfe01590e21a;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDTriggerL1.cxx b/TRD/AliTRDTriggerL1.cxx index b25a0f78e80..e813a32e5d4 100644 --- a/TRD/AliTRDTriggerL1.cxx +++ b/TRD/AliTRDTriggerL1.cxx @@ -13,315 +13,129 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/////////////////////////////////////////////////////// -// // -// // -// TRD main trigger class for L1 // -// // -// // -/////////////////////////////////////////////////////// +/* $Id: AliTRDTriggerL1.cxx 31904 2009-04-08 16:42:03Z cblume $ */ -#include +/////////////////////////////////////////////////////////////////////////////// +// // +// TRD trigger L1 (GTU) simulation steering // +// currently the Trigger() method calls the GTU tracking simulation and // +// runs two example triggers, namely on a single high pt particle and // +// on a jet. // +// // +/////////////////////////////////////////////////////////////////////////////// -#include "AliRunLoader.h" -#include "AliConfig.h" -#include "AliTracker.h" + +#include "TObjArray.h" + +#include "AliLog.h" #include "AliTriggerInput.h" +#include "AliRunLoader.h" +#include "AliLoader.h" #include "AliTRDTriggerL1.h" -#include "AliTRDtrigParam.h" -#include "AliTRDtrigger.h" -#include "AliTRDgtuTrack.h" -#include "AliTRDgeometry.h" - -ClassImp(AliTRDTriggerL1) +#include "AliTRDgtuSim.h" +#include "AliTRDtrackGTU.h" -//_____________________________________________________________________________ AliTRDTriggerL1::AliTRDTriggerL1() - :AliTriggerDetector() { - // - // Default constructor - // - SetName("TRD"); +} + +AliTRDTriggerL1::~AliTRDTriggerL1() +{ } -//_____________________________________________________________________________ void AliTRDTriggerL1::CreateInputs() { - // - // See TRIGGER/DAQ/HLT/DCS Techical Design Report, - // p. 58, Table 4.1 for the proposed inputs - // + // create the trigger inputs for TRD - fInputs.AddLast(new AliTriggerInput("TRD_Unlike_EPair_L1" - ,"TRD" - ,1 )); - fInputs.AddLast(new AliTriggerInput("TRD_Like_EPair_L1" - ,"TRD" - ,1 )); - fInputs.AddLast(new AliTriggerInput("TRD_Jet_LPt_L1" - ,"TRD" - ,1 )); - fInputs.AddLast(new AliTriggerInput("TRD_Jet_HPt_L1" - ,"TRD" - ,1 )); - fInputs.AddLast(new AliTriggerInput("TRD_Electron_L1" - ,"TRD" - ,1 )); - fInputs.AddLast(new AliTriggerInput("TRD_HadrLPt_L1" - ,"TRD" - ,1 )); - fInputs.AddLast(new AliTriggerInput("TRD_HadrHPt_L1" - ,"TRD" - ,1 )); + if (fInputs.GetEntriesFast() > 0) + return; + fInputs.AddLast(new AliTriggerInput("1HSH", "TRD", 1)); + fInputs.AddLast(new AliTriggerInput("1HJT", "TRD", 1)); } -//_____________________________________________________________________________ void AliTRDTriggerL1::Trigger() { - // - // Run the online tracking and trigger - // - - TString evfoldname = AliConfig::GetDefaultEventFolderName(); - AliRunLoader *runLoader = AliRunLoader::GetRunLoader(evfoldname); - AliLoader *loader = runLoader->GetLoader("TRDLoader"); - AliTRDgeometry geo; - - AliTRDtrigger trdTrigger("Trigger","Trigger class"); - - Float_t field = AliTracker::GetBz() * 0.1; // Tesla - AliInfo(Form("Trigger set for magnetic field = %f Tesla \n",field)); - - trdTrigger.SetRunLoader(runLoader); - trdTrigger.Init(); - - trdTrigger.Open(runLoader->GetFileName(), runLoader->GetEventNumber()); - trdTrigger.ReadDigits(); - trdTrigger.MakeTracklets(kTRUE); - trdTrigger.WriteTracklets(-1); - - // Trigger (tracks, GTU) - - Float_t highPt = AliTRDtrigParam::Instance()->GetHighPt(); - Float_t jetLowPt = AliTRDtrigParam::Instance()->GetJetLowPt(); - Float_t jetHighPt = AliTRDtrigParam::Instance()->GetJetHighPt(); - - Float_t pid; - Float_t pt; - Int_t det; - Int_t sec; - Bool_t isElectron; - - const Int_t maxEle = 1000; - - Int_t electronPlus; - Int_t electronMinus; - Int_t sectorElePlus[maxEle]; - Int_t sectorEleMinus[maxEle]; - Float_t ptElePlus[maxEle]; - Float_t ptEleMinus[maxEle]; - Int_t hadronLowPt; - Int_t hadronHighPt; - Int_t hadronJetLowPt; - Int_t hadronJetHighPt; - - hadronJetLowPt = 0; - hadronJetHighPt = 0; - - hadronLowPt = 0; - hadronHighPt = 0; - - electronPlus = 0; - electronMinus = 0; - - AliTRDgtuTrack *gtuTrack; - Int_t nTracks = trdTrigger.GetNumberOfTracks(); - for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) { - - gtuTrack = trdTrigger.GetTrack(iTrack); - - pid = gtuTrack->GetPID(); - isElectron = gtuTrack->IsElectron(); - pt = gtuTrack->GetPt(); - det = gtuTrack->GetDetector(); - sec = geo.GetSector(det); - - if (isElectron) { - - if (pt < 0.0) { - sectorEleMinus[electronMinus] = sec; - ptEleMinus[electronMinus] = pt; - electronMinus++; - } - else { - sectorElePlus[electronPlus] = sec; - ptElePlus[electronPlus] = pt; - electronPlus++; - } - - } - else { - - if (TMath::Abs(pt) < highPt) { - hadronLowPt++; - } - else { - hadronHighPt++; - } - - if (TMath::Abs(pt) > jetLowPt ) { - hadronJetLowPt++; - } - if (TMath::Abs(pt) > jetHighPt) { - hadronJetHighPt++; - } - - } - - } - - loader->UnloadTracks(); - - // Hadrons - if (hadronLowPt) { - SetInput("TRD_Hadr_LPt_L1"); - } - if (hadronHighPt) { - SetInput("TRD_Hadr_HPt_L1"); - } - - // Hadrons from jets - if (hadronJetLowPt >= AliTRDtrigParam::Instance()->GetNPartJetLow() ) { - SetInput("TRD_Jet_LPt_L1"); - } - if (hadronJetHighPt >= AliTRDtrigParam::Instance()->GetNPartJetHigh()) { - SetInput("TRD_Jet_HPt_L1"); + // run the trigger algorithms + + AliRunLoader *runLoader = AliRunLoader::Instance(); + if (!runLoader) + return; + AliLoader *trdLoader = runLoader->GetLoader("TRDLoader"); + if (!trdLoader) + return; + + // now running the GTU tracking; + AliTRDgtuSim *gtusim = new AliTRDgtuSim(); + gtusim->RunGTU(trdLoader, 0x0); + gtusim->WriteTracksToLoader(); + + TTree *trackTree = trdLoader->GetDataLoader("gtutracks")->Tree(); + if (!trackTree) { + AliDebug(1,"Did not find track tree"); + return; } - - // Electron-positron pairs (open angle > 80 deg) - Int_t secPlus; - Int_t secMinus; - Int_t secDiff; - Bool_t electronUnlikePair = kFALSE; - Bool_t electronUnlikePairHPt = kFALSE; - - if ((electronMinus > 0) && - (electronPlus > 0)) { - for (Int_t iPlus = 0; iPlus < electronPlus; iPlus++) { - secPlus = sectorElePlus[iPlus]; - for (Int_t iMinus = 0; iMinus < electronMinus; iMinus++) { - secMinus = sectorEleMinus[iMinus]; - secDiff = TMath::Abs(secPlus-secMinus); - if (secDiff > 9) { - secDiff = 18 - secDiff; - } - if (secDiff >= 5) { - electronUnlikePair = kTRUE; - if ((TMath::Abs(ptElePlus[iPlus]) > highPt) && - (TMath::Abs(ptEleMinus[iMinus]) > highPt)) { - electronUnlikePairHPt = kTRUE; - } - } + TBranch *branch = trackTree->GetBranch("TRDtrackGTU"); + AliDebug(1,Form("TRD trigger: found %lld tracks", trackTree->GetEntriesFast())); + + // trigger thresholds should go elsewhere + Float_t ptThreshold1 = 2; + Float_t ptThreshold2 = 9.9; + Int_t trackThreshold1 = 6; + Int_t trackThreshold2 = 2; + + // trigger algorithms to come, e.g. + Bool_t triggeredHighPt = kFALSE; + Bool_t triggeredJet = kFALSE; + + if (branch) { + AliTRDtrackGTU *trk = 0x0; + branch->SetAddress(&trk); + + // high pt trigger + for (Int_t iTrack = 0; iTrack < trackTree->GetEntriesFast(); iTrack++) { + trackTree->GetEntry(iTrack); + if (TMath::Abs(trk->GetPt()) > 3.0) { + AliDebug(1, Form("Found track in sector %2i, stack %i with pt = %3.1f, triggered", + trk->GetSector(), trk->GetStack(), trk->GetPt())); + triggeredHighPt = kTRUE; } } - } - - if (electronUnlikePair) { - SetInput("TRD_Unlike_EPair_L1"); - } - //if (electronUnlikePairHPt) { - // SetInput("TRD_Unlike_EPair_HPt_L1"); - //} - // Like electron/positron pairs - Bool_t ele1; - Bool_t ele1HPt; - Bool_t ele2; - Bool_t ele2HPt; - - // Positive - ele1 = kFALSE; - ele2 = kFALSE; - ele1HPt = kFALSE; - ele2HPt = kFALSE; - if (electronPlus > 1) { - for (Int_t iPlus = 0; iPlus < electronPlus; iPlus++) { - if (!ele1) { - ele1 = kTRUE; - } - else if (!ele2) { - ele2 = kTRUE; - } - if (TMath::Abs(ptElePlus[iPlus]) > highPt) { - if (!ele1HPt) { - ele1HPt = kTRUE; - } - else if (!ele2HPt) { - ele2HPt = kTRUE; - } - } + // jet trigger + Int_t nTracks1[90]; // tracks above lower pt threshold + Int_t nTracks2[90]; // tracks above higher pt threshold + memset(nTracks1,0,sizeof(Int_t)*90); + memset(nTracks2,0,sizeof(Int_t)*90); + for (Int_t iTrack = 0; iTrack < trackTree->GetEntriesFast(); iTrack++) { + trackTree->GetEntry(iTrack); + if (TMath::Abs(trk->GetPt()) > ptThreshold1) + nTracks1[5*trk->GetSector() + trk->GetStack()]++; + if (TMath::Abs(trk->GetPt()) > ptThreshold2) + nTracks2[5*trk->GetSector() + trk->GetStack()]++; } - } - - if (ele1 && ele2 ) { - SetInput("TRD_Like_EPair_L1"); - } - //if (ele1HPt && ele2HPt) { - // SetInput("TRD_Like_EPair_HPt_L1"); - //} - - // Negative - ele1 = kFALSE; - ele2 = kFALSE; - ele1HPt = kFALSE; - ele2HPt = kFALSE; - if (electronMinus > 1) { - for (Int_t iMinus = 0; iMinus < electronMinus; iMinus++) { - if (!ele1) { - ele1 = kTRUE; - } - else if (!ele2) { - ele2 = kTRUE; - } - if (TMath::Abs(ptEleMinus[iMinus]) > highPt) { - if (!ele1HPt) { - ele1HPt = kTRUE; - } - else if (!ele2HPt) { - ele2HPt = kTRUE; - } - } + for (Int_t iStack = 0; iStack < 90; iStack++) { + if ((nTracks1[iStack] >= trackThreshold1) || (nTracks2[iStack] >= trackThreshold2)) + triggeredJet = kTRUE; } } + else { + AliWarning("GTU Branch not found"); + } - if (ele1 && ele2 ) { - SetInput("TRD_Like_EPair_L1"); + if (triggeredHighPt) { + AliInfo("Fired high-pt trigger"); + SetInput("1HSH"); } - //if (ele1HPt && ele2HPt) { - // SetInput("TRD_Like_EPair_HPt_L1"); - //} - - // Single electron/positron - if ((electronPlus > 0) || - (electronMinus > 0)) { - SetInput("TRD_Electron_L1"); - /* - for (Int_t iPlus = 0; iPlus < electronPlus; iPlus++) { - if (TMath::Abs(ptElePlus[iPlus]) > highPt) SetInput("TRD_Electron_HPt_L1"); - break; - } - for (Int_t iMinus = 0; iMinus < electronMinus; iMinus++) { - if (TMath::Abs(ptEleMinus[iMinus]) > highPt) SetInput("TRD_Electron_HPt_L1"); - break; - } - */ + if (triggeredJet) { + AliInfo("Fired jet trigger"); + SetInput("1HJT"); } + // cleaning up + delete gtusim; } -