]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AddTaskMuonAlignment.C
Final TOF DAs
[u/mrichter/AliRoot.git] / MUON / AddTaskMuonAlignment.C
CommitLineData
4d610fd5 1/// \ingroup macros
2/// \file AddTaskMuonAlignment.C
3/// \brief Macro to add an AliMUONAlignmentTask to an analysis train
4///
5/// \author Javier Castillo, CEA/Saclay - Irfu/SPhN
516043cd 6/// \author Hugo Pereira Da Costa, CEA/Saclay - Irfu/SPhN
4d610fd5 7
5517bdec 8/**
9AliMUONAlignmentTask calculates alignment correction for the muon spectrometer
10based on reconstructed tracks, either with or without magnetic field. It uses AliMillePede2
11internally for alignment, and AliMillePedeRecords for storing the derivatives.
12
13The task has two ways of operation
14
151/ Full mode:
16This corresponds to flags: readRecords = kFALSE, doAlignment = kTRUE, writeRecords = kFALSE
17- reads tracks from an ESD,
18- calculates all derivatives needed to minimize both the tracks
19 and the alignment parameters
20- fill and invert the (large) matrix corresponding to the global chisquare minimization
21- write the resulting alignment parameters, on top of the initiali geometry, in a new CDB
22
23Note that writeRecords can also be set to kTRUE. This will output all derivatives to a special
24branch in an AOD for re-running the alignment with no need to process the tracks (see below)
25
262/ Split mode:
27The task must run twice.
28First pass with flags: readRecords = kFALSE, writeRecords = kTRUE, doAlignment = kFALSE
29This
30- reads tracks from an ESD,
31- calculates all derivatives needed to minimize both the tracks
32 and the alignment parameters
33- stores them in a special branch of the output AOD, named "records",
34 and containing a TClonesArray of objects typed "AliMillePedeRecord"
35
36Second pass with flags: readRecords = kTRUE, doAlignment = kTRUE
37- reads the AliMillePedeRecords stored in the AOD (or a collection of AODs)
38- fill and invert the (large) matrix corresponding to the global chisquare minimization
39- write the resulting alignment parameters, on top of the initiali geometry, in a new CDB
40
41The split mode is usefull for running on the grid:
42- the first pass can be done with multiple jobs (one per ESD chunk) in parallel.
43- the second pass must be done one on all created AODs, in a single shot, possibly locally
44
45When performing the alignment (doAlignment=kTRUE), one can "fix", "group", or "constrain"
46detector's alignment parameters in order to ease the inversion.
47
48One can redo the second pass as many times as needed, changing these "fixed/group/constrained" parameters,
49without re-processing the ESD tracks.
50*/
51
feb66c4c 52#include "AliAnalysisManager.h"
53#include "AliMUONAlignmentTask.h"
54#include "AliVEventHandler.h"
55
516043cd 56AliMUONAlignmentTask *AddTaskMuonAlignment(
57 TString oldAlignmentOCDB,
58 TString newAlignmentOCDB,
59 Bool_t doAlignment = kTRUE,
60 Bool_t writeRecords = kTRUE,
61 Bool_t readRecords = kFALSE
62 )
4d610fd5 63{
4d610fd5 64
516043cd 65 /// Creates a Muon Alignment task and adds it to the analysis manager.
4d610fd5 66
516043cd 67 // Get the pointer to the existing analysis manager via the static access method.
68 AliAnalysisManager *analysisManager = AliAnalysisManager::GetAnalysisManager();
69 if( !analysisManager )
70 {
71 ::Error("AddTaskMuonAlignment", "No analysis manager to connect to.");
72 return NULL;
73 }
4d610fd5 74
516043cd 75 // get input event handler and check type
76 TString type = analysisManager->GetInputEventHandler()->GetDataType();
77 if( readRecords )
78 {
4d610fd5 79
516043cd 80 // when reading records, AOD are required
81 if (!type.Contains( "AOD" ) )
82 {
83 Error("AddTaskMuonRefit", "AOD input handler needed!");
84 return NULL;
85 }
4d610fd5 86
516043cd 87 } else {
4d610fd5 88
516043cd 89 // ESDs are required otherwise
90 if( !type.Contains( "ESD" ) )
91 {
92 Error("AddTaskMuonRefit", "AOD input handler needed!");
93 return NULL;
94 }
95
96 }
97
98 // Create the task, add it to the manager and configure it.
99 AliMUONAlignmentTask *muonAlign = new AliMUONAlignmentTask( "AliMUONAlignmentTask" );
100 muonAlign->SetOldAlignStorage( oldAlignmentOCDB );
101 muonAlign->SetNewAlignStorage( newAlignmentOCDB );
102 muonAlign->SetLoadOCDBOnce( kTRUE );
103 muonAlign->SetReadRecords( readRecords );
104 muonAlign->SetDoAlignment( doAlignment );
105 muonAlign->SetWriteRecords( writeRecords );
106 muonAlign->SetMergeAlignmentCDBs( kTRUE );
516043cd 107
108 analysisManager->AddTask(muonAlign);
109
110 // connect input
111 analysisManager->ConnectInput(muonAlign, 0, analysisManager->GetCommonInputContainer());
112
113 // when writting records, also connect output
114 if( writeRecords )
115 { analysisManager->ConnectOutput(muonAlign, 0, analysisManager->GetCommonOutputContainer()); }
116
117 // return created task
118 return muonAlign;
119
120}