]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Patches for the TRD on-line tracklets and tracks in the AODs.
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 May 2013 12:50:22 +0000 (12:50 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 May 2013 12:50:22 +0000 (12:50 +0000)
In contrast to the ESDs, the AODs
contain only the tracks with the contributing tracklets, but not all
tracklets which were not matched to a TRD track. The commit:

- adds AliVTrdTracklet
- adds AliAODTrdTracklet
- adds AliAODTrdTrack
- makes adjustments to AliVTrdTrack and AliESDTrdTrack
- adds trdTracks as content to AliAODEvent

Jochen

19 files changed:
STEER/AOD/AliAODEvent.cxx
STEER/AOD/AliAODEvent.h
STEER/AOD/AliAODTrdTrack.cxx [new file with mode: 0644]
STEER/AOD/AliAODTrdTrack.h [new file with mode: 0644]
STEER/AOD/AliAODTrdTracklet.cxx [new file with mode: 0644]
STEER/AOD/AliAODTrdTracklet.h [new file with mode: 0644]
STEER/AODLinkDef.h
STEER/CMakelibAOD.pkg
STEER/CMakelibSTEERBase.pkg
STEER/ESD/AliESDEvent.h
STEER/ESD/AliESDTrdTrack.cxx
STEER/ESD/AliESDTrdTrack.h
STEER/ESD/AliESDTrdTracklet.cxx
STEER/ESD/AliESDTrdTracklet.h
STEER/STEERBase/AliVEvent.h
STEER/STEERBase/AliVTrdTrack.h
STEER/STEERBase/AliVTrdTracklet.cxx [new file with mode: 0644]
STEER/STEERBase/AliVTrdTracklet.h [new file with mode: 0644]
STEER/STEERBaseLinkDef.h

index a611fd8c4ca4d0b59faf547c0bf2e9ea0f4c2b76..50f78e1a0b27e5f8bd485097f9fb1f77b8ac7526 100644 (file)
@@ -31,6 +31,7 @@
 #include "AliAODHeader.h"
 #include "AliAODTrack.h"
 #include "AliAODDimuon.h"
+#include "AliAODTrdTrack.h"
 
 ClassImp(AliAODEvent)
 
@@ -54,7 +55,8 @@ ClassImp(AliAODEvent)
                                                      "AliAODTZERO",
                                                      "AliAODVZERO",
                                                      "AliAODZDC",
-                                                     "AliTOFHeader"
+                                                     "AliTOFHeader",
+                                                     "trdTracks"
 #ifdef MFT_UPGRADE       
                                                      ,"AliAODMFT"
 #endif                                               
@@ -85,7 +87,8 @@ AliAODEvent::AliAODEvent() :
   fAODTZERO(0),
   fAODVZERO(0),
   fAODZDC(0),
-  fTOFHeader(0)
+  fTOFHeader(0),
+  fTrdTracks(0)
 #ifdef MFT_UPGRADE
   ,fAODMFT(0)
 #endif
@@ -119,7 +122,8 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   fAODTZERO(new AliAODTZERO(*aod.fAODTZERO)),
   fAODVZERO(new AliAODVZERO(*aod.fAODVZERO)),
   fAODZDC(new AliAODZDC(*aod.fAODZDC)),
-  fTOFHeader(new AliTOFHeader(*aod.fTOFHeader))
+  fTOFHeader(new AliTOFHeader(*aod.fTOFHeader)),
+  fTrdTracks(new TClonesArray(*aod.fTrdTracks))
 #ifdef MFT_UPGRADE
   ,fAODMFT(new AliAODMFT(*aod.fAODMFT))
 #endif
@@ -145,6 +149,7 @@ AliAODEvent::AliAODEvent(const AliAODEvent& aod):
   AddObject(fAODVZERO);
   AddObject(fAODZDC);
   AddObject(fTOFHeader);
+  AddObject(fTrdTracks);
 #ifdef MFT_UPGRADE     
   AddObject(fAODVZERO);
 #endif
@@ -320,6 +325,7 @@ void AliAODEvent::CreateStdContent()
   AddObject(new AliAODVZERO());
   AddObject(new AliAODZDC());
   AddObject(new AliTOFHeader());
+  AddObject(new TClonesArray("AliAODTrdTrack", 0));
 #ifdef MFT_UPGRADE
   AddObject(new AliAODMFT());
 #endif
@@ -413,6 +419,7 @@ void AliAODEvent::GetStdContent()
   fAODVZERO      = (AliAODVZERO*)fAODObjects->FindObject("AliAODVZERO");
   fAODZDC        = (AliAODZDC*)fAODObjects->FindObject("AliAODZDC");
   fTOFHeader     = (AliTOFHeader*)fAODObjects->FindObject("AliTOFHeader");
+  fTrdTracks     = (TClonesArray*)fAODObjects->FindObject("trdTracks");
 #ifdef MFT_UPGRADE
   fAODMFT        = (AliAODMFT*)fAODObjects->FindObject("AliAODMFT");
 #endif
@@ -428,7 +435,8 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
                           Int_t fmdClusSize, 
                           Int_t pmdClusSize,
                            Int_t hmpidRingsSize,
-                          Int_t dimuonArrSize
+                          Int_t dimuonArrSize,
+                          Int_t nTrdTracks
                           )
 {
   // deletes content of standard arrays and resets size 
@@ -482,6 +490,13 @@ void AliAODEvent::ResetStd(Int_t trkArrSize,
     if (dimuonArrSize > fDimuons->GetSize()) 
       fDimuons->Expand(dimuonArrSize);
   }
+  if (fTrdTracks) {
+    // no pointers in there, so cheaper Clear suffices
+    fTrdTracks->Clear("C");
+    if (nTrdTracks > fTrdTracks->GetSize())
+      fTrdTracks->Expand(nTrdTracks);
+  }
+
   if (fTracklets)
     fTracklets->DeleteContainer();
   if (fPhosCells)
@@ -527,6 +542,8 @@ void AliAODEvent::ClearStd()
      fHMPIDrings   ->Clear();    
   if (fDimuons)
     fDimuons       ->Clear();
+  if (fTrdTracks)
+    fTrdTracks     ->Clear();
        
   if (fEMCALTrigger)
        fEMCALTrigger->DeAllocate();
@@ -993,3 +1010,6 @@ AliAODHMPIDrings *AliAODEvent::GetHMPIDring(Int_t nRings) const
   else return 0x0;  
 }
 //------------------------------------------------------------
+AliAODTrdTrack& AliAODEvent::AddTrdTrack(const AliVTrdTrack *track) {
+  return *(new ((*fTrdTracks)[fTrdTracks->GetEntriesFast()]) AliAODTrdTrack(*track));
+}
index 3f5230cbb03ebb1924c572d769ac55b6e6ef4c1e..a59d0e33b33bf04b30a3f8b5cde7d025385a627a 100644 (file)
@@ -35,6 +35,7 @@
 #include "AliAODVZERO.h"
 #include "AliAODHMPIDrings.h"
 #include "AliAODZDC.h"
+#include "AliAODTrdTrack.h"
 #ifdef MFT_UPGRADE
 #include "AliAODMFT.h"
 #endif
@@ -67,6 +68,7 @@ class AliAODEvent : public AliVEvent {
                       kAODVZERO,
                       kAODZDC,
                       kTOFHeader,                       
+                      kAODTrdTracks,
 #ifdef MFT_UPGRADE
                   kAODVZERO,
 #endif
@@ -248,6 +250,13 @@ class AliAODEvent : public AliVEvent {
   Int_t         AddDimuon(const AliAODDimuon* dimu)
     {new((*fDimuons)[fDimuons->GetEntriesFast()]) AliAODDimuon(*dimu); return fDimuons->GetEntriesFast()-1;}
   
+  // // -- TRD
+  Int_t GetNumberOfTrdTracks() const { return fTrdTracks ? fTrdTracks->GetEntriesFast() : 0; }
+  AliAODTrdTrack* GetTrdTrack(Int_t i) const {
+    return (AliAODTrdTrack *) (fTrdTracks ? fTrdTracks->At(i) : 0x0);
+  }
+  AliAODTrdTrack& AddTrdTrack(const AliVTrdTrack *track);
+
   // -- Services
   void    CreateStdContent();
   void    SetStdNames();
@@ -262,7 +271,8 @@ class AliAODEvent : public AliVEvent {
                   Int_t fmdClusSize = 0, 
                   Int_t pmdClusSize = 0,
                    Int_t hmpidRingsSize = 0,
-                  Int_t dimuonArrsize =0
+                  Int_t dimuonArrsize =0,
+                  Int_t nTrdTracks = 0
                   );
   void    ClearStd();
   void    Reset(); 
@@ -333,6 +343,7 @@ class AliAODEvent : public AliVEvent {
                             //  combinatorial algorithm.
                              //  It contains also TOF time resolution
                              //  and T0spread as written in OCDB
+  TClonesArray    *fTrdTracks;    //! TRD AOD tracks (triggered)
 #ifdef MFT_UPGRADE
   AliAODMFT       *fAODMFT;       //! VZERO AOD
 #endif
diff --git a/STEER/AOD/AliAODTrdTrack.cxx b/STEER/AOD/AliAODTrdTrack.cxx
new file mode 100644 (file)
index 0000000..24315e7
--- /dev/null
@@ -0,0 +1,123 @@
+#include "AliAODTrdTrack.h"
+
+AliAODTrdTrack::AliAODTrdTrack() :
+  AliVTrdTrack(),
+  fGlobalStack(-1),
+  fPID(0),
+  fLayerMask(0),
+  fA(0),
+  fFlagsTiming(0),
+  fTracklets(),
+  fTrackMatch(0x0),
+  fLabel(-1)
+{
+  // default constructor
+
+  fTracklets.SetClass("AliAODTrdTracklet", 6);
+}
+
+AliAODTrdTrack::AliAODTrdTrack(const AliVTrdTrack &rhs) :
+  AliVTrdTrack(rhs),
+  fGlobalStack(5*rhs.GetSector() + rhs.GetStack()),
+  fPID(rhs.GetPID()),
+  fLayerMask(rhs.GetLayerMask()),
+  fA(rhs.GetA()),
+  fFlagsTiming(rhs.GetFlagsTiming()),
+  fTracklets(),
+  fTrackMatch(rhs.GetTrackMatch()),
+  fLabel(rhs.GetLabel())
+{
+  // constructor from abstract base class
+
+  // copy the contributing tracklets
+  for (Int_t iTracklet = 0; iTracklet < 6; ++iTracklet) {
+    const AliVTrdTracklet *trkl = rhs.GetTracklet(iTracklet);
+    if (trkl)
+      new (fTracklets[iTracklet]) AliAODTrdTracklet(*trkl);
+  }
+}
+
+AliAODTrdTrack::AliAODTrdTrack(const AliAODTrdTrack& rhs) :
+  AliVTrdTrack(rhs),
+  fGlobalStack(rhs.fGlobalStack),
+  fPID(rhs.fPID),
+  fLayerMask(rhs.fLayerMask),
+  fA(rhs.fA),
+  fFlagsTiming(rhs.fFlagsTiming),
+  fTracklets(),
+  fTrackMatch(rhs.fTrackMatch),
+  fLabel(rhs.fLabel)
+{
+  // copy constructor
+
+  // copy the contributing tracklets
+  for (Int_t iTracklet = 0; iTracklet < 6; ++iTracklet) {
+    const AliVTrdTracklet *trkl = rhs.GetTracklet(iTracklet);
+    if (trkl)
+      new (fTracklets[iTracklet]) AliAODTrdTracklet(*trkl);
+  }
+}
+
+AliAODTrdTrack& AliAODTrdTrack::operator=(const AliAODTrdTrack& rhs)
+{
+  // assignment operator
+
+  if (&rhs != this)
+    AliVTrdTrack::operator=(rhs);
+
+  fGlobalStack = rhs.fGlobalStack;
+  fPID         = rhs.fPID;
+  fLayerMask   = rhs.fLayerMask;
+  fA           = rhs.fA;
+  fFlagsTiming = rhs.fFlagsTiming;
+  fTrackMatch  = rhs.fTrackMatch;
+  fLabel       = rhs.fLabel;
+
+  // assign the contributing tracklets
+  for (Int_t iTracklet = 0; iTracklet < 6; ++iTracklet) {
+    const AliVTrdTracklet *trkl = rhs.GetTracklet(iTracklet);
+    if (trkl)
+      new (fTracklets[iTracklet]) AliAODTrdTracklet(*trkl);
+  }
+
+  return *this;
+}
+
+void AliAODTrdTrack::Copy(TObject &rhs) const
+{
+  // copy
+
+  AliVTrdTrack::Copy(rhs);
+}
+
+Int_t AliAODTrdTrack::GetPt() const
+{
+  // calculate pt from a as done in hardware
+
+  const Int_t maskIdLut[64] = {
+    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
+    -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
+    -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
+    -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
+  };
+
+  const Int_t c1Lut[32] = {
+    -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
+    -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
+    -2670, -2557, -2763, -2557, -2644, -2523,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
+  };
+
+  if (this->GetA() != 0) {
+    Int_t layerMaskId = maskIdLut[this->GetLayerMask()];
+    Int_t c1 = c1Lut[layerMaskId];
+    Int_t c1Ext = c1 << 8;
+    Int_t ptRawStage4 = c1Ext / ((this->GetA() >> 2) != 0 ? (this->GetA() >> 2) : 1 );
+    Int_t ptRawComb4 = ptRawStage4;
+    Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
+
+    return -ptExtComb4/2;
+  }
+  else
+    return 0;
+}
diff --git a/STEER/AOD/AliAODTrdTrack.h b/STEER/AOD/AliAODTrdTrack.h
new file mode 100644 (file)
index 0000000..79e1af9
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef ALIAODTRDTRACK_H
+#define ALIAODTRDTRACK_H
+
+//
+// format for the TRD tracks calculated in the
+// Global Tracking Unit, used for the TRD L1 trigger
+// Author: Jochen Klein <jochen.klein@cern.ch>
+
+#include "TRef.h"
+#include "TClonesArray.h"
+#include "AliVTrack.h"
+#include "AliVTrdTrack.h"
+#include "AliAODTrdTracklet.h"
+
+class AliAODTrdTrack : public AliVTrdTrack {
+ public:
+
+  AliAODTrdTrack();
+  AliAODTrdTrack(const AliVTrdTrack &rhs);
+  virtual ~AliAODTrdTrack() {};
+  AliAODTrdTrack(const AliAODTrdTrack& track);
+  AliAODTrdTrack& operator=(const AliAODTrdTrack& track);
+  virtual void Copy(TObject &obj) const;
+
+  virtual Int_t GetA()         const { return fA; }
+  virtual Int_t GetLayerMask() const { return fLayerMask; }
+  virtual Int_t GetPID()       const { return fPID; }
+  virtual Int_t GetPt()        const;
+  virtual Int_t GetStack()     const { return fGlobalStack%5; }
+  virtual Int_t GetSector()    const { return fGlobalStack/5; }
+
+  virtual Bool_t GetTrackInTime() const { return (fFlagsTiming & 0x1); }
+  virtual UChar_t GetFlagsTiming() const { return fFlagsTiming; }
+
+  virtual Int_t GetLabel()     const { return fLabel; }
+
+  virtual Double_t Pt()        const { return GetPt() / 128.; }
+
+  Int_t GetNTracklets() const {
+    Int_t count = 0;
+    for (Int_t iLayer = 0; iLayer < 6; ++iLayer)
+      count += (fLayerMask >> iLayer) & 1;
+    return count;
+  }
+  virtual AliAODTrdTracklet* GetTracklet(Int_t idx) const { return (AliAODTrdTracklet*) fTracklets[idx]; }
+
+  virtual AliVTrack* GetTrackMatch() const { return 0x0; }
+
+  virtual void SetA(Int_t a) { fA = a; }
+  virtual void SetLayerMask(Int_t mask) { fLayerMask = mask; }
+  virtual void SetPID(Int_t pid) { fPID = pid; }
+  virtual void SetLabel(Int_t label) { fLabel = label; }
+  virtual void SetSector(Int_t sector) { fGlobalStack = 5*sector + (fGlobalStack%5); }
+  virtual void SetStack(Int_t stack) { fGlobalStack = 5*(fGlobalStack%5) + stack; }
+
+  void AddTracklet(const AliVTrdTracklet& trkl, Int_t layer) { new (fTracklets[layer]) AliAODTrdTracklet(trkl); }
+  void SetTrackMatchReference(AliVTrack *trk) { fTrackMatch = trk; }
+
+  virtual Bool_t IsSortable() const { return kFALSE; }
+  virtual Int_t Compare(const TObject* /* obj */) const { return 0; }
+
+ protected:
+
+  Char_t   fGlobalStack;                 // stack (0-89) in which the track was found
+                                         // (unique because of stack-wise tracking)
+  UChar_t  fPID;                         // electron PID for this track
+  UChar_t  fLayerMask;                   // mask of contributing tracklets
+  Int_t    fA;                           // transverse offset from nominal primary vertex
+  UChar_t  fFlagsTiming;                  // timing flags
+
+  TClonesArray fTracklets;                // array of contributing tracklets
+  TRef fTrackMatch;                       // reference to matched global track
+
+  Int_t fLabel;                                  // Track label
+
+  ClassDef(AliAODTrdTrack,1)
+};
+
+#endif
diff --git a/STEER/AOD/AliAODTrdTracklet.cxx b/STEER/AOD/AliAODTrdTracklet.cxx
new file mode 100644 (file)
index 0000000..4f9a0b9
--- /dev/null
@@ -0,0 +1,94 @@
+#include "AliAODTrdTracklet.h"
+
+AliAODTrdTracklet::AliAODTrdTracklet() :
+  AliVTrdTracklet(),
+  fHCId(-1),
+  fTrackletWord(0),
+  fLabel(-1)
+{
+  // default constructor
+
+}
+
+AliAODTrdTracklet::AliAODTrdTracklet(const AliVTrdTracklet &rhs) :
+  AliVTrdTracklet(rhs),
+  fHCId(rhs.GetHCId()),
+  fTrackletWord(rhs.GetTrackletWord()),
+  fLabel(rhs.GetLabel())
+{
+  // default constructor
+
+}
+
+AliAODTrdTracklet::AliAODTrdTracklet(UInt_t trackletWord, Short_t hcid, Int_t label) :
+  AliVTrdTracklet(),
+  fHCId(hcid),
+  fTrackletWord(trackletWord),
+  fLabel(label)
+{
+  // constructor
+
+}
+
+AliAODTrdTracklet::AliAODTrdTracklet(const AliAODTrdTracklet& rhs) :
+  AliVTrdTracklet(rhs),
+  fHCId(rhs.fHCId),
+  fTrackletWord(rhs.fTrackletWord),
+  fLabel(rhs.fLabel)
+{
+  // copy constructor
+
+}
+
+AliAODTrdTracklet& AliAODTrdTracklet::operator=(const AliAODTrdTracklet& rhs)
+{
+  // assignment operator
+
+  if (&rhs != this) {
+    AliVTrdTracklet::operator=(rhs);
+
+    fHCId = rhs.fHCId;
+    fTrackletWord = rhs.fTrackletWord;
+    fLabel = rhs.fLabel;
+  }
+
+  return *this;
+}
+
+void AliAODTrdTracklet::Copy(TObject &rhs) const
+{
+  // copy
+
+  AliVTrdTracklet::Copy(rhs);
+}
+
+Int_t AliAODTrdTracklet::GetBinY() const
+{
+  // returns (signed) value of Y
+
+  if (fTrackletWord & 0x1000) {
+    return -((~(fTrackletWord-1)) & 0x1fff);
+  }
+  else {
+    return (fTrackletWord & 0x1fff);
+  }
+}
+
+Int_t AliAODTrdTracklet::GetBinDy() const
+{
+  // returns (signed) value of the deflection length
+
+  if (fTrackletWord & (1 << 19)) {
+    return -((~((fTrackletWord >> 13) - 1)) & 0x7f);
+  }
+  else {
+    return ((fTrackletWord >> 13) & 0x7f);
+  }
+}
+
+// Float_t AliAODTrdTracklet::GetDyDx() const
+// {
+//   // returns the deflection over 3 cm drift length
+
+//   return GetBinDy() * fgkBinWidthDy/fgkDriftLength;
+// }
diff --git a/STEER/AOD/AliAODTrdTracklet.h b/STEER/AOD/AliAODTrdTracklet.h
new file mode 100644 (file)
index 0000000..6ce10c1
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef ALIAODTRDTRACKLET_H
+#define ALIAODTRDTRACKLET_H
+
+#include "AliVTrdTracklet.h"
+
+class AliAODTrdTracklet : public AliVTrdTracklet {
+ public:
+
+  AliAODTrdTracklet();
+  AliAODTrdTracklet(const AliVTrdTracklet &rhs);
+  AliAODTrdTracklet(UInt_t trackletWord, Short_t hcid, Int_t label = -1);
+  virtual ~AliAODTrdTracklet() {};
+  AliAODTrdTracklet(const AliAODTrdTracklet& track);
+  AliAODTrdTracklet& operator=(const AliAODTrdTracklet& track);
+  virtual void Copy(TObject &obj) const;
+
+  void SetTrackletWord(UInt_t trklWord) { fTrackletWord = trklWord; }
+  void SetHCId(Short_t hcid) { fHCId = hcid; }
+  void SetLabel(Int_t label) { fLabel = label; }
+
+  virtual UInt_t GetTrackletWord() const { return fTrackletWord; }
+  virtual Int_t  GetBinY()  const;
+  virtual Int_t  GetBinDy() const;
+  virtual Int_t  GetBinZ()  const { return ((fTrackletWord >> 20) & 0xf);  }
+  virtual Int_t  GetPID()   const { return ((fTrackletWord >> 24) & 0xff); }
+
+  virtual Int_t GetHCId() const { return fHCId; }
+  virtual Int_t GetDetector() const { return fHCId / 2; }
+
+  virtual Int_t GetLabel() const { return fLabel; }
+
+ protected:
+  Short_t fHCId;               // half-chamber ID
+  UInt_t fTrackletWord;                // tracklet word (as from FEE)
+                               // pppp : pppp : zzzz : dddd : dddy : yyyy : yyyy : yyyy
+  Int_t  fLabel;               // MC label
+
+  ClassDef(AliAODTrdTracklet,1)
+};
+
+#endif
index fd308c331da1bf31b9fe1f4661e436d445bc48f0..10c46c32ccaeef7144f025fc1bf59abf2118e79d 100644 (file)
@@ -61,6 +61,8 @@
 #pragma link C++ class AliAODVZERO+;
 #pragma link C++ class AliAODZDC+;
 #pragma link C++ class AliAODHMPIDrings+;
+#pragma link C++ class AliAODTrdTrack+;
+#pragma link C++ class AliAODTrdTracklet+;
 
 #pragma link C++ method AliAODTrack::SetPosition<double>(double const*, bool);
 
index 1405a136d574ec97720100ca113d825c1ab157cb..a7ea73a0ba6ca86eff74d3d0f5cad749f2777330 100644 (file)
@@ -45,6 +45,8 @@ set ( SRCS
     AOD/AliAODVZERO.cxx
     AOD/AliAODZDC.cxx  
     AOD/AliAODHMPIDrings.cxx   
+    AOD/AliAODTrdTrack.cxx
+    AOD/AliAODTrdTracklet.cxx
     )
 
 string( REPLACE ".cxx" ".h" HDRS "${SRCS}")
index 2366ac24db3bfc2af79e54204d9d98e15eea4c18..d7915b12fcda584987522c62cf9ff81568d773cd 100644 (file)
@@ -89,6 +89,7 @@ set ( SRCS
     STEERBase/AliVCaloTrigger.cxx
     STEERBase/AliProdInfo.cxx
     STEERBase/AliVTrdTrack.cxx
+    STEERBase/AliVTrdTracklet.cxx
   )
 
 string(REPLACE ".cxx" ".h" HDRS  "${SRCS}")
index 3224ccaba1d383fc0b9245906f5c7e502eba5422..ca7557f681014116960045963ca71e4cf9726f85 100644 (file)
@@ -40,6 +40,7 @@
 #include "AliESDCaloCells.h"
 
 #include "AliESDVZERO.h"
+#include "AliESDTrdTrack.h"
 #ifdef MFT_UPGRADE
 //#include "AliESDMFT.h"
 #endif
@@ -55,7 +56,6 @@ class AliMultiplicity;
 class AliRawDataErrorLog;
 class AliESDRun;
 class AliESDTrdTrigger;
-class AliESDTrdTrack;
 class AliESDTrdTracklet;
 class AliESDMuonTrack;
 class AliESDMuonCluster;
index 24665b6fc76bc09427261d2e87e18553ce9394a0..5f41fc3d407228a11acb1ab39d1e7b195e95b126 100644 (file)
@@ -100,6 +100,7 @@ AliESDTrdTrack& AliESDTrdTrack::operator=(const AliESDTrdTrack& track)
   fFlags        = track.fFlags;
   fFlagsTiming  = track.fFlagsTiming;
   fReserved     = track.fReserved;
+  fTrackMatch   = track.fTrackMatch;
   fLabel        = track.fLabel;
   for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
     fTrackletIndex[iLayer] = track.fTrackletIndex[iLayer];
index 751270ba63e983ce2b48f2eb00d9183845f29667..19fdfdb9a4ed941aad01dae34001c3e3e634eaac 100644 (file)
@@ -44,6 +44,12 @@ class AliESDTrdTrack : public AliVTrdTrack {
   Double_t Phi()       const { return 0.; };
   Double_t Eta()       const { return 0.; };
 
+  Int_t GetNTracklets() const {
+    Int_t count = 0;
+    for (Int_t iLayer = 0; iLayer < 6; ++iLayer)
+      count += (fLayerMask >> iLayer) & 1;
+    return count;
+  }
   AliESDTrdTracklet* GetTracklet(Int_t idx) const
     { return (GetLayerMask() & (1<<idx)) ? (AliESDTrdTracklet*) ((fTrackletRefs[idx]).GetObject()) : 0x0; }
   AliVTrack* GetTrackMatch() const { return (AliVTrack*) fTrackMatch.GetObject(); }
index ef341473306a011647a93809629e8b306d9e9f0b..3dd3c2284d1382bd9d9d1222c17b25c28e85a814 100644 (file)
 
 ClassImp(AliESDTrdTracklet)
 
-const Float_t AliESDTrdTracklet::fgkBinWidthY   = 160e-4; // 160 um
-const Float_t AliESDTrdTracklet::fgkBinWidthDy  = 140e-4; // 140 um
-const Float_t AliESDTrdTracklet::fgkX0          = 2.21;
-const Float_t AliESDTrdTracklet::fgkDriftLength = 3.;
-
 AliESDTrdTracklet::AliESDTrdTracklet() :
-  TObject(),
+  AliVTrdTracklet(),
   fHCId(-1),
   fTrackletWord(0),
   fLabel(-1)
@@ -41,7 +36,7 @@ AliESDTrdTracklet::AliESDTrdTracklet() :
 }
 
 AliESDTrdTracklet::AliESDTrdTracklet(UInt_t trackletWord, Short_t hcid, Int_t label) :
-  TObject(),
+  AliVTrdTracklet(),
   fHCId(hcid),
   fTrackletWord(trackletWord),
   fLabel(label)
@@ -55,7 +50,7 @@ AliESDTrdTracklet::~AliESDTrdTracklet()
 }
 
 AliESDTrdTracklet::AliESDTrdTracklet(const AliESDTrdTracklet &trkl) :
-  TObject(trkl),
+  AliVTrdTracklet(trkl),
   fHCId(trkl.fHCId),
   fTrackletWord(trkl.fTrackletWord),
   fLabel(trkl.fLabel)
@@ -71,7 +66,7 @@ AliESDTrdTracklet& AliESDTrdTracklet::operator=(const AliESDTrdTracklet &trkl)
   if (this == &trkl)
     return *this;
 
-  TObject::operator=(trkl);
+  AliVTrdTracklet::operator=(trkl);
   fHCId = trkl.fHCId;
   fTrackletWord = trkl.fTrackletWord;
   fLabel = trkl.fLabel;
@@ -102,10 +97,3 @@ Int_t AliESDTrdTracklet::GetBinDy() const
     return ((fTrackletWord >> 13) & 0x7f);
   }
 }
-
-Float_t AliESDTrdTracklet::GetDyDx() const
-{
-  // returns the deflection over 3 cm drift length
-
-  return GetBinDy() * fgkBinWidthDy/fgkDriftLength;
-}
index a29da8a6582307cdd82655c5d67cfb05b0428424..182a28dd71d483a4db48ccc7fa692db4fec91c1d 100644 (file)
@@ -6,9 +6,9 @@
 
 // ESD format for TRD tracklet from FEE used for triggering
 
-#include "TObject.h"
+#include "AliVTrdTracklet.h"
 
-class AliESDTrdTracklet : public TObject
+class AliESDTrdTracklet : public AliVTrdTracklet
 {
  public:
   AliESDTrdTracklet();
@@ -19,18 +19,14 @@ class AliESDTrdTracklet : public TObject
 
   void SetTrackletWord(UInt_t trklWord) { fTrackletWord = trklWord; }
   void SetHCId(Short_t hcid) { fHCId = hcid; }
+  void SetLabel(Int_t label) { fLabel = label; }
 
   // ----- tracklet information -----
-  UInt_t GetTrackletWord() const { return fTrackletWord; }
-  Int_t  GetBinY()  const;
-  Int_t  GetBinDy() const;
-  Int_t  GetBinZ()  const { return ((fTrackletWord >> 20) & 0xf);  }
-  Int_t  GetPID()   const { return ((fTrackletWord >> 24) & 0xff); }
-
-  // ----- position information (chamber-local) -----
-  Float_t GetLocalX() const { return fgkX0; }
-  Float_t GetLocalY() const { return GetBinY() * fgkBinWidthY; }
-  Float_t GetDyDx() const;
+  virtual UInt_t GetTrackletWord() const { return fTrackletWord; }
+  virtual Int_t  GetBinY()  const;
+  virtual Int_t  GetBinDy() const;
+  virtual Int_t  GetBinZ()  const { return ((fTrackletWord >> 20) & 0xf);  }
+  virtual Int_t  GetPID()   const { return ((fTrackletWord >> 24) & 0xff); }
 
   // ----- geometrical information -----
   Int_t GetHCId() const { return fHCId; }
@@ -48,12 +44,6 @@ class AliESDTrdTracklet : public TObject
                                // pppp : pppp : zzzz : dddd : dddy : yyyy : yyyy : yyyy
   Int_t  fLabel;               // MC label
 
-  static const Float_t fgkBinWidthY;   // bin width y-position
-  static const Float_t fgkBinWidthDy;  // bin width deflection length
-
-  static const Float_t fgkX0;          // reference position in x-direction
-  static const Float_t fgkDriftLength; // drift length to which the deflection length is scaled
-
   ClassDef(AliESDTrdTracklet, 1);
 };
 
index 5f89d295cc52512dd9de0e732ae66aca7dd43554..fa14f83e156eb2147132dae4e5745a7093534eb7 100644 (file)
@@ -24,6 +24,7 @@
 #include "AliVCaloTrigger.h"
 #include "TRefArray.h"
 #include "AliTOFHeader.h"
+#include "AliVTrdTrack.h"
 class AliCentrality;
 class AliEventplane;
 class AliVVZERO;
@@ -190,6 +191,9 @@ public:
   virtual void           SetVZEROEqFactors(Float_t /* factors */[64]) const {return;}
   virtual AliVZDC   *GetZDCData() const = 0;
 
+  virtual Int_t GetNumberOfTrdTracks() const { return 0; }
+  virtual AliVTrdTrack* GetTrdTrack(Int_t /* iTrack */) const { return 0x0; }
+
   ClassDef(AliVEvent,2)  // base class for AliEvent data
 };
 #endif 
index 19962c6efacc3e9b6e45d9e52638e3088b018ff8..05bafcee3955e459e40bd27819245dfee4b8fbc5 100644 (file)
@@ -9,6 +9,7 @@
 #include "TObject.h"
 
 class AliVTrack;
+class AliVTrdTracklet;
 
 class AliVTrdTrack : public TObject {
  public:
@@ -27,11 +28,15 @@ class AliVTrdTrack : public TObject {
   virtual Int_t GetSector()    const = 0;
 
   virtual Bool_t GetTrackInTime() const = 0;
+  virtual UChar_t GetFlagsTiming() const = 0;
 
   virtual Int_t GetLabel()     const = 0;
 
   virtual Double_t Pt()        const = 0;
 
+  virtual Int_t GetNTracklets() const = 0;
+  virtual AliVTrdTracklet* GetTracklet(Int_t idx) const = 0;
+
   virtual AliVTrack* GetTrackMatch() const = 0;
 
   virtual void SetA(Int_t a) = 0;
diff --git a/STEER/STEERBase/AliVTrdTracklet.cxx b/STEER/STEERBase/AliVTrdTracklet.cxx
new file mode 100644 (file)
index 0000000..ceb7a13
--- /dev/null
@@ -0,0 +1,36 @@
+#include "AliVTrdTracklet.h"
+
+const Float_t AliVTrdTracklet::fgkBinWidthY   = 160e-4; // 160 um
+const Float_t AliVTrdTracklet::fgkBinWidthDy  = 140e-4; // 140 um
+const Float_t AliVTrdTracklet::fgkDriftLength = 3.;     //   3 cm
+
+AliVTrdTracklet::AliVTrdTracklet() :
+  TObject()
+{
+  // default constructor
+
+}
+
+AliVTrdTracklet::AliVTrdTracklet(const AliVTrdTracklet& rhs) :
+  TObject(rhs)
+{
+  // copy constructor
+
+}
+
+AliVTrdTracklet& AliVTrdTracklet::operator=(const AliVTrdTracklet& rhs)
+{
+  // assignment operator
+
+  if (&rhs != this)
+    TObject::operator=(rhs);
+
+  return *this;
+}
+
+void AliVTrdTracklet::Copy(TObject &rhs) const
+{
+  // copy
+
+  TObject::Copy(rhs);
+}
diff --git a/STEER/STEERBase/AliVTrdTracklet.h b/STEER/STEERBase/AliVTrdTracklet.h
new file mode 100644 (file)
index 0000000..a16b640
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef ALIVTRDTRACKLET_H
+#define ALIVTRDTRACKLET_H
+
+// format for the TRD tracklets calculated in the FEE,
+// used for the TRD L1 trigger
+// Author: Jochen Klein <jochen.klein@cern.ch>
+
+#include "TObject.h"
+
+class AliVTrdTracklet : public TObject {
+ public:
+
+  AliVTrdTracklet();
+  virtual ~AliVTrdTracklet() {};
+  AliVTrdTracklet(const AliVTrdTracklet& track);
+  AliVTrdTracklet& operator=(const AliVTrdTracklet& track);
+  virtual void Copy(TObject &obj) const;
+
+  // tracklet information
+  virtual UInt_t GetTrackletWord() const = 0;
+  virtual Int_t  GetBinY() const = 0;
+  virtual Int_t  GetBinDy() const = 0;
+  virtual Int_t  GetBinZ() const = 0;
+  virtual Int_t  GetPID() const = 0;
+
+  // position and deflection information (chamber-local)
+  Float_t GetLocalY() const { return GetBinY() * fgkBinWidthY; }
+  Float_t GetDyDx() const { return GetBinDy() * fgkBinWidthDy/fgkDriftLength; }
+
+  virtual Int_t GetHCId() const = 0;
+  virtual Int_t GetDetector() const = 0;
+  virtual Int_t GetLabel() const = 0;
+
+ protected:
+
+  static const Float_t fgkBinWidthY;   // bin width y-position
+  static const Float_t fgkBinWidthDy;  // bin width deflection length
+  static const Float_t fgkDriftLength; // drift length to which the deflection length is scaled
+
+  ClassDef(AliVTrdTracklet,0)
+};
+
+#endif
index 2865bbd554b2988a0ead587ede4a1cf623a58c02..311474635adfba078632cc0c412c4ebf41b58772 100644 (file)
 #pragma link C++ class AliProdInfo+;
 
 #pragma link C++ class AliVTrdTrack+;
+#pragma link C++ class AliVTrdTracklet+;
 
 #endif