#include <TVirtualMC.h> // ROOT_TVirtualMC
#include <cmath> // __CMATH__
-#include <AliRunDigitizer.h> // ALIRUNDIGITIZER_H
+#include <AliDigitizationInput.h> // ALIRUNDIGITIZER_H
#include <AliLoader.h> // ALILOADER_H
#include <AliRun.h> // ALIRUN_H
#include <AliMC.h> // ALIMC_H
fHits = 0;
fDigits = 0;
fIshunt = 0;
- fBad = new TClonesArray("AliFMDHit");
+ // fBad = new TClonesArray("AliFMDHit");
}
//____________________________________________________________________
// 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;
}
+#if 0
//____________________________________________________________________
void
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
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]));
//
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");
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);
// 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));
if (!fHits) {
fHits = new TClonesArray("AliFMDHit", 1000);
fNhits = 0;
+ if (gAlice && gAlice->GetMCApp() && gAlice->GetMCApp()->GetHitLists())
+ gAlice->GetMCApp()->AddHitList(fHits);
}
return fHits;
}
//
AliFMDHitDigitizer digitizer(this, AliFMDHitDigitizer::kDigits);
digitizer.Init();
- digitizer.Exec("");
+ digitizer.Digitize("");
}
//____________________________________________________________________
//
AliFMDHitDigitizer digitizer(this, AliFMDHitDigitizer::kSDigits);
digitizer.Init();
- digitizer.Exec("");
+ digitizer.Digitize("");
}
//____________________________________________________________________
AliDigitizer*
-AliFMD::CreateDigitizer(AliRunDigitizer* manager) const
+AliFMD::CreateDigitizer(AliDigitizationInput* digInput) const
{
// Create a digitizer object
AliFMDBaseDigitizer* digitizer = 0;
#ifdef USE_SSDIGITIZER
- digitizer = new AliFMDSSDigitizer(manager);
+ digitizer = new AliFMDSSDigitizer(digInput);
#else
/* This is what we actually do, and will work */
#if 0
AliInfo("SDigit->Digit conversion not really supported, "
"doing Hit->Digit conversion instead");
#endif
- digitizer = new AliFMDDigitizer(manager);
+ digitizer = new AliFMDDigitizer(digInput);
#endif
return digitizer;
}
// 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();