Important bug fixes
authorcholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 21 Sep 2010 10:02:40 +0000 (10:02 +0000)
committercholm <cholm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 21 Sep 2010 10:02:40 +0000 (10:02 +0000)
FMD/AliFMDESDRevertexer.cxx
FMD/AliFMDReconstructor.cxx

index 59f14d0..9174e73 100644 (file)
@@ -45,7 +45,7 @@ AliFMDESDRevertexer::Revertex(AliESDFMD* fmdEsd, Double_t vz) const
        Double_t phi, r, theta;
        Double_t eta      = AliESDFMD::kInvalidEta;
        Double_t oldEta   = fmdEsd->Eta(det, rng, 0, str);
-       if (oldEta == AliESDFMD::kInvalidEta) continue;
+       // if (oldEta == AliESDFMD::kInvalidEta) continue;
 
        Double_t oldTheta = Eta2Theta(oldEta);
        Bool_t   ret1     = PhysicalCoordinates(det, rng, 0, str, vz, 
@@ -64,12 +64,14 @@ AliFMDESDRevertexer::Revertex(AliESDFMD* fmdEsd, Double_t vz) const
        }
 
        Double_t corr = TMath::Abs(TMath::Cos(theta));
-       if (fmdEsd->IsAngleCorrected()) 
-         corr /= TMath::Abs(TMath::Cos(oldTheta));
-       for (UShort_t sec = 0; sec < nsec; sec++) { 
-         Double_t mult = fmdEsd->Multiplicity(det, rng, sec, str);
-         if (mult == AliESDFMD::kInvalidMult) continue;
-         fmdEsd->SetMultiplicity(det, rng, sec, str, corr * mult);
+       if (fmdEsd->IsAngleCorrected()) {
+         if (oldEta != AliESDFMD::kInvalidMult)
+           corr /= TMath::Abs(TMath::Cos(oldTheta));
+         for (UShort_t sec = 0; sec < nsec; sec++) { 
+           Double_t mult = fmdEsd->Multiplicity(det, rng, sec, str);
+           if (mult == AliESDFMD::kInvalidMult) continue;
+           fmdEsd->SetMultiplicity(det, rng, sec, str, corr * mult);
+         }
        }
       }
     }
@@ -82,6 +84,7 @@ AliFMDESDRevertexer::Revertex(AliESDFMD* fmdEsd, Double_t vz) const
 Double_t
 AliFMDESDRevertexer::Eta2Theta(Double_t eta) const
 {
+  if (eta == AliESDFMD::kInvalidEta) return 0;
   return 2 * TMath::ATan(TMath::Exp(-eta));
 }
 
index 3befa0d..b6f4f5f 100644 (file)
@@ -168,6 +168,7 @@ AliFMDReconstructor::ConvertDigits(AliRawReader* reader,
   }
   static TClonesArray* array = new TClonesArray("AliFMDDigit");
   digitsTree->Branch("FMD", &array);
+  array->Clear();
   
   AliFMDRawReader rawRead(reader, digitsTree);
   // rawRead.SetSampleRate(fFMD->GetSampleRate());
@@ -222,14 +223,22 @@ AliFMDReconstructor::GetVertex(AliESDEvent* esd) const
 Int_t
 AliFMDReconstructor::GetIdentifier() const
 {
-  return AliReconstruction::GetDetIndex(GetDetectorName());
+  // Get the detector identifier. 
+  // Note the actual value is cached so that we do not 
+  // need to do many expensive string comparisons. 
+  static Int_t idx = AliReconstruction::GetDetIndex(GetDetectorName());
+  return idx;
 }
 
 //____________________________________________________________________
 const AliFMDRecoParam*
 AliFMDReconstructor::GetParameters() const
 {
-  Int_t iDet = 12; // GetIdentifier();
+  // Get the reconstruction parameters. 
+  // 
+  // Return: 
+  //   Pointer to reconstruction parameters or null if not found or wrong type
+  Int_t iDet = GetIdentifier(); // Was 12 - but changed on Cvetans request
   const AliDetectorRecoParam* params = AliReconstructor::GetRecoParam(iDet);
   if (!params || params->IsA() != AliFMDRecoParam::Class()) return 0;
   return static_cast<const AliFMDRecoParam*>(params);
@@ -273,10 +282,15 @@ AliFMDReconstructor::MarkDeadChannels(AliESDFMD* esd) const
 
       for (UShort_t s = 0; s < nS; s++) { 
        for (UShort_t t = 0; t < nT; t++) {
-         if (param->IsDead(d, r, s, t)) 
+         if (param->IsDead(d, r, s, t)) { 
+           AliDebug(5, Form("Marking FMD%d%c[%2d,%3d] as dead", d, r, s, t));
            esd->SetMultiplicity(d, r, s, t, AliESDFMD::kInvalidMult);
-         else if (esd->Multiplicity(d, r, s, t) == AliESDFMD::kInvalidMult) 
+           esd->SetEta(d, r, s, t, AliESDFMD::kInvalidEta);
+         }
+         else if (esd->Multiplicity(d, r, s, t) == AliESDFMD::kInvalidMult) {
+           AliDebug(10, Form("Setting null signal in FMD%d%c[%2d,%3d]", d, r, s, t));
            esd->SetMultiplicity(d, r, s, t, 0);
+         }
        }
       }
     }
@@ -814,7 +828,21 @@ AliFMDReconstructor::PhysicalCoordinates(UShort_t det,
   phi = dphi;
 }
 
-      
+namespace { 
+  class ESDPrinter : public AliESDFMD::ForOne
+  {
+  public:
+    ESDPrinter() {}
+    Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
+                     Float_t m, Float_t e)
+    {
+      if (m > 0 && m != AliESDFMD::kInvalidMult) 
+       printf("  FMD%d%c[%2d,%3d] = %6.3f / %6.3f\n", d, r, s, t, m, e);
+      return kTRUE;
+    }
+  };
+}
+
 
 //____________________________________________________________________
 void 
@@ -839,6 +867,11 @@ AliFMDReconstructor::FillESD(TTree*  /* digitsTree */,
     AliFMDESDRevertexer revertexer;
     revertexer.Revertex(fESDObj, fCurrentVertex);
   }
+  
+  if (AliDebugLevel() > 10) { 
+    ESDPrinter p;
+    fESDObj->ForEach(p);
+  }
 
   if (esd) { 
     AliFMDDebug(2, ("Writing FMD data to ESD tree"));