3 #include "TMethodCall.h"
4 #include "TMethodArg.h"
10 #include "TDirectory.h"
11 #include "TTreeStream.h"
14 #include "AliAnalysisTask.h"
16 #include "AliTRDrecoTask.h"
18 ClassImp(AliTRDrecoTask)
20 //_______________________________________________________
21 AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title)
22 : AliAnalysisTask(name, title)
33 DefineInput(0, TObjArray::Class());
34 DefineOutput(0, TObjArray::Class());
37 //_______________________________________________________
38 AliTRDrecoTask::~AliTRDrecoTask()
46 fPlotFuncList->Delete();
52 //fContainer->Delete();
58 //_______________________________________________________
59 void AliTRDrecoTask::ConnectInputData(Option_t *)
65 fTracks = dynamic_cast<TObjArray *>(GetInputData(0));
68 //_______________________________________________________
69 void AliTRDrecoTask::Exec(Option_t *)
72 AliWarning("No functor list defined for the reference plots");
76 if(!fTracks->GetEntriesFast()) return;
78 AliTRDtrackInfo *trackInfo = 0x0;
79 TIter plotIter(fPlotFuncList);
80 TObjArrayIter trackIter(fTracks);
81 while((trackInfo = dynamic_cast<AliTRDtrackInfo*>(trackIter()))){
82 fTrack = trackInfo->GetTrack();
83 fMC = trackInfo->GetMCinfo();
84 fESD = trackInfo->GetESDinfo();
86 TMethodCall *plot = 0x0;
88 while((plot=dynamic_cast<TMethodCall*>(plotIter()))){
92 PostData(0, fContainer);
95 //_______________________________________________________
96 void AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/)
98 AliWarning("Retrieving reference figures not implemented.");
101 //_______________________________________________________
102 void AliTRDrecoTask::InitFunctorList()
104 TClass *c = this->IsA();
107 TIter methIter(c->GetListOfMethods());
108 while((m=dynamic_cast<TMethod*>(methIter()))){
109 TString name(m->GetName());
110 if(!name.BeginsWith("Plot")) continue;
111 if(!fPlotFuncList) fPlotFuncList = new TList();
112 fPlotFuncList->AddLast(new TMethodCall(c, (const char*)name, ""));
116 //_______________________________________________________
117 Bool_t AliTRDrecoTask::Load(const Char_t *filename)
119 if(!TFile::Open(filename)){
120 AliWarning(Form("Couldn't open file %s.", filename));
124 if(!(o = (TObjArray*)gFile->Get(GetName()))){
125 AliWarning("Missing histogram container.");
128 fContainer = (TObjArray*)o->Clone(GetName());
133 //_______________________________________________________
134 Bool_t AliTRDrecoTask::PostProcess()
136 AliWarning("Post processing of reference histograms not implemented.");
140 //_______________________________________________________
141 void AliTRDrecoTask::SetDebugLevel(Int_t level)
145 TDirectory *savedir = gDirectory;
146 fDebugStream = new TTreeSRedirector(Form("TRD.Debug%s.root", GetName()));
151 //________________________________________________________
152 void AliTRDrecoTask::Adjust(TF1 *f, TH1 *h)
154 // Helper function to avoid duplication of code
155 // Make first guesses on the fit parameters
157 // find the intial parameters of the fit !! (thanks George)
158 Int_t nbinsy = Int_t(.5*h->GetNbinsX());
160 for(Int_t jbin=nbinsy-4; jbin<=nbinsy+4; jbin++) sum+=h->GetBinContent(jbin); sum/=9.;
161 f->SetParLimits(0, 0., 3.*sum);
162 f->SetParameter(0, .9*sum);
164 f->SetParLimits(1, -.2, .2);
165 f->SetParameter(1, -0.1);
167 f->SetParLimits(2, 0., 4.e-1);
168 f->SetParameter(2, 2.e-2);
169 if(f->GetNpar() <= 4) return;
171 f->SetParLimits(3, 0., sum);
172 f->SetParameter(3, .1*sum);
174 f->SetParLimits(4, -.3, .3);
175 f->SetParameter(4, 0.);
177 f->SetParLimits(5, 0., 1.e2);
178 f->SetParameter(5, 2.e-1);