@date Mon Mar 27 12:48:51 2006
@brief Concrete implementation of FMD detector driver - detailed
version
+ @ingroup FMD_sim
*/
//____________________________________________________________________
//
// contains the base procedures for the Forward Multiplicity detector
// Detector consists of 3 sub-detectors FMD1, FMD2, and FMD3, each of
// which has 1 or 2 rings of silicon sensors.
-//
// This class contains the detailed version of the FMD - that is, hits
// are produced during simulation.
//
#include <TVirtualMC.h> // ROOT_TVirtualMC
#include <AliRun.h> // ALIRUN_H
#include <AliMC.h> // ALIMC_H
-#include <AliLog.h> // ALILOG_H
+// #include <AliLog.h> // ALILOG_H
+#include "AliFMDDebug.h" // Better debug macros
#include "AliFMDv1.h" // ALIFMDV1_H
-#include "AliFMDGeometryBuilder.h"
+// #include "AliFMDGeometryBuilder.h"
#include "AliFMDGeometry.h"
#include "AliFMDDetector.h"
#include "AliFMDRing.h"
AliFMDv1::VMC2FMD(TLorentzVector& v, UShort_t& detector,
Char_t& ring, UShort_t& sector, UShort_t& strip) const
{
- TVirtualMC* mc = TVirtualMC::GetMC();
+ // Convert VMC coordinates to detector coordinates
+ TVirtualMC* mc = TVirtualMC::GetMC();
AliFMDGeometry* fmd = AliFMDGeometry::Instance();
// Get track position
if (t < 0 || t > 2 * theta) return kFALSE;
else if (t > theta) sector += 1;
- AliDebug(40, Form("<1> Inside an active FMD volume FMD%d%c[%2d,%3d] %s",
+ AliFMDDebug(40, ("<1> Inside an active FMD volume FMD%d%c[%2d,%3d] %s",
detector, ring, sector, strip, mc->CurrentVolPath()));
return kTRUE;
}
UShort_t& detector, Char_t& ring,
UShort_t& sector, UShort_t& strip) const
{
- TVirtualMC* mc = TVirtualMC::GetMC();
+ // Convert VMC coordinates to detector coordinates
+ TVirtualMC* mc = TVirtualMC::GetMC();
AliFMDGeometry* fmd = AliFMDGeometry::Instance();
strip = copy - 1;
}
else
sector = sectordiv;
- AliDebug(30, Form("Getting ring volume with offset %d -> %s",
+ AliFMDDebug(30, ("Getting ring volume with offset %d -> %s",
fmd->GetRingOff(),
mc->CurrentVolOffName(fmd->GetRingOff())));
Int_t iring; mc->CurrentVolOffID(fmd->GetRingOff(), iring);
AliFMDRing* gring = gdet->GetRing(ring);
if (!gring) {
AliFatal(Form("Ring %c not found (volume was %s at offset %d in path %s)",
- ring, fmd->GetRingOff(),
+ ring,
mc->CurrentVolOffName(fmd->GetRingOff()),
+ fmd->GetRingOff(),
mc->CurrentVolPath()));
}
Int_t n = gring->GetNSectors();
#if 0
if (rz < 0) {
Int_t s = ((n - sector + n / 2) % n) + 1;
- AliDebug(1, Form("Recalculating sector to %d (=%d-%d+%d/2%%%d+1 z=%f)",
+ AliFMDDebug(1, ("Recalculating sector to %d (=%d-%d+%d/2%%%d+1 z=%f)",
s, n, sector, n, n, rz));
sector = s;
}
sector--;
// Get track position
mc->TrackPosition(v);
- AliDebug(15, Form("<2> Inside an active FMD volume FMD%d%c[%2d,%3d] %s",
+ AliFMDDebug(40, ("<2> Inside an active FMD volume FMD%d%c[%2d,%3d] %s",
detector, ring, sector, strip, mc->CurrentVolPath()));
return kTRUE;
AliFMDv1::CheckHit(Int_t trackno, Int_t pdg, Float_t absQ,
const TLorentzVector& p, Float_t edep) const
{
+ // Check that a hit is good
if (AliLog::GetDebugLevel("FMD", "AliFMD") < 5) return kFALSE;
TVirtualMC* mc = TVirtualMC::GetMC();
Double_t mass = mc->TrackMass();
if (mc->IsTrackOut()) what.Append("out ");
Int_t mother = gAlice->GetMCApp()->GetPrimary(trackno);
- AliDebug(15, Form("Track # %5d deposits a lot of energy\n"
+ AliFMDDebug(15, ("Track # %5d deposits a lot of energy\n"
" Volume: %s\n"
" Momentum: (%7.4f,%7.4f,%7.4f)\n"
" PDG: %d (%s)\n"
Int_t vol = mc->CurrentVolID(copy);
AliFMDGeometry* fmd = AliFMDGeometry::Instance();
if (!fmd->IsActive(vol)) {
- AliDebug(50, Form("Not an FMD volume %d '%s'",vol,mc->CurrentVolName()));
+ AliFMDDebug(50, ("Not an FMD volume %d '%s'",vol,mc->CurrentVolName()));
return;
}
TLorentzVector v;
// Reset the energy deposition for this track, and update some of
// our parameters.
if (entering) {
- AliDebug(15, Form("Track # %8d entering active FMD volume %s: "
+ AliFMDDebug(15, ("Track # %8d entering active FMD volume %s: "
"Edep=%f (%f,%f,%f)", trackno, mc->CurrentVolPath(),
edep, v.X(), v.Y(), v.Z()));
fCurrentP = p;
// If the track is inside, then update the energy deposition
if (inside && fCurrentDeltaE >= 0) {
fCurrentDeltaE += edep;
- AliDebug(15, Form("Track # %8d inside active FMD volume %s: Edep=%f, "
+ AliFMDDebug(15, ("Track # %8d inside active FMD volume %s: Edep=%f, "
"Accumulated Edep=%f (%f,%f,%f)", trackno,
mc->CurrentVolPath(), edep, fCurrentDeltaE,
v.X(), v.Y(), v.Z()));
if (out) {
if (fCurrentDeltaE >= 0) {
fCurrentDeltaE += edep;
- AliDebug(15, Form("Track # %8d exiting active FMD volume %s: Edep=%g, "
+ AliFMDDebug(15, ("Track # %8d exiting active FMD volume %s: Edep=%g, "
"Accumulated Edep=%g (%f,%f,%f)", trackno,
mc->CurrentVolPath(), edep, fCurrentDeltaE,
v.X(), v.Y(), v.Z()));
#ifdef CHECK_TRANS
Double_t x, y, z;
fmd->Detector2XYZ(detector, ring, sector, strip, x, y ,z);
- AliDebug(1, Form("Hit at (%f,%f,%f), geometry says (%f,%f,%f)",
+ AliFMDDebug(1, ("Hit at (%f,%f,%f), geometry says (%f,%f,%f)",
fCurrentV.X(), fCurrentV.Y(), fCurrentV.Z(), x, y, z));
#endif
}