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 **************************************************************************/
20 gSystem->Load("libANALYSIS");
21 gSystem->Load("libTPCcalib");
25 gSystem->Load("libANALYSIS");
26 gSystem->Load("libTPCcalib");
30 TFile f("CalibObjectsTrain2.root");
31 AliTPCcalibMaterial *calibMaterial = (AliTPCcalibMaterial *)f->Get("alignMaterial");
36 #include "Riostream.h"
42 #include "THnSparse.h"
50 #include "TGraphErrors.h"
53 #include "AliTPCclusterMI.h"
54 #include "AliTPCseed.h"
55 #include "AliESDVertex.h"
56 #include "AliESDEvent.h"
57 #include "AliESDfriend.h"
58 #include "AliESDInputHandler.h"
59 #include "AliAnalysisManager.h"
61 #include "AliTracker.h"
63 #include "AliTPCCalROC.h"
67 #include "AliTPCcalibMaterial.h"
69 #include "TTreeStream.h"
70 #include "AliTPCTracklet.h"
71 #include "TTimeStamp.h"
72 #include "AliTPCcalibDB.h"
73 #include "AliTPCcalibLaser.h"
74 #include "AliDCSSensorArray.h"
75 #include "AliDCSSensor.h"
77 ClassImp(AliTPCcalibMaterial)
79 AliTPCcalibMaterial::AliTPCcalibMaterial():
80 AliTPCcalibBase("calibMaterial","calibMaterial"),
87 AliTPCcalibMaterial::AliTPCcalibMaterial(const char * name, const char * title):
88 AliTPCcalibBase(name,title),
97 AliTPCcalibMaterial::~AliTPCcalibMaterial(){
100 // class is owner of all histograms
102 if (!fHisMaterial) return;
104 delete fHisMaterialRPhi;
109 Long64_t AliTPCcalibMaterial::Merge(TCollection *li) {
113 TIterator* iter = li->MakeIterator();
114 AliTPCcalibMaterial* cal = 0;
116 while ((cal = (AliTPCcalibMaterial*)iter->Next())) {
117 if (!cal->InheritsFrom(AliTPCcalibMaterial::Class())) {
118 Error("Merge","Attempt to add object of class %s to a %s", cal->ClassName(), this->ClassName());
121 AliTPCcalibMaterial* calib= (AliTPCcalibMaterial*)(cal);
124 if (!fHisMaterial) fHisMaterial=MakeHisto();
125 fHisMaterial->Add(calib->fHisMaterial);
126 fHisMaterialRPhi->Add(calib->fHisMaterialRPhi);
133 void AliTPCcalibMaterial::Process(AliESDEvent *event){
137 const Int_t kMinCl=40;
138 const Float_t kMinRatio=0.7;
139 const Float_t kMaxS=0.05;
140 const Float_t kMinDist=5;
141 const Double_t kStep=1.;
143 // TTreeSRedirector * cstream = GetDebugStreamer();
150 // fill histogram of track prolongations
152 Int_t ntracks = event->GetNumberOfTracks();
154 for (Int_t itrack=0; itrack<ntracks; itrack++){
155 AliESDtrack *track=event->GetTrack(itrack);
156 if (!track) continue;
157 if (track->GetTPCNcls()<=kMinCl) continue;
158 if ((1.+track->GetTPCNcls())/(1.+track->GetTPCNclsF())<=kMinRatio) continue;
159 if ((1.+track->GetTPCnclsS())/(1.+track->GetTPCNcls())>kMaxS) continue;
160 if (!track->GetInnerParam()) continue;
161 if (track->GetKinkIndex(0)!=0) continue;
163 track->GetImpactParameters(dca[0],dca[1]);
164 if (TMath::Abs(dca[0])<kMinDist && TMath::Abs(dca[1])<kMinDist) continue;
165 AliExternalTrackParam param(*(track->GetInnerParam()));
166 if (!AliTracker::PropagateTrackTo(¶m,90,0.0005,10,kTRUE)) continue;
167 Double_t x[5]={0,0,0,TMath::Sqrt(TMath::Abs(param.GetP()))*param.GetSign(),TMath::Sqrt(TMath::Abs(track->GetTPCsignal()))};
170 for (Float_t radius=90; radius>0; radius-=kStep){
171 if (!AliTracker::PropagateTrackTo(¶m,radius,0.0005,kStep*0.5,kTRUE)) break;
172 if (TMath::Abs(param.GetSnp())>0.8) break;
174 Double_t weight=1./TMath::Sqrt(1.+param.GetSnp()*param.GetSnp()+param.GetTgl()*param.GetTgl());
175 fHisMaterial->Fill(x,weight);
176 Double_t r = TMath::Sqrt(x[0]*x[0]+x[1]*x[1]);
177 Double_t phi = TMath::ATan2(x[1],x[0]);
180 fHisMaterialRPhi->Fill(x,weight);
185 THnSparse *AliTPCcalibMaterial::MakeHisto(){
187 // Make track prolongation histogram
191 Int_t bins[5] = {100, 100, 300, 40, 100};
192 Double_t xmin[5] = {-100, -100, -300, -2, 5};
193 Double_t xmax[5] = {100, 100, 300, 2, 33};
194 TString axisName[5]={
201 TString axisTitle[5]={
209 Int_t binsR[5] = {30, 360, 300, 40, 100};
210 Double_t xminR[5] = { 0, -3.14, -300, -2, 5};
211 Double_t xmaxR[5] = {30, 3.14, 300, 2, 33};
212 TString axisNameR[5]={
219 TString axisTitleR[5]={
227 THnSparse *sparse = new THnSparseF("his_Material", "His Material", 5, bins, xmin, xmax);
228 THnSparse *sparseR = new THnSparseF("his_MaterialRPhi", "His Material Rphi", 5, binsR, xminR, xmaxR);
229 for (Int_t iaxis=0; iaxis<5; iaxis++){
230 sparse->GetAxis(iaxis)->SetName(axisName[iaxis]);
231 sparse->GetAxis(iaxis)->SetTitle(axisTitle[iaxis]);
232 sparseR->GetAxis(iaxis)->SetName(axisNameR[iaxis]);
233 sparseR->GetAxis(iaxis)->SetTitle(axisTitleR[iaxis]);
236 fHisMaterialRPhi=sparseR;