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 <AliFMDUShortMap.h>
#include <AliFMDFloatMap.h>
#include <AliFMDRecPoint.h>
#include <AliESDFMD.h>
#include <AliLog.h>
#include <iostream>
#include <TStyle.h>
#include <TArrayF.h>
#include <TCanvas.h>

/** @class DrawDigitsRecs
    @brief Draw digit ADC versus Rec point mult
    @code 
    Root> .L Compile.C
    Root> Compile("DrawDigitsRecs.C")
    Root> DrawDigitsRecs c
    Root> c.Run();
    @endcode
    @ingroup FMD_script
 */
class DrawDigitsRecs : public AliFMDInput
{
private:
  TH2D* fAdcVsSingle; // Histogram 
  AliFMDUShortMap fMap;
public:
  //__________________________________________________________________
  DrawDigitsRecs(Int_t m=1100, Double_t amin=-0.5, Double_t amax=1099.5,
		 Int_t n=105, Double_t mmin=-0.5, Double_t mmax=20.5) 
  { 
    AddLoad(kDigits);
    AddLoad(kRecPoints);
    fAdcVsSingle = new TH2D("adcVsSingle", "ADC vs. Multiplicity (strip)", 
			    m, amin, amax, n, mmin, mmax);
    fAdcVsSingle->Sumw2();
    fAdcVsSingle->SetXTitle("ADC value");
    fAdcVsSingle->SetYTitle("Strip Multiplicity");
  }
  //__________________________________________________________________
  /** 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 ProcessDigit(AliFMDDigit* digit) 
  {
    // Cache the energy loss 
    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 kTRUE;
    }
    fMap(det, rng, sec, str) = digit->Counts();
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t ProcessRecPoint(AliFMDRecPoint* single)
  {
    if (!single) return kFALSE;
    UShort_t det = single->Detector();
    Char_t   rng = single->Ring();
    UShort_t sec = single->Sector();
    UShort_t str = single->Strip();
    if (str > 511) {
      AliWarning(Form("Bad strip number %d in single", str));
      return kFALSE;
    }
    fAdcVsSingle->Fill(fMap(det, rng, sec, str), single->Particles());
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t Finish()
  {
    gStyle->SetPalette(1);
    gStyle->SetOptTitle(0);
    gStyle->SetCanvasColor(0);
    gStyle->SetCanvasBorderSize(0);
    gStyle->SetPadColor(0);
    gStyle->SetPadBorderSize(0);
    gStyle->SetOptLogz(kTRUE);
    fAdcVsSingle->SetStats(0);
    fAdcVsSingle->Draw("COLZ");
    return kTRUE;
  }

  ClassDef(DrawDigitsRecs,0);
  
};

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