some functionality move to AliMUONTransientDigit class
authorjchudoba <jchudoba@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 31 Oct 2001 16:35:07 +0000 (16:35 +0000)
committerjchudoba <jchudoba@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 31 Oct 2001 16:35:07 +0000 (16:35 +0000)
MUON/AliMUONDigitizer.cxx
MUON/AliMUONDigitizer.h
MUON/AliMUONMerger.cxx
MUON/AliMUONMerger.h

index 78f144c26b5749429b7aba76e7d81b3203e39762..f99b9051f095985bd235fa8b2923ba12cb704cd6 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.4  2001/10/18 14:44:09  jchudoba
+Define constant MAXTRACKS for maximum number of tracks associated with 1 digit
+
 Revision 1.3  2001/10/04 20:01:54  jchudoba
 changes for TTask implementation, some other small editing
 
@@ -35,7 +38,6 @@ merging/digitization classes
 #include "AliMUONDigitizer.h"
 #include "AliMUONConstants.h"
 #include "AliMUONChamber.h"
-#include "AliHitMap.h"
 #include "AliMUONHitMapA1.h"
 #include "AliMUON.h"
 #include "AliMUONHit.h"
@@ -64,8 +66,6 @@ AliMUONDigitizer::AliMUONDigitizer(AliRunDigitizer* manager)
   fTDList  = 0;
   fHits    = 0;
   fPadHits = 0;
-  fTrList  = 0;
-  fAddress = 0;
   fDebug   = 0; 
   if (GetDebug()>2) 
     cerr<<"AliMUONDigitizer::AliMUONDigitizer"
@@ -80,8 +80,6 @@ AliMUONDigitizer::~AliMUONDigitizer()
   if (fPadHits)    delete fPadHits;
   if (fHitMap)     delete fHitMap;
   if (fTDList)     delete fTDList;
-  if (fTrList)     delete fTrList;
-  if (fAddress)    delete fAddress; 
 }
 
 //------------------------------------------------------------------------
@@ -92,62 +90,50 @@ Bool_t AliMUONDigitizer::Exists(const AliMUONPadHit *mergable)
 }
 
 //------------------------------------------------------------------------
-void AliMUONDigitizer::Update(AliMUONPadHit *mergable)
+void AliMUONDigitizer::Update(AliMUONPadHit *padhit)
 {
-  AliMUONPadHit *padhit = (AliMUONPadHit*) mergable;    
-  AliMUONTransientDigit* pdigit;
-  Int_t ipx      = padhit->PadX();        // pad number on X
-  Int_t ipy      = padhit->PadY();        // pad number on Y
-  Int_t iqpad    = Int_t(padhit->QPad()); // charge per pad
-
-  pdigit = (AliMUONTransientDigit*) fHitMap[fNch]->GetHit(ipx, ipy);
-  // update charge
-  //
-  (*pdigit).AddSignal(iqpad);
-  (*pdigit).AddPhysicsSignal(iqpad);           
-  // update list of tracks
-  //
-  TObjArray* fTrList = (TObjArray*)pdigit->TrackList();
-  Int_t lastEntry = fTrList->GetLast();
-  TVector *pTrack = (TVector*)fTrList->At(lastEntry);
-  TVector &ptrk   = *pTrack;
-  TVector &trinfo = *((TVector*) (*fAddress)[fCountadr-1]);
-  Int_t lastTrack = Int_t(ptrk(0));
-
-  if (trinfo(0) != kBgTag) {
-    if (lastTrack == fTrack) {
-      Int_t lastCharge = Int_t(ptrk(1));
-      lastCharge += iqpad;
-      fTrList->RemoveAt(lastEntry);
-      trinfo(1) = lastCharge;
-      fTrList->AddAt(&trinfo,lastEntry);
+    AliMUONTransientDigit *pdigit = 
+      static_cast<AliMUONTransientDigit*>(
+      fHitMap[fNch]->GetHit(padhit->PadX(),padhit->PadY()));
+
+    // update charge
+    //
+    Int_t iqpad    = padhit->QPad();        // charge per pad
+    pdigit->AddSignal(iqpad);
+    pdigit->AddPhysicsSignal(iqpad);           
+
+    // update list of tracks
+    //
+    Int_t track, charge;    
+    track = fTrack+fMask;
+    if (fSignal) {
+      charge = iqpad;
     } else {
-      fTrList->Add(&trinfo);
+      charge = kBgTag;
     }
-  } else {
-    if (lastTrack != -1) fTrList->Add(&trinfo);
-  }
+    pdigit->UpdateTrackList(track,charge);
 }
 
 //------------------------------------------------------------------------
-void AliMUONDigitizer::CreateNew(AliMUONPadHit *mergable)
+void AliMUONDigitizer::CreateNew(AliMUONPadHit *padhit)
 {
 // Create new AliMUONTransientDigit and add it to the fTDList
 
-  AliMUONPadHit *padhit = (AliMUONPadHit*) mergable;    
-  AliMUONTransientDigit* pdigit;
-
-  Int_t ipx      = padhit->PadX();       // pad number on X
-  Int_t ipy      = padhit->PadY();       // pad number on Y
   fTDList->AddAtAndExpand(
     new AliMUONTransientDigit(fNch,fDigits),fCounter);
-  fHitMap[fNch]->SetHit(ipx, ipy, fCounter);
-  fCounter++;
-  pdigit = (AliMUONTransientDigit*)fTDList->At(fTDList->GetLast());
+  fHitMap[fNch]->SetHit(padhit->PadX(),padhit->PadY(),fCounter);
+  AliMUONTransientDigit* pdigit = 
+    (AliMUONTransientDigit*)fTDList->At(fTDList->GetLast());
   // list of tracks
-  TObjArray *fTrList = (TObjArray*)pdigit->TrackList();
-  TVector &trinfo    = *((TVector*) (*fAddress)[fCountadr-1]);
-  fTrList->Add(&trinfo);
+  Int_t track, charge;    
+  track = fTrack+fMask;
+  if (fSignal) {
+    charge = padhit->QPad();
+  } else {
+    charge = kBgTag;
+  }
+  pdigit->AddToTrackList(track,charge);
+  fCounter++;
 }
 
 
@@ -177,7 +163,6 @@ void AliMUONDigitizer::Exec(Option_t* option)
   
   if (GetDebug()>2) cerr<<"   AliMUONDigitizer::Digitize() starts"<<endl;
   fTDList = new TObjArray;
-  if(!fAddress) fAddress = new TClonesArray("TVector",10000);
 
   AliMUON *pMUON  = (AliMUON *) gAlice->GetModule("MUON");
   if (!pMUON) {
@@ -186,14 +171,12 @@ void AliMUONDigitizer::Exec(Option_t* option)
     return;
   }
   pMUON->MakeBranchInTreeD(fManager->GetTreeD());
-  fHitMap= new AliHitMap* [AliMUONConstants::NCh()];
-  for (Int_t i = 0; i < AliMUONConstants::NCh(); i++) {fHitMap[i] = 0;}
+  fHitMap= new AliMUONHitMapA1* [AliMUONConstants::NCh()];
 
   //
   // loop over cathodes
   //
 
-  fCountadr = 0;
   for (int icat = 0; icat < 2; icat++) { 
     fCounter = 0;
     Int_t * nmuon = new Int_t [AliMUONConstants::NCh()];
@@ -208,11 +191,12 @@ void AliMUONDigitizer::Exec(Option_t* option)
 
 
 // Loop over files to digitize
-       
+    fSignal = kTRUE;
     for (Int_t inputFile=0; inputFile<fManager->GetNinputs();
         inputFile++) {
 // Connect MUON branches
 
+      if (inputFile > 0 ) fSignal = kFALSE;
       TBranch *branchHits = 0;
       TBranch *branchPadHits = 0;
       TTree *treeH = fManager->GetInputTreeH(inputFile);
@@ -282,17 +266,7 @@ void AliMUONDigitizer::Exec(Option_t* option)
            Int_t iqpad    = Int_t(mPad->QPad());  // charge per pad
            if (cathode != (icat+1)) continue;
 
-           new((*fAddress)[fCountadr++]) TVector(2);
-
-           TVector &trinfo = *((TVector*) (*fAddress)[fCountadr-1]);
-           Int_t mask = fManager->GetMask(inputFile);
-           trinfo(0) = (Float_t)(fTrack + mask);  // tag background
-//                 trinfo(0) = (Float_t)fTrack;
-           if (inputFile == 0) {
-             trinfo(1) = (Float_t)iqpad;
-           } else {
-             trinfo(1) = kBgTag;
-           }
+           fMask = fManager->GetMask(inputFile);
            fDigits[0] = ipx;
            fDigits[1] = ipy;
            fDigits[2] = icat;
@@ -304,7 +278,7 @@ void AliMUONDigitizer::Exec(Option_t* option)
            }
            if (mHit->Particle() == kMuonPlus ||
                mHit->Particle() == kMuonMinus) {
-             fDigits[5] = (mPad->HitNumber()) + mask; 
+             fDigits[5] = (mPad->HitNumber()) + fMask; 
            } else fDigits[5] = -1;
 
            // build the list of fired pads and update the info, 
@@ -321,8 +295,8 @@ void AliMUONDigitizer::Exec(Option_t* option)
     } // end file loop
     if (GetDebug()>2) cerr<<"END OF FILE LOOP"<<endl;
 
-    Int_t tracks[MAXTRACKS];
-    Int_t charges[MAXTRACKS];
+    Int_t tracks[kMAXTRACKS];
+    Int_t charges[kMAXTRACKS];
     Int_t nentries = fTDList->GetEntriesFast();
        
     for (Int_t nent = 0; nent < nentries; nent++) {
@@ -345,38 +319,29 @@ void AliMUONDigitizer::Exec(Option_t* option)
       fDigits[4] = address->Physics();
       fDigits[5] = address->Hit();
            
-      TObjArray* fTrList = (TObjArray*)address->TrackList();
-      Int_t nptracks = fTrList->GetEntriesFast();
+      Int_t nptracks = address->GetNTracks();
 
-      // this was changed to accomodate the real number of tracks
-
-      if (nptracks > MAXTRACKS) {
+      if (nptracks > kMAXTRACKS) {
        if (GetDebug() >0) {
          cerr<<"AliMUONDigitizer: nptracks > 10 "<<nptracks;
-         cerr<<"reset to max value "<<MAXTRACKS<<endl;
+         cerr<<"reset to max value "<<kMAXTRACKS<<endl;
        }
-       nptracks = MAXTRACKS;
+       nptracks = kMAXTRACKS;
       }
       if (nptracks > 2 && GetDebug() >2) {
        cerr<<"AliMUONDigitizer: nptracks > 2 "<<nptracks<<endl;
        printf("cat,ich,ix,iy,q %d %d %d %d %d \n",icat,ich,fDigits[0],fDigits[1],q);
       }
       for (Int_t tr = 0; tr < nptracks; tr++) {
-       TVector *ppP = (TVector*)fTrList->At(tr);
-       if(!ppP ) {
-         cerr<<"Error: ppP = "<<ppP<<endl;
-         return;
-       }
-       TVector &pp  = *ppP;
-       tracks[tr]   = Int_t(pp(0));
-       charges[tr]  = Int_t(pp(1));
+       tracks[tr]   = address->GetTrack(tr);
+       charges[tr]  = address->GetCharge(tr);
       }      //end loop over list of tracks for one pad
       // Sort list of tracks according to charge
       if (nptracks > 1) {
        SortTracks(tracks,charges,nptracks);
       }
-      if (nptracks < MAXTRACKS ) {
-       for (Int_t i = nptracks; i < MAXTRACKS; i++) {
+      if (nptracks < kMAXTRACKS ) {
+       for (Int_t i = nptracks; i < kMAXTRACKS; i++) {
          tracks[i]  = 0;
          charges[i] = 0;
        }
@@ -384,7 +349,6 @@ void AliMUONDigitizer::Exec(Option_t* option)
            
       // fill digits
       pMUON->AddDigits(ich,tracks,charges,fDigits);
-      // delete fTrList;
     }
 
     fManager->GetTreeD()->Fill();
@@ -408,7 +372,6 @@ void AliMUONDigitizer::Exec(Option_t* option)
   delete [] fHitMap;
   delete fTDList;
     
-  if (fAddress)    fAddress->Delete();
   if (fHits)    fHits->Delete();
   if (fPadHits) fPadHits->Delete();
 }
index dff153c0cf9ebf410cc256a7eebd37df0f4b0069..c273ef4ec1a6e0700e93bac25df0945d7dc393d4 100644 (file)
@@ -8,7 +8,7 @@
 
 class AliRunDigitizer;
 class AliMUONPadHit;
-class AliHitMap;
+class AliMUONHitMapA1;
 
 class AliMUONDigitizer : public AliDigitizer {
  public:
@@ -40,17 +40,17 @@ class AliMUONDigitizer : public AliDigitizer {
  private:
     TClonesArray *fHits;            //! List of hits for one track only
     TClonesArray *fPadHits;         //! List of clusters for one track only
-    AliHitMap **fHitMap;            //! pointer to array of pointers to hitmaps
+    AliMUONHitMapA1 **fHitMap;      //! pointer to array of pointers to hitmaps
     Int_t fNch;                     //! chamber nr (loop variable)
     Int_t fTrack;                   //! track nr (loop variable)
     TObjArray *fTDList;             //! list of AliMUONTransientDigits
-    TObjArray *fTrList;             //! list of tracks
-    TClonesArray *fAddress;         //! pointer to TClonesArray of TVectors with trackinfo
     Int_t fCounter;                 //! nr. of AliMUONTransientDigit
-    Int_t fCountadr;                //! counter for trinfo
+    Bool_t fSignal;                 //! kTRUE if signal file is processed
+    Int_t fMask;                    //! mask dependent on input file
     Int_t fDigits[6];               //! array with digits
     Int_t fDebug;                   //! debug level
-    ClassDef(AliMUONDigitizer,1)
+
+    ClassDef(AliMUONDigitizer,1)  // MUON merging/digitization
 };    
 #endif
 
index 41beed23fae052cc167a6e92772f258ec7d79dab..8c4dc4f6c8097e7fdb94397bf37b87bd4d3e8df9 100644 (file)
 
 /*
 $Log$
+Revision 1.4  2001/03/20 13:36:11  egangler
+TFile memory leak and "too many files open" problem solved (?):
+the backgroud file is open only once forever, and not once for each event.
+
 Revision 1.3  2001/03/05 23:57:44  morsch
 Writing of digit tree moved to macro.
 
@@ -65,8 +69,6 @@ AliMUONMerger::AliMUONMerger()
     fPadHitsBgr = 0;
     fHitMap     = 0;
     fList       = 0;
-    fTrList     = 0;
-    fAddress    = 0; 
     fBgrFile    = 0;
 }
 
@@ -79,8 +81,6 @@ AliMUONMerger::~AliMUONMerger()
     if (fPadHitsBgr) delete fPadHitsBgr;
     if (fHitMap)     delete fHitMap;
     if (fList)       delete fList;
-    if (fTrList)     delete fTrList;
-    if (fAddress)    delete fAddress; 
     if (fBgrFile)    delete fBgrFile;
 }
 
@@ -92,60 +92,50 @@ Bool_t AliMUONMerger::Exists(const AliMUONPadHit *mergable)
 }
 
 //------------------------------------------------------------------------
-void AliMUONMerger::Update(AliMUONPadHit *mergable)
+void AliMUONMerger::Update(AliMUONPadHit *padhit)
 {
-    AliMUONPadHit *padhit = (AliMUONPadHit*) mergable;    
-    AliMUONTransientDigit* pdigit;
-    Int_t ipx      = padhit->PadX();        // pad number on X
-    Int_t ipy      = padhit->PadY();        // pad number on Y
-    Int_t iqpad    = Int_t(padhit->QPad()); // charge per pad
+    AliMUONTransientDigit *pdigit = 
+      static_cast<AliMUONTransientDigit*>(
+      fHitMap[fNch]->GetHit(padhit->PadX(),padhit->PadY()));
 
-    pdigit = (AliMUONTransientDigit*) fHitMap[fNch]->GetHit(ipx, ipy);
     // update charge
     //
-    (*pdigit).AddSignal(iqpad);
-    (*pdigit).AddPhysicsSignal(iqpad);         
+    Int_t iqpad    = padhit->QPad();        // charge per pad
+    pdigit->AddSignal(iqpad);
+    pdigit->AddPhysicsSignal(iqpad);           
+
     // update list of tracks
     //
-    TObjArray* fTrList = (TObjArray*)pdigit->TrackList();
-    Int_t lastEntry = fTrList->GetLast();
-    TVector *pTrack = (TVector*)fTrList->At(lastEntry);
-    TVector &ptrk   = *pTrack;
-    TVector &trinfo = *((TVector*) (*fAddress)[fCountadr-1]);
-    Int_t lastTrack = Int_t(ptrk(0));
-
-    if (trinfo(0) != kBgTag) {
-       if (lastTrack == fTrack) {
-           Int_t lastCharge = Int_t(ptrk(1));
-           lastCharge += iqpad;
-           fTrList->RemoveAt(lastEntry);
-           trinfo(1) = lastCharge;
-           fTrList->AddAt(&trinfo,lastEntry);
-       } else {
-           fTrList->Add(&trinfo);
-       }
+    Int_t track, charge;    
+    if (fSignal) {
+      track = fTrack;
+      charge = iqpad;
     } else {
-       if (lastTrack != -1) fTrList->Add(&trinfo);
+      track = kBgTag;
+      charge = kBgTag;
     }
+    pdigit->UpdateTrackList(track,charge);
 }
 
 //------------------------------------------------------------------------
-void AliMUONMerger::CreateNew(AliMUONPadHit *mergable)
+void AliMUONMerger::CreateNew(AliMUONPadHit *padhit)
 {
-    AliMUONPadHit *padhit = (AliMUONPadHit*) mergable;    
-    AliMUONTransientDigit* pdigit;
-
-    Int_t ipx      = padhit->PadX();       // pad number on X
-    Int_t ipy      = padhit->PadY();       // pad number on Y
     fList->AddAtAndExpand(
        new AliMUONTransientDigit(fNch,fDigits),fCounter);
-    fHitMap[fNch]->SetHit(ipx, ipy, fCounter);
-    fCounter++;
-    pdigit = (AliMUONTransientDigit*)fList->At(fList->GetLast());
+    fHitMap[fNch]->SetHit(padhit->PadX(),padhit->PadY(),fCounter);
+    AliMUONTransientDigit* pdigit = 
+      (AliMUONTransientDigit*)fList->At(fList->GetLast());
     // list of tracks
-    TObjArray *fTrList = (TObjArray*)pdigit->TrackList();
-    TVector &trinfo    = *((TVector*) (*fAddress)[fCountadr-1]);
-    fTrList->Add(&trinfo);
+    Int_t track, charge;
+    if (fSignal) {
+      track = fTrack;
+      charge = padhit->QPad();
+    } else {
+      track = kBgTag;
+      charge = kBgTag;
+    }
+    pdigit->AddToTrackList(track,charge);
+    fCounter++;
 }
 
 
@@ -182,14 +172,11 @@ void AliMUONMerger::Digitise()
     AliSegmentation*  segmentation;
 
     fList = new TObjArray;
-    if(!fAddress) fAddress = new TClonesArray("TVector",10000);
 
     AliMUON *pMUON  = (AliMUON *) gAlice->GetModule("MUON");
     fHitMap= new AliHitMap* [AliMUONConstants::NCh()];
-    for (Int_t i = 0; i < AliMUONConstants::NCh(); i++) {fHitMap[i] = 0;}
     if (fMerge ) {
        fBgrFile->cd();
-       fBgrFile->ls();
         //
        // Get Hits Tree header from file
        //if(fHitsBgr) fHitsBgr->Clear();     // Useless because line 327
@@ -221,7 +208,7 @@ void AliMUONMerger::Digitise()
     // loop over cathodes
     //
     AliHitMap* hm;
-    fCountadr = 0;
+    fSignal = kTRUE;
     for (int icat = 0; icat < 2; icat++) { 
        fCounter = 0;
        Int_t * nmuon = new Int_t [AliMUONConstants::NCh()];
@@ -242,12 +229,6 @@ void AliMUONMerger::Digitise()
 
        TTree *treeH  = gAlice->TreeH();
        Int_t ntracks = (Int_t) treeH->GetEntries();
-       Int_t jj;
-
-       Float_t ** xhit = new Float_t * [AliMUONConstants::NCh()];
-       for (jj = 0; jj < AliMUONConstants::NCh(); jj++) xhit[jj] = new Float_t[2];
-       Float_t ** yhit = new Float_t * [AliMUONConstants::NCh()];
-       for (jj = 0; jj < AliMUONConstants::NCh(); jj++) yhit[jj] = new Float_t[2];
 
        for (fTrack = 0; fTrack < ntracks; fTrack++) {
            gAlice->ResetHits();
@@ -261,17 +242,6 @@ void AliMUONMerger::Digitise()
                fNch = mHit->Chamber()-1;  // chamber number
                if (fNch > AliMUONConstants::NCh()-1) continue;
                iChamber = &(pMUON->Chamber(fNch));
-               /*
-               if (fMerge) {
-                   if (mHit->Particle() == kMuonPlus || 
-                       mHit->Particle() == kMuonMinus) {
-                       xhit[fNch][nmuon[fNch]] = mHit->X();
-                       yhit[fNch][nmuon[fNch]] = mHit->Y();
-                       nmuon[fNch]++;
-                       if (nmuon[fNch] > 2) printf("MUON: nmuon %d\n",nmuon[fNch]);
-                   }
-               }
-               */
                
 //
 // Loop over pad hits
@@ -288,12 +258,6 @@ void AliMUONMerger::Digitise()
 
                    segmentation = iChamber->SegmentationModel(cathode);
 
-                   new((*fAddress)[fCountadr++]) TVector(2);
-
-                   TVector &trinfo = *((TVector*) (*fAddress)[fCountadr-1]);
-                   trinfo(0) = (Float_t)fTrack;
-                   trinfo(1) = (Float_t)iqpad;
-
                    fDigits[0] = ipx;
                    fDigits[1] = ipy;
                    fDigits[2] = icat;
@@ -318,6 +282,7 @@ void AliMUONMerger::Digitise()
        // open the file with background
        
        if (fMerge) {
+            fSignal = kFALSE;
            ntracks = (Int_t)fTrH1->GetEntries();
 //
 //   Loop over tracks
@@ -336,17 +301,6 @@ void AliMUONMerger::Digitise()
                    mHit   = (AliMUONHit*) (*fHitsBgr)[i];
                    fNch   = mHit->Chamber()-1;  // chamber number
                    iChamber = &(pMUON->Chamber(fNch));
-                    Float_t xbgr = mHit->X();
-                   Float_t ybgr = mHit->Y();
-                   Bool_t cond  = kFALSE;
-                   /*
-                   for (Int_t imuon = 0; imuon < nmuon[fNch]; imuon++) {
-                       Float_t dist = (xbgr-xhit[fNch][imuon])*(xbgr-xhit[fNch][imuon])
-                           +(ybgr-yhit[fNch][imuon])*(ybgr-yhit[fNch][imuon]);
-                       if (dist < 100.) cond = kTRUE;
-                   }
-                   */
-                   cond  = kTRUE;
 //
 // Loop over pad hits
                    for (AliMUONPadHit* mPad =
@@ -360,11 +314,6 @@ void AliMUONMerger::Digitise()
                        Int_t iqpad    = Int_t(mPad->QPad()); // charge per pad
 
                        if (cathode != (icat+1)) continue;
-                       new((*fAddress)[fCountadr++]) TVector(2);
-                       TVector &trinfo = *((TVector*) (*fAddress)[fCountadr-1]);
-                       trinfo(0) = kBgTag;  // tag background
-                       trinfo(1) = kBgTag;
-                       
                        fDigits[0] = ipx;
                        fDigits[1] = ipy;
                        fDigits[2] = icat;
@@ -388,11 +337,9 @@ void AliMUONMerger::Digitise()
            if (fAli) file = fAli->GetCurrentFile();
            file->cd();
        } // if fMerge
-       delete [] xhit;
-       delete [] yhit;
 
-       Int_t tracks[10];
-       Int_t charges[10];
+       Int_t tracks[kMAXTRACKS];
+       Int_t charges[kMAXTRACKS];
        Int_t nentries = fList->GetEntriesFast();
        
        for (Int_t nent = 0; nent < nentries; nent++) {
@@ -415,32 +362,26 @@ void AliMUONMerger::Digitise()
            fDigits[4] = address->Physics();
            fDigits[5] = address->Hit();
            
-           TObjArray* fTrList = (TObjArray*)address->TrackList();
-           Int_t nptracks = fTrList->GetEntriesFast();
-
-           // this was changed to accomodate the real number of tracks
+           Int_t nptracks = address->GetNTracks();
 
-           if (nptracks > 10) {
-               printf("\n Attention - nptracks > 10 %d \n", nptracks);
-               nptracks = 10;
+           if (nptracks > kMAXTRACKS) {
+               printf("\n Attention - nptracks > kMAXTRACKS %d \n", nptracks);
+               nptracks = kMAXTRACKS;
            }
            if (nptracks > 2) {
                printf("Attention - nptracks > 2  %d \n",nptracks);
                printf("cat,ich,ix,iy,q %d %d %d %d %d \n",icat,ich,fDigits[0],fDigits[1],q);
            }
            for (Int_t tr = 0; tr < nptracks; tr++) {
-               TVector *ppP = (TVector*)fTrList->At(tr);
-               if(!ppP ) printf("ppP - %p\n",ppP);
-               TVector &pp  = *ppP;
-               tracks[tr]   = Int_t(pp(0));
-               charges[tr]  = Int_t(pp(1));
+               tracks[tr]   = address->GetTrack(tr);
+               charges[tr]  = address->GetCharge(tr);
            }      //end loop over list of tracks for one pad
             // Sort list of tracks according to charge
            if (nptracks > 1) {
                SortTracks(tracks,charges,nptracks);
            }
-           if (nptracks < 10 ) {
-               for (Int_t i = nptracks; i < 10; i++) {
+           if (nptracks < kMAXTRACKS ) {
+               for (Int_t i = nptracks; i < kMAXTRACKS; i++) {
                    tracks[i]  = 0;
                    charges[i] = 0;
                }
@@ -448,7 +389,6 @@ void AliMUONMerger::Digitise()
            
            // fill digits
            pMUON->AddDigits(ich,tracks,charges,fDigits);
-           // delete fTrList;
        }
        gAlice->TreeD()->Fill();
        pMUON->ResetDigits();
@@ -467,7 +407,6 @@ void AliMUONMerger::Digitise()
     delete [] fHitMap;
     delete fList;
     
-    if (fAddress)    fAddress->Delete();
 //  no need to delete ... and it makes a crash also
 //    if (fHitsBgr)    fHitsBgr->Delete();
 //    if (fPadHitsBgr) fPadHitsBgr->Delete();
index 137ebbe23f50b1b0e1eb315bb506763b029ee9f0..8231e443bd7262ed20fae52a9ee64b70473a4e47 100644 (file)
@@ -46,18 +46,17 @@ class AliMUONMerger {
     void SortTracks(Int_t *tracks,Int_t *charges,Int_t ntr);
     
  private:
-    TTree *fTrH1;                   // ! Hits Tree for background event
-    TClonesArray *fHitsBgr;         // ! List of hits for one track only
-    TClonesArray *fPadHitsBgr;      // ! List of clusters for one track only
-    AliHitMap **fHitMap;            // ! pointer to array of pointers to hitmaps
-    Int_t fNch;                     // ! chamber nr (loop variable)
-    Int_t fTrack;                   // ! track nr (loop variable)
-    TObjArray *fList;               // ! list of AliMUONTransientDigit
-    TObjArray *fTrList;             // ! list of tracks
-    TClonesArray *fAddress;         // ! pointer to TClonesArray of TVectors with trackinfo
-    Int_t fCounter;                 // ! nr. of AliMUONTransientDigit
-    Int_t fCountadr;                // ! counter for trinfo
-    Int_t fDigits[6];               // ! array with digits
+    TTree *fTrH1;                   //! Hits Tree for background event
+    TClonesArray *fHitsBgr;         //! List of hits for one track only
+    TClonesArray *fPadHitsBgr;      //! List of clusters for one track only
+    AliHitMap **fHitMap;            //! pointer to array of pointers to hitmaps
+    Int_t fNch;                     //! chamber nr (loop variable)
+    Int_t fTrack;                   //! track nr (loop variable)
+    Int_t fCharge;                  //! charge generated by fTrack
+    Bool_t fSignal;                 //! kTRUE if signal file is processed
+    TObjArray *fList;               //! list of AliMUONTransientDigit
+    Int_t fCounter;                 //! nr. of AliMUONTransientDigit
+    Int_t fDigits[6];               //! array with digits
     Int_t fEvNrSig;                 // signal     event number
     Int_t fEvNrBgr;                 // background event number    
     MergeMode_t fMerge;             // merging type kDigitize, kMerge