ROOT logo
//____________________________________________________________________
//
// $Id$
//
// Script that contains a class to draw eloss from hits, versus ADC
// counts from digits, using the AliFMDInputHits class in the util library. 
//
// It draws the energy loss versus the p/(mq^2).  It can be overlayed
// with the Bethe-Bloc curve to show how the simulation behaves
// relative to the expected. 
//
// Use the script `Compile.C' to compile this class using ACLic. 
//
#include <TH2D.h>
#include <AliFMDHit.h>
#include <AliFMDDigit.h>
#include <AliFMDInput.h>
#include <AliFMDEdepMap.h>
#include <iostream>
#include <TStyle.h>
#include <TArrayF.h>
#include <AliLog.h>
#include <TMath.h>

/** @class DrawHitsDigits
    @brief Draw hit energy loss versus digit ADC
    @code 
    Root> .L Compile.C
    Root> Compile("DrawHitsDigits.C")
    Root> DrawHitsDigits c
    Root> c.Run();
    @endcode
    @ingroup FMD_script
 */
class DrawHitsDigits : public AliFMDInput
{
private:
  TH2D* fElossVsAdc; // Histogram 
  AliFMDEdepMap fMap;
public:
  //__________________________________________________________________
  DrawHitsDigits(Int_t n=900, Double_t emin=1e-3, Double_t emax=10, 
		 Int_t m=1100, Double_t amin=-0.5, Double_t amax=1099.5) 
  { 
    AddLoad(kDigits);
    AddLoad(kHits);
    TArrayF eloss(MakeLogScale(n, emin, emax));
    TArrayF adcs(m+1);
    adcs[0] = amin;
    for (Int_t i = 1; i < m+1; i++) adcs[i] = adcs[i-1] + (amax-amin)/m;
    fElossVsAdc = new TH2D("bad", "#Delta E vs. ADC", 
			   eloss.fN-1, eloss.fArray, adcs.fN-1, adcs.fArray);
    fElossVsAdc->SetXTitle("#Delta E/#Delta x [MeV/cm]");
    fElossVsAdc->SetYTitle("ADC value");
  }
  //__________________________________________________________________
  /** Begining of event
      @param ev Event number
      @return @c false on error */
  Bool_t Begin(Int_t ev) 
  {
    fMap.Reset();
    return AliFMDInput::Begin(ev);
  }
  //__________________________________________________________________
  Bool_t ProcessHit(AliFMDHit* hit, TParticle*) 
  {
    // Info("ProcessHit", "Processing hit %p", hit);
    // Cache the energy loss 
    if (!hit) return kFALSE;
    UShort_t det = hit->Detector();
    Char_t   rng = hit->Ring();
    UShort_t sec = hit->Sector();
    UShort_t str = hit->Strip();
    if (str > 511) {
      AliWarning(Form("Bad strip number %d in hit", str));
      return kTRUE;
    }
    fMap(det, rng, sec, str).fEdep += hit->Edep();
    fMap(det, rng, sec, str).fN++;
    // hit->Print();
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t ProcessDigit(AliFMDDigit* digit)
  {
    // Info("ProcessDigit", "Processing digit %p", digit);
    if (!digit) return kFALSE;
    UShort_t det = digit->Detector();
    Char_t   rng = digit->Ring();
    UShort_t sec = digit->Sector();
    UShort_t str = digit->Strip();
    if (str > 511) {
      AliWarning(Form("Bad strip number %d in digit", str));
      return kFALSE;
    }
    fElossVsAdc->Fill(fMap(det, rng, sec, str).fEdep, digit->Counts());
    if (fMap(det, rng, sec, str).fEdep > 0) 
      Info("ProcessDigit", "FMD%d%c[%2d,%3d] Edep=%8.5f -> ADC=0x%03x",
	   det, rng, sec, str, 
	   fMap(det, rng, sec, str).fEdep, digit->Counts());
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t Finish()
  {
    gStyle->SetPalette(1);
    gStyle->SetOptTitle(0);
    gStyle->SetCanvasColor(0);
    gStyle->SetCanvasBorderSize(0);
    gStyle->SetPadColor(0);
    gStyle->SetPadBorderSize(0);
    fElossVsAdc->SetStats(kFALSE);
    fElossVsAdc->Draw("COLZ");
    return kTRUE;
  }

  ClassDef(DrawHitsDigits,0);
};

//____________________________________________________________________
//
// EOF
//
 DrawHitsDigits.C:1
 DrawHitsDigits.C:2
 DrawHitsDigits.C:3
 DrawHitsDigits.C:4
 DrawHitsDigits.C:5
 DrawHitsDigits.C:6
 DrawHitsDigits.C:7
 DrawHitsDigits.C:8
 DrawHitsDigits.C:9
 DrawHitsDigits.C:10
 DrawHitsDigits.C:11
 DrawHitsDigits.C:12
 DrawHitsDigits.C:13
 DrawHitsDigits.C:14
 DrawHitsDigits.C:15
 DrawHitsDigits.C:16
 DrawHitsDigits.C:17
 DrawHitsDigits.C:18
 DrawHitsDigits.C:19
 DrawHitsDigits.C:20
 DrawHitsDigits.C:21
 DrawHitsDigits.C:22
 DrawHitsDigits.C:23
 DrawHitsDigits.C:24
 DrawHitsDigits.C:25
 DrawHitsDigits.C:26
 DrawHitsDigits.C:27
 DrawHitsDigits.C:28
 DrawHitsDigits.C:29
 DrawHitsDigits.C:30
 DrawHitsDigits.C:31
 DrawHitsDigits.C:32
 DrawHitsDigits.C:33
 DrawHitsDigits.C:34
 DrawHitsDigits.C:35
 DrawHitsDigits.C:36
 DrawHitsDigits.C:37
 DrawHitsDigits.C:38
 DrawHitsDigits.C:39
 DrawHitsDigits.C:40
 DrawHitsDigits.C:41
 DrawHitsDigits.C:42
 DrawHitsDigits.C:43
 DrawHitsDigits.C:44
 DrawHitsDigits.C:45
 DrawHitsDigits.C:46
 DrawHitsDigits.C:47
 DrawHitsDigits.C:48
 DrawHitsDigits.C:49
 DrawHitsDigits.C:50
 DrawHitsDigits.C:51
 DrawHitsDigits.C:52
 DrawHitsDigits.C:53
 DrawHitsDigits.C:54
 DrawHitsDigits.C:55
 DrawHitsDigits.C:56
 DrawHitsDigits.C:57
 DrawHitsDigits.C:58
 DrawHitsDigits.C:59
 DrawHitsDigits.C:60
 DrawHitsDigits.C:61
 DrawHitsDigits.C:62
 DrawHitsDigits.C:63
 DrawHitsDigits.C:64
 DrawHitsDigits.C:65
 DrawHitsDigits.C:66
 DrawHitsDigits.C:67
 DrawHitsDigits.C:68
 DrawHitsDigits.C:69
 DrawHitsDigits.C:70
 DrawHitsDigits.C:71
 DrawHitsDigits.C:72
 DrawHitsDigits.C:73
 DrawHitsDigits.C:74
 DrawHitsDigits.C:75
 DrawHitsDigits.C:76
 DrawHitsDigits.C:77
 DrawHitsDigits.C:78
 DrawHitsDigits.C:79
 DrawHitsDigits.C:80
 DrawHitsDigits.C:81
 DrawHitsDigits.C:82
 DrawHitsDigits.C:83
 DrawHitsDigits.C:84
 DrawHitsDigits.C:85
 DrawHitsDigits.C:86
 DrawHitsDigits.C:87
 DrawHitsDigits.C:88
 DrawHitsDigits.C:89
 DrawHitsDigits.C:90
 DrawHitsDigits.C:91
 DrawHitsDigits.C:92
 DrawHitsDigits.C:93
 DrawHitsDigits.C:94
 DrawHitsDigits.C:95
 DrawHitsDigits.C:96
 DrawHitsDigits.C:97
 DrawHitsDigits.C:98
 DrawHitsDigits.C:99
 DrawHitsDigits.C:100
 DrawHitsDigits.C:101
 DrawHitsDigits.C:102
 DrawHitsDigits.C:103
 DrawHitsDigits.C:104
 DrawHitsDigits.C:105
 DrawHitsDigits.C:106
 DrawHitsDigits.C:107
 DrawHitsDigits.C:108
 DrawHitsDigits.C:109
 DrawHitsDigits.C:110
 DrawHitsDigits.C:111
 DrawHitsDigits.C:112
 DrawHitsDigits.C:113
 DrawHitsDigits.C:114
 DrawHitsDigits.C:115
 DrawHitsDigits.C:116
 DrawHitsDigits.C:117
 DrawHitsDigits.C:118
 DrawHitsDigits.C:119
 DrawHitsDigits.C:120
 DrawHitsDigits.C:121
 DrawHitsDigits.C:122
 DrawHitsDigits.C:123
 DrawHitsDigits.C:124
 DrawHitsDigits.C:125