+//____________________________________________________________________
+namespace {
+ // Private implementation of a AliFMDMap::ForOne to use in
+ // forwarding to AliESDFMD::ForOne
+ class ForMultiplicity : public AliFMDMap::ForOne
+ {
+ public:
+ ForMultiplicity(const AliESDFMD& o, AliESDFMD::ForOne& a)
+ : fObject(o), fAlgo(a)
+ {}
+ Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t,
+ Float_t m)
+ {
+ Float_t e = fObject.Eta(d, r, 0, t);
+ return fAlgo.operator()(d, r, s, t, m, e);
+ }
+ Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Int_t)
+ {
+ return kTRUE;
+ }
+ Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, UShort_t)
+ {
+ return kTRUE;
+ }
+ Bool_t operator()(UShort_t, Char_t, UShort_t, UShort_t, Bool_t)
+ {
+ return kTRUE;
+ }
+ protected:
+ const AliESDFMD& fObject;
+ AliESDFMD::ForOne& fAlgo;
+ };
+
+ // Private implementation of AliESDFMD::ForOne to print an
+ // object
+ class Printer : public AliESDFMD::ForOne
+ {
+ public:
+ Printer() : fOldD(0), fOldR('-'), fOldS(1024) {}
+ Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t,
+ Float_t m, Float_t e)
+ {
+ if (d != fOldD) {
+ if (fOldD != 0) printf("\n");
+ fOldD = d;
+ fOldR = '-';
+ printf("FMD%d", fOldD);
+ }
+ if (r != fOldR) {
+ fOldR = r;
+ fOldS = 1024;
+ printf("\n %s ring", (r == 'I' ? "Inner" : "Outer"));
+ }
+ if (s != fOldS) {
+ fOldS = s;
+ printf("\n Sector %d", fOldS);
+ }
+ if (t % 4 == 0) printf("\n %3d-%3d ", t, t+3);
+ if (m == AliESDFMD::kInvalidMult) printf("------/");
+ else printf("%6.3f/", m);
+ if (e == AliESDFMD::kInvalidEta) printf("------ ");
+ else printf("%6.3f ", e);
+
+ return kTRUE;
+ }
+ private:
+ UShort_t fOldD;
+ Char_t fOldR;
+ UShort_t fOldS;
+ };
+}
+