]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/T0/AliT0AnalysisTaskQA.cxx
Moving PWG1 to PWGPP
[u/mrichter/AliRoot.git] / PWGPP / T0 / AliT0AnalysisTaskQA.cxx
1 #include "TChain.h"
2 #include "TTree.h"
3 #include "TH1F.h"
4 #include "TF1.h"
5 #include "TH2F.h"
6 #include "TCanvas.h"
7 #include "TObjArray.h"
8
9 #include "AliAnalysisTask.h"
10 #include "AliAnalysisManager.h"
11
12 #include "AliESDEvent.h"
13 #include "AliESDInputHandler.h"
14
15 #include "AliT0AnalysisTaskQA.h"
16
17 //#include "AliCDBMetaData.h"
18 //#include "AliCDBId.h"
19 //#include "AliCDBEntry.h"
20 //#include "AliCDBManager.h"
21 //#include "AliCDBStorage.h"
22
23 // Task should calculate channels offset 
24 // Authors: Alla 
25
26 ClassImp(AliT0AnalysisTaskQA)
27 //________________________________________________________________________
28 AliT0AnalysisTaskQA::AliT0AnalysisTaskQA() 
29   : AliAnalysisTaskSE(),  fESD(0x0), fTzeroObject(0x0),
30   fTzeroORA(0x0), fTzeroORC(0x0), fResolution(0x0), fTzeroORAplusORC(0x0),
31     fRunNumber(0),fTimeVSAmplitude(0x0),fCFDVSPmtId(0x0),fSPDVertexVST0Vertex(0x0),
32   fOrAvsNtracks(0), fOrCvsNtracks(0), fT0vsNtracks(0),
33   fEffAC(0), fEffA(0), fEffC(0), ftracksEffSPD(0)
34   
35 {
36   // Constructor
37
38   // Define input and output slots here
39   // Input slot #0 works with a TChain
40
41 // ########### NEVER define slots in the IO constructor
42 //  DefineInput(0,  TChain::Class());
43 //  DefineOutput(1, TObjArray::Class());
44 }
45
46
47 //________________________________________________________________________
48 AliT0AnalysisTaskQA::AliT0AnalysisTaskQA(const char *name) 
49   : AliAnalysisTaskSE(name),  fESD(0x0), fTzeroObject(0x0),
50   fTzeroORA(0x0), fTzeroORC(0x0), fResolution(0x0), fTzeroORAplusORC(0x0),
51     fRunNumber(0),fTimeVSAmplitude(0x0),fCFDVSPmtId(0x0),fSPDVertexVST0Vertex(0x0),
52     fOrAvsNtracks(0), fOrCvsNtracks(0), fT0vsNtracks(0),
53    fEffAC(0), fEffA(0), fEffC(0), ftracksEffSPD(0)
54
55 {
56   // Constructor
57   // Define input and output slots here
58   // Input slot #0 works with a TChain
59   DefineInput(0, TChain::Class());
60   DefineOutput(1, TObjArray::Class());
61   // Output slot #0 id reserved by the base class for AOD
62   // Output slot #1 writes into a TH1 container
63 }
64
65 //________________________________________________________________________
66 AliT0AnalysisTaskQA::~AliT0AnalysisTaskQA() 
67 {
68   // Destructor
69   // printf("AliT0CalibOffsetChannels~AliT0CalibOffsetChannels() ");
70   if (!AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fTzeroObject; // This deletes everything ...
71 }
72
73 //------------------------------------------------------------------
74 void AliT0AnalysisTaskQA::UserCreateOutputObjects()
75 {
76   // Create histograms
77  fTimeVSAmplitude = new TH2F*[NPMT0];
78
79  for (Int_t i=0; i<NPMT0; i++) {
80     fTimeVSAmplitude[i]= new TH2F (Form("fTimeVSAmplitude%d",i+1),"fTimeVsAmplitude",500, 0, 50,1500,1000,7000);
81   }
82
83   fTzeroORAplusORC = new TH1F("fTzeroORAplusORC","ORA+ORC /2",100,-2000,2000);   //or A plus or C 
84   fResolution      = new TH1F("fResolution","fResolution",100,-2000,2000);// or A minus or C spectrum
85   fTzeroORA        = new TH1F("fTzeroORA","fTzeroORA",100,-2000,2000);// or A spectrum
86   fTzeroORC        = new TH1F("fTzeroORC","fTzeroORC",100,-2000,2000);// or C spectrum
87   fCFDVSPmtId      = new TH2F("fCFDVSPmtId","fCFDVSPmtId",24,0,24,1500,1000,7000);  // 
88   fSPDVertexVST0Vertex = new TH2F("fSPDVertexVST0Vertex","fSPDVertexVST0Vertex",30,-30,30,30,-30,30);
89   fOrAvsNtracks    = new TH2F("fAvstracks", "Avstracks",200, 0, 1000, 500, -1000, 1000);
90   fOrCvsNtracks    = new TH2F("fCvstracks", "Cvstracks",200, 0, 1000, 500, -1000, 1000);
91   fT0vsNtracks     = new TH2F("fT0ACvstrackles", "T0ACvstracks",200, 0, 1000, 500, -1000, 1000); 
92    fEffAC = new TH1F("EffAC","T0Eff ", 200, 0, 1000);
93    fEffA = new TH1F("EffA","T0AEff ", 200, 0, 1000);
94    fEffC = new TH1F("EffC","T0CEff ", 200, 0, 1000);
95    ftracksEffSPD= new TH1F("ftracksEffSPD","SPDeff", 200, 0, 1000);
96
97   fTzeroObject     = new TObjArray();
98   fTzeroObject->SetOwner(kTRUE);
99   
100   for (Int_t i=0; i<24; i++)
101     fTzeroObject->AddAtAndExpand(fTimeVSAmplitude[i],i);
102
103   fTzeroObject->AddAtAndExpand(fCFDVSPmtId,24);
104   fTzeroObject->AddAtAndExpand(fSPDVertexVST0Vertex,25);
105   fTzeroObject->AddAtAndExpand(fTzeroORAplusORC, 26);
106   fTzeroObject->AddAtAndExpand(fResolution, 27);
107   fTzeroObject->AddAtAndExpand(fTzeroORA, 28);
108   fTzeroObject->AddAtAndExpand(fTzeroORC, 29);
109   fTzeroObject->AddAtAndExpand(fT0vsNtracks, 30);
110   fTzeroObject->AddAtAndExpand(fOrAvsNtracks,31);
111   fTzeroObject->AddAtAndExpand(fOrCvsNtracks, 32);
112   fTzeroObject->AddAtAndExpand(fEffC, 33);
113   fTzeroObject->AddAtAndExpand(fEffA, 34);
114   fTzeroObject->AddAtAndExpand(fEffAC, 35);
115   fTzeroObject->AddAtAndExpand(ftracksEffSPD, 36);
116
117   PostData(1, fTzeroObject);
118   // Called once
119 }
120
121 //________________________________________________________________________
122 void AliT0AnalysisTaskQA::UserExec(Option_t *) 
123 {
124   // Main loop
125   // Called for each event
126
127   // Post output data.
128   fESD = dynamic_cast<AliESDEvent*>(InputEvent());
129   if (!fESD) {
130     printf("ERROR: fESD not available\n");
131     return;
132   }
133
134   fRunNumber =  fESD->GetRunNumber() ; 
135
136   const Double32_t* time = fESD->GetT0time();
137   const Double32_t* amplitude = fESD->GetT0amplitude();
138
139  
140   for (Int_t i=0; i<24; i++) {
141     if(time[i]<9999 &&abs(time[i])>1e-8 && amplitude[i]<9999&&abs(amplitude[i])>1e-8 )
142       {
143         //      cout<<"time "<<time[i]<<" amplitude "<<amplitude[i]<<endl;
144         fTimeVSAmplitude[i]->Fill(amplitude[i],time[i]);
145         fCFDVSPmtId->Fill(i,time[i]);
146       }
147   }
148
149   const Double32_t* mean = fESD->GetT0TOF();
150   Double32_t orA = mean[1];
151   Double32_t orC = mean[2];
152   Int_t ntracks = fESD->GetNumberOfTracks(); 
153
154   if(orA<99999){
155     fTzeroORA->Fill(orA);
156     fOrAvsNtracks->Fill(ntracks, orA);
157     fEffA->Fill(ntracks);
158   }
159   if(orC<99999) {
160     fTzeroORC->Fill(orC);
161     fOrCvsNtracks->Fill(ntracks, orC);
162     fEffC->Fill(ntracks);
163    }
164   if(orA<99999 && orC<99999) {
165     fResolution->Fill((orA-orC)/2.);
166     fTzeroORAplusORC->Fill(mean[0]);
167     fEffAC->Fill(ntracks);
168     fT0vsNtracks->Fill(ntracks, mean[0]);
169   }
170   
171   Double32_t t0vertex = fESD->GetT0zVertex();
172   Double32_t esdzvertex;
173   const AliESDVertex * esdvertex = fESD->GetPrimaryVertex();
174   Int_t nofcontrib=-1;
175   if(esdvertex) {
176     nofcontrib=esdvertex->GetNContributors();
177     if(nofcontrib>0)    ftracksEffSPD->Fill(ntracks);
178     if(esdvertex && t0vertex<999)
179       {
180         if(nofcontrib>0)
181           {
182             esdzvertex=esdvertex->GetZv();
183             fSPDVertexVST0Vertex->Fill(t0vertex,esdzvertex);
184           }
185       }
186   }
187   PostData(1, fTzeroObject);
188 }      
189  //________________________________________________________________________
190 void AliT0AnalysisTaskQA::Terminate(Option_t *) 
191 {
192   
193    // Called once at the end of the query
194 }