X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=FMD%2FAliFMDDisplay.cxx;h=f9d45bce6fafa926fae33586d92a79945f52a7a4;hb=124d488a41b244cd81318814a33bab318f78ac9e;hp=ed27deee3d6d2e091e7a48744f6a45734fd8bbff;hpb=5c96b03f205ad75395379c8a14b2d3c72d6dabbb;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMDDisplay.cxx b/FMD/AliFMDDisplay.cxx index ed27deee3d6..f9d45bce6fa 100644 --- a/FMD/AliFMDDisplay.cxx +++ b/FMD/AliFMDDisplay.cxx @@ -38,18 +38,23 @@ #include #include #include +#include #include #include #include +#include +#include // #include // #include #include "AliFMDDisplay.h" // ALIFMDDISPLAY_H #include "AliFMDHit.h" // ALIFMDHIT_H #include "AliFMDDigit.h" // ALIFMDDIGIT_H +#include "AliFMDSDigit.h" // ALIFMDSDIGIT_H #include "AliFMDRecPoint.h" // ALIFMDRECPOINT_H #include "AliFMDGeometry.h" // ALIFMDGEOMETRY_H #include "AliFMDParameters.h" // ALIFMDPARAMETERS_H +#include "AliFMDRawReader.h" // ALIFMDRAWREADER_H #include // ALIESDFMD_H // #include #include "AliFMDDebug.h" // Better debug macros @@ -63,6 +68,12 @@ ClassImp(AliFMDDisplay) //____________________________________________________________________ AliFMDDisplay* AliFMDDisplay::fgInstance = 0; +//____________________________________________________________________ +const AliFMDDisplay::Range_t AliFMDDisplay::fgkEdepRange = { 100, 0., 2. }; +const AliFMDDisplay::Range_t AliFMDDisplay::fgkAdcRange = { 1024, 0., 1023. }; +const AliFMDDisplay::Range_t AliFMDDisplay::fgkMultRange = { 500, 0., 20. }; + + //____________________________________________________________________ AliFMDDisplay* AliFMDDisplay::Instance() @@ -101,29 +112,35 @@ AliFMDDisplay::AliFMDDisplay(Bool_t onlyFMD, const char* gAliceFile) fHits(0), fCanvas(0), fPad(0), + fButtons(0), fSlider(0), + fFactor(0), fZoomMode(kFALSE), fX0(0), fY0(0), fX1(0), fY1(0), - fMultCut(0), - fPedestalFactor(0), fXPixel(0), fYPixel(0), fOldXPixel(0), fOldYPixel(0), fLineDrawn(0), - fOnlyFMD(onlyFMD) + fOnlyFMD(onlyFMD), + fSpec(0), + fSpecCut(0), + fAux(0), + fReturn(kFALSE), + fContinous(kFALSE), + fTimeout("gApplication->StopIdleing()", 10) { // Constructor of an FMD display object. // Must be called // before Instance + SetName("AliFMDDisplay"); + SetTitle("3D Display of various kinds of FMD data"); AddLoad(kGeometry); if (fgInstance) delete fgInstance; fgInstance = this; - SetMultiplicityCut(); - SetPedestalFactor(); } //____________________________________________________________________ @@ -134,41 +151,70 @@ AliFMDDisplay::MakeCanvas(const char** which) // Parameters: // which Which button to put up. gStyle->SetPalette(1); + // gStyle->SetCanvasPreferGL(kTRUE); Double_t y1 = .10; Int_t w = 700; - fCanvas = new TCanvas("display", "Display", w, Int_t(w / (1-y1))); + fCanvas = new TCanvas(Form("gl%s", GetName()), + Form("%s - Display", GetTitle()), + w, Int_t(w / (1-y1))); fCanvas->SetFillColor(1); fCanvas->ToggleEventStatus(); fCanvas->cd(); - fPad = new TPad("view", "3DView", 0.0, y1, 1.0, 1.0, 1, 0, 0); + fPad = new TPad("glview", "3DView", 0.0, y1, 1.0, 1.0, 1, 0, 0); fPad->Draw(); + + const char** p = which; + const char* m; + Int_t n = 0; + Int_t j = 0; + while (*(p++)) n++; + AliFMDDebug(1, ("Got %d buttons", n)); + if (n <= 0) return; Double_t yb = 0; + Double_t xb = 1; fCanvas->cd(); - if (TESTBIT(fTreeMask, kESD) || - TESTBIT(fTreeMask, kDigits) || + if (TESTBIT(fTreeMask, kDigits) || + TESTBIT(fTreeMask, kRaw)) { + yb = .05; + xb = .66; + fFactor = new TSlider("pedFactor", "Pedestal Factor", xb+.01, 0, 1, yb); + fFactor->SetMethod("AliFMDDisplay::Instance()->ChangeFactor()"); + fFactor->SetRange(3./10, 1); + fFactor->Draw(); + TSliderBox *sbox = + static_cast(fFactor->GetListOfPrimitives()-> + FindObject("TSliderBox")); + if (sbox) { + sbox->SetToolTipText("Adjust the noise suppression factor by moving " + "lower limit"); + } + } + if (TESTBIT(fTreeMask, kHits) || + TESTBIT(fTreeMask, kESD) || + TESTBIT(fTreeMask, kDigits) || + TESTBIT(fTreeMask, kSDigits) || TESTBIT(fTreeMask, kRaw)) { yb = .05; - fSlider = new TSlider("multCut", "Multiplicity cut", 0, 0, 1, yb); + fSlider = new TSlider("genCut", "Multiplicity cut", 0, 0, xb, yb); fSlider->SetMethod("AliFMDDisplay::Instance()->ChangeCut()"); + fSlider->SetRange(0,1); fSlider->Draw(); - fSlider->SetMinimum(TESTBIT(fTreeMask, kESD) ? fMultCut * 10 : - fPedestalFactor * 10); + TSliderBox *sbox = + static_cast(fSlider->GetListOfPrimitives()-> + FindObject("TSliderBox")); + if (sbox) { + sbox->SetToolTipText("Adjust lower and upper limit on data signal"); + } } - const char** p = which; - const char* m; - Int_t n = 0; - Int_t j = 0; - while (*(p++)) n++; - AliInfo(Form("Got %d buttons", n)); Float_t x0 = 0; Float_t dx = 1. / n; p = which; while ((m = *(p++))) { fCanvas->cd(); - AliInfo(Form("Adding button %s", m)); + AliFMDDebug(1, ("Adding button %s", m)); TButton* b = new TButton(m, Form("AliFMDDisplay::Instance()->%s()", m), - x0, yb, x0 + dx, y1); + x0, yb, TMath::Min(x0 + dx,.999F), y1); b->Draw(); fButtons.Add(b); x0 += dx; @@ -196,13 +242,37 @@ AliFMDDisplay::ShowOnlyFMD() Bool_t hasFMD1 = kFALSE; Bool_t hasFMD2 = kFALSE; Bool_t hasFMD3 = kFALSE; - TObjArray toshow; + AliFMDDebug(1, ("Getting material FMD_Si$")); + TGeoMaterial* si = gGeoManager->GetMaterial("FMD_Si$"); // kRed + AliFMDDebug(1, ("Getting material FMD_Carbon$")); + TGeoMaterial* c = gGeoManager->GetMaterial("FMD_Carbon$"); // kGray + AliFMDDebug(1, ("Getting material FMD_Aluminum$")); + TGeoMaterial* al = gGeoManager->GetMaterial("FMD_Aluminum$");// kGray-2 + AliFMDDebug(1, ("Getting material FMD_Copper$")); + TGeoMaterial* cu = gGeoManager->GetMaterial("FMD_Copper$"); // kGreen-2 + AliFMDDebug(1, ("Getting material FMD_PCB$")); + TGeoMaterial* pcb = gGeoManager->GetMaterial("FMD_PCB$"); // kGreen+2 + AliFMDDebug(1, ("Getting material FMD_PCB$")); + TGeoMaterial* chip = gGeoManager->GetMaterial("FMD_Si Chip$");// kGreen+2 + TObjArray toshow; while ((node = static_cast(next()))) { const char* name = node->GetName(); if (!name) continue; if (!(v = node->GetVolume())) continue; if (name[0] == 'F') { + TGeoMaterial* m = (v->IsAssembly() ? 0 : v->GetMaterial()); + Int_t col = -1; + if (m == si) col = kRed; + else if (m == c) col = kGray; + else if (m == al) col = kYellow+4; + else if (m == cu) col = kRed+6; + else if (m == pcb) col = kGreen+2; + else if (m == chip) col = kGreen+4; + if (col >= 0) { + v->SetLineColor(col); + v->SetFillColor(col); + } if (name[2] == 'M' && (name[3] == 'T' || name[3] == 'B')) { // Virtual Master half-ring volume - top-level Int_t det = node->GetNumber(); @@ -216,6 +286,10 @@ AliFMDDisplay::ShowOnlyFMD() } else if (name[3] == 'V' && (name[2] == 'T' || name[2] == 'B')) toshow.Add(v); // Virtual Half-ring, bare detectors + else if (name[3] == 'H' && (name[2] == 'F' || name[2] == 'B')) + toshow.Add(v); // Virtual Hybrid container + else if (name[2] == 'S' && name[3] == 'U') + toshow.Add(v); // Virtual support structre // else if (name[3] == 'H' && (name[2] == 'F' || name[2] == 'B')) // toshow.Add(v); // Virtual Hybrid container } @@ -225,9 +299,11 @@ AliFMDDisplay::ShowOnlyFMD() } TIter i(&toshow); while ((v = static_cast(i()))) { - v->SetVisibility(kTRUE); - v->SetVisDaughters(kTRUE); + if (!v->IsAssembly()) + v->SetVisibility(kTRUE); v->InvisibleAll(kFALSE); + v->SetVisDaughters(kTRUE); + } } @@ -321,27 +397,37 @@ AliFMDDisplay::MakeAux() // MAke the aux canvas // This is used to display spectra // etc, - if ((TESTBIT(fTreeMask, kESD) || - TESTBIT(fTreeMask, kDigits) || - TESTBIT(fTreeMask, kRaw))) { - if (!fAux) { - fAux = new TCanvas("aux", "Aux"); - fAux->SetLogy(); - if (TESTBIT(fTreeMask, kESD)) - fSpec = new TH1D("spec", "Mult spectra", 500, 0, 10); - else - fSpec = new TH1D("spec", "Adc spectra", 1024, -.5, 1023.5); - fSpecCut = static_cast(fSpec->Clone("specCut")); - fSpec->SetFillColor(2); - fSpec->SetFillStyle(3001); - fSpecCut->SetFillColor(4); - fSpecCut->SetFillStyle(3001); - } - else { - fSpec->Reset(); - fSpecCut->Reset(); - } + const Range_t* range = 0; + if (TESTBIT(fTreeMask, kESD)) range = &fgkMultRange; + else if (TESTBIT(fTreeMask, kDigits)) range = &fgkAdcRange; + else if (TESTBIT(fTreeMask, kSDigits)) range = &fgkAdcRange; + else if (TESTBIT(fTreeMask, kRaw)) range = &fgkAdcRange; + else if (TESTBIT(fTreeMask, kHits)) range = &fgkEdepRange; + if (!range) return; + + if (!fAux) { + fAux = new TCanvas("aux", "Aux"); + fAux->SetLogy(); + fAux->SetFillColor(kWhite); + fAux->SetBorderMode(0); + fAux->SetBorderSize(0); + Float_t dBin = (range->fHigh - range->fLow) / range->fNbins; + fSpec = new TH1D("spec", "Spectra", range->fNbins, + range->fLow-dBin/2, range->fHigh+dBin/2); + fSpecCut = static_cast(fSpec->Clone("specCut")); + fSpec->SetXTitle("signal"); + fSpec->SetYTitle("events"); + fSpec->SetFillColor(2); + fSpec->SetFillStyle(3001); + fSpecCut->SetXTitle("signal"); + fSpecCut->SetYTitle("events"); + fSpecCut->SetFillColor(4); + fSpecCut->SetFillStyle(3001); } + else { + fSpec->Reset(); + fSpecCut->Reset(); + } } //____________________________________________________________________ @@ -354,6 +440,7 @@ AliFMDDisplay::DrawAux() if (!fAux) return; fAux->cd(); fAux->Clear(); + fAux->SetLogy(fSpec->GetMaximum() > 10); fSpec->Draw(); fSpecCut->Draw("same"); fAux->Modified(); @@ -369,22 +456,29 @@ AliFMDDisplay::Begin(Int_t event) // Parameters: // event The event number if (!fCanvas) { - const char* m[] = { "Continue", "Zoom", "Pick", "Redisplay", 0 }; + const char* m[] = { "Continue", + "Break", + "Zoom", + "Pick", + "Redisplay", + "Render", + 0 }; MakeCanvas(m); } MakeAux(); - + fReturn = kFALSE; + // AliInfo("Clearing canvas"); // fCanvas->Clear(); if (!fGeoManager) { Warning("End", "No geometry manager"); return kFALSE; } - AliInfo("Drawing geometry"); + AliFMDDebug(1, ("Drawing geometry")); fPad->cd(); fGeoManager->GetTopVolume()->Draw(); if (fOnlyFMD) ShowOnlyFMD(); - AliInfo("Adjusting view"); + AliFMDDebug(1, ("Adjusting view")); Int_t irep; if (fPad->GetView()) { fPad->GetView()->SetView(-200, -40, 80, irep); @@ -418,15 +512,17 @@ AliFMDDisplay::Idle() // Sends the ROOT loop into the idle loop, // so that we can go on. fWait = kTRUE; + if (fContinous) fTimeout.Start(10, kTRUE); while (fWait) { gApplication->StartIdleing(); gSystem->InnerLoop(); gApplication->StopIdleing(); + if (fContinous) break; } - AliInfo("After idle loop"); + AliFMDDebug(1, ("After idle loop")); if (fMarkers) fMarkers->Delete(); if (fHits) fHits->Clear(); - AliInfo("After clearing caches"); + AliFMDDebug(1, ("After clearing caches")); } //____________________________________________________________________ @@ -436,18 +532,36 @@ AliFMDDisplay::End() // End of event. Draw everything AtEnd(); Idle(); + if (fReturn) return kFALSE; return AliFMDInput::End(); } //____________________________________________________________________ Int_t -AliFMDDisplay::LookupColor(Float_t x, Float_t max) const +AliFMDDisplay::LookupColor(Float_t x, Float_t min, Float_t max) const { // Look-up color. // Get a colour from the current palette depending // on the ratio x/max - Int_t idx = Int_t(x / max * gStyle->GetNumberOfColors()); + Float_t range = (max-min); + Float_t l = fSlider->GetMinimum(); + Float_t h = fSlider->GetMaximum(); + if (l == h) { l = 0; h = 1; } + Float_t cmin = range * l; + Float_t cmax = range * h; + Float_t crange = (cmax-cmin); + Int_t idx = Int_t((x-cmin) / crange * gStyle->GetNumberOfColors()); return gStyle->GetColorPalette(idx); +} + +//____________________________________________________________________ +void +AliFMDDisplay::SetCut(Float_t l, Float_t h) +{ + // Change the cut on the slider. + fSlider->SetMinimum(l); + fSlider->SetMaximum(h); + ChangeCut(); } //____________________________________________________________________ @@ -457,10 +571,30 @@ AliFMDDisplay::ChangeCut() // Change the cut on the slider. // The factor depends on what is // drawn in the AUX canvas - fMultCut = fSlider->GetMinimum() * 10; - fPedestalFactor = fSlider->GetMinimum() * 10; - AliInfo(Form("Multiplicity cut: %7.5f, Pedestal factor: %7.4f (%6.5f)", - fMultCut, fPedestalFactor, fSlider->GetMinimum())); + AliInfo(Form("Range is now %7.5f - %7.5f", fSlider->GetMinimum(), + fSlider->GetMaximum())); + if ((TESTBIT(fTreeMask, kESD) || + TESTBIT(fTreeMask, kDigits) || + TESTBIT(fTreeMask, kSDigits) || + TESTBIT(fTreeMask, kRaw))) { + Float_t l = fSlider->GetMinimum(); + Float_t h = fSlider->GetMaximum(); + l = 1024 * l + 0; + h = 1024 * h + 0; + AliInfo(Form("ADC range is now %4d - %4d", int(l), int(h))); + } + Redisplay(); +} +//____________________________________________________________________ +void +AliFMDDisplay::ChangeFactor() +{ + // Change the cut on the slider. + // The factor depends on what is + // drawn in the AUX canvas + AliInfo(Form("Noise factor is now %4.1f, pedestal factor %3.1f", + 10 * fFactor->GetMinimum(), + (fFactor->GetMaximum()-fFactor->GetMaximum()))); Redisplay(); } @@ -478,11 +612,33 @@ AliFMDDisplay::Redisplay() Event(); AtEnd(); } +//____________________________________________________________________ +void +AliFMDDisplay::Break() +{ + // Redisplay stuff. + // Redraw markers, hits, + // spectra + if (fMarkers) fMarkers->Delete(); + if (fHits) fHits->Clear(); + if (fSpec) fSpec->Reset(); + if (fSpecCut) fSpecCut->Reset(); + fReturn = kTRUE; + fWait = kFALSE; +} +//____________________________________________________________________ +void +AliFMDDisplay::Render() +{ + fPad->cd(); + TVirtualViewer3D* viewer = fPad->GetViewer3D("ogl"); + if (!viewer) return; +} //____________________________________________________________________ void -AliFMDDisplay::AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, - TObject* o, Float_t s, Float_t max) +AliFMDDisplay::AddMarker(Float_t x, Float_t y, Float_t z, + TObject* o, Float_t s, Float_t min, Float_t max) { // Add a marker to the display // @@ -494,21 +650,51 @@ AliFMDDisplay::AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, // s Signal // max Maximum of signal // - AliFMDGeometry* geom = AliFMDGeometry::Instance(); - Double_t x, y, z; - geom->Detector2XYZ(det, rng, sec, str, x, y, z); Float_t size = .1; - Float_t zsize = s / max * 10; + Float_t zsize = (s - min) / (max-min) * 10; Float_t r = TMath::Sqrt(x * x + y * y); Float_t theta = TMath::ATan2(r, z); Float_t phi = TMath::ATan2(y, x); Float_t rz = z + (z < 0 ? 1 : -1) * zsize; TMarker3DBox* marker = new TMarker3DBox(x,y,rz,size,size,zsize,theta,phi); if (o) marker->SetRefObject(o); - marker->SetLineColor(LookupColor(s, max)); + marker->SetLineColor(LookupColor(s, min, max)); fMarkers->Add(marker); } +//____________________________________________________________________ +void +AliFMDDisplay::AddMarker(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, + TObject* o, Float_t s, Float_t min, Float_t max) +{ + // Add a marker to the display + // + // det Detector + // rng Ring + // sec Sector + // str Strip + // o Object to refer to + // s Signal + // max Maximum of signal + // + AliFMDGeometry* geom = AliFMDGeometry::Instance(); + Double_t x, y, z; + geom->Detector2XYZ(det, rng, sec, str, x, y, z); + AddMarker(x,y,z,o,s,min,max); +} +//____________________________________________________________________ +Bool_t +AliFMDDisplay::InsideCut(Float_t val, const Float_t& min, + const Float_t& max) const +{ + Float_t r = max - min; + Float_t l = fSlider->GetMinimum(); + Float_t h = fSlider->GetMaximum(); + if (l == h) { l = 0; h = 1; } + if (val < r * l + min || val > r * h + min) return kFALSE; + return kTRUE; +} + //____________________________________________________________________ Bool_t @@ -517,21 +703,19 @@ AliFMDDisplay::ProcessHit(AliFMDHit* hit, TParticle* /* p */) // Process a hit. // Parameters: // hit Hit data + static const Float_t rMin = fgkEdepRange.fLow; + static const Float_t rMax = fgkEdepRange.fHigh; + if (!hit) { AliError("No hit"); return kFALSE; } // if (!p) { AliError("No track"); return kFALSE; } + Float_t edep = hit->Edep(); - if (fHits) fHits->Add(hit); - Float_t size = .1; - Float_t zsize = TMath::Sqrt(hit->Edep() * 20); - Float_t z = hit->Z() + (hit->Z() < 0 ? 1 : -1) * zsize; - Float_t pt = TMath::Sqrt(hit->Py()*hit->Py()+hit->Px()*hit->Px()); - Float_t theta = TMath::ATan2(pt, hit->Pz()); - Float_t phi = TMath::ATan2(hit->Py(), hit->Px()); - TMarker3DBox* marker = new TMarker3DBox(hit->X(), hit->Y(), z, - size, size, zsize, theta, phi); - marker->SetLineColor(LookupColor(hit->Edep(), 1)); - marker->SetRefObject(hit); - fMarkers->Add(marker); + if (fHits) fHits->Add(hit); + if (fSpec) fSpec->Fill(edep); + if (!InsideCut(edep, rMin, rMax)) return kTRUE; + if (fSpecCut) fSpecCut->Fill(edep); + + AddMarker(hit->X(), hit->Y(), hit->Z(), hit, edep, rMin, rMax); return kTRUE; } @@ -542,6 +726,9 @@ AliFMDDisplay::ProcessDigit(AliFMDDigit* digit) // Process a digit // Parameters: // digit Digit information + static const Float_t rMin = fgkAdcRange.fLow; + static const Float_t rMax = fgkAdcRange.fHigh; + if (!digit) { AliError("No digit"); return kFALSE; } AliFMDParameters* parm = AliFMDParameters::Instance(); @@ -551,28 +738,65 @@ AliFMDDisplay::ProcessDigit(AliFMDDigit* digit) UShort_t str = digit->Strip(); Double_t ped = parm->GetPedestal(det,ring, sec, str); Double_t pedW = parm->GetPedestalWidth(det,ring, sec, str); - Double_t threshold = ped + fPedestalFactor * pedW; + Double_t threshold = ((fFMDReader && fFMDReader->IsZeroSuppressed(det-1) + ? 0 : (ped * (fFactor->GetMaximum() + -fFactor->GetMinimum()))) + + pedW * 10 * fFactor->GetMinimum()); + if (threshold > fgkAdcRange.fHigh) threshold = fgkAdcRange.fHigh; Float_t counts = digit->Counts(); - AliFMDDebug(10, ("FMD%d%c[%2d,%3d] ADC: %d > %d (=%4.2f+%4.2f*%4.2f)", - digit->Detector(), digit->Ring(), digit->Sector(), - digit->Strip(), Int_t(counts), Int_t(threshold), - ped, fPedestalFactor, pedW)); - if (fSpec) fSpec->Fill(counts); - if (counts < threshold) return kTRUE; - if (fHits) fHits->Add(digit); - if (fSpecCut) fSpecCut->Fill(counts); - - AddMarker(det, ring, sec, str, digit, counts, 1024); + if (fFMDReader && fFMDReader->IsZeroSuppressed(det-1) && counts > 0) + counts += fFMDReader->NoiseFactor(det-1) * pedW; + + AliFMDDebug(10, ("FMD%d%c[%02d,%03d] counts %4d threshold %4d", + det, ring, sec, str, Int_t(counts), Int_t(threshold))); + if (fHits) fHits->Add(digit); + if (fSpec) fSpec->Fill(counts); + if (!InsideCut(counts-threshold, rMin, rMax)) return kTRUE; + if (fSpecCut) fSpecCut->Fill(counts); + + + AddMarker(det, ring, sec, str, digit, counts, rMin, rMax); return kTRUE; } //____________________________________________________________________ Bool_t -AliFMDDisplay::ProcessRaw(AliFMDDigit* digit) +AliFMDDisplay::ProcessSDigit(AliFMDSDigit* sdigit) +{ + // Process a sdigit + // Parameters: + // sdigit Digit information + static const Float_t rMin = fgkAdcRange.fLow; + static const Float_t rMax = fgkAdcRange.fHigh; + + if (!sdigit) { AliError("No sdigit"); return kFALSE; } + + UShort_t det = sdigit->Detector(); + Char_t ring = sdigit->Ring(); + UShort_t sec = sdigit->Sector(); + UShort_t str = sdigit->Strip(); + Float_t counts = sdigit->Counts(); + + if (fHits) fHits->Add(sdigit); + if (fSpec) fSpec->Fill(counts); + if (!InsideCut(counts, rMin, rMax)) return kTRUE; + if (fSpecCut) fSpecCut->Fill(counts); + + AddMarker(det, ring, sec, str, sdigit, counts, rMin, rMax); + return kTRUE; +} + +//____________________________________________________________________ +Bool_t +AliFMDDisplay::ProcessRawDigit(AliFMDDigit* digit) { // PRocess raw data // Parameters: // digit Digit information + AliFMDDebug(50, ("Forwarding call of ProcessRaw to ProcessDigit " + "for FMD%d&c[%02d,%03d] %d", + digit->Detector(), digit->Ring(), digit->Sector(), + digit->Strip(), digit->Counts())); return ProcessDigit(digit); } @@ -583,11 +807,17 @@ AliFMDDisplay::ProcessRecPoint(AliFMDRecPoint* recpoint) // Process reconstructed point // Parameters: // recpoint Reconstructed multiplicity/energy + static const Float_t rMin = fgkMultRange.fLow; + static const Float_t rMax = fgkMultRange.fHigh; + + if (!recpoint) { AliError("No recpoint"); return kFALSE; } - if (recpoint->Particles() < fMultCut) return kTRUE; + + if (!InsideCut(recpoint->Particles(), rMin, rMax)) return kTRUE; + if (fHits) fHits->Add(recpoint); AddMarker(recpoint->Detector(), recpoint->Ring(), recpoint->Sector(), - recpoint->Strip(), recpoint, recpoint->Particles(), 20); + recpoint->Strip(), recpoint, recpoint->Particles(), rMin, rMax); return kTRUE; } @@ -600,11 +830,18 @@ AliFMDDisplay::ProcessESD(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, // Parameters // det,rng,sec,str Detector coordinates. // mult Multiplicity. + static const Float_t rMin = fgkMultRange.fLow; + static const Float_t rMax = fgkMultRange.fHigh; + Double_t cmult = mult; if (fSpec) fSpec->Fill(cmult); - if (cmult < fMultCut || cmult == AliESDFMD::kInvalidMult) return kTRUE; - AddMarker(det,rng,sec,str, 0, cmult, 20); + if (!InsideCut(cmult, rMin, rMax) || cmult == AliESDFMD::kInvalidMult) + return kTRUE; + + AddMarker(det,rng,sec,str, 0, cmult, rMin, rMax); + if (fSpecCut) fSpecCut->Fill(cmult); + return kTRUE; }