]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDTriggerL1.cxx
Updated ideal geometry, including ACORDE
[u/mrichter/AliRoot.git] / TRD / AliTRDTriggerL1.cxx
index ea9fb30b63caf6af3558441255fa99ffcfc0afce..5a67fccdf5c5ff92c644180ee5fef1ce237493ae 100644 (file)
@@ -23,7 +23,9 @@
 
 #include <TMath.h>
 
-#include "AliRun.h"
+#include "AliRunLoader.h"
+#include "AliConfig.h"
+#include "AliTracker.h"
 #include "AliTriggerInput.h"
 
 #include "AliTRDTriggerL1.h"
 ClassImp(AliTRDTriggerL1)
 
 //_____________________________________________________________________________
-AliTRDTriggerL1::AliTRDTriggerL1():AliTriggerDetector()
+AliTRDTriggerL1::AliTRDTriggerL1()
+  :AliTriggerDetector()
 {
+  //
+  // Default constructor
+  //
 
   SetName("TRD");
 
@@ -45,76 +51,93 @@ AliTRDTriggerL1::AliTRDTriggerL1():AliTriggerDetector()
 //_____________________________________________________________________________
 void AliTRDTriggerL1::CreateInputs()
 {
-
-  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 ));
+  //
+  // See TRIGGER/DAQ/HLT/DCS Techical Design Report,
+  // p. 58, Table 4.1 for the proposed inputs
+  //
+
+  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 ));
 
 }
 
 //_____________________________________________________________________________
 void AliTRDTriggerL1::Trigger()
 {
+  // 
+  // Run the online tracking and trigger
+  // 
 
-  AliRunLoader* runLoader = gAlice->GetRunLoader();
-
-  AliLoader *loader=runLoader->GetLoader("TRDLoader");
-
-  Int_t nEvents = runLoader->GetNumberOfEvents();
-
-  // Trigger (tracklets, LTU)
-
-  AliTRDgeometry *geo = AliTRDgeometry::GetGeometry(runLoader);
+  TString          evfoldname = AliConfig::GetDefaultEventFolderName();
+  AliRunLoader    *runLoader  = AliRunLoader::GetRunLoader(evfoldname);
+  AliLoader       *loader     = runLoader->GetLoader("TRDLoader");
+  AliTRDgeometry   geo;
 
   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();
+  Float_t field = AliTracker::GetBz() * 0.1; // Tesla
+  AliInfo(Form("Trigger set for magnetic field = %f Tesla \n",field));
 
-  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);
-
-  }
+  trdTrigger.Open(runLoader->GetFileName(), runLoader->GetEventNumber());
+  trdTrigger.ReadDigits();
+  trdTrigger.MakeTracklets(kTRUE);
+  trdTrigger.WriteTracklets(-1);
 
   // Trigger (tracks, GTU)
 
-  Float_t highPt = trigp->GetHighPt();
+  Float_t highPt    = AliTRDtrigParam::Instance()->GetHighPt();
+  Float_t jetLowPt  = AliTRDtrigParam::Instance()->GetJetLowPt();
+  Float_t jetHighPt = AliTRDtrigParam::Instance()->GetJetHighPt();
 
-  Float_t pid, pt;
-  Int_t   det, sec;
+  Float_t pid;
+  Float_t pt;
+  Int_t   det;
+  Int_t   sec;
   Bool_t  isElectron;
 
-  const Int_t maxEle = 1000;
+  const Int_t kMaxEle = 1000;
+
+  Int_t   electronPlus;
+  Int_t   electronMinus;
+  Int_t   sectorElePlus[kMaxEle];
+  Int_t   sectorEleMinus[kMaxEle];
+  Float_t ptElePlus[kMaxEle];   
+  Float_t ptEleMinus[kMaxEle];
+  Int_t   hadronLowPt;
+  Int_t   hadronHighPt;
+  Int_t   hadronJetLowPt;
+  Int_t   hadronJetHighPt;
 
-  Int_t   electronPlus,          electronMinus;
-  Int_t   sectorElePlus[maxEle], sectorEleMinus[maxEle];
-  Float_t ptElePlus[maxEle],     ptEleMinus[maxEle];
-  Int_t   hadronLowPt, hadronHighPt;
+  hadronJetLowPt  = 0;
+  hadronJetHighPt = 0;
 
-  electronPlus  = 0;
-  electronMinus = 0;
+  hadronLowPt     = 0;
+  hadronHighPt    = 0;
+
+  electronPlus    = 0;
+  electronMinus   = 0;
 
   AliTRDgtuTrack *gtuTrack;
   Int_t nTracks = trdTrigger.GetNumberOfTracks();
@@ -126,8 +149,7 @@ void AliTRDTriggerL1::Trigger()
     isElectron = gtuTrack->IsElectron();
     pt         = gtuTrack->GetPt();
     det        = gtuTrack->GetDetector();
-
-    sec        = geo->GetSector(det);
+    sec        = geo.GetSector(det);
 
     if (isElectron) {
 
@@ -135,47 +157,73 @@ void AliTRDTriggerL1::Trigger()
        sectorEleMinus[electronMinus] = sec;
        ptEleMinus[electronMinus]     = pt;
        electronMinus++;
-      } else {
-       sectorElePlus[electronPlus] = sec;
-       ptElePlus[electronPlus]     = pt;
+      } 
+      else {
+       sectorElePlus[electronPlus]   = sec;
+       ptElePlus[electronPlus]       = pt;
        electronPlus++;
       }
 
-    } else {
+    } 
+    else {
 
       if (TMath::Abs(pt) < highPt) {
        hadronLowPt++;
-      } else {
+      } 
+      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
+  if (hadronLowPt) {
+    SetInput("TRD_Hadr_LPt_L1");
+  }
+  if (hadronHighPt) {
+    SetInput("TRD_Hadr_HPt_L1");
+  }
 
-  // electron-positron pairs (open angle > 80 deg)
+  // Hadrons from jets
+  if (hadronJetLowPt  >= AliTRDtrigParam::Instance()->GetNPartJetLow() ) {
+    SetInput("TRD_Jet_LPt_L1");
+  }
+  if (hadronJetHighPt >= AliTRDtrigParam::Instance()->GetNPartJetHigh()) {
+    SetInput("TRD_Jet_HPt_L1");
+  }
 
-  Int_t  secPlus, secMinus, secDiff;
+  // 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) {
+  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;
+       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) {
+         if ((TMath::Abs(ptElePlus[iPlus]) > highPt) && 
+              (TMath::Abs(ptEleMinus[iMinus]) > highPt)) {
            electronUnlikePairHPt = kTRUE;
          }
        }
@@ -183,70 +231,87 @@ void AliTRDTriggerL1::Trigger()
     }
   }
 
-  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;
+  if (electronUnlikePair) {
+    SetInput("TRD_Unlike_EPair_L1");
+  }
+  //if (electronUnlikePairHPt) {
+  //  SetInput("TRD_Unlike_EPair_HPt_L1");
+  //}
 
-  // positive
+  // 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) {
+      if      (!ele1) {
        ele1 = kTRUE;
-      } else if (!ele2) {
+      } 
+      else if (!ele2) {
        ele2 = kTRUE;
       }
       if (TMath::Abs(ptElePlus[iPlus]) > highPt) {
-       if (!ele1HPt) {
+       if      (!ele1HPt) {
          ele1HPt = kTRUE;
-       } else if (!ele2HPt) {
+       } 
+        else if (!ele2HPt) {
          ele2HPt = kTRUE;
        }
       }
     }
   }
 
-  if (ele1    && ele2   ) SetInput("TRD_Like_EPair_L1");
-  if (ele1HPt && ele2HPt) SetInput("TRD_Like_EPair_HPt_L1");
-  
-  // negative
+  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) {
+      if      (!ele1) {
        ele1 = kTRUE;
-      } else if (!ele2) {
+      } 
+      else if (!ele2) {
        ele2 = kTRUE;
       }
       if (TMath::Abs(ptEleMinus[iMinus]) > highPt) {
-       if (!ele1HPt) {
+       if      (!ele1HPt) {
          ele1HPt = kTRUE;
-       } else if (!ele2HPt) {
+       } 
+        else if (!ele2HPt) {
          ele2HPt = kTRUE;
        }
       }
     }
   }
 
-  if (ele1    && ele2   ) SetInput("TRD_Like_EPair_L1");
-  if (ele1HPt && ele2HPt) SetInput("TRD_Like_EPair_HPt_L1");
+  if (ele1    && ele2   ) {
+    SetInput("TRD_Like_EPair_L1");
+  }
+  //if (ele1HPt && ele2HPt) {
+  //  SetInput("TRD_Like_EPair_HPt_L1");
+  //}
   
-  // single electron/positron
+  // Single electron/positron
 
-  if (electronPlus > 0 || electronMinus > 0) {
+  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;
@@ -255,6 +320,7 @@ void AliTRDTriggerL1::Trigger()
       if (TMath::Abs(ptEleMinus[iMinus]) > highPt) SetInput("TRD_Electron_HPt_L1");
       break;
     }
+    */
   }
 
 }