Fix to avoid deleting cached CDB objects - modified fix by Peter.
[u/mrichter/AliRoot.git] / FMD / AliFMD.cxx
index 10124ea..0e35d5f 100644 (file)
@@ -145,7 +145,7 @@ AliFMD::AliFMD()
   fHits        = 0;
   fDigits      = 0;
   fIshunt      = 0;
-  fBad         = new TClonesArray("AliFMDHit");
+  // fBad         = new TClonesArray("AliFMDHit");
 }
 
 //____________________________________________________________________
@@ -162,15 +162,15 @@ AliFMD::AliFMD(const char *name, const char *title)
   // Standard constructor for Forward Multiplicity Detector
   //
   AliFMDDebug(10, ("\tStandard CTOR"));
-  fBad         = new TClonesArray("AliFMDHit");
+  // fBad         = new TClonesArray("AliFMDHit");
   
   // Initialise Hit array
-  HitsArray();
-  gAlice->GetMCApp()->AddHitList(fHits);
+  // HitsArray();
+  // gAlice->GetMCApp()->AddHitList(fHits);
 
   // (S)Digits for the detectors disk
-  DigitsArray();
-  SDigitsArray();
+  // DigitsArray();
+  // SDigitsArray();
   
   // CHC: What is this?
   fIshunt = 0;
@@ -430,6 +430,7 @@ void AliFMD::CreateMaterials()
 
 }
 
+#if 0
 //____________________________________________________________________
 void  
 AliFMD::SetTrackingParameters(Int_t imed, 
@@ -455,31 +456,33 @@ AliFMD::SetTrackingParameters(Int_t imed,
                              Int_t   photon_production, 
                              Int_t   rayleigh_scattering)
 {
+  // Disabled by request of FCA, kept for reference only
   if (!gMC) return;
   TArrayI& idtmed = *(GetIdtmed());
   Int_t    iimed  = idtmed[imed];
-  gMC->Gstpar(iimed, "CUTGAM", gamma);
-  gMC->Gstpar(iimed, "CUTELE", electron);
-  gMC->Gstpar(iimed, "CUTNEU", neutral_hadron);
-  gMC->Gstpar(iimed, "CUTHAD", charged_hadron);
-  gMC->Gstpar(iimed, "CUTMUO", muon);
-  gMC->Gstpar(iimed, "BCUTE",  electron_bremstrahlung);
-  gMC->Gstpar(iimed, "BCUTM",  muon__bremstrahlung);
-  gMC->Gstpar(iimed, "DCUTE",  electron_delta);
-  gMC->Gstpar(iimed, "DCUTM",  muon_delta);
-  gMC->Gstpar(iimed, "PPCUTM", muon_pair);
-  gMC->Gstpar(iimed, "ANNI",   Float_t(annihilation));
-  gMC->Gstpar(iimed, "BREM",   Float_t(bremstrahlung));
-  gMC->Gstpar(iimed, "COMP",   Float_t(compton_scattering));
-  gMC->Gstpar(iimed, "DCAY",   Float_t(decay));
-  gMC->Gstpar(iimed, "DRAY",   Float_t(delta_ray));
-  gMC->Gstpar(iimed, "HADR",   Float_t(hadronic));
-  gMC->Gstpar(iimed, "LOSS",   Float_t(energy_loss));
-  gMC->Gstpar(iimed, "MULS",   Float_t(multiple_scattering));
-  gMC->Gstpar(iimed, "PAIR",   Float_t(pair_production));
-  gMC->Gstpar(iimed, "PHOT",   Float_t(photon_production));
-  gMC->Gstpar(iimed, "RAYL",   Float_t(rayleigh_scattering));
+  // gMC->Gstpar(iimed, "CUTGAM",      gamma);
+  // gMC->Gstpar(iimed, "CUTELE",      electron);
+  // gMC->Gstpar(iimed, "CUTNEU",      neutral_hadron);
+  // gMC->Gstpar(iimed, "CUTHAD",      charged_hadron);
+  // gMC->Gstpar(iimed, "CUTMUO",      muon);
+  // gMC->Gstpar(iimed, "BCUTE",       electron_bremstrahlung);
+  // gMC->Gstpar(iimed, "BCUTM",       muon__bremstrahlung);
+  // gMC->Gstpar(iimed, "DCUTE",       electron_delta);
+  // gMC->Gstpar(iimed, "DCUTM",       muon_delta);
+  // gMC->Gstpar(iimed, "PPCUTM",      muon_pair);
+  // gMC->Gstpar(iimed, "ANNI",        Float_t(annihilation));
+  // gMC->Gstpar(iimed, "BREM",        Float_t(bremstrahlung));
+  // gMC->Gstpar(iimed, "COMP",        Float_t(compton_scattering));
+  // gMC->Gstpar(iimed, "DCAY",        Float_t(decay));
+  // gMC->Gstpar(iimed, "DRAY",        Float_t(delta_ray));
+  // gMC->Gstpar(iimed, "HADR",        Float_t(hadronic));
+  // gMC->Gstpar(iimed, "LOSS",        Float_t(energy_loss));
+  // gMC->Gstpar(iimed, "MULS",        Float_t(multiple_scattering));
+  // gMC->Gstpar(iimed, "PAIR",        Float_t(pair_production));
+  // gMC->Gstpar(iimed, "PHOT",        Float_t(photon_production));
+  // gMC->Gstpar(iimed, "RAYL",        Float_t(rayleigh_scattering));
 }
+#endif
 
 //____________________________________________________________________
 void  
@@ -490,9 +493,28 @@ AliFMD::Init()
   AliFMDDebug(1, ("Initialising FMD detector object"));
   TVirtualMC*      mc     = TVirtualMC::GetMC();
   AliFMDGeometry*  fmd    = AliFMDGeometry::Instance();
-  const TArrayI&   actGeo = fmd->ActiveIds();
+  TArrayI          actGeo = fmd->ActiveIds();
+  bool             valid  = true;
+  if (actGeo.fN <= 0) valid = false;
+  else { 
+    for (int i = 0; i < actGeo.fN; i++) {
+      if (actGeo[i] < 0) { 
+       valid = false;
+       break;
+      }
+    }
+  }
+  if (!valid) { 
+    AliFMDDebug(1, ("Extracting geometry info from loaded geometry"));
+    fmd->ExtractGeomInfo();
+    actGeo = fmd->ActiveIds();
+  }
   TArrayI          actVmc(actGeo.fN);
   for (Int_t i = 0; i < actGeo.fN; i++) {
+    if (actGeo[i] < 0) { 
+      AliError(Form("Invalid id: %d", actGeo[i]));
+      continue;
+    }
     TGeoVolume *sens = gGeoManager->GetVolume(actGeo[i]);
     if (!sens) {
       AliError(Form("No TGeo volume for sensitive volume ID=%d",actGeo[i]));
@@ -515,7 +537,7 @@ AliFMD::FinishEvent()
   // 
   if (AliLog::GetDebugLevel("FMD", "AliFMD") < 10) return;
   if (fBad && fBad->GetEntries() > 0) {
-    AliWarning((Form("EndEvent", "got %d 'bad' hits", fBad->GetEntries())));
+    AliWarning(Form("got %d 'bad' hits", fBad->GetEntries()));
     TIter next(fBad);
     AliFMDHit* hit;
     while ((hit = static_cast<AliFMDHit*>(next()))) hit->Print("D");
@@ -714,7 +736,9 @@ AliFMD::AddHitByFields(Int_t    track,
 
   AliMC *mcApplication = (AliMC*)gAlice->GetMCApp();
   
-  AliTrackReference* trackRef = AddTrackReference(mcApplication->GetCurrentTrackNumber(), AliTrackReference::kFMD); 
+  AliTrackReference* trackRef = 
+    AddTrackReference(mcApplication->GetCurrentTrackNumber(), 
+                     AliTrackReference::kFMD); 
   UInt_t stripId = AliFMDStripIndex::Pack(detector,ring,sector,strip);
   trackRef->SetUserId(stripId);
   
@@ -848,7 +872,7 @@ AliFMD::AddSDigitByFields(UShort_t       detector,
   // AliFMDDebug(0, ("Adding sdigit # %d", fNsdigits));
   
   AliFMDDebug(15, ("Adding sdigit # %5d/%5d for FMD%d%c[%2d,%3d]"
-                  "=(%d,%d,%d,%d) with %d tracks %d primaries %d (%p)",
+                  "=(%d,%d,%d,%d) with %d tracks %d primaries (%p)",
                   fNsdigits-1, a.GetEntriesFast(),
                   detector, ring, sector, strip, 
                   count1, count2, count3, count4, ntot, nprim, refs));
@@ -876,6 +900,8 @@ AliFMD::HitsArray()
   if (!fHits) { 
     fHits = new TClonesArray("AliFMDHit", 1000);
     fNhits = 0;
+    if (gAlice && gAlice->GetMCApp() && gAlice->GetMCApp()->GetHitLists()) 
+      gAlice->GetMCApp()->AddHitList(fHits);
   }
   return fHits;
 }
@@ -998,9 +1024,10 @@ AliFMD::Raw2SDigits(AliRawReader* reader)
   // Bool_t ret = fmdReader.ReadAdcs(sdigits, kTRUE, kTRUE);
   // sdigits->ls();
   UShort_t ns = sdigits->GetEntriesFast();
-  for (UShort_t i = 0; i < ns; i++) 
-    sdigits->At(i)->Print("pl");
-  
+  if (AliLog::GetDebugLevel("FMD", 0) > 5) {
+    for (UShort_t i = 0; i < ns; i++) 
+      sdigits->At(i)->Print("pl");
+  } 
   AliFMDDebug(1, ("Got a total of %d SDigits", ns));
 
   fLoader->TreeS()->Fill();