Reduced memory consumption (Bogdan)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 May 2006 20:20:24 +0000 (20:20 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 May 2006 20:20:24 +0000 (20:20 +0000)
TRD/AliTRDmcmTracklet.cxx
TRD/AliTRDmcmTracklet.h
TRD/AliTRDtrigger.cxx
TRD/AliTRDtrigger.h

index 9ad1e0d4cb71f8d3687691b53d5ac28098d36af3..7154be31d4d2ec516965de3c27dd175a2ffefeee 100644 (file)
@@ -37,7 +37,6 @@ ClassImp(AliTRDmcmTracklet)
 //_____________________________________________________________________________
 AliTRDmcmTracklet::AliTRDmcmTracklet() 
 {
-
   //
   // AliTRDmcmTracklet default constructor
   //
@@ -75,7 +74,6 @@ AliTRDmcmTracklet::AliTRDmcmTracklet()
 //_____________________________________________________________________________
 AliTRDmcmTracklet::AliTRDmcmTracklet(Int_t det, Int_t row, Int_t n) 
 {
-
   //
   // AliTRDmcmTracklet default constructor
   //
@@ -115,12 +113,13 @@ AliTRDmcmTracklet::AliTRDmcmTracklet(Int_t det, Int_t row, Int_t n)
 //_____________________________________________________________________________
 AliTRDmcmTracklet::~AliTRDmcmTracklet() 
 {
-
   //
   // AliTRDmcmTracklet destructor
   //
-  delete fGPos;
-  delete fGAmp;
+
+  if (fGPos != 0) delete fGPos;
+  if (fGAmp != 0) delete fGAmp;
+
 }
 
 //_____________________________________________________________________________
@@ -170,10 +169,47 @@ void AliTRDmcmTracklet::Copy(TObject &t) const
 }
 
 //_____________________________________________________________________________
-void AliTRDmcmTracklet::AddCluster(Int_t icol, Int_t itb, Float_t *adc, Int_t *track
+void AliTRDmcmTracklet::Reset(
 {
   //
+  // Reset the tracklet information
+  //
+
+  fDetector = -1;
+  fRow      = -1;
+
+  for (Int_t time = 0; time < kNtimeBins; time++) {
+    for (Int_t icl = 0; icl < kNclsPads; icl++) {
+      fADC[time][icl] = 0;
+    }
+    for (Int_t it = 0; it < kNdict; it++) {
+      fTrack[time][it] = -1;
+    }
+    fTime[time]   = 0;
+    fCol[time]    = 0;
+  }
+
+  fNclusters  =  0;
+  fN          =  0;
+  fTrackLabel = -1;
+
+  fGPos->Set(0);
+  fGAmp->Set(0);
+
+  fSlope  = 0.0;
+  fOffset = 0.0;
+  fTime0  = 0.0;
+  fRowz   = 0.0;
+  fPt     = 0.0;
+  fdQdl   = 0.0;
+
+}
+
+//_____________________________________________________________________________
+void AliTRDmcmTracklet::AddCluster(Int_t icol, Int_t itb, Float_t *adc, Int_t *track) 
+{
   //
+  // Add a cluster to the tracklet
   //
  
   if (fNclusters >= kNtimeBins) return;
@@ -196,7 +232,6 @@ void AliTRDmcmTracklet::AddCluster(Int_t icol, Int_t itb, Float_t *adc, Int_t *t
 //_____________________________________________________________________________
 void AliTRDmcmTracklet::MakeTrackletGraph(AliTRDgeometry *geo, Float_t field) 
 {
-
   //
   // Tracklet graph of positions (global coordinates, rotated [cm])
   //
@@ -281,7 +316,7 @@ void AliTRDmcmTracklet::MakeTrackletGraph(AliTRDgeometry *geo, Float_t field)
   fGPos->Set(npg);
   
   fTime0 = geo->GetTime0(iplan) - AliTRDgeometry::CdrHght() - 0.5*AliTRDgeometry::CamHght();
-  fRowz = padPlane->GetRowPos(fRow) - padPlane->GetRowSize(fRow)/2.0;
+  fRowz = 0.5*(padPlane->GetRowPos(fRow) + padPlane->GetRowPos(fRow+1));
 
   Double_t xMin = 0, xMax = 0, x, y;
   fGPos->GetPoint(0    ,x,y); xMax = x + 0.1;
@@ -315,13 +350,6 @@ void AliTRDmcmTracklet::MakeClusAmpGraph()
   // Tracklet graph of cluster charges
   //
 
-  AliTRDcalibDB* calibration = AliTRDcalibDB::Instance();
-  if (!calibration)
-  {
-    Error("MakeClusAmpGraph","No instance of AliTRDcalibDB.");
-    return;
-  }
-
   Int_t time;
   Float_t amp[3];
   Int_t npg = 0;
index c5e769ea3f382278250db6b58ded1c775949c6e8..4ad87080a4421e7aa0ab64e8f1a767768690f30d 100644 (file)
@@ -27,11 +27,17 @@ class AliTRDmcmTracklet : public TObject {
   AliTRDmcmTracklet &operator=(const AliTRDmcmTracklet &t);
   virtual void Copy(TObject &t) const;
 
+  void Reset();
+
   void AddCluster(Int_t icol, Int_t itb, Float_t *adc, Int_t *track);
   void MakeTrackletGraph(AliTRDgeometry *geo = 0, Float_t field = 0);
   void MakeClusAmpGraph();
   void CookLabel(Float_t frac);
 
+  void SetRow(Int_t row)      { fRow = row; };
+  void SetDetector(Int_t det) { fDetector = det; };
+  void SetN(Int_t n)          { fN = n; };
+
   Int_t     GetNclusters() const { return fNclusters; };
   Int_t     GetDetector()  const { return fDetector; };
   Int_t     GetRow()       const { return fRow; };
index 1fb4b547277b055facf882e54ff86a853615350f..48ef1498fd799bf4b0b20670c370f00cbe6a4890 100644 (file)
@@ -65,6 +65,7 @@ AliTRDtrigger::AliTRDtrigger():
   fTrigParam = NULL;
   fMCM = NULL;
   fTrk = NULL;
+  fTrkTest = NULL;
   fGTUtrk = NULL;
 
   fNtracklets = 0;
@@ -78,6 +79,11 @@ AliTRDtrigger::AliTRDtrigger():
 
   fNPrimary = 0;
 
+  fField  = 0.0;
+  fGeo    = NULL;
+  fCalib  = NULL;
+  fCParam = NULL;
+
 }
 
 //_____________________________________________________________________________
@@ -97,6 +103,7 @@ AliTRDtrigger::AliTRDtrigger(const Text_t *name, const Text_t *title):
   fTrigParam = NULL;
   fMCM = NULL;
   fTrk = NULL;
+  fTrkTest = NULL;
   fGTUtrk = NULL;
 
   fNtracklets = 0;
@@ -110,6 +117,11 @@ AliTRDtrigger::AliTRDtrigger(const Text_t *name, const Text_t *title):
 
   fNPrimary = 0;
 
+  fField  = 0.0;
+  fGeo    = NULL;
+  fCalib  = NULL;
+  fCParam = NULL;
+
 }
 
 //_____________________________________________________________________________
@@ -173,6 +185,23 @@ void AliTRDtrigger::Init()
   */
   fTracks.Clear();
 
+  fField = fTrigParam->GetField();
+  fGeo = (AliTRDgeometry*)AliTRDgeometry::GetGeometry(fRunLoader);
+
+  fCalib = AliTRDcalibDB::Instance();
+  if (!fCalib)
+  {
+    Error("Init","No instance of AliTRDcalibDB.");
+    return;  
+  }
+
+  fCParam = AliTRDCommonParam::Instance();
+  if (!fCParam)
+  {
+    Error("Init","No common params.");
+    return;
+  }
+
 }
 
 //_____________________________________________________________________________
@@ -329,22 +358,9 @@ Bool_t AliTRDtrigger::ReadTracklets(AliRunLoader *rl)
 //_____________________________________________________________________________
 Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
 {
-
-  AliTRDcalibDB* calibration = AliTRDcalibDB::Instance();
-  if (!calibration)
-  {
-    Error("MakeTracklets","No instance of AliTRDcalibDB.");
-    return kFALSE;  
-  }
-  
-  AliTRDCommonParam* commonParam = AliTRDCommonParam::Instance();
-  if (!commonParam)
-  {
-    Error("MakeTracklets","No common params.");
-    return kFALSE;
-  }
-    
-  AliTRDgeometry *geo = AliTRDgeometry::GetGeometry(fRunLoader);
+  //
+  // Create tracklets from digits
+  //
 
   Int_t    chamBeg = 0;
   Int_t    chamEnd = AliTRDgeometry::Ncham();
@@ -353,13 +369,14 @@ Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
   Int_t    sectBeg = 0;
   Int_t    sectEnd = AliTRDgeometry::Nsect();
 
+  fTrkTest = new AliTRDmcmTracklet(0,0,0);
+
   fMCM = new AliTRDmcm(fTrigParam,0);
 
   Int_t time, col, row, col1, col2;
   Float_t amp;
   Int_t idet, iStack, iStackPrev;
-  idet = -1;
-
+  idet       = -1;
   iStack     = -1;
   iStackPrev = -1;
   for (Int_t isect = sectBeg; isect < sectEnd; isect++) {
@@ -375,7 +392,7 @@ Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
 
       for (Int_t iplan = planBeg; iplan < planEnd; iplan++) {
 
-        idet = geo->GetDetector(iplan,icham,isect);
+        idet = fGeo->GetDetector(iplan,icham,isect);
        ResetTracklets();
        
        if (makeTracks) {
@@ -391,9 +408,9 @@ Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
          }
        }
 
-        Int_t    nRowMax     = commonParam->GetRowMax(iplan,icham,isect);
-       Int_t    nColMax     = commonParam->GetColMax(iplan);
-        Int_t    nTimeTotal  = calibration->GetNumberOfTimeBins();
+        Int_t    nRowMax     = fCParam->GetRowMax(iplan,icham,isect);
+       Int_t    nColMax     = fCParam->GetColMax(iplan);
+        Int_t    nTimeTotal  = fCalib->GetNumberOfTimeBins();
 
         // Get the digits
         fDigits = fDigitsManager->GetDigits(idet);
@@ -418,9 +435,8 @@ Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
 
            row = fMCM->GetRow();
 
-           if (row < 0 || row >= nRowMax) {
+           if (row < 0 || row > nRowMax) {
              Error("MakeTracklets","MCM row number out of range.");
-             continue;
            }
 
            fMCM->GetColRange(col1,col2);
@@ -460,7 +476,9 @@ Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
                  }
                }
 
-               AddTracklet(idet,row,iSeed,fNtracklets++);
+               if (TestTracklet(idet,row,iSeed,0)) {
+                 AddTracklet(idet,row,iSeed,fNtracklets++);
+               }
 
              }
 
@@ -496,6 +514,9 @@ Bool_t AliTRDtrigger::MakeTracklets(Bool_t makeTracks)
 //_____________________________________________________________________________
 void AliTRDtrigger::SetMCMcoordinates(Int_t imcm)
 {
+  //
+  // Configure MCM position in the pad plane
+  //
 
   Int_t robid = fMCM->GetRobId();
 
@@ -543,20 +564,89 @@ void AliTRDtrigger::SetMCMcoordinates(Int_t imcm)
 }
 
 //_____________________________________________________________________________
-void AliTRDtrigger::AddTracklet(Int_t det, Int_t row, Int_t seed, Int_t n)
+Bool_t AliTRDtrigger::TestTracklet(Int_t det, Int_t row, Int_t seed, Int_t n)
 {
+  //
+  // Check first the tracklet pt
+  //
 
-  Float_t field = fTrigParam->GetField();
-  AliTRDgeometry *geo = (AliTRDgeometry*)AliTRDgeometry::GetGeometry(fRunLoader);
+  Int_t nTimeTotal  = fCalib->GetNumberOfTimeBins();
+
+  fTrkTest->Reset();
+
+  fTrkTest->SetDetector(det);
+  fTrkTest->SetRow(row);
+  fTrkTest->SetN(n);
+
+  Int_t iCol, iCol1, iCol2, track[3];
+  iCol = fMCM->GetSeedCol()[seed];  // 0....20 (MCM)
+  fMCM->GetColRange(iCol1,iCol2);   // range in the pad plane
+           
+  Float_t amp[3];
+  for (Int_t iTime = 0; iTime < nTimeTotal; iTime++) {
+
+    amp[0] = fMCM->GetADC(iCol-1,iTime);
+    amp[1] = fMCM->GetADC(iCol  ,iTime);
+    amp[2] = fMCM->GetADC(iCol+1,iTime);
+
+    // extract track contribution only from the central pad
+    track[0] = fTrack0->GetDataUnchecked(row,iCol+iCol1,iTime);
+    track[1] = fTrack1->GetDataUnchecked(row,iCol+iCol1,iTime);
+    track[2] = fTrack2->GetDataUnchecked(row,iCol+iCol1,iTime);
+
+    if (fMCM->IsCluster(iCol,iTime)) {
+
+      fTrkTest->AddCluster(iCol+iCol1,iTime,amp,track);
+
+    } else if ((iCol+1+1) < kMcmCol) {
+
+      amp[0] = fMCM->GetADC(iCol-1+1,iTime);
+      amp[1] = fMCM->GetADC(iCol  +1,iTime);
+      amp[2] = fMCM->GetADC(iCol+1+1,iTime);
+
+      if (fMCM->IsCluster(iCol+1,iTime)) {
+
+       // extract track contribution only from the central pad
+       track[0] = fTrack0->GetDataUnchecked(row,iCol+1+iCol1,iTime);
+       track[1] = fTrack1->GetDataUnchecked(row,iCol+1+iCol1,iTime);
+       track[2] = fTrack2->GetDataUnchecked(row,iCol+1+iCol1,iTime);
+
+       fTrkTest->AddCluster(iCol+1+iCol1,iTime,amp,track);
+
+      }
+
+    } else {
+    }
 
-  AliTRDcalibDB* calibration = AliTRDcalibDB::Instance();
-  if (!calibration)
-  {
-    Error("AddTracklets","No instance of AliTRDcalibDB.");
-    return;  
+  }
+
+  fTrkTest->CookLabel(0.8);  
+  /*
+  if (fTrkTest->GetLabel() >= fNPrimary) {
+    Info("AddTracklet","Only primaries are stored!");
+    return;
+  }
+  */
+  // LTU Pt cut
+    
+  fTrkTest->MakeTrackletGraph(fGeo,fField);
+  fTrkTest->MakeClusAmpGraph();
+  if (TMath::Abs(fTrkTest->GetPt()) < fTrigParam->GetLtuPtCut()) {
+    return kFALSE;
   }
   
-  Int_t nTimeTotal  = calibration->GetNumberOfTimeBins();
+  return kTRUE;  
+
+}
+
+//_____________________________________________________________________________
+void AliTRDtrigger::AddTracklet(Int_t det, Int_t row, Int_t seed, Int_t n)
+{
+  //
+  // Add a found tracklet
+  //
+
+  Int_t nTimeTotal  = fCalib->GetNumberOfTimeBins();
 
   fTrk = new AliTRDmcmTracklet(det,row,n);
 
@@ -610,7 +700,7 @@ void AliTRDtrigger::AddTracklet(Int_t det, Int_t row, Int_t seed, Int_t n)
   }
   */
   // LTU Pt cut
-  fTrk->MakeTrackletGraph(geo,field);
+  fTrk->MakeTrackletGraph(fGeo,fField);
   fTrk->MakeClusAmpGraph();
   if (TMath::Abs(fTrk->GetPt()) < fTrigParam->GetLtuPtCut()) {
     return;
@@ -688,17 +778,8 @@ void AliTRDtrigger::MakeTracks(Int_t det)
   
   fModule->Reset();
 
-  AliTRDCommonParam* commonParam = AliTRDCommonParam::Instance();
-  if (!commonParam)
-  {
-    Error("MakeTracks","No common params.");
-    return;
-  }
-    
   Int_t nRowMax, iplan, icham, isect, row;
 
-  AliTRDgeometry *geo = (AliTRDgeometry*)AliTRDgeometry::GetGeometry(fRunLoader);
-
   if ((det < 0) || (det >= AliTRDgeometry::Ndet())) {
     Error("MakeTracks","Unexpected detector index %d.",det);
     return;
@@ -711,11 +792,11 @@ void AliTRDtrigger::MakeTracks(Int_t det)
     
     trk = (AliTRDmcmTracklet *) Tracklets()->UncheckedAt(i);
     
-    iplan = geo->GetPlane(trk->GetDetector());
-    icham = geo->GetChamber(trk->GetDetector());
-    isect = geo->GetSector(trk->GetDetector());
+    iplan = fGeo->GetPlane(trk->GetDetector());
+    icham = fGeo->GetChamber(trk->GetDetector());
+    isect = fGeo->GetSector(trk->GetDetector());
 
-    nRowMax = commonParam->GetRowMax(iplan,icham,isect);
+    nRowMax = fCParam->GetRowMax(iplan,icham,isect);
     row = trk->GetRow();
 
     fModule->AddTracklet(trk->GetDetector(),
@@ -732,7 +813,7 @@ void AliTRDtrigger::MakeTracks(Int_t det)
 
   fModule->SortTracklets();
   fModule->RemoveMultipleTracklets();
-  fModule->SortZ((Int_t)geo->GetChamber(det));
+  fModule->SortZ((Int_t)fGeo->GetChamber(det));
   fModule->FindTracks();
   fModule->SortTracks();
   fModule->RemoveMultipleTracks();
index cc6d2ddceb69c2649ba354ce6fbacfea4424e27f..31a35b8350ca97e0be4232ca0cc03cbacdaec464 100644 (file)
@@ -19,6 +19,9 @@ class TTree;
 
 class AliTRDdigitsManager;
 class AliTRDdataArrayI;
+class AliTRDgeometry;
+class AliTRDcalibDB;
+class AliTRDCommonParam;
 
 class AliRunLoader;
 class AliRawReader;
@@ -53,6 +56,7 @@ class AliTRDtrigger : public TNamed {
   Bool_t ReadTracklets(AliRunLoader *rl);
 
   void   AddTracklet(Int_t det, Int_t row, Int_t seed, Int_t n);
+  Bool_t TestTracklet(Int_t det, Int_t row, Int_t seed, Int_t n);
   TObjArray *Tracklets() { 
     if(!fTracklets) fTracklets = new TObjArray(400); return fTracklets; 
   };
@@ -76,6 +80,11 @@ class AliTRDtrigger : public TNamed {
 
  protected:
 
+  Float_t                fField;                       //! Magnetic field
+  AliTRDgeometry        *fGeo;                         //! TRD geometry
+  AliTRDcalibDB         *fCalib;                       //! Calibration DB
+  AliTRDCommonParam     *fCParam;                      //! Common parameters
+
   AliTRDtrigParam       *fTrigParam;                   //! Trigger class parameters
   AliRunLoader          *fRunLoader;                   //! Run Loader
   AliTRDdigitsManager   *fDigitsManager;               //! TRD digits manager
@@ -85,6 +94,7 @@ class AliTRDtrigger : public TNamed {
   Int_t                  fNROB;                        //! Number of ROBs in the current chamber
   AliTRDmcm             *fMCM;                         //! Current MCM
   AliTRDmcmTracklet     *fTrk;                         //! Current tracklet
+  AliTRDmcmTracklet     *fTrkTest;                     //! Test tracklet
   AliTRDmodule          *fModule;                      //! Current module
   AliTRDgtuTrack        *fGTUtrk;                      //! Current GTU track