1 ////////////////////////////////////////////////////////////////////////////////
2 // AliAnalysisTaskITSTPCalignment
3 // Runs the relative ITS TPC alignment procedure and TPC vdrift calib
4 // Origin: Mikolaj Krzewicki, mikolaj.krzewicki@cern.ch
5 ////////////////////////////////////////////////////////////////////////////////
10 #include "AliAnalysisTask.h"
11 #include "AliAnalysisManager.h"
12 #include "AliESDEvent.h"
13 #include "AliESDInputHandler.h"
14 #include "AliRelAlignerKalman.h"
15 #include "AliRelAlignerKalmanArray.h"
16 #include "AliAnalysisTaskITSTPCalignment.h"
18 ClassImp(AliAnalysisTaskITSTPCalignment)
20 //________________________________________________________________________
21 AliAnalysisTaskITSTPCalignment::AliAnalysisTaskITSTPCalignment():
29 fTimeMatchingTolerance(20),
35 //________________________________________________________________________
36 AliAnalysisTaskITSTPCalignment::AliAnalysisTaskITSTPCalignment(const char *name):
37 AliAnalysisTask(name,name),
44 fTimeMatchingTolerance(20),
49 // Define input and output slots here
50 // Input slot #0 works with a TChain
51 DefineInput(0, TChain::Class());
52 DefineOutput(0, AliRelAlignerKalmanArray::Class());
53 DefineOutput(1, TList::Class());
56 //________________________________________________________________________
57 void AliAnalysisTaskITSTPCalignment::ConnectInputData(Option_t *)
60 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
63 Printf("ERROR: Could not read chain from input slot 0");
67 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
70 Printf("ERROR: Could not get ESDInputHandler");
73 fESD = esdH->GetEvent();
77 //________________________________________________________________________
78 void AliAnalysisTaskITSTPCalignment::CreateOutputObjects()
80 // Create output objects
83 fArray = new AliRelAlignerKalmanArray("ITSTPCalignmentArray");
84 fArray->SetSaveInterval(fSaveInterval);
85 fArray->SetTimeMatchingTolerance(fTimeMatchingTolerance);
87 fYZResidualsHist = new TH2F("fYZResidualsHist", "YZ residuals", 50, -0.5, 0.5, 50, -2., 2. );
88 fPLResidualsHist = new TH2F("fPLResidualsHist", "sin(phi) tan(lambda) residuals", 50, -.05, 0.05, 50, -0.05, 0.05 );
90 fListOfHistos = new TList();
91 fListOfHistos->Add(fYZResidualsHist);
92 fListOfHistos->Add(fPLResidualsHist);
95 //________________________________________________________________________
96 void AliAnalysisTaskITSTPCalignment::Exec(Option_t *)
99 // Called for each event
102 Printf("ERROR: fESD not available");
106 AliRelAlignerKalman* aligner = fArray->GetAligner();
108 Int_t lastrunnumber = aligner->GetRunNumber();
109 UInt_t currentTimeStamp = fESD->GetTimeStamp();
111 //for a new run reset TPC errors
112 if (lastrunnumber != fESD->GetRunNumber())
114 aligner->ResetTPCparamsCovariance();
115 fArray->SetCurrentTimeBin(currentTimeStamp);
118 //if time jumps back reset all
119 if (currentTimeStamp < aligner->GetTimeStamp())
122 fArray->SetCurrentTimeBin(currentTimeStamp);
125 //Update the parmeters
126 if (fArray->AddCosmicEvent(fESD))
129 //fill the QA histograms
130 TArrayI trackTArrITS(1);
131 TArrayI trackTArrTPC(1);
132 if (aligner->FindCosmicTrackletNumbersInEvent(
133 trackTArrITS, trackTArrTPC, fESD ))
136 const AliExternalTrackParam* pconstparams1;
137 const AliExternalTrackParam* pconstparams2;
138 AliExternalTrackParam params1;
139 AliExternalTrackParam params2;
141 ////////////////////////////////
142 for (Int_t i=0;i<trackTArrITS.GetSize();i++)
145 ptrack = fESD->GetTrack(trackTArrITS[i]);
146 pconstparams1 = ptrack->GetOuterParam();
147 if (!pconstparams1) continue;
148 params1 = *pconstparams1; //make copy to be safe
151 ptrack = fESD->GetTrack(trackTArrTPC[i]);
152 pconstparams2 = ptrack->GetInnerParam();
153 if (!pconstparams2) continue;
154 params2 = *pconstparams2; //make copy
155 params2.Rotate(params1.GetAlpha());
156 params2.PropagateTo( params1.GetX(), aligner->GetMagField() );
158 Float_t resy = params2.GetY() - params1.GetY();
159 Float_t resz = params2.GetZ() - params1.GetZ();
160 Float_t ressnp = params2.GetSnp() - params1.GetSnp();
161 Float_t restgl = params2.GetTgl() - params1.GetTgl();
162 fYZResidualsHist->Fill(resy,resz);
163 fPLResidualsHist->Fill(ressnp,restgl);
171 PostData(1, fListOfHistos);
174 //________________________________________________________________________
175 void AliAnalysisTaskITSTPCalignment::Terminate(Option_t *)
177 // Called once at the end of the query
178 fArray->Merge(new TList()); //final cleanup