First version of the TenderSupplies for TPC/TOF/TRD
[u/mrichter/AliRoot.git] / ANALYSIS / TenderSupplies / AliTOFTenderSupply.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16
17 ///////////////////////////////////////////////////////////////////////////////
18 //                                                                           //
19 // TOF tender: reapply TOF pid on the fly                                    //
20 //                                                                           //
21 ///////////////////////////////////////////////////////////////////////////////
22
23
24 #include <AliLog.h>
25 #include <AliESDEvent.h>
26 #include <AliESDInputHandler.h>
27 #include <AliAnalysisManager.h>
28 #include <AliESDpid.h>
29 #include <AliTender.h>
30
31 #include "AliTOFcalibESD.h"
32 #include "AliTOFT0makerANA.h"
33
34 #include "AliTOFTenderSupply.h"
35
36
37 AliTOFTenderSupply::AliTOFTenderSupply() :
38   AliTenderSupply(),
39   fESDpid(0x0),
40   fTOFesdCalib(0x0),
41   fTOFT0maker(0x0),
42   fTOFres(130.)
43 {
44   //
45   // default ctor
46   //
47 }
48
49 //_____________________________________________________
50 AliTOFTenderSupply::AliTOFTenderSupply(const char *name, const AliTender *tender) :
51   AliTenderSupply(name,tender),
52   fESDpid(0x0),
53   fTOFesdCalib(0x0),
54   fTOFT0maker(0x0),
55   fTOFres(130.)
56 {
57   //
58   // named ctor
59   //
60 }
61
62 //_____________________________________________________
63 void AliTOFTenderSupply::Init()
64 {
65   //
66   // Initialise TOF tender
67   //
68
69
70   //
71   // Setup PID object
72   //
73
74   // Check if another detector already created the esd pid object
75   // if not we create it and set it to the ESD input handler
76   fESDpid=fTender->GetESDhandler()->GetESDpid();
77   if (!fESDpid) {
78     fESDpid=new AliESDpid;
79     fTender->GetESDhandler()->SetESDpid(fESDpid);
80   }
81
82   //Set proper resolution in case of MC
83   AliAnalysisManager *mgr=AliAnalysisManager::GetAnalysisManager();
84   if (mgr->GetMCtruthEventHandler())   fESDpid->GetTOFResponse().SetTimeResolution(80.);
85   
86   
87   //
88   // Create TOF calibration classes
89   //
90   if (!fTOFesdCalib) fTOFesdCalib=new AliTOFcalibESD;
91   if (!fTOFT0maker) {
92     fTOFT0maker = new AliTOFT0makerANA(fESDpid);
93     fTOFT0maker->SetTimeResolution(fTOFres); // set TOF resolution for the PID 
94   }
95 }
96
97 //_____________________________________________________
98 void AliTOFTenderSupply::ProcessEvent()
99 {
100   //
101   // Reapply pid information
102   //
103
104   //no corrections for MC
105   AliAnalysisManager *mgr=AliAnalysisManager::GetAnalysisManager();
106   if (mgr->GetMCtruthEventHandler()) return;
107
108   AliESDEvent *event=fTender->GetEvent();
109   if (!event) return;
110
111   //recalculate TOF signal
112   if (fTender->RunChanged()){
113     fTOFesdCalib->Init(fTender->GetRun());
114   }
115   fTOFesdCalib->CalibrateESD(event);
116   
117   //Calculate event time zero
118   Double_t* calcolot0;
119   calcolot0=fTOFT0maker->RemakePID(event); // calculate T0-TOF(T0-FILL) and
120   Double_t t0best=calcolot0[0];  // T0-Event = (T0-TOF .OR. T0-FILL) <- This is what you asked me
121   event->SetT0(t0best);
122   
123   //
124   // recalculate PID probabilities
125   //
126   
127   Int_t ntracks=event->GetNumberOfTracks();
128   for(Int_t itrack = 0; itrack < ntracks; itrack++){
129     fESDpid->MakeTOFPID(event->GetTrack(itrack),0);
130   }
131   
132 }