ROOT logo
//____________________________________________________________________
//
// $Id: DrawHitsSDigits.C 20907 2007-09-25 08:44:03Z cholm $
//
// Script that contains a class to draw eloss from hits, versus ADC
// counts from sdigits, 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 <AliFMDSDigit.h>
#include <AliFMDInput.h>
#include <AliFMDEdepMap.h>
#include <iostream>
#include <TStyle.h>
#include <TArrayF.h>
#include <AliLog.h>
#include <TMath.h>

/** @class DrawHitsSDigits
    @brief Draw hit energy loss versus sdigit ADC
    @code 
    Root> .L Compile.C
    Root> Compile("DrawHitsSDigits.C")
    Root> DrawHitsSDigits c
    Root> c.Run();
    @endcode
    @ingroup FMD_script
 */
class DrawHitsSDigits : public AliFMDInput
{
private:
  TH2D* fElossVsAdc; // Histogram 
  AliFMDEdepMap fMap;
public:
  //__________________________________________________________________
  DrawHitsSDigits(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(kSDigits);
    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 ProcessSDigit(AliFMDSDigit* sdigit)
  {
    Info("ProcessSDigit", "Processing sdigit %p", sdigit);
    if (!sdigit) return kFALSE;
    UShort_t det = sdigit->Detector();
    Char_t   rng = sdigit->Ring();
    UShort_t sec = sdigit->Sector();
    UShort_t str = sdigit->Strip();
    if (str > 511) {
      AliWarning(Form("Bad strip number %d in sdigit", str));
      return kFALSE;
    }
    fElossVsAdc->Fill(fMap(det, rng, sec, str).fEdep, sdigit->Counts());
    sdigit->Print();
    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(DrawHitsSDigits,0);
};

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