ROOT logo
//____________________________________________________________________
//
// $Id$
//
// Script that contains a class to compare the raw data written to the
// digits it's created from.
//
// Use the script `Compile.C' to compile this class using ACLic. 
//
#include <AliLog.h>
#include <AliFMDHit.h>
#include <AliFMDDigit.h>
#include <AliFMDInput.h>
#include <AliFMDUShortMap.h>
#include <AliFMDParameters.h>
#include <AliFMDGeometry.h>
#include <AliFMDRing.h>
#include <AliFMDDetector.h>
#include <iostream>
#include <TH3D.h>
#include <TStyle.h>
#include <TArrayF.h>
#include <TParticle.h>
#include <TCanvas.h>

/** @class CheckAlign
    @brief Check alignment 
    @code 
    Root> .L Compile.C
    Root> Compile("CheckAlign.C")
    Root> CheckAlign c
    Root> c.Run();
    @endcode
    @ingroup FMD_script
 */
class CheckAlign : public AliFMDInput
{
public:
  CheckAlign()
  {
    AddLoad(kHits);
    AddLoad(kDigits);
    AddLoad(kGeometry);
    AliFMDGeometry* geom = AliFMDGeometry::Instance();
    geom->Init();
    // geom->InitTransformations();
    Double_t iR  = geom->GetRing('I')->GetHighR()+5;
    Double_t oR  = geom->GetRing('O')->GetHighR()+5;
    Double_t z1l = geom->GetDetector(1)->GetInnerZ()-5;
    Double_t z1h = z1l+10;
    Double_t z2l = geom->GetDetector(2)->GetOuterZ()-5;
    Double_t z2h = geom->GetDetector(2)->GetInnerZ()+5;
    Double_t z3l = geom->GetDetector(3)->GetOuterZ()-5;
    Double_t z3h = geom->GetDetector(3)->GetInnerZ()+5;
    
    f1Hits   = new TH3D("hits1", "FMD1 hits", 
			300,-iR,iR,300,-iR,iR,100,z1l,z1h);
    f1Hits->SetMarkerColor(2);
    f1Hits->SetMarkerStyle(3);
      
    f2Hits   = new TH3D("hits2", "FMD2 hits", 
			300,-oR,oR,300,-oR,oR,100,z2l,z2h);
    f2Hits->SetMarkerColor(2);
    f2Hits->SetMarkerStyle(3);

    f3Hits   = new TH3D("hits3", "FMD3 hits", 
			300,-oR,oR,300,-oR,oR,100,z3l,z3h);
    f3Hits->SetMarkerColor(2);
    f3Hits->SetMarkerStyle(3);

    f1Digits = new TH3D("digits1", "FMD1 digits", 
			300,-iR,iR,300,-iR,iR,100,z1l,z1h); 
    f1Digits->SetMarkerColor(4);
    f1Digits->SetMarkerStyle(2);

    f2Digits = new TH3D("digits2", "FMD2 digits", 
			300,-oR,oR,300,-oR,oR,100,z2l,z2h);
    f2Digits->SetMarkerColor(4);
    f2Digits->SetMarkerStyle(2);

    f3Digits = new TH3D("digits3", "FMD3 hits", 
			300,-oR,oR,300,-oR,oR,100,z3l,z3h);
    f3Digits->SetMarkerColor(4);
    f3Digits->SetMarkerStyle(2);
  }
  Bool_t Init() 
  {
    Bool_t ret = AliFMDInput::Init();
    AliFMDGeometry* geom = AliFMDGeometry::Instance();
    geom->Init();
    geom->InitTransformations();
    AliFMDParameters* param = AliFMDParameters::Instance();
    param->Init();
    return ret;
  }
  
  Bool_t ProcessHit(AliFMDHit* hit, TParticle*)
  {
    // Cache the energy loss 
    if (!hit) return kFALSE;
    UShort_t det = hit->Detector();
    UShort_t str = hit->Strip();
    if (str > 511) {
      AliWarning(Form("Bad strip number %d in hit", str));
      return kTRUE;
    }
    switch (det) {
    case 1: f1Hits->Fill(hit->X(), hit->Y(), hit->Z()); break;
    case 2: f2Hits->Fill(hit->X(), hit->Y(), hit->Z()); break;
    case 3: f3Hits->Fill(hit->X(), hit->Y(), hit->Z()); break;
    }
    return kTRUE;
  }
  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;
    }
    AliFMDParameters* param = AliFMDParameters::Instance();
    if (digit->Counts() < (param->GetPedestal(det, rng, sec, str) + 4 *
			   param->GetPedestalWidth(det, rng, sec, str)))
      return kTRUE;
    AliFMDGeometry* geom = AliFMDGeometry::Instance();
    Double_t x, y, z;
    geom->Detector2XYZ(det, rng, sec, str, x, y, z);
    switch (det) {
    case 1: f1Digits->Fill(x, y , z); break;
    case 2: f2Digits->Fill(x, y , z); break;
    case 3: f3Digits->Fill(x, y , z); break;
    }
    return kTRUE;
  }
  //__________________________________________________________________
  Bool_t Finish()
  {
    gStyle->SetPalette(1);
    gStyle->SetOptTitle(0);
    gStyle->SetCanvasColor(0);
    gStyle->SetCanvasBorderSize(0);
    gStyle->SetPadColor(0);
    gStyle->SetPadBorderSize(0);

    TCanvas* c1 = new TCanvas("FMD1","FMD1");
    c1->cd();
    f1Hits->Draw();
    f1Digits->Draw("same");

    TCanvas* c2 = new TCanvas("FMD2","FMD2");
    c2->cd();
    f2Hits->Draw();
    f2Digits->Draw("same");

    TCanvas* c3 = new TCanvas("FMD3","FMD3");
    c3->cd();
    f3Hits->Draw();
    f3Digits->Draw("same");
    return kTRUE;
  }
protected:
  TH3D* f1Hits;
  TH3D* f2Hits;
  TH3D* f3Hits;
  TH3D* f1Digits;
  TH3D* f2Digits;
  TH3D* f3Digits;
};


//____________________________________________________________________
//
// EOF
//


  
  
 CheckAlign.C:1
 CheckAlign.C:2
 CheckAlign.C:3
 CheckAlign.C:4
 CheckAlign.C:5
 CheckAlign.C:6
 CheckAlign.C:7
 CheckAlign.C:8
 CheckAlign.C:9
 CheckAlign.C:10
 CheckAlign.C:11
 CheckAlign.C:12
 CheckAlign.C:13
 CheckAlign.C:14
 CheckAlign.C:15
 CheckAlign.C:16
 CheckAlign.C:17
 CheckAlign.C:18
 CheckAlign.C:19
 CheckAlign.C:20
 CheckAlign.C:21
 CheckAlign.C:22
 CheckAlign.C:23
 CheckAlign.C:24
 CheckAlign.C:25
 CheckAlign.C:26
 CheckAlign.C:27
 CheckAlign.C:28
 CheckAlign.C:29
 CheckAlign.C:30
 CheckAlign.C:31
 CheckAlign.C:32
 CheckAlign.C:33
 CheckAlign.C:34
 CheckAlign.C:35
 CheckAlign.C:36
 CheckAlign.C:37
 CheckAlign.C:38
 CheckAlign.C:39
 CheckAlign.C:40
 CheckAlign.C:41
 CheckAlign.C:42
 CheckAlign.C:43
 CheckAlign.C:44
 CheckAlign.C:45
 CheckAlign.C:46
 CheckAlign.C:47
 CheckAlign.C:48
 CheckAlign.C:49
 CheckAlign.C:50
 CheckAlign.C:51
 CheckAlign.C:52
 CheckAlign.C:53
 CheckAlign.C:54
 CheckAlign.C:55
 CheckAlign.C:56
 CheckAlign.C:57
 CheckAlign.C:58
 CheckAlign.C:59
 CheckAlign.C:60
 CheckAlign.C:61
 CheckAlign.C:62
 CheckAlign.C:63
 CheckAlign.C:64
 CheckAlign.C:65
 CheckAlign.C:66
 CheckAlign.C:67
 CheckAlign.C:68
 CheckAlign.C:69
 CheckAlign.C:70
 CheckAlign.C:71
 CheckAlign.C:72
 CheckAlign.C:73
 CheckAlign.C:74
 CheckAlign.C:75
 CheckAlign.C:76
 CheckAlign.C:77
 CheckAlign.C:78
 CheckAlign.C:79
 CheckAlign.C:80
 CheckAlign.C:81
 CheckAlign.C:82
 CheckAlign.C:83
 CheckAlign.C:84
 CheckAlign.C:85
 CheckAlign.C:86
 CheckAlign.C:87
 CheckAlign.C:88
 CheckAlign.C:89
 CheckAlign.C:90
 CheckAlign.C:91
 CheckAlign.C:92
 CheckAlign.C:93
 CheckAlign.C:94
 CheckAlign.C:95
 CheckAlign.C:96
 CheckAlign.C:97
 CheckAlign.C:98
 CheckAlign.C:99
 CheckAlign.C:100
 CheckAlign.C:101
 CheckAlign.C:102
 CheckAlign.C:103
 CheckAlign.C:104
 CheckAlign.C:105
 CheckAlign.C:106
 CheckAlign.C:107
 CheckAlign.C:108
 CheckAlign.C:109
 CheckAlign.C:110
 CheckAlign.C:111
 CheckAlign.C:112
 CheckAlign.C:113
 CheckAlign.C:114
 CheckAlign.C:115
 CheckAlign.C:116
 CheckAlign.C:117
 CheckAlign.C:118
 CheckAlign.C:119
 CheckAlign.C:120
 CheckAlign.C:121
 CheckAlign.C:122
 CheckAlign.C:123
 CheckAlign.C:124
 CheckAlign.C:125
 CheckAlign.C:126
 CheckAlign.C:127
 CheckAlign.C:128
 CheckAlign.C:129
 CheckAlign.C:130
 CheckAlign.C:131
 CheckAlign.C:132
 CheckAlign.C:133
 CheckAlign.C:134
 CheckAlign.C:135
 CheckAlign.C:136
 CheckAlign.C:137
 CheckAlign.C:138
 CheckAlign.C:139
 CheckAlign.C:140
 CheckAlign.C:141
 CheckAlign.C:142
 CheckAlign.C:143
 CheckAlign.C:144
 CheckAlign.C:145
 CheckAlign.C:146
 CheckAlign.C:147
 CheckAlign.C:148
 CheckAlign.C:149
 CheckAlign.C:150
 CheckAlign.C:151
 CheckAlign.C:152
 CheckAlign.C:153
 CheckAlign.C:154
 CheckAlign.C:155
 CheckAlign.C:156
 CheckAlign.C:157
 CheckAlign.C:158
 CheckAlign.C:159
 CheckAlign.C:160
 CheckAlign.C:161
 CheckAlign.C:162
 CheckAlign.C:163
 CheckAlign.C:164
 CheckAlign.C:165
 CheckAlign.C:166
 CheckAlign.C:167
 CheckAlign.C:168
 CheckAlign.C:169
 CheckAlign.C:170
 CheckAlign.C:171
 CheckAlign.C:172
 CheckAlign.C:173
 CheckAlign.C:174
 CheckAlign.C:175
 CheckAlign.C:176
 CheckAlign.C:177
 CheckAlign.C:178
 CheckAlign.C:179
 CheckAlign.C:180
 CheckAlign.C:181
 CheckAlign.C:182
 CheckAlign.C:183
 CheckAlign.C:184