]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/ITSSDDQA.C
Bug fix
[u/mrichter/AliRoot.git] / ITS / ITSSDDQA.C
CommitLineData
765a9f95 1void ITSSDDQA(char *iFile, Int_t MaxEvts=1000000, Int_t FirstEvt=0) {
2
3cout << "SDD Quality Assurance Prototype Macro" << endl;
4
5const Int_t nSDDmodules= 260;
6const Int_t imodoffset = 240;
7const Int_t modtotSDD = nSDDmodules*2;
8
9Float_t xi = 0.5;
10Float_t xf = xi + nSDDmodules;
11TH1F *modulePattern = new TH1F("patternModule","Modules pattern",nSDDmodules,xi,xf);
12xf = xi + modtotSDD;
13TH1F *moduleSidePattern = new TH1F("patternSide","Modules/Side pattern",modtotSDD,xi,xf);
14
15TH2F *hismap[modtotSDD]; //260 dx e 260 sx with A, T, Q
16TH2F *hispop[modtotSDD]; //260 dx e 260 sx with A, T, Ncounts
17
18Char_t *cindex = new Char_t[5];
19for(Int_t imod=0; imod<nSDDmodules;imod++){
20 for(Int_t isid=0;isid<2;isid++){
21 Int_t index=2*imod+isid; //260*2 position
22
23 sprintf(cindex,"%d",index+1); // imod,isid);
24 TString sindex((const char *) cindex);
25
26 TString histnam("chargeMap");
27 TString histit("Total Charge, module number ");
28 histnam.Append(sindex);
29 histit.Append(sindex);
30 hismap[index]=new TH2F(histnam.Data(),histit.Data(),256,-0.5,255.5,256,-0.5,255.5);
31
32 TString hisnam2("countsMap");
33 TString histit2("Number of Counts, module number ");
34 hisnam2.Append(sindex);
35 histit2.Append(sindex);
36 hispop[index]=new TH2F(hisnam2.Data(),histit2.Data(),256,-0.5,255.5,256,-0.5,255.5);
37
38 /*
39 sprintf(hisnam,"hisprojX%03ds%d",imod,isid);
40 sprintf(histitle,"layer , ladder, module position, channel, %d, %d", imod, isid);
41 hisprojX[index]=new TH2F(hisnam,histitle,256,-0.5,255.5,256,-0.5,255.5);
42
43 sprintf(hisnam,"hisprojY%03ds%d",imod,isid);
44 sprintf(histitle,"layer , ladder, module position, channel, %d, %d", imod, isid);
45 hisprojY[index]=new TH2F(hisnam,histitle,256,-0.5,255.5,256,-0.5,255.5);
46
47 sprintf(hisnam,"hisprofX%03ds%d",imod,isid);
48 sprintf(histitle,"layer , ladder, module position, channel, %d, %d", imod, isid);
49 hisprofX[index]=new TH2F(hisnam,histitle,256,-0.5,255.5,256,-0.5,255.5);
50
51 sprintf(hisnam,"hisprofY%03ds%d",imod,isid);
52 sprintf(histitle,"layer , ladder, module position, channel, %d, %d", imod, isid);
53 hisprofY[index]=new TH2F(hisnam,histitle,256,-0.5,255.5,256,-0.5,255.5);
54 */
55
56 }
57}
58delete [] cindex;
59
60 AliRawReader *rd = new AliRawReaderDate(iFile,FirstEvt); // open run
61 Int_t evCounter = 0;
62
63 //AliITS *itsRun = new AliITS();
64 // TGeoManager::Import("$ALICE_ROOT/EVE/alice-data/alice_fullgeo.root");
65 /*
66 AliITSInitGeometry *initgeom = new AliITSInitGeometry("AliITSvPPRasymmFMD",2);
67 geom = initgeom->CreateAliITSgeom();
68 delete initgeom;
69 */
70
71 Int_t eqOffset = 256;
72 Int_t DDLid_range = 24;
73 do{ // start loop on events
74 if(++evCounter > MaxEvts) { cout << MaxEvts << " events read, stop" << endl; evCounter--; break; }
75 cout << "Read Event: " << evCounter+FirstEvt-1 << endl;
76
77 rd->RequireHeader(kFALSE);
78 rd->SelectEvents(7); // read only events with the given type. no selection is applied if a value < 0 is used.
79
80 rd->SelectEquipment(17,eqOffset+1,eqOffset+DDLid_range);
81
82 rd->Reset(); // reset the current position to the beginning of the event
83 AliITSRawStreamSDD s(rd); //This class provides access to ITS SDD digits in raw data.
84 Int_t iddl;
85 Int_t isddmod;
86 Int_t moduleSDD;
87 while(s.Next()){ //read the next raw digit; returns kFALSE if there is no digit left
88
89 iddl=rd->GetDDLID();
90 isddmod=s.GetModuleNumber(iddl,s.GetCarlosId()); //this is the FEE Carlos
91 //cout<<"DDLID= "<<iddl <<"; Module number= " <<isddmod <<endl;
92 modulePattern->Fill(isddmod-imodoffset+1); // 1 to 260
93 moduleSDD=2*(isddmod-imodoffset)+s.GetChannel();
94 moduleSidePattern->Fill(moduleSDD+1); // 1 to 520
95 //cout << "anode " << s.GetCoord1() << ", time bin: " << s.GetCoord2() << ", charge: " << s.GetSignal() << endl;
96 hismap[moduleSDD]->Fill(s.GetCoord1(), s.GetCoord2(),s.GetSignal() );
97 hispop[moduleSDD]->Fill(s.GetCoord1(), s.GetCoord2() );
98 }
99
100 } while(rd->NextEvent()); // end loop on events
101 delete rd;
102
103 cout << "end after " << evCounter << " events" << endl;
104
105 TString oFileName(iFile);
106 oFileName.Append(".root");
107 TFile *oFile = TFile::Open(oFileName,"recreate");
108 modulePattern->Write();
109 moduleSidePattern->Write();
110 for(Int_t i=0; i<modtotSDD; i++){
111 hismap[i]->Write();
112 hispop[i]->Write();
113 }
114 oFile->Close();
115
116 for(Int_t imod=0; imod<nSDDmodules;imod++){
117 for(Int_t isid=0;isid<2;isid++){
118 Int_t index=2*imod+isid; //260*2 position
119 delete hismap[index];
120 delete hispop[index];
121 }
122 }
123 delete modulePattern;
124 delete moduleSidePattern;
125
126}