1 #include "AliAnalysisTask.h"
2 #include "AliAnalysisManager.h"
3 #include "AliAnalysisDataContainer.h"
4 #include "AliITSRecPoint.h"
5 #include "AliESDEvent.h"
6 #include "AliTrackPointArray.h"
7 #include "AliITSgeomTGeo.h"
8 #include "AliESDfriend.h"
9 #include "AliCDBManager.h"
10 #include "AliCDBEntry.h"
11 #include "AliITSCalibrationSDD.h"
12 #include "AliITSresponseSDD.h"
13 #include "AliGeomManager.h"
18 #include <TGeoGlobalMagField.h>
19 #include "AliESDInputHandlerRP.h"
20 #include "AliAnalysisTaskSDDRP.h"
22 ClassImp(AliAnalysisTaskSDDRP)
23 //______________________________________________________________________________
24 AliAnalysisTaskSDDRP::AliAnalysisTaskSDDRP() : AliAnalysisTaskSE("SDD RecPoints"),
48 DefineOutput(1, TList::Class());
52 //___________________________________________________________________________
53 AliAnalysisTaskSDDRP::~AliAnalysisTaskSDDRP(){
62 //___________________________________________________________________________
64 void AliAnalysisTaskSDDRP::UserCreateOutputObjects() {
66 fOutput = new TList();
68 fOutput->SetName("OutputHistos");
70 fHistNEvents = new TH1F("hNEvents", "Number of processed events",3,-1.5,1.5);
71 fHistNEvents->Sumw2();
72 fHistNEvents->SetMinimum(0);
73 fOutput->Add(fHistNEvents);
77 fRecPMod = new TH1F("hRPMod","Rec Points per Module",260,239.5,499.5);
79 fRecPMod->SetMinimum(0);
80 fOutput->Add(fRecPMod);
82 fTrackPMod = new TH1F("hTPMod","Track Points per Module",260,239.5,499.5);
84 fTrackPMod->SetMinimum(0);
85 fOutput->Add(fTrackPMod);
87 fGoodAnMod = new TH1F("hGAMod","Good Anodes per Module",260,239.5,499.5);
88 fOutput->Add(fGoodAnMod);
92 fRecPLadLay3 = new TH1F("hRPLad3","Rec Points per Ladder Layer 3",14,-0.5,13.5);
93 fRecPLadLay3->Sumw2();
94 fRecPLadLay3->SetMinimum(0);
95 fOutput->Add(fRecPLadLay3);
97 fRecPLadLay4 = new TH1F("hRPLad4","Rec Points per Ladder Layer 4",22,-0.5,21.5);
98 fRecPLadLay4->Sumw2();
99 fRecPLadLay4->SetMinimum(0);
100 fOutput->Add(fRecPLadLay4);
102 fTrackPLadLay3 = new TH1F("hTPLad3","Track Points per Ladder Layer 3",14,-0.5,13.5);
103 fTrackPLadLay3->Sumw2();
104 fTrackPLadLay3->SetMinimum(0);
105 fOutput->Add(fTrackPLadLay3);
107 fTrackPLadLay4 = new TH1F("hTPLad4","Track Points per Ladder Layer 4",22,-0.5,21.5);
108 fTrackPLadLay4->Sumw2();
109 fTrackPLadLay4->SetMinimum(0);
110 fOutput->Add(fTrackPLadLay4);
112 fGoodAnLadLay3 = new TH1F("hGALad3","Good Anodes per Ladder Layer 3",14,-0.5,13.5);
113 fOutput->Add(fGoodAnLadLay3);
115 fGoodAnLadLay4 = new TH1F("hGALad4","Good Anodes per Ladder Layer 4",22,-0.5,21.5);
116 fOutput->Add(fGoodAnLadLay4);
118 fDriftTimeRP=new TH1F("hDrTimRP","Drift Time from Rec Points (ns)",100,0.,6400.);
119 fDriftTimeRP->Sumw2();
120 fDriftTimeRP->SetMinimum(0.);
121 fOutput->Add(fDriftTimeRP);
123 fDriftTimeTP=new TH1F("hDrTimTP","Drift Time from Track Points (ns)",100,0.,6400.);
124 fDriftTimeTP->Sumw2();
125 fDriftTimeTP->SetMinimum(0.);
126 fOutput->Add(fDriftTimeTP);
128 for(Int_t it=0; it<8; it++){
129 fSignalTime[it]=new TH1F(Form("hSigTimeInt%d",it),Form("hSigTimeInt%d",it),100,0.,300.);
130 fSignalTime[it]->Sumw2();
131 fSignalTime[it]->SetMinimum(0);
132 fOutput->Add(fSignalTime[it]);
135 //______________________________________________________________________________
136 void AliAnalysisTaskSDDRP::UserExec(Option_t *)
139 fESD = (AliESDEvent*) (InputEvent());
142 printf("AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
146 fESDfriend = static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
151 printf("AliAnalysisTaskSDDRP::Exec(): bad ESDfriend\n");
154 PostData(1, fOutput);
155 fESD->SetESDfriend(fESDfriend);
160 AliCDBManager* man = AliCDBManager::Instance();
161 man->SetDefaultStorage("raw://");
162 man->SetRun(fESD->GetRunNumber());
165 AliCDBEntry* eR=(AliCDBEntry*)man->Get("ITS/Calib/RespSDD");
166 fResp=(AliITSresponseSDD*)eR->GetObject();
168 AliCDBEntry* eC=(AliCDBEntry*)man->Get("ITS/Calib/CalibSDD");
169 TObjArray* calsdd=(TObjArray*)eC->GetObject();
170 Int_t countGood3[14];
171 Int_t countGood4[22];
172 Int_t countGoodMod[260];
173 for(Int_t ilad=0;ilad<14;ilad++) countGood3[ilad]=0;
174 for(Int_t ilad=0;ilad<22;ilad++) countGood4[ilad]=0;
175 for(Int_t imod=0;imod<260;imod++) countGoodMod[imod]=0;
176 for(Int_t imod=0;imod<260;imod++){
177 AliITSCalibrationSDD* cal=(AliITSCalibrationSDD*)calsdd->At(imod);
178 if(cal->IsBad()) continue;
179 Int_t modId=imod+AliITSgeomTGeo::GetModuleIndex(3,1,1);
181 AliITSgeomTGeo::GetModuleId(modId,lay,lad,det);
182 if(!CheckModule(lay,lad,det)) continue;
183 for(Int_t ian=0; ian<512; ian++){
184 if(cal->IsBadChannel(ian)) continue;
185 countGoodMod[imod]++;
186 if(lay==3) countGood3[lad-1]++;
187 else if(lay==4) countGood4[lad-1]++;
190 for(Int_t imod=0;imod<260;imod++) fGoodAnMod->SetBinContent(imod+1,countGoodMod[imod]);
191 fGoodAnMod->SetMinimum(0);
192 for(Int_t ilad=0;ilad<14;ilad++) fGoodAnLadLay3->SetBinContent(ilad+1,countGood3[ilad]);
193 fGoodAnLadLay3->SetMinimum(0);
194 for(Int_t ilad=0;ilad<22;ilad++) fGoodAnLadLay4->SetBinContent(ilad+1,countGood4[ilad]);
195 fGoodAnLadLay4->SetMinimum(0);
199 fHistNEvents->Fill(0);
201 if(!fESD->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL")) return;
202 fHistNEvents->Fill(1);
204 const AliTrackPointArray *array = 0;
205 Int_t ntracks = fESD->GetNumberOfTracks();
206 for (Int_t itrack=0; itrack < ntracks; itrack++) {
207 AliESDtrack * track = fESD->GetTrack(itrack);
208 if (!track) continue;
209 if(track->GetNcls(1)>0) continue;
210 if(track->GetNcls(0) < fMinITSpts) continue;
212 track->GetITSdEdxSamples(dedx);
213 array = track->GetTrackPointArray();
215 for(Int_t ipt=0; ipt<array->GetNPoints(); ipt++) {
218 array->GetPoint(point,ipt);
219 Int_t volId = point.GetVolumeID();
220 Int_t layerId = AliGeomManager::VolUIDToLayer(volId,modId);
221 if(layerId<3 || layerId>4) continue;
222 modId+=AliITSgeomTGeo::GetModuleIndex(layerId,1,1);
224 AliITSgeomTGeo::GetModuleId(modId,lay,lad,det);
225 if(!CheckModule(lay,lad,det)) continue;
226 fTrackPMod->Fill(modId);
227 fDriftTimeTP->Fill(point.GetDriftTime());
228 Float_t dtime=point.GetDriftTime()-fResp->GetTimeZero(modId);
229 Int_t theBin=int(dtime/6500.*8.);
231 fTrackPLadLay3->Fill(lad-1);
232 if(dedx[0]>0. && track->P()>fMinPfordEdx) fSignalTime[theBin]->Fill(dedx[0]);
235 fTrackPLadLay4->Fill(lad-1);
236 if(dedx[0]>0.&& track->P()>fMinPfordEdx) fSignalTime[theBin]->Fill(dedx[1]);
241 AliESDInputHandlerRP *hand = dynamic_cast<AliESDInputHandlerRP*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
242 TTree* tR = hand->GetTreeR("ITS");
243 TClonesArray *ITSrec= new TClonesArray("AliITSRecPoint");
244 TBranch *branch =tR->GetBranch("ITSRecPoints");
245 branch->SetAddress(&ITSrec);
246 for (Int_t modId=240; modId<500; modId++){
248 AliITSgeomTGeo::GetModuleId(modId,lay,lad,det);
249 if(!CheckModule(lay,lad,det)) continue;
250 branch->GetEvent(modId);
251 Int_t nrecp = ITSrec->GetEntries();
252 fRecPMod->Fill(modId,nrecp);
253 if(lay==3) fRecPLadLay3->Fill(lad-1,nrecp);
254 if(lay==4) fRecPLadLay4->Fill(lad-1,nrecp);
255 for(Int_t irec=0;irec<nrecp;irec++) {
256 AliITSRecPoint *recp = (AliITSRecPoint*)ITSrec->At(irec);
257 fDriftTimeRP->Fill(recp->GetDriftTime());
266 //______________________________________________________________________________
267 Bool_t AliAnalysisTaskSDDRP::CheckModule(Int_t lay, Int_t lad, Int_t det) const{
270 if(lad==3 && det==5) return kFALSE; // 1500 V
271 if(lad==3 && det==6) return kFALSE; // 0 V
272 if(lad==3 && det==7) return kFALSE; // 1500 V
273 if(lad==4 && det==1) return kFALSE; // 0 V
274 if(lad==4 && det==2) return kFALSE; // 1500 V
275 if(lad==7 && det==5) return kFALSE; // 0 MV
276 if(lad==9 && det==3) return kFALSE; // 1500 V
277 if(lad==9 && det==4) return kFALSE; // 0 V
278 if(lad==9 && det==5) return kFALSE; // 1500 V
279 if(lad==11 && det==6) return kFALSE; // 1500 V
280 if(lad==11 && det==7) return kFALSE; // 0 V
281 if(lad==11 && det==8) return kFALSE; // 1500 V
282 if(lad==18 && det==5) return kFALSE; // 1500 V
283 if(lad==18 && det==6) return kFALSE; // 0 V
284 if(lad==18 && det==7) return kFALSE; // 1500 V
285 if(lad==22 && det==1) return kFALSE; // 0 V
286 if(lad==22 && det==2) return kFALSE; // 1500 V
289 if(lad==4 && det==4) return kFALSE; // 1500 V
290 if(lad==3) return kFALSE; // swapped in geometry
295 //______________________________________________________________________________
296 void AliAnalysisTaskSDDRP::Terminate(Option_t */*option*/)
298 // Terminate analysis
299 fOutput = dynamic_cast<TList*> (GetOutputData(1));
301 printf("ERROR: fOutput not available\n");
304 fHistNEvents= dynamic_cast<TH1F*>(fOutput->FindObject("hNEvents"));
305 fRecPMod= dynamic_cast<TH1F*>(fOutput->FindObject("hRPMod"));
306 fTrackPMod= dynamic_cast<TH1F*>(fOutput->FindObject("hTPMod"));
307 fGoodAnMod= dynamic_cast<TH1F*>(fOutput->FindObject("hGAMod"));
309 fRecPLadLay3= dynamic_cast<TH1F*>(fOutput->FindObject("hRPLad3"));
310 fRecPLadLay4= dynamic_cast<TH1F*>(fOutput->FindObject("hRPLad4"));
311 fTrackPLadLay3= dynamic_cast<TH1F*>(fOutput->FindObject("hTPLad3"));
312 fTrackPLadLay4= dynamic_cast<TH1F*>(fOutput->FindObject("hTPLad4"));
313 fGoodAnLadLay3= dynamic_cast<TH1F*>(fOutput->FindObject("hGALad3"));
314 fGoodAnLadLay4= dynamic_cast<TH1F*>(fOutput->FindObject("hGALad4"));
316 fDriftTimeRP= dynamic_cast<TH1F*>(fOutput->FindObject("hDrTimRP"));
317 fDriftTimeTP= dynamic_cast<TH1F*>(fOutput->FindObject("hDrTimTP"));
319 for(Int_t it=0; it<8; it++){
320 fSignalTime[it]= dynamic_cast<TH1F*>(fOutput->FindObject(Form("hSigTimeInt%d",it)));