1 #include "AliNanoAODTrackMapping.h"
4 #include "TObjString.h"
9 ClassImp(AliNanoAODTrackMapping)
11 AliNanoAODTrackMapping * AliNanoAODTrackMapping::fInstance = 0;
12 TString AliNanoAODTrackMapping::fMappingString = "";
14 AliNanoAODTrackMapping::AliNanoAODTrackMapping() :
42 fintegratedLenght(-1),
56 AliNanoAODTrackMapping::AliNanoAODTrackMapping(const char * mappingString) :
84 fintegratedLenght(-1),
95 //std::cout << "Standard construct " << mappingString << std::endl;
98 AliWarning("Cannot instantiate this class twice");
99 if (fMappingString != mappingString) AliFatal ("Attempt to initialize with a differnt mapping string");
102 fMappingString = mappingString;
104 static const char * validatorString[] = {"pt", "theta", "phi", "chi2perNDF", "posx", "posy", "posz", "covmat", "posDCAx","posDCAy", "pDCAx", "pDCAy", "pDCAz", "RAtAbsorberEnd", "TPCnclsF", "TPCNCrossedRows", "TrackPhiOnEMCal", "TrackEtaOnEMCal", "TrackPtOnEMCal", "ITSsignal", "TPCsignal", "TPCsignalTuned", "TPCsignalN", "TPCmomentum", "TPCTgl", "TOFsignal", "integratedLenght", "TOFsignalTuned", "HMPIDsignal", "HMPIDoccupancy", "TRDsignal", "TRDChi2", "TRDnSlices", 0};
106 // Tokenize list of variables
107 TString varString(mappingString);
108 TObjArray * vars = varString.Tokenize(",");
109 // Allocate the internal array, based on size of the tokens array
110 fSize = vars->GetSize();
111 // Loop over all tokens, check sanity of the vars,
113 TObjString *token = 0;
115 while ((token = (TObjString*) it.Next())) {
116 TString var = token->GetString().Strip(TString::kBoth, ' '); // remove trailing and leading spaces
117 // Check if string ...
118 // ... is in the allowed list
119 Bool_t isValid = kFALSE;
120 Int_t ivalidator = 0;
121 while (validatorString[ivalidator]) {
122 if(var == validatorString[ivalidator++]) isValid = kTRUE;
125 if (!( isValid || var.BeginsWith("cst")) ) AliFatal(Form("Invalid var [%s]", var.Data()));
126 // If the variable is valid, add it to the list. We have to create a new TObjstring because otherwise it is deleted with the tokens
127 if (var == "pt" ) fPt = index;
128 else if(var == "phi" ) fPhi = index;
129 else if(var == "theta" ) fTheta = index; // FIXME: consider adding a "eta" variable explicitly (possibly with a check for theta aldready there), so that you don't have to carry over also "theta" in case you only need eta.
130 else if(var == "chi2perNDF" ) fChi2PerNDF = index;
131 else if(var == "posx" ) fPosX = index;
132 else if(var == "posy" ) fPosY = index;
133 else if(var == "posz" ) fPosZ = index;
134 else if(var == "pDCAx" ) fPDCAX = index;
135 else if(var == "pDCAy" ) fPDCAY = index;
136 else if(var == "pDCAz" ) fPDCAZ = index;
137 else if(var == "posDCAx" ) fPosDCAx = index;
138 else if(var == "posDCAy" ) fPosDCAy = index;
139 else if(var == "RAtAbsorberEnd" ) fRAtAbsorberEnd = index;
140 else if(var == "TPCncls" ) fTPCncls = index;
141 else if(var == "id" ) fid = index;
142 else if(var == "TPCnclsF" ) fTPCnclsF = index;
143 else if(var == "TPCNCrossedRows" ) fTPCNCrossedRows = index;
144 else if(var == "TrackPhiOnEMCal" ) fTrackPhiOnEMCal = index;
145 else if(var == "TrackEtaOnEMCal" ) fTrackEtaOnEMCal = index;
146 else if(var == "TrackPtOnEMCal" ) fTrackPtOnEMCal = index;
147 else if(var == "ITSsignal" ) fITSsignal = index;
148 else if(var == "TPCsignal" ) fTPCsignal = index;
149 else if(var == "TPCsignalTuned" ) fTPCsignalTuned = index;
150 else if(var == "TPCsignalN" ) fTPCsignalN = index;
151 else if(var == "TPCmomentum" ) fTPCmomentum = index;
152 else if(var == "TPCTgl" ) fTPCTgl = index;
153 else if(var == "TOFsignal" ) fTOFsignal = index;
154 else if(var == "integratedLenght" ) fintegratedLenght = index;
155 else if(var == "TOFsignalTuned" ) fTOFsignalTuned = index;
156 else if(var == "HMPIDsignal" ) fHMPIDsignal = index;
157 else if(var == "HMPIDoccupancy" ) fHMPIDoccupancy = index;
158 else if(var == "TRDsignal" ) fTRDsignal = index;
159 else if(var == "TRDChi2" ) fTRDChi2 = index;
160 else if(var == "TRDnSlices" ) fTRDnSlices = index;
161 else if(var == "covmat" ) AliFatal("cov matrix To be implemented");
163 fMapCstVar[var] = index;
164 std::cout << "ADDING " << index << " " << fMapCstVar[var] << " " << var.Data() << std::endl;
168 // init kin vars to 0
172 if(vars) vars->Delete();
178 Int_t AliNanoAODTrackMapping::GetVarIndex(TString varName){
180 if (varName == "pt" ) return fPt ;
181 else if(varName == "phi" ) return fPhi ;
182 else if(varName == "theta" ) return fTheta ;
183 else if(varName == "chi2perNDF" ) return fChi2PerNDF ;
184 else if(varName == "posx" ) return fPosX ;
185 else if(varName == "posy" ) return fPosY ;
186 else if(varName == "posz" ) return fPosZ ;
187 else if(varName == "pDCAx" ) return fPDCAX ;
188 else if(varName == "pDCAy" ) return fPDCAY ;
189 else if(varName == "pDCAz" ) return fPDCAZ ;
190 else if(varName == "posDCAx" ) return fPosDCAx ;
191 else if(varName == "posDCAy" ) return fPosDCAy ;
192 else if(varName == "RAtAbsorberEnd" ) return fRAtAbsorberEnd ;
193 else if(varName == "TPCncls" ) return fTPCncls ;
194 else if(varName == "id" ) return fid ;
195 else if(varName == "TPCnclsF" ) return fTPCnclsF ;
196 else if(varName == "TPCNCrossedRows" ) return fTPCNCrossedRows ;
197 else if(varName == "TrackPhiOnEMCal" ) return fTrackPhiOnEMCal ;
198 else if(varName == "TrackEtaOnEMCal" ) return fTrackEtaOnEMCal ;
199 else if(varName == "TrackPtOnEMCal" ) return fTrackPtOnEMCal ;
200 else if(varName == "ITSsignal" ) return fITSsignal ;
201 else if(varName == "TPCsignal" ) return fTPCsignal ;
202 else if(varName == "TPCsignalTuned" ) return fTPCsignalTuned ;
203 else if(varName == "TPCsignalN" ) return fTPCsignalN ;
204 else if(varName == "TPCmomentum" ) return fTPCmomentum ;
205 else if(varName == "TPCTgl" ) return fTPCTgl ;
206 else if(varName == "TOFsignal" ) return fTOFsignal ;
207 else if(varName == "integratedLenght" ) return fintegratedLenght ;
208 else if(varName == "TOFsignalTuned" ) return fTOFsignalTuned ;
209 else if(varName == "HMPIDsignal" ) return fHMPIDsignal ;
210 else if(varName == "HMPIDoccupancy" ) return fHMPIDoccupancy ;
211 else if(varName == "TRDsignal" ) return fTRDsignal ;
212 else if(varName == "TRDChi2" ) return fTRDChi2 ;
213 else if(varName == "TRDnSlices" ) return fTRDnSlices ;
215 std::map<TString,Int_t>::iterator it = fMapCstVar.find(varName); // FIXME: do I need to delete "it"?
216 if(it != fMapCstVar.end()) {
225 const char * AliNanoAODTrackMapping::GetVarName(Int_t index) const {
226 // Get Variable name from index
227 if (index == fPt ) return "pt" ;
228 else if(index == fPhi ) return "phi" ;
229 else if(index == fTheta ) return "theta" ;
230 else if(index == fChi2PerNDF ) return "chi2perNDF" ;
231 else if(index == fPosX ) return "posx" ;
232 else if(index == fPosY ) return "posy" ;
233 else if(index == fPosZ ) return "posz" ;
234 else if(index == fPDCAX ) return "pDCAx" ;
235 else if(index == fPDCAY ) return "pDCAy" ;
236 else if(index == fPDCAZ ) return "pDCAz" ;
237 else if(index == fPosDCAx ) return "posDCAx" ;
238 else if(index == fPosDCAy ) return "posDCAy" ;
239 else if(index == fRAtAbsorberEnd ) return "RAtAbsorberEnd" ;
240 else if(index == fTPCncls ) return "TPCncls" ;
241 else if(index == fid ) return "id" ;
242 else if(index == fTPCnclsF ) return "TPCnclsF" ;
243 else if(index == fTPCNCrossedRows ) return "TPCNCrossedRows" ;
244 else if(index == fTrackPhiOnEMCal ) return "TrackPhiOnEMCal" ;
245 else if(index == fTrackEtaOnEMCal ) return "TrackEtaOnEMCal" ;
246 else if(index == fTrackPtOnEMCal ) return "TrackPtOnEMCal" ;
247 else if(index == fITSsignal ) return "ITSsignal" ;
248 else if(index == fTPCsignal ) return "TPCsignal" ;
249 else if(index == fTPCsignalTuned ) return "TPCsignalTuned" ;
250 else if(index == fTPCsignalN ) return "TPCsignalN" ;
251 else if(index == fTPCmomentum ) return "TPCmomentum" ;
252 else if(index == fTPCTgl ) return "TPCTgl" ;
253 else if(index == fTOFsignal ) return "TOFsignal" ;
254 else if(index == fintegratedLenght ) return "integratedLenght" ;
255 else if(index == fTOFsignalTuned ) return "TOFsignalTuned" ;
256 else if(index == fHMPIDsignal ) return "HMPIDsignal" ;
257 else if(index == fHMPIDoccupancy ) return "HMPIDoccupancy" ;
258 else if(index == fTRDsignal ) return "TRDsignal" ;
259 else if(index == fTRDChi2 ) return "TRDChi2" ;
260 else if(index == fTRDnSlices ) return "TRDnSlices" ;
261 if (index >= fSize) {
262 AliWarning(Form("Invalid index %d", index));
263 return "<Invalid index>";
266 std::map<TString,Int_t>::const_iterator it ;
267 for (it = fMapCstVar.begin(); it != fMapCstVar.end(); ++it) {
268 if(it->second == index) return it->first.Data();
271 return "<YOU SHOULD NEVER GET THIS>";// Should never happen
274 void AliNanoAODTrackMapping::Print(const Option_t* /*opt*/) const {
275 std::cout << "Printing AliNanoAODTrackMapping" << std::endl;
277 for (Int_t ivar = 0; ivar<fSize; ivar++) {
278 std::cout << " " << ivar << " " << GetVarName(ivar) << std::endl;
284 void AliNanoAODTrackMapping::LoadInstance() {
286 if(!fInstance) { // try to get it from the current file
287 Printf("AliNanoAODTrackMapping::LoadInstance() instance from file");
288 // Try to get it from the UserInfo of the AOD tree; FIXME: shall we try to probe the Analysis manager?
289 // FIXME: to be implmented Otherwise, try to get it from the esdTree
290 TTree * tree = (TTree*)gDirectory->Get("aodTree") ? (TTree*)gDirectory->Get("aodTree"): (TTree*)gFile->Get("aodTree");
292 std::cout << "NO TREE?" << std::endl;
299 tree->GetUserInfo()->Print();
300 fInstance = new AliNanoAODTrackMapping(*((AliNanoAODTrackMapping*) tree->GetUserInfo()->FindObject("AliNanoAODTrackMapping")));
301 // Otherwise try to get it from the current directory
302 std::cout << " from tree: " << fInstance << std::endl;
305 if(!fInstance) fInstance = (AliNanoAODTrackMapping *) gDirectory->Get("AliNanoAODTrackMapping");
307 Printf("AliNanoAODTrackMapping::LoadInstance(): Not initialized and cannot find in current file");