Main Page   Modules   Namespace List   Class Hierarchy   Data Structures   File List   Namespace Members   Data Fields   Globals   Related Pages  

ArchTimeWalkTestResult.cpp

Go to the documentation of this file.
00001 #include "ArchTimeWalkTestResult.h"
00002 #include <TFile.h>
00003 #include <TKey.h>
00004 #include <TDirectory.h>
00005 #include <TSystem.h>
00006 #include <TNamed.h>
00007 #include <TObject.h>
00008 #include <TObjArray.h>
00009 #include <TString.h>
00010 #include <TObjString.h>
00011 #include <TVector.h>
00012 #include <TVectorD.h>
00013 #include <TH1.h>
00014 #include <TH2.h>
00015 #include <TCanvas.h>
00016 #include <TROOT.h>
00017 #include <is/isinfo.h>
00018 #include <iostream>
00019 #include <vector>
00020 #include <boost/shared_ptr.hpp>
00021 #include "SummaryWriter/SummaryWriter.h"
00022 #include "SummaryWriter/SummaryManager.h"
00023 
00024 
00025 /***********************  Constructor  *************** */
00026 
00027 ArchTimeWalkTestResult::ArchTimeWalkTestResult(): ArchTestResult()  {
00028 
00029   //cout<< "I am in the ArchTimeWalkTestResult Default Constructor"<< endl;
00030   
00031   
00032   
00033 }
00034 
00035 
00036 ArchTimeWalkTestResult::ArchTimeWalkTestResult(TimeWalkTestResult& TWtest): ArchTestResult(TWtest)  {
00037 
00038   //cout<< "I am in the ArchTimeWalkTestResult Constructor"<< endl;
00039   
00040   /*--- Initialisation ---*/
00041 
00042   for (unsigned int i = 0; i<12;i++) { 
00043     //*----status_direct:
00044     timewalk.push_back(TWtest.getChipResult(i).timewalk);
00045     shared_ptr<TVector> tmp_v_timewalk (new TVector(1,1,TWtest.getChipResult(i).timewalk,"END"));
00046     v_timewalk.push_back(tmp_v_timewalk);
00047 
00048 
00049     //*----calibration:
00050     calibration.push_back(TWtest.getChipResult(i).calibration);
00051     shared_ptr<TVector> tmp_v_calibration (new TVector(1,1,TWtest.getChipResult(i).calibration,"END"));
00052     v_calibration.push_back(tmp_v_calibration);
00053 
00054 
00055   }
00056 
00057 
00058      
00059 
00060 
00061 
00062   //Retrieve Test Summary from IS
00063   try{
00064     TestSummary(TWtest);
00065   } catch(...) {
00066     cout<<" ERROR in retrieving Test Summary from IS" <<endl;
00067   }
00068 
00069 
00070 
00071 }
00072 
00073 
00074 
00075 /**********************  Other Member Functions  *********************/
00076 
00077 
00078 ArchTimeWalkTestResult::~ArchTimeWalkTestResult()  {
00079   
00080   //cout << "I am in the ArchTimeWalkTestResult destructor" << endl;
00081   
00082 
00083   
00084 }
00085 
00086 
00087 
00088 void ArchTimeWalkTestResult::SaveTimeWalkTestDataOnly() {
00089 
00090   cout<<"Saving TimeWalkTestData "<<endl;
00091   //TO DO : Save time and date of first and last saving  
00092 
00093   string filename = names->getfilename();
00094   string moduleID = names->getModuleID(); 
00095   string testType  = names->getTestType(); 
00096   string runID = names->getRunID();
00097   string timewalkID = names->getTimewalkID();
00098   string calibrationID = names->getCalibrationID();
00099  
00100 
00101   
00102   /* OPENING TEST FILE  */
00103   cout << "Opening file..."<<endl; 
00104  
00105   TFile *storage_file = new TFile(filename.c_str(),"update");
00106   //storage_file->ls();
00107   //cout << "The file .root succesfully open"<<endl; 
00108 
00109   
00110 
00111 
00112   /* CREATING DIRECTORIES and SAVING DATA  */
00113   
00114     
00115     /* Making RunNumber   */
00116     //cout<<"I am making RunNumber Dir"<<endl;
00117     //storage_file->GetListOfKeys()->Print();
00118     TDirectory *this_run = (TDirectory*) gDirectory->Get(runID.c_str());
00119     //cout<<"The RUN is "<< runID <<endl;
00120     
00121     if (!this_run) {
00122       //cout<<"This NEW run "<< runID <<" doesn't exist"<<endl;
00123       this_run = storage_file->mkdir(runID.c_str());
00124       //cout<<"New RunNumber Dir made "<<endl;
00125     }
00126     storage_file->GetListOfKeys()->Print();
00127     this_run->cd();  //make this_run the current directory
00128     
00129    
00130     /* Saving RunNumber as a TVector: it is saved only once, just the first time   */
00131     TObject* pers_runnumber = gDirectory->FindObjectAny(runID.c_str()); 
00132     if (!pers_runnumber) {
00133       double frunNumber = runNumber;
00134       TVector run(1,1,frunNumber, "END");
00135       run.Write(runID.c_str());
00136     }
00137     
00138     
00139     /* Making moduleNumber   */
00140     
00141     TDirectory* this_module = (TDirectory*) gDirectory->Get(moduleID.c_str()); //Can be made using FindAnyObject
00142     //cout<<"The MODULE is "<< moduleID <<endl;
00143     if (!this_module) {
00144       //cout<<"This NEW module "<< moduleID <<" doesn't exist"<<endl;
00145       this_module =gDirectory ->mkdir(moduleID.c_str());
00146     }
00147     
00148     
00149     /* Making TestType   */
00150     //cout<<"I am making TestType Dir "<<endl;
00151     this_module->cd();  //make this_module the current directory 
00152     TDirectory* this_testType = (TDirectory*) gDirectory->Get(testType.c_str());
00153     //cout<<"The test Type is "<< testType <<endl;
00154     
00155     if (!this_testType) {
00156       //cout<<"This NEW test "<< testType <<" doesn't exist"<<endl;
00157       this_testType = gDirectory->mkdir(testType.c_str());
00158     }
00159     this_testType->cd();
00160 
00161 
00162     
00163     
00164     /* Saving timewalk as a TVector */
00165     //cout << "I am Saving  as  TVectorD's" << endl;
00166     //TObject* pers_timewalk = gDirectory->FindObjectAny(timewalkID.c_str()); 
00167     TDirectory* pers_timewalk = (TDirectory*) gDirectory->Get(timewalkID.c_str());
00168     if (!pers_timewalk) {
00169       //cout << "The timewalk never saved before...saving now"<<endl;
00170       pers_timewalk = this_testType->mkdir(timewalkID.c_str());
00171       
00172     }
00173     pers_timewalk->cd();
00174 
00175     int chipN=0;
00176     for (vector<shared_ptr<TVector> >::iterator i = v_timewalk.begin(); i!=v_timewalk.end(); i++) {
00177       (*i)->Write(names->getTimewalkID(chipN).c_str());
00178       ++chipN;
00179     } 
00180     this_testType->cd();
00181 
00182 
00183     /* Saving calibration  as a TVector */
00184     //cout << "I am Saving calibration as  TVectorD's" << endl;
00185     //TObject* pers_calibration = gDirectory->FindObjectAny(calibrationID.c_str()); 
00186      TDirectory* pers_calibration = (TDirectory*) gDirectory->Get(calibrationID.c_str());
00187     if (!pers_calibration) {
00188       //cout << "The calibration never saved before...saving now"<<endl;
00189       pers_calibration = this_testType->mkdir(calibrationID.c_str());
00190     }
00191     pers_calibration->cd();
00192 
00193     chipN=0;
00194     for (vector<shared_ptr<TVector> >::iterator i = v_timewalk.begin(); i!=v_timewalk.end(); i++) {
00195       (*i)->Write(names->getCalibrationID(chipN).c_str());
00196       ++chipN;
00197     } 
00198     this_testType->cd();
00199     
00200 
00201 
00202     //Save TestSummery (if it has been retrieved)
00203     if(testSummary != NULL) {
00204       //cout<<"testSummary != NULL...";
00205       TObject* pers_testSummary = gDirectory->FindObjectAny(names->getTestSummaryID().c_str());
00206       if (!pers_testSummary) {
00207     testSummary->Write(names->getTestSummaryID().c_str());
00208     //cout<<"testSummary SAVED"<<endl;
00209       }
00210     }
00211    
00212 
00213 
00214 
00215 
00216     /* CLOSING FILE  */
00217     //cout << "I am Closing File " << endl;
00218     storage_file->Close();
00219     delete storage_file;
00220     //cout << "File closed " << endl;
00221 
00222 
00223 
00224 
00225 }
00226 
00227 
00228 
00229 
00230 
00231 void ArchTimeWalkTestResult::SaveTimeWalk() {
00232 
00233   SaveTestDataOnly();
00234   SaveTimeWalkTestDataOnly();
00235   SaveRawScans();
00236   SaveFitScans();
00237   AddTestToIndex();
00238 
00239 }
00240 
00241 
00242 
00243 void ArchTimeWalkTestResult::TestSummary(TimeWalkTestResult & TWtest) {
00244   
00245   ostringstream datastream;
00246   shared_ptr<const SctData::TestSummary::SummaryWriter> writer = 
00247     SctData::TestSummary::SummaryManager::instance().getWriter(TWtest.getClassName());
00248   writer->writeHeader(TWtest, datastream);
00249   writer->write(TWtest, datastream);
00250   string myString = datastream.str();
00251   //cout<< "TestSummary = " << myString;
00252 
00253   testSummary = new TObjString(myString.c_str());
00254 
00255   
00256 
00257 
00258   return;
00259 
00260 
00261 }
00262 

Generated on Mon Dec 15 19:35:58 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3