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

ArchivingWorkerGroup.cpp

00001 #include "ArchivingWorkerGroup.h"
00002 #include "archiving/ArchRawScanResult.h"
00003 #include "archiving/ArchFitScanResult.h"
00004 #include "archiving/ArchNPtGainTestResult.h"
00005 #include "archiving/ArchNoiseOccupancyTestResult.h"
00006 #include "archiving/ArchStrobeDelayTestResult.h"
00007 #include "archiving/ArchTrimRangeTestResult.h"
00008 #include "archiving/ArchTimeWalkTestResult.h"
00009 #include "archiving/ArchPipelineTestResult.h"
00010 #include "archiving/ArchFullBypassTestResult.h"
00011 #include "archiving/ArchNMaskTestResult.h"
00012 #include "archiving/ArchivingManager.h"
00013 
00014 
00015 
00016 #include "Sct/LogicErrors.h"
00017 
00018 using namespace Sct;
00019 using namespace SctData;
00020 using namespace boost;
00021 
00022 namespace SctArchivingService {
00023     
00024 void ArchivingWorkerGroup::work(shared_ptr<Serializable> ob) throw() {
00025   try {
00026     if (!ob) throw InvalidArgumentError("Failed to get object from IS", __FILE__, __LINE__);
00027     
00028     
00032       if(ob->getClassName() == "SctData::FitScanResult" || ob->getClassName() == "SctData::RawScanResult") {
00033     
00034     
00035     
00036     {
00037       boost::recursive_mutex::scoped_lock lock(m_file_access);  
00038       shared_ptr<ArchScanResult> myScanArchiving = ArchivingManager::instance().getScanFromMap(ob);
00039       shared_ptr<ScanResult> scan = dynamic_pointer_cast<ScanResult>(ob);
00040       //cout<<"Before Cloning"<<endl;
00041       shared_ptr<ArchScanResult> cloned_scan = myScanArchiving->clone(scan);
00042       //cout<<"After Cloning"<<endl;
00043       
00044       unsigned long runno = scan->getHeader().getRunNumber();
00045       unsigned long scanno = scan->getHeader().getScanNumber();
00046       
00047     
00048       while (findTest(runno, scanno).get() == 0  ) {
00049         //sleeping: waiting to get Test in the List
00050         sleep(1);
00051         cout<<"RawScanWork: I am sleeping"<<endl;
00052       }
00053       
00054     
00055       cout<< "(Work) About to save ScanResult... " << endl;
00056       cloned_scan->SetUNIXDir();
00057       string testName = findTest( runno, scanno )->getTest().testName;
00058       cout <<"TestName = " << testName<<endl;
00059       cloned_scan->SetTestType(testName);
00060       
00061       cloned_scan->Save();
00062     }
00063  
00064     cout<< "ScanResult Correctly Saved (work) " << endl;
00065     return;
00066       }
00067       
00068     
00069 
00070 
00073       if(ob->getClassName() == "SctData::FullBypassTestResult" 
00074      || ob->getClassName() == "SctData::NMaskTestResult"
00075      || ob->getClassName() == "SctData::NoiseOccupancyTestResult" 
00076      || ob->getClassName() == "SctData::NPtGainTestResult" 
00077      || ob->getClassName() == "SctData::PipelineTestResult"
00078      || ob->getClassName() == "SctData::StrobeDelayTestResult"
00079      || ob->getClassName() == "SctData::TimeWalkTestResult"
00080      || ob->getClassName() == "SctData::TrimRangeTestResult") {
00081     
00082     {
00083       boost::recursive_mutex::scoped_lock lock(m_file_access); 
00084       
00085       shared_ptr<ArchTestResult> myTestArchiving = ArchivingManager::instance().getTestFromMap(ob);
00086       shared_ptr<TestResult> test = dynamic_pointer_cast<TestResult>(ob);
00087       //cout<<"Before Cloning"<<endl;
00088       shared_ptr<ArchTestResult> cloned_test = myTestArchiving->clone(test);
00089       //cout<<"After Cloning"<<endl;
00090       
00091       cout<< "(Work) About to save TestResult... " << endl;
00092       cloned_test->SetUNIXDir();
00093       
00094     
00095       cloned_test->Save();
00096     }
00097     cout<< "TestResult Correctly Saved (work) " << endl;
00098     return;
00099       }
00100       
00101       
00102       
00103     
00104     
00105     /*
00106     //RawScans:
00107     {
00108       shared_ptr<RawScanResult> raw = dynamic_pointer_cast<RawScanResult>(ob);
00109       if(raw) {
00110         
00111         cout<< "(Work) About to save RawScanResult... " << endl;
00112         {
00113           boost::recursive_mutex::scoped_lock lock(m_file_access);   
00114           ArchivingWorkerGroup::RawScanWork(raw); 
00115         }
00116         cout<< "RawScanResult Correctly Saved (work) " << endl;
00117         return;
00118         
00119       }
00120       
00121     }
00122 
00123 
00124     //FitScans:
00125     {
00126       shared_ptr<FitScanResult> fit = dynamic_pointer_cast<FitScanResult>(ob);
00127       if(fit) {
00128         cout<< "(Work) About to save FitScanResult... " << endl;
00129         {
00130           boost::recursive_mutex::scoped_lock lock(m_file_access);
00131           ArchivingWorkerGroup::FitScanWork(fit);
00132         }    
00133         cout<< "FitScanResult Correctly Saved (work) " << endl;
00134         return;
00135       }
00136     }
00137      */
00138     
00139     /* OLD
00140        shared_ptr<NoiseOccupancyTestResult> NOResult = dynamic_pointer_cast<NoiseOccupancyTestResult>(ob); 
00141        if(NOResult) {      
00142        cout<<" The Test Obj is NoiseOccupancyTestResult "<<endl;
00143        {
00144        boost::recursive_mutex::scoped_lock lock(m_file_access);      
00145        ArchNoiseOccupancyTestResult archnotest(NOResult);
00146        archnotest.SetUNIXDir();
00147        archnotest.SaveTestDataOnly();
00148        archnotest.SaveNOTestDataOnly();
00149        archnotest.AddTestToIndex();
00150        }
00151        cout<< "Noise Occupancy Test Correctly Saved " << endl;
00152        return;
00153        }
00154        
00155        shared_ptr<NPtGainTestResult> NPtResult = dynamic_pointer_cast<NPtGainTestResult>(ob);
00156        if(NPtResult) {
00157        cout<<" The Test Obj is NPtGainTestResult "<<endl;
00158        {
00159        boost::recursive_mutex::scoped_lock lock(m_file_access);      
00160        ArchNPtGainTestResult archNPtGtest(NPtResult);
00161        archNPtGtest.SetUNIXDir();
00162        archNPtGtest.SaveTestDataOnly();
00163        archNPtGtest.SaveNPtGainTestDataOnly();
00164        archNPtGtest.AddTestToIndex();
00165        }
00166        cout<< "NPt Gain Test Correctly Saved " << endl;
00167        return;
00168        }
00169        
00170        shared_ptr<StrobeDelayTestResult> SDResult = dynamic_pointer_cast<StrobeDelayTestResult>(ob);
00171        if(SDResult) {
00172        cout<<" The Test Obj is StrobeDelayTestResult "<<endl; 
00173        {
00174           boost::recursive_mutex::scoped_lock lock(m_file_access);     
00175           ArchStrobeDelayTestResult archSDtest(SDResult);
00176           archSDtest.SetUNIXDir();
00177           archSDtest.SaveTestDataOnly();
00178           archSDtest.SaveStrobeDelayTestDataOnly();
00179           archSDtest.AddTestToIndex();
00180         }
00181         cout<< "Strobe Delay Test Correctly Saved " << endl;
00182         return;
00183     }
00184     
00185     shared_ptr<TrimRangeTestResult> TRResult = dynamic_pointer_cast<TrimRangeTestResult>(ob);
00186     if(TRResult) {
00187         cout<<" The Test Obj is TrimRangeTestResult "<<endl;  
00188         {
00189           boost::recursive_mutex::scoped_lock lock(m_file_access);    
00190           ArchTrimRangeTestResult archTRtest(TRResult);
00191           archTRtest.SetUNIXDir();
00192           archTRtest.SaveTestDataOnly();
00193           archTRtest.SaveTrimRangeTestDataOnly();
00194           archTRtest.AddTestToIndex();
00195         }
00196         cout<< "Trim Range Test Correctly Saved " << endl;
00197         return;
00198     }
00199 
00200 
00201     shared_ptr<TimeWalkTestResult> TWResult = dynamic_pointer_cast<TimeWalkTestResult>(ob);
00202     if(TWResult) {
00203         cout<<" The Test Obj is TimeWalkTestResult "<<endl; 
00204         {
00205           boost::recursive_mutex::scoped_lock lock(m_file_access);     
00206           ArchTimeWalkTestResult archTWtest(TWResult);
00207           archTWtest.SetUNIXDir();
00208           archTWtest.SaveTestDataOnly();
00209           archTWtest.SaveTimeWalkTestDataOnly();
00210           archTWtest.AddTestToIndex();
00211         }  
00212         cout<< "TimeWalk Test Correctly Saved " << endl;
00213         return;
00214     }
00215 
00216     shared_ptr<FullBypassTestResult> FBResult = dynamic_pointer_cast<FullBypassTestResult>(ob);
00217     if(FBResult) {
00218         cout<<" The Test Obj is FullBypassTestResult "<<endl;  
00219         {
00220           boost::recursive_mutex::scoped_lock lock(m_file_access);    
00221           ArchFullBypassTestResult archFBtest(FBResult);
00222           archFBtest.SetUNIXDir();
00223           archFBtest.SaveTestDataOnly();
00224           archFBtest.SaveFullBypassTestDataOnly();
00225           archFBtest.AddTestToIndex();   
00226         }
00227         cout<< "FullBypass Test Correctly Saved " << endl;
00228         return;
00229     }
00230 
00231 
00232     shared_ptr<PipelineTestResult> PResult = dynamic_pointer_cast<PipelineTestResult>(ob);
00233     if(PResult) {
00234         cout<<" The Test Obj is PipelineTestResult "<<endl; 
00235         {
00236           boost::recursive_mutex::scoped_lock lock(m_file_access);     
00237           ArchPipelineTestResult archPtest(PResult);
00238           archPtest.SetUNIXDir();
00239           archPtest.SaveTestDataOnly();
00240           archPtest.SavePipelineTestDataOnly();
00241           archPtest.AddTestToIndex();
00242         } 
00243         cout<< "Pipeline Test Correctly Saved " << endl;
00244         return;
00245     }
00246     
00247 
00248     shared_ptr<NMaskTestResult> NMResult = dynamic_pointer_cast<NMaskTestResult>(ob);
00249     if(NMResult) {
00250         cout<<" The Test Obj is NMaskTestResult "<<endl; 
00251         {
00252           boost::recursive_mutex::scoped_lock lock(m_file_access);     
00253           ArchNMaskTestResult archNMtest(NMResult);
00254           archNMtest.SetUNIXDir();
00255           archNMtest.SaveTestDataOnly();
00256           archNMtest.SaveNMaskTestDataOnly();
00257           archNMtest.AddTestToIndex();
00258         }  
00259         cout<< "NMask Test Correctly Saved " << endl;
00260         return;
00261     }
00262     */
00263 
00264       throw InvalidArgumentError("The object on IS is an unknown Test type: " + ob->getClassName(), __FILE__, __LINE__);
00265   } catch(Throwable& e) {
00266     e.sendToMrs(MRS_ERROR);
00267   }
00268   
00269 
00270   
00271 
00272 
00273 
00274 }    
00275 
00276 
00277 
00278 
00279 shared_ptr<ArchivingWorkerGroup::TestAlgs> ArchivingWorkerGroup::findTest(const TestData& testdata) const throw() {
00280     return findTest(testdata.runNumber, testdata.startScanNumber);
00281 }
00282 
00283 
00284 shared_ptr<ArchivingWorkerGroup::TestAlgs> ArchivingWorkerGroup::findTest(const unsigned long runno, const unsigned long scanno) const throw() {
00285     //AT boost::recursive_mutex::scoped_lock lock(m_tests_access);
00286     shared_ptr<ArchivingWorkerGroup::TestAlgs> talgs;
00287     for (list<shared_ptr<TestAlgs> >::const_iterator it = m_tests.begin();
00288             it != m_tests.end();
00289             ++it ) {
00290         const TestData& td=(*it)->getTest();
00291         if ( runno == td.runNumber &&
00292                 scanno >= td.startScanNumber &&
00293                 scanno < td.startScanNumber + td.nScans) {
00294             talgs=*it;
00295             cout << "found test for run " << runno<< ", scan " << scanno << endl;
00296         }
00297     }
00298     return talgs;
00299 }
00300 
00301 
00302 
00303 void ArchivingWorkerGroup::addTest(shared_ptr<const TestData> testdata) {
00304   boost::recursive_mutex::scoped_lock lock(m_tests_access);
00305   m_tests.push_back(shared_ptr<TestAlgs>(new TestAlgs(testdata) ) );
00306 
00307    
00308 }
00309 
00310 
00311 
00312   /*
00313 void ArchivingWorkerGroup::RawScanWork(shared_ptr<const RawScanResult> raw) throw() {
00314       cout<< "RawScanResult created"<<endl;
00315       
00316        
00317 
00318         unsigned long runno = raw->getHeader().getRunNumber();
00319         unsigned long scanno = raw->getHeader().getScanNumber();
00320         
00321         while (findTest(runno, scanno).get() == 0  ) {
00322           //sleeping: waiting to get Test in the List
00323           sleep(1);
00324           cout<<"RawScanWork: I am sleeping"<<endl;
00325         }
00326         
00327         
00328         
00329         //archive RawScan: 
00330         cout << "Archiving  RawScanResult: " << endl;
00331         
00332           ArchRawScanResult archraw(raw);
00333           archraw.SetUNIXDir(); 
00334           string testName = findTest( runno, scanno )->getTest().testName;
00335           //cout <<"TestName = " << testName<<endl;
00336           archraw.SetTestType(testName);
00337           cout<<"I am here" <<endl;
00338           //{
00339           //boost::recursive_mutex::scoped_lock lock(m_file_access);   
00340           //AT archraw.SaveRawScan();
00341           archraw.Save();
00342           //}
00343       
00344       cout<< "RawScanResult Correctly Saved " << endl;
00345       return;
00346      
00347      
00348 }
00349 
00350 
00351 
00352 void ArchivingWorkerGroup::FitScanWork(shared_ptr<const FitScanResult> fit) throw() {
00353           cout<< "FitScanResult created"<<endl;
00354 
00355       unsigned long runno = fit->getHeader().getRunNumber();
00356       unsigned long scanno = fit->getHeader().getScanNumber();
00357       while (findTest( runno, scanno ).get() == 0  ) {
00358         //sleep:  waiting to get Test in the List
00359         sleep(1);
00360         cout<<"FitScanWork: I am sleeping"<<endl;
00361 
00362       }
00363         //archive FitScan:
00364         cout << "Archiving  FitScanResult: " << endl;
00365         ArchFitScanResult archfit(fit);
00366         archfit.SetUNIXDir(); 
00367         string testName = findTest(runno, scanno)->getTest().testName;
00368         //cout <<"TestName = " << testName<<endl;
00369         archfit.SetTestType(testName);
00370         //{
00371         //boost::recursive_mutex::scoped_lock lock(m_file_access);
00372         //AT archfit.SaveFitScan();
00373         archfit.Save();
00374           //}
00375         cout<< "FitScanResult Correctly Saved " << endl;
00376         return;
00377      
00378       
00379       
00380 }
00381   */
00382 
00383 
00384 //TestAlgs methods
00385 
00386 ArchivingWorkerGroup::TestAlgs::~TestAlgs() {
00387   //AT boost::recursive_mutex::scoped_lock lock(m_access);
00388 
00389     //We need to explicitly delete the list here so the lock is in force
00390     //Note that this just removes the pointer..actual deletion will only occur
00391     //if noone else has grabbed a reference to the object
00392    //AT  m_algorithms.clear();
00393 }
00394 
00395 ostream& ArchivingWorkerGroup::TestAlgs::printStatus(ostream& os) const throw() {
00396     //AT boost::recursive_mutex::scoped_lock lock(m_access);
00397     os << "   Test name: "  << getTest().testName 
00398        << ", run number = " << getTest().runNumber
00399        << ", first scan number = " << getTest().startScanNumber
00400        << ", nscans = " << getTest().nScans 
00401        <<  endl;
00402 
00403     
00404     return os;
00405 }
00406 
00407 
00408 
00409 
00410 
00411 
00412 
00413 
00414 }

Generated on Thu Jul 8 11:41:08 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5