]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/ITSSDDQAMaker.C
AddRunType calls added in the constructor (F.Prino)
[u/mrichter/AliRoot.git] / ITS / ITSSDDQAMaker.C
CommitLineData
27639c72 1void ITSSDDQAMaker(char *iFile, Int_t MaxEvts=1000000, Int_t FirstEvt=0) {
2
3 //To have Baseline Histos uncomment parts with " // BL!!! " comment
4
5cout << "SDD Quality Assurance Prototype Macro" << endl;
6
7const Int_t nSDDmodules= 260;
8const Int_t imodoffset = 240;
9const Int_t modtotSDD = nSDDmodules*2;
10const Int_t anode = 256;
11
12Float_t xi = -0.5;
13Float_t xf = xi + nSDDmodules;
14TH1F *hModulePattern = new TH1F("hModulePattern","Modules pattern",nSDDmodules,xi,xf);
15xf = xi + modtotSDD;
16TH1F *hModuleSidePattern = new TH1F("hModuleSidePattern","Modules/Side pattern",modtotSDD,xi,xf);
17
18TH2F *hModuleChargeMap[modtotSDD]; //260 dx e 260 sx with A, T, Q
19TH2F *hModuleCountsMap[modtotSDD]; //260 dx e 260 sx with A, T, Ncounts
20TH2I *hModuleCarlos = new TH2I("hModuleCarlos","hModuleCarlos",modtotSDD,xi,xf,101,-0.5,100.5);
21/*
22 TH1F *hModuleSideBL[modtotSDD][anode]; // BL!!!
23*/
24
25
26//-------histograms definition
27Char_t *hisnam = new Char_t[50];
28Char_t *histit = new Char_t[50];
29Char_t *hisnam2 = new Char_t[50];
30Char_t *histit2 = new Char_t[50];
31Char_t *hisnam3 = new Char_t[50];
32 for(Int_t imod=0; imod<nSDDmodules;imod++){
33 for(Int_t isid=0;isid<2;isid++){
34 Int_t index=2*imod+isid; //260*2 position
35
36 sprintf(hisnam,"chargeMap%d",index);
37 sprintf(histit,"Total Charge, module number %d",index);
38 hModuleChargeMap[index]=new TH2F(hisnam,histit,256,-0.5,255.5,256,-0.5,255.5);
39
40 sprintf(hisnam2,"countsMap%d",index);
41 sprintf(histit2,"Number of Counts, module number %d",index);
42 hModuleCountsMap[index] = new TH2F(hisnam2,histit2,256,-0.5,255.5,256,-0.5,255.5);
43 /*
44 for(Int_t ianode=0; ianode<anode; ianode++){ // BL!!!
45 sprintf(hisnam3,"BL_module_%d_%d",index,ianode);
46 //cout<<hisnam3 <<endl;
47 hModuleSideBL[index][ianode] = new TH1F(hisnam3,hisnam3,256,0.,1024.);
48 }
49 */
50 }
51 }
52
53 AliRawReader *rd = new AliRawReaderDate(iFile,FirstEvt); // open run
54 Int_t evCounter = 0;
55 Int_t eqOffset = 256;
56 Int_t DDLid_range = 24;
57 do{ // start loop on events
58 if(++evCounter > MaxEvts) { cout << MaxEvts << " events read, stop" << endl; evCounter--; break; }
59 cout << "Read Event: " << evCounter+FirstEvt-1 << endl;
60
61 rd->RequireHeader(kFALSE);
62 rd->SelectEvents(7);
63 rd->SelectEquipment(17,eqOffset+1,eqOffset+DDLid_range); //17 states for "DRorc acquisition"
64 rd->Reset(); // reset the current position to the beginning of the event
65
66 Int_t nSkip = 0; // number of skipped signals
67 AliITSRawStreamSDD s(rd); //This class provides access to ITS SDD digits in raw data.
68 Int_t iddl;
69 Int_t isddmod;
70 Int_t moduleSDD;
71 gStyle->SetPalette(1);
72 while(s.Next()){ //read the next raw digit; returns kFALSE if there is no digit left
5dfa68c5 73 if(s.IsCompletedModule()) continue;
74 iddl=rd->GetDDLID()-2; // -2 is temporary for test raw data
27639c72 75
5dfa68c5 76 isddmod=s.GetModuleNumber(iddl,s.GetCarlosId()); //this is the FEE Carlos
27639c72 77 //cout<<"DDLID= "<<iddl <<"; Module number= " <<isddmod <<endl;
78 if(isddmod >= imodoffset) {
79 hModulePattern->Fill(isddmod-imodoffset); // 0 to 259 so 240 to 499
80 moduleSDD=2*(isddmod-imodoffset)+s.GetChannel();
81 hModuleSidePattern->Fill(moduleSDD); // 0 to 519
82 hModuleCarlos->Fill(isddmod-imodoffset,s.GetCarlosId());
83 //cout << "anode " << s.GetCoord1() << ", time bin: " << s.GetCoord2() << ", charge: " << s.GetSignal() << endl;
84 Int_t coord1 = s.GetCoord1();
85 Int_t coord2 = s.GetCoord2();
86 Int_t signal = s.GetSignal();
87 hModuleChargeMap[moduleSDD]->Fill(coord2, coord1,signal);
88 hModuleCountsMap[moduleSDD]->Fill(coord2, coord1 );
89 //hModuleSideBL[moduleSDD][coord1]->Fill(signal); // BL !!!
90 } else {
91 nSkip++;
92 }
93 }
94 cout << "End of Event " << evCounter+FirstEvt-1 << ", " << nSkip << " wrong module numbers" << endl;
95 } while(rd->NextEvent()); // end loop on events
96 delete rd;
97
98 cout << "end after " << evCounter << " events" << endl;
99 /*
100 TNtuple *Baseline = new TNtuple("Baseline","Baseline","HalfModule:Anode:Mean:RMS"); // BL!!!
101 Float_t meanBL;
102 Float_t rmsBL;
103 */
104 for(Int_t i=0; i<modtotSDD; i++){
105 if(hModuleSidePattern->GetBinContent(i+1)){ //check if they're not empty
106 hModuleChargeMap[i]->GetXaxis()->SetTitle("Time Bin");
107 hModuleChargeMap[i]->GetYaxis()->SetTitle("Anode");
108 hModuleCountsMap[i]->GetXaxis()->SetTitle("Time Bin");
109 hModuleCountsMap[i]->GetYaxis()->SetTitle("Anode");
110 /*
111 for(Int_t ianode=0; ianode<anode; ianode++ ){ // BL!!!
112 hModuleSideBL[i][ianode]->GetXaxis()->SetTitle("ADC counts");
113 hModuleSideBL[i][ianode]->GetYaxis()->SetTitle("#");
114 meanBL = hModuleSideBL[i][ianode]->GetMean();
115 rmsBL = hModuleSideBL[i][ianode]->GetRMS();
116 gaussfitBL = hModuleSideBL[i][ianode]->Fit("gaus");
117 Baseline->Fill(i,ianode,meanBL,rmsBL);
118 }
119 */
120 }
121 }
122
123 hModuleSidePattern->GetXaxis()->SetTitle("2*(Module Number-1)+Side");
124 hModuleSidePattern->GetYaxis()->SetTitle("Counts");
125 hModulePattern->GetXaxis()->SetTitle("Module Number");
126 hModulePattern->GetYaxis()->SetTitle("Counts");
127
128
129 //-------store Histograms
130 cout << "Store Histograms" << endl;
131 TString oFileName(iFile);
132 oFileName.Append(".root");
133 TFile *oFile = TFile::Open(oFileName,"recreate");
134 hModulePattern->Write();
135 hModuleSidePattern->Write();
136 hModuleCarlos->Write();
137 for(Int_t i=0; i<modtotSDD; i++){
138 if(hModuleSidePattern->GetBinContent(i+1)){ //check if they're not empty
139 hModuleChargeMap[i]->Write();
140 hModuleCountsMap[i]->Write();
141 /*
142 for(Int_t ianode=0; ianode<anode; ianode++ ){ // BL!!!
143 hModuleSideBL[i][ianode]->Write();
144 Baseline->Write();
145 }
146 */
147 }
148 }
149
150 oFile->Close();
151 cout << "Clear memory" << endl;
152 for(Int_t imod=0; imod<nSDDmodules;imod++){
153 for(Int_t isid=0;isid<2;isid++){
154 Int_t index=2*imod+isid; //260*2 position
155 delete hModuleChargeMap[index];
156 delete hModuleCountsMap[index];
157 /*
158 for(Int_t ianode=0; ianode<anode; ianode++ ){ // BL!!!
159 delete hModuleSideBL[index][ianode];
160 delete Baseline;
161 }
162 */
163 }
164 }
165 delete hModulePattern;
166 delete hModuleSidePattern;
167 delete hModuleCarlos;
168
169}