//* provided "as is" without express or implied warranty. *
//**************************************************************************
-/** @file AliHLTTPCTrackHistoComponent.cxx
- @author Gaute Ovrebekk, Matthias Richter
- @date
- @brief A histogram component with track and associated cluster properties
-*/
-
-#if __GNUC__>= 3
-using namespace std;
-#endif
+/// @file AliHLTTPCTrackHistoComponent.cxx
+/// @author Gaute Ovrebekk, Matthias Richter, Kalliopi Kanaki
+/// @date
+/// @brief A histogram component with track and associated cluster properties
+///
#include "AliHLTTPCTrackHistoComponent.h"
#include "AliHLTTPCTransform.h"
#include "TObjString.h"
#include "TObjArray.h"
-
/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTTPCTrackHistoComponent)
void AliHLTTPCTrackHistoComponent::GetOutputDataSize( unsigned long& constBase, double& inputMultiplier ){
// see header file for class documentation
- constBase = 0;
+ constBase = 5000;
inputMultiplier = 1;// XXX TODO: Find more realistic value
}
fClusters = new TNtuple("fClusters", "fClusters", "charge:qmax:residualY:residualZ");
fTracks = new TNtuple("fTracks", "fTracks", "pt:eta:psi:nclusters");
- fClusters->SetCircular(5000);
- fTracks->SetCircular(5000);
+ fClusters->SetCircular(fBufferSize);
+ fTracks->SetCircular(fBufferSize);
fMultiplicity = new TH1F("fMultiplicity", "Track multiplicity per event", 1000, 0, 1000);
fMeanMultiplicity = new TH1F("fMeanMultiplicity", "Mean track multiplicity vs. #evt", 10000/fEvtMod, 0, 10000);
if (iResult>=0) iResult=ConfigureFromCDBTObjString(fgkOCDBEntry);
// configure from the command line parameters if specified
- if (iResult>=0 && argc>0)
- iResult=ConfigureFromArgumentString(argc, argv);
+ if (iResult>=0 && argc>0) iResult=ConfigureFromArgumentString(argc, argv);
return iResult;
}
fNEvents++;
const AliHLTComponentBlockData *iter = NULL;
+
+ for(int i=0; i<36; i++){
+ for(int j=0; j<6; j++){
+ fClustersArray[i][j] = NULL;
+ fNSpacePoints[i][j] = 0;
+ }
+ }
//----------------- loop over cluster blocks ---------------------//
AliHLTTPCSpacePointData *clusters = (AliHLTTPCSpacePointData*)clusterData->fSpacePoints;
if(fClustersArray[minSlice][minPartition] != NULL){
- //delete(fClustersArray[minSlice][minPartition]);
+ delete(fClustersArray[minSlice][minPartition]); // ???????
fClustersArray[minSlice][minPartition] = NULL;
}
void AliHLTTPCTrackHistoComponent::ReadTracks(const AliHLTComponentBlockData* iter,Int_t &tt){
// see header file for class documentation
- AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(*iter);
+ //AliHLTUInt8_t slice = AliHLTTPCDefinitions::GetMinSliceNr(*iter);
Int_t usedSpacePoints = 0;
tt = tracksVector.size();
- for(vector<AliHLTGlobalBarrelTrack>::iterator element=tracksVector.begin(); element!=tracksVector.end(); element++){
+ for(vector<AliHLTGlobalBarrelTrack>::iterator element=tracksVector.begin(); element!=tracksVector.end(); element++){
Double_t trackLength = 0.;
if(fdEdx==kTRUE) trackLength = element->GetPathLengthTo( element->GetLastPointX(), 5.0);
UInt_t nHits = element->GetNumberOfPoints();
fTracks->Fill( 1./element->OneOverPt(), element->GetSnp(), element->GetTgl(), nHits );
//fdNdEta->Fill(element->GetSnp());
-
+
Double_t totCharge = 0;
const UInt_t *hitnum = element->GetPoints();
for(UInt_t i=0; i<element->GetNumberOfPoints(); i++){
UInt_t idTrack = hitnum[i];
- Int_t sliceTrack = (idTrack>>25) & 0x7f;
- Int_t patchTrack = (idTrack>>22) & 0x7;
- UInt_t pos = idTrack&0x3fffff;
-
- if( !fClustersArray[sliceTrack][patchTrack] ) continue;
-
- if(sliceTrack<0 || sliceTrack>36 || patchTrack<0 || patchTrack>5 ){
+ Int_t sliceTrack = AliHLTTPCSpacePointData::GetSlice(idTrack);
+ Int_t patchTrack = AliHLTTPCSpacePointData::GetPatch(idTrack);
+ UInt_t pos = AliHLTTPCSpacePointData::GetNumber(idTrack);
+
+ if(sliceTrack<0 || sliceTrack>=36 || patchTrack<0 || patchTrack>5 ){
HLTError("Corrupted TPC cluster Id: slice %d, patch %d, cluster %d", sliceTrack, patchTrack, idTrack);
continue;
}
+
+ if( !fClustersArray[sliceTrack][patchTrack] ) continue;
if(fNSpacePoints[sliceTrack][patchTrack]<=pos ){
HLTError("Space point array out of boundaries!");
totCharge += (fClustersArray[sliceTrack][patchTrack])[pos].fCharge;
- Float_t xyz[3]; xyz[0] = xyz[1] = xyz[2] = 0.;
+ //Float_t xyz[3]; xyz[0] = xyz[1] = xyz[2] = 0.;
- xyz[0] = (fClustersArray[sliceTrack][patchTrack])[pos].fX;
- xyz[1] = (fClustersArray[sliceTrack][patchTrack])[pos].fY;
- xyz[2] = (fClustersArray[sliceTrack][patchTrack])[pos].fZ;
+ //xyz[0] = (fClustersArray[sliceTrack][patchTrack])[pos].fX;
+ //xyz[1] = (fClustersArray[sliceTrack][patchTrack])[pos].fY;
+ //xyz[2] = (fClustersArray[sliceTrack][patchTrack])[pos].fZ;
- AliHLTTPCTransform::Local2Global(xyz,slice);
+ //AliHLTTPCTransform::Local2Global(xyz,slice);
- Double_t p[2] = { xyz[1], xyz[2] };
- Double_t cov[3] = { (fClustersArray[sliceTrack][patchTrack])[pos].fSigmaY2, 0., (fClustersArray[sliceTrack][patchTrack])[pos].fSigmaZ2};
- Double_t *res = element->GetResiduals(p,cov,kFALSE);
+ //Double_t p[2] = { xyz[1], xyz[2] };
+ //Double_t cov[3] = { (fClustersArray[sliceTrack][patchTrack])[pos].fSigmaY2, 0., (fClustersArray[sliceTrack][patchTrack])[pos].fSigmaZ2};
+ //Double_t *res = element->GetResiduals(p,cov,kFALSE);
//HLTInfo("resy: %f, resz: %f", res[0], res[1]);
- if(!res) res[0] = res[1] = -1000.;
- else fClusters->Fill( (fClustersArray[sliceTrack][patchTrack])[pos].fCharge, (fClustersArray[sliceTrack][patchTrack])[pos].fQMax, res[0], res[1]);
+ //if(!res) res[0] = res[1] = -1000.;
+ //else fClusters->Fill( (fClustersArray[sliceTrack][patchTrack])[pos].fCharge, (fClustersArray[sliceTrack][patchTrack])[pos].fQMax, res[0], res[1]);
+
+ fClusters->Fill( (fClustersArray[sliceTrack][patchTrack])[pos].fCharge, (fClustersArray[sliceTrack][patchTrack])[pos].fQMax, -1000., -1000.);
usedSpacePoints++;
}
- if(fdEdx==kTRUE && trackLength > 0) fDeDxVsP->Fill(element->OneOverPt()*TMath::Sqrt(1.+element->GetTgl()*element->GetTgl()), totCharge/trackLength);
- }
+ if(fdEdx==kTRUE && trackLength > 0) fDeDxVsP->Fill(element->OneOverPt()*TMath::Sqrt(1.+element->GetTgl()*element->GetTgl()), totCharge/trackLength);
+ }
}
void AliHLTTPCTrackHistoComponent::PushHisto(){
if (argument.CompareTo("-event-modulo")==0) {
if (++i>=argc) return -EPROTO;
argument=argv[i];
- fEvtMod=argument.Atof();
+ fEvtMod=argument.Atoi();
return 2;
}
if (argument.CompareTo("-buffer-size")==0) {
if (++i>=argc) return -EPROTO;
argument=argv[i];
- fBufferSize=argument.Atof();
+ fBufferSize=argument.Atoi();
return 2;
}
}
return -EINVAL;
}
+
+void AliHLTTPCTrackHistoComponent::GetOCDBObjectDescription( TMap* const targetMap){
+// Get a list of OCDB object description needed for the particular component
+ if (!targetMap) return;
+ targetMap->Add(new TObjString("HLT/ConfigTPC/TPCTrackHisto"), new TObjString("component arguments for setting the size of the filled ntuples and the event modulo for the mean multiplicity distribution"));
+}