X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=TRD%2FAliTRDTriggerL1.cxx;h=e813a32e5d4a3a26b639aaac3733f31eed8e4177;hp=fc4185bdca035eabc878588f3d80a30515904625;hb=cf6ab5d2f885355d9347f476f56ea8e7eb3d2271;hpb=0f20e40cb80a7bae46238ecb48ce772aee16518a diff --git a/TRD/AliTRDTriggerL1.cxx b/TRD/AliTRDTriggerL1.cxx index fc4185bdca0..e813a32e5d4 100644 --- a/TRD/AliTRDTriggerL1.cxx +++ b/TRD/AliTRDTriggerL1.cxx @@ -13,252 +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 "AliRun.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() +AliTRDTriggerL1::AliTRDTriggerL1() { - SetName("TRD"); +} + +AliTRDTriggerL1::~AliTRDTriggerL1() +{ } -//_____________________________________________________________________________ void AliTRDTriggerL1::CreateInputs() { + // create the trigger inputs for TRD - fInputs.AddLast(new AliTriggerInput( "TRD_HadrLPt_L1", "Single hadron low pt ", 0x01 )); - fInputs.AddLast(new AliTriggerInput( "TRD_HadrHPt_L1", "Single hadron high pt", 0x02 )); - fInputs.AddLast(new AliTriggerInput( "TRD_Unlike_EPair_L1", "Unlike electron pair", 0x04 )); - fInputs.AddLast(new AliTriggerInput( "TRD_Unlike_EPair_HPt_L1", "Unlike electron pair high pt", 0x08 )); - fInputs.AddLast(new AliTriggerInput( "TRD_Like_EPair_L1", "Like electron pair", 0x10 )); - fInputs.AddLast(new AliTriggerInput( "TRD_Like_EPair_HPt_L1", "Like electron pair high pt", 0x20 )); - fInputs.AddLast(new AliTriggerInput( "TRD_Electron_L1", "Single electron", 0x40 )); - fInputs.AddLast(new AliTriggerInput( "TRD_Electron_HPt_L1", "Single electron high pt", 0x80 )); + if (fInputs.GetEntriesFast() > 0) + return; + fInputs.AddLast(new AliTriggerInput("1HSH", "TRD", 1)); + fInputs.AddLast(new AliTriggerInput("1HJT", "TRD", 1)); } -//_____________________________________________________________________________ void AliTRDTriggerL1::Trigger() { - - AliRunLoader* runLoader = gAlice->GetRunLoader(); - - AliLoader *loader=runLoader->GetLoader("TRDLoader"); - - Int_t nEvents = runLoader->GetNumberOfEvents(); - - // Trigger (tracklets, LTU) - - AliTRDgeometry *geo = AliTRDgeometry::GetGeometry(runLoader); - - AliTRDtrigger trdTrigger("Trigger","Trigger class"); - - AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters"); - - gAlice = runLoader->GetAliRun(); - Double_t x[3] = { 0.0, 0.0, 0.0 }; - Double_t b[3]; - gAlice->Field(x,b); // b[] is in kilo Gauss - Float_t field = b[2] * 0.1; // Tesla - Info("Trigger","Trigger set for magnetic field = %f Tesla \n",field); - - trigp->SetField(field); - trigp->Init(); - - trdTrigger.SetParameter(trigp); - trdTrigger.SetRunLoader(runLoader); - trdTrigger.Init(); - - for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { - - trdTrigger.Open(runLoader->GetFileName(), iEvent); - trdTrigger.ReadDigits(); - trdTrigger.MakeTracklets(kTRUE); - trdTrigger.WriteTracklets(-1); - + // 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; } - - // Trigger (tracks, GTU) - - Float_t highPt = trigp->GetHighPt(); - - Float_t pid, pt; - Int_t det, sec; - Bool_t isElectron; - - const Int_t maxEle = 1000; - - Int_t electronPlus, electronMinus; - Int_t sectorElePlus[maxEle], sectorEleMinus[maxEle]; - Float_t ptElePlus[maxEle], ptEleMinus[maxEle]; - Int_t hadronLowPt, hadronHighPt; - - 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++; + 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; } - } - } - - loader->UnloadTracks(); - - // hadrons - - if (hadronLowPt) SetInput("TRD_Hadr_LPt_L1"); - if (hadronHighPt) SetInput("TRD_Hadr_HPt_L1"); - - // electron-positron pairs (open angle > 80 deg) - - Int_t secPlus, secMinus, 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; - } - } - } + // 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 (electronUnlikePair) SetInput("TRD_Unlike_EPair_L1"); - if (electronUnlikePairHPt) SetInput("TRD_Unlike_EPair_HPt_L1"); - - // like electron/positron pairs - - Bool_t ele1, ele1HPt; - Bool_t ele2, 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; - } - } + for (Int_t iStack = 0; iStack < 90; iStack++) { + if ((nTracks1[iStack] >= trackThreshold1) || (nTracks2[iStack] >= trackThreshold2)) + triggeredJet = kTRUE; } } - - 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; - } - } - } + else { + AliWarning("GTU Branch not found"); } - if (ele1 && ele2 ) SetInput("TRD_Like_EPair_L1"); - if (ele1HPt && ele2HPt) SetInput("TRD_Like_EPair_HPt_L1"); - - // single electron/positron + if (triggeredHighPt) { + AliInfo("Fired high-pt trigger"); + SetInput("1HSH"); + } - 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; } -