]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtrackGTU.cxx
Coding Conventions (Ruban)
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackGTU.cxx
index 0157c7350afa9bd6a4bb130b6d39b6d90edb1ff7..6ffebc2f59155493c5208994a26a4c6778ca4298 100644 (file)
 
 #include "TObject.h"
 #include "TObjArray.h"
+#include "TClass.h"
+#include "TH1F.h"
 
+#include "AliESDTrdTrack.h"
 #include "AliLog.h"
 #include "AliTRDgtuParam.h"
 #include "AliTRDtrackGTU.h"
 #include "AliTRDtrackletGTU.h"
+#include "AliTRDtrackletMCM.h"
 #include "AliESDTrdTrack.h"
 
 ClassImp(AliTRDtrackGTU)
-    
+
 AliTRDtrackGTU::AliTRDtrackGTU() :
   TObject(),
   fStack(-1),
   fSector(-1),
-  fPt(0),
   fPID(0),
   fTracklets(0x0),
   fTrackletMask(0),
@@ -48,22 +51,73 @@ AliTRDtrackGTU::AliTRDtrackGTU() :
   fZSubChannel(-1),
   fA(0),
   fB(0),
-  fC(0)
+  fC(0),
+  fLabel(-1)
 {
+// default ctor
+
   fTracklets = new TClonesArray("AliTRDtrackletGTU", 6);
   for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
       new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU();
 //  fTracklets->BypassStreamer(kFALSE);
 }
 
+AliTRDtrackGTU::AliTRDtrackGTU(const AliTRDtrackGTU &rhs) :
+  TObject(),
+  fStack(rhs.fStack),
+  fSector(rhs.fSector),
+  fPID(rhs.fPID),
+  fTracklets(0x0),
+  fTrackletMask(rhs.fTrackletMask),
+  fNTracklets(rhs.fNTracklets),
+  fRefLayerIdx(rhs.fRefLayerIdx),
+  fZChannel(rhs.fZChannel),
+  fZSubChannel(rhs.fZSubChannel),
+  fA(rhs.fA),
+  fB(rhs.fB),
+  fC(rhs.fC),
+  fLabel(rhs.fLabel)
+{
+  fTracklets = new TClonesArray("AliTRDtrackletGTU", 6);
+  for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
+    new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU(*((AliTRDtrackletGTU*)(*(rhs.fTracklets))[iTracklet]));
+}
+
+AliTRDtrackGTU& AliTRDtrackGTU::operator=(const AliTRDtrackGTU &rhs)
+{
+  if (&rhs != this) {
+    TObject::operator=(rhs);
+    fStack         = rhs.fStack;
+    fSector        = rhs.fSector;
+    fPID           = rhs.fPID;
+    fTrackletMask  = rhs.fTrackletMask;
+    fNTracklets    = rhs.fNTracklets;
+    fRefLayerIdx   = rhs.fRefLayerIdx;
+    fZChannel      = rhs.fZChannel;
+    fZSubChannel   = rhs.fZSubChannel;
+    fA             = rhs.fA;
+    fB             = rhs.fB;
+    fC             = rhs.fC;
+    fLabel         = rhs.fLabel;
+    for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++)
+      new ((*fTracklets)[iTracklet]) AliTRDtrackletGTU(*((AliTRDtrackletGTU*)(*(rhs.fTracklets))[iTracklet])); 
+  }
+
+  return *this;
+}
+
 AliTRDtrackGTU::~AliTRDtrackGTU()
 {
+// dtor
+
   fTracklets->Delete();
   delete fTracklets;
 }
 
-void AliTRDtrackGTU::AddTracklet(AliTRDtrackletGTU *tracklet, Int_t layer) 
+void AliTRDtrackGTU::AddTracklet(const AliTRDtrackletGTU * const tracklet, Int_t layer)
 {
+// add a tracklet to this track
+
   if ( (fTrackletMask & (1 << layer)) != 0 ) {
     AliError(Form("Only one tracklet per layer (%i) possible! Mask: 0x%02x", layer, fTrackletMask));
     return;
@@ -74,33 +128,46 @@ void AliTRDtrackGTU::AddTracklet(AliTRDtrackletGTU *tracklet, Int_t layer)
   fTrackletMask |= (1 << layer);
 }
 
-AliTRDtrackletGTU* AliTRDtrackGTU::GetTracklet(Int_t layer) 
+AliTRDtrackletGTU* AliTRDtrackGTU::GetTracklet(Int_t layer) const
 {
-  return ((AliTRDtrackletGTU*) (*fTracklets)[layer]);
+// get a pointer to the tracklet in the layer specified
+
+  if (IsTrackletInLayer(layer))
+    return ((AliTRDtrackletGTU*) (*fTracklets)[layer]);
+  else
+    return 0x0;
 }
 
 Int_t AliTRDtrackGTU::GetNTracklets() const
 {
+// returns the number of tracklets in this track
+
   return fNTracklets;
 }
 
-Bool_t AliTRDtrackGTU::IsTrackletInLayer(Int_t layer) const 
+Bool_t AliTRDtrackGTU::IsTrackletInLayer(Int_t layer) const
 {
+// checks for a tracklet in the given layer
+
   if ( (GetTrackletMask() & (1 << layer)) != 0)
     return kTRUE;
-  else 
+  else
     return kFALSE;
 }
 
-void AliTRDtrackGTU::SetFitParams(Float_t a, Float_t b, Float_t c) 
+void AliTRDtrackGTU::SetFitParams(Float_t a, Float_t b, Float_t c)
 {
-  fA = a; 
+// set the fit parameters
+
+  fA = a;
   fB = b;
   fC = c;
 }
 
-Int_t AliTRDtrackGTU::GetZSubChannel() 
+Int_t AliTRDtrackGTU::GetZSubChannel()
 {
+// returns the z-subchannel
+
   if (fZSubChannel < 0) {
     for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++)
     {
@@ -111,21 +178,57 @@ Int_t AliTRDtrackGTU::GetZSubChannel()
   return fZSubChannel;
 }
 
-Int_t AliTRDtrackGTU::GetYapprox() 
+Int_t AliTRDtrackGTU::GetYapprox()
 {
-  for (Int_t layer = 0; layer < AliTRDgtuParam::GetNLayers(); layer++) 
-  {
-    if (IsTrackletInLayer(layer))
-      return ((AliTRDtrackletGTU*) (*fTracklets)[layer])->GetYProj();
-  }
-  return 0;
+  // returns an approximated y-position for the track
+  // taken from the projected y-position of the tracklet in the reference layer
+  // in which the track was found
+
+  if ((fRefLayerIdx > -1) && (fRefLayerIdx < AliTRDgtuParam::GetNRefLayers()))
+    return ((AliTRDtrackletGTU*) (*fTracklets)[AliTRDgtuParam::GetRefLayer(fRefLayerIdx)])->GetYProj();
+  else
+    return 0;
 }
 
 AliESDTrdTrack* AliTRDtrackGTU::CreateTrdTrack() const
 {
-    AliESDTrdTrack *trk = new AliESDTrdTrack();
-    trk->SetPt(1./128. * fPt);
-    trk->SetPID(fPID);
-    trk->SetDetector(fSector * 30 + fStack * 6);
-    return trk;
+  // creates an AliESDTrdTrack to be added to the ESD
+
+  AliESDTrdTrack *trk = new AliESDTrdTrack();
+  trk->SetA((Int_t) fA);
+  trk->SetLayerMask(fTrackletMask);
+  trk->SetPID(fPID);
+  trk->SetB((Int_t) fB);
+  trk->SetStack(fStack);
+  trk->SetSector(fSector);
+  if (fLabel >= 0)
+    trk->SetLabel(fLabel);
+
+  for (Int_t iLayer = 0; iLayer < AliTRDgtuParam::GetNLayers(); iLayer++) {
+    AliTRDtrackletGTU *trklGTU = GetTracklet(iLayer);
+    if (trklGTU) {
+      trk->SetTrackletIndex(trklGTU->GetIndex(), iLayer);
+      AliESDTrdTracklet *trkl = trklGTU->GetTrackletESD();
+      if (trkl)
+       trk->AddTrackletReference(trkl, iLayer);
+    }
+  }
+
+  return trk;
+}
+
+Bool_t AliTRDtrackGTU::CookLabel()
+{
+    TH1F *h = new TH1F("trkref", "trkref", 100000, 0, 100000);
+    for (Int_t iTracklet = 0; iTracklet < 6; iTracklet++) {
+      if (!IsTrackletInLayer(iTracklet))
+        continue;
+       h->Fill( ((AliTRDtrackletGTU*) (*fTracklets)[iTracklet])->GetLabel());
+    }
+    if (h->GetEntries() > 0)
+       fLabel = h->GetMaximumBin() - 1;
+    else
+       fLabel = -1;
+    delete h;
+    return (fLabel >= 0);
 }