bugs fixed (Diego)
authorpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Mar 2006 12:01:32 +0000 (12:01 +0000)
committerpcrochet <pcrochet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Mar 2006 12:01:32 +0000 (12:01 +0000)
MUON/AliMUONDataIterator.cxx
MUON/AliMUONDigitizerV3.cxx

index fc28218..135d261 100644 (file)
@@ -100,7 +100,7 @@ AliMUONDataIterator::~AliMUONDataIterator()
 TObject* 
 AliMUONDataIterator::Next() 
 { 
-  if (!fIterator) return fIterator->Next(); 
+  if (fIterator) return fIterator->Next(); 
   return 0x0;
 }
 
@@ -108,7 +108,7 @@ AliMUONDataIterator::Next()
 Bool_t 
 AliMUONDataIterator::Remove() 
 { 
-  if (!fIterator) return fIterator->Remove(); 
+  if (fIterator) return fIterator->Remove(); 
   return kFALSE;
 }
 
@@ -116,5 +116,5 @@ AliMUONDataIterator::Remove()
 void 
 AliMUONDataIterator::Reset() 
 { 
-  if (!fIterator) fIterator->Reset(); 
+  if (fIterator) fIterator->Reset(); 
 }
index c3ba710..aca7141 100644 (file)
@@ -234,6 +234,8 @@ AliMUONDigitizerV3::ApplyResponseToTriggerDigit(AliMUONDigit& digit,
 
   AliMUONDigit* correspondingDigit = FindCorrespondingDigit(digit,data);
 
+  if(!correspondingDigit)return;//reject bad correspondences
+
   Int_t detElemId = digit.DetElemId();
   
   const AliMpVSegmentation* segment[2] = 
@@ -479,11 +481,26 @@ AliMUONDigit*
 AliMUONDigitizerV3::FindCorrespondingDigit(AliMUONDigit& digit,
                                            AliMUONData* data)
 {                                                
-  AliMUONDataIterator it(data,"D",AliMUONDataIterator::kAllChambers);
+  AliMUONDataIterator it(data,"D",AliMUONDataIterator::kTriggerChambers);
   AliMUONDigit* cd;
+
+  for(;;){
+      cd = static_cast<AliMUONDigit*>(it.Next());
+      if(!cd)continue;
+      if (cd->DetElemId() == digit.DetElemId() &&
+         cd->PadX() == digit.PadX() &&
+         cd->PadY() == digit.PadY() && 
+         cd->Cathode() == digit.Cathode()){
+         break;
+      }
+  }
+  //The corresponding digit is searched only forward in the AliMUONData.
+  //In this way when the first digit of the couple is given, the second digit is found and the efficiency is applied to both. 
+  //Afterwards, when the second digit of the couple is given the first one is not found and hence efficiency is not applied again
   
   while ( ( cd = static_cast<AliMUONDigit*>(it.Next()) ) )
   {
+    if(!cd)continue;//avoid problems when 1 digit is removed
     if ( cd->DetElemId() == digit.DetElemId() &&
          cd->Hit() == digit.Hit() &&
          cd->Cathode() != digit.Cathode() )