@@ -369,7 +369,7 @@ std::vector<TrackSegment> RawDataSpan::makeMCTrackSegments()
369369}
370370
371371// / The RawDataManager constructor: connects all data files and sets up trees, readers etc.
372- RawDataManager::RawDataManager (std::filesystem::path dir)
372+ RawDataManager::RawDataManager (std::filesystem::path dir, std::string treefname )
373373{
374374
375375 if (!std::filesystem::exists (dir) || !std::filesystem::is_directory (dir)) {
@@ -555,8 +555,9 @@ RawDataManager::RawDataManager(std::filesystem::path dir)
555555 }
556556 mTransformer .init ();
557557 mTransformer .setCalVdriftExB (calvdriftexb);
558-
559-
558+ LOGP (info," Setup root tree for output" );
559+ mfile = new TFile (treefname.c_str ()," RECREATE" );
560+ moutputtree = new TTree (" t" ," tracklets and tracksegments" );
560561
561562}
562563/* **********************************************************************************************/
@@ -932,6 +933,27 @@ bool RawDataManager::getYZAt(float xk, float b, float& y, float& z, o2::dataform
932933 return true ;
933934}
934935
936+ int RawDataManager::findNearestTracklet (o2::trd::TrackSegment& tracksegment)
937+ {
938+ auto triggertime = tracksegment.getTriggerTime ();
939+ // loop through tracklets and find closest.
940+ //
941+ //
942+ //
943+ // //// WE ARE HERE !!!!!!!
944+ for (auto & trgrec : mTriggerRecord ){
945+ auto triggertime = getTriggerTime (trgrec, *mTFIDs , mTimeFrameNo - 1 );
946+ if (!trackMatchesCollision (triggertime, tracksegment.getTrackTime ())) {
947+ continue ;
948+ }
949+ for (int trklt=trgrec.getFirstTracklet (); trklt<trgrec.getFirstTracklet ()+trgrec.getNumberOfTracklets ();++trklt){
950+
951+ }
952+
953+
954+ }
955+
956+ }
935957int RawDataManager::propagateTrack (o2::dataformats::TrackTPCITS& track, float e, float maxStep, float triggertime, int & glbTrkltIdxOffset, int collisionId)
936958{
937959 if (debugprint)
@@ -941,9 +963,33 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
941963 int layerCount = 0 ;
942964 const int32_t nMaxChambersToSearch = 18 ;
943965 int32_t trkltIdxOffset = collisionId * (o2::trd::constants::NCHAMBER + 1 ); // offset for accessing mTrackletIndexArray for given collision
966+ std::vector<o2::trd::TrackSegment> btracksegments;
967+ std::vector<o2::trd::Tracklet64> btracklets;
968+ int timeframe;
969+ int eventno;
970+ int matched;
971+ float trackalpha,tracksnp,pT,trackxstart;
972+ float tracktime,trdtriggertime;
973+ int itsindex,tpcindex;
974+ int layers;
975+ moutputtree->Branch (" segment" , &btracksegments);
976+ moutputtree->Branch (" tracklet" , &btracklets);
977+ moutputtree->Branch (" timeframe" ,&timeframe);
978+ // moutputtree->Branch("trackxstart",&trackxstart);
979+ moutputtree->Branch (" alpha" ,&trackalpha);
980+ moutputtree->Branch (" snp" ,&tracksnp);
981+ moutputtree->Branch (" pt" ,&pT);
982+ moutputtree->Branch (" itsindex" ,&itsindex);
983+ moutputtree->Branch (" tpcindex" ,&tpcindex);
984+ moutputtree->Branch (" event" ,&eventno);
985+ moutputtree->Branch (" matched" ,&matched);
986+ moutputtree->Branch (" triggertime" ,&trdtriggertime);
987+ moutputtree->Branch (" tracktime" ,&tracktime);
988+ moutputtree->Branch (" layers" ,&layers);
989+ //
944990 for (int32_t iLayer = 0 ; iLayer < 6 ; ++iLayer) {
945991 // nCurrHypothesis = 0;
946- // if (debugprint)
992+ if (debugprint)
947993 LOGP (info, " $$$$ Layer : {} layercount: {}" , iLayer,layerCount);
948994 const o2::trd::PadPlane* pad = mGeo ->getPadPlane (iLayer, 0 );
949995 float tilt = std::tan (std::numbers::pi / 180 .f * pad->getTiltingAngle ());
@@ -973,8 +1019,7 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
9731019 float zShiftTrk = (track.getTimeMUS ().getTimeStamp () - triggertime) * mTPCVdrift * side;
9741020
9751021 if (!isGeoFindable (track, iLayer, track.getAlpha (), zShiftTrk)) {
976- LOGP (info," Track not geofindable" );
977-
1022+ // LOGP(info,"Track not geofindable");
9781023 continue ;
9791024 }
9801025 layerCount++;
@@ -1006,7 +1051,6 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
10061051 // LOGP(info,"chambers to search : {}",s);
10071052 // LOGP(info,"chambers to search : {}",aa);
10081053
1009- // look for tracklets in chamber(s)
10101054 for (int32_t iDet = 0 ; iDet < nMaxChambersToSearch; iDet++) {
10111055 int32_t currDet = det[iDet];
10121056 if (currDet == -1 ) {
@@ -1023,11 +1067,11 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
10231067 }
10241068 }
10251069 if (currSec != getSector (track.getAlpha ())) {
1026- // if (debugprint)
1070+ if (debugprint)
10271071 LOGP (info, " Track is in sector {} and we are in sector {}" , getSector (track.getAlpha ()), currSec);
10281072 continue ;
10291073 }
1030- // propagate track to radius of chamber
1074+ // propagate track to start radius of chamber drift start
10311075 const PadPlane* pp = mGeo ->getPadPlane (currDet);
10321076 if (propagateToLayerX (track, mRdriftstart [currDet], 0 .8f , 0 .2f )) { // prop.propagateToX(mR[currDet], .8f, .2f)) {
10331077 // we are at the start of a layer now propagate to the outter radius and build a tracksegment for the voxel of an mcm. TODO voxel of a padrow
@@ -1078,6 +1122,7 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
10781122 tracksegment.setEndPoint (ae);
10791123 tracksegment.setCollisionId (collisionId);
10801124 tracksegment.setTriggerTime (triggertime);
1125+ tracksegment.setTrackTime (track.getTimeMUS ().getTimeStamp ());
10811126 tracksegment.setRefTPCId (track.getRefTPC ());
10821127 tracksegment.setRefITSId (track.getRefITS ());
10831128 tracksegment.setPhi (track.getPhi ());
@@ -1095,8 +1140,12 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
10951140 if (debugprint)
10961141 LOGP (info, " TrackSegmentG x:y:z {:.2f}:{:.2f}:{:.2f} --> {:.2f}:{:.2f}:{:.2f}" , localpointG.X (), localpointG.Y (), localpointG.Z (), localpointendG.X (), localpointendG.Y (), localpointendG.Z ());
10971142 mITSTPCTracks_segments .push_back (tracksegment);
1143+ btracksegments.push_back (tracksegment);
1144+ // find nearest tracklet to this track segment.
1145+ int trackletindex=findNearestTracklet (tracksegment);
1146+ btracklet.push_back (mTracklets [trackletindex]);
10981147 } else {
1099- LOGP (info, " Track could not be propagated to radius of chamber {}" , currDet);
1148+ LOGP (info, " Track could not be propagated to radius of chamber {} which is layer: {} " , currDet, iLayer );
11001149 }
11011150 } // chamber loop
11021151
@@ -1105,9 +1154,21 @@ int RawDataManager::propagateTrack(o2::dataformats::TrackTPCITS& track, float e,
11051154 } // end of layer loop
11061155 // if(layerCount>0) LOGP(info,"Layer count : {}",layerCount);
11071156 /* ***************************************************************************************/
1157+ // now write the tree event ..
1158+ timeframe=getTimeFrameNumber ();
1159+ eventno=getEventNumber ();
1160+ trackalpha=track.getAlpha ();
1161+ tracksnp=track.getSnp ();
1162+ pT=track.getPt ();
1163+ itsindex=track.getRefITS ();
1164+ tpcindex=track.getRefTPC ();
1165+ tracktime=track.getTimeMUS ().getTimeStamp ();
1166+ trdtriggertime=triggertime;;
1167+ layers=layerCount;
1168+
11081169 // if (layerCount > 2)
11091170 // return true;
1110- LOGP (info," propagateTrack returning with layercount of {}" ,layerCount);
1171+ // LOGP(info,"propagateTrack returning with layercount of {}",layerCount);
11111172 return layerCount;
11121173}
11131174/* **********************************************************************************************/
@@ -1120,6 +1181,7 @@ bool RawDataManager::buildTrackSegments(bool onlydigits)
11201181 // LOGP(info,"{} {}",__func__,__LINE__);
11211182 bool timeframehasdigits = false ;
11221183 bool timeframehastracks = false ;
1184+
11231185 // clear the tracksegments
11241186 mITSTPCTracks_segments .clear ();
11251187 if (onlydigits) {
@@ -1198,36 +1260,37 @@ bool RawDataManager::buildTrackSegments(bool onlydigits)
11981260 auto ttrack = track;
11991261 trackcounter++;
12001262 if (trackMatchesCollision (triggertime, ttrack.getTimeMUS ().getTimeStamp ())) {
1201- trackcounter++;
1202- int numberOfLayers=0 ;
1203- auto difftime = ttrack.getTimeMUS ().getTimeStamp () - triggertime;
1204- auto pt = track.getPt ();
1205- float timeWindow = 4.0 ; // time is within 20us
1206- if (difftime < timeWindow && pt>0.5 ) {
1207- // TracksForThisEvent.push_back(track);
1208- // Track_pad_row_timebin.push_back(GeneratePadRowTimeBin(track));
1209- numberOfTimeTrackMatched++;
1210- tracktimewindowcounter++;
1211- // if(pt>1.0){
1212- // LOGP(info,"$$$$ Propagating track ..... {} {} track.x={} trigtime:{} tracktime:{} its:{} tpc:{} trackcounter:{} collionsId:{} timeframe:{} eventno:{}",__func__,__LINE__,ttrack.getX(),triggertime,ttrack.getTimeMUS().getTimeStamp(),
1213- // (int)ttrack.getRefITS(),(int)ttrack.getRefTPC(),trackcounter,collisionId,mTimeFrameNo,mEventNo);
1214- numberOfLayers=propagateTrack (ttrack, .8f , 2 .f , triggertime, trackletstart, collisionId);
1215- totalNumberOfLayers+=numberOfLayers;
1216- if (numberOfLayers > -1 ) {
1217- // LOGP(info," track propagated..... collid:{} timeframe:{} eventno:{}",collisionId,mTimeFrameNo,mEventNo);
1218- goodtrackcounter++; // we have at least a singular layer 0,1,2,3,4,5;
1219- } else {
1220- badtrackcounter++;
1221- // LOGP(info," track failed to propagate ..... collid:{} timeframe:{} eventno:{}",collisionId,mTimeFrameNo,mEventNo);
1222- }
1223- LOGP (info," $$$$ Finished Propagating track ..... with track.x={} collid:{} timeframe:{} eventno:{} layerscount:{} layersfromprop:{}, trackpt:{}" ,ttrack.getX (),collisionId,mTimeFrameNo ,mEventNo ,totalNumberOfLayers, numberOfLayers, ttrack.getPt ());
1224- // }
1263+ continue ;
1264+ }
1265+ trackcounter++;
1266+ int numberOfLayers=0 ;
1267+ auto difftime = ttrack.getTimeMUS ().getTimeStamp () - triggertime;
1268+ auto pt = track.getPt ();
1269+ float timeWindow = 4.0 ; // time is within 20us
1270+ if (difftime < timeWindow && pt>2.0 ) {
1271+ // TracksForThisEvent.push_back(track);
1272+ // Track_pad_row_timebin.push_back(GeneratePadRowTimeBin(track));
1273+ numberOfTimeTrackMatched++;
1274+ tracktimewindowcounter++;
1275+ // if(pt>1.0){
1276+ // LOGP(info,"$$$$ Propagating track ..... {} {} track.x={} trigtime:{} tracktime:{} its:{} tpc:{} trackcounter:{} collionsId:{} timeframe:{} eventno:{}",__func__,__LINE__,ttrack.getX(),triggertime,ttrack.getTimeMUS().getTimeStamp(),
1277+ // (int)ttrack.getRefITS(),(int)ttrack.getRefTPC(),trackcounter,collisionId,mTimeFrameNo,mEventNo);
1278+ numberOfLayers=propagateTrack (ttrack, .8f , 2 .f , triggertime, trackletstart, collisionId);
1279+ totalNumberOfLayers+=numberOfLayers;
1280+ if (numberOfLayers > -1 ) {
1281+ // LOGP(info," track propagated..... collid:{} timeframe:{} eventno:{}",collisionId,mTimeFrameNo,mEventNo);
1282+ goodtrackcounter++; // we have at least a singular layer 0,1,2,3,4,5;
1283+ } else {
1284+ badtrackcounter++;
1285+ // LOGP(info," track failed to propagate ..... collid:{} timeframe:{} eventno:{}",collisionId,mTimeFrameNo,mEventNo);
12251286 }
1287+ // LOGP(info,"$$$$ Finished Propagating track ..... with track.x={} collid:{} timeframe:{} eventno:{} layerscount:{} layersfromprop:{}, trackpt:{}",ttrack.getX(),collisionId,mTimeFrameNo,mEventNo,totalNumberOfLayers, numberOfLayers, ttrack.getPt());
1288+ // }
12261289 }
12271290
12281291 collisionId++;
12291292 }
1230- LOGP (info," Tracks in collisionid {} this event {} out of a total of {} good tracks from {} tracks, with {}% good events, track matched {} times numberoflayers:{}" , collisionId, goodtrackcounter, trackcounter, (*mITSTPCTracks ).size (), (float )goodtrackcounter/(float )trackcounter*100 ,numberOfTimeTrackMatched,totalNumberOfLayers);
1293+ // LOGP(info,"Tracks in collisionid {} this event {} out of a total of {} good tracks from {} tracks, with {}% good events, track matched {} times numberoflayers:{}", collisionId, goodtrackcounter, trackcounter, (*mITSTPCTracks).size(), (float)goodtrackcounter/(float)trackcounter*100,numberOfTimeTrackMatched,totalNumberOfLayers);
12311294 /* *******************************************************************************************/
12321295
12331296 /* *******************************************************************************************/
@@ -1442,6 +1505,6 @@ std::string RawDataManager::describeEvent()
14421505 out << " ## TF:Event " << mTimeFrameNo << " :" << mEventNo << " : "
14431506 // << hits->getsize() << " hits "
14441507 << mTriggerRecord .getNumberOfDigits () << " digits and "
1445- << mTriggerRecord .getNumberOfTracklets () << " tracklets" ;
1508+ << mTriggerRecord .getNumberOiTracklets () << " tracklets" ;
14461509 return out.str ();
14471510}
0 commit comments