New version compatible with the current HEAD
[u/mrichter/AliRoot.git] / ITS / ITSHitsToDigitsBari.C
CommitLineData
88c93889 1#include "iostream.h"
2
3void ITSHitsToDigitsBari (Int_t evNumber1=0,Int_t evNumber2=0,Int_t nsignal =25, Int_t size=-1)
4{
5/////////////////////////////////////////////////////////////////////////
6// This macro is a small example of a ROOT macro
7// illustrating how to read the output of GALICE
8// and do some analysis.
9//
10/////////////////////////////////////////////////////////////////////////
11
12// Dynamically link some shared libs
13
14 if (gClassTable->GetID("AliRun") < 0) {
15 gROOT->LoadMacro("loadlibs.C");
16 loadlibs();
17 } else {
18 delete gAlice;
19 gAlice=0;
20 }
21
22
23// Connect the Root Galice file containing Geometry, Kine and Hits
24
25 TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject("galice.root");
26 printf("file %p\n",file);
27 if (file) file->Close();
28 if (!file) file = new TFile("galice.root","UPDATE");
29 file->ls();
30
31 printf ("I'm after Map \n");
32
33// Get AliRun object from file or create it if not on file
34
35 if (!gAlice) {
36 gAlice = (AliRun*)file->Get("gAlice");
37 if (gAlice) printf("AliRun object found on file\n");
38 if (!gAlice) gAlice = new AliRun("gAlice","Alice test program");
39 }
40 printf ("I'm after gAlice \n");
41
42 AliITS *ITS = (AliITS*) gAlice->GetModule("ITS");
43 if (!ITS) return;
44
45
46 // Set the simulation models
47
48 AliITSgeom *geom = ITS->GetITSgeom();
49
50 // SDD
51 // SDD compression param: 2 fDecrease, 2fTmin, 2fTmax or disable, 2 fTolerance
88c93889 52
53 AliITSDetType *iDetType=ITS->DetType(1);
54 AliITSresponseSDD *res1 = (AliITSresponseSDD*)iDetType->GetResponseModel();
55 if (!res1) {
56 res1=new AliITSresponseSDD();
57 ITS->SetResponseModel(1,res1);
58 }
88c93889 59
426edb57 60
0b210f54 61 //res1->SetChargeLoss(0.);
62 Float_t baseline;
63 Float_t noise;
64 res1->GetNoiseParam(noise,baseline);
65 Float_t noise_after_el = res1->GetNoiseAfterElectronics();
426edb57 66 cout << "noise_after_el: " << noise_after_el << endl;
0b210f54 67 Float_t fCutAmp;
68 fCutAmp = baseline;
69 fCutAmp += (2.*noise_after_el); // noise
70 cout << "Cut amplitude: " << fCutAmp << endl;
71 Int_t cp[8]={0,0,fCutAmp,fCutAmp,0,0,0,0};
72 res1->SetCompressParam(cp);
73 // res1->SetElectronics(2); // 1 = Pascal, 2 = OLA
88c93889 74
0b210f54 75 res1->Print();
88c93889 76
0b210f54 77 //cout << "SDD segmentation" << endl;
88c93889 78
79 AliITSsegmentationSDD *seg1=(AliITSsegmentationSDD*)iDetType->GetSegmentationModel();
80 if (!seg1) {
81 seg1 = new AliITSsegmentationSDD(geom,res1);
82 ITS->SetSegmentationModel(1,seg1);
83 }
0b210f54 84 seg1->Print();
88c93889 85
0b210f54 86 //cout << "SDD segmentation" << endl;
88c93889 87 AliITSsimulationSDD *sim1=new AliITSsimulationSDD(seg1,res1);
88c93889 88 ITS->SetSimulationModel(1,sim1);
0b210f54 89 sim1->Print();
426edb57 90
88c93889 91
92 // SPD
93
94 AliITSDetType *iDetType=ITS->DetType(0);
95 AliITSsegmentationSPD *seg0=(AliITSsegmentationSPD*)iDetType->GetSegmentationModel();
426edb57 96 //AliITSresponseSPDbari *res0 = (AliITSresponseSPDbari*)iDetType->GetResponseModel();
97 AliITSresponseSPDbari *res0= new AliITSresponseSPDbari();
98 ITS->SetResponseModel(0,res0);
99
100// to change the parameters
101 //res0->SetThresholds(7.2e-6, 1.e-6);
102 //res0->SetNoiseParam(0., 0.);
103 //res0->SetNoiseParam(0.04, 0.08);
104
105// to monitor the parameters
106 Float_t thresh, sigma;
107 res0->Thresholds(thresh, sigma);
108 printf("SPDbari: threshold %e sigma %e\n",thresh, sigma);
109 Float_t col, row;
110 res0->GetNoiseParam(col, row);
111 printf("SPDbari: Coupling by column %e Coupling by row %e\n",col, row);
112
88c93889 113 AliITSsimulationSPDbari *sim0=new AliITSsimulationSPDbari(seg0,res0);
114 ITS->SetSimulationModel(0,sim0);
88c93889 115
116 // SSD
117
118 AliITSDetType *iDetType=ITS->DetType(2);
119 AliITSsegmentationSSD *seg2=(AliITSsegmentationSSD*)iDetType->GetSegmentationModel();
120 AliITSresponseSSD *res2 = (AliITSresponseSSD*)iDetType->GetResponseModel();
121 res2->SetSigmaSpread(3.,2.);
122 AliITSsimulationSSD *sim2=new AliITSsimulationSSD(seg2,res2);
123 ITS->SetSimulationModel(2,sim2);
124
426edb57 125
88c93889 126//
127// Event Loop
128//
129
88c93889 130
0b210f54 131 // create the TreeD
132
133 Int_t nparticles=gAlice->GetEvent(0);
134 printf("Create TreeD \n");
135 if(!gAlice->TreeD()) gAlice->MakeTree("D");
136 //make branch
137 ITS->MakeBranch("D");
138
139 Int_t nbgr_ev=0;
140
141
142 cout<<"Digitizing ITS...\n";
143 TStopwatch timer;
144
88c93889 145 for (Int_t nev=evNumber1; nev<= evNumber2; nev++) {
146 cout << "nev " <<nev<<endl;
0b210f54 147 if(nev>0) {
426edb57 148 nparticles = gAlice->GetEvent(nev);
149 gAlice->SetEvent(nev);
150 if(!gAlice->TreeD()) gAlice-> MakeTree("D");
151 ITS->MakeBranch("D");
0b210f54 152 }
88c93889 153 cout << "nparticles " <<nparticles<<endl;
154 if (nev < evNumber1) continue;
155 if (nparticles <= 0) return;
156
157 Int_t nbgr_ev=0;
158 if(nsignal) nbgr_ev=Int_t(nev/nsignal);
0b210f54 159 timer.Start();
88c93889 160 ITS->HitsToDigits(nev,nbgr_ev,size," ","All"," ");
426edb57 161 //ITS->HitsToDigits(nev,nbgr_ev,size," ","SPD"," ");
0b210f54 162 timer.Stop(); timer.Print();
88c93889 163 } // event loop
164
426edb57 165// delete sim0;
88c93889 166 delete sim1;
167 delete sim2;
168
88c93889 169 file->Close();
170}