#include "MapsTrackManager.hh" #include "MapsTrack.hh" #include "MapsSensor.hh" #include "MapsException.hh" #include #include #include "TRandom2.h" #include "TFile.h" #include "TH1F.h" #include "TH2F.h" int main(int argc, const char **argv) { for (int d(0); d < argc; d++) { std::cout << argv[d] << "\n"; } if (argc != 3) { std::cout << "Usage: Rewriter \n"; return 0; } MapsTrackManager mtm2; std::cout << "Recreating from root file...\n"; char input[100]; strcpy(input, argv[1]); mtm2.recreateFromRootFile(input); std::cout << "Rewriting to new root file...\n"; std::vector s(mtm2.getSensors()); MapsSensor* left = 0; MapsSensor* right = 0; MapsSensor* m1 = 0; MapsSensor* m2 = 0; for (std::vector::iterator it = s.begin(); it != s.end(); ++it) { MapsSensor* sensor = *it; if (sensor->id() == 2) { left = sensor; } if (sensor->id() == 7) { right = sensor; //sensor->setPhi(1.5 * 3.14159265358979323846); } if (sensor->id() == 6) { m1 = sensor; //sensor->setPhi(0.5 * 3.14159265358979323846); } if (sensor->id() == 8) { m2 = sensor; } } mtm2.setRequiredLeftSensor(left); mtm2.setRequiredRightSensor(right); MapsTrackManager mtm3; mtm3.setSensors(s); std::vector& tracks = mtm2.getTracks(); for (std::vector::iterator it = tracks.begin(); it != tracks.end(); it++) { MapsTrack* t = *it; t->eraseGlobalHits(); std::pair error(0.25, 0.25); t->setTrackError(error); MapsTrack threeHit; t->make3HitTrack(threeHit); if (threeHit.chiSqProb(0) > 0.05 && threeHit.chiSqProb(1) > 0.05) { diagnose(std::cout, *t); if (t->fourthSensor()->isDeadArea(t->findXYPrediction(t->fourthSensor()->zPosition())) && t->getHits().size() == 3) { std::cout << "Three hit prediction falls in dead area.\n"; } else { mtm3.addTrack(t); } } t->tellSensorsOfResiduals(left, right); } TH2F s1, s2; TFile* f = new TFile("CosmicAlignment.root", "recreate"); m1->getResidualXYPlot(s1); m2->getResidualXYPlot(s2); s1.Write(); s2.Write(); f->Write(); f->Close(); char output[100]; strcpy(output, argv[2]); //mtm2.exportToRootFile(output); mtm3.exportToRootFile("GoodCosmicTracks.root"); std::cout << "Done.\n"; return 0; }