ROOT logo
//____________________________________________________________________
//
// $Id: DrawBothDigits.C 20907 2007-09-25 08:44:03Z cholm $
//
// 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 <TH2F.h>
#include <AliFMDDigit.h>
#include <AliFMDSDigit.h>
#include <AliFMDInput.h>
#include <AliFMDEdepMap.h>
#include <iostream>
#include <TStyle.h>
#include <TArrayF.h>
#include <AliLog.h>

/** @class DrawBothDigits
    @brief Draw hit energy loss versus digit ADC
    @code 
    Root> .L Compile.C
    Root> Compile("DrawBothDigits.C")
    Root> DrawBothDigits c
    Root> c.Run();
    @endcode
    @ingroup FMD_script
 */
class DrawBothDigits : public AliFMDInput
{
private:
  TH2F* fTrackNos; // Histogram 
  AliFMDEdepMap fCache;
public:
  //__________________________________________________________________
  DrawBothDigits(Int_t max=300) 
    : AliFMDInput("galice.root")
  { 
    AddLoad(kDigits);
    AddLoad(kSDigits);
    fTrackNos = new TH2F("trackNos", "Track numbers", 
			 max+1, -1.5, max-.5, max+1, -1.5, max-.5);
    fTrackNos->SetXTitle("Digit track");
    fTrackNos->SetYTitle("SDigit track");
  }
  //__________________________________________________________________
  Bool_t Begin(Int_t evno)
  {
    fCache.Reset();
    return AliFMDInput::Begin(evno);
  }
  //__________________________________________________________________
  Bool_t ProcessSDigit(AliFMDSDigit* sdigit)
  {
    if (!sdigit) return kTRUE;
    AliFMDEdepHitPair& entry = fCache(sdigit->Detector(), 
				      sdigit->Ring(), 
				      sdigit->Sector(), 
				      sdigit->Strip());
    entry.fLabels.Set(sdigit->GetNTrack());
    Info("ProcessSDigit", "Got %d SDigit tracks", sdigit->GetNTrack());
    for (size_t i = 0; i < sdigit->GetNTrack(); i++) 
      entry.fLabels.fArray[i] = sdigit->GetTrack(i);
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t ProcessDigit(AliFMDDigit* digit)
  {
    if (!digit) return kTRUE;
    AliFMDEdepHitPair& entry = fCache(digit->Detector(), 
				      digit->Ring(), 
				      digit->Sector(), 
				      digit->Strip());
    TArrayI& stracks = entry.fLabels;
    Info("ProcessDigit", "Got %d SDigit tracks, and %d Digit tracks", 
	 stracks.fN, digit->GetNTrack());
    for (Int_t i = 0; (i < stracks.fN || i < digit->GetNTrack()); i++) { 
      Int_t strack = (i < stracks.fN ? stracks.fArray[i] : -1);
      Int_t dtrack = (i < digit->GetNTrack() ? digit->GetTrack(i) : -1);
      fTrackNos->Fill(strack, dtrack);
    }
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t Finish()
  {
    gStyle->SetPalette(1);
    gStyle->SetOptTitle(0);
    gStyle->SetCanvasColor(0);
    gStyle->SetCanvasBorderSize(0);
    gStyle->SetPadColor(0);
    gStyle->SetPadBorderSize(0);
    fTrackNos->SetStats(kFALSE);
    // fTrackNos->Scale(1. / fAdc->GetEntries());
    fTrackNos->Draw("colz");
    return kTRUE;
  }

  ClassDef(DrawBothDigits,0);
};

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