6 #include "GaudiKernel/IToolSvc.h"
7 #include "GaudiKernel/TypeNameString.h"
13 #include "AthLinks/ElementLink.h"
29 declareInterface<IDataRetriever>(
this);
33 "Track collections to retrieve first, shown as default in Atlantis");
39 namespace TrackParticleRetrieverHelpers {
59 const std::vector<const Trk::TrackParameters*>& trackpars =track->trackParameters();
61 if (!trackpars.empty() && trackpars.size() == 3 ) {
63 bool needresorting = trackpars.at(0)!=track->perigee();
65 for (
i=0;
i<trackpars.size();
i++){
74 polylineX.push_back( myPositionX.at( trackpars.size()-1 ) );
75 polylineY.push_back( myPositionY.at( trackpars.size()-1 ) );
76 polylineZ.push_back( myPositionZ.at( trackpars.size()-1 ) );
77 polylineX.push_back( myPositionX.at( trackpars.size()-3 ) );
78 polylineY.push_back( myPositionY.at( trackpars.size()-3 ) );
79 polylineZ.push_back( myPositionZ.at( trackpars.size()-3 ) );
80 polylineX.push_back( myPositionX.at( trackpars.size()-2 ) );
81 polylineY.push_back( myPositionY.at( trackpars.size()-2 ) );
82 polylineZ.push_back( myPositionZ.at( trackpars.size()-2 ) );
89 numPolyline.push_back(
DataType(numPoly));
106 typedef std::pair< Rec::TrackParticleContainer , std::string > tracksNamePair;
107 std::vector< tracksNamePair > requestedTrackColls;
112 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Unable to retrieve requested priority track collection "
126 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Unable to retrieve requested track collection " << (*CollNameItr) <<
endmsg;
138 requestedTrackColls.push_back( tracksNamePair(*tracks,(*CollNameItr)) );
148 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Unable to retrieve track collection iterator" <<
endmsg;
149 return StatusCode::SUCCESS;
153 for (; trackCollIter!=trackCollEnd; ++trackCollIter) {
159 if ((trackCollIter.
key().find(
"HLT",0) != std::string::npos) && (!
m_doWriteHLT)){
166 if ( (trackCollIter.
key() ==
"AtlfastTrackParticles")) {
182 requestedTrackColls.push_back(tracksNamePair(*tracks,trackCollIter.
key()));
193 for ( ; tracksNamePairItr != requestedTrackColls.end(); ++tracksNamePairItr){
197 std::string collectionName = (*tracksNamePairItr).second;
200 if ( tpc->
size() == 0){
226 std::string labelStr =
"unknownHits";
230 for (tpcItr=tpc->
begin(); tpcItr!=tpc->
end(); ++tpcItr) {
236 chi2.push_back(
DataType((*tpcItr)->fitQuality()->chiSquared()));
237 numDoF.push_back(
DataType((*tpcItr)->fitQuality()->numberDoF()));
238 trackAuthor.push_back( (*tpcItr)->info().trackFitter() );
249 <<
", SCT hits: " <<
nSCTHits <<
" BLayer hits: " << nBLayerHits
250 <<
", TRT hits: " <<
nTRTHits <<
", pT[GeV]= " << (*tpcItr)->perigee()->pT()/1000. <<
endmsg;
254 if (((*tpcItr)->perigee()->parameters())[
Trk::qOverP]==0) {
257 pt.push_back(
DataType((*tpcItr)->perigee()->charge() * (*tpcItr)->perigee()->pT()/1000.));
264 if ((*tpcItr)->perigee()->parameters()[
Trk::theta] == 0.) {
278 dynamic_cast<const Trk::Perigee*
>((*tpcItr)->perigee());
279 const AmgSymMatrix(5)* covariance = per ? per->covariance() : NULL;
280 if (per && covariance) {
282 double measuredTheta = (*tpcItr)->perigee()->parameters()[
Trk::theta];
283 double measuredQoverp = (*tpcItr)->perigee()->parameters()[
Trk::qOverP];
285 covVert = covariance->similarity(theJac);
287 for (
int ii=0; ii<20; ii++){
294 const long scale = 10000;
303 for (
int i=0;
i<10;
i++){
333 DataMap[
"trackAuthor"] = trackAuthor;
334 DataMap[
"numPolyline"] = numPolyline;
349 if ( polylineX.size() > 0){
350 std::string numPolyPerTrack =
DataType(polylineX.size()/((
double)
id.size())).toString();
351 DataMap[
"polylineX multiple=\"" + numPolyPerTrack +
"\""] = polylineX;
352 DataMap[
"polylineY multiple=\"" + numPolyPerTrack +
"\""] = polylineY;
353 DataMap[
"polylineZ multiple=\"" + numPolyPerTrack +
"\""] = polylineZ;
358 return StatusCode::RECOVERABLE;
365 return StatusCode::SUCCESS;