2 /**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
17 // macro for very simple analysis
21 #include "Riostream.h"
24 #include "TProfile2D.h"
32 #include "TObjArray.h"
34 #include "AliTRDrecoTask.h"
35 #include "AliAnalysisManager.h"
37 #include "AliESDInputHandler.h"
38 #include "AliTRDtrackV1.h"
39 #include "AliTRDseedV1.h"
40 #include "AliTRDcluster.h"
41 #include "AliTRDtrackInfo/AliTRDtrackInfo.h"
42 #include "AliTRDcalibDB.h"
44 #include "AliTRDCalibraFillHisto.h"
48 #include "AliTRDcalibration.h"
51 ClassImp(AliTRDcalibration)
53 //________________________________________________________________________
54 AliTRDcalibration::AliTRDcalibration()
55 :AliTRDrecoTask("Calibration", "Calibration on tracks")
59 ,fTRDCalibraFillHisto(0)
73 //________________________________________________________________________
74 void AliTRDcalibration::CreateOutputObjects()
76 OpenFile(0, "RECREATE");
78 // Number of time bins
79 AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
80 fNbTimeBins = cal->GetNumberOfTimeBins();
82 // instance calibration
83 fTRDCalibraFillHisto = AliTRDCalibraFillHisto::Instance();
84 fTRDCalibraFillHisto->SetHisto2d(); // choose to use histograms
85 fTRDCalibraFillHisto->SetCH2dOn(); // choose to calibrate the gain
86 fTRDCalibraFillHisto->SetPH2dOn(); // choose to calibrate the drift velocity
87 fTRDCalibraFillHisto->SetPRF2dOn(); // choose to look at the PRF
88 fTRDCalibraFillHisto->Init2Dhistos(); // initialise the histos
89 fTRDCalibraFillHisto->SetNumberClusters(flow); // At least 11 clusters
90 fTRDCalibraFillHisto->SetNumberClustersf(fhigh); // At least 11 clusters
91 fTRDCalibraFillHisto->SetFillWithZero(ffillZero); // Fill zeros
93 fTRDCalibraFillHisto->SetDebugLevel(fDebugLevel); //debug stuff
95 fContainer = new TObjArray();
96 fContainer->Add(fTRDCalibraFillHisto->GetCH2d()); //TH2I
97 fContainer->Add(fTRDCalibraFillHisto->GetPH2d()); //TProfile2D
98 fContainer->Add(fTRDCalibraFillHisto->GetPRF2d()); //TProfile2D
100 //printf("create output objects 1\n");
102 fNbTRDTrackUsed = new TH1F("TRDTrackUsed","TRDTrackUsed",50,0,50);
103 fNbTRDTrackUsed->Sumw2();
105 fNbTimeBin = new TH1F("TimeBin","TimeBin",35,0,35);
108 fNbClusters = new TH1F("NbClusters","",35,0,35);
109 fNbClusters->Sumw2();
111 fPHSum = new TProfile2D("PH2dSum","Nz0Nrphi0"
112 ,30,-0.05,(Double_t)fNbTimeBins/10.0-0.05
114 fPHSum->SetYTitle("Det/pad groups");
115 fPHSum->SetXTitle("time [#mus]");
116 fPHSum->SetZTitle("<PH> [a.u.]");
119 fCHSum = new TH2I("CH2dSum","Nz0Nrphi0",100,0,300,540,0,540);
120 fCHSum->SetYTitle("Det/pad groups");
121 fCHSum->SetXTitle("charge deposit [a.u]");
122 fCHSum->SetZTitle("counts");
126 fContainer->Add(fNbTRDTrackUsed);
127 fContainer->Add(fNbTimeBin);
128 fContainer->Add(fNbClusters);
129 fContainer->Add(fPHSum);
130 fContainer->Add(fCHSum);
131 //printf("create output objects 2\n");
135 //________________________________________________________________________
136 void AliTRDcalibration::Exec(Option_t *)
139 Int_t nbTrdTracksUsed = 0;
141 for(Int_t itrk=0; itrk < fTracks->GetEntriesFast(); itrk++){
143 fTrackInfo = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
144 ftrdTrack = fTrackInfo->GetTrack();
145 if(!ftrdTrack) continue;
147 fTRDCalibraFillHisto->UpdateHistogramsV1(ftrdTrack);
149 const AliTRDseedV1 *tracklet = 0x0;
150 for(Int_t itr = 0; itr < 6; itr++){
151 if(!(tracklet = ftrdTrack->GetTracklet(itr))) continue;
152 if(!tracklet->IsOK()) continue;
153 Int_t nbclusters = 0;
156 for(Int_t k=0; k < 35; k++){
162 Float_t normalisation = 6.67;
164 for(int ic=0; ic<AliTRDseed::knTimebins; ic++){
165 if(!(fcl = tracklet->GetClusters(ic))) continue;
167 Int_t time = fcl->GetPadTime();
168 Float_t ch = tracklet->GetdQdl(ic);
169 detector = fcl->GetDetector();
170 if((time>-1) && (time<fNbTimeBins)) phtb[time]=ch/normalisation;
171 sum += ch/normalisation;
172 //printf("time %d\n",time);
173 fNbTimeBin->Fill(time);
175 fNbClusters->Fill(nbclusters);
176 if((nbclusters > flow) && (nbclusters < fhigh)){
177 fCHSum->Fill(sum/20.0,0.0);
178 for(int ic=0; ic<fNbTimeBins; ic++){
179 if(ffillZero) fPHSum->Fill((Double_t)ic/10.0,0.0,(Double_t)phtb[ic]);
181 if(phtb[ic] > 0.0) fPHSum->Fill((Double_t)ic/10.0,0.0,(Double_t)phtb[ic]);
189 fNbTRDTrackUsed->Fill(nbTrdTracksUsed);
193 PostData(0, fContainer);
196 //________________________________________________________________________
197 void AliTRDcalibration::Terminate(Option_t *)
199 // Draw result to the screen
200 // Called once at the end of the query
202 //printf("terminate\n");
204 if(fTRDCalibraFillHisto) fTRDCalibraFillHisto->DestroyDebugStreamer();
207 fContainer = dynamic_cast<TList*> (GetOutputData(0));
209 Printf("ERROR: fList not available");