]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MFT/AliMFTDigitizer.cxx
Updated MFT code (Antonio)
[u/mrichter/AliRoot.git] / MFT / AliMFTDigitizer.cxx
index f6ba7c1a79cb0d0094b552c00021146ea13d94aa..3e43cd13f8e95a0e2dffd84b4f9dcf16d122dbaa 100644 (file)
@@ -50,7 +50,7 @@ AliMFTDigitizer::AliMFTDigitizer():
 
 //====================================================================================================================================================
 
-AliMFTDigitizer::AliMFTDigitizer(AliDigitizationInput *digInp) :
+AliMFTDigitizer::AliMFTDigitizer(AliDigitizationInput *digInp):
   AliDigitizer(digInp),
   fNPlanes(0),
   fSegmentation(0)
@@ -65,7 +65,7 @@ void AliMFTDigitizer::Digitize(Option_t*) {
   // This method is responsible for merging sdigits to a list of digits
 
   AliDebug(1, "************************************************************************");
-  AliDebug(1, "************************ AliMFTDigitizer::Exec *************************");
+  AliDebug(1, "************************ AliMFTDigitizer::Digitize *********************");
   AliDebug(1, "************************************************************************");
   
   if (!fSegmentation) {
@@ -159,17 +159,22 @@ void AliMFTDigitizer::SDigits2Digits(TClonesArray *pSDigitList, TObjArray *pDigi
     AliMFTDigit *oldDig=NULL;
     pSDigitList[iPlane].Sort();
 
+    Int_t nDetElem = fSegmentation->GetPlane(iPlane)->GetNActiveElements();
+    TClonesArray *digitsPerDetElem[fNMaxDetElemPerPlane] = {0};
+    for (Int_t iDetElem=0; iDetElem<nDetElem; iDetElem++) digitsPerDetElem[iDetElem] = new TClonesArray("AliMFTDigit");
+
     AliDebug(1,"starting loop over sdigits to create digits");
     AliDebug(1, Form("MFT plane #%02d has %d SDigits", iPlane, Int_t(pSDigitList[iPlane].GetEntries())));
 
     for (Int_t iSDig=0; iSDig<pSDigitList[iPlane].GetEntries(); iSDig++) {
 
       newDig = (AliMFTDigit*) (pSDigitList[iPlane].At(iSDig));
+      Int_t localDetElemID = fSegmentation->GetDetElemLocalID(newDig->GetDetElemID());
       Bool_t digitExists = kFALSE;
-      Int_t nDigits = myDigitList[iPlane]->GetEntries();
+      Int_t nDigits = digitsPerDetElem[localDetElemID]->GetEntries();
       
       for (Int_t iDig=0; iDig<nDigits; iDig++) {
-       oldDig = (AliMFTDigit*) (myDigitList[iPlane]->At(iDig));
+       oldDig = (AliMFTDigit*) (digitsPerDetElem[localDetElemID]->At(iDig));
        if (newDig->GetDetElemID()==oldDig->GetDetElemID() &&
            newDig->GetPixelX()==oldDig->GetPixelX() &&
            newDig->GetPixelY()==oldDig->GetPixelY() &&
@@ -179,10 +184,21 @@ void AliMFTDigitizer::SDigits2Digits(TClonesArray *pSDigitList, TObjArray *pDigi
          break;
        }
       }
+      
+      if (!digitExists) new ((*digitsPerDetElem[localDetElemID])[digitsPerDetElem[localDetElemID]->GetEntries()]) AliMFTDigit(*newDig);
+
+    }
 
-      if (!digitExists) new ((*myDigitList[iPlane])[myDigitList[iPlane]->GetEntries()]) AliMFTDigit(*newDig);
+    // Now we merge the digit lists coming from each detection element, to have an ordered final list
 
+    for (Int_t iDetElem=0; iDetElem<nDetElem; iDetElem++) {
+      for (Int_t iSDig=0; iSDig<digitsPerDetElem[iDetElem]->GetEntries(); iSDig++) {
+       newDig = (AliMFTDigit*) (digitsPerDetElem[iDetElem]->At(iSDig));
+       new ((*myDigitList[iPlane])[myDigitList[iPlane]->GetEntries()]) AliMFTDigit(*newDig);
+      }
     }
+
+    for (Int_t iDetElem=0; iDetElem<nDetElem; iDetElem++) delete digitsPerDetElem[iDetElem];
     
     AliDebug(1, Form("MFT plane #%02d has %d Digits", iPlane, Int_t(myDigitList[iPlane]->GetEntries())));